[Résolu] Script Effect : Aura de Vindicte (WoW)

Vous trouverez ici les tutoriels et l'entraide sur les outils et techniques de modding spécifiques à Oblivion.
Avatar du membre
vaykadji
Confrère
Messages : 323

Script Effect : Aura de Vindicte (WoW)

Message par vaykadji »

Bonjour à tou(te)s,

Je suis actuellement sur un set d'armure de paladin pour Le Bon Maître d'Armes, et j'ai un problème pour un sort "capacité".

Si vous connaissez Warcraft, vous savez ce qu'est l'aura de vindicte du paladin, sinon :
-C'est un sort constant, une aura, sur le joueur et quand ce joueur est touché par une arme, l'ennemi qui a frappé recoit x dégats.


Il me semble avoir vu un sort de ce type sur une pièce d'armure, mais impossible de remettre la main dessus :tape:

J'imagine qu'il faut utiliser un script effect, en utilisant le bloc OnHit, mais j'ai un problème :
Comment infliger des dégats à celui qui vient de nous taper ?

J'imagine que le script pourrait ressembler à ça :

-------------------------------------------
String Idfromhit

Begin OnHit
récupérer l'ID de celui qui tape
copier l'ID dans Idfromhit
infliger x dégats à l'ID récupérée
End

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

Mais je n'ai aucune idée de comment mettre ça en pratique :mrgreen:


Quelqu'un aurait une idée ? Merci :)
Modifié en dernier par vaykadji le 08 juil. 2010, 10:57, modifié 1 fois.
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Prechan
Confrère
Messages : 4372

Re: Script Effect : Aura de Vindicte (WoW)

Message par Prechan »

Sinon plus simple, tu peux utiliser la réflexion de dégats non ?
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script Effect : Aura de Vindicte (WoW)

Message par vaykadji »

La réflexion de dégats peut se faire à très basse échelle ?

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

Si oui, ma question au dessus était stupide :)
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: Script Effect : Aura de Vindicte (WoW)

Message par Shadow she-wolf »

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. :zzz:

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.
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script Effect : Aura de Vindicte (WoW)

Message par vaykadji »

Merci ssw, je vais regarder ça :)

La réflexion de dommages, à la limite, le pourcentage à rendre, un petit truc genre 5-10% ferait bien l'affaire. Ce qui m'embête c'est qu'il n'y a aucun effet graphique quand le pnj se mange une rélfexion de dégat.
D'un côté c'est tant mieux, parce que ça deviendrait surement chiant à la longue de voir les pnj ennemis s'embraser à chaque coup, mais de l'autre... c'est un peu laid,on ne se rend pas compte qu'on est protégé par la rélfexion :)

EDIT : ça pue le GetCombatTarget :mrgreen: parce que je peux pas vraiment l'utiliser sur une armure ou un sort, il faudrait que je place le script sur le pnj qui m'attaque, or je ne vois pas comment faire ça, à part en mettant le mm script sur chaque pnj du jeu (kikoo ololz), au cas où ce pnj se battrait contre moi. La réflexion de dégats fera l'affaire, j'ai plus de 300 armures à gérer, et après y'a les armes.. je peux pas passer 12h sur chaque item :p (déjà que là je viens de faire 2h pour réussir à faire fonctionner mon système de bonus de set, que je vais poster dans les tutos, en passant, ça peut servir)
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: Script Effect : Aura de Vindicte (WoW)

Message par Shadow she-wolf »

vaykadji a écrit :EDIT : ça pue le GetCombatTarget :mrgreen: parce que je peux pas vraiment l'utiliser sur une armure ou un sort, il faudrait que je place le script sur le pnj qui m'attaque, or je ne vois pas comment faire ça, à part en mettant le mm script sur chaque pnj du jeu (kikoo ololz), au cas où ce pnj se battrait contre moi.
C'est pourquoi je t'ai renvoyé sur la wiki, et pourquoi il faut utiliser OBSE.

Grosso-modo, il faut utiliser ce que l'on nomme un "token", c'est à dire, un activateur invisible qui suit le joueur constament, ce token lance un sort scripté de zone sur le PJ à chaque instant.

Ensuite, comme précisé sur le wiki, il faut utiliser la fonction GetCombatTarget sur le script de l'effet, et voir si c'est le PJ ou pas...
De mes propres essais, ce truc fonctionne particulièrement mal, et ça provoque des sons étranges chez moi ( ? )

L'autre solution, c'est d'utiliser GetFirstRef et GetNextRef d'OBSE, qui permettent d'auditer reférence après référence qui se trouvent dans la cellule.
Et il faut faire un GetCombatTarget sur chacunes de ces références...


Bref... :zzz:
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script Effect : Aura de Vindicte (WoW)

Message par vaykadji »

Tout s'éclaire ^^ Enfin, c'est bien compliqué pour pas grand chose. C'est très utile à savoir, mais pas pour un bête mod d'armure :p

Merci !
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
beeratwork
Légende de la Confrérie
Légende de la Confrérie
Messages : 1881

Re: [Résolu] Script Effect : Aura de Vindicte (WoW)

Message par beeratwork »

Attention, avec les sorts scripté de zone, ça peut parfois provoquer du ralentissement...

Personnellement, je tenterais ceci :

Code : Tout sélectionner

scn TargetDamageModulateurScript

short	step
short	StartHealth
short	CurrentHealth
float	Modulateur
ref	Target
short	TargetDamage

Begin GameMode
	if (player.GetEquipped IDarmure == 1 && player.IsInCombat == 1)
		if (step == 0)
			set StartHealth to player.GetAV health
			set Modulateur to 0.5
			set step to 1
		elseif (step == 1)
			set CurrentHealth to player.GetAV health
			if (CurrentHealth < StartHealth)
				set Target to player.GetCombatTarget
				if (Target.GetCombatTarget == player)
					set TargetDamage to ((StartHealth - CurrentHealth) * Modulateur)
					Target.ModAV health TargetDamage
				endif
				set step to 0
			endif
		endif
	elseif (player.GetEquipped IDArmure == 1 && player.IsInCombat == 0 && step != 0)
		set step to 0
	endif
End
Ce script, s'il fonctionne, permet de vérifier qui est la cible du joueur en combat et si le joueur est la cible de sa cible. Autrement dit, de vérifier si le bandit sur lequel frappe le joueur a décidé de se battre contre le joueur ou de continuer à frapper le loup qui vient d'arriver. On vérifie si le joueur a perdu de la santé et en quelque sorte, si c'est le fait de sa cible ou non (même si c'est pas vraiment ça). Et alors on inflige des dégâts à l'ennemi. On pourrait même utiliser un lanceur pour enflammer le bandit et pas tout le monde.

=> On aura le même problème avec un script de quête : si bandit = cible joueur et si joueur = cible bandit, si les deux sont étalé au sol et qu'un loup vient frapper le joueur, le loup ne subira pas de dégât mais bien le bandit.

=> Avec un lanceur d'effet de zone, tout ceux qui ciblent le joueur pourraient être atteint alors qu'ils ne le frappent pas.

=> On ne sait pas vérifier si un objet est frappé et ce avec référencement. On est obligé de faire un script d'objet attaché à l'objet avec du OnHit et c'est trop nul car est il seulement possible d'ajouter des script sur des références en jeu ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: [Résolu] Script Effect : Aura de Vindicte (WoW)

Message par Shadow she-wolf »

beeratwork a écrit :Ce script, s'il fonctionne
Comme déjà dit plus haut.
Player.GetCombatTarget ne renvoit rien du tout.
beeratwork a écrit :car est il seulement possible d'ajouter des script sur des références en jeu ?
C'est compliqué et foirreux, mais oui avec OBSE.
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: [Résolu] Script Effect : Aura de Vindicte (WoW)

Message par vaykadji »

C'est ce que j'allais répondre, le player.getcombattarget ne peut pas fonctionner, vu que c'est du ciblage à la souris, comme un fps, et non par clic (genre warcraft). C'est écrit sur tescs wiki : "no one could be in the player's mind".

Par contre il doit être possible de détecter à qui le joueur inflige des dégats, donc sa cible.

par ex :

On liste les pnj/bêtes dans un rayon de X autour du joueur
Si le pnj/bête est en combat ET que leur vie descend ET que la durabilité de l'arme/mana du joueur aussi.
alors le pnj/bete dont la vie est descendu est la cible du joueur.

Mais ce n'est pas très précis, par ex :
Si je combat un pnj ennemi et qu'un pnj ami combat une bête, ça pose problème. Le script pourrait définir que la cible du joueur est la bête.
Donc ça m'a l'air bien compliqué^^
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Répondre

Retourner vers « Modder Oblivion »