GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Esmaelo_Louiscius le 13 Juin 2012, 20:48:29

Titre: Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 13 Juin 2012, 20:48:29
Bonjour j'ai creer un systeme de maison pour mon gamemode, mais j'ai un probleme.
Lorsque je fait la commande /entrer dans le jeu il ne se passe rien.
Tenez les Pastebin : http://pastebin.com/wbACpTtf (http://pastebin.com/wbACpTtf)

Merci d'avance. Mayou
Titre: Re : Bug Systeme de maison
Posté par: CraxxHack le 13 Juin 2012, 21:04:32
Pourquoi :

if(InfosJoueur[playerid][DansMaison] == -1)
Pourquoi pas :

if(InfosJoueur[playerid][DansMaison] == 0)
Ou encore :

if(InfosJoueur[playerid][DansMaison] == 1)
Le code se trouve dans la commande pour entré dans la maison.
Titre: Re : Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 13 Juin 2012, 21:24:28
Bas parce que l'id de la maison commence par l'id 0
Titre: Re : Bug Systeme de maison
Posté par: Xartrick le 13 Juin 2012, 22:20:32
Je pense que ta condition est simplement fausse:

if (InfosJoueur[playerid][DansMaison] == -1) {
}

Essaye de voir quelle est sa valeur.
D'ailleurs, la condition peut être exécuter une seule fois, et ainsi, éviter des boucles inutiles !


CMD:entrer(playerid, params[]) {
    if (IsPlayerConnected(playerid)) {
        if (InfosJoueur[playerid][DansMaison] == -1) {
            for (new maisonid = 0; maisonid < sizeof(InfosMaison); maisonid++) {
                if (IsPlayerInRangeOfPoint(playerid, 5, InfosMaison[maisonid][MEntrerX], InfosMaison[maisonid][MEntrerY], InfosMaison[maisonid][MEntrerZ])) {
                    SetPlayerInterior(playerid, InfosMaison[maisonid][MInt]);
                    SetPlayerVirtualWorld(playerid, InfosMaison[maisonid][MWorld]);
                    SetPlayerPos(playerid, InfosMaison[maisonid][MSortieX], InfosMaison[maisonid][MSortieY], InfosMaison[maisonid][MSortieZ]);
                    InfosJoueur[playerid][DansMaison] = maisonid;
                  }
            }
        }
        else {
            printf("DansMaison : %i", InfosJoueur[playerid][DansMaison]);
        }
    }
    
    return 1;
}
Titre: Re : Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 14 Juin 2012, 10:30:28
j'ai creer 6 maison et chaque fois j'essaye de rentrez j'arrive pas dans le log ya ecrit DansMaison : 1 sa change pas d'id sa reste 1
Titre: Re : Bug Systeme de maison
Posté par: Xartrick le 14 Juin 2012, 18:43:26
La variable est simplement mal initialisé.
Met ça dans
OnGameModeInit() par exemple.

for (new i = 0; i < MAX_PLAYERS; i++) {
    InfosJoueur[i][DansMaison] = -1;
}
Titre: Re : Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 14 Juin 2012, 19:01:09
Sa reussit a se teleportez pour qu'un maison sur 3.
Je rentre dans la maison id 3 dans le log sa met id 49 et quand je sort je sort a la maison id 1
Titre: Re : Bug Systeme de maison
Posté par: CraxxHack le 14 Juin 2012, 19:02:30
Regarde les systèmes déjà existant. Tu dois te tromper dans les conditions ou boucles. Je ne sais pas.
Titre: Re : Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 14 Juin 2012, 19:28:48
J'ai qu'un systeme de vehicule sismilaire a celui là mais il marche correctement sauf ceux systeme de maison je rentre dans n'importe quel maison et je sort de la maison id 3.

Double post
Solution trouvez
Titre: Re : Bug Systeme de maison
Posté par: Xartrick le 14 Juin 2012, 20:16:40
Quelle est cette solution ?
Titre: Re : Bug Systeme de maison
Posté par: Esmaelo_Louiscius le 14 Juin 2012, 20:26:34
Celle la et mai je vais cherchez pour pouvoir enlever le /entrer id et mettre /entrer

CMD:entrer(playerid, params[])
{
    if(IsPlayerConnected(playerid))
{
new maison;
if(sscanf(params, "i", maison)) return SendClientMessage(playerid, -1, "Usage: /entrer <id>");

if(IsPlayerInRangeOfPoint(playerid, 5, InfosMaison[maison][MEntrerX], InfosMaison[maison][MEntrerY], InfosMaison[maison][MEntrerZ]))
{
  SetPlayerInterior(playerid, InfosMaison[maison][MInt]);
  SetPlayerVirtualWorld(playerid, InfosMaison[maison][MWorld]);
SetPlayerPos(playerid, InfosMaison[maison][MSortieX], InfosMaison[maison][MSortieY], InfosMaison[maison][MSortieZ]);
  InfosJoueur[playerid][DansMaison] = maison;
}
    }
    return 1;
}

CMD:sortir(playerid, params[])
{
    if(IsPlayerConnected(playerid))
{
new maison = InfosJoueur[playerid][DansMaison];

if(IsPlayerInRangeOfPoint(playerid, 5, InfosMaison[maison][MSortieX], InfosMaison[maison][MSortieY], InfosMaison[maison][MSortieZ]))
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerPos(playerid,InfosMaison[maison][MEntrerX],InfosMaison[maison][MEntrerY],InfosMaison[maison][MEntrerZ]);
InfosJoueur[playerid][DansMaison] = 0;
    }
//}
}
return 1;
}