Aller au contenu


( Resolue) Utilisation De Porte


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

#1 drakan

drakan

Posté 30 mars 2010 - 09:09

bonjour,


depuis 2 semaine , j'ai comencer à scripter , je me suis avaler des quelques de tuto (ca a mauvais gout ^^) et essuyer des mass de bug. mais depuis quelque temp, je butte sur un pb qui peut paraitre tout con mais pas moyen de trouver une solution pas trop lourde.

mon pb:
identifier une personne qui marche sur un objet ( pour ensuite le télé-transporter )

apparement certain fonction de MWSE pourrait m'aider , mais j'ai du mal à trouver un tuto complet ( description + exemple ) en francais. pour l'instant j'ai trouver ca http://mwse.wikispaces.com/functions mais en anglais et ss exemple



question à part: les fonctions setx et ifx sont elles inclues ds MWSE?



edit: je n'avais pas fais attention a la doc de MWSE dans son propre fichier :paladin:
mais reste que je me tape un vieux "Trying to RunFunction index greater than function count"
et mes scripts ne fonctionnent pas

j'ai seulement morrowind vous penser que le probleme viens de la?

Modifié par drakan, 16 avril 2010 - 21:47.


#2 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 01 avril 2010 - 18:18

Bonjour,

Voir le messagedrakan, le 30 mars 2010 - 09:09, dit :

mon pb:
identifier une personne qui marche sur un objet ( pour ensuite le télé-transporter )
Pas besoin de faire un script MWSE pour ce genre de choses. Il y a des tonnes d'exemples de cette application (détection du joueur), par exemple les détection des pas du joueur sur les pontons pour faire un bruit de bois.

Citation

Trying to RunFunction index greater than function count"
Je pense que c'est juste une erreur de syntaxe dans ton script, ou une fonction mal utilisée.

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 drakan

drakan

Posté 05 avril 2010 - 19:10

Citation

Pas besoin de faire un script MWSE pour ce genre de choses. Il y a des tonnes d'exemples de cette application (détection du joueur), par exemple les détection des pas du joueur sur les pontons pour faire un bruit de bois.


je vais faire encore faire l'ignare :twisted: mais j'ai pas l'impression de mettre bien expliquer.

je voudrais faire en sorte qu'un npc puisse utilisé une porte .

a premiere vu ca parait tout con , il suffit de le teletransporter à la porte correspondant ou de faire AIactivate sur la porte
le soucis c'est que faire ca pour chaque npc est tres lourd et donc ,pour generaliser , il faut pouvoir recuperer l'id du npc pour ensuite faire

"id_du_NPC"->position .....

( pour l'instant tout les programme et les tuto detecte la presence du joueur et non pas d'un NPC lambda )

#4 elendell

elendell

    Mécano Dell'Arte


Posté 05 avril 2010 - 20:39

Bonjour drakan,

Je n'ai jamais utilisé MWSE et ne sais donc pas ce qu'on peut faire ou non avec lui.

Pour l'erreur "Trying to RunFunction index greater than function count", il peut y avoir différentes causes. Erreur de syntaxe, utilisation d'une fonction d'une extension avec Morro seul, "Mod" MGE, etc. Regarde par exemple ici et .

Pour la question de récupérer l'ID d'un PNJ, il faudrait avoir plus de précisions. Il n'existe pas de fonction pour ça (peut-être avec MWSE mais je ne le connais pas). Quand on ne peut pas faire une chose avec les fonctions existantes, il est souvent possible de la faire autrement mais pour ça, il faut savoir exactement les circonstances.

Si j'ai bien compris, tu veux pouvoir donner une instruction à un PNJ à un moment donné mais sans savoir par avance, quel sera le PNJ concerné. Est-ce que les PNJs susceptibles d'être concernés sont uniquement ceux du "mod", n'importe quel PNJ original de Morrowind ou n'importe quel PNJ, qu'il soit du jeu ou de n'importe quel "mod" installé par le joueur ?

#5 drakan

drakan

Posté 05 avril 2010 - 21:45

ce que je voudrais faire, c'est bien faire ca pour n'importe quel npc de mon mon mod ( du jeu ca serai aussi bien :mrgreen: ) je vais essayer de me creuser la tete pour rendre ca realisable pour seulement 1 npc de mon mod puis j'esserai de generaliser de la meme maniere . le probleme étant que je compte bien en faire au strict minimum 10 npc ( en principe j'en voudrai 40) donc ca serait surement difficile, voir couteux en fps



LE CONTEXTE

LE BUT DE MON MODE en un mot, je veux rendre le fort telvanil vivant. y developper une economie , des services , etendre le fort , donner un peu de vie aux npc ....

l'economie : rentré d'argent ( exploitation des mine d'oeufs, de minerai , taxe d'artisan ...), sortie d'argent ( salaire , achat de matiere premier et de nourriture ) globalement le PJ sera deficitaire ( les ressources dans la zone sont bien maigre et puis rendre morrowind plus dur ca fera pas de mal)

