GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: vardanega le 11 Novembre 2010, 14:43:03
-
Bonjour, j'ai créer un petit système d’intérieur pour mon GM mais j'ai un soucie.
Quand j'utiliser une commande qui doit testé si le joueur et dans un intérieur spécifique le code ne fonctionne pas, pourtant je suis a même pas 2 mètre du point exacte donc le code devrait logiquement fonctionné mais il me renvoie mon else.
J'ai même essayé de mettre 150 metre mais rien n'y fait.
Voici le code:
<?php
enum sHInfo
{
Float:SHEntrancex,
Float:SHEntrancey,
Float:SHEntrancez,
Float:SHExitx,
Float:SHExity,
Float:SHExitz,
SHInt,
SHVW,
SHInfo[64],
SHType[MAX_TYPES]
};
new ShopInfo[14][sHInfo];
//En tete de mon code
for(new l = 0; l < sizeof(ShopInfo); l++)
{
if(IsPlayerInRangeOfPoint(playerid, 150, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
?>
Merci pour votre aide,
Vincent.
-
Salut,
à première vue le problème vient du bout de code que tu ne nous montre pas.
Tu devrais avoir une boucle de ce genre:
new found = false;
new string[128];
new interior = GetPlayerInterior(playerid);
for(new l = 0; l < sizeof(ShopInfo); l++)
{
if(IsPlayerInRangeOfPoint(playerid, 150, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]) && ShopInfo[l][SHInt] == interior)
{
found = true;
printf("Le joueur %d est dans l'intérieur %d (%d, %f, %f, %f)", playerid, l, ShopInfo[l][SHInt], ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]);
format(string, sizeof(string), "Tu es dans l'intérieur %d (%d, %f, %f, %f).", l, ShopInfo[l][SHInt], ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]);
SendClientMessage(playerid, 0x00FF00FF, string);
}
}
if(found == false)
{
SendClientMessage(playerid, 0xFF0000FF, "Tu n'es dans aucun intérieur de la liste!");
}
reste à voir comment tu as codé la suite.
++Sim++
-
Voici la commande qui ne fonctionne pas malgré le bon fonctionnement apparent du code !
<?php
if(strcmp(cmd, "/chercher", true) == 0)
{
if(GetPlayerTeam(playerid) != TEAM_ZOMBIE)
{
for(new l = 0; l < sizeof(ShopInfo); l++)
{
if(PlayerToPoint(150, playerid, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
if(ShopInfo[i][SHType] == 2)
{
if(varnourri[playerid] == 0)
{
ChercheNourriture(playerid);
SetTimer("tpsarme1",300000, 0);
}
else
{
SendClientMessage(playerid,0xE2BB1DFF,"Vous devez attendre 5 minutes entre chaque recherche.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas dans un 24/7 !");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 150.0, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
if(ShopInfo[l][SHType] == 1 && GetPlayerInterior(playerid) == ShopInfo[l][SHInt])
{
if(vararme[playerid] == 0)
{
ChercheArme(playerid);
SetTimer("tpsarme1",300000, 0);
return 1;
}
else if(vararme[playerid] == 1)
{
SendClientMessage(playerid,0xE2BB1DFF,"Vous devez attendre 5 minutes pour refaire la commande.");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas dans un ammunation !");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Les zombies ne peuvent pas chercher !");
}
return 1;
}
?>
Merci,
Vincent.
-
Lu'
Regarde :
if(ShopInfo[SHType] == 2)
normalement pawno devais te mettre une erreur, et donc tu n'a pas pu tester :)
-
Alors la je me sens vraiment tres bête :-\ Une telle erreur aurait du etre vue !
En tout cas merci !
-
alors
soit tu supprime ceci
else
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
car il fait si tu es pres du x y e du ShopInfo 0 alors ç va, si non, il te dit Vous n'ete pas au bon endroit !
et le return 1; met fin a la boucle
soit tu fait
new id=-1;
for(new l = 0; l < sizeof(ShopInfo); l++)
{
if(PlayerToPoint(150, playerid, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
id=i;
}
}
if(i==-1)
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
else
{
...
}
-
Scott, le script là comme il est, est très bien :)
C'est si le script étais comme ça :
if(PlayerToPoint(150, playerid, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
Que tu aurais eu raison... :)
Dans le cas présent, le script il va vérifier, si la position est bonne. Si c'est le cas il continue, sinon il passe au else ^^
Edit : remplace PlayerToPoint par IsPlayerInrangeOfPoint et n'oublie pas de changer l'ordre des paramètres :)
-
Scott, le script là comme il est, est très bien :)
C'est si le script étais comme ça :
if(PlayerToPoint(150, playerid, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
Que tu aurais eu raison... :)
Dans le cas présent, le script il va vérifier, si la position est bonne. Si c'est le cas il continue, sinon il passe au else ^^
Edit : remplace PlayerToPoint par IsPlayerInrangeOfPoint et n'oublie pas de changer l'ordre des paramètres :)
J'ai relut le code et je pense avoir raison.
Mais bon peut etre l'ais je mal lu...
-
Scott, le script là comme il est, est très bien :)
C'est si le script étais comme ça :
if(PlayerToPoint(150, playerid, ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
SendClientMessage(playerid, COLOR_RED, "Vous n'ete pas au bon endroit !");
return 1;
}
Que tu aurais eu raison... :)
Dans le cas présent, le script il va vérifier, si la position est bonne. Si c'est le cas il continue, sinon il passe au else ^^
Edit : remplace PlayerToPoint par IsPlayerInrangeOfPoint et n'oublie pas de changer l'ordre des paramètres :)
Merci pour votre aide mais j'ai déja essayé de changer la fonction mais rien n'y fait ! je pense que je fait faire deux commandes séparé comme ca il n'y aura plus de problème.
Pensez vous que ca pourait venir du: for(new l = 0; l < sizeof(ShopInfo); l++) "l" qui n'est pas remis a zéro ?
Vincent.
-
Dans ta boucle for, tu créé une variable qui servira juste pour cette boucle. Cette dernière, tu l'a créé et initialisé à 0 puis tu l’incrémente tant qu'elle n'est pas égale à ShopInfo ;)
-
Le problème persiste toujours je n'est trouvé aucune solution pour l'instant.
Vincent