• 22 Avril 2025, 13:54:28


Auteur Sujet: utilisation ShowPlayerDialog avec string variable (résolu)  (Lu 2345 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Bonsoir à tous,

Je suis actuellement en train de mettre en place un système de coffre par l'intermédiaire de boites de dialogue afin de pouvoir y stocker des armes.
J'utilise donc la fonction ShowPlayerDialog. Il est nécessaire de nommer chaque ligne de la boite de dialogue dans la fonction.
Mon problème est que je souhaite utiliser des strings variables pour définir chaque ligne.
Actuellement mon script se compile et fonctionne avec une seule ligne à string variable alors qu'il m'en faudrait par exemple six.

Si quelqu'un sait comment intégrer plusieurs strings variables dans la fonction ShowPlayerDialog, ça me serait bien utile.

Cordialement,
Rémy.
« Modifié: 27 Août 2012, 00:17:11 par remy69400 »

Hors ligne Kevin_Carter

  • *
  • Tueur en série
  • Messages: 121
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #1 le: 21 Août 2012, 19:29:40 »
Tu as le DIALOG_STYLE_LIST pour ça :

Je te montre :
ShowPLayerDialog(playerid, 1, DIALOG_STYLE_LIST, "COFFRE", "Slot 1\r\nSlot 2...", "Valider","Annuler");

switch(dialogid)
{
   case 1:
   {
      if(!response)
      {
         ShowPLayerDialog(playerid, 1, DIALOG_STYLE_LIST, "COFFRE", "Slot 1\r\nSlot 2...", "Valider","Annuler"); //ou return 0;
      }
      else
      {
         if(listitem == 1)
         {
            //Faire quelque chose ...
         }
      }
   }
}

Voilà en espérant que ça t'aideras

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #2 le: 21 Août 2012, 20:33:24 »
Merci de ta réponse :)

J'ai du mal m'exprimer parce que j'utilise déjà le DIALOG_STYLE_LIST dans ma fonction ShowPlayerDialog.
Enfaite concrètement je voudrais que les paramètres qui correspondent à l'intitulé de chaque ligne soit des strings dont le texte est variable au lieu d'un texte constant.

J'arrive à mettre une string variable en paramètre mais pas deux, ce qui me limite à un seul slot.

Voici mon code actuel:

format(string_slot, sizeof(string_slot), "%s (%d munitions)", arme_fournie, munition);

ShowPlayerDialog(playerid, DIALOG_RECUPERER, DIALOG_STYLE_LIST, "Choix des armes à récupérer", string_slot, "Prendre", "Quitter");

Hors ligne Kevin_Carter

  • *
  • Tueur en série
  • Messages: 121
    • Voir le profil
Re : Re : utilisation ShowPlayerDialog avec string variable
« Réponse #3 le: 21 Août 2012, 21:25:00 »
Merci de ta réponse :)

J'ai du mal m'exprimer parce que j'utilise déjà le DIALOG_STYLE_LIST dans ma fonction ShowPlayerDialog.
Enfaite concrètement je voudrais que les paramètres qui correspondent à l'intitulé de chaque ligne soit des strings dont le texte est variable au lieu d'un texte constant.

J'arrive à mettre une string variable en paramètre mais pas deux, ce qui me limite à un seul slot.

Voici mon code actuel:

format(string_slot, sizeof(string_slot), "%s (%d munitions)", arme_fournie, munition);

ShowPlayerDialog(playerid, DIALOG_RECUPERER, DIALOG_STYLE_LIST, "Choix des armes à récupérer", string_slot, "Prendre", "Quitter");


Alors là ... Je n'ai jamais fais ce genre de code mais j'ai une idée, si tu initialisais une enumération ?
enum Arme
{
   slot1,
   slot2,
   slot3, //etc...
}

Là je bloque attends confirmation d'un scripteur confirmé ! Ou bien test pour voir mais je ne promet rien ...  :-[

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #4 le: 25 Août 2012, 14:10:20 »
Ça ne fonctionne pas avec l'enum, mais bien essayé :)

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #5 le: 25 Août 2012, 14:52:24 »
Salut.

