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

Titre: Beug du IsPlayerInRangeOfPoint
Posté 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 0sizeof(ShopInfo); l++)
{
        if(
IsPlayerInRangeOfPoint(playerid150ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{

?>




Merci pour votre aide,

Vincent.
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: S!m le 11 Novembre 2010, 17:37:49
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++
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: vardanega le 11 Novembre 2010, 18:41:22
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 0sizeof(ShopInfo); l++)
{
if(PlayerToPoint(150playeridShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
    if(ShopInfo[i][SHType] == 2)
    {
if(varnourri[playerid] == 0)
{
    ChercheNourriture(playerid);
SetTimer("tpsarme1",3000000);
}
else
{
SendClientMessage(playerid,0xE2BB1DFF,"Vous devez attendre 5 minutes entre chaque recherche.");
return 1;
}
}
else
{
SendClientMessage(playeridCOLOR_RED"Vous n'ete pas dans un 24/7 !");
return 1;
}
}
else
{
SendClientMessage(playeridCOLOR_RED"Vous n'ete pas au bon endroit !");
return 1;
}
if(IsPlayerInRangeOfPoint(playerid150.0ShopInfo[l][SHExitx], ShopInfo[l][SHExity], ShopInfo[l][SHExitz]))
{
    if(ShopInfo[l][SHType] == && GetPlayerInterior(playerid) == ShopInfo[l][SHInt])
    {
    if(vararme[playerid] == 0)
{
ChercheArme(playerid);
SetTimer("tpsarme1",3000000);
return 1;
}
else if(vararme[playerid] == 1)
{
SendClientMessage(playerid,0xE2BB1DFF,"Vous devez attendre 5 minutes pour refaire la commande.");
return 1;
}
}
else
{
SendClientMessage(playeridCOLOR_RED"Vous n'ete pas dans un ammunation !");
return 1;
}
}
else
{
SendClientMessage(playeridCOLOR_RED"Vous n'ete pas au bon endroit !");
return 1;
}
}
}
else
{
SendClientMessage(playeridCOLOR_RED"Les zombies ne peuvent pas chercher !");
}
return 1;
}
?>



Merci,

Vincent.
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: chneubeul le 11 Novembre 2010, 20:21:39
Lu'

Regarde :

if(ShopInfo[SHType] == 2)

normalement pawno devais te mettre une erreur, et donc tu n'a pas pu tester :)
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: vardanega le 11 Novembre 2010, 20:43:03
Alors la je me sens vraiment tres bête   :-\  Une telle erreur aurait du etre vue !

En tout cas merci !
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: scott1 le 11 Novembre 2010, 20:43:41
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
{
...
}
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: chneubeul le 11 Novembre 2010, 21:01:23
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 :)
Titre: Re : Re : Beug du IsPlayerInRangeOfPoint
Posté par: scott1 le 12 Novembre 2010, 01:23:32
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...
Titre: Re : Re : Beug du IsPlayerInRangeOfPoint
Posté par: vardanega le 12 Novembre 2010, 09:43:31
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.
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: Myk3L le 12 Novembre 2010, 21:34:08
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 ;)
Titre: Re : Beug du IsPlayerInRangeOfPoint
Posté par: vardanega le 12 Novembre 2010, 21:56:25
Le problème persiste toujours je n'est trouvé aucune solution pour l'instant.

Vincent