service: teleporteur , garde (ayant divers utilité : protection contre les pilleur, suivre le PJ, proteger les mines ...) , enchanteur ( sortant du simple enchantement d'equipement ) ... je vais m'arreter la pour le contexte sinon je pourrai en faire des pages

POURQUOI JE VOUDRAIS QUE MES NPC PUISSE UTILISER UNE PORTE malgré toute mes idées, mon mod restera terne et sans vie si je ne reussi pas à faire bouger mes NPC bouger c'est simple en revanche franchir une porte... ca ca devient plus complexe

MA SOLUTION ACTUELLE serai de faire marcher une personne sur un activator (pour la condition declencheuse por franchir la porte ) et de le télétransporter. pour connaitre son ID , je pourrai mettre un variable specifiquement pour chaque personne pour savoir sur quel trajet il se trouve mais ca risque d'etre source de bug multiple (rien qu'ici j'en vois pas mal) et tres lourd à programmer (il n'y a pas qu'un NPC et pas qu'une porte )

merci de bien vouloir me donner un coup de main parce qu'abandonner mon projet la dessus serait vraiment decevant

Modifié par drakan, 05 avril 2010 - 21:50.


#6 elendell

elendell

    Mécano Dell'Arte


Posté 06 avril 2010 - 03:22

Bonjour drakan,

Je ne me suis jamais penché sur les déplacements aléatoires des PNJs. Il y a donc peut-être des manières plus simples de gérer tout ça mais en tout cas, ton idée d'activateur me semble assez facilement réalisable dans la mesure où tu connais d'avance les IDs des PNJs qui peuvent être concernés.

Comme toujours avec les scripts, on peut parvenir aux mêmes résultats de différentes manières mais en voici une qui me semble possible avec ton idée d'activateurs. Note que je ne l'ai pas testé et qu'il peut donc y avoir des ajustements à faire, par exemple dans la distance indiquée :

begin pasdeporteXX

if ( MenuMode == 1 )
	return
elseif ( GetStandingActor == 0 )
	return
endif

PlaySound, “ID_son_de_porte”

if ( GetDistance, ID_PNJ01 <= 10 )
	ID_PNJ01->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ02 <= 10 )
	ID_PNJ02->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ03 <= 10 )
	ID_PNJ03->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ04 <= 10 )
	ID_PNJ04->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ05 <= 10 )
	ID_PNJ05->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ06 <= 10 )
	ID_PNJ06->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ07 <= 10 )
	ID_PNJ07->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ08 <= 10 )
	ID_PNJ08->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ09 <= 10 )
	ID_PNJ09->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ10 <= 10 )
	ID_PNJ10->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
endif

if ( GetDistance, ID_PNJ11 <= 10 )
	ID_PNJ11->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif ( GetDistance, ID_PNJ12 <= 10 )
	ID_PNJ12->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
elseif...
....
....

end

Le principe : Si aucun acteur n'est sur l'activateur (PNJ ou PJ), le script ne va pas plus loin. Dans le cas contraire, il vérifie la distance des 40 PNJs avec l'activateur. Quand il en trouve un qui est dessus ou tout près, il le téléporte dans la cellule de destination prévue pour cet activateur. Il fait aussi un son de porte pour fignoler.

Pour ne pas faire des blocs contenant trop de "elseif", tu peux faire 4 blocs de 10 mais ce n'est pas forcément nécessaire (à vérifier).

Note : Avec ce système, il faut bien sûr un script local différent pour chaque activateur.

Comme il s'agit de scripts locaux, il ne fonctionneront que si le PJ est dans la cellule. Si tu veux que les PNJs présents dans une cellule ne soient pas les mêmes quand le PJ y retourne que quand il l'avait quittée, il faudra gérer ça avec un autre script mais c'est une autre histoire...

PS : Change le titre de ton sujet pour qu'il indique ce dont il traite stp car il ne concerne plus les fonctions de MWSE.

#7 drakan

drakan

Posté 06 avril 2010 - 09:13

c'est une exellente idée ! je n'ai jamais pensé a utiliser la fct getdistance :mrgreen:

c'est un script de fond qui reste tres leger (lorsqu'il n'est pas activé) et qui devrai fonctionner parfaitement

le seul probleme c'est que c'est tres lourd à programmer. Des pngs et porte il n'y en aura pas une seul...