Je vais sans doute dire une bétise, mais si ça ne marche pas c'est peut-être parce que tu mets toutes tes armes dans une seule variable ( arme_fournie ).
Il faudrait peut-être les classer par Slot et faire donc un string pour chaque slot différent.

A mon avis, pour prendre une arme d'un slot d'une personne il faut utiliser GetPlayerWeaponData.

Je n'ai jamais testé une telle chose par moi même, mais je pense que ce que je viens de te donner pourra t'être utile ;)
Merci à Colonel Marco pour la Signature

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #6 le: 25 Août 2012, 15:07:51 »
Enfaite non c'est pas vraiment ça.
Je vais essayer de vous expliquer mon système de A à Z pour une meilleur compréhension.

Le joueur X exécuté /voircoffre pour voir apparaitre une boite de dialogue dans laquelle il y a deux lignes:
Récupérer arme, et déposer arme.

Si le joueur X valide la ligne "recuperer arme", une nouvelle boite de dialogue s'affiche avec six lignes.
Considérons que le coffre est vide, alors ces six lignes affichent "0 munitions".
Si le joueur X possède une arme en main et qu'il choisit la ligne "deposer arme" après avoir fait /voircoffre, alors quand il validera la ligne "recuperer arme", une des six lignes affichera l'arme qui vient d'être déposée avec le nombre de munition correspondant.

Ce script là implique que lorsque le joueur valide la ligne "recuperer arme", l'on face apparaitre une boite de dialogue avec les six lignes dont le nom de chaque ligne varie en fonction des armes et des munitions qui ont été déposées précédemment.
Pour ce faire il faudrait que le paramètre "row" de ShowPlayerDialog se compose de six string dont la valeur change en fonction d'un format.
Mon problème actuel c'est que je n'arrive qu'a rentrer dans le paramètre "rox" qu'une seule string dont la valeur est modulable par un format. Si j'en met d'autres, la fonction ShowPlayerDialog n'est pas exécutable (pas de compilation valide).
Bien sur ça ne fonctionne pas que dans le cas où il s'agit de string variable, avec des string_constant ça fonctionne très bien, mais ce n'est pas ce que je recherche.

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #7 le: 25 Août 2012, 15:57:23 »
Je comprends le système, mais l'information de l'arme doit être stockée quelque part et que celle ci n'obtienne qu'une seule variable appelable ensuite dans la boite de dialogue.
Je vais sans doute faire fausse route, mais voici ce que je te propose :
Pour le coffre, vu que tu ne veux que 6 emplacements, il faudra que tu créé 6 booléens (je crois que ça s'appelle comme ça). Ensuite, dans le ShowPlayerDialog, il faudra appeler chaque booléen pour savoir si une arme lui est associé.

Pour être plus clair, je vais essayer de te donner un exemple :
La personne x veut mettre une arme dans un coffre. Vu que ce coffre est vide, l'arme se met dans l'emplacement 1 (Par exemple SlotCoffre1 = 1).
La personne x veut mettre une 2è arme dans le coffre. Vu que l'emplacement 1 est pris, cela se met dans l'emplacement 2 (SlotCoffre2 = 1).
La personne x retire l'arme de l'emplacement 1 (SlotCoffre1 = 0)
La personne x met une arme dans le coffre. Même si une arme est déjà présente dans l'emplacement 2, vu que l'emplacement 1 est libre l'arme se met directement dessus.

Maintenant, le coffre de la voiture est plein. Si la personne x veut mettre une arme, cela lui dira que le coffre est plein et qu'il ne peut plus stocker.

En associant les SlotCoffre directement aux véhicules et non à 1 personne, n'importe qui peut prendre une arme dans un veh, même si ce n'est pas lui qui le dépose. De plus, cela évitera qu'une personne mette une arme dans un coffre d'une voiture et puisse le retirer dans une autre.

Bien entendu, il faut réussir à stocker les infos des armes quand elles sont déposées et qu'elles puissent être appelé plus tard en utilisant la commande.
Merci à Colonel Marco pour la Signature

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #8 le: 26 Août 2012, 15:30:26 »
Citer
Pour être plus clair, je vais essayer de te donner un exemple :
La personne x veut mettre une arme dans un coffre. Vu que ce coffre est vide, l'arme se met dans l'emplacement 1 (Par exemple SlotCoffre1 = 1).
La personne x veut mettre une 2è arme dans le coffre. Vu que l'emplacement 1 est pris, cela se met dans l'emplacement 2 (SlotCoffre2 = 1).
La personne x retire l'arme de l'emplacement 1 (SlotCoffre1 = 0)
La personne x met une arme dans le coffre. Même si une arme est déjà présente dans l'emplacement 2, vu que l'emplacement 1 est libre l'arme se met directement dessus.

Maintenant, le coffre de la voiture est plein. Si la personne x veut mettre une arme, cela lui dira que le coffre est plein et qu'il ne peut plus stocker.

En associant les SlotCoffre directement aux véhicules et non à 1 personne, n'importe qui peut prendre une arme dans un veh, même si ce n'est pas lui qui le dépose. De plus, cela évitera qu'une personne mette une arme dans un coffre d'une voiture et puisse le retirer dans une autre.

Bien entendu, il faut réussir à stocker les infos des armes quand elles sont déposées et qu'elles puissent être appelé plus tard en utilisant la commande.
C'est exactement ce que fait mon script :)

Enfaite, oublions le script.

Je reprend à zéro.

Il existe là fonction: ShowPlayerDialog:
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])

