Właściciel GET Opublikowano 6 Sierpnia 2012 Właściciel Opublikowano 6 Sierpnia 2012 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) )
Core Opublikowano 19 Grudnia 2012 Elitarny Fragowicz Opublikowano 19 Grudnia 2012 Dobry poradnik ziom ;) Browar sie poleje . . .
Właściciel GET Opublikowano 6 Czerwca 2017 Autor Właściciel Opublikowano 6 Czerwca 2017 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.
Rekomendowane odpowiedzi