Aller au contenu


[Résolu]Ajouter Un Nombre D'Utilisations À Un Objet


  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 Ridiane

Ridiane

Posté 15 septembre 2010 - 11:08

Bonjour,

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 sucresalesucre

sucresalesucre

    En fait y'a des accents cachés


Posté 15 septembre 2010 - 19:52

Bonjour,

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 Ridiane

Ridiane

Posté 15 septembre 2010 - 21:26

Bonsoir,

Tout d'abord merci de ta réponse Image IPB.

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 Seth Harzinski

Seth Harzinski

Posté 16 septembre 2010 - 08:13

Lu' Ridiane, comme toi je suis novice pour l'utilisation du geck mais j'avais pensé à un moyen de donner l'illusion que la trousse de soins
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.

Il regarde le monde à travers les yeux d'un enfant, c'est pour ça qu'il ne fait rien.

#5 Ridiane

Ridiane

Posté 16 septembre 2010 - 20:15

Donc, j'ai réussi à faire tout ça. J'ai crée 5 Trousse de soins qui s'interchangent au fur et à mesure des utilisations. MAIS pour le moment, l'utilisation des Trousses ce fait de façon un peu bizarre. Lorsque l'on en utilise une, quelque soit son nombre de "charge", c'est toujours la plus "chargée" qui est utilisée. Du coup on a d'abord toutes les Trousses 1 qui s'utilisent, puis les Trousses 2 etc... et ceux quelque soit la version de l'objet sur lequel on clique.

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 Seth Harzinski

Seth Harzinski

Posté 17 septembre 2010 - 05:45

J'ai hate de voir ton script ca m'aiderait à progresser.Tu devrais créer un sujet sur ton mod dans "les mods fallout: création ", ca serait sympa de suivre son évolution.
A pluche

Seth.
Il regarde le monde à travers les yeux d'un enfant, c'est pour ça qu'il ne fait rien.

#7 Ridiane

Ridiane

Posté 17 septembre 2010 - 10:21

Donc voilà comment j'ai procédé :

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 ) :

Spoiler



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 Seth Harzinski

Seth Harzinski

Posté 17 septembre 2010 - 22:28

Merci a toi surtout pour les scripts , je vais étudier ça
et essayer d'en creer un interessant pour mon mod.
A pluche Ridiane' .

Seth.
Il regarde le monde à travers les yeux d'un enfant, c'est pour ça qu'il ne fait rien.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)