GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ShaDowxx™ le 06 Mai 2012, 18:28:13
-
Bonsoir,
J'ai un petit problème avec cette commande:
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.
-
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 ;)
-
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 ?
-
UP !!!
-
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 ^^.
-
Je comprends pas ...
-
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.
-
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.
-
Au contraire, il est très léger.
-
Si tu le dit, j'ai rien à dire d'autre.
Merci beaucoup à vous tous :-*
Cordialement.
-
Au faite, quelles sont les modifications que tu as apporté que je corrige mon code ?
-
Le temps du Timer ;)