je vais cogiter un peu pour voir si je peut pas faire une boucle pour diminuer la taille du programme et du coup ne pas devoir à remplacer à chaque fois tout les ids et les positions ( ne le faire qu'une fois )

#8 abg

abg

    L'ABG pour les civilisés


Posté 06 avril 2010 - 09:17

Voir le messageelendell, le 06 avril 2010 - 03:22, dit :

Je ne me suis jamais penché sur les déplacements aléatoires des PNJs. Il y a donc peut-être des manières plus simples de gérer tout ça mais en tout cas, ton idée d'activateur me semble assez facilement réalisable dans la mesure où tu connais d'avance les IDs des PNJs qui peuvent être concernés.

Chouette, de l'IA et des PNJs : mes friandises dans le TESCS :D

Pour organiser une vie des PNJs, Drakan tu peux t'intéresser au mod "Living Cities of Vvardenfell" de Wrye (hélas le site semble down aujourd'hui  :shocked: )

Le problème des déplacements aléatoires des PNJs est... qu'ils sont aléatoires (et abg s'appelle Monsieur de la Palice  :mrgreen: )
Je veux dire : le PNJ n'arrivera sur l'activateur "pas de porte" que par pur accident (ou alors il faut ajouter une couche de script supplémentaire pour programmer des AITravel).

Pour faciliter les choses (avec des PNJs pilotés par le package AIWander), il faudra toutefois optimiser finement le pathgrid :
- Poser les balises par ordre de priorité : les premières posées dans le TESCS sont celles "préférées" par les PNJs : quand un PNJ a le choix entre deux destinations, il choisit la balise de pathgrid avec le plus petit numéro d'index. Donc en les posant un ordre précis on peut définir des "routes préférées".
- S'assurer qu'il y a une balise pile sur chaque seuil de porte : ainsi le PNJ y marquera une pause ou y effectuera un changement de cap (selon les paramètres de son package AIWander). Ça devrait donner une apparence moins intempestive aux téléportations effectuées par le script d'Elendell

Le design du pathgrid est un point crucial...

- Le script d'Elendell va poser un autre problème : téléporté, le PNJ va continuer à se déplacer (AIWander) dans la nouvelle cell tout en gardant son référentiel hérité de l'ancienne cell (il va chercher à atteindre des coordonnées xyz qui ne sont plus forcément accessibles). Wrye pallie à ce phénomène en renouvelant par script le package IA du PNJ immédiatement après téléportation mais ça engendre d'autres inconvénients... Par contre le phénomène est exploitable pour organiser des voyages longue distance (si je trace un pathgrid suivant la route entre Seyda Nihyn et le point de chute de Tarhiel puis que "in-game" je téléporte Fargoth au dit point de chute, notre bosmer se met immédiatement en route pour rentrer au village  :? )

Autre chose à savoir : le seul moyen d'inciter un PNJ à franchir une loaddoor (hors scripting comme vient de proposer Elendell) est de le mettre en AIFollow ou AIEscort derrière le PJ. Ce qui bien entendu à d'autres conséquences (comme la solidarité avec le PJ en cas de combat)

Autres petites choses qui sortent de ta question mais peuvent t'intéresser pour ton projet :

- Cumuler dans le TESCS sur un PNJ un package AIWander et un AIFollow pointé vers player (ou un autre PNJ) permet de profiter des avantages des deux: l'AIWander fait circuler le PNJ de façon aléatoire "pseudo-naturelle" et l'AIFollow le rend attentif à ce qui peut arriver aux autres (je dis ça au cas où tu voudrais que certains centurions dwemers de Tel Uvirith fonctionnent réellement comme ils devraient : des gardes  ;) )

http://img141.imageshack.us/img141/7738/aifollow.th.jpg

Je n'hésite plus pour ma part à multiplier de tels liens entre PNJs ou entre PJ et PNJs, c'est très puissant...
Je vous laisse imaginer ce qu'on peut faire en remplaçant les deux packages AIWander par des AITravel (contrairement à une liste d'AITravel qui se heurte à un bug de Morrowind, ça marche très bien  8) )

- La variable locale stayoutside permet d'autoriser/inhiber les "suivis à travers loaddoor" en cas d'AIFollow ou AIEscort, dans le sens extérieur->intérieur ou intérieur->intérieur

Je n'ai jamais étudié sérieusement MWSE mais il y a probablement des choses sympas à faire avec, côté IA...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#9 drakan

drakan

Posté 06 avril 2010 - 09:29

je ne m'etait pas encore vraiment interesser au IA :mrgreen: (juste fait un test qui a marcher , je me suis arreter la )
mais c'est vrai que une fois le pb des portes resolue , je vais rapidement m'y interesser

question à part, comment fait on pour changer le titre de mon topic??:?

#10 abg

abg

    L'ABG pour les civilisés


Posté 06 avril 2010 - 09:37

Voir le messagedrakan, le 06 avril 2010 - 09:29, dit :

question à part, comment fait on pour changer le titre de mon topic??:mrgreen:

En modifiant ton message initial à l'aide de l'éditeur complet.
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#11 elendell

elendell

    Mécano Dell'Arte


Posté 06 avril 2010 - 18:09

Bonjour,

Voir le messagedrakan, le 06 avril 2010 - 09:13, dit :

