Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Eventy

eventy

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
51 odpowiedzi w tym temacie

#1 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.07.2008 15:13

*
Popularny

Postaram sie przedstawic najwazniesze eventy do cs'a, wraz z codem wystarczajacym do pozniejszego korzystania z niego O:)

Ps. podam tylko sprawdzone metody i nie będę przytaczal jakie sa bledne metody (szczegolnie nowa runda jest pare metod w tym 1 bledna, czesto stosowana).

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 <amxmodx>
#include <amxmisc>
 
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)...

Poczatek Rundy


Poczatek rudny to jak sie freeze skonczy - mozna sie ruszac ;-)
#include <amxmodx>
#include <amxmisc>
 
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 <amxmodx>
#include <amxmisc>
 
public plugin_init() {
	register_logevent("Koniec_Rundy", 2, "1=Round_End")
}
 
public Koniec_Rundy()
{
	//code
}

Damage - obrazenia


#include <amxmodx>
#include <amxmisc>
 
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 - ktos umarl


#include <amxmodx>
#include <amxmisc>
 
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 sa sobie rowne gdy zabije cie wlasna 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 wywolana.

#include <amxmodx>
#include <amxmisc>
 
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 przeladowaniu.

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 <amxmodx>
#include <amxmisc>
 
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 Dołączona grafika

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 <amxmodx>
#include <amxmisc>
 
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 <amxmodx>
#include <amxmisc>
 
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
}

Wejscie 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 <amxmodx>
#include <amxmisc>
 
public plugin_init() {
	register_event("Health", "Health", "be")
}
 
public Health(id)
{
	new health = read_data(1)
 
	//code	
}


Money - zmiana w kasie


#include <amxmodx>
#include <amxmisc>
 
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 <amxmodx>
#include <amxmisc>
 
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 <amxmodx>
#include <amxmisc>
 
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

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

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) )


PS. Jak będę mial czas to dodam wiecej O:)
PS2. Jak cos nie dziala to dajcie znac, bo nie wszystko mialem czas sprawdzic przed daniem na forum.

PS3. Jestem autorem tego poradnika i wolno tylko kopiowac za moja zgoda... Nie [you] nie mozesz kopiowac!
  • +
  • -
  • 60

#2 Salamon

    Profesjonalista

  • Użytkownik

Reputacja: 43
Pomocny

  • Postów:199
Offline

Napisano 02.07.2008 17:06

round_start, round_end, ani damage, nie jest na id
  • +
  • -
  • 0

#3 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.07.2008 18:00

Salamon, Demage jest na ID, testowane i nawet napisalem vid == id, poza tym sama flaga eventu pokazuje, ze jest to zwiazane z konkretnym graczem :]

Edit2: Jak jest id przy poczatku i koncu rundy to ma wartosc zero :DD i mnie zmylilo przy client_print(id...) xD

[ Dodano: 02-07-2008, 20:03 ]
PS. Pomoze ktos to potwierdzic:
#include <amxmodx> 
#include <amxmisc> 

public plugin_init() { 
    register_event("RoundTime", "Round_Time", "bc")
} 

public Round_Time(id) 
{ 
	new Time = read_data(1) 

	client_print(0,print_chat,"%d time: %d",id,Time)  
}

Z tego wynika mi ze event jest wywolywany tylko gdy jest zmieniany czas odliczania od (to znaczy ze nowa runda mp_roundtime 6 (6 min) to wyswietla mi tylko 300 a nie ce sekunde 299 298... ;> )...
  • +
  • -
  • 0

#4 Salamon

    Profesjonalista

  • Użytkownik

Reputacja: 43
Pomocny

  • Postów:199
Offline

Napisano 02.07.2008 20:16

najwyrazniej tak dziala bo probowalem ze wszystkimi flagami ^.^

zeby manipulowac w zegarku trzeba dac taki chwyt
cos = get_user_msgid("RoundTime")
  • +
  • -
  • 0

#5 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.07.2008 20:20

Salamon, Jak juz poruszasz temat to napisz porzadnie, poza tym cos malo tego by czymkolwiek manipulowac :lol:
  • +
  • -
  • 0

#6 Salamon

    Profesjonalista

  • Użytkownik

Reputacja: 43
Pomocny

  • Postów:199
