Aller au contenu


[resolu] Positioncell, Aiwander Et Pnj Toupie


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

#1 elendell

elendell

    Mécano Dell'Arte


Posté 27 août 2008 - 05:24

Bonjour,

Je travaille depuis trois jours sur un bogue que je n'arrive pas à résoudre, dans un "mod" pour Morrowind seul. Pardonnez la longueur du texte qui suit mais je vais essayer d'être précis. Toutes explications ou pistes de recherches seraient les bienvenues...

Fonctionnement prévu dans le "mod" (Je change juste les noms pour cause de spoiler) :

Un PNJ (PNJA) est dans une cellule intérieure. Quand on a rempli les conditions pour qu'il puisse quitter l'endroit, on va voir un autre PNJ qui est à Seyda Nihyn. On lui parle et le résultat du dialogue donne ceci :

player->additem "misc_com_bottle_02" 5
Journal "den_bottle" 71
moddisposition 10
"PNJA"->PositionCell, -8682, -67690, 381, 12060, "Seyda Nihyn"
"PNJA"->aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0, 0


Le but des dernières lignes est de "téléporter" PNJA et transformer ses paramètres "wander". Il est bien "téléporté" mais sur place, PNJA tourne sur lui-même comme une toupie au lieu de vagabonder. Si je sauvegarde et recharge la partie, il ne fait plus la toupie et vagabonde normalement.

Ce que j'ai essayé, sans succès :

PNJA n'avait pas de "package" "wander" dans ses paramètres initiaux. Je lui en ai donc fait un avec 0 en distance car il ne doit pas bouger dans la cellule intérieure.

J'ai inversé les lignes "PositionCell" et "aiwander".

J'ai remplacé ces 2 lignes par un startscript pour déclencher un script global :

begin den_PNJA_wander

"den_PNJA"->PositionCell, -8682, -67690, 381, 12060, "Seyda Nihyn"
"den_PNJA"->aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0, 0

StopScript, "den_PNJA_wander"

end


J'ai supprimé un 0 dans la ligne "den_PNJA"->aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0

J'ai essayé plusieurs autres choses mais PNJA fait toujours pareil... la toupie.

Si je mets 0 en distance (aiwander 0, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0), il ne tourne plus mais ne vagabonde pas, bien sûr.

Changer les "idle" ne change rien au problème.

J'ai essayé de le "téléporter" ailleurs dans Seyda Nihyn mais quelque soit l'endroit où je le "téléporte" (même loin), il marche jusqu'à l'endroit initialement prévu par le modeur et une fois sur place, fait la toupie. Et ce, avec un faible paramètre de distance "wander" (10) et alors que le positionnement initialement prévu n'est plus marqué nulle part, ni dans un "résult" de dialogue, ni dans un script !  :sorcerer:

Si je lui parle avant qu'il arrive à l'endroit qui l'aimante, il s'arrête le temps de me répondre et reprend ensuite sa marche jusqu'au lieu en question. Je précise qu'à chaque essai, j'ai recommencé une partie pour être sûr que rien n'était inscrit dans la sauvegarde.

Après un grand fou-rire nerveux devant tant d'obstination d'un PNJ à vouloir faire la toupie dans cet endroit précis, j'ai essayé le même script mais en remplaçant PNJA par d'autres PNJs de Seyda Nihyn (du "mod" et du jeu, comme Fargoth ainsi que des PNJs "scriptés" et "non-scriptés"). Aucun ne fait la toupie mais quelque soit l'endroit où je les "téléporte" (et toujours avec moins de 100 en paramètre de distance "wander"), ils regagnent en marchant leurs positions d'origine.

Pensant que ce pouvait être le "mod" qui est foireux, j'ai essayé le même script dans un nouveau "mod" (en décochant l'autre) mais le résultat est toujours le même.

A défaut de trouver une solution, je placerai une autre référence de PNJA dans Seyda au lieu de le "téléporter" mais j'ai horreur de ne pas comprendre et il me reste plusieurs interrogations.

1) Est-il impossible d'utiliser "PositionCell" et "aiwander" conjointement (partout ou juste à Seyda) ?

