[Résolu]Ajouter Un Nombre D'Utilisations À Un Objet
#1
Posté 15 septembre 2010 - 11:08
Je suis en train de faire un mod qui retire aux stimpaks l'effet de soins des membres infirmes et ajoute un nouvel objet, la Trousse de Médecin, qui permet de soigner les infirmités moyennant un test prenant en compte la compétence Médecine. Bref un système de soin des blessures plus dans l'esprit de Fallout 2, et moins complexe que des mods comme Real Injuries ou Triage.
Jusqu'à présent tout fonctionne, mais je cherche un moyen de donner un certain nombre d'utilisations à cette Trousse de Médecin ( 30 par exemple ) avant qu'elle ne soit "absorbée". Le problème c'est qu'il ne faut pas que lorsque la Trousse est jetée, puis ramassée, le nombre d'utilisation retourne à sa valeur maximum. Sachant également que le Joueur peut avoir plusieurs Trousses simultanément.
Actuellement, la Trousse est un Livre pour qu'elle puisse être dans l'onglet "Aide" du Pip-Boy et j'aimerais éviter de la transformer en vêtement ou en arme pour pouvoir en gérer le nombre d'utilisation en utilisant la durabilité.
Es-ce que quelqu'un aurait un moyen d'obtenir cela ?
Merci d'avance.
P.S : J'utilise le GECK depuis peu, peut-être existe t'il un moyen de faire ça sans utiliser de script. Désolé d'avoir poster dans la mauvais section du forum si c'est le cas.
#2
Posté 15 septembre 2010 - 19:52
Ton idée de trousse de soins est très bonne !
Une question : as-tu mis les références de ta trousse en Persistent Reference ? C'est peut-être ça qui coince... Essaie voir avec une trousse qui a une référence unique (mets une ID à la référence, comme tu l'as fait pour l'objet de base).
Le chat CROIT appartenir à une race supérieure évoluée. Mais ce n'est qu'un rebut pervers avec des yeux belzebuth et des griffes.
------
Moddeur de Blye Citadelle du Chaos pour Morrowind et Vault panic pour Fallout3
#3
Posté 15 septembre 2010 - 21:26
Tout d'abord merci de ta réponse .
Mais soit c'est moi qui est mal compris ( je débute avec le GECK ), Soit c'est toi :
Ma Trousse de Médecin est un objet que tu as dans ton inventaire, qui est un peu comme un Stimpak, sauf qu'elle ne soigne uniquement les membres infirme ( elle rend un peu de santé également, mais pas beaucoup ) et qu'elle ne doit être utilisable qu'un certain nombre de fois avant de disparaître.
J'ai donc attacher un script à mon objet "Trousse de médecin" qui ouvre un menu pour sélectionner la partie du corps que l'on souhaite soigner, puis lance un test basé sur la compétence médecine du joueurs pour savoir si il réussi, ou échoue. Jusque là pas de problèmes tout fonctionne. Le problème c'est pour le nombre d'utilisation possible de la Trousse, qui lui doit être unique a chaque Trousse.
Si je ne m'abuse les Persistant Reference ne sont disponible que pour les élément de décors ou les PNJ, comme les "Container" par exemple.
A moins qu'il n'existe un moyen de faire la même chose pour les objets dans l'inventaire mais dans ce cas je ne sais pas comment faire.
J'ai deux questions :
- Es ce qu'il est possible d'accéder à une variable déclarée dans un script lié à un objet via un autre script ? Je sais le faire avec un script lié a une quête ( IDDeLaQuete.NomDeLaVariable ) mais pas avec un script d'objet.
- Es ce qu'une variable déclarée dans un script d'objet est unique pour chaque référence de cet objet ou est une variable globale pour toutes les références de cet objet ?
Selon les réponses ça pourrait me donner la solution.
Pour la Trousse de médecin, ce n'est pas vraiment mon idée, elle était déjà présente dans les premiers Fallout ( et le sera dans New Vegas ). Mais merci ^^
#4
Posté 16 septembre 2010 - 08:13
réduise son nombre d'utilisations, il faudrait d'abord peut etre créer plusieurs ID de trousses de soins ou il est précisé le nombre d'utilisations qui leur reste, l'astuce serait qu'une fois utiliser la trousse de soins sois remplacée par une autre avec une utilisations en moins, pour finir par une trousse vide au bout de 30 utilisations par exemple. Exemple : player.removeitem trousseA 1
player.additem trousseB 1
Sinon j'avais penser à une alternative, celle d'avoir dés le départ du jeu une trousse de soin qu'ont pourré utilisé seulement si on posséde des kit de soins ( à créer ) trouvés sur les terres désolés
qui diminueront à chaque utilisations de la trousse. Cette trousse pourrait aussi bien nous guerrir des radiations, des parties blessées et... nous couterais
un kit ou meme voir plusieurs à chaque utilisation. L'idée m'est venu avec le mod Cigarettes utilisables que tu peux trouver sur wiwiland.
Tu y possede un sac à clops ( la trousse de soin ) et en cliquant deussus dans ton inventaire tu peux ouvrir un paquet une cartouche ou te mettre une cigarette au levre ( se soigner des radiations, des blessures etc.. ).Tu peux toujours le télécharger et matter le script.
a pluche Ridiane
Seth
Modifié par Seth Harzinski, 16 septembre 2010 - 08:49.
#5
Posté 16 septembre 2010 - 20:15
Enfin ce n'est pas un gros problème je vais revoir mon code pour arranger ça. Merci beaucoup Seth pour l'idée. Le résultat est encore meilleur que ce que je voulais faire au départ.
EDIT : Voila tout fonctionne correctement ! Je mettrais les scripts utilisés ici, demain, au cas où quelqu'un chercherait à faire la même chose.
Modifié par Ridiane, 16 septembre 2010 - 22:02.
#6
Posté 17 septembre 2010 - 05:45
A pluche
Seth.
#7
Posté 17 septembre 2010 - 10:21
Tout d'abord j'ai crée une quête et son script, qui me servira uniquement à stocker des variables :
scn CEVarScript short CEUse ; Si une utilisation a été faite : 1 sinon 0 short CEType ; contient le Type de l'objet utilisée
Le type de l'objet est en fait le n° de l'objet qui a été utilisé, par exemple dans mon cas : 1 si il s'agit d'une trousse neuve, 2 si c'est celle qui a été utilisée une seule fois, 3 si elle a été utilisé 2 fois etc...
Ensuite j'ai crée plusieurs fois le même objet (selon le nombre d'utilisations possibles souhaitée ) avec des ID différents, pour moi c'était CEDocKit1 pour une trousse neuve, CEDocKit2 pour une trousse avec une utilisation etc... Ces objets ne sont que des activateurs pour afficher le menu des soins
A chacun des ces objet j'ai attaché un script, comme ceci
scn CEDocKitStartScript float ceTimer ;Timer pour l'ouverture du menu short doOnce ; 1 Si l'activateur a été utiliser Begin OnEquip if player.IsInCombat == 1 ; Joueur en combat ? ShowMessage CEDocKitMenuCombat ; afficher message erreur combat player.UnequipItem CETokenDoc 0 1 ; retirer le token menu else set ceTimer to 0.7 ; régler le Timer à 0.7 sec ( le Pipboy mets 0.5 sec à ce fermer ) set doOnce to 1 ; activateur utilisé endif End Begin GameMode if CEVarQuest.CEUse == 1 && CEVarQuest.CEType == 1 ; Si une utilisation a été faite et si c'est une trousse neuve set CEVarQuest.CEUse to 0 ; Remise à zero du flag d'utilisation set CEVarQuest.CEType to 0 ; Remise à zero du type de l'objet utilisé player.AddItem CEDocKit2 1 1 ; ajouter un activateur avec une utilisation en moins RemoveMe ; Retirer l'activateur neuf else if doOnce == 1 ; Si l'objet est utilisé if ceTimer > 0 ; Si le temps n'est pas écoulé set ceTimer to ceTimer - GetSecondsPassed ; Retirer au timer le temps écoulé else set CEVarQuest.CEType to 1 ; Un objet neuf utilisé player.AddItem CETokenDoc 1 1 ; Ajouter le token menu set doOnce to 0 ; Remise à zero du flag d'utilisation de l'activateur endif endif endif End
Ce Code est a adapter selon l'activateur auquel il est attaché, par exemple pour la Trousse de soins avec une seule utilisation ( CEDocKit2 pour moi ) :
Comme j'utilise un menu, il faut également crée un objet Token qui contient le code du menu, le joueur ne doit pas pouvoir le voir, décochez bien playable lorsque vous le créez. Le mieux est d'utiliser un type Armure qui ne prend aucun emplacement sur le perso (aucun Biped Object utilisé ).
A ce Token on attache le script de Menu :
(j'ai retiré tout le code spécifique a mon cas)
scn CEDocKitMenuScript short CEButton1 ;Contiendra le bouton qui a été pressé par le joueur short CEButton2 ;Contiendra le bouton qui a été pressé par le joueur short CEMenuLevel ; Niveau du menu begin GameMode if CEMenuLevel == 0 ; Si aucun menu afficher showMessage CEDocKitMenu ; afficher Menu Principal set CEMenuLevel to 1 ; Menu Niveau 1 endif if CEMenuLevel == 1 ; Si Menu Principal affiché set CEButton1 to GetButtonPressed ; Stocker le bouton pressé par le joueur if CEButton1 == -1 ; Si aucun bouton pressé Return ; Retour à la case départ ; Tête elseif CEButton1 == 0 ; Si le bouton 0 est pressé set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CETeteSoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Torse elseif CEButton1 == 1 ; Si le bouton 1 est pressé set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CETorseoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Bras Droit elseif CEButton1 == 2 set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CEBrasDSoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Bras Gauche elseif CEButton1 == 3 set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CEBrasGSoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Jambe Droite elseif CEButton1 == 4 set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CEJambeDSoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Jambe Gauche elseif CEButton1 == 5 set CEVarQuest.CEUse to 1 ; Marquer qu'une utilisation a été faite ;code pour ce choix showMessage CEJambeGSoin set CEMenuLevel to 2 ; passer au Menu Niveau 2 ; Aucune else ; si le bouton 6 est pressé RemoveMe ; retirer le Token Menu Set CEMenuLevel to 3 ; passer en Niveau 3 du menu endif endif if CEMenuLevel == 2 ; Si un Menu 2 est affiché set CEButton2 to GetButtonPressed ; stocker le bouton pressé if CEButton2 == -1 ; si aucun bouton pressé Return ; retour au Menu 2 elseif CEButton2 == 0 ; si le bouton 0 est pressé set CEMenuLevel to 3 ; passer en niveau 3 endif endif End
CEMenuLevel permet de naviguer dans le menu : Si elle vaut 1, on est dans le Menu Principal, 2 on est dans un des messages découlant du choix du joueur (ici ce sont juste des MessageBox avec un 'ok'), 3 n'existe pas ce qui permet de sortir du menu.
Voilà j'espère que c'est compréhensible, sinon je suis à votre disposition pour toute questions.
et Merci à Sucresalesucre et Seth Harzinski pour leurs aide.
Modifié par Ridiane, 17 septembre 2010 - 10:24.
#8
Posté 17 septembre 2010 - 22:28
et essayer d'en creer un interessant pour mon mod.
A pluche Ridiane' .
Seth.
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)