• 04 Juin 2026, 14:39:33


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - remy69400

Pages: [1] 2
1
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.

2
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 ?



3
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.

4
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.

5
Ça ne fonctionne pas avec l'enum, mais bien essayé :)

6
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");

7
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.

8
Ce genre de condition n'a jamais fonctionné avec moi non plus, il vaut mieux utiliser une variable Moteur qui prend la valeur 1 chaque fois qu'il est allumé et 0 lorsqu'il est éteint.

Après un très long travail de rechercher, de bricolage et d'expérience en tout genre je suis arrivé à ma fonction grâce à cette variable Moteur, merci  à vous tous.

La réponse pour ceux qui sont dans le même cas que moi passe par la mise en place d'une variable du type:

new engineOn[MAX_VEHICLES];engineOn[GetPlayerVehicleID(playerid)] = false;engineOn[GetPlayerVehicleID(playerid)] = true;if (engineOn[GetPlayerVehicleID(playerid)])if (!engineOn[GetPlayerVehicleID(playerid)])
Merci à Foo pour son GM qui montre après beaucoup de réflexion l'utilisation de cette variable.

9
Je l'ai déjà le "ManualVehicleEngineAndLights();"


Dans mon script, le /demarrer me m"écrit à l'écran "Le moteur est allumé" car il rentre le "else".
Ce qui signifie que le "engine == VEHICLE_PARAMS_OFF" n'est pas validé, j'en déduis que mon engine ne doit pas correspondre au "engine" du véhicule en question.
Je pense que c'est là que se trouve mon erreur.
Je comprends pas ton problème...

Pour simplifier:
Quand je fais /demarrer cela m'écrit uniquement "Le moteur est déjà allumé", alors qu'il est éteint, et mon moteur ne s'allume jamais. (Mon SetTimerEx fonctionne très bien)

10
J'ai cherché dans le showroom et ait trouvé un sujet qui est de toi avec tout un système de véhicule (essence, vente, code pin,etc...)
J'ai trouvé d'autre sujet intéressant mais je ne fais pas de lien avec mon problème de engine. Je vais essayer d'être clair.

Ce que je souhaite c'est que pour que ma condition de "if" soit que le moteur du véhicule dans lequel se trouve le joueur soit éteint. Et vice versa.
Voici ce que j'ai pu faire jusqu'à présent:

Voici mon script:    if (strcmp("/demarrer", cmdtext, true, 10) == 0)
{
    new engine, lights, alarm, doors, bonnet, boot, objective;
if(IsPlayerInAnyVehicle(playerid))
  {
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
          GetVehicleParamsEx(GetPlayerVehicleID(playerid), engine, lights, alarm, doors, bonnet, boot, objective);
  if(engine == VEHICLE_PARAMS_OFF)
  {
new messagedemarrage[128], joueur[MAX_PLAYER_NAME];
GetPlayerName(playerid, joueur, sizeof(joueur));
format(messagedemarrage, sizeof(messagedemarrage), "Le véhicule de %s est entrain de démarrer...", joueur);
SendClientMessage(playerid, GRIS, messagedemarrage);
    SetTimerEx("DemarrerVehicule", 5000, false, "i", playerid);
}
                     else
{
SendClientMessage(playerid, GRIS, "Le moteur est déjà allumé");
}
}
  }
return 1;
}



Voici ton script:if(strcmp(cmdtext, "/moteur", true) == 0)
           {
             new veh = GetPlayerVehicleID(playerid);
             new engine, lights, alarm, doors, bonnet, boot, objective;
             if(IsPlayerInAnyVehicle(playerid))
                {
                     if(veh != INVALID_VEHICLE_ID)
                    {
                        GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
                        if(engine == VEHICLE_PARAMS_OFF)
                        {
                            SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, COLOR_LIGHTBLUE, "Vous venez d'allumer le moteur de la voiture.");
                        }
                        else
                        {
                            SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, COLOR_LIGHTBLUE, "Vous venez d'eteindre le moteur de la voiture.");
                        }
                    }
                }
             return 1;
    }

Dans mon script, le /demarrer me m"écrit à l'écran "Le moteur est allumé" car il rentre le "else".
Ce qui signifie que le "engine == VEHICLE_PARAMS_OFF" n'est pas validé, j'en déduis que mon engine ne doit pas correspondre au "engine" du véhicule en question.
Je pense que c'est là que se trouve mon erreur.

11
Bonjour (Bonsoir ? :))

J'avance peu à peu dans mon script grâce à tout les tutos présents sur gtao et vos conseils et je tiens d'abord à vous en remercier.
Si je post à nouveau c'est bien parceque je suis face à un problème que je ne surmonte pas malgré mes folles recherches.

Je suis en pleine création d'une fonction /demarrer qui fonctionne assez bien avec un Timer dont je suis assez fier (n'oublions pas que je débute :D).
Hélas je voudrais ajouter en condition le fait que le moteur soit allumé ou éteint via le engine.

J'ai eu beau trafiquer avec le GetVehicleParamsEx, et avoir rechercher durant de très longues heures, cela reste infructueux, j'en appel donc à vos connnaissances si vous le voulez bien.
Je vous remercie de votre lecture,
Remy.




post scriptum: J'ai pu voir par ci par là : engineOn[playerid], ou gEngine[GetPlayerVehicleID] mais ceci ne m'aide pas n'ayant aucune expliquation ou même le script en entier.

12
Je viens de voir ta réponse , je t'en remerci cela m'a bien aidé, ça fonctionne parfaitement.

Merci encore,
Rémy.

13
Bonjour une nouvelle fois :)
Je fais appel à vous uen nouvelle foi si vous le voulez bien pour la création de la fonction /skin.
Je l'ai créee et elle ne fonctionne qu'à moitié en réalité.
Je me suis servi du jolie tuto de Fusion poru ceci, et ne trouve pas la solution à mon problème.
Merci à vous de votre attention.

Problème:  Lorsque je l'utilise elle change le skin de n'importe qui, cependant elle ne met que le skin de CJ (personnage du solo) alors que j'utilise d'autre id que l'id 0.

Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(heal, 4, cmdtext);
    dcmd(skin, 4, cmdtext);
}
Code: (pawn) [Sélectionner]
dcmd_skin(playerid, params[])
{
new id;
new skin;
if ((sscanf(params, "uu", skin, id))) SendClientMessage(playerid, VERT, "Usage: \"/skin [IDskin] [IDjoueur]\"");
else if (id == INVALID_PLAYER_ID) SendClientMessage(playerid, BLEU, "Joueur déconnecté");
else
{
    SetPlayerSkin(id, skin);
}
return 1;
}

14
Je viens d'aller le lire en effet, je vois pas non plus :O

J'avais une autre question concernant le fameux "strtok", et autant la poser là plutot que créer un nouveau topic, non ? :)
J'aurai aimé savoir à quoi correspond exactement sa fonction ? J'ai lu deux, trois chose dessus sans comprendre réellement sa fonction.

D'où cette lige que je ne comprend pas:

strtok(cmdtext, idx);
Si c'était possible de me l'expliquer en détail ? :P C'est uniquement par curiosité car je vais par là suite utiliser la tuto de Fusion.
Merci à toi.

15
D'accord, je pensais en effet qu'elle était intégrée à une des directives.
Je te remercie, et repasserai à nouveau dans ton tuto (sacré tuto d'ailleur ;))

Résolu.

Pages: [1] 2