2) Pourquoi (alors que tous les PNJs regagnent leur place prévue dans le tescs) PNJA va-t-il tout seul à cet endroit qui est précisément celui initialement prévu par le "mod" (à moins que le modeur ait choisi cet endroit parce qu'il a rencontré le même bogue) ?

La différence entre PNJA et les autres est que sa place initiale est dans une autre cellule. Le point où il stoppe pour faire la toupie est sur le chemin qui même à l'entrée de sa cellule d'origine mais ce n'est qu'une porte qui "téléporte", pas une cellule extérieure conjointe. De plus, il ne stoppe pas à la limite de Seyda mais avant.

Je m'en remets donc à vos lumières dans l'espoir d'obtenir une explication ou des pistes de recherche...  :oops:

#2 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 27 août 2008 - 07:49

As-tu essayé de le forcer à aller à un autre endroit en utilisant AITravel?
N'as-tu pas un script qui tourne et qui fait des "ra" (reset actors)?

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#3 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 27 août 2008 - 08:40

Tu as une explication ici :

http://www.uesp.net/...es3Mod:AIWander

Quand à la raison pour la toupie, je pense que c'est parce que le point qu'il cherche à atteindre se situe hors de la portée de son wander ou bien parce que ce point n'existe tout simplement pas (dans cette cellule du moins).

Une suggestion : déclenche le AIWander dans le script local du PNJ une fois qu'il est à Seyda.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#4 elendell

elendell

    Mécano Dell'Arte


Posté 27 août 2008 - 21:09

Hello !

@ Kafou : Merci pour le lien. Malheureusement, je ne parle pas assez bien l'anglais pour comprendre tout ce qui est écrit (même avec un traducteur). Je comprends quand même que si le point où on positionne le PNJ est plus loin que la distance de son "wander" le permet, il retourne à sa place initiale. Mais je ne comprends pas s'ils donnent une solution.

Pour la toupie, c'est sans doute la première explication que tu proposes (le point existe) mais cela n'explique pas pourquoi le PNJ va toujours rejoindre le même point, qu'on le "téléporte" devant, derrière ce point ou de n'importe quel côté.

J'ai essayé ta suggestion avec différents résultats. Le "PositionCell" étant fait soit en "résult" de dialogue de l'autre PNJ, soit par script global suivant mes essais et en déclenchant ensuite le "aiwander" dans le script local de PNJA.

- Sans "aiwander" PNJA est bien positionné

- Avec ce qui suit, PNJA est suspendu en l'air et ne bouge pas :

if ( GetJournalIndex "den_bottle" >= 70 )
"PNJA"->aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0
set done to -1
.....


- Avec ce qui suit, PNJA est suspendu en l'air, ne bouge pas, est à moitié dessiné et je peux passer à travers :

if ( GetDistance, Player < 1000 )
"PNJA"->aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0
set done to -1
.....


- En faisant "aiwander" avec la console sur le PNJ bien positionné, il va au point aimanté et fait la toupie.

@ Finraïl :

Pas d'autre script en route qui pourrait interférer. Le seul qui fait des "ra", c'est moi mais ce serait plutôt "Rhhhaaaaaa !!!"

Quand à "aitravel" tout dépend de l'endroit où je "téléporte" préalablement le PNJ (mais suivi du même "aitravel", placé dans le local) :

- Avec le premier endroit, j'ai eu droit à un PNJ dont la tête était constituée de deux faces arrières. Quel que soit, l'endroit où je me plaçais, je voyais toujours l'arrière de son crane. Un tête avec des cheveux partout quoi.  :lol:

- Avec le deuxième endroit, je me suis retrouvé à Lilliput. C'est à dire que le PNJ avait une taille d'environ 10cm (dans le jeu) et était incrusté dans mon champ de vision, dans l'air.  ;) Que j'avance ou que je recule, il restait toujours à la même distance de moi (et toujours lilliputien, en l'air).

- Le troisième endroit a été le bon. Donc, ça fonctionne maintenant normalement avec ceci dans le local :

if ( GetJournalIndex "den_bottle" >= 70 )

	if ( doonce == 0 )
			aitravel -8682, -67690, 381
			set doonce to 1
	elseif ( doonce == 1 )
		if ( GetAIPackageDone == 1 )
			aiwander 512, 5, 0, 40, 20, 30, 10, 0, 0, 0, 0, 0
		set doonce to 2
		endif
	endif
...

Je n'ai pas essayé d'autres endroits de "téléportation". Puisque ça marche :mrgreen: , que j'ai déjà passé tant de temps dessus et que j'ai frôlé la crise de nerfs à plusieurs reprises, je vais m'en contenter !

Merci à vous deux !  :|

#5 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 27 août 2008 - 21:17

Juste une note : il faut de préférence faire comme tu as fait pour la solution de Finraïl (directement AITruc) plutôt que comme tu as fait pour la mienne ("IDPNJ"->AITruc).

Parmi les solutions proposées sur le site il y avait la mienne et, si je me souviens bien, celle de Finraïl aussi. Alors voilà ;)
You look like you need a monkey!

Attention : perfectionniste paresseux.

#6 elendell

elendell

    Mécano Dell'Arte


Posté 27 août 2008 - 21:22

C'est noté !  ;)




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

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