GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 01 Mai 2010, 23:52:52

Titre: Je ne comprend pas mon erreur
Posté par: scott1 le 01 Mai 2010, 23:52:52
Bonsoir a toutes et a tous,

dans une commande j'ai ceci

if(!IsPlayerInRangeOfPoint(playerid,3.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]))
    {
        SendClientMessage(playerid, COLOR_GRAD1, "Vous êtes trop loin d'une maison!");
        return 1;
    }

Et a chaque fois que je ta ppe ma cmd on me dit Vous êtes trop loin d'une maison!

Pourtant je suis au bon endroit, je ne vois pas quelle est mon erreur

Merci d'avance
Titre: Re : Je ne comprend pas mon erreur
Posté par: Mr_C30 le 02 Mai 2010, 00:05:17
!


?
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 00:06:53
en pawn ça exprime la negation

si le jouer n'est pas a 7 de la position
Titre: Re : Je ne comprend pas mon erreur
Posté par: Mr_C30 le 02 Mai 2010, 00:13:52
ha je n'avais pas lu ton format ^^

"h" ou "hEntrancey" doit être faut

format(string, sizeof(string), "%d , %f",h, hEntrancey);
SendClientMessage(playerid, COLOR_GRAD1, string);

if(!IsPlayerInRangeOfPoint(playerid,3.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]))
    {
        SendClientMessage(playerid, COLOR_GRAD1, "Vous êtes trop loin d'une maison!");
        return 1;
    }

que te dis secis
?
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 00:26:32
for(new h = 0; h < sizeof(HouseInfo); h++)

Ceci t'aide?
Titre: Re : Je ne comprend pas mon erreur
Posté par: Mr_C30 le 02 Mai 2010, 00:45:57
envoi ta commandes en entier ;)
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 01:12:35
Ok

if(strcmp(cmdtext, "/achetermaison", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
GetPlayerName(playerid, playername, sizeof(playername));
for(new h = 0; h < sizeof(HouseInfo); h++)
{
//if(IsPlayerInRangeOfPoint(playerid,3.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 0)
//{
    if(!IsPlayerInRangeOfPoint(playerid,3, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]))
    {
        SendClientMessage(playerid, COLOR_GRAD1, "Vous êtes trop loin d'une maison!");
        return 1;
    }
    if(HouseInfo[h][hOwned] != 0)
    {
        SendClientMessage(playerid, COLOR_GRAD1, "Cette maison n'est pas à vendre!");
        return 1;
    }
if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel])
{
format(string, sizeof(string), "Vous devez étre niveau %d Pour pouvoir acheter cette maison!", HouseInfo[h][hLevel]);
SendClientMessage(playerid, COLOR_GRAD5, string);
return 1;
}
if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Vous avez déjà une maison, Tapez /vendre si vous voulez achetez celle-ci !");
return 1;
}
if(GetPlayerMoney(playerid) > HouseInfo[h][hValue])
{
    new taxe = HouseInfo[h][hValue] / 100 * 6;
PlayerInfo[playerid][pPhousekey] = h;
HouseInfo[h][hOwned] = 1;
SBizzInfo[15][sbTill] += taxe;
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
SafeGivePlayerMoney(playerid,-HouseInfo[h][hValue]);
PlayerPlayMusic(playerid);
SetPlayerInterior(playerid,HouseInfo[h][hInt]);
SetPlayerVirtualWorld(playerid,HouseInfo[h][hWorld]);
SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
GameTextForPlayer(playerid, "~w~Bienvenu a la maison~n~Vous pouvez sortir quand vous voulez en tappant /sortir prés de l'entree", 5000, 3);
PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
PlayerInfo[playerid][pLocal] = h;
SendClientMessage(playerid, COLOR_WHITE, "Félicitation pour votre nouvel achat!");
SendClientMessage(playerid, COLOR_WHITE, "Tapez /aidemaison pour voir les commandes de votre maison!");
                        DateProp(playerid);
OnPropUpdate();
OnPlayerUpdate(playerid);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Vous navez pas assez d'argent!");
return 1;
}
//}
}
}
return 1;
}

