Aller au contenu


Lire Un Livre à Partir De L'inventaire


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

#1 Cybeber

Cybeber

Posté 25 juin 2006 - 18:11

Pour mon mod "Chateau de l'Alchimiste" j'ai  besoin d'effectuer une action toute bête, ajouter deux topics et mettre à jour mon journal lorsque le PJ lit un mot. Petit détail non négligeable, le mot est trouvé sur un cadavre.
Donc script tout simple :

Begin CA_UpNote

short doOnce
short OnPCEquip


if ( doOnce == 1 )
	Return
endif

if ( GetJournalIndex CA_AlchCastle >= 100 )
	Return
endif

if ( OnActivate == 1 )
	  if ( GetJournalIndex CA_AlchCastle == 0 )
		AddTopic "Chateau de l'Alchimiste"
		AddTopic "Alchimiste Thélonious"
		Journal CA_AlchCastle 5
	endif
	Set doOnce to 1
	Activate
endif

if ( OnPCEquip == 1 )
	  if ( GetJournalIndex CA_AlchCastle == 0 )
		AddTopic "Chateau de l'Alchimiste"
		AddTopic "Alchimiste Thélonious"
		Journal CA_AlchCastle 5
	endif
	Set doOnce to 1
endif

End CA_UpNote

Et bien ça ne marche pas, si je l'active dans le décors, pas de problème tout roule, en revanche si je le lis dans l'inventaire, pas de topic et pas de mise à jour du journal...
Je n'ai pas testé avec la fonction HasItemEquiped vu que je veux rester sur un mod très ouvert et fonctionnant même avec Morrowind seul.

De fait, pour le moment, j'ai recours à l'astuce suivante,  un peu bancale :

Begin CA_UpNote

short doOnce
short OnPCAdd
short State

if ( doOnce == 1 )
	Return
endif

if ( GetJournalIndex CA_AlchCastle >= 100 )
	Return
endif

if ( OnActivate == 1 )
	Set State to 1
endif

if ( OnPCAdd == 1 )
	if ( MenuMode == 1 )
		Set State to 1
		Set OnPCAdd to 0
	endif
endif

if ( GetJournalIndex CA_AlchCastle == 0 )
	if ( State == 1 )
		AddTopic "Chateau de l'Alchimiste"
		AddTopic "Alchimiste Thélonious"
		Journal CA_AlchCastle 5
		Set State to 0
		Set doOnce to 1
		Activate
	endif
endif


End CA_UpNote

Là évidemment ça marché dès qu'on prend la lettre elle s'ouvre et le journal est mis à jour, mais bon de manière crade.
Donc merci pour tous les bons conseils !

Modifié par Cybeber, 25 juin 2006 - 18:13.


#2 dededos

dededos

Posté 25 juin 2006 - 18:36

Le probleme est que "OnActivate" ne marche que quand, justement, tu actives l'objet, c'est a dire quand tu appuies sur la touche espace lorsque ton pointeur est sur l'objet. C'est ca une activation pour Morrowind.


Ce que tu pourrais faire pour contourner le probleme, c'est associé le script au cadavre et ensuite :

- soit mettre a jour le journal et ajouter les deux dialogues quand on fouille le cadavre, c'est a dire quand on l'active, on y trouvera la note mais elle ne mettra pas a jour le journal. ( ne pas oublier de mettre un "Activate" pour qu'on ait quand meme acces a l'inventaire du cadavre )

- soit faire le meme script mais cette fois ci avec un AddItem "Id_de_la_note" et sans Activate avec toujours le journal qui se met a jour et les topics qui s'ajoutent et tu peux meme ajouter un Messagebox, style "Vous fouillez le cadavre et vous trouvez une note". Ce qui fait que l'on a pas accès a l'inventaire du cadavre mais lorsqu'on active le cadavre, mais on obtient la note et le journal se met a jour.


Voila pour les idées de script qui je pense peuvent contourner ton probleme.  :)

