Démo de mine & utilisation des UserFedinedEvents

Répondre
Partager Rechercher
Vous trouverez ici un micro-module de démonstration de l'animation d'une mine.

Techniques abordées

Déplacements automatisés de PNJs.
Le script udf_mineur montre comment gérer le problème du déplacement d'un PNJ entre deux points pour éviter qu'il soit bloqué ou perde du temps à attendre sa commande suivante.
Si vous mettez un char d'assaut dans le chemin du PNJ, il s'arrêtera quand même, faut rester raisonnable

Utilisation des UserDefinedEvents
Technique essentielle pour faire tout ce qui n'est pas standard dans le toolset, ils sont utilisés ici pour gérer l'intelligence artificielle des mineurs (pas de panique, ça tient sur 50 lignes...)

Déclenchement automatique d'animations
Le problème avec les gros modules vient de la charge que font peser sur le serveur des myriades de PNJs jouant des kilos de scripts.
Les events "OnEnter" et "OnExit" de zone (area) permettent, à l'entrée de zone, de créer les PNJs voulus, et à la sortie de zone, de les virer pour délester le CPU.
Dans cet exemple (4 scripts je crois, pas plus), je ne crée pas les PNJs à l'entrée de zone, à rajouter soi-même.

Sonorisation des PNJs
Au lieu d'utiliser des sons de zone, qui sont rarement au bon endroit au bon moment, le script udf_mineur montre comment faire jouer par un PNJ un son pertinent à son activité. Ici, on mine, et ça fait du pétard !

Utilisation des objets invisibles
Les mineurs attaquent une veine de mythril, simulée par un placeable "invisible object".
Pour le faire tenir à la bonne hauteur, placer un brazero au sol, puis l'objet invisible dessus, et enlever le brazero.