le seul probleme c'est que c'est tres lourd à programmer. Des pngs et porte il n'y en aura pas une seul...

je vais cogiter un peu pour voir si je peut pas faire une boucle pour diminuer la taille du programme et du coup ne pas devoir à remplacer à chaque fois tout les ids et les positions ( ne le faire qu'une fois )
On peut arriver au même résultat avec un seul script commun mais ce ne serait pas plus léger il me semble, au contraire même. Il faudrait toujours que tu entres toutes les coordonnées de téléportations mais tu serais obligé de faire beaucoup plus de vérifications "if" dans le script. Quand à ne pas entrer toutes les IDs des PNJs, c'est aussi faisable mais à condition qu'ils aient tous un script local, ce qui n'allègerait donc pas.

Pour gagner du temps d'écriture, il faut que tu utilises un traitement de texte comme Word. Tu fais un premier script qui te servira de poncif, avec toutes les IDs des PNJs mais pas celles des coordonnées :

if ( GetDistance, Fargoth <= 10 )
		Fargoth->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
...
...
Ensuite, tu copies ce script dans Word, tu changes l'ID du script (en ajoutant un numéro par exemple) et tu utilises l'outil "Remplacer" : Remplacer "float_enum_x" par "328" (dans tout le texte).

La coordonnée x étant la même pour tous les "PositionCell" d'un script, tu n'as besoin de le marquer qu'une seule fois car l'outil "Remplacer" se chargera d'écrire "328" pour tous les "float_enum_x" du script. Tu n'auras donc que 6 mots à écrire pour chaque script d'activateur (ID du script, X, Y, Z, Zrot, Cell).

Note qu'il y a d'autres possibilités en utilisant des scripts ciblés mais ce ne serait pas plus simple car tu devrais marquer "ID_PNJ->StartScript ScriptGlobalDeCoordonnées" et faire des scripts globaux.

Voir le messageabg, le 06 avril 2010 - 09:17, dit :

Chouette, de l'IA et des PNJs : mes friandises dans le TESCS :mrgreen:
Mon premier réflexe a été de te citer comme spécialiste de la question mais je me suis dit que c'était inutile car tu ne résisterais surement pas à cette friandise servie sur un plateau...  :rolleyes:

PS : Merci pour tes explications... :D



EDIT pour drakan :

Il manque une vérification pour le son de porte que j'ai ajouté. Tel qu'il est dans mon script, il se produirait même si c'est le PJ ou un PNJ d'un autre "mod" qui marcherait sur l'activateur (un compagnon par exemple). Pour éviter ça, tu pourrais ajouter une variable de contrôle.

begin pasdeporteXX

short control_var

if ( MenuMode == 1 )
		return
elseif ( GetStandingActor == 0 )
		return
endif

if ( GetDistance, ID_PNJ01 <= 10 )
		ID_PNJ01->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
		set control_var to 1
elseif ( GetDistance, ID_PNJ02 <= 10 )
		ID_PNJ02->PositionCell, float_enum_x, float_enum_y, float_enum_z, float_enum_zRot, “ID_cellule”
		set control_var to 1
...
...

if ( control_var == 1 )
		PlaySound, “ID_son_de_porte”
		set control_var to 0
endif

end


#12 abg

abg

    L'ABG pour les civilisés


Posté 06 avril 2010 - 22:23

Esprit d'escalier es-tu la  ;) ?

Avant d'employer la commande positioncell sur un PNJ il faut s'assurer que l'altitude (position Z) du départ et celle de l'arrivée sont raisonnablement proches. S'il y a un écart (et hélas, avec les cell Bethesda, c'est fréquent) le PNJ risque de se voir infliger des dégâts de chute.
C'est un phénomène similaire de celui connu avec les mods de compagnons : au franchissement d'une "loaddoor" le compagnon se prend une gamelle parfois mortelle. Le mod "Vie Citadine" présent sur Wiwiland a ce défaut (avec à la clé des morts subites de PNJs) qui a été corrigé en VO (Living Cities Of Vvardenfell).

PS : Drakan, il faudrait vraiment s'il te plait éditer ce titre d'enfilade (pour garder le forum clair, faciliter les recherches ...etc.). Merci d'avance.
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#13 drakan

drakan

Posté 08 avril 2010 - 16:56

victoire ;)

apres des heures et des heures de programmation et des prise de tetes sans nom j'ai enfin reussi à peaufiner le programme d'elendell.

au debut je comptait "juste" stocker en memoire l'ID du personnage afin de pas à avoir à réécrire l'emplacement de la téléportation . ( j'ai essayé de faire la technique dont tu m'a parlé et elle marche effectivement tres bien. mais vu que je suis perfectionniste (= con ) j'ai essayé mon idée ).

vous imaginez bien toute les soucis que j'ai pu avoir en voulant "juste" stocker les ID (surtout qd on a aucune idée de ce qu'est une reference et un string ^^ )

