Aller au contenu


[Resolu]Comment Activer Un Spell Lors D'Une Attaque ?


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

#1 Ariya

Ariya

Posté 28 avril 2010 - 19:05

voila, je cherche a faire un sort automatique qui s'active lorsque nérévar se fait attaquer et je ne sais pas comment faire !

y aurais t'il quelqu'un pour m'aider svp
- Apprends comme si tu devais vivre pour toujours et vis comme si tu devais mourir ce soir.
- Bavardage est écume sur l’eau, action est goutte d’or.
proverbes tibétains

#2 abg

abg

    L'ABG pour les civilisés


Posté 28 avril 2010 - 20:27

Voir le messageAriya, le 28 avril 2010 - 19:05, dit :

voila, je cherche a faire un sort automatique qui s'active lorsque nérévar se fait attaquer et je ne sais pas comment faire !

y aurais t'il quelqu'un pour m'aider svp

Bonsoir,

D'abord il faudrait mieux cerner ce que tu veux faire :
- Est-ce une mise en scène particulière (combat contre un adversaire donné, lieu spécifique ...etc.) ?
- Est-ce un système générique : partout en tout temps et contre tout adversaire, le Nérévarine est "couvert" par un sort particulier ?
- Dans ce dernier cas, un sort de type "capacité" (donc constant) ne ferait-il pas l'affaire sans s'embêter ?

En prenant ton énoncé au pied de la lettre, je considère que la deuxième hypothèse est la bonne. Mais ce n'est pas la plus simple à gérer car Morrowind ne comporte pas de vrai "détecteur d'attaque" capable de prendre en compte tous les cas possibles (depuis le chien de nix de passage jusqu'à Almalexia en passant par les bandits, les gardes trop inquisiteurs...etc.)
Quelques pistes imparfaites :
- Détecter les sons de coup portés contre sa précieuse personne (commande GetSoundPlaying)
- Utiliser les voix "hit" (quand il crie, c'est qu'on le frappe  :shock:, donc en filtrant correctement au niveau des dialogues on peut déceler un "engagement guerrier" de "player" )
- Détecter une baisse subite des points de vie (si "GetHealth actuel" < "GetHealth de la frame précédente" à priori c'est qu'il est sous attaque), mais c'est pas parfait : il peut faire une mauvaise chute, être empoisonné par un piège ou avaler volontairement une potion toxique  :mrgreen:

Malheureusement on ne peut pas détecter certains événements internes du jeu comme le déclenchement de la musique de bataille.
Il y a aussi des systèmes plus indirects (mais qui dépendent de tes choix de mise en scène) comme :
- Imposer un compagnon au Nérévarine (s'il dégaine son arme ou ses sorts, c'est que son patron est sous attaque et ça on peut le détecter par script)
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#3 Ariya

Ariya

Posté 29 avril 2010 - 06:49

pour être exacte, je voudrais crée un sort d'attaque automatique qui fonctionne en tout temps contre tous type d'adversaires, c'est a dire

Citation

un vrai "détecteur d'attaque" capable de prendre en compte tous les cas possibles (depuis le chien de nix de passage jusqu'à Almalexia en passant par les bandits, les gardes trop inquisiteurs...etc.)

c'est exactement cela abg.

je pensais pouvoir crée un sort grâce a la fonction OnHitMe mais je vois le travail énorme que cela représente

a moins que quelqu'un est une idée précise pour m'aider, je pensais crée une capacité et, lorsque Nérévar se fait attaquer, une attaque se déclenche automatiquement pour toucher l'adversaire.

si cela était faisable même comme une attaque de zone qui part des pieds de Nérévar, cela m'arrangerai

Modifié par Ariya, 29 avril 2010 - 06:54.

- Apprends comme si tu devais vivre pour toujours et vis comme si tu devais mourir ce soir.
- Bavardage est écume sur l’eau, action est goutte d’or.
proverbes tibétains

#4 abg

abg

    L'ABG pour les civilisés


Posté 29 avril 2010 - 08:51

Voir le messageAriya, le 29 avril 2010 - 06:49, dit :

je pensais pouvoir crée un sort grâce a la fonction OnHitMe mais je vois le travail énorme que cela représente

a moins que quelqu'un est une idée précise pour m'aider, je pensais crée une capacité et, lorsque Nérévar se fait attaquer, une attaque se déclenche automatiquement pour toucher l'adversaire.

si cela était faisable même comme une attaque de zone qui part des pieds de Nérévar, cela m'arrangerai

Pas simple en effet...
HitOnMe a le défaut de réclamer un id d'arme, ce n'est donc pas générique (comme les 3/4 des commandes de script  :rolleyes: )
Mais comme je disais ci-dessus, tu peux faire tourner un script global qui teste les sons sur player :
If ( player->GetSoundPlaying, "Health Damage" )
	...Conséquences
ElseIf ( player->GetSoundPlaying, "Hand To Hand Hit" )
	...
ElseIf ( player->GetSoundPlaying, "Hand to Hand Hit 2" )
	...
ElseIf ( player->GetSoundPlaying, "Heavy Armor Hit" )
	...
ElseIf ( player->GetSoundPlaying, "Light Armor Hit" )
	...
ElseIf ( player->GetSoundPlaying, "Medium Armor Hit" )
	...
EndIf

Un peu lourdingue  :D
Le premier test a aussi le défaut de prendre en considération les dégâts d'une chute (un vrai flacon de nitroglycérine ton Nérévarine  ;) ). Ça ne prend pas en compte les attaques magiques (shock hit, alteration hit...) ni les "attentats manqués".
Un autre problème pour la suite va être de cibler le sort. La commande cast réclame un id de cible (et puis elle imposera de passer par un activateur invisible déposé aux pieds du PJ)

Un sort a effet de zone va faire des victimes collatérales aussi... A ta place, plutôt qu'une attaque ciblée, j'aurais envisagé un sort à effet perso (bouclier par exemple... ou une invocation qui ciblera elle-même l'adversaire...) plutôt qu'un tir de riposte.

Enfin un sort de type capacité est permanent. Il faudra donc gérer l'extinction des feux : Je ne vois pas de moyens génériques fiables pour détecter la fin d'un combat mais tu peux te contenter d'un timer...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#5 Ariya

Ariya

Posté 30 mai 2010 - 11:52

ce script marche, merci beaucoup abg
- Apprends comme si tu devais vivre pour toujours et vis comme si tu devais mourir ce soir.
- Bavardage est écume sur l’eau, action est goutte d’or.
proverbes tibétains




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

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