GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Dark_revan le 31 Janvier 2010, 13:25:30
-
Bonjours alors voila j'ai un petit problème avec les dialog avec liste. Je m'explique: Les armes disponibles sont M4, 9mm, SPAS, MP5.
J'ai sur moi:
- M4 100 munitions
-SPAS 30 munitions
Je ne souhaite pas avoir une liste du type:
-M4 100 munitions
-9mm aucun
-SPAS 30 munitions
-MP5 aucun
Mais:
-M4 100 munitions
-SPAS 30 munitions
En faite j'arrive a faire apparaitre la liste comme voulu mais je n'arrive pas a identifier la ligne de la liste (listeitem) dans le ondialogresponse donc quand le joueur valide M4, il n'a rien :bangin.
Si vous saviez comment faire :) sa sera sympa de me le dire parce-que la je galère.
-
Salut,
Montre nous ce que tu as fait
-
Alors voila ce que j'ai fait :
if(strcmp(cmd, "/armes", true) == 0)
{
new string0[256],string1[256],string2[256],string3[256],string4[800];
if(M4[playerid] > 0){ format(string0,256,"M4 : %d\n",M4[playerid]); }
if(9mm[playerid] > 0){ format(string0,256,"9mm : %d\n",9mm[playerid]); }
if(Spas[playerid] > 0){ format(string0,256,"Spas : %d\n",Spas[playerid]); }
if(MP5[playerid] > 0){ format(string0,256,"MP5\n",MP5[playerid]); }
format(string4,256,"%s%s%s%s",string0,string1,string2,string3);
ShowPlayerDialog(playerid,24,DIALOG_STYLE_LIST,"Vos armes",string4,"Utiliser","Annuler");
return 1;
}
Dans ondialogresponse je ne peut pas identifier la ligne de la liste. Donc le joueur ne peut pas prendre l'arme qui correspond a la ligne.
-
Salut.
Je ne sais pas si ça pourra résoudre ou non ton problème, mais il y a des choses qui me chagrine dans ton bout de code.
Tout d'abord, tu met new string0, string1,... mais tu n'utilises que string 0 à coté de chaque armes et dans ton format tu demande string1, string2 et string3 en plus. Tu peux comprendre que comme tu ne les utilisent pas, le script ne peux pas le reconnaître et te les donner. De plus, étant donné que toutes tes armes sont définis par le même numéro, cela peux engendrer des conflits.
Ensuite dans la ligne du Mp5 tu met ça :
format(string0,256,"MP5\n",MP5[playerid])
Si tu regardes bien, tu as oublié de mettre %d
Maintenant, je ne me suis pas penché sur le bout de code pour savoir si ça fonctionnerait ou non en y changeant ça (je n'ai pas regardé s'il était exact). J'ai juste regardé pour savoir s'il y avait des erreurs à des lignes (comme celles que j'ai trouvé :P )
-
enfaite jai les fait sur le forum mais le mien est égale a celui ci sauf qu'il n'y as pas d'erreurs ^^ le probleme et d'identifier la ligne dans le ondialogresponse :(
-
Salut,
tu devrais plutôt faire un truc comme ceci, ça t'éviterais beaucoup d'utilisation de mémoire abusive (tu en as pour plus de 6 ko...)
new tmp[128];//c'est amplement suffisant
if(M4[playerid] > 0)
{
format(tmp, sizeof(tmp), "M4 : %d\n", M4[playerid]);
}
if(9mm[playerid] > 0)
{
format(tmp, sizeof(tmp), "%s9mm : %d\n" ,tmp, 9mm[playerid]);
}
if(Spas[playerid] > 0)
{
format(tmp, sizeof(tmp), "%sSpas : %d\n", tmp, Spas[playerid]);
}
if(MP5[playerid] > 0)
{
format(tmp, sizeof(tmp), "%sMP5 %d\n", tmp, MP5[playerid]);
}
ShowPlayerDialog(playerid, 24, DIALOG_STYLE_LIST, "Vos armes", tmp, "Utiliser", "Annuler");
voila, mon code utilise 14 fois moins de mémoire et le résultat devrait être bon
++Sim++
-
oui mais bon tu est sur que ton système marche, dans mon script c'est un peu plus compliquer c'est pour cela que j'ai fait sa. Mais bon pour identifier ma liste item j'ai penser a une boucle mais je sait pas comment faire. J'avais déja fait un systeme par élimination mais sa ne marche pas quand les ligne ne sont pas en ordre.
Exemple :
M4: %d
MP5: %d
Est ce qu'on peut utiliser listitem avec par exemple liteitem = idx ?
J'ai penser aussi a une identification de la ligne avec variable. Mais pour encadre toute les possibilité cela prendrai énormément de place.
Exemple :
Si Mp5 = lititem 2 alors ligneMP5[playerid] = 2
Je suis vraiment bloquer :bangin
Double post
Et Sim ton système ne marche pas il me met juste la dernière enregistrer donc sa va pas et au niveau de l'identification j'ai réussit grâce a des variables merci a tous :D
voici comment jai fait pour identifier la ligne et ainsi connaitre la listitem c'était tout con mais je n'y avait pas penser tout de suite ^^
new ligne = 0;
if(m4[playerid][pValise] > 0){ ligne ++; lignem4[playerid] = ligne;}
if(9mm[playerid][pDrogue] > 0){ ligne ++; ligne9mm[playerid] = ligne;}
if(spas[playerid] > 0){ ligne ++; lignespas[playerid] = ligne;}
if(MP5[playerid] > 0){ ligne ++; lignemp5[playerid] = ligne;}