vaykadji a écrit :Genre le type me tape à 100, il se mange 1 point de dégat
Si il me tape à 15, il se mange 1 point de dégat
Et même s'il me tape à 1, il se mange 1 point de dégat
Voir l'
UESP. Véritable bible quand il s'agit de connaitre les mécanismes du jeu, et le lore.
Donc, non, ça ne renvoit que le pourcentage de dégats reçu, un peu comme l'aura d'épine de Warcraft III.
Si tu veux veut infliger des dégats scriptés...heu...je ne me suis jamais trop amusée à ça...
Comme ils ont aussi supprimé la fonction HurtStandingActor de Morrowind manifestement, il ne me semble plus y avoir de fonction pour scripter des dommages de manière correcte...
Ce que je ferais, là maintenant, c'est d'ajouter à l'acteur, une capacité de dégats de santé avec la fonction AddSpell, et la lui retirer à la fin d'un timer avec la fonction RemoveSpell.
Mais, là où ça va se corser.
C'est que dans un Script Effect, on ne peut pas utiliser un bloc OnHit, on ne peut utiliser que ces trois blocs:
ScriptEffectStart (joué à l'initialisation du sort)
ScriptEffectUpdate (joué à chaque frame)
ScriptEffectFinish (joué à la fin du sort: pour provoquer des effets à retardement)
Bien entendu, on ne peut pas détecter de manière simple qu'un acteur se prend du dégat, pas plus pour détecter qui inflige ces dégats (si c'est bien un acteur...).
Va falloir ruser, utiliser OBSE et compagnie...honnetement, je te conseille de rester sur la réflexion de dommages, c'est...plus...simple.
Bref, il faut tout d'abord détecter le fait que le joueur se prenne des dégats dans la figure, déjà, ça sera poussif et d'une imprécision monstrueuse:
Je me base sur le script du combat sans-armure de Galerion:
Code : Tout sélectionner
float fQuestDelayTime
short unarmoredUseInc
Begin GameMode
if (unarmoredUseInc == 0)
set fQuestDelayTime to 1.0
set unarmoredUseInc to 1
endif
; have we been hurt? (during fQuestDelayTime seconds)
set currentHealth to player.getAV Health
if (currentHealth >= lastHealth)
set lastHealth to currentHealth
return
endif
; save health
set lastHealth to currentHealth
;faire ce que tu souhaites faire
End
Ca doit être un script de quête, sans quoi la variable fQuestDelayTime ne fonctionnera pas, elle sert à définir la vitesse d'exécution du script.
Ensuite, on fait juste une comparaison des PV avant/après du PJ, si il y a plus de pv avant qu'après, c'est qu'il y a eu des dégats, et donc, on exécute le script, sinon, on fait un return.
Bien entendu, si tu fais une chute, ça comptera comme une attaque...
Vient l'autre gros morceau, qui nécessite OBSE, c'est détecter qui a infligé les dégats .
GetCombatTarget, pour détecter quelle est la cible, ne fonctionne pas sur le PJ, le jeu est incapable de détecter la cible du PJ, ce qui est normal...
Là, je te renvoie carrément à la page du wiki, c'est plus simple,
ici.