Aller au contenu


Faire Tomber Un Pnj Malade, Puis Le Guérir


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

#1 Troglodyte

Troglodyte

Posté 01 septembre 2015 - 22:02

Bonsoir les loulous,

Je reviens vers vous avec une nouvelle énigme. Comme le titre du sujet l'indique, je voudrais faire tomber un PNJ malade et le soigner avec un sort. J'ai conçu le script suivant qui bien sûr ne fonctionne pas. Je m'inspire des scripts en jeu peur la guérison, mais pour la maladie, je n'ai rien trouvé de mieux que de faire addspell avec une maladie, et je crois que c'est le problème. Manifestement le jeu ne considère pas ça vraiment comme une maladie pour le PNJ.

Citation

if ( getjournalindex bus_maladie == 10 )
addspell "brown rot"
if ( GetcommonDisease == 0 )
journal bus_maladie 20
endif
endif

Merci d'avance !

Modifié par Troglodyte, 01 septembre 2015 - 22:03.


#2 Kira

Kira

    Top-modeleuse...


Posté 02 septembre 2015 - 09:52

Coucou, Troglodyte...

Il me semble que, là, tu as donné au joueur le sort "brown rot", et non son effet...
La commande 'ExplodeSpell" devrait être ce qui te manque...

Player->AddSpell "brown rot"
	  player->ExplodeSpell, "brown rot"
Player->RemoveSpell "brown rot"

C'est une commande qui requiert Tribunal...
Mais ainsi, normalement, ton joueur devrait tomber malade....
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#3 abg

abg

    L'ABG pour les civilisés


Posté 02 septembre 2015 - 11:04

Kira : Le sort "brown rot" n'existe pas, c'est bien une maladie ;)
Et "addspell" est la commande utilisée pour traiter ce genre de problème (qu'il s'agisse du PJ ou d'un PNJ ne change rien à l'affaire)
Explodespell marche peut-être aussi (je n'ai jamais essayé dans ce genre de contexte) mais a le défaut d'imposer une animation "spellcast" et un effet pyrotechnique pas forcément appropriés aux circonstances...

Troglo :
Un exemple utile dans le jeu : les scripts rendant "malades" les PNJs vampires (car le ou plutôt les différents vampirismes sont bien traités comme des maladies aussi bien du point de vue lore que du point de vue mécanique du jeu.)
Essaye de réécrire ton script de façon que GetCommonDisease ne soit pas traité dans la même frame que le addspell
Car le jeu met parfois un peu de temps avant de mettre à jour ses drapeaux

If ( GetCommonDisease == 0 )
AddSpell, "brown rot"
journal, bus_maladie, 20
EndIf

Ce n'est pas directement la question mais à noter quand même que :

- Quand la maladie est attribuée in-game (et non directement dans la fiche du PNJ du TESCS), les PNJs guérissent "spontanément" au bout de 3 jours (règles de respawn). Le pendant "amusant" de cette remarque est que ça marche aussi dans le sens inverse : Lette, la malheureuse rougegarde de Tel Mora que le Temple nous envoie soigner est, en fait, inguérissable : Au bout de 3 jours elle retombe forcément malade (je ne me souviens plus bien, mais on avait dû la prendre en pitié d'une façon ou d'une autre avec le PNO...)

- La maladie n'est pas sauvegardée si le PNJ est porteur du drapeau auto-calc (une saleté à l'origine de bien des horreurs ce drapeau...)

- Si le PNJ a les moyens de se guérir (potion, sort...) et qu'il est impliqué dans un combat, il emploiera ces moyens (l'IA n'utilise la magie qu'en mode combat)
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#4 Troglodyte

Troglodyte

Posté 02 septembre 2015 - 16:46

C'est noté, merci à vous, je vais suivre ces conseils. Je vais essayer d'imaginer quelque chose pour cette histoire de respawn, mais dans le pire des cas le bug qui en découlera ne devrait pas empêcher l'avancement de la quête... au contraire le PNJ guérirait tout seul comme un grand et le joueur pourrait passer directement à la suite.

Je vois pas ailleurs une autre faille logique dans le script. Je vais devoir mettre un short done. Parce que la condition pour attrapper la maladie et en guérir est la même ! GetcommonDisease == 0... Donc à la fois pour répartir l'exécution du script, mais aussi pour qu'il soit logique, il me faut une condition différente.

Citation

if ( done == 0 )
if ( getjournalindex bus_maladie == 10 )
if ( GetcommonDisease == 0 ) ; S'il n'est pas malade, il tombe malade, aussitôt cette condition ne se vérifie plus.
addspell "brown rot"
set done to 1
endif
endif

if ( done == 1 )
if ( getjournalindex bus_maladie == 10 )
if ( GetcommonDisease == 0 ) ; Il n'est plus malade, la condition se vérifie de nouveau, mais s'exécute là où done == 1.
journal bus_maladie 20
set done to 2
endif
endif
endif

Je vais tester ça.

Edit : Ca marche ! Je passe au problème suivant, j'espère que vous n'aurez pas à en entendre parler haha.

Modifié par Troglodyte, 02 septembre 2015 - 22:42.





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

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