Actions suite à la détection d'effet magique

Le langage des scripts.
Avatar du membre
Fenrys
Moddeur aspirant
Moddeur aspirant
Messages : 98

Actions suite à la détection d'effet magique

Message par Fenrys »

Salut, je voudrais savoir comment utilisé la fonction hasmagiceffect parceque je comprend pas trop le truc le but de mon script est que le pnj qui y est associé détecte la vulnérabilité de l'ennemi ( vulnérabilité au feu par exemple et s'équipe d'un sort approprié à celle ci ).

J'ai testé de mettre des conditions sur les sorts mais le jeu s'en fous, j'ai essayer de scripter ça sur un actor, activemagiceffect sur l'event onhit (akaggressor) j'y arrive pas non plus etc. donc je comprend pas.
Modifié en dernier par Fenrys le 22 nov. 2012, 11:40, modifié 2 fois.
Image
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Détection d'effet magique et conséquences.

Message par Gerauld »

Idée très intéressante qui rendrait les PNJ moins débiles. :)
Ce que tu veux, en clair, c'est détecter les éventuelles faiblesses d'un ennemi.

Peut-être dans les actor values listées ici :
https://www.creationkit.com/index.php?t ... Value_List
On y trouve :
DamageResist
PoisonResist
FireResist
ElectricResist
FrostResist
MagicResist
NormalWeaponsResist (Invalid? See Discussion) => (celui-ci ne marche peut-être pas)

Et en utilisant une de ces deux instructions :
GetActorValue ou GetBaseActorValue
Avatar du membre
Fenrys
Moddeur aspirant
Moddeur aspirant
Messages : 98

Re: Détection d'effet magique et conséquences.

Message par Fenrys »

ouais pour l'instant je me concentre sur un mage donc faut utiliser HasMagicEffect genre if Ennemy.HasmagicEffect(AbWeaknessFireConstant) == 1 ou true ?
Self.EquipSpell(Fireball, 1) etc pour chaque élément
Image
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Détection d'effet magique et conséquences.

Message par Gerauld »

juste :
if Ennemy.HasmagicEffect(AbWeaknessFireConstant)
Sans rien d'autre.

EDIT, j'aurai tenté, si placé sur le PNJ :

if (self as actor).GetCombatTarget().HasmagicEffect(AbWeaknessFireConstant)

Le script doit être de type extends actor pour compiler.
Avatar du membre
Fenrys
Moddeur aspirant
Moddeur aspirant
Messages : 98

Re: Détection d'effet magique et conséquences.

Message par Fenrys »

Scriptname SmartMageAi extends Actor

SPELL Property NewProperty Auto
MagicEffect Property FireWeakness Auto


Event OnEffectStart(Actor akTarget, Actor akCaster)

ENDEVENT


Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)

if akAggressor.HasMagicEffect(FireWeakness)

ENDIF

ENDEVENT

ca me donne ça

Starting 1 compile threads for 1 files...
Compiling "SmartMageAi"...
C:\Program Files (x86)\Bethesda\Skyrim\Data\Scripts\Source\temp\SmartMageAi.psc(14,15): HasMagicEffect is not a function or does not exist
No output generated for SmartMageAi, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on SmartMageAi

si je fait comme t'a dis ça marche yeaaaah
Image
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Détection d'effet magique et conséquences.

Message par Gerauld »

if (akagressor as actor).HasMagicEffect(FireWeakness)

L'event oneffectstart ne sert à rien. Il ne déclenche que dans les scripts d'effets magiques.
Avatar du membre
Fenrys
Moddeur aspirant
Moddeur aspirant
Messages : 98

Re: Détection d'effet magique et conséquences.

Message par Fenrys »

je sais j'avais oublier de le delete, voila le script dans l'etat actuel je vais le tester de ce pas. Scriptname SmartMageAi extends Actor

SPELL Property Fireball Auto

SPELL Property FrostAttack Auto

SPELL Property ShockAttack Auto

MagicEffect Property FireWeakness Auto

MagicEffect Property FrostWeakness Auto

MagicEffect Property ShockWeakness Auto

MagicEffect Property VampireFireWeakness Auto

Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)

if self.GetCombatTarget().HasmagicEffect(FireWeakness)
self.EquipSpell(Fireball, 1)

elseif self.GetCombatTarget().HasmagicEffect(FrostWeakness)
self.EquipSpell(FrostAttack, 1)

elseif self.GetCombatTarget().HasmagicEffect(ShockWeakness)
self.EquipSpell(ShockAttack, 1)

elseif self.GetCombatTarget().HasmagicEffect(VampireFireWeakness)
self.EquipSpell(Fireball, 1)

ENDIF

ENDEVENT

Edit:Oui donc ca marche, mais il réequip tout de suite le sort qu'il à choisit par default donc faudrais que les valeurs soient constantes comment faire?
Image
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Détection d'effet magique et conséquences.

Message par Gerauld »

Il faut donc shunter le fonctionnement normal pour obliger le tien comme je le craignais dans la shout box... ou lui faire directement lancer le sort.

EDIT : Tente avec un cast au lieu d'un equip :
http://www.creationkit.com/Cast_-_Spell

Par contre, il va peut-être falloir surveiller la réserve de magie (en utilisant l'actor value magicka - voir mon 1er post).
Avatar du membre
Fenrys
Moddeur aspirant
Moddeur aspirant
Messages : 98

Re: Détection d'effet magique et conséquences.

Message par Fenrys »

non mais en fait c'est pas ça le probleme, le probleme c'est l'event, on est parti d'un onhit donc il equip son spell uniquement quand il recois un coup dans le nez
Image
Avatar du membre
Gerauld
Confrère
Messages : 2439

Re: Détection d'effet magique et conséquences.

Message par Gerauld »

S'il équipe le sort par défaut à chaque fois que tu en places un autre, ce n'est pas à cause du coup mais à cause de son AI. Le forcer à le lancer au lieu de l"équiper permet de shunter l'AI le temps de lancer le sort.

Il faut maintenant modifier l'event car il ne correspond pas à ce qu'il faut.

Tente un : Event OnCombatStateChanged(Actor akTarget, int aeCombatState)
http://www.creationkit.com/OnCombatStateChanged_-_Actor
Au moins, déjà, le premier sort qu'il lancera sera celui qui correspond à la vulnérabilité de l'adversaire.

Il faudra peut-être tester la line of sight (los) avec un haslos :
http://www.creationkit.com/HasLOS_-_Actor

En gros,
- Dès que je suis en combat (event oncombatstatechanged et test associé)
- J'attends d'avoir l'ennemi en vue (boucle while avec haslos ET AUSSI une condition sur le combatstate (si le combat est fini, la distance avec l'adversaire.. histoire que la boucle ne soit infinie dans aucun cas)
- Test de sa vulnérabilité et envoi du sort qui va bien.

Ce sera déjà un début...

AUTRE METHODE PLUS SIMPLE (VOIE DETOURNEE) :
Sinon, tu mets aucun sort à ton PNJ et tu ne lui ajoutes que celui correspondant à la vulnérabilité détectée (avec un addspell). Il ne pourra lancer que celui-ci du coup.
En l'absence de vulnérabilité, tu lui file un sort par défaut .
A chaque fois, il ne faut pas oublier de retirer ensuite les sorts.

Pour cette méthode, il faut utiliser l'event décrit ci-dessus sans le test de LOS qui est inutile.
Répondre

Retourner vers « Entraide sur les scripts »