GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Myk3L le 27 Octobre 2010, 14:30:01
-
Salut !
J'ai fait des liste de dialogues ... sur mon gamemode. Tout marche, mais j'ai un problème, quand je choisis un truc dans la liste, ça me kick.
Voici mon OnDialogResponse() :
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1 && response)
{
new sendername[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "users/%s.ini", sendername);
new File: hFile = fopen(string, io_read);
if(!hFile)
{
SendClientMessage(playerid, COLOR_RED, "Ce compte n'est pas enregistrer.");
ShowPlayerDialog(playerid, 2,DIALOG_STYLE_INPUT,"Bienvenue sur Vie Ta Vie","Enregistrement\n\nEntrez votre mot de passe\nEntrez votre mot de passe : ","Enregistrer","Quitter");
}
//strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
OnPlayerLogin(playerid,inputtext);
return 1;
}
else
{
Kick(playerid);
return 1;
}
if(dialogid == 2 && response)
{
new sendername[20],string[128];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "users/%s.ini", sendername);
new File: hFile = fopen(string, io_read);
if (hFile)
{
SendClientMessage(playerid, COLOR_YELLOW, "Ce nom est déjà utiliser reconnecter vous avec un autre Mot de passe.");
fclose(hFile);
return 1;
}
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Enregister vous","Veuillez entrez votre mot de passe\nPour vous enregistrer","Ok","Annuler");
return 1;
}
//Encrypt(tmppass);
OnPlayerRegister(playerid,inputtext);
}
else
{
Kick(playerid);
return 1;
}
if(dialogid == 3 && response)
{
new pName[MAX_PLAYER_NAME],gName[MAX_PLAYER_NAME];
new giveplayerid = GetPVarInt(playerid,"ClickedPlayer");
new message[256];
new string[128];
GetPlayerName(playerid,pName,sizeof pName); //pName : Administrateur
GetPlayerName(giveplayerid,gName,sizeof gName); //gName : Joueur
if(listitem == 0)
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
TogglePlayerControllable(giveplayerid, 1);
GameTextForPlayer(giveplayerid, "~w~Vous pouvez a nouveau bouger", 5000, 3);
format(string, sizeof(string), "%s à été unfreeze par %s", gName, pName);
ABroadCast(COLOR_YELLOW,string,1);
}
}}
}
if(listitem == 1)
{
if(IsPlayerConnected(playerid))
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
TogglePlayerControllable(giveplayerid, 0);
GameTextForPlayer(giveplayerid, "~w~Vous ne pouvez plus bouger", 5000, 3);
format(string, sizeof(string), "%s à été freeze par %s", gName, pName);
ABroadCast(COLOR_YELLOW,string,1);
}
}}
}
}
if(dialogid == 4 && response)
{
switch(listitem)
{
case 1:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Avocat, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Avocat, tapper /accepter job.");
GettingJob[playerid] = 2;
TogglePlayerControllable(playerid,1);
//return 1;
}
case 2:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Livreur, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Livreur, tapper /accepter job.");
GettingJob[playerid] = 16;
TogglePlayerControllable(playerid,1);
//return 1;
}
case 3:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Fermier, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Fermier, tapper /accepter job.");
GettingJob[playerid] = 18;
TogglePlayerControllable(playerid,1);
//return 1;
}
case 4:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Chauffeur de Taxi, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Chauffeur de Taxi, tapper /accepter job.");
GettingJob[playerid] = 13;
//SendClientMessage(playerid, COLOR_WHITE, "* Pour avoir ce Job, posté une candidature forum et attendez de vous faire inviter par un administrateur !");
TogglePlayerControllable(playerid,1);
//return 1;
}
case 5:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Chauffeur de Bus, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Chauffeur de Bus, tapper /accepter job.");
GettingJob[playerid] = 14;
//SendClientMessage(playerid, COLOR_WHITE, "* Pour avoir ce Job, posté une candidature forum et attendez de vous faire inviter par un administrateur !");
TogglePlayerControllable(playerid,1);
//return 1;
}
/*case 2:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Livreur de Journaux, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Livreur de Journals, tapper /accepter job.");
GettingJob[playerid] = 15;
TogglePlayerControllable(playerid,1);
return 1;
}*/
case 6:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Livreur de Pizza, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Livreur de Pizza, tapper /accepter job.");
GettingJob[playerid] = 17;
TogglePlayerControllable(playerid,1);
//return 1;
}
case 7:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Balayeur de Rue, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Balayeur de Rue, tapper /accepter job.");
GettingJob[playerid] = 21;
TogglePlayerControllable(playerid,1);
//return 1;
}
case 8:
{
SendClientMessage(playerid, COLOR_WHITE, "* Vous êtes sur le point de devenir Mecanicien, et d'obtenir un contrat de 5h.");
SendClientMessage(playerid, COLOR_WHITE, "* Vous devez finir le contrat de 5h si vous voulez quitter ce job plus tard.");
SendClientMessage(playerid, COLOR_WHITE, "* Si vous êtes sur de devenir Mecanicien, tapper /accepter job.");
GettingJob[playerid] = 7;
TogglePlayerControllable(playerid,1);
//return 1;
}
//return 1;
}
return 1;
}
return 1;
}
Je voit tout ça normal moi :P
Merci d'avance !
-
Euh.. J'ai pas envie de lire ton code, il est identé avec les pieds :closedeyes
-
Met ton code avec pastebin
-
Perso pour les dialogue,
je te conseil les #define TONDIALOG 1
#define TONDIALOG2 2
#define TONDIALOG3 3
ça t'evite de te tromber dans les if(dialogid == ..
ce qui a du se passer
-
if( dialogid == 1 )
{
if( response )
{
new sendername[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "users/%s.ini", sendername);
new File: hFile = fopen(string, io_read);
if(!hFile)
{
SendClientMessage(playerid, COLOR_RED, "Ce compte n'est pas enregistrer.");
ShowPlayerDialog(playerid, 2,DIALOG_STYLE_INPUT,"Bienvenue sur Vie Ta Vie","Enregistrement\n\nEntrez votre mot de passe\nEntrez votre mot de passe : ","Enregistrer","Quitter");
}
//strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
OnPlayerLogin(playerid,inputtext);
return 1;
}
else
{
Kick(playerid);
return 1;
}
}
Normalement la ça devrai être bon, lit le code tu comprendra ton erreur
-
Je vais tester, voici mon pastebin ;)
http://pastebin.gtaonline.fr/pastebin.php?show=915 (http://pastebin.gtaonline.fr/pastebin.php?show=915)
-
J'aime pas lire ce genre de code, aucun n'est droit, tu ne vois pas les erreur de { }
-
Salut,
cas qui montre clairement pourquoi je n'aime pas les tests combinés (alors qu'ils ne vont pas vraiment ensemble).
la combinaison du test sur le dialog et la réponse est la problème ici (comme l'a vu Sasuke).
ton premier test: si le dialog est le 1 et que la réponse est 1.
le else (qui kick) : si c'est le dialog 1 et la réponse est 0 OU ce n'est pas le dialog 1 => kick
bref, tu kick pour tous les dialogs sauf le 1 (avec réponse = 1)
++Sim++
-
J'ai refais le truc "en mode sasuke", c'est vrai que mon code était assez "sale" ;)
Je vous dit si ça marche dans un moment car je ne peut pas lancer de serveur en local, seulement le mettre sur mon serveur !