• 23 Avril 2025, 02:51:01


Auteur Sujet: Problème SetTimer avec une commande  (Lu 1838 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Problème SetTimer avec une commande
« le: 06 Mai 2012, 18:28:13 »
Bonsoir,

J'ai un petit problème avec cette commande:

Code: (pawn) [Sélectionner]
if(!strcmp("/volervendeur", cmdtext, true))
{
    if(IsPlayerInRangeOfPoint(playerid, 5.0,-1657.6091,1210.7561,7.2500))
    {
        SendClientMessage(playerid,-1,"{FFFFFF}Vous venez de voler le {FF0000}Vendeur de Voiture {FFFFFF}!");
        GivePlayerMoney(playerid,500);
        SpawnPlayer(playerid);
}
else
{
    SendClientMessage(playerid,-1,"{FF0000}Vous n'êtes pas près du lieu !");
}
return 1;
}

Et je voudrais mettre un Timer dans cette commande pour éviter l'abus. Je ne sait pas où la mettre, pouvez-vous m'aider ?


Merci beaucoup !

Cordialement, ShaDowxx.

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #1 le: 06 Mai 2012, 19:17:43 »
Tu peux faire une variable par joueur (new VolEffectue[MAX_PLAYERS];), quand il tape la commande tu attribues une valeur à cette variable (disons 300 pour 5 minutes).
Dans la fonction créée par le timer (qui se répète toutes les secondes), tu retires 1 à la variable pour chaque joueur, enfin tu n'autorises l'action que si la valeur de la variable est inférieure à 0 ;)

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #2 le: 07 Mai 2012, 07:31:52 »
Donc :  VolEffectue[MAX_PLAYERS] = 0;
VolEffectue[MAX_PLAYERS] = 1; ?

Et pour le Timer je configure comme sur le wiki en changeant le nombre de secondes ?

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #3 le: 08 Mai 2012, 16:31:24 »
UP !!!

Hors ligne NevadaKee

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #4 le: 10 Mai 2012, 23:07:31 »
Je pense plutôt :
VolEffectue[playerid] = 0; Au debut

VolEffectue[playerid] = 300; Lorsque qu'il a fait la commande ( 300 par exemple )

Puis tu met un timer qui retire 1 à la variable toute les secondes par exemple
VolEffectue[playerid] = 299;
VolEffectue[playerid] = 298;
etc.. Jusqu'a 0 et alors il pourra refaire la commande ^^.

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #5 le: 12 Mai 2012, 09:25:43 »
Je comprends pas ...

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Problème SetTimer avec une commande
« Réponse #6 le: 12 Mai 2012, 12:39:48 »
Variable globale:

new iRobTime[MAX_PLAYERS] = {0};
new oRobTimer;

Fonction OnGameModeInit ou OnFilterScriptInit:

oRobTimer = SetTimer("RobTimer", 1000, true);
Fonction OnGameModeExit ou OnFilterScriptExit:

KillTimer(oRobTimer);
Fonctions:

public RobTimer() {
    for (int i = 0; i < MAX_PLAYERS; i++) {
        if (iRobTime[i] > 0) {
            iRobTime[i]--;
        }
    }
}

public CanRob(playerid) {
    if (iRobTime[playerid] == 0) {
        return true;
    }
   
    return false;
}

public Rob(playerid) {
    if (IsPlayerInRangeOfPoint(playerid, 5.0, -1657.6091, 1210.7561, 7.2500)) {
        if (CanRob(playerid)) {
            SendClientMessage(playerid, -1, "{FFFFFF}Vous venez de voler le {FF0000}Vendeur de Voiture {FFFFFF}!");
            GivePlayerMoney(playerid, 500);
            SpawnPlayer(playerid);
           
            iRobTime[playerid] = 300;
        }
        else {
            new sString[128] = "";
           
            format(sString, sizeof(sString), "Il reste %i secondes avant de pouvoir effectuer le prochain vol.", iRobTime[playerid]);
            SendClientMessage(playerid, 0xFFFFFFFF, sString);
        }
    }
    else {
        SendClientMessage(playerid, -1, "{FF0000}Vous n'êtes pas près du lieu !");
    }
}

Fonction OnPlayerCommandText:

if (!strcmp("/volervendeur", cmdtext, true)) {
    Rob(playerid);
   
    return 1;
}

Ce code devrait normalement fonctionner, il a été entièrement fait sur le forum, donc il peut très certainement avoir des erreurs.

iRobTime[playerid] = 300;
Cette ligne correspond au temps à attendre entre chaque vol en seconde, dans ce cas, 5 minutes.
Le timer RobTimer se charge d'enlever une seconde à cette variable à tous les joueurs toutes les secondes.
Si cette variable est à zéro, le joueur peut effectuer un vol, sinon, un petit message d'erreur s'affiche avec le temps en seconde qui reste à attendre.

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #7 le: 13 Mai 2012, 09:56:27 »
C'est un beau code mais je le trouve très lourd sinon il fonctionne très bien (avec quelques corrections d'erreurs).
On peut pas faire beaucoup plus simple avec juste un Timer qui s'applique pour toutes les commandes ?

Cordialement.

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Problème SetTimer avec une commande
« Réponse #8 le: 13 Mai 2012, 12:03:36 »
Au contraire, il est très léger.

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #9 le: 13 Mai 2012, 13:48:12 »
Si tu le dit, j'ai rien à dire d'autre.

Merci beaucoup à vous tous :-*

Cordialement.

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Problème SetTimer avec une commande
« Réponse #10 le: 13 Mai 2012, 19:51:15 »
Au faite, quelles sont les modifications que tu as apporté que je corrige mon code ?

Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
Re : Problème SetTimer avec une commande
« Réponse #11 le: 14 Mai 2012, 07:08:16 »
Le temps du Timer ;)