Si tu as besoin d'aide pour créer ces scripts je peux eventuellement t'aider, mais vu les scripts que tu proposes je pense que cela ne devrait pas causer de probleme pour toi.  :o


Sinon derniere idée, vu que j'avais eu le meme probleme que toi dans un mod, ce que j'avais fait, vu que moi on obtenait la note avec un dialogue, c'est un "Oups, vous venez de faire tomber la note par terre", ce qui fait que la lettre se toruve par terre ( facile grace a un "disable" et un "removeitem" ) et dans ce cas, ton script marche. Puis ca donne un coté un peu moins tout programmé tout net.


A toi de voir maintenant si ces solutions te conviennent et si oui laquelle tu preferes. :evil:
"Wrong, Do it again!"
"If you don't eat yer meat, you can't have any pudding. How can you have any pudding if you don't eat yer meat?"
"You! Yes, you behind the bikesheds, stand still laddy!"

--------------------

Membre des Fervents Partisans de l'Immuabilité Avatarienne!

#3 Cybeber

Cybeber

Posté 25 juin 2006 - 19:09

Merci Dededos, je ne m'attendais pas à une réponse si rapidement !

Pour les astuces que tu proposes, j'aime beaucoup le "Oups, vous avait fait tombé la note", que je vais remplacer par un "En fouillant le cadavre vous faites tombé une note cachée dans une doublure", ça fait presque fait exprès du coup avec tout plein de mystères ! :evil:

Je rajouterais le script dès qu'il sera fini, c'est une bonne manière de contourné le truc et je pensais bien ne pas être le seul à avoir rencontré le problème.

Ca marche Nickel Dededos, c'est vraiment plus sympa comme ça.   :o  

Donc, script sur la note :

Begin CA_UpNote

short doOnce

if ( doOnce == 1 )
	Return
endif

if ( OnActivate == 1 )
	if ( GetJournalIndex CA_AlchCastle == 0 )
		AddTopic "Chateau de l'Alchimiste"
		AddTopic "Alchimiste Thélonious"
		Journal CA_AlchCastle 5
	endif
	Set doOnce to 1
	Activate
endif

End CA_UpNote

On constate qu'on ne vérifie plus que le PJ n'est pas déjà découvert le chateau, vu que la note n'apparaitra plus que si le chateau n'a pas encore était visité.

Ce qui donne comme script pour le cadavre :

Begin CA_MissNote

short doOnce

if ( doOnce == 1)
	Return
endif

if ( GetJournalIndex CA_AlchCastle >= 100 );si le chateau a était visité pas de note
	Return
endif

if ( OnActivate == 1 )
	PlaceAtPC "_CA_AlchimisteNote1" 1 64 0
	MessageBox "En fouillant le cadavre vous faites tomber une note cachée."
	Set doOnce to 1
	Activate
endif

end

J'en ai profité pour faire gémir le cadavre avant que le PJ n'arrives.
Ce qui donne comme script final :

Begin CA_MissNote

short doOnce
short Shout
short Sigh

if ( doOnce == 1)
	Return
endif

if ( GetJournalIndex CA_AlchCastle >= 100 )
	Return
endif

if ( Shout <1 )
	if ( GetDistance Player < 3000 )
		MessageBox "Au secours !"
		set Shout to 1
	endif
endif

if ( Sigh <1 )	
	if ( GetDistance Player < 900 )
		MessageBox "Arrrrggh"
		set Sigh to 1
	endif
endif

if ( OnActivate == 1 )
	PlaceAtPC "_CA_AlchimisteNote1" 1 64 0
	MessageBox "En fouillant le cadavre vous faites tomber une note cachée."
	Set doOnce to 1
	Activate
endif

end

En encore merci dededos, c'est vraiment une idée très sympa qui comble bien les lacunes de OnPCEquip.
J'espère que ça servira à d'autres !  :)

Modifié par Cybeber, 25 juin 2006 - 20:33.





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

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