Skocz do zawartości

[KOSZ] [PAWN] Eventy


Rekomendowane odpowiedzi

  • Właściciel
Opublikowano

Najważniejsze eventy, autor: Miczu amxx.pl

Start mapy

plugin_init()
{
       //code
}
Powyzsza funkcja jest tylko wywolywana po zmianie mapy (na samym jej poczatku).

Koniec mapy

plugin_end ( )
{
       //code
}

Powyzsza funkcja jest wywolywana przy zmianie mapy lub prawidlowym zamknieciu serwera. Prawdopodobnie nie wychwyci crasha.

Nowa Runda

#include 
#include 

public plugin_init() {
       register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0")
}

public Nowa_Runda()
{
       //code
}

Nowa runda tym sposobem omija pierwsza runde - pierwsza po zmianie mapy.

#mozliwe problemy gdy w tym evencie np: operacje na graczu typu danie broni(potwierdzone)...

Początek Rundy

Poczatek rudny to jak sie freeze skonczy - mozna sie ruszac ;-)

#include 
#include 

public plugin_init() {
       register_logevent("Poczatek_Rundy", 2, "1=Round_Start")  
}

public Poczatek_Rundy()
{
       //code
}

Koniec Rundy

Przeciwnik zabity/Bomba wybuchla/Bomba zostala rozbrojona/zakladnicy uwolnieni/minol czas rudny

#include 
#include 

public plugin_init() {
       register_logevent("Koniec_Rundy", 2, "1=Round_End")
}

public Koniec_Rundy()
{
       //code
}

Damage - obrazenia

#include 
#include 

public plugin_init() {
       register_event("Damage", "Damage", "b", "2!=0")
}

public Damage(id)
{
       new vid = read_data(0) // vid == id

       new damage = read_data(2)

       new Origins[3]                  // Wspolrzedne gracza, granatu, obiektu wywolujacego obrazenia
       Origins[0] = read_data(4)
       Origins[1] = read_data(5)
       Origins[2] = read_data(6)

       new kid = get_user_attacker(id) // Gracz atakujacy

       //code

}

DeathMsg - ktoś umarł

#include 
#include 

public plugin_init() {
       register_event("DeathMsg", "DeathMsg", "a")
}

public DeathMsg()
{
       new kid = read_data(1)  //zabojca

       new vid = read_data(2)  // ofiara

       new hs = read_data(3)   // HeadShot (1 == true)

       new weapon[64]          
       read_data(4,weapon,63)  //krotka nazwa broni (bez weapon_ / CSW_ )

       //code
}

kid i vid są sobie rowne gdy zabije cie własna bron (granat) lub np. admin uzyje slay'a...

kid == 0 gdy np. spadniesz z wysokiej wysokosci...

CurWeapon - obecna bron

Wykrywa zmiane broni - takze gdy sie sawnujesz dostajesz nowa bron i funkcja tez jest wywołana. Od siebie dodam, że jest to dobre przy nadawaniu graczowi set_user_maxspeed, bo jak wiadomo po zmianie broni gracz zmienia szybkość.

#include 
#include 

public plugin_init() {
       register_event("CurWeapon","CurWeapon","be", "1=1")
}

public CurWeapon(id)
{
       new wid = read_data(2)  // Id broni
       new ammo = read_data(3) // liczba naboi w magazynku
       //code
}

Noz, granaty itp. maja ammo = -1

Info-bronie

Z testow wynika, ze w/w event jest tez wywolywany po wystrzeleniu naboju (ammo sie zmienia) lub po przeładowaniu.

Podniesienie broni

Podniesie broni a takze kupienie. Na starcie rundy sie uruchomi gdy dostajemy noz i pistolet (2 razy). Jest wywolywany takze gdy kupimy cos, ale nie bedziemy mieli tego w rekach (np. granat).

#include 
#include 

public plugin_init() {
       register_event("WeapPickup", "WeapPickup", "b")
}

public WeapPickup(id)
{
       new wid = read_data(1) // id broni

       //code
}

Nie liczy podniesienia Shilda oraz kupienia defa, noktowizora czy kamizelki

Podniesienie amunicji

Jak kupujemy amunicje to clip daje nam wartosc ile nam przybylo. Jesli podniesiemy M4A1 co ma 24 w broni i 90 w zapasie to clip bedzie mial wartosc 90, a nie 114. Jak drop'niemy i podniesiemy wlasna bron to event nie zostanie wywolany.