playerid The ID of the player to show the dialog to.
dialogid An ID to assign this dialog to, so responses can be processed. Max dialogid is 32767. Using negative values will close any open dialog.
style The style of the dialog.
caption[] The title at the top of the dialog. The length of the caption can not exceed more than 64 characters before it starts to cut off.
info[] The text to display in the dialog. Use \n to start a new line and \t to tabulate.
button1[] The text on the left button.
button2[] The text on the right button. Leave it blank to hide it.


Returns This function doesn't return a specific value

Voici un exemple d'utilisation avec le style DIALOG_STYLE_LIST (style qui nous concerne):
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Weapons", "AK47\nM4\nSniper Rifle", "Option 1", "Option 2");

Dans ce code le paramètre info[] est composé de texte constant soit "AK47\nM4\nSniper Rifle".
AK47 correspondant à la première ligne de la boite de dialogue s'affichant.
M4 correspondant à la deuxième ligne de la boite de dialogue s'affichant.
SniperRifle correspondant à la troisième ligne de la boite de dialogue s'affichant.

Ce que je désire c'est faire en sorte qu'au lieu d'avoir des textes constants pour chacun des noms de mes lignes, je réussisse a avoir plusieurs strings dont les valeurs seront variables.
Je sais comment modifier ces strings pour leur attribuer des valeurs variables, le problème s'agit uniquement de savoir comment déclarer ces strings variables dans le paramètre info[] de ShowPlayerDialog.

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #9 le: 26 Août 2012, 18:16:21 »
J'ai très bien compris ce que tu voulais, mais je pense que tu n'as pas compris ce que je voulais dire.
En faites, avec le système que je t'ai proposé, ce n'est pas le String qui est appelé, mais SlotCoffre1, SlotCoffre2,... qui sont appelé dans le ShowPlayerDialog et ce sont eux qui afficheront les armes qui leurs sont associés (du moins si une arme se trouve dans le slot).
Chaque Veh n'aura que 6 SlotCoffre et chaque SlotCoffre n'aura alors que 2 valeurs. Si la valeur = 0 alors "Vide", sinon la valeur = 1 et affiche l'arme qui lui est associé.

Pour réaliser ce système, il faut que le SlotCoffre se trouve dans les Infos du Veh (en espérant que tu as fait un système de Veh, il faut qu'il se trouve au même endroit que la vie du Veh, la couleur, l'essence,...).

Si déjà tu arrives à faire en sorte de récupérer les armes et de les afficher dans le ShowPlayerDialog, tu pourras par la suite le développer encore un peu plus pour que les Armes Stocké donnent le même nombre de munitions que les armes récupérer (il faudra alors encore ajouter des infos dans le Veh pour ça) ;)

Ce système est réalisable et avec les indices que je t'ai donné (même si on pourrait croire qu'il y en a pas beaucoup), tu devrais pouvoir t'en sortir (du moins si tu n'es pas un Débutant)

SlotCoffre est un mot que j'ai inventé, tu peux donc très bien en choisir un autre si tu veux ;)

PS: Travail par étape et n'essaye pas de tout faire d'un coup car c'est le meilleur moyen pour se planter ou oublier quelque chose  ;)
Merci à Colonel Marco pour la Signature

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #10 le: 26 Août 2012, 18:38:52 »
Merci de ta réponse :)

Pour l'instant j'ai mis en place une solution alternative qui me permet d'avoir mes 6 slots  et ma récupération d'arme et munitions plus la possibilité de les déposer.

Mais ça reste du dépannage étant donné que le joueur doit d'avoir écrire /voircoffre, puis cliquer sur la ligne "Recupérer arme", puis sur la ligne "Slot X" (de 1 à 6), et là s'ouvre une dernière boite de dialogue qui affiche l'arme et les munitions présentes dans le slot en question.

Mais bon c'est du dépannage je préfèrerai réussi à voir de quoi est composé chaque slot dès que j'ai cliqué sur la ligne "Récupérer arme".

Tu as raison j'ai du mal te comprendre alors.
Alors j'ai bien un dossier Voiture avec un fichier pour chaque voiture du serveur, et dans chacun de ces fichiers il y a s "six slots d'armes x" et "six slots munitions x" (de 1 à 6).

J'ai du mal à comprendre ce que tu veux dire dans cette phrase là enfaite:
Citer
Chaque Veh n'aura que 6 SlotCoffre et chaque SlotCoffre n'aura alors que 2 valeurs. Si la valeur = 0 alors "Vide", sinon la valeur = 1 et affiche l'arme qui lui est associé.
Notamment dans le cas où par exemple SlotCoffre 1 = 1, comment est-ce  dans ma boite de dialogue le nom de la ligne pourrait prendre le nom de l'arme et de la munition ?



Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable
« Réponse #11 le: 26 Août 2012, 19:35:55 »
Mon exemple n'est qu'un modèle basique et ne prenait pas en charge les munitions.

Pour être un peu plus détaillé, voilà comment je verrais les choses :

Par exemple la Fonction déposer.
new IdArme = GetPlayerWeapon(playerid);
if(VInfo[vehicleid][vArme1]==0)
{
SlotCoffre1 = 1;
VInfo[vehicleid][vArme1] = IdArme;
RemovePlayerWeapon(playerid, IdArme);
}

Dans la fonction retirer tu fais l'inverse
new IdArme;
if(SlotCoffre1==1)
{
SlotCoffre1 = 0;
IdArme = VInfo[vehicleid][vArme1];
VInfo[vehicleid][vArme1] = 0;
GivePlayerWeapon(playerid, IdArme);
}

Et pour l'afficher dans un ShowPlayerDialog
new IdArme1 = VInfo[vehicleid][vArme1];
new IdArme2 = VInfo[vehicleid][vArme2];
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Weapons", "IdArme1\IdArme2", "Prendre", "Annuler");


Encore une fois, le système que je te montre ne prends pas en compte les munitions et n'est absolument pas complet (si tu le prend tel quel, il y a de fortes chances que ça ne fonctionne pas du tout  ::) ), mais une fois que tu arriveras à stocker/retirer les armes du veh, il te sera facile d'ajouter les munitions dans le système.
Je ne te donnerais surement pas plus d'infos sur la procédure car ça équivaudrait à ce que je fasse le système moi même, mais avec tout ça tu devrais pouvoir réussir.

Edit : Ajout de 2 choses dans le code que j'avais oublié.
« Modifié: 26 Août 2012, 20:09:08 par Diablo62 »
Merci à Colonel Marco pour la Signature

Hors ligne remy69400

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
utilisation ShowPlayerDialog avec string variable (RESOLU)
« Réponse #12 le: 27 Août 2012, 00:16:55 »
Merci beaucoup pour tout le temps que as consacré à mon problème.
Ça m'a ouvert les yeux, et ça fonctionne très bien à présent :p

Merci encore.

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : utilisation ShowPlayerDialog avec string variable (résolu)
« Réponse #13 le: 27 Août 2012, 00:32:51 »
Content d'avoir pu t'aider ;)
Merci à Colonel Marco pour la Signature