GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Franky™ le 14 Janvier 2010, 04:23:16
-
Oyé Oyé chère amis de GtaOnline ^^
Je viens à vous tous pour vous soumettre un petit problème donc ça fait une heure et demis que j'essais de résoudre mais que je n'y arrive pas mdr...
Alors donc.
J'ai fait un OnPlayerClickPlayer et je veux que quand ça clique dessus je peux /payer le joueur que j'ai séléctionner.
J'ai arriver jusqu'a faire ShowPlayerDialog et a renvoyé le tout sur la commande /payer.
Mais le problème c'est que quand j'essais de détécter le joueur que j'ai sélectionner, il me met, ID/Nom invalide. Donc j'ai du faire faut quelque part mais je vois pas ou ^^
Voici se que j'ai comme code.
if(dialogid == TESTPAYER)
{
if(response)
{
new pay[256];
new giveplayerid;
new tmp[256];
giveplayerid = ReturnUser(tmp);
format(pay, 256, "/payer %d %s",giveplayerid, inputtext);
return OnPlayerCommandText(playerid, pay);
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu as annuler!!!");
}
return 1;
}
Si j'enleve le giveplayerid il me renvoye un SendClientMessage: [Info] /payer ID/NOM MONTANT Donc comme si je faisais /payer ESPACE.
Mais quand je met le giveplayerid il me renvoye se con de Invalide qui me les petes mdr.
Avez-vous une solution for me, for me, for me, formidaaable ^^
Je vous remercie les gens..
Oyé Oyé Oyé.
++ Franky
-
Regarde le fs de sasuke j'ai teter il marche nikel
-
c' est normal tu doit stocke l id du joueur sur lequel on a clické sinon ca fonctionne pas
-
Tu creeait une variable tmp vide et ensuite essayait de recup l'i du joueur via cette variable vide c'est normal que sa marche pas , il faut recuperer le nom depuis le inputtext qui contient normalement le pseudo du joueur sur lequel il a cliquer (si tu a bien fait la liste du dialog comme je le pense)
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == TESTPAYER)
{
if(response)
{
new pay[256];
new giveplayerid = ReturnUser(inputtext);
format(pay, 256, "/payer %d %s",giveplayerid, inputtext);
return OnPlayerCommandText(playerid, pay);
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu as annuler!!!");
}
return 1;
}
return 1;
}
-
Merci les gars, grace avec l'aide du FS de sasuke (TABAdmin) et l'aide de MrFredo, j'ai reussi a le faire fonctionné.
Je vous remercie encore.
++ Franky
----------------------------------------------
Salut une autre question.
Je suis entrain de faire un système d'entré avec les dialog.
Donc j'ai tout fait comme il le fallait, quand je passe sur le "i" ça m'ouvre un dialog qui me dit "Entrer" ou "Annuler"
Quand je presse "Entrer" Tout se passe comme prévu, ça me renvoye a ma commande /entrer et je rentre dans le batiments.
Mais si je fait "Annuler" ça me quitte ma boite de dialog et ça me la reouvre vu que je suis toujours sur le "i".
J'avais pensé mettre un "timer" ??!! pour que si je fait "annuler" ça ne m'affiche pas direct la boite.
Mais je n'ai aucune idée de comment débuté sur ce problème.
Si vous pouviez, m'éclairer un petit peu sur le sujet.
Voici ma boite.
ShowPlayerDialog(i,ENTRER,DIALOG_STYLE_MSGBOX,"Entrer","Veux-tu entrée ici ?\n\n","Entrer","Annuler");
if(dialogid == ENTRER)
{
if(response)
{
new pay[256];
format(pay, 256, "/entrer", inputtext);
return OnPlayerCommandText(playerid, pay);
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu as annuler!!!");
}
return 1;
}
Donc en gros, j'aimerai que ça passe quelque temps avant que ça raffiche la boite d'entrer. Mais je sais pas par où commencé.
Je vous remercie de l'aide ^^
++ Franky
-
Tu crée une variable global genre
new Entrer_pickup[500];
quand il rentre dans le pickup
Entrer_pickup[playerid] = 1;
SetTimerEx("Entrer_pickup_func", ici le temps, 0,"d",playerid);
apres tu place cette fonction
public Entrer_pickup_func(playerid)
{
Entrer_pickup[playerid] = 0;
}
et tu te debrouille avec le Entrer_pickup[playerid] s' il est à 0 de ne pas montré le dialog ^^
-
apres tu place cette fonction
public Entrer_pickup_func(playerid)
{
Entrer_pickup[playerid] = 0;
}
Tu pourrai m'expliqué a quoi peut servir cette fonction stp ? ^^
Merci.
Sinon j'ai essayé un truc mais ça fonctionne pas.
if(dialogid == ENTRER)
{
if(response)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(Entrer_pickup[i] = 0)
{
new pay[256];
format(pay, 256, "/entrer", inputtext);
return OnPlayerCommandText(playerid, pay);
}
}
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Tu as annuler!!!");
}
return 1;
}Voila mon dialog... Je pense que c'est faut lol.
et j'ai mis ça quand il est sur le pickup
ShowPlayerDialog(i,ENTRER,DIALOG_STYLE_MSGBOX,"Entrer","Veux-tu entrée ici ?\n\n","Entrer","Annuler");
Entrer_pickup[i] = 1;
SetTimerEx("Entrer_pickup_func", 20000, 0,"d",i);
Ensuite pour ta fonction, j'ai pas compris à quoi elle sert... :s lol
Mais je l'ai mise comme ça.
forward Entrer_pickup_func(playerid);
public Entrer_pickup_func(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
Entrer_pickup[i] = 0;
}
return 1;
}
Et ça me renvoye un warning:
GM.pwn(20548) : warning 211: possibly unintended assignmentet donc c'est ça: if(Entrer_pickup = 0)
La je seche. Tu pourrai m'expliqué un peux et pas me donner directement les corrections, sinon jvais pas pigé mdr
Machi
++ Franky
-
non tu laisse la fonction comme je l' ai donné ^^
Sinon elle sert juste a remettre la variable a 0 ^^ comme ca on peu pas voir le dialog pendant 20 secondes comme tu a mis dans le timer ^^
-
Ok, mais ça marche pas mdr ^^
J'ai tout essayé, j'ai refait encore une fois pour voir et j'ai même monté le temps a 1 minutes mais la boite s'affiche directement quand je clique sur annuler... :s
Je comprend pas là mdr.
++ Franky
Double post
Résolu.
Merci à Sasuke.
J'avais oublier de rajouté ou il y avait mon pickup
if(Entrer_pickup[i] == 0)
{
ShowPlayerDialog(i,ENTRER,DIALOG_STYLE_MSGBOX,"Entrer","Veux-tu entrée ici ?\n\n","Entrer","Annuler");
Entrer_pickup[i] = 1;
SetTimerEx("Entrer_pickup_func", 5000, 0,"d",i);
}
Merci encore.
++ Franky