voici un apercu du script enfin fonctionel



begin PhPasdeporteXX


	if ( MenuMode == 1 )
		return
	elseif ( GetStandingActor == 0 )
		return
	endif

	long LePersonnage ; caracterise le perso que l'on va teleporter
	long npc 	;pour eviter de repeter en boucle le programme
	long variableBidon	; contourne le pb des ifx (qui ne peuvent pas comparer) 

	set npc to 0
	set variablebidon to 0



;POUR LE NPC "PhNpc" (TESTE + INDEXAGE )
	if ( GetDistance, PhNpc < 200 )
		set variablebidon to 1
	endif

	ifx ( variableBidon )
		setx LePersonnage to xStringBuild "PhNpc"
		set npc to 1
	endif

	set variablebidon to 0
	
;--------------------------------

;POUR LE JOUEUR (TESTE + INDEXAGE )
	if ( GetDistance, player < 200 )
		set variablebidon to 1
	endif

	ifx ( variableBidon )
		setx LePersonnage to xStringBuild "player"
		set npc to 1
	endif

	set variablebidon to 0
	
;--------------------------------


	ifx ( npc )
		setx LePersonnage to xGetRef LePersonnage
		LePersonnage->PositionCell, 6867, -2509, 300, 0, "Phtest"
 	PlaySound, “ID_son_de_porte” 	
	endif

end




dure dure MWSE...

je vais bientot me mettre à combiner IAtravel et mon script pour qu'un NPC puisse marcher d'un point à un autre en passant par une porte mais la encore je crois que je suis un peu optimiste :)


Citation

Esprit d'escalier es-tu la :) ?

c'est pas faux ^^

Modifié par drakan, 08 avril 2010 - 17:00.


#14 elendell

elendell

    Mécano Dell'Arte


Posté 08 avril 2010 - 17:40

Bonjour drakan,

Je suis content que tu sois arrivé à faire ce que tu voulais. Je ne peux pas juger du résultat car je n'ai jamais étudié MWSE.

La question que je me pose est la suivante : En dehors de l'intérêt certain de la recherche et de l'expérimentation, quel est celui d'utiliser MWSE pour faire quelque chose qui est faisable sans lui ?

Cela obligera le joueur à utiliser MWSE alors que ce n'est pas nécessaire, non ? (A moins que MWSE soit obligatoire pour d'autres scripts du "mod", bien sûr).

#15 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 08 avril 2010 - 17:44

L'avantage de la version MWSE c'est que ça marche pour n'importe quel PNJ, pas juste ceux dont on énumère les ID. Ce qui n'est pas négligeable !
You look like you need a monkey!

Attention : perfectionniste paresseux.

#16 elendell

elendell

    Mécano Dell'Arte


Posté 08 avril 2010 - 17:51

Voir le messageKafou, le 08 avril 2010 - 17:44, dit :

L'avantage de la version MWSE c'est que ça marche pour n'importe quel PNJ, pas juste ceux dont on énumère les ID. Ce qui n'est pas négligeable !
Ah, ça c'est effectivement une bonne raison. Mais y a-t-il des PNJs issus du jeu ou d'autres "mods" susceptibles d'avoir besoin de passer les portes de son "mod" ? Et cela fait-il la distinction entre les PNJs simples et les compagnons ? (Je pose la question car je ne comprends pas ce script).

#17 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 08 avril 2010 - 18:02

Ah non c'est moi qui ai mal saisi, ça ne marche que pour le PNJ "PhNpc" et le joueur. Du coup oui je me pose la même question que toi. Désolé.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#18 drakan

drakan

Posté 08 avril 2010 - 18:38

il n'y a pas vraiment de raison valable , je voulais juste essayer de comprendre comment fonctionnai mwse et "simplifier" mon code ( ce qui l'a plutot alourdi)

mais generalisé ce code peut finalement etre fesable : en checkant la distance de la porte à tout les png de la cellule (via la fonction NEXTREF)

ensuite pour mon mode il y a peu d'interet , faire les modification manuellement irai plus vite

mais si jamais ca interesse quelqu'un que je generalise , je pourrai essayer de le faire

à elendell:

les fonctions MWSE ne sont elles pas deja inclue dans MGE?

Modifié par drakan, 08 avril 2010 - 18:41.


#19 elendell

elendell

    Mécano Dell'Arte


Posté 08 avril 2010 - 19:37

Voir le messagedrakan, le 08 avril 2010 - 18:38, dit :

les fonctions MWSE ne sont elles pas deja inclue dans MGE?
Tout le monde n'utilise pas MGE.  :)

#20 sucresalesucre

sucresalesucre

    En fait y'a des accents cachés


Posté 08 avril 2010 - 20:43

Si je ne dis pas de bétises, il y a un problème qui peut se poser, par rapport au fait que les cellules doivent être chargées ou non. Pas par rapport au positioncell lui-même, mais par rapport à la détection de la proximité du NPC par rapport à l'activator : la cellule doit être chargée pour cette opération il me semble...

