Persze. Az elv a következõ: Létrehozol egy globális logikai változót( két értéke lehet, 0 és 1 ), amiben eltárolod minden játékosnak, hogy éppen fut-e a timer, vagy nem. Tekintsd ezt úgy, mint egy kapcsolót. Amikor beírja valaki a parancsot, akkor felkapcsolja a kapcsolót, tehát a változóban az õ cellájának értéke 1( azaz igaz ) lesz. Minden alkalommal, ha valaki beírja a parancsot, a végrehajtása elõtt lekérdezzük, hogy már beírta-e egyszer( tehát 1-e az értéke a cellájának ), és ha igen, akkor kickeljük. Az idõzítõ lefutásakor pedig 0-ra( hamisra ) állítjuk a változóban a játékos cellájának értékét, tehát lekapcsoljuk a kapcsolót, így megint beírhatja anélkül, hogy kidobná a szerver.
[pawn]
//.. Globális változó létrehozása minden játékos számára
new bool: bActivated[ MAX_PLAYERS ];
//.. Amikor csatlakozik valaki, akkor a cellájának értékét nullázzuk, tehát beírhatja a parancsot
public OnPlayerConnect( playerid ) {
bActivated[ playerid ] = false;
return 1;
}
public OnPlayerCommandText( playerid, cmdtext[ ] ) {
if( !strcmp( \"/xdd\", cmdtext, true ) ) {
//.. Ha már egyszer beírta a parancsot az idõzítõ lefutása elõtt, akkor kidobjuk
if( bActivated[ playerid ] ) {
bActivated[ playerid ] = false;
Kick( playerid );
//.. Ha még nem, akkor elindítjuk az idõzítõt, és igazra állítjuk a cellájának értékét
} else {
bActivated[ playerid ] = true;
SetTimerEx( \"valami\", 60000, false, \"d\", playerid );
}
return 1;
}
return 0;
}
//.. Itt pedig az idõzítõvel meghívott függvényt láthatod, itt elõször is 0-ra állítjuk a cellájának értékét
//.. a többi dolog meg amit esetleg akarsz, mármint hogy mi történjen, ha lefutott az idõzítõ
public valami( playerid );
public valami( playerid ) {
bActivated[ playerid ] = false;
//egyéb dolgok
}
[/pawn]
Azért
SetTimerEx függvényt használtam, mert szükségem volt egy paraméter - a játékos azonosító - átmentésére, hogy \'le tudjam kapcsolni a kapcsolóját\', azaz hogy megint használhassa a parancsot. Errõl részletes leírást
itt találsz.