merci pour ton aide
Titre: Re : Je ne comprend pas mon erreur
Posté par: cristab le 02 Mai 2010, 10:19:39
if(strcmp(cmdtext, "/achetermaison", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
GetPlayerName(playerid, playername, sizeof(playername));
for(new h = 0; h < sizeof(HouseInfo); h++)
{
if(IsPlayerInRangeOfPoint(playerid,3.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 0)
{
    if(HouseInfo[h][hOwned] != 0)
    {
        SendClientMessage(playerid, COLOR_GRAD1, "Cette maison n'est pas à vendre!");
        return 1;
    }
if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel])
{
format(string, sizeof(string), "Vous devez étre niveau %d Pour pouvoir acheter cette maison!", HouseInfo[h][hLevel]);
SendClientMessage(playerid, COLOR_GRAD5, string);
return 1;
}
if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "Vous avez déjà une maison, Tapez /vendre si vous voulez achetez celle-ci !");
return 1;
}
if(GetPlayerMoney(playerid) > HouseInfo[h][hValue])
{
    new taxe = HouseInfo[h][hValue] / 100 * 6;
PlayerInfo[playerid][pPhousekey] = h;
HouseInfo[h][hOwned] = 1;
SBizzInfo[15][sbTill] += taxe;
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
SafeGivePlayerMoney(playerid,-HouseInfo[h][hValue]);
PlayerPlayMusic(playerid);
SetPlayerInterior(playerid,HouseInfo[h][hInt]);
SetPlayerVirtualWorld(playerid,HouseInfo[h][hWorld]);
SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
GameTextForPlayer(playerid, "~w~Bienvenu a la maison~n~Vous pouvez sortir quand vous voulez en tappant /sortir prés de l'entree", 5000, 3);
PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
PlayerInfo[playerid][pLocal] = h;
SendClientMessage(playerid, COLOR_WHITE, "Félicitation pour votre nouvel achat!");
SendClientMessage(playerid, COLOR_WHITE, "Tapez /aidemaison pour voir les commandes de votre maison!");
                        DateProp(playerid);
OnPropUpdate();
OnPlayerUpdate(playerid);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Vous navez pas assez d'argent!");
return 1;
}
}
                                else
                                {
        SendClientMessage(playerid, COLOR_GRAD1, "Vous êtes trop loin d'une maison!");
        return 1;
}
}
}
return 1;
}
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 13:23:06
J'ai déjà essayé Cristab, ça ne fonctionne pas :s
Titre: Re : Je ne comprend pas mon erreur
Posté par: Mr_C30 le 02 Mai 2010, 13:45:37
tu as essayer sur plusieurs maison ? HouseInfo correspond bien au nombre max de maison ? fait voir comment tu crée HouseInfo ?


++
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 14:06:58
oui ça marche. Quand je vais sur la toute premiere maison, ça marche :s
Titre: Re : Je ne comprend pas mon erreur
Posté par: Mr_C30 le 02 Mai 2010, 14:25:33
heu j'ai pas tres bien compris ^^
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 14:54:02
Si l'id de la maison = 0 ( la première) ça fonctionne mais pour les suivante, pas.
Titre: Re : Je ne comprend pas mon erreur
Posté par: cristab le 02 Mai 2010, 15:33:01
comme ceci