Si on utilise un script global, on tomberait sur ce problème pour les NPC éloignés, et si on utilise un script local... ça limite les déplacements à la zone d'"activé" du joueur (intérieur, ou les 5 cellules de coté autour de lui en extérieur).

Le chat CROIT appartenir à une race supérieure évoluée. Mais ce n'est qu'un rebut pervers avec des yeux belzebuth et des griffes.


------

Moddeur de Blye Citadelle du Chaos pour Morrowind et Vault panic pour Fallout3


#21 drakan

drakan

Posté 08 avril 2010 - 21:04

et bien justement j'etait en train de reflechir à ce probleme.

le script que j'ai ecrit avait pour but de realiser un projet un peu trop ambicieux vu mes connaissance en programmation :) :

je voudrais crée des personnages qui vaque à leur affaire meme si le joueur n'est pas dans la cell
exemple: patouille de soldat, marchand empruntant une route de commerce , les ouvriers regagant leur logement au soir...

le script d'utilisation de porte était important : si un pnj ne pouvais pas traverser une porte , les pnj ne pourrai pas faire ces mouvement

comme je le pensais AItravel ne fonctionne que lorsqu'on est dans la meme cell que le pnj. je pensais utiliser cellupdate pour palier au porbleme. mais apparement ca n'a pas vraiment l'air de marcher...

si jamais quelqu'un aurait une idée ca m'avancerai bien

#22 abg

abg

    L'ABG pour les civilisés


Posté 08 avril 2010 - 21:13

Voir le messagesucresalesucre, le 08 avril 2010 - 20:43, dit :

Si je ne dis pas de bétises, il y a un problème qui peut se poser, par rapport au fait que les cellules doivent être chargées ou non. Pas par rapport au positioncell lui-même, mais par rapport à la détection de la proximité du NPC par rapport à l'activator : la cellule doit être chargée pour cette opération il me semble...

Si on utilise un script global, on tomberait sur ce problème pour les NPC éloignés, et si on utilise un script local... ça limite les déplacements à la zone d'"activé" du joueur (intérieur, ou les 5 cellules de coté autour de lui en extérieur).

Je précise que je ne connais pas MWSE : je parle "Morroscript de base"...

Pour GetDistance je ne crois pas : je me souviens avoir mesuré de grandes distances avec des objets clairement non chargés (à l'autre bout de l'île). Par contre les références doivent être persistantes (c'est implicite pour les PNJs, pour un activateur il ne faut pas oublier de cocher "References Persist"...)

Par ailleurs :
Avec un script global : déplacer des PNJs à Tel Uvirith pendant que le PJ se promène à Dagon Fel n'est pas vraiment un luxe qu'on peut se permettre avec Morrowind...
Avec un local : oui en effet, il ne marchera que si il est dans la cell (ou les 7 contigües) où se trouve du PJ. Le jeu est de toute façon complétement "player-centriste"...

Cependant le principal problème que je vois : une fois que le PNJ a été transporté à l'intérieur, comment ressort-il ?  ;)
Un script local dans la cell d'arrivée implique que tout le monde attende la visite du PJ et un global est trop dispendieux. Dans tous les cas, une cell non chargée est pour ainsi dire gelée, alors il ne faut pas attendre que le PNJ aille marcher sur un seuil côté intérieur  :)
Je crois Drakan que tu gagnerais du temps et t'épargnerais une impasse en étudiant la méthode de Wrye (Living Cities...). Ce n'est pas parfait, il y a quelques limitations mais ça reste une référence pour donner des emplois du temps à des PNJs.
Par contre un perfectionnement envisageable de la méthode LCV serait d'y ajouter une couche "AITravel" pour diriger les PNJs vers le seuil avant téléportation.

Lien sur web.archive.org puisque le site de Wrye est offline :
http://web.archive.o...ms.net/LCV.html
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#23 drakan

drakan

Posté 08 avril 2010 - 21:38

merci pour ta reponse car je suis deja dans l'impasse ;)

Citation

Cependant le principal problème que je vois : une fois que le PNJ a été transporté à l'intérieur, comment ressort-il ? :)

c'est exactement la question que je me pose XD

Citation

Avec un local : oui en effet, il ne marchera que si il est dans la cell (ou les 7 contigües) où se trouve du PJ. Le jeu est de toute façon complétement "player-centriste"...

tu veux dire qu'en exterieur un AItravel peut fonctionner sur la cell où on est et les cells qui lui sont adjacente?
si ca fonctionnait, ca sera déja pas mal ! ^^

Citation

Avec un script global : déplacer des PNJs à Tel Uvirith pendant que le PJ se promène à Dagon Fel n'est pas vraiment un luxe qu'on peut se permettre avec Morrowind...

je comptais bien faire un mode auto geré ( coutant peu de ressource ) et un mode de proximité ( le plus realiste possible mais plus couteux en ressource )



j'ai deja reflechis à la question de l'emploi du temps.
mon script global general (leger niveau ressource ) va tout les 3 heures lancer un script global intermedaire
qui vais actualiser l'emploi du temps de chaque png.

mais il reste encore beaucoup de zone de brouillard dans ce projet et comme tu me le conseil je vais un passé un peu de temps sur ce mode qui m'a l'air sympathique.

#24 abg

abg

    L'ABG pour les civilisés


Posté 08 avril 2010 - 22:05

Voir le messagedrakan, le 08 avril 2010 - 21:38, dit :

tu veux dire qu'en exterieur un AItravel peut fonctionner sur la cell où on est et les cells qui lui sont adjacente?
si ca fonctionnait, ca sera déja pas mal ! ^^

Pour être exact :
- Les scripts locaux s'exécutent en extérieur dans la cell où se trouve le PJ et les 8 adjacentes (et non pas 7 comme je l'écris au dessus  :) ). En intérieur c'est la cell où est le PJ et seulement elle.
- Les packages IA s'exécutent à l'intérieur d'un cercle centré sur le PJ et dont le rayon maximum est d'une cell et demi (moins si la réglette IA des préférences du jeu n'est pas au maximum mais j'ignore son impact exact)