Bon amusement !
Thumbs up
Re: Démo de mine & utilisation des UserFedinedEvents
Citation :
Provient du message de miriandel
[Pour le faire tenir à la bonne hauteur, placer un brazero au sol, puis l'objet invisible dessus, et enlever le brazero.
Je m'en vais tester ton module tout de suite ... surtout que j'ai pas encore touché aux UserDefinedEvent .
Mais j'ai pas put mempécher de trouver ta technique géniale pour l'objet invisible
Faut dire que l'un des gros problème de NWN c'est cette foutue hauteur

Par contre j'aurais quelques réserve sur le Spawn/Destruction de PNJ ... mais bon pas grave

Re: Re: Démo de mine & utilisation des UserFedinedEvents
Citation :
Provient du message de Darkmore
Par contre j'aurais quelques réserve sur le Spawn/Destruction de PNJ ... mais bon pas grave
Ah ben faut dire hein, toutes les idées sont les bienvenues.

J'ai eu des problèmes par le passé de PNJs, qui, en rencontrant les PJs après deux heures sans que personne soit rentré dans leur zone, déclenchaient d'un coup les événements de 2 heures (joyeux bordel) ou qui ne déclenchaient plus rien du tout !

Avec ma méthode, le serveur ne doit gérer que les NPCs des zones où des PJs se trouvent, et je suis certain que les NPCs rencontrés sont tous frais, tous beaux.

La charge sur le serveur est en outre minimale, tu peux avoir un monde gigantesque, le serveur est toujours en roue libre.

Idées ?
Re: Re: Re: Démo de mine & utilisation des UserFedinedEvents
Citation :
Provient du message de miriandel
Avec ma méthode, le serveur ne doit gérer que les NPCs des zones où des PJs se trouvent, et je suis certain que les NPCs rencontrés sont tous frais, tous beaux.
Ben c'est là que le bas blesse, tu ne peux pas (je crois) appliquer ta méthode au PNJ important puisque leur LocalInt ou LocalString nécessaire au dialoqgues ou au quetes seraient initialisé.
Remarque tu peux stoquer ces donné dans un placeable .. mais est ce vraiment idéale.
L'autre problème c'est que même en déselectionant le 'Fade In' tes PNJ ont encore l'impression d'apparaitre comme par magie si les PJ rentre directement face a leur point de création.

Mais c'est vrai doit alléger le cpu ...

Par contre il y a un GROS problème dans ton module ... le mythril c'est pas un cristal c'est un METAL
PS : t'as essayé le OnPercieved pour déclaché les animation ?
Pour les variables locales, je les stocke effectivement sur un placeable.
Parfois aussi je place un PNJ différent selon les conditions (autre conversation, autre inventaire, autres attributs ou que sais-je).
Comme je travaille dans l'optique "persistant", je fais très attention à ne rien laisser que ni soit nécessaire dans une zone.
Quand tu dois faire un GetObjectByTag et qu'il y 3000 objets dans le module, tout compte

Pour le fade-in, le problème est encore plus aigu que tu ne le supposes.
En effet, mes PNJs d'ambiance (foule, clients, gardes, etc) spawnent tout nus.
J'ai une routine complexe qui, en fonction du sexe, de l'activité et de l'endroit, les équipe d'un vêtement et/ou arme aléatoire(s) au moment où ils spawnent, puis enclenche les animations d'ambiance.
Ma routine de spawns d'ambiance les placent aléatoirement dans les zones, mais juste hors de vue du PJ qui entre.
Ca marche très bien.

Le Onperceive est effectivement une bonne approche, mais ne me convient pas car je travaille souvent sur les sons, et qu'un son peut être entendu bien au-delà de portée de perception.

Ouais, le mythril est un métal, mais j'ai pas encore trouvé plus beau que les "crystal craskets"

Merci pour tes remarques constructives
Citation :
Provient du message de miriandel
J'ai une routine complexe qui, en fonction du sexe, de l'activité et de l'endroit, les équipe d'un vêtement et/ou arme aléatoire(s) au moment où ils spawnent, puis enclenche les animations d'ambiance
Ouais excellente idée !
En plus ça doit alléger serieusement la compilation du module si ta palette a pas un centaine de PNJ différents à traiter !!
Malin!

J'ai un doute sur le Onperception au fait ... est ce que c'est le PNJ porteur de script qui perçoit ...ou est ce que c'est le PJ qui perçoit le porteur de script
Citation :
Provient du message de Darkmore
J'ai un doute sur le Onperception au fait ... est ce que c'est le PNJ porteur de script qui perçoit ...ou est ce que c'est le PJ qui perçoit le porteur de script
Lorsque un nouvel objet entre dans le champ de perception de la créature qui appelle ce script
__________________
- Cinq personnes sur quatre ont des problèmes avec les fractions.
Les blueprints de PNJs et de rencontres sont lourds pour le compilateur. Surtout les rencontres.
Comme mes peuplements sont aléatoires, je crée 3 ou 4 blueprints par race, plus les blueprints des monstres maison, soit 3 ou 4 aussi, déclinés en difficulté parfois.
Donc oui, au total, ça doit taper la centaine de blueprints de créatures.
Le module met une bonne minute à se charger, mais le save s'exécute en trois ou qutare secondes.
Je ne fais jamais de build complet; quand j'en faisais, j'en ai jamais retiré de bénéfice, et ça me laisserait le temps d'aller boire un café...

Pour le OnPerception, c'est le PNJ qui perçoit, ce qui suppose que le serveur boucle sur tous les PNJs présents.
Or, d'après mes tests, les scripts tournent sur les PNJs même quand personne n'est présent dans la zone.
Une des raisons aussi pour lesquelles je ne laisse pas dans le monde un PNJ avec une méthode OnHeartBeat.

Les forums officiels, rubrique "server admins" sont pleins de posts de DMs qui se plaignent que leur serveur rame après trois ou quatre heures de fonctionnement, et qu'ils doivent le rebooter, attribuant la faute à un memory leak.

Par contre, j'ai laissé tourner mon module huit heures cette nuit, pour tester les fluctuations de RAM.
Au boot, il utilisait 22Mo, et après huit heures, il utilisait 23 Mo
bonjour! ^^

Tout d'abord merci a vous d'aider les quiches

miriandel, ton micro-module à l'air super mais malheureusement je ne peux pas le télécharger (accès refusé, erreur 403)

est-ce provisoire?




Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés