GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: DexX le 31 Août 2011, 19:49:27

Titre: Problème de boites de dialogues
Posté par: DexX le 31 Août 2011, 19:49:27
Bonjour, j'ai voulu pousser un peu mon système de banque, en y ajoutant un système de carte bancaire.
Donc, lorsque le joueur arrive devant un distributeur, on lui demande de saisir son code dans une boite de dialogue.
Le problème est que dès qu'il saisit son code bancaire dans la boite de dialogue, lors de la validation, la boite disparait ... Et je ne vois pas pourquoi.

La commande /retirer :

if(strcmp(cmd, "/retirer", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
if(IsADistrib(playerid))
        {
        format(string,256, "Charngement des données de la banque ...\n\nVeuillez saisir votre code bancaire :",sendername);
ShowPlayerDialog(playerid, DIALOGUE_BANQUE_NCB, DIALOG_STYLE_INPUT, "Distributeur",string,"Valider","Annuler");
return 1;
          }
        else
{
            SendClientMessage(playerid,COLOR_ERREUR,"[Erreur]: Vous n'êtes pas à la banque ou dans un distributeur.");
            return 1;
      }
}
return 1;
}

Ensuite dans OnDialogResponse :

if(dialogid == DIALOGUE_BANQUE_NCB)
{
    if(response != 1)
{
    return 1;
  }
new code = strval(tmp);
if(code == PlayerInfo[playerid][pNBancaire])
{
ShowPlayerDialog(playerid,112,DIALOG_STYLE_INPUT,"Indiquez le montant que vous désirez :",string,"Valider","Annuler");
return 1;
  }
  else
{
ShowPlayerDialog(playerid,DIALOGUE_BANQUE_NCB,DIALOG_STYLE_INPUT,"Erreur \nVotre code bancaire est incorrect.\nVeuillez réessayer s'il vous plaît. ",string,"Valider","Annuler");
gPlayerCodeCB[playerid] += 1;
if(gPlayerCodeCB[playerid] == 3)
{
PlayerInfo[playerid][pCBancaire] = 0;
GameTextForPlayer(playerid,"~r~Carte avaler",10000,5);
gPlayerCodeCB[playerid] = 0;
PlayerInfo[playerid][pNBancaire] = 0;
return 1;
}
}
  }
    if(dialogid == 112)
    {
        if(response == 1)
        {
tmp = strtok(inputtext,idx);
    if(!strlen(tmp))
    {
        ShowPlayerDialog(playerid,112,DIALOG_STYLE_INPUT,"Indiquez le montant que vous désirez retirer :",string,"Retirer","Annuler");
return 1;
    }
    new somme = strval(tmp);
    if (somme > PlayerInfo[playerid][pAccount] || somme < 1)
{
format(string,256,"Vous n'avez pas autant d'argent %s \nVous désirez retirer combien ?",sendername);
ShowPlayerDialog(playerid,112,DIALOG_STYLE_INPUT,"Distributeur",string,"Retirer","Annuler");
return 1;
}
format(string, sizeof(string), "[Banque]: Vous avez retirer %d$.", somme);
SendClientMessage(playerid, COLOR_BANQUE, string);
GivePlayerMoney(playerid, somme);
PlayerInfo[playerid][pAccount] -= somme;
}
else
{
SendClientMessage(playerid, COLOR_ERREUR, "[Erreur]: Vous avez annulé, vous êtes kické automatiquement.");
    return 1;
}
}

Merci d'avance de votre aide..

Cordialement,
DexX
Titre: Re : Problème de boites de dialogues
Posté par: DexX le 01 Septembre 2011, 14:14:10
Non, ça ne change rien, sa fait toujours pareil  ;)
Titre: Re : Problème de boites de dialogues
Posté par: Xartrick le 02 Septembre 2011, 03:28:32
J'ai rendu plus beau le code et je l'ai légèrement amélioré et enlevé tous les return inutile.
J'ai également ajouté des print à chaque condition, à toi de jouer maintenant.

http://pastebin.gtaonline.fr/pastebin.php?show=1151 (http://pastebin.gtaonline.fr/pastebin.php?show=1151)