Citation

j'ai deja reflechis à la question de l'emploi du temps.
mon script global general (leger niveau ressource ) va tout les 3 heures lancer un script global intermedaire
qui vais actualiser l'emploi du temps de chaque png.

mais il reste encore beaucoup de zone de brouillard dans ce projet et comme tu me le conseil je vais un passé un peu de temps sur ce mode qui m'a l'air sympathique.

C'est un peu la méthode LCV que tu décris là  ;)
Un script global s'occupe de découper la journée en tranches horaires. Il tient à jour une variable globale a chaque changement de tranche d'emploi du temps
Des scripts locaux, à chaque modification de la variable globale, relocalisent les PNJs par "positioncell". Ces scripts sont au milieu des villes (parfois plusieurs par ville si elle est grande) et dans certains intérieurs importants (auberges, maisons de guilde...) afin de continuer à animer l'emploi du temps si le PJ s'y attarde...

Ah et puis je réagis sur ça :

Voir le messagedrakan, le 08 avril 2010 - 21:04, dit :

le script d'utilisation de porte était important : si un pnj ne pouvais pas traverser une porte , les pnj ne pourrai pas faire ces mouvement
Si je peux me permettre tu regardes ton problème par le petit bout de la lorgnette...
Le scripting d'IA et mouvements c'est à 95% de l'enfumage ! Si le PJ n'a pas les yeux rivés sur le PNJ qu'importe que celui-ci "franchisse" le seuil. Qu'importe même qu'existe la porte ! On a tout simplement pas les moyens de s'en préoccuper sous peine de crouler sous les détails. Dans cet exemple, la commande Positioncell s'occupe de tout. Si tu dois t'assurer que le PNJ est bien sur le seuil, que la porte est ouverte (ou qu'il a la clé), que le chien n'est pas couché en travers et que madame ne l'attend pas derrière avec un rouleau à pâtisserie  :D  tu n'en sortiras pas  :) Si déjà tu parviens à gérer des positioncell horaires tu verras que ça donne des scripts assez longs et complexes comme ça...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#25 drakan

drakan

Posté 08 avril 2010 - 22:16

ce n'est pas totale impasse finalement :)
je vais bien pouvoir trouver des truc sympa à faire avec ca

mais pour l'instant j'ai mon morrowind qui se rebelle , il n'aime pas les emploi du temps ^^

il me met 13 ko d'erreur


Un des fichiers dont dépend " Un des fichiers dont dépend " %s " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs. " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs.
Un des fichiers dont dépend " Un des fichiers dont dépend " %s " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs. " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs.
Un des fichiers dont dépend " Un des fichiers dont dépend " %s " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs. " a été modifié depuis votre dernière sauvegarde. Cela peut engendrer des erreurs. Effectuer une nouvelle sauvegarde supprimera ce message mais pas forcément les erreurs.
Un ou plusieurs plugins n'ont pas pu trouver la bonne version du fichier master dont ils dépendent. Des erreurs pourraient se produire en cours de chargement ou de partie. Consultez le fichier "warnings.txt" pour de plus amples précisions.
Object reference "raflod the braggart"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Arrille's Tradehouse"
Object reference "tandram andalen"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Arrille's Tradehouse"
Object reference "albecius colollius"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Arrille's Tradehouse"
Object reference "hrisskar flat-foot"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Arrille's Tradehouse"
Object reference "ex_nord_door_01"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Arrille's Tradehouse"
Object reference "ex_nord_door_01"
missing in master file.