#include 
#include 

public plugin_init() {
       register_event("AmmoPickup", "AmmoPickup", "b")
}

public AmmoPickup(id)
{
       new aid = read_data(1)   //id amunicji
       new clip = read_data(2)  //ilosc naboi

       //code
}

Amunicja

Aktualny stan amunicji w 'zapasie'. Jak kupujemy ammo to clip ma laczna wartosc naboi w magazynku. Jak podniesiemy po kims bron np. AK 25 i 90 w zapasie to clip wynosi 90.

Na poczatku rundy wszystkie typy naboi za wyjatkiem tych do ktorych mamy bron sa zerowane. Jak kupujemy granaty to clip ma wartosc rowna ilosci danego typu np. flash max 2...

#include 
#include 

public plugin_init() {
       register_event("AmmoX", "AmmoX", "b")
}

public AmmoX(id)
{
       new aid = read_data(1)
       new clip = read_data(2)

       client_print(id,print_chat,"id %d aid %d clip %d",id,aid,clip)

       //code
}

Wejście na server

Juz widzisz mape ;-)

public client_putinserver(id){
       //code
}

Polaczenie z serwerem

Czyli gdy np. w konsoli napiszesz connect IP:PORT

public client_connect(id)
{
       //code
}

Rozlaczenie sie z serwerem

public client_disconnect(id)
{
       //code
}

Health - Zycie

#include 
#include 

public plugin_init() {
       register_event("Health", "Health", "be")
}

public Health(id)
{
       new health = read_data(1)

       //code  
}

Money - zmiana w kasie

#include 
#include 

public plugin_init() {
       register_event("Money", "Money", "be")
}

public Money(id)
{
       new Money = read_data(1)

       //code  
}

TeamInfo - informacjie o Teamie

Ogolny wyglad eventu:

#include 
#include 

public plugin_init()
{
       register_event("TeamInfo","team_assign","a")
}

public team_assign()
{
       new id = read_data(1)
       new Team[32]
       read_data(2,Team,31)    //UNASSIGNED
                               //TERRORIST
                               //CT
                               //SPECTATOR
}

Ale trzeba sie tu pilnowac! Z moich badan wynika ze event jest wywolywany za kazdym spawnem i dodatkowo przy wyborze z menu teamu.

Jesli chcemy wykrywac autentyczna zmiane druzyny musimy zastosowac taki zabieg (chyba najoptymalniej i do tego czysto):

#include 
#include 

public plugin_init()
{
       register_event("TeamInfo","team_assign","a")
}

public team_assign()
{
       static old_team[33]
       new tid
       new id = read_data(1)
       new Team[32]
       read_data(2,Team,31)    //UNASSIGNED
                               //TERRORIST
                               //CT
                               //SPECTATOR
       if(equal(Team,"UNASSIGNED")) tid = 0
       else if(equal(Team,"TERRORIST")) tid = 1
       else if(equal(Team,"CT")) tid = 2
       else if(equal(Team,"SPECTATOR")) tid = 3

       if(old_team[id]==tid) return PLUGIN_CONTINUE    //jesli druzyna sie nie zmienila to przerywamy event

       old_team[id] = tid                              //zapisujemy nowy team

       /*code

       //koniec code */
       return PLUGIN_CONTINUE          // skoro juz uzylismy returna to musimy tez na koniec go dac
}

=================================================

Eventy wywolane przez:

register_logevent

nie maja parametru id - a mowiac inaczej jak dodamy parametr id, to bedzie mial wartosc 0

należy utworzyć pętle for(new i=0 / 1...)

=================================================

Flagi do eventow:

"a" - Global Event - wysylany do all graczy (mozliwy jest brak mozliwosci podpiecia id do eventu np. DeathMsg)

"b" - Event sent to a single target - do konkretnego gracza (zwiazany z pojedynczym graczem - demage)

"c" - Send only once when repeated to other players - tylko raz gdy jest powtarzany u innych graczy.

"d" - Only if sent to a dead player - tylko u martwych graczy

"e" - Only if sent to an alive player - tylko u zywych graczy ( przed wersja 1.80 jest bug, wiec i tak wypada sprawdzac is_user_alive(id) )

  • 4 miesiące temu...
  • 4 lata później...
  • Właściciel
Opublikowano

Wiadomość została wygenerowana automatycznie.

 

Ten temat został oznaczony przez Moderatora jako spam i wyrzucony do -> archiwum.

Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Polityka prywatności