Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > meilleur systeme de respawn ?
meilleur systeme de respawn ?
Par Blam le 9/1/2003 à 16:16:25 (#2981730)
Faire respawner individuellement tous les monstres a leur mort ?
Faire respawner par zones des que celles ci sont vides de PJ ?
Faire respawner par zones des que mes monstres sont morts, sans se préocuper des PJ ?
Autre ?
Quelle expérience avez vous de tout cela et quel est votre avis
Par Cassin le 9/1/2003 à 16:36:03 (#2981874)
Parce que s'il y a bien un truc que je n'aime pas, c'est nettoyer une zone, m'attarder un peu à l'explorer , et me retaper les mêmes monstres au retour qu'à l'aller...
Par Iridian le 9/1/2003 à 16:36:47 (#2981884)
Ensuite, j'ai souvent lu sur ce forum qu'il etait profitable pour un serveur de ne spawner les monstres que lorsqu'un joueur est dans la zone (question de charge micropro).
Enfin pour le spawn en lui meme, le plus fun serai un spawn aleatoire dans le nombre, et aleatoire+dispersé dans l'espace.
Enfin bref, que du bonheur en perspective pour le scripteur :)
Par Archamedes_Fr le 9/1/2003 à 16:39:59 (#2981904)
- Pour du semi-réalisme, je dirais un respawn avec délai en fonction de la créature sans se préoccuper des personnages. Mais ça consommera des ressources.
- En terme de ressource, le script de eMRaistlin est à mon avis excellent ( avis certainement subjectif puisque je l'ai intégré :-D ). Les zones non visitées sont vides de créatures, elles consomment peu de ressources CPU.
Personnellement, j'ai fait un mixe des deux. J'ai repris le système d'eMRaistlin, ajouté un délai sur le temps de respawn des créatures et modifié les factions pour qu'ils se battent même entre ( un loup qui attaque un cerf ça fait toujours sympa ).
Bon, le délai sur l'apparition des créatures et peut-être pas ce qu'il y a de mieux en terme de ressources, mais pour l'instant mon serveur étant un PIV 2.4 avec 1.5 Go de RAM, je pense pouvoir faire tenir tout ça ensemble. Bien que je n'ai pas tester avec plus de 4 joueurs simultanéments pour l'instant.
Par coolstar le 9/1/2003 à 16:45:09 (#2981947)
Par Archamedes_Fr le 9/1/2003 à 16:46:17 (#2981953)
Provient du message de Iridian
Enfin pour le spawn en lui meme, le plus fun serai un spawn aleatoire dans le nombre, et aleatoire+dispersé dans l'espace.
Enfin bref, que du bonheur en perspective pour le scripteur :)
Iridian en rêvait.... eMRaistlin l'a fait...
Je me suis permis d'y ajouter un délai de respawn en fonction de la créature et un nombre de créatures, parfois fixe parfois aléatoire, en fonction de la zone.
Mmmmmmmmm
Par Blam le 9/1/2003 à 17:17:40 (#2982211)
Le système d'eMraitlin est tres adéquat, pour le proc, meme si ce n'est pas ma préocupation première, mais coté "réalisme" cela m'embete un peu.
J'osait esperer un système bien meilleur, mais il semblerait que pour la cohérence, le systeme et l'application, il n'y ait rien dautre.
Ceux qui ont des idées autres, développez SVP
Merci.
NB: bien embété le Blam la !!! :)
Bravo a eMraitlin pour son travail magnifique.
Par eMRaistlin le 9/1/2003 à 17:22:14 (#2982245)
NB: bien embété le Blam la !!!
Bravo a eMraitlin pour son travail magnifique
Ahah... mais faut pas... je l'ai toujours dis : il est vain de vouloir recuperer exactement un systeme de qqu'un d'autre... Mon post est plus la pour exemple que pour pompage direct...
Pour ton systeme, on peut facilement s'arrabger pour placer les WP a des endroits strategiques, et qui plus est... si tu le veux, on peut essayer de rajouter un condition de "Ne Spawn qu'en dehors du champs de vision"...
MAIS! Mais ! mais il se moque !
Par Blam le 9/1/2003 à 18:35:36 (#2982888)
J'ai dit a peu pres ! tss tss tss
je viens de mettre ton systeme sur un nouveau module d'essai et la que vois je ? mmmmh ? RIEN ! ca ne marche pas
J'ai du m...... quelque part, il y a un truc que j'ai pas compris
tu as l'air de dire que le ref et le tag sont pareil alors que moi il sont systematiquements differents et il m'est impossible de changer le ref.
la par pure curiositée j'ai perdu du temps (enfin ca forme un peu !)
Par Archamedes_Fr le 9/1/2003 à 19:04:06 (#2983114)
Nom: Collines de Hapdent
TAG: HAPDENT_0002
resref: hapdent_0002
Si tes zones n'ont pas leur TAG et resref identiques, tu peux copier la zone. Lors de la création d'une zone, tu lui donnes comme nom le TAG ( donc tout en majuscule ) comme ça il prends tout de suite le bon resref. Ensuite tu renommes la zone comme tu veux.
Par eMRaistlin le 9/1/2003 à 20:34:26 (#2983842)
Sinon, essaye de bien verifier les tags des WP :
-si tu obtiens des badger : c'est que la liste des monstres est mauvaise.
-si tu obtiens le monstre du default, c'est que tu ne decode pas bien le tag de l'area, donc il est mal note : reverifie.
-si les monstres n'apparaissent pas, il est probable que cela vienne des WP
voila ^^
Pas la peine
Par Blam le 9/1/2003 à 20:43:43 (#2983916)
1 on est parti du meme principe
2 c'est pas tout a fait la meme chose
3 pas été foutu de mettre en place le tiens sur un petot module de test pour voir les differences.
4je bidouille beaucoup pour combler le retard de mon monde online et je regarderais plus tard comment c fait chez toi :)
5 je cherche toujours une idée brillante pour alleger le monde et qu'il apparaisse plausible.
merci a ceux qui ont des idées et qui les partagent
NB: heuuuuuu, nan j'ai rien oublié !!!
:)
Par RAT le 9/1/2003 à 20:56:30 (#2984019)
Le principe, est d'agir surtout dans le onmoduleload. Pourquoi? car cela chauffera moins le processeurs logiquement que sur le onheartbeat.
L'idée :
Faire un script au premier chargement du module qui va s'occuper à vider tous les NPC qui ne portent pas en début de tag un "ares_" ou les NPC qui ne sont pas invulnérable. En même temps que de les supprimer, je sauvegarde tout cela dans de multiples variables locales, dont le resref de la créature, un compteur , sa location etc... répertorié par les differentes zones.
Cela me permet de pouvoir spawner les NPC quand le premier PC rentre, et il le resupprime quand il n'y a plus de NPC du tout dans la zone.
Mais si un PC reste dans la zone plus de 10 minutes (il charge la fonction qui se trouve dans le OnModuleLoad toutes les 10 minutes qui cette derniere possède 4 fonctions :) ), et qu'il a tué une créature alors je la fais respawner automatiquement.
L'avantage de tout sauvegardé au premier chargement du module, c'est que vous pouvez agir sur toutes vos zones sans problème.
Le seul hic, c'est que le chargement du module , est un tout petit plus longue que les autres. Mais je n'ai encore jamais eu de probleme.
je l'ai testé pour l'instant avec 24 zones avec en moyenne entre 10 et 30 créatures par zones.
Je vais continuer à augmenter le nombre , pour voir :).
Sinon grâce à ce code, j'ai pu faire, de multiple respawn pour module persistant.
Enfin bon, pour l'instant je n'ai pas eu un seul probleme, mais je prefere continuer à faire mes tests tout de même.
[Edit]
Bon apres un test sur mes 24 zones, dont 3 zones remplies en moyenne entre 20 et 30 et une zone avec + de 180 npc, aucun plantage quand on rentre dans la zone.
Le seul hic c'est ua chargement du module qui prend un certain temps. Mais après tout se gere à merveille , en libérant quand même des grosses ressources lol :).
Je continue mes tests.:)
Par (Gadjio) le 9/1/2003 à 23:22:28 (#2985095)
L'idée de RAT me semble bien pensé, surtout pour ceux avares en ressources systèmes (c'est hélas mon cas). Je vais essayer quelques scripts dans ce sens aussi.
Mais je n'ai pas compris ça :Mais si un PC reste dans la zone plus de 10 minutes (il charge la fonction qui se trouve dans le OnModuleLoad toutes les 10 minutes qui cette derniere possède 4 fonctions ), et qu'il a tué une créature alors je la fais respawner automatiquement.
C'est sur le onHeatBeat du module, cet appel à la fonciton du onModuleLoad ? Pourquoi elle est appelée toutes les dix minutes ? (ou plutôt : comment ?)
onmoduleload
Par Blam le 10/1/2003 à 0:12:11 (#2985454)
peux tu être plus précis stp :)
Par RAT le 10/1/2003 à 0:24:46 (#2985536)
Bon je recommence, je n'utilise donc jamais le onheartbeat du module.
Dans le onmoduleload, donc au chargement du module, je pense à détruire tous les NPC donc répertorié par differentes sauvegardes de toutes les zones.
Après 2 scripts vont réagir, le area_enter, et le area_exit.
dans le area_enter: il va détecter le premier PC qui rentre.
Dès qu'il rentre, il charge la zone, grâce aux sauvegarde faites avec le onmoduleload. (je vous dis j'ai réussi à charger + de 180 NPC dans une zone de 32 sur 32, zone de forêt d'ailleurs).
Et c'est là ou je me suis gourré dans mon explication c'est que c'est dans le onenter de la zone, grace à un delaycommand mit à 10 minutes, il va charger à la 10èmes minutes une fonction, qui est une fonction récursive, qui va donc se rappeler à chaque fois.
Dans cette dernière j'appelle donc ma fonction qui va lui permettre de respawner les NPC. Car elle va faire une recherche dans toute la zone, et à chaque NPC sauvegardé qu'elle trouve inexistant, elle va les recréer, en resauvegardant son objet par une variable local.
Après je fais appelle à une autre fonction qui lui va respawner tous les items se trouvant dans des placeables.
Après une autre fonction encore, qui lui va respawner des placeables si le code ne les détecte plus (fait par le mm principe que les respawn des NPC) etc....
dans le area_exit:
il detecte que s'il n'y a plus de PC, ils resupriment tous les NPC, puis il va supprimer aussi tous les items qui se trouvent sur le sol que les PC ont laissé trainer.
Donc voilà en gros mon systeme.
Grace à celui là, car je n'ai pas terminer de tout tester comme je vous ai dis, dont les respawns :). Je vais essayer de refaire le systeme de réenclencher les piéges par le même principe:).
Enfin voilà, en gros mon système, je vous le montrerai plus en détail quand je serai sur qu'il ne comporte pas de bug.
Sinon pour répondre à ta question, perso je n'utilise plus du tout le onheartbeat du module. Mais pour avoir les mêmes effets , je vais mettre le code dans une fonction récursive, que je vais la faire rappeler tous les X secondes dans mon Onmoduleload. Et je te promets que cela marche :). L'avantage, c'est que cela prend quand même moins de ressources :).
Voilà,
RAT
[EDIT]
PS:Mille excuse, si je me suis fais mal comprendre lol :D.
Et non, pour les zones, cela ne ram presque pas. Bien sur, si tu fais comme moi + de 180 NPC ds la zone, cela ram un peu plus lol. mais ça marche :)
eMRaistlin
Par Blam le 10/1/2003 à 1:40:50 (#2985914)
j'ai que des blaireaux
if ((0<=nPourcent)&&(nPourcent<=30))
{
return "monstre_rat001";
}
if ((31<=nPourcent)&&(nPourcent<=70))
{
return "monstre_rat001";
ect...
Par eMRaistlin le 10/1/2003 à 2:10:08 (#2986043)
Par Blam le 10/1/2003 à 2:15:05 (#2986068)
mais meme resultat que le
monstre_rat001
monstre_nw_rat001
ou
nw_rat001
NB: mais que fait LYS !!!!!!!!!!!!!!!!!!!
(vais me faire eng....guirlander de vouloir changer de systeme!)
au fait tes blaireaux/monstres apparaissent en nombres variable alors que sur notre systeme c'est individu par individu ! ca vient de quoi ?
Par eMRaistlin le 10/1/2003 à 2:17:38 (#2986078)
bein voila... met les resref... comme je le disais, le tag, c'est un vieux reste, mais c'et plus obligatoire...
tiens, vu que j'ai 2 minutes, je vais supprimer cette ligne inutile de mon commentaire... ^^
Par Blam le 10/1/2003 à 2:22:51 (#2986092)
nw_rat001 ca m'envoie des blaireaux aussi !!!
je capte completement, la !
Par Jaha Effect le 10/1/2003 à 2:28:56 (#2986120)
Jaha Effect :D
Par Blam le 10/1/2003 à 2:34:22 (#2986144)
c'est ca qui est terrible
et je ne comprends pas d'ou vient le coup !
Par Jaha Effect le 10/1/2003 à 2:36:11 (#2986149)
Jaha Effect :D
Par Blam le 10/1/2003 à 2:38:09 (#2986159)
et si je tente mon rat modifié il est en nw_rat002
j'ai remplacé mes rats par des vaches (c'est joli aussi)
exactement le meme probleme.
Par Jaha Effect le 10/1/2003 à 2:40:03 (#2986169)
Jaha Effect :D
eMRaistlin
Par Blam le 10/1/2003 à 12:39:51 (#2988041)
j'ai pas fait d'erreur ?
si dans ma liste pour le test je met le meme resref
genre [nw_rat001] qui est le refres du rat de base, ou,
[nw_rat002] le rat ameliré, ca devrait marcher ?
car ce n'est pas le cas!
Par Jaha Effect le 10/1/2003 à 13:00:08 (#2988177)
if ((0<=nPourcent)&&(nPourcent=nPourcent)&&(nPourcent<=30))
un pourcentage susceptible d'étre négatif ça me choque
Jaha Effect :D
Par eMRaistlin le 10/1/2003 à 13:05:38 (#2988226)
si 0 >= nPourcent, alors nPourcent <= 0...
donc, c'est negatif...
d'ou l'inverse : 0 est inferieur a nPourcent... (en gros, ca donne nPourcent compris entre 0 et 30
On va dire qu'il se fait tard :p
@Blam : vi, le string attendu est le resref du monstre. Essaye avec un monstre custom, plutot qu'avec un monstre predefini de Bioware, juste pour tester :)
Par Jaha Effect le 10/1/2003 à 13:12:07 (#2988272)
si (0 inferieur ou egal a nPourcent) et (nPourcent inferieur ou egal a 30)
Dans le prmier cas tu est bien d'accord que ça done un chiffre negatif ou egal a 0, c'est ou que je me plante ?
Jaha Effect :D
J'AI TESTE !!!!
Par Blam le 10/1/2003 à 13:12:31 (#2988278)
j'en ai marre des ces trucs que je comprends pas !
vais bouffer ce script comme j'ai bouffé les blaireaux la vache et les rats ! et s'il reste que de l'herbe et des cailloux...........................je les manges en salade !!!!!!!
eMRaistlin
Par Blam le 10/1/2003 à 13:49:51 (#2988566)
des que j'enleve le script listmonster (ton ro_listmonster)
j'ai tres exactement la meme chose le jeu se comporte de la meme manière avec creation de blaireaux et tout et tout....
pourtant il y a bien dans le createmonster un
#include "listmonster" (ex ro_listmonster)
si j'ai bien compris la manoeuvre
le create monster se sert de l'include (la liste des monstre pour creer ces monstres) mais peut fonctionner sans (ce qui me met des blaireaux partout)
si il y a la listmonster il devrait s'en servir, hors ce n'est pas le cas .
Donc j'ai tout recommencé (puisque c'est pour tester) en laissant les noms originaux de tous les fichiers scripts
tous a base de "ro_script" cela me donne la meme chose.
Ca marche sur ragnarok, et pas ici ou est l'erreur, que manque t il ?
NB: devant un probleme je suis un acharné !!
Par Jaha Effect le 10/1/2003 à 13:54:39 (#2988610)
Me trompe je?
Jaha Effect :D
Heu ! Joker !
Par Blam le 10/1/2003 à 13:57:56 (#2988637)
le probleme est autre, puisque il ne prends pas en consideration la liste en question !!!!
Par eMRaistlin le 10/1/2003 à 14:04:19 (#2988681)
Tu doit a chaque modification de tes include recompiler le script qui comprend ces inclues (ici : le onenter..)
en effet, si tu ne le fait pas, seul le fichier nss est modifie, et le ncs reste compilé dans l'ancienne version...
@Jaha : tu est sur qu'un chiffre negatif est superieur a 0 ??
Pasque si on s'arrange pour que 0 soit inferieur a nPourcent, ca veut du coup dire que nPourcent est superieur a 0.. non ?;)
Par Jaha Effect le 10/1/2003 à 14:09:07 (#2988710)
Jaha Effect :D
C'est ca !
Par Blam le 10/1/2003 à 14:15:00 (#2988745)
le probleme c'est que le script et moi.................Donc je ne pouvais trouver que par hazard
Je viens de recompiler en cascade
listmonster-createmonster-creation (dans le onEnter) et
ca marche du premier coup...(enfin, premier depuis la recompilation, hein ? :))
du coup je viens de comprendre une erreur récurante sur une partie de mon monde, et comme ma scripteuse attitrée est en vaccances, je me vois mal corriger ca tout seul.
Dans tous les cas MERCI a tous, Bravo a eMRaistlin pour ce boulot, qui viens de me faire faire un grand pas en avant dans la comprehension du script en général.
Par eMRaistlin le 10/1/2003 à 14:21:13 (#2988797)
(si tu pouvais savoir comment j'ai galéré avant de trouver ca... :))
Par RAT le 12/1/2003 à 2:47:05 (#3000839)
Rat
Par Blam le 12/1/2003 à 12:56:33 (#3002459)
C'a m'intéresse, en fait tous les systèmes aboutis m'intéresse, et ça intéresse sûrement toute notre petite communauté.
Il me tarde déjà de voir comment ca peut fonctionner :)
blam
Par RAT le 12/1/2003 à 15:21:27 (#3003358)
Par contre, sur mon système, mais je pense que bioware ne l'autorise pas mais je peux me tromper, c'est de spawner des portes. Je sais pas mais en tout cas, je n'ai pas réussi à respawner mes portes lol
mais Dès que c'est fini, je le mettrai oui :)
JOL Archives 1.0.1
@ JOL / JeuxOnLine