Current file "NPC LCV Schedules 03.esp"
Cell "Seyda Neen, Census and Excise Office"
Cell "Seyda Neen, Eldafire's House" not found for dialogue type Greeting
Info "EMPTY"
Cell "Shulk Egg Mine" not found for dialogue type Greeting
Info "EMPTY"
Cell "Shulk Egg Mine" not found for dialogue type Greeting
Info "EMPTY"
Cell "Arvel Manor" not found for dialogue type Voice
Info "EMPTY"
Cell "Ascadian Isles Region" not found for dialogue type Voice
Info "EMPTY"
Cell "Omani Manor" not found for dialogue type Voice
Info "EMPTY"
Cell "Ules Manor" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, Foreign Quarter" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, Hlaalu" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, Redoran" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, St. Delyn" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, St. Olms" not found for dialogue type Voice
Info "EMPTY"
Cell "Vivec, Telvanni" not found for dialogue type Voice
Info "EMPTY"
Cell "Sadrith Mora, Wolverine Hall" not found for dialogue type Voice
Info "EMPTY"
Object reference "DL_Skar3"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar7"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar6"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar8"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "in_ar_door_01"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar1"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar2"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar4"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar5"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Manor District"
Object reference "DL_Skar11"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar14"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar9"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar15"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar19"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar18"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar17"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar16"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar13"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar12"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_Skar10"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Ald-ruhn, Redoran Council Hall"
Object reference "DL_V_FQ5"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Lower Waistworks"
Object reference "DL_V_FQ6"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Lower Waistworks"
Object reference "DL_V_FQ7"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Lower Waistworks"
Object reference "DL_V_FQ8"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Lower Waistworks"
Object reference "DL_V_FQ1"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Plaza"
Object reference "DL_V_FQ2"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Plaza"
Object reference "DL_V_FQ4"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Plaza"
Object reference "DL_V_FQ3"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Foreign Quarter Plaza"
Object reference "DL_V_Hlaalu1"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Plaza"
Object reference "DL_V_Hlaalu2"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Plaza"
Object reference "DL_V_Hlaalu5"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Plaza"
Object reference "DL_V_Hlaalu4"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Plaza"
Object reference "DL_V_Hlaalu3"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Plaza"
Object reference "DL_V_Hlaalu10"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Records"
Object reference "DL_V_Hlaalu9"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Treasury"
Object reference "DL_V_Hlaalu6"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Waistworks"
Object reference "DL_V_Hlaalu8"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Waistworks"
Object reference "DL_V_Hlaalu7"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Hlaalu Waistworks"
Object reference "DL_V_Redoran1"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Plaza"
Object reference "DL_V_Redoran2"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Plaza"
Object reference "DL_V_Redoran3"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Plaza"
Object reference "DL_V_Redoran4"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Plaza"
Object reference "DL_V_Redoran9"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Waistworks"
Object reference "DL_V_Redoran6"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Waistworks"
Object reference "DL_V_Redoran5"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Waistworks"
Object reference "DL_V_Redoran7"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Waistworks"
Object reference "DL_V_Redoran8"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Redoran Waistworks"
Object reference "DL_V_Telvanni1"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Plaza"
Object reference "DL_V_Telvanni2"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Plaza"
Object reference "DL_V_Telvanni3"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Plaza"
Object reference "DL_V_Telvanni5"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Object reference "DL_V_Telvanni4"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Object reference "DL_V_Telvanni8"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Object reference "DL_V_Telvanni6"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Object reference "DL_V_Telvanni7"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Object reference "DL_V_Telvanni9"
missing in master file.

Current file "NPC LCV Locks.esp"
Cell "Vivec, Telvanni Waistworks"
Missing Masterfile: PNO412Morrowind.esm
Local count for script 'CharGen_ring_keley' differs from local count for container item of 'mebestian ence00000000'. Variables will be reinitialized.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'strongholdWives' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'strongholdWives' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'venimGuardScript' differs from local count for saved reference data.
Local count for script 'aryonScript' differs from local count for saved reference data.
Local count for script 'sleeperScript' differs from local count for saved reference data.
Expression Error Unable to find cell id "Plateau d'Odaï" in script Strong_Build1_H.



quand à ce que tu disais sur le surplus de detail , c'est vrai que je vais trop loin pour ce genre de detail.
mais j'aurai bien aimer faire un combriolage de la salle des tresors avec une poursuite des brigand à en perdre l'haleine , des convois de marchandises en proie a des attaque , des mise à sacs du fort par une faction adverse et j'en passe...
l'AI est omnipresente dans tout ces scenarios mais c'est vrai que pour l'histoire d'utiliser la porte...
de toute maniere, c'est a priori impossible de faire un trajet interieur -> exterieur donc la question ne se pose plus. au moins je serais fixé la dessus :)

Modifié par drakan, 08 avril 2010 - 22:32.





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

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