Szerző Téma: Timerrel parancs  (Megtekintve 926 alkalommal)

Timerrel parancs
« Dátum: 2011. június 20. - 22:22:19 »
0 Show voters
Üdv!
Azt szeretném kérdezni, hogy olyat mivel lehet csinálni, hogy ha beírom a /xdd parancsot akkor elinduljon egy 1perces timer, és ha 1percen belül ismét beírom, akkor kickelje az illetõt. Nagyon kéne Köszi.

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Timerrel parancs
« Válasz #1 Dátum: 2011. június 20. - 23:02:53 »
0 Show voters
[pawn]
new bool: bActivated[ MAX_PLAYERS ];
public OnPlayerConnect( playerid ) {
    bActivated[ playerid ] = false;
    return 1;
}
public OnPlayerCommandText( playerid, cmdtext[  ] ) {
    if( !strcmp( \"/xdd\", cmdtext, true ) ) {
        if( bActivated[ playerid ] ) {
            bActivated[ playerid ] = false;
            Kick( playerid );
        } else {
            bActivated[ playerid ] = true;
            SetTimerEx( \"valami\", 60000, false, \"d\", playerid );
        }
        return 1;
    }
    return 0;
}
public valami( playerid );
public valami( playerid ) {
    bActivated[ playerid ] = false;
    //egyéb dolgok
}
[/pawn]

Timerrel parancs
« Válasz #2 Dátum: 2011. június 21. - 08:56:20 »
0 Show voters
Zero, egy kis leírást tudsz mellékelni?:D nem értem:S

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
Timerrel parancs
« Válasz #3 Dátum: 2011. június 21. - 10:51:56 »
+1 Show voters
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.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal