Aller au contenu


Bug Ou Réalitée ?


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

#1 Mimtie

Mimtie

Posté 12 novembre 2010 - 13:13

Bonjour,

Ayant l'âme d'un collectionneur Je suis en train de me réaliser un petit mod pour exposer toutes les belles armures du jeux + celles que j'y ai rajouter.
donc avec l'éditeur j'ai créer une belle pièce et j'ai placé a l'intérieur une centaine de NPC équipé d'armures avec ce Script:

Begin OnLoad
SetUnconscious 1
SkipAnim
SetGhost 1
End

Begin OnActivate
Return
End

Alors implacable pour les 52 premiers mannequins, mais chose étrange pour les autres ça ne vas pas du tout.
Ingame les armures n'apparaissent pas et on peu passer a travers leurs corps ce qui n'est pas le cas des 52 premiers.

J'ai beau me creuser les méninges, essayer de changer les races, classes, packages etc.. rien n'y fais

PS: c'est peut être pas l'endroit idéale pour poster ça mais j'ai pas trouver mieux

#2 Mike89

Mike89

    Encyclopedia Univerwikissssss


Posté 12 novembre 2010 - 16:26

Voir le messageMimtie, le 12 novembre 2010 - 13:13, dit :

Bonjour,

Ayant l'âme d'un collectionneur Je suis en train de me réaliser un petit mod pour exposer toutes les belles armures du jeux + celles que j'y ai rajouter.
donc avec l'éditeur j'ai créer une belle pièce et j'ai placé a l'intérieur une centaine de NPC équipé d'armures avec ce Script:

Begin OnLoad
SetUnconscious 1
SkipAnim
SetGhost 1
End

Begin OnActivate
Return
End

Alors implacable pour les 52 premiers mannequins, mais chose étrange pour les autres ça ne vas pas du tout.
Ingame les armures n'apparaissent pas et on peut passer a travers leurs corps ce qui n'est pas le cas des 52 premiers.

J'ai beau me creuser les méninges, essayer de changer les races, classes, packages etc.. rien n'y fais

PS: c'est peut être pas l'endroit idéale pour poster ça mais j'ai pas trouver mieux

Sur l'endroit idéal : c'est bon ici, c'est un problème sans doute de limitation du jeu, en particulier dans un script, et de trouver un moyen de tourner cette limite, par une technique de script...

Petite remarque : 100 npc dans une cellule, et faire un truc complexe (les npc sont les objets les plus compliqués du jeu, et reparamètrer leur AI est lourd aussi) te fait sans doute atteindre une limitation par construction du moteur.

Je ne pense pas à une limitation en réalité de l'AI, mais au nombre de pièces d'armure (un nif par armure) à positionner sur les slots du skeleton de PNJ.

As tu essayé d'abord de charger sans les scripts ? As-tu tes 100 pnj normaux ou non, même si cela donne une belle pagaille ?

S'ils se chargent correctement, c'est un pb de script, et on verra comment l'améliorer.
Sinon, j'ai bien peur que ce soit sans espoir.
A moins de bricoler une sorte de squelette de PNJ "porte-manteau" qui en ferait un quasi-static... voir si un mod de ce genre existe.
Un mod en construction pour Oblivion : L'archipel d'Angamandon !   (mais il est un peu en sommeil)...
On en parle aussi sur ce forum de  Wiwiland  : [mod complet] Archipel d'Angamandon

#3 Mimtie

Mimtie

Posté 14 novembre 2010 - 02:11

Merci pour la Réponse et navré de ne pas avoir a mon tour répondu plus tôt mais j'étais parti en week-end.

Alors j'ai cru toucher au but en remarquant que le Setting: iAINumberActorsComplexScene était réglé sur 50, donc j'ai mis 99 mais ça change rien malheureusement.
j'ai ensuite essayé de mettre mes npc dans 2 pièces séparées de 50 chacune, résultat la première se charge correctement et lorsque je pénètre dans la seconde pièce le problème refait surface.
Je n'ai pas encore tester sans script car en fait j'ai 1 Script par mannequin (j'ai donné une version simplifié de mon script)
Le Script Complet est le suivant:

ScriptName 0DidMan001Script

Float MyX
Float MyY
Float MyZ
Float MyRot

Begin OnLoad
;----------------------------------------
Set MyX to 254
Set MyY to 580
Set MyZ to 0
Set MyRot to 200
;----------------------------------------
SetPos X MyX
SetPos Y MyY
SetPos Z MyZ
SetAngle Z MyRot
SetUnconscious 1
SkipAnim
SetGhost 1
End

Begin OnActivate
SetPos X MyX
SetPos Y MyY
SetPos Z MyZ
SetAngle Z MyRot
SetUnconscious 1
SkipAnim
SetGhost 1
Return
End


100 script, un par mannequin comme ça si il bouge pour une raison ou une autre (genre je déboule un peu vite dans la pièce) un clic et il reprend sa place.

Mais je vais essayé de mettre une centaine de npc dans une pièce pour voir.
L'idée du squelette porte-manteau me parait intéressante, le problème c'est que si je pose un nif d'armure dans une pièce je ne vérais que la version "world" et pas la "Biped" et encore moins la version féminine.

#4 Shadow she-wolf

Shadow she-wolf

    Le katana de la GBT


Posté 14 novembre 2010 - 08:40

Coucou...:)

Premièrement, le "return" dans le bloc OnActivate n'est pas très très utile normalement. Le bloc OnActivate remplace l'activation par défaut, donc sans lui, tu ne parleras tout de même pas au mannequin.


L'autre point, c'est que ton bloc OnLoad devient très lourd s'il est multiplié par 100.
Par ailleurs il faut savoir que le bloc OnLoad est exécuté au chargement du modèle 3D de l'objet, à sa mise en mémoire.
Ce qui signifie que si on change de cellule, son modèle reste en mémoire jusqu'à ce qu'il soit éjecté de cette dernière...quand elle arrivera à saturation.
C'est à dire que si l'on revient dans la cellule juste après, le bloc OnLoad n'est pas exécuté, car l'objet est déjà en mémoire.

C'est la source de bogues dans le jeu de base...


Par ailleurs, ne vaudrait-il pas mieux forcer le PNJ a telle position via un package AI ? Faire comme les gardes en poste: placer un xMarkerHeading, et le package AI du PNJ dit à ce dernier d'aller se positionner à cet endroit là.
Bien entendu, pour un soucis de performance, il faut cocher la case NoLowLevelProcessing sur la feuille du mannequin, pour éviter que le moteur gère leur IA alors que les mannequins ne sont pas en mémoire.

Ca devrait économiser pas mal de script...par contre je ne sais pas si le moteur IA suivra quant à lui...

#5 Mimtie

Mimtie

Posté 14 novembre 2010 - 11:08

Voir le messageShadow she-wolf, le 14 novembre 2010 - 08:40, dit :


L'autre point, c'est que ton bloc OnLoad devient très lourd s'il est multiplié par 100.
Par ailleurs il faut savoir que le bloc OnLoad est exécuté au chargement du modèle 3D de l'objet, à sa mise en mémoire.
Ce qui signifie que si on change de cellule, son modèle reste en mémoire jusqu'à ce qu'il soit éjecté de cette dernière...quand elle arrivera à saturation.
C'est à dire que si l'on revient dans la cellule juste après, le bloc OnLoad n'est pas exécuté, car l'objet est déjà en mémoire.
C'est la source de bogues dans le jeu de base...

Je pense que c'est pour cette raison que le fait de répartir les mannequins sur plusieurs cellules ne résout pas le problème. y'a t'il un moyen via script ou autre de "vider" la mémoire ?



Voir le messageShadow she-wolf, le 14 novembre 2010 - 08:40, dit :

Par ailleurs, ne vaudrait-il pas mieux forcer le PNJ a telle position via un package AI ? Faire comme les gardes en poste: placer un xMarkerHeading, et le package AI du PNJ dit à ce dernier d'aller se positionner à cet endroit là.
Bien entendu, pour un soucis de performance, il faut cocher la case NoLowLevelProcessing sur la feuille du mannequin, pour éviter que le moteur gère leur IA alors que les mannequins ne sont pas en mémoire.

Ça devrait économiser pas mal de script...par contre je ne sais pas si le moteur IA suivra quant à lui...

Si je me sert uniquement de package AI je vais rencontrer plusieurs problèmes:

Il vas devenir possible de frapper le mannequins
Ils vont papoter
les mannequins vont avoir du mal a remonter sur leurs piédestal quoi que ce problème est plus anecdotique qu'autre chose  :blush:

Modifié par Mimtie, 14 novembre 2010 - 11:08.


#6 Shadow she-wolf

Shadow she-wolf

    Le katana de la GBT


Posté 14 novembre 2010 - 11:30

Voir le messageMimtie, le 14 novembre 2010 - 11:08, dit :

Je pense que c'est pour cette raison que le fait de répartir les mannequins sur plusieurs cellules ne résout pas le problème. y'a t'il un moyen via script ou autre de "vider" la mémoire ?
Nan.
Il y a des fonctions, mais à utiliser avec la console, et avec parcimonie.
Leur utilisation dans les scripts est source de problèmes.

De toute façon, ça vide la mémoire pour les objets qui ne sont pas dans la cellule courante, ça ne règlera pas du tout le problème...



Voir le messageMimtie, le 14 novembre 2010 - 11:08, dit :

Si je me sert uniquement de package AI je vais rencontrer plusieurs problèmes:

Il vas devenir possible de frapper le mannequins
Ils vont papoter
les mannequins vont avoir du mal a remonter sur leurs piédestal quoi que ce problème est plus anecdotique qu'autre chose  :blush:
Pas tout, juste le placement des PNJ.
Les SetGhost et compagnie peuvent rester dans un script.
Ça économisera "juste" 800 instructions lors du chargement de la cellule en mémoire et 400 variables en mémoire.

Je ne sais pas du tout si ça règlera ton problème, mais s'il y a saturation du moteur de script, il vaut mieux économiser autant que possible sur les scripts.


Par ailleurs, un PNJ ne va parler à un autre que si son package AI est de type Wander, or pour placer un PNJ à un point fixe, on utilise plutôt un package AI de type Find.


Puis, si tu veux éviter que le PNJ ne bouge vraiment, et que le joueur ne puisse pas du tout le bouger de son "piédestal", tu peux faire comme la statue du joueur de Bruma:
Un PNJ fixé par package AI sur un xMarkerHeading entouré de CollisionBox.

#7 Mimtie

Mimtie

Posté 14 novembre 2010 - 13:10

Hé bien merci infiniment pour toute ces bonnes idées je vais tester ça au plus vite :huhu:




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

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