Page 1 sur 1

[Script] Détection de créature

Posté : 23 déc. 2011, 15:18
par A .
En lien direct avec mon projet : http://www.confrerie-des-traducteurs.fr ... 21&t=10520

Solution au « problème » : http://www.confrerie-des-traducteurs.fr ... 94#p187594

Je préfère compartimenter la partie « avancement » et la partie « recherche ».
Actuellement je bloque sur quelques morceaux de script. Voici le premier :

Code : Tout sélectionner

		set Ennemi to GetFirstRef 35 
			while (Ennemi)
				if (Ennemi.GetCombatTarget == Player) && (Ennemi.GetIsCreature == 0)
   					Ennemi.StopCombat
				endif
            set Ennemi to GetNextRef 
		   loop
Sur le principe (du moins ce que je pense avoir fait), cela scrute toutes les références de type NPC dans la cellule du joueur. Si la référence N a pour cible le joueur, et qu'elle n'est pas une créature, alors elle stoppe le combat. La référence suivante est scrutée, et ainsi de suite.
Le problème, c'est que cela stoppe le combat pour n'importe quel assaillant - ce qui me laisse perplexe étant donné la double condition ( 35 = NPC) et GetIsCreature == 0 qui élimine la possibilité que Ennemi, soit une créature. Je veux que les créatures continuent de m'attaquer ! Une suggestion, peut-être au niveau de la construction de la boucle ? :)

Edit : script alternatif, pour tester la boucle et la différentiation

Code : Tout sélectionner

				set Ennemi to GetFirstRef 35 1
			while (Ennemi)
					If Ennemi.GetCombatTarget == Player
						if Ennemi.IsGuard
							message "un garde vous a vu mourrir..." 3
						endif

						Ennemi.StopCombat Player

					endif
Après différents essais je commence à me dire que ce sont les fonctions ref.IsCreature / ref.GetIsCreature qui ne fonctionnent pas (ou alors que je n'arrive pas à utiliser), car ici j'arrive à faire stopper le combat à tous les NPCs m'ayant pour cible, sauf les gardes.
Ou alors il n'existe aucunes créatures et ce sont toutes des NPCs (puisque je scrute que des références de NPCs (et pas des Actors), donc je ne vois pas pourquoi ça influe sur des références de créatures !?) :D

Re: [Script] GetFirstRef

Posté : 28 déc. 2011, 00:13
par OblivionUnknownGenie
Seule solution : appelle Beeratwork x)

Re: [Script] Détection de créature

Posté : 23 févr. 2012, 18:00
par beeratwork
http://cs.elderscrolls.com/index.php/GetFirstRef
Dans ton 1er script tu n'indique pas 1 après le 35 (valeur NPC), peut-être faut-il le spécifier ? Sinon,si ça ne fonctionne toujours pas, essaye le n°69 (les acteurs en général) et ne vérifie que les NPC. Il y a peut-être un bug avec la fonction sur le paramètre 35.

Code : Tout sélectionner

set Ennemi to GetFirstRef 69 1
while (Ennemi != 0)
    if (Ennemi.IsActor == 1 && Ennemi.GetCombatTarget == player)
        Ennemi.StopCombat player
    endif
    set Ennemi to GetNextRef 
loop

Code : Tout sélectionner

            set Ennemi to GetFirstRef 35 1
         while (Ennemi)
               If Ennemi.GetCombatTarget == Player
                  if Ennemi.IsGuard
                     message "un garde vous a vu mourrir..." 3
                  endif

                  Ennemi.StopCombat Player

               endif
Après différents essais je commence à me dire que ce sont les fonctions ref.IsCreature / ref.GetIsCreature qui ne fonctionnent pas (ou alors que je n'arrive pas à utiliser), car ici j'arrive à faire stopper le combat à tous les NPCs m'ayant pour cible, sauf les gardes.
Ou alors il n'existe aucunes créatures et ce sont toutes des NPCs (puisque je scrute que des références de NPCs (et pas des Actors), donc je ne vois pas pourquoi ça influe sur des références de créatures !?)
L'explication avec les gardes pourrait être le fait que tu as une prime sur ta tête et que les gardes t'attaquent à vue. Dans ce cas leur faire stopper le combat ne marchera que temporairement jusqu'à ce que ta prime soit remise à zéro ou ta peine purgée.

Re: [Script] Détection de créature

Posté : 10 mars 2012, 18:27
par A .
Message du 25 fev.
J'avais essayé toutes les combinaisons pour les créatures, 35, 69, avec ou sans 1. Pour les gardes je ne sais plus comme le projet a pris la poussière, entre temps j'avais dû coller une ligne pour supprimer la prime (c'est le but de la manœuvre). À la base c'était pour tester ma boucle, IsGuard fonctionne, IsCreature non !

Edit du 10 mars
:mrgreen:
Juste avant il y a une ligne : player.Setactorvalue Invisibility 1, j'avais même précisé en commentaire « seul moyen de faire stopper le combat tant qu'on est au sol en cas de réussite ».
La nageoire gauche de Paneb que ça vient de là :ange:

Il faut que je repense toute la mécanique, ou alors laisser tomber ce point-là si je ne peux pas contourner l'invisibilité.

Re: [Script] Détection de créature

Posté : 10 mars 2012, 18:35
par Paneb
Nageoire gauche :pensif:
C'est bon, c'est pas celle qui est dans le paquet de biscuits :D.
Par contre je pourrais plus traduire :siffle:.

Re: [Script] Détection de créature

Posté : 10 mars 2012, 20:04
par A .
Effectivement je ne peux pas me passer de l'invisibilité. J'ai donc résolu le problème ainsi :
- je détecte toutes les références de type Actors (donc PNJ + Creature, l'argument 69 pour GetFirstRef)
- si la référence concernée est une créature j'incrémente un compteur
- si c'est un PNJ j'en incrémente un autre
- une fois toutes les références scrutées, si Nombre de Créatures > Nombre de PNJs, le combat ne s'arrête pas. Typiquement, une meute de loups. Maintenant s'il y a plus de PNJ que de créatures attaquant le joueur, dans le jeu ça se résume à 2 cas principaux : des brigands et un de leur chien, ou des invocateurs avec leurs invocations. Je considère que hiérarchiquement les PNJs donnent les ordres et les créatures suivent, donc si on berne un brigand, le chien arrête d'attaquer. Maintenant si le gus se trimbale avec 3-4 chiens, on comprend qu'il ait plus de mal à les contrôler. (non ?)
Reste plus qu'à affiner selon le type de créature pour en exclure (typiquement Gobelin, Dremora etc), mais j'ai tout ce qu'il faut sous les yeux. :)

Je considère le problème comme résolu, puisque ça venait bien de la ligne de code impliquant l'invisibilité.
Merci !

@Paneb : :mrgreen: tu sais ce que ça veut dire

Re: [Résolu][Script] Détection de créature

Posté : 10 mars 2012, 20:09
par Paneb
Vacances ! :pompom: