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
-
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
-
!
?
-
en pawn ça exprime la negation
si le jouer n'est pas a 7 de la position
-
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
?
-
for(new h = 0; h < sizeof(HouseInfo); h++)
Ceci t'aide?
-
envoi ta commandes en entier ;)
-
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
-
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;
}
-
J'ai déjà essayé Cristab, ça ne fonctionne pas :s
-
tu as essayer sur plusieurs maison ? HouseInfo correspond bien au nombre max de maison ? fait voir comment tu crée HouseInfo ?
++
-
oui ça marche. Quand je vais sur la toute premiere maison, ça marche :s
-
heu j'ai pas tres bien compris ^^
-
Si l'id de la maison = 0 ( la première) ça fonctionne mais pour les suivante, pas.
-
comme ceci
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;
}
-
Meme chose Cristab
-
fait clique droit supprimer xD
non je rigole je pense le soucis vient d'ailleur fai voir le tableau des houses
-
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
-
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
-
Merci S
iyG ^^
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
-
Même pas grave.
++
Syg