Offline

Napisano 02.07.2008 20:39

np zmienic ten 'czas' mozna za pomoca
message_begin(MSG_BROADCAST, get_user_msgid("RoundTime"), _, id)
write_short(czas)
message_end()

gdzie czas nie jest float'em tylko zwykla liczba, mozemy np w jakims momencie gry zrobic taki chwyt i zrobic task na ten czas by cos po tym czasie zrobil ;]
  • +
  • -
  • 0

#7 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 02.07.2008 21:33

Salamon, mi chodzilo o to bys zrobil z tego toturial i by to nie odnosilo sie tylko do czasu (ktoryu jest banalany ze wzgledu, ze ma tylko 1 parametr)...
  • +
  • -
  • 0

#8 krysteck

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:12
Offline

Napisano 26.07.2008 20:48

Demage - obrazenia

literówka, damage

Thx
  • +
  • -
  • 0

#9 silversurfer

    Profesjonalista

  • Użytkownik

Reputacja: 37
Życzliwy

  • Postów:209
  • Lokalizacja:Poznań
Offline

Napisano 27.07.2008 02:42

kozystania

korzystania

przytaczal

przeczytal

Jak to mówią, diabeł tkwi w szczegółach.
  • +
  • -
  • 0

#10 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 27.07.2008 09:58

Akurat to 2 slowo jest dobre silversurfer xD

przytaczać
  • +
  • -
  • 0

#11 silversurfer

    Profesjonalista

  • Użytkownik

Reputacja: 37
Życzliwy

  • Postów:209
  • Lokalizacja:Poznań
Offline

Napisano 28.07.2008 00:42

Miczu, Hihih było późno :D
Spoko każdy popełnia błędy ^^
ale, ale 1 źle heh ;]
  • +
  • -
  • 0

#12 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 10.08.2008 20:59

@Miczu
event Health update'uje sie tak samo jak money, przy zmianie ilości HP?
  • +
  • -
  • 0

#13 Seba

    Wszechobecny

  • Zbanowany

Reputacja: 198
Profesjonalista

  • Postów:424
  • Lokalizacja:Internet
Offline

Napisano 11.08.2008 00:02

ta

#14 michal2142

    Początkujący

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:18
Offline

Napisano 03.01.2009 15:48

Jaki jest event jeśli chce się wstawić kod by dzialal 6 sekund przed startem rundy???
  • +
  • -
  • 0

#15 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.01.2009 16:06

Jaki jest event jeśli chce się wstawić kod by dzialal 6 sekund przed startem rundy???

można albo dać coś po zakończeniu rundy lub rozpoczęciu rundy. ale nie ma czegoś takiego żeby wykonać 6 sekund przed rozpoczęciem (chyba że znasz przyszłość).
  • +
  • -
  • 0

#16 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 03.01.2009 16:07

6 sekund przed startem rundy = 6 sekund przed końcem rundy. Amxx musiałby być jasnowidzem, żeby dało się to zrobić.
  • +
  • -
  • 0

#17 skuziak

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:37
  • Lokalizacja:Stolica
Offline

Napisano 03.03.2010 22:34

Którego eventa mam użyć ew. jak to zrobić żeby mój plugin zaczął działać na początku nowej mapy oraz po jej restarcie (czyt. komenda amx_cvar sv_restartround 1)
  • +
  • -
  • 0

#18 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 04.03.2010 12:15

public plugin_precache(){}
public plugin_init(){}
public plugin_cfg(){}

te funkcje są wykonywane na początku mapy w takiej kolejności


public plugin_init(){
register_event( "TextMsg", "eventRestart", "a", "2&#Game_will_restart_in" );
}
public eventRestart(){

}

  • +
  • -
  • 0

#19 Gość_deLLek_*

  • Gość

Reputacja: 0

Offline

Napisano 04.04.2010 16:50

Hmm..

Event z początkiem rundy. Ten "logevent" aby złapał ID gracza to musi być w pętli ?

#20 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 04.04.2010 17:34

#include <amxmodx>
#include <amxmisc>

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

public Poczatek_Rundy()
{
for(new id = 1;id<33;id++){
//kod
}
}

  • +
  • -
  • 1





Również z jednym lub większą ilością słów kluczowych: eventy

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych