GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: dydy5910 le 09 Juin 2011, 20:27:51
-
Bonjour j'ai eu un code pour freez un joueur le voici :
{
SetPlayerCheckpoint(playerid, 1689.4838,-1954.1206,13.5469, 10.0);
TrainRoute[playerid] = 6;
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
SetTimerEx("busroutestoptimer", 10000, false, "i", playerid);
TogglePlayerControllable(playerid, 0);
SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0, 0.0);
SetPlayerVelocity(playerid,0.0,0.0,0.0);
new Float:X,Float:Y,Float:Z,Float:VX,Float:VY,Float:VZ ;
new Veh=GetPlayerVehicleID(playerid);
GetVehicleVelocity(Veh,VX,VY,VZ);
GetVehiclePos(Veh,X,Y,Z);
SetVehicleVelocity(Veh,0,0,0);
SetVehiclePos(Veh,X+VX,Y+VY,Z+VZ);
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "Vous devez attendre 10 secondes.");
return 1;
}
public busroutestoptimer(playerid)
{
if(IsPlayerConnected(playerid))
{
new newcar = GetPlayerVehicleID(playerid);
if(IsABus(newcar))
{
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "Vous pouvez y allez!");
}
if(IsAJobPlane(newcar))
{
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "Vous pouvez y allez!");
}
if(IsATrain(newcar))
{
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "Vous pouvez y allez!");
}
}
}
Le seul problème c'est que quand j'arrive sur mon chekpoint sa me freez mais sa me defreez pas :s au bout de 10 seconde si quelqu'un connait l'erreur merci ...
-
As tu ajouté le le Forward ?
forward busroutestoptimer(playerid);
public busroutestoptimer(playerid)
{
// Ton CODE
return 1;
}
-
Oui mais je pense que c'est le 10 seconde qui fonctionne pas :s
-
As tu ajouté le le Forward ?
forward busroutestoptimer(playerid);
Dans Ta commande tu met sa
SetTimerEx("busroutestoptimer", 8000, 0, "i", playerid);
Après tu rajoute :
public busroutestoptimer(playerid)
{
// Et Après les 8000 sec Voila se qui se passe , tu peut défreeze a se moment "TogglePlayerControllable(playerid, 1);"
return 1;
}
-
je vais tester sa tout de suite je te dit sa dans 10 min !
-
D'accord j'attend :D
-
Pour être sûr que c'est le timer qui ne fonctionne pas, rajoute des printf avant l'appel du timer et au début de la fonction du timer :
printf ("----> Avant l'appel au timer");
SetTimerEx("busroutestoptimer", 10000, false, "i", playerid);
TogglePlayerControllable(playerid, 0);
...
public busroutestoptimer(playerid)
{
printf ("----> Début fonction timer");
...
Si, au bout de 10 s, tu n'a que le premier printf dans la fenêtre noire du serveur c'est qu'effectivement le timer n'est pas appelé (ce qui m’étonnerais fortement)
Par contre, si tu as bien les deux affichages, c'est qu'aucun des tests qui se trouvent dans busroutestoptimer n'est vérifié et qu'aucun code n'est exécuté.
D'ailleurs, dans ton cas, je ne vois pas à quoi servent ces tests dans cette fonction, ils devraient plutôt se trouver dans l'autre partie de script.
On ne freeze le joueur que si il est en bus, en avion ou en train. Ensuite, si la fonction de timer est appelée c'est que le joueur est forcément freeze donc on le défreeze sans condition :
public busroutestoptimer(playerid)
{
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, TEAM_AZTECAS_COLOR, "Vous pouvez y aller!");
}
NB : Au passage : "Vous pouvez y aller !
++
Syg
-
@Syg Mon code est faux ?
-
Merci a vous 2 mon problème vous l'avez résolu :p
-
Salut,
ça devrait être dans la section Scripting center ça, pas problèmes et bug...
++Sim++
-
@D4MI3N: 8000 millisecondes ne sont pas 8000 secondes mais 8 secondes ;).
-
@Xartrick Oui désoler je me suis tromper :)