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

Titre: Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 16:01:50
Salut, j'ai un petit problème avec une boite de dialogue DIALOG_STYLE_LIST.

Code: (pawn) [Sélectionner]
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  ;)
Titre: Re : Boite de dialogue
Posté par: Syg le 02 Juillet 2010, 16:13:26
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
Titre: Re : Boite de dialogue
Posté par: chneubeul le 02 Juillet 2010, 16:16:25
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
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 16:20:10
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)

Code: (pawn) [Sélectionner]
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 :
Code: (pawn) [Sélectionner]
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;
}
Titre: Re : Boite de dialogue
Posté par: chneubeul le 02 Juillet 2010, 16:57:12
Perso je vois pas trop, regarde si tu n'a pas un FS qui utilise le même numéro ou quoi Oo
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 16:59:07
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
Titre: Re : Boite de dialogue
Posté par: Syg le 02 Juillet 2010, 17:01:10
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
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 17:02:03
Je le met sous OnDialogResponse ?
Titre: Re : Boite de dialogue
Posté par: chneubeul le 02 Juillet 2010, 17:02:42
Oui
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 17:05:29
J'ai rien dans la console ni dans le log  ;D
Titre: Re : Boite de dialogue
Posté par: Myk3L le 02 Juillet 2010, 17:05:55
HS : Y'a un tutoriel sur les boites de dialogues comme celle-ci ?!
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 17:09:29
Tiens : http://www.gtaonline.fr/forums/index.php/topic,10646.0.html (http://www.gtaonline.fr/forums/index.php/topic,10646.0.html)

++
Titre: Re : Re : Boite de dialogue
Posté par: Syg le 02 Juillet 2010, 17:09:44
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

Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 17:11:35
Je pense que la 2e solution est la bonne  :P
Code: (pawn) [Sélectionner]
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)

++
Titre: Re : Boite de dialogue
Posté par: chneubeul le 02 Juillet 2010, 17:49:33
Ah on penser que la boite ne s'afficher pas. C'est quand tu clique sur un item ?
Titre: Re : Boite de dialogue
Posté par: Gilux le 02 Juillet 2010, 18:09:04
Oui, ca fait une "boucle".
La boite revient au même point après un clic.

++
Titre: Re : Boite de dialogue
Posté par: Syg le 02 Juillet 2010, 23:42:15
Et dans le log ou sur la fenêtre du serveur, y'a quoi concernant ton printf ?

++
Syg
Titre: Re : Boite de dialogue
Posté par: Gilux le 03 Juillet 2010, 21:38:56
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 ;)