Code: (pawn) [Sélectionner]
if(strcmp(cmdtext, "/achetermaison", true) == 0)
{

GetPlayerName(playerid, playername, sizeof(playername));
for(new h = 0; h < sizeof(HouseInfo); h++)
{
  if(IsPlayerInRangeOfPoint(playerid,3, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]))
    {
    if(HouseInfo[h][hOwned] == 0)
    {
     
if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel])
{
format(string, sizeof(string), "Vous devez étre niveau %d Pour pouvoir acheter cette maison!", HouseInfo[h][hLevel]);
return SendClientMessage(playerid, COLOR_GRAD5, string);
}
if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
{
return SendClientMessage(playerid, COLOR_WHITE, "Vous avez déjà une maison, Tapez /vendre si vous voulez achetez celle-ci !");
}
if(GetPlayerMoney(playerid) > HouseInfo[h][hValue])
{
    new taxe = HouseInfo[h][hValue] / 100 * 6;
PlayerInfo[playerid][pPhousekey] = h;
HouseInfo[h][hOwned] = 1;
SBizzInfo[15][sbTill] += taxe;
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
SafeGivePlayerMoney(playerid,-HouseInfo[h][hValue]);
PlayerPlayMusic(playerid);
SetPlayerInterior(playerid,HouseInfo[h][hInt]);
SetPlayerVirtualWorld(playerid,HouseInfo[h][hWorld]);
SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
GameTextForPlayer(playerid, "~w~Bienvenu a la maison~n~Vous pouvez sortir quand vous voulez en tappant /sortir prés de l'entree", 5000, 3);
PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
PlayerInfo[playerid][pLocal] = h;
SendClientMessage(playerid, COLOR_WHITE, "Félicitation pour votre nouvel achat!");
SendClientMessage(playerid, COLOR_WHITE, "Tapez /aidemaison pour voir les commandes de votre maison!");
    DateProp(playerid);
OnPropUpdate();
OnPlayerUpdate(playerid);
return 1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "Vous navez pas assez d'argent!");
return 1;
}
else
{
return SendClientMessage(playerid, COLOR_GRAD1, "Cette maison n'est pas à vendre!");
    }
else
{
return SendClientMessage(playerid, COLOR_GRAD1, "Vous êtes trop loin d'une maison!");
  }
return 1;
}
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 16:40:46
Meme chose Cristab
Titre: Re : Je ne comprend pas mon erreur
Posté par: cristab le 02 Mai 2010, 17:34:13
fait clique droit supprimer xD

non je rigole je pense le soucis vient d'ailleur fai voir le tableau des houses
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 02 Mai 2010, 18:02:33
Erro erro erro AAAAAA xD

enum hInfo
{
Float:hEntrancex,
Float:hEntrancey,
Float:hEntrancez,
Float:hExitx,
Float:hExity,
Float:hExitz,
hHealthx,
hHealthy,
hHealthz,
hArmourx,
hArmoury,
hArmourz,
hOwner[MAX_PLAYER_NAME],
hDiscription[MAX_PLAYER_NAME],
hValue,
hHel,
hArm,
hInt,
hLock,
hOwned,
hRooms,
hRent,
hRentabil,
hTakings,
hVec,
hVcol1,
hVcol2,
hDate,
hLevel,
hWorld,
hFrigo,
hNouri
};

new HouseInfo[178][hInfo];

Merci pour l'aide
Titre: Re : Je ne comprend pas mon erreur
Posté par: Syg le 03 Mai 2010, 11:50:05
C'est pourtant simple :

Boucle sur toutes les maisons
   Si le joueur est devant le première maison
      Tests et actions pour joueur devant maison
   Sinon
      return (vous êtes trop loin) = 1; -> On sort de la boucle donc on ne va pas tester avec les maisons suivantes !!!
   Fin Si
Fin Boucle


Je pense qu'il faut revoir ton algorithme.

Voici comment il faudrait procéder (sommairement, je ne met pas le code, juste l'algo) :

MaisonTrouvee=0
Boucle sur les maison (jusqu'à fin du tableau des maison ou MaisonTrouvee=1)
   Si joueur devant maison h
      MaisonTrouvee=1
      On effectue les tests et actions car joueur devant une maison
   Fin Si
Fin Boucle

Si MaisonTrouvee=0
   Message pour dire que le joueur n'est pas devant une maison
FinSi


++
Syg
Titre: Re : Je ne comprend pas mon erreur
Posté par: scott1 le 03 Mai 2010, 21:41:12
Merci SiyG ^^

Edit Syg : Juste pour corrigé mon pseudo:)

Double post
Oulalalalaala, Syq, quand je met pas Syg, je met Siq, pardonne moi mdr Je ne m'y ferais jamais
Titre: Re : Je ne comprend pas mon erreur
Posté par: Syg le 04 Mai 2010, 13:53:46
Même pas grave.

++
Syg