GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Gilux le 02 Juillet 2010, 16:01:50
-
Salut, j'ai un petit problème avec une boite de dialogue DIALOG_STYLE_LIST.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 99 && response)
{
if(listitem == 0) // Derby VORTEX
{
SetPlayerPos(playerid,268.7727,-1967.2281,1.3578);
SendClientMessage(playerid,blanc,"Bienvenue au Derby Vortex ! /veh pour en obtenir un ! ");
}
if(listitem == 1)//BLOODRING
{
SetPlayerInterior(playerid,15);
SetPlayerPos(playerid,-1398.103515,937.631164,1036.479125);
SendClientMessage(playerid,blanc,"Bienvenue au Bloodbowl ! Le Nof est conseillé ! ");
}
if(listitem == 2)//KICKSTART
{
SetPlayerInterior(playerid,14);
SetPlayerPos(playerid,-1465.268676,1557.868286,1052.531250);
SendClientMessage(playerid,blanc,"Bienvenue au stade de Stunt ! ");
}
if(listitem == 3)//8-TRACK
{
SetPlayerInterior(playerid,7);
SetPlayerPos(playerid,-1398.065307,-217.028900,1051.115844);
SendClientMessage(playerid,blanc,"Bienvenue au 8-Track ! ");
}
if(listitem == 4)//BasketBall
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,2782.7234,-2019.2786,13.5547);
SendClientMessage(playerid,blanc,"Bienvenue au terrain de basket ! ");
}
if(listitem == 5)//Coin feu d'artifice
{
//SetPlayerPos(playerid,);
SendClientMessage(playerid,blanc,"Bienvenue au coin spectateurs pour le feu d'artifice ! (Début : 23h50) ");
}
if(listitem == 6)//DM
{
DM[playerid] = 1;
SetPlayerInterior(playerid,10);
SetPlayerPos(playerid,246.375991,109.245994,1003.218750);
SendClientMessage(playerid,blanc,"Bienvenue au DM ! Tue sans pitié tes adversaires ;) ");
GivePlayerWeapon(playerid,31,500);
GivePlayerWeapon(playerid,33,100);
GivePlayerWeapon(playerid,24,125);
GivePlayerWeapon(playerid,9,1);
}
}
return 0;
}
L'id est bien correct (99), mais voila, aucune action ne se fait... ???
Merci de votre aide !
++
Ps : Je m'étais trompé et j'ai posté dans Problèmes et bugs Sa:Mp, merci de supprimer ;)
-
Rajoute la ligne suivante au tout début de la fonction :
printf ("playerid = %d, dialogid=%d, response=%d, listitem=%d, inputtext=%s", playerid, dialogid, response, listitem, inputtext);
Ensuite vas voir dans le log du serveur (ou directement sur le fenêtre noire) pour vérifier la valeur des paramètres.
++
Syg
-
Salut gilux :) Bien ?
On peut avoir ton ShowPlayerDialog stp ? Tu as peut être oublier un paramètre
edit: J'avaias pas vu le return, merci gzsume x'D
-
J'ai essayé avec return 1; et ca ne change rien, alors je vais remettre le tout : (et j'ai essayé avec des return 1; a chaque item)
ShowPlayerDialog(playerid, 99, DIALOG_STYLE_LIST, "Menu des Réjouissances !", " Derby Vortex \n Bloodring \n KickStart \n 8-Track \n BasketBall \n Coin Spectateurs pour le feu d'artifice (23h50)\n DM !", "Spawn", "Cancel");
Et j'ai essayé de mettre un switch a la place, comme sur un autre de mes scripts :
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 99 && response)
{
switch(listitem)
{
case 0: // Derby VORTEX
{
SetPlayerPos(playerid,268.7727,-1967.2281,1.3578);
SendClientMessage(playerid,blanc,"Bienvenue au Derby Vortex ! /veh pour en obtenir un ! ");
return 1;
}
case 1://BLOODRING
{
SetPlayerInterior(playerid,15);
SetPlayerPos(playerid,-1398.103515,937.631164,1036.479125);
SendClientMessage(playerid,blanc,"Bienvenue au Bloodbowl ! Le Nof est conseillé ! ");
return 1;
}
case 2://KICKSTART
{
SetPlayerInterior(playerid,14);
SetPlayerPos(playerid,-1465.268676,1557.868286,1052.531250);
SendClientMessage(playerid,blanc,"Bienvenue au stade de Stunt ! ");
return 1;
}
case 3://8-TRACK
{
SetPlayerInterior(playerid,7);
SetPlayerPos(playerid,-1398.065307,-217.028900,1051.115844);
SendClientMessage(playerid,blanc,"Bienvenue au 8-Track ! ");
return 1;
}
case 4://BasketBall
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,2782.7234,-2019.2786,13.5547);
SendClientMessage(playerid,blanc,"Bienvenue au terrain de basket ! ");
return 1;
}
case 5://Coin feu d'artifice
{
//SetPlayerPos(playerid,);
SendClientMessage(playerid,blanc,"Bienvenue au coin spectateurs pour le feu d'artifice ! (Début : 23h50) ");
return 1;
}
case 6://DM
{
DM[playerid] = 1;
SetPlayerInterior(playerid,10);
SetPlayerPos(playerid,246.375991,109.245994,1003.218750);
SendClientMessage(playerid,blanc,"Bienvenue au DM ! Tue sans pitié tes adversaires ;) ");
GivePlayerWeapon(playerid,31,500);
GivePlayerWeapon(playerid,33,100);
GivePlayerWeapon(playerid,24,125);
GivePlayerWeapon(playerid,9,1);
return 1;
}
}
}
return 1;
}
-
Perso je vois pas trop, regarde si tu n'a pas un FS qui utilise le même numéro ou quoi Oo
-
Un coup ca me l'a fait, je sélectionnais une ligne pour aller a LV, et il me spawnait une infernus xD
Apparament, il n'y a pas de confilts ;D
-
Le return n'a rien à voir, il est exécuté à la fin de la callback donc même si ce n'est pas le bon return, le joueur devrait être téléporté quand même.
Et si il y a des "conflit" c'est que le script est mal écrit.
Par contre, as-tu lu mon post Gilux :
Rajoute la ligne suivante au tout début de la fonction :
printf ("playerid = %d, dialogid=%d, response=%d, listitem=%d, inputtext=%s", playerid, dialogid, response, listitem, inputtext);
Ensuite vas voir dans le log du serveur (ou directement sur le fenêtre noire) pour vérifier la valeur des paramètres.
Je te conseille vivement de faire ce que je t'ai dit, sans quoi tu ne sauras jamais pourquoi ta callback ne se comporte pas comme tu veux.
Tu peux aussi poster le résultat ici si tu ne sais pas comment l'exploiter.
++
Suh
-
Je le met sous OnDialogResponse ?
-
Oui
-
J'ai rien dans la console ni dans le log ;D
-
HS : Y'a un tutoriel sur les boites de dialogues comme celle-ci ?!
-
Tiens : http://www.gtaonline.fr/forums/index.php/topic,10646.0.html (http://www.gtaonline.fr/forums/index.php/topic,10646.0.html)
++
-
J'ai rien dans la console ni dans le log ;D
Ben alors c'est que ta callback n'est jamais appelée ou que tu n'a pas mis le printf au bon endroit.
++
Syg
-
Je pense que la 2e solution est la bonne :P
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
printf ("playerid = %d, dialogid=%d, response=%d, listitem=%d, inputtext=%s", playerid, dialogid, response, listitem, inputtext);
if(dialogid == 99 && response)
{
switch(listitem)
{
case 0: // Derby VORTEX
{
SetPlayerPos(playerid,268.7727,-1967.2281,1.3578);
SendClientMessage(playerid,blanc,"Bienvenue au Derby Vortex ! /veh pour en obtenir un ! ");
}
Edit : une petite image :
(http://i37.servimg.com/u/f37/14/77/47/47/sa-mp-10.jpg)
++
-
Ah on penser que la boite ne s'afficher pas. C'est quand tu clique sur un item ?
-
Oui, ca fait une "boucle".
La boite revient au même point après un clic.
++
-
Et dans le log ou sur la fenêtre du serveur, y'a quoi concernant ton printf ?
++
Syg
-
Rien du tout, je n'ai aucune trace du printf...
[join][DX]Gilux joined the server <IP...>
--- Marche sur le CP et teste la box... ---
[leave][DX]Gilux leave the server <0:0>
Si je me rappelle bien ca doit donner ça ^^
Ps : Je vais essayer de faire un système de menu, merci quand même de vos aides ;)