ZyZu, nem nagyon értem mit akarsz. A SA-MP belsõleg is azt teszi a PickUpoknál is, hogy egyfolytában csekkol minden letett pickupot, és, ha közelében vagy meghívja az eljárást. Pawnban sem tudod máshogy megoldani, és szerintem tökéletesen jó OnPlayerUpdate alá is. Akkor nem kell plusz rengeteg timert létrehozni, csak egyet használ, az is alapból meg van hívva. Így mûködik az OnPlayer(Key)StateChange is. Egyfolytában lekéri az álllapotodat, és, ha a kitétele teljesül (nem egyenlõ a (key)state az elõzõvel, akkor calllocalfunction. A streamer enumjához sajnos nem tudunk hozzáférni pawnból, a készítõ nem adott a 3dtextekhez ilyen funkciót, így ha nem akarod minden egyes létrehozás mellé a változót is létrehoznod, hookolnod kell. Az azt jelenti, hogy egy meglévõ funkciót undefiniálsz, majd lényegében visszadefiniálod egy másik stockra, ami már tartalmazza az általad beírt módosítást, pl. egy timer indítása. Basszameg, tényleg jobb lenne Timerrel
#define FILTERSCRIPT#include a_samppublic OnFilterScriptInit() {SetTimer(\"OnPlayerUpdate2\", 500, true);return 1;}//OnPlayerConnect: A PVarok értéke alapbol 0, ezért nem kell ez a sor ide, hogy: SetPVarInt(playerid, \"InZone\", 0);forward OnPlayerUpdate2();public OnPlayerUpdate2() {for(new i; i < MAX_PLAYERS; i++) {if(!IsPlayerConnected(i)) continue;if(IsPlayerInRangeOfPoint(i, 2.0, 0.0, 0.0, 3.0) && !GetPVarInt(i, \"InZone\")) { // A 3DText koordinátái SetPVarInt(i, \"InZone\", 1); // IdeHogy mi történjen ha az adott zónában van a játékos(ok)}else if(GetPVarInt(i, \"InZone\")) SetPVarInt(i, \"InZone\", 0);}return 1;}
enum Erzekeles{sajt}new Benne[MAX_PLAYERS][Erzekeles];new Float: bX, Float: bY, Float: bZ, id;if(Benne[playerid][sajt] == 0){if(IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ)){ //Amit szeretnél, hogy mi történjen, ha 1méteren belül van. Benne[playerid][sajt] = 1; SetTimerEx(\"Sajtindito\", 1000, false, \"i\", playerid);}}forward Sajtindito(playerid)public Sajtindito(playerid){if(!IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))Benne[playerid][sajt] = 0;return 1;}