Szerző Téma: Egyedi esemény(callback) létrehozása  (Megtekintve 1885 alkalommal)

Kovacs_Bela

  • Vendég
Egyedi esemény(callback) létrehozása
« Dátum: 2012. augusztus 22. - 16:35:01 »
+1 Show voters
Üdv!
(bocs ha van már ilyen téma)
Nem rég rájöttem hogy hogyan lehet egyedi callbacket létrehozni.
Legyen szó pl: OnPlayerChangeSpecialTeam(playerid,newteam)
Ez jelen esetben egy olyan eljárás, amikor a játékos egy \"mesterséges\" változó értékét (csapatváltozó) megváltoztatja.
Ez nyilván egy dinamikus csapat scriptben van benne.
Most én rögtönöztem egy \"filterscript-include\"-t.
(nem teszteltem, lehet hogy nem is mûködik)
Lássuk.
A magyarázat a scriptben van!
 

#tryinclude <a_samp> //megpróbáljuk elõhívni az a_samp nevezetû include-t.
#tryinclude <zcmd> //ugyan ez, csak most zcmd-vel.
#tryinclude <sscanf2> // lásd feljebb :D
new csapat[MAX_PLAYERS]; //létrehozzuk a \"mesterséges\" változót \"minden\" játékos számára. (Azért mesterséges, mert nem az alapértelmezett (samp készítõi által létrehozott) csapatváltozót használjuk.
public OnPlayerConnect(playerid) //ha a játékos csatlakozik
{
    csapat[playerid] = 0; //beállítjuk a játékos csapatját 0-ra
    return 1;
}
forward OnPlayerChangeSpecialTeam(playerid,newteam); //létrehozzuk az eseményt
CMD:csapatvalt(playerid,params[]) //parancs
{
    new team; //az új csapat
    if(sscanf(params,\"i\", team)) return SendClientMessage(playerid,-1,\"/csapatvalt [új csapat] (0-1-2)\"); //kiírjuk neki hogy hogy kell használni a parancsot
    csapat[playerid] = team;
    CallLocalFunction(\"OnPlayerChangeSpecialTeam\",\"ii\",playerid,team); //meghívjuk egy vacsorára az eseményt
    return 1;
}

 
Innentõl már használhatjuk az OnPlayerChangeSpecialTeam callbackot, mert az akkor fog bekövetkezni ( :laugh: ), amikor a játékos csapatot vált.
példa:
 
public OnPlayerChangeSpecialTeam(playerid,newteam)
{
    SendClientMessage(playerid,-1,\"Csapatot váltottál!\");
    return 1;
}

 
Köszcsá


mivel már nem sampozok, és a keresztapám (aki balatonon van) gépérõl írok így nem tudtam tesztelni :D
« Utoljára szerkesztve: 2012. augusztus 22. - 18:36:26 írta danix99 »

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Egyedi esemény(callback) létrehozása
« Válasz #1 Dátum: 2012. augusztus 22. - 16:53:46 »
+3 Show voters
Több hibát is felfedeztem, ami tesztelés nélkül is észrevehetõ.
A parancs alatt nem \"d\"-t kell használni playerid-hez, mert az általában hibás szokott lenni, hanem \"i\"-t, vagy \"u\"-t.
A \"team\" változóhoz is az \"i\" ajánlott.
A leírás végén nem is azt a callbacket használod, amit már korábban forwardoltál.
Ui.: Nem tudom te hogy vagy vele, de én nem veszem annyira viccesnek a \"meghívjuk egy vacsorára\" dumát.

Kovacs_Bela

  • Vendég
Egyedi esemény(callback) létrehozása
« Válasz #2 Dátum: 2012. augusztus 22. - 17:13:15 »
0 Show voters
köszi az észrevételt, módosítottam.
Ui.: egy kis rögtönzött poén sose árt :D

Egyedi esemény(callback) létrehozása
« Válasz #3 Dátum: 2012. augusztus 22. - 17:29:19 »
+2 Show voters
A d és az i, mind egész számot jelöl. (esetleg méretbeli különbség lehet, de nem hiszem), az u nevet és ID-t jelenthet, tehát amit írtál fölösleges \'belekötés\' volt.

Kovacs_Bela

  • Vendég
Egyedi esemény(callback) létrehozása
« Válasz #4 Dátum: 2012. augusztus 22. - 17:30:22 »
0 Show voters
Idézetet írta: TayLoR date=1345649359\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26647\" data-ipsquote-contentclass=\"forums_Topic
A d és az i, mind egész számot jelöl. (esetleg méretbeli különbség lehet, de nem hiszem), az u nevet és ID-t jelenthet, tehát amit írtál fölösleges \'belekötés\' volt.
 
ezen én is gondolkodtam de mindegy :DDD

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Egyedi esemény(callback) létrehozása
« Válasz #5 Dátum: 2012. augusztus 22. - 17:47:03 »
+1 Show voters
Nem vagyok a \'másba belekötök\' típus, aki ismer az tudja.
Egyébként én tapasztalatból beszéltem, igaz nem sok különbség van a \"d\" és az \"i\" között, de az elõbbi nekem sokszor hibás értékkel tért vissza, tudja a fene miért.

Egyedi esemény(callback) létrehozása
« Válasz #6 Dátum: 2012. augusztus 22. - 18:28:00 »
+1 Show voters
Idézetet írta: Rupert date=1345647226\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26647\" data-ipsquote-contentclass=\"forums_Topic
A parancs alatt nem \"d\"-t kell használni playerid-hez, mert az általában hibás szokott lenni, hanem \"i\"-t, vagy \"u\"-t.
 
Miért hibás a \"d\"?
Team paraméter esetén a bevitt értékhez 0 1 2 van oda írva, ami azt jelenti nem playerid értékre van szüksége a parancsnak. Akkor minek javaslod az \"u\"-t?


@danix999
 
#define MAX_PLAYERS GetMaxPlayers //nem 1000 hanem annyi amennyi a slot.

 
A pawn nem fogadja el olyan változók létrehozását melyek nincsenek elõre meghatározva.
A példádban behelyettesítve:
 
new bla[GetMaxPlayers];

 
Egy nulla lesz  new bla[0];
Gondolom a native funkciót szeretted volna meghívni, de így ez pawn nyelvben nem mûködik. Mivel a fordító nem tudja mivel tér vissza az a native funkció és nem tudja mennyi memória területet foglaljon le, ezt egy hiba üzenettel jelezni is fogja.

Egyedi esemény(callback) létrehozása
« Válasz #7 Dátum: 2012. augusztus 23. - 10:57:02 »
0 Show voters
Idézetet írta: Rupert date=1345650423\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26647\" data-ipsquote-contentclass=\"forums_Topic
Nem vagyok a \'másba belekötök\' típus, aki ismer az tudja.
Egyébként én tapasztalatból beszéltem, igaz nem sok különbség van a \"d\" és az \"i\" között, de az elõbbi nekem sokszor hibás értékkel tért vissza, tudja a fene miért.
 


case \'I\':
case \'D\':
DX(int, I)
// FALLTHROUGH
case \'i\':
case \'d\':
DO(int, I)

 
Tessék, itt a kód az sscanf 2.6 forrásából, ugyanaz a 2, csak karakterbeli különbség van közöttük.
Amúgy szép leírás, én is hasonlót csináltam az elsõ szerverembe :D

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Egyedi esemény(callback) létrehozása
« Válasz #8 Dátum: 2012. augusztus 23. - 11:00:34 »
0 Show voters
Megint elmondom, hogy anno a stunt szerómon a \"d\" hibás volt, az \"i\" pedig nem, ma sem tudom miért. :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal