Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [SCRIPT] Respawn Ă la maniere MMORPG
[SCRIPT] Respawn Ă la maniere MMORPG
Par shadoh le 16/11/2002 Ă 20:56:54 (#2576947)
Je viens de finir un script permettant de faire respawn le monstre de votre choix Ă un endroit aleatoire ou fixe suivant vos souhaits toutes les X secondes. Pour ce faire, il vous faudra placer autant de Way points que d'endroits ou peut respawn le monstre. Puis il vous faudra placer un objet invisible sur votre area. Ce script se place evidemment sur le on Death du monstre.
L'avantage de ce script c'est qu'il est tres simple Ă adapter. L'inconveniant c'est qu'il faudra en faire un pour tous les monstres qui doivent respawn Ă interval fixe.
Voici le script :
// Spawn de loups personnalises aux WP definis
//////////////////////////////////////////////////////////////////////
void VoidCreateObject()
{
int nRandom = Random(3); // Correspond au nombre de possibilité d'emplacement de respawn du monstre. EX : si 3 WP alors Random = 3 etc...
int nObjectType = OBJECT_TYPE_CREATURE;
int bUseAppearAnimation = TRUE;
string sTemplate = "louphivernal"; // Blueprint du monstre
location lLocation1 = GetLocation(GetWaypointByTag("wp_loup1")); // location du 1er WP ou peut respawn le monstre
location lLocation2 = GetLocation(GetWaypointByTag("wp_loup2")); // location du 2eme WP ou peut respawn le monstre
location lLocation3 = GetLocation(GetWaypointByTag("wp_loup3")); // location du 3eme WP ou peut respawn le monstre
// Atribution d'une location aleatoire entre 3 possibles pour le respawn du monstre
if (nRandom == 1)
{
CreateObject(nObjectType,sTemplate,lLocation1,bUseAppearAnimation);
}
else if (nRandom == 2)
{
CreateObject(nObjectType,sTemplate,lLocation2,bUseAppearAnimation);
}
else
{
CreateObject(nObjectType,sTemplate,lLocation3,bUseAppearAnimation);
}
}
// Respawn du monstre toutes les 60 sec dans cet exemple
void main()
{
object oActionSubject = GetObjectByTag("InvisibleObject"); // Tag de l objet invisible
AssignCommand(oActionSubject, DelayCommand(60.0,VoidCreateObject()));
}
Voila, j'espere que ce script vous servira :)
Par miriandel le 16/11/2002 Ă 21:36:31 (#2577099)
A ce jour, j'attends toujours une seule raison valable pour générer des spawns sans passer par le générateur intégré, qui ne comporte qu'un seul bug: son UserDefined Event ne peut être appelé par lui-même, mais uniquement par la zone qui le porte.
Encore mill excuses :ange:
Par shadoh le 16/11/2002 Ă 22:11:23 (#2577199)
Ne crains rien, tu ne casses pas du tout mon coup :).
Si j'ai fait ce script et si beaucoup de mondes permanents utilisent des scripts de spawn plutot que des déclencheur c est pour de très bonnes raisons.
La première c est de devoir gérer un Spawn sans que le joueur est besoin d'entrer ou de sortir d'un déclencheur. Le deuxième avantage de ce genre de scripts c est qu'il permet de générer plusieurs endroits de spawn pour les mobs contrairement aux déclencheurs ou tu ne peux attribuer qu'un point de respawn fonctionnel pour tout un groupe de monstre. L'autre avantage c est d'avoir un contrôle total sur la difficulté de l'area.
Donc tu vois bien qu'en résumé, les scripts de respawn façon MMORPG sont bien plus précis à utiliser comparé aux déclencheurs qui sont certes très bien pour des modules non persistant mais qui montrent vite leurs limites pour le reste.
Par miriandel le 16/11/2002 Ă 23:04:57 (#2577383)
Mais sur un PIV 2.5 GHz quadriprocesseur avec 2 Go de RAM, c'est vrai qu'on ne le sent pas ;)
Les déclencheurs Aurora proposent des points de spawn multiples, je m'en sers tout le temps, ils fonctionnent à la perfection.
Quant au contrôle de la difficulté, c'est la force des déclencheurs Aurora: aucun scripting, interface au poil, 5 réglages de difficulté, le pied quoi.
Donc, euh... non, j'vois pas trop l'intérêt :confus:
Note que chacun sa cuisine, j'ai juste cru bon de répondre pour éviter à ceux qui ne maîtrisent pas Aurora de penser qu'une alternative aux déclencheurs soit nécessaire.
Je le répète, chacun sa cuisine :merci:
Par shadoh le 16/11/2002 Ă 23:44:47 (#2577517)
Je vais donc détailler tous les avantages des scripts de spawn par rapport aux déclencheurs (tant pis si c'est redondant).
Les déclencheurs ne génèrent un spawn que si un joueur passe sur celui ci. Prenons donc l'exemple d une zone avec une entrée A, une sortie B et une pièce centrale ou doit être généré un spawn de monstres. Si j'utilise les déclencheurs, il faudra que le joueur passe sur le déclencheur pour activer le spawn de tout un groupe de monstre à un point donné. Si le déclencheur génère 4 monstres, ils seront tous placés les un à cote des autres sur un point de spawn défini. Alors qu'avec un script, un monstre tué respawnera à des endroits différents suivant le nombre de waypoints que vous aurez défini. C'est donc une methode bien plus réaliste que de faire spawn un groupe toujours au même endroit.
Maintenant, toujours dans le cadre de cet exemple, dans une pièce avec 2 sorties possibles avec une pièce centrale ou sont générés les monstres, il faudra créer 2 déclencheurs pour être certain que le joueur trouvera toujours des monstres dans la pièce centrale. En effet, si il n'y a qu un déclencheur devant la sortie A et qu'un joueur arrive par la sortie B, il ne passera sur le déclencheur qu'après avoir passé la pièce centrale et n'aura donc pas eu à affronter de monstres. Si jamais je créé un déclencheur devant la sortie A et un devant la sortie B pour être sur que le joueur fasse spawn les monstres dans la pièce centrale avant de l'avoir franchie. De plus, si jamais 2 joueurs sont présents dans la zone et si l'un arrive par la sortie A déclenchant le déclencheur A et l'autre arrive par la sortie B déclenchant le déclencheur B. Cela aura pour résultat de faire spawn 2 fois plus de monstres dans la pièce centrale que prévu.
Je peux t assurer que tout ceci c'est du vécu :). Et je le répète, si dans les modules persistant on utilise des scripts de gestion de spawn plutôt que des déclencheurs. Ce n'est pas pour faire joli. C'est que ceux ci sont bien plus précis et réaliste dans la gestion des monstres présents dans une zone.
Enfin bon, tu fais comme tu veux hein :). Moi j'ai fait mon choix à cause des limitations des déclencheurs dans le cadre de mon module.
PS : si jamais je ne suis pas clair (chose qui est fort probable :D ) je posterai un schéma qui sera bien plus explicite que mon discourt :).
Par shadoh le 17/11/2002 Ă 0:08:53 (#2577623)
http://perso.wanadoo.fr/creacteur/schema1.jpg
Dans cet exemple, si un joueur arrive par la sortie B, il ne déclenchera le spawn du déclencheur A qu'apres avoir franchi la pièce centrale. Ca n'aura donc servi à rien car il n'aura pas à affronter les monstres qui auront spawn derriere lui.
http://perso.wanadoo.fr/creacteur/schema2.jpg
Maintenant imaginons, pour cet exemple, que nous faisions un déclencheur devant chaques sorties pour etre sur que quelque soit l'endroit d ou arrive le joueur, celui ci ferra spawn les monstres de la piéce centrale avant de l'avoir franchi.
Mais dans le cas de figure ou, si un joueur A arrive par la sortie A et qu'un joueur B arrive par la sortie B et que tous les 2 passent donc sur le déclencheur A pour le joueur A et B pour le joueur B. Cela aura pour résultat de faire spawn 2 fois plus de monstres dans la piéce centrale.
Ces 2 cas de figure sont un des problemes que posent les déclencheurs par rapport aux scripts de spawn :).
Par miriandel le 17/11/2002 Ă 10:46:12 (#2578695)
Comme pour les multiples points de spawn, les déclencheurs d'Aurora offrent des possibilités que tu gagnerais à approfondir.
Que tu choisisses un système parce qu'il espace mieux les monstres, bah, pourquoi pas, mais faut pas essayer de faire croire qu'Aurora ne fait pas ce qu'il fait :)
Par shadoh le 17/11/2002 Ă 11:55:40 (#2579005)
Par miriandel le 17/11/2002 Ă 13:06:43 (#2579440)
Provient du message de shadoh
si les scripts de spawn sont utilisés pour les modules persistants c'est parce que les gens qui en font ont aussi vu les limites d'aurora :)
Avec toute la pub que je fais pour le monde persistant sur lequel je travaille, difficile d'ignorer que c'est mon domaine d'activité, quand je quitte mes hexaprocesseurs unix du bureau s'entend. :ange:
Par shadoh le 17/11/2002 Ă 14:42:02 (#2579972)
http://perso.wanadoo.fr/creacteur/schema3.jpg
Dans cet exemple, pour etre certain que quelque soit l'endroit d ou vient le joueur il y ait un spawn de monstres dans la piece centrale, nous avons fait un déclencheur couvrant un maximum de surface.
Problématique : une fois le groupe de monstres tué, il faut sortir du déclencheur puis repasser dessus afin de redéclencher le spawn. Hors, à cause de la superficie du déclencheur, il ne reste plus beaucoup de place non couverte ce qui va poser probleme pour le redéclenchement du spawn. Avec toute la pub que je fais pour le monde persistant sur lequel je travaille, difficile d'ignorer que c'est mon domaine d'activité, quand je quitte mes hexaprocesseurs unix du bureau s'entend.
Et bien vois tu, je ne savais pas que tu faisais toi meme un module persistant :). Néanmoins, mon domaine d'activité étant le aussi la création d'un monde persistant quand moi meme je quitte mon bureau de communication visuelle (agence de PUB), je pourrais toujours t'enseigner comment faire pour diffuser un message éfficace :).
De plus, si je puis me permettre, tu n'as toujours pas fait la démonstration permettant d'éviter les situations que j'ai schématisées :). Dans ce cas il est facile de dire qu'avec aurora on peut régler tous les problemes de spawn sans passer par des scripts si on ne le prouve pas :ange:
Par Aziphael le 17/11/2002 Ă 20:14:26 (#2581800)
Provient du message de shadoh
Problématique : une fois le groupe de monstres tué, il faut sortir du déclencheur puis repasser dessus afin de redéclencher le spawn. Hors, à cause de la superficie du déclencheur, il ne reste plus beaucoup de place non couverte ce qui va poser probleme pour le redéclenchement du spawn.
Faux.
Onglet "base"
Menu deroulant "option de spawn" : "continu"
Onglet "avancé"
Cocher les cases "actif", "Reactiver rencontre", "Respawn infini", activation apr un joueur".
Mettre "Temps de respawn (en sec)" Ă x.
Les monstres réapparîtront toutes les x secondes, il suffit qu'il y ait un PJ dans le trigger.
:ange:
Par shadoh le 17/11/2002 Ă 20:42:50 (#2582039)
Si jamais un joueur passe sur un déclencheur réglé sur un respawn toutes les 60 secondes, fait spawn le groupe de monstre et tue le groupe de monstre en restant sur la zone couverte par le déclencheur, celui ci ne se redéclenchera pas :). Pour qu'il se redéclenche le joueur devra quitter la zone couverte par le déclencheur puis re-marcher dessus. La ca fera respawn le groupe de monstre si les 60 secondes sont passées.
Donc tu vois, il faut toujours vérifier avant de dire un truc :p (chose que j'ai fait).
Si tu doutes de ce que je dis, je te propose de creer une zone de 2x2. De placer un déclencheur couvrant la moitié de cette zone. De faire les réglages du déclencheur comme tu as marqué plus haut. De faire passer ton joueur sur ce déclencheur, de tuer les monstres qui auront spawn sans quitter l'espace couvert par le déclencheur et d'attendre le respawn sans avoir quitté l'espace couvert par le déclencheur. Tu veras par toi meme que rien ne vas se passer. Par contre, si apres avoir tué le groupe de monstre tu sors de l espace couvert par le déclencheur et que tu repasses dessus X secondes plus tard ou X est egale au temp de respawn. La ca re-déclenchera le sapwn du groupe de monstre.
Donc tu vois que, encore une fois, dans ce cas, les déclencheurs sont bien moins adaptés à la géstion du respawn que les scripts de respawn qui eux ne demandent absolument pas d'intervention du joueur :).
PS : ca serait sympa de ne pas me prendre pour un amateur hein. Je connais deja les réglages possibles des déclencheurs et leurs effets. J'ai déja réalisé quelques modules et je travail acctuelement sur le module persistant avec d'autres personnes qui sont toutes aussi compétantes (la seule chose qui nous manque c'est un developpeur PHP chose qui sera bientot résolu grace à un collegue de bureau). Toutes les situations que j'ai décrite sont des situations critiques que les déclencheurs n'arrivent pas à résoudre :).
Par Azrael07 le 17/11/2002 Ă 21:54:03 (#2582500)
Créer un spawn sans qu'aucun joueur ne le provoque peut se traduire par un seul mot: lag
Mais sur un PIV 2.5 GHz quadriprocesseur avec 2 Go de RAM, c'est vrai qu'on ne le sent pas
Ben faut-il te dire que les encounters aussi bouffe les ressources ? Ils s'executent pas tout seul comme ca sans stimuler le proc, et dans l'ensemble, un objet supplementaire est plus lourd a gerer qu'un script (je fais pas de généralité c pas vrai dans tout les cas), et pis le script ci dessous n'est VRAIMENT PAS LOURD, j'affirme avec une quasi certitude qu'il est beaucoup moins lourd de passer par un tel script que par un encounter pour le respawn.
Bon après je vais pas rentrer dans votre débat des interets pratique, mais de manière général le compilateur des scripts et très bien fait, se qui rend le "bidouillage" de ce genre très pratique
Avec toute la pub que je fais pour le monde persistant sur lequel je travaille, difficile d'ignorer que c'est mon domaine d'activité,
moi aussi je bosse sur un persistant et moi je peut te dire que je préfère travailler comme ca
mais comme tu dis, a chacuns sa cuisine, c'est mon point de vue
Par contre il est vrai que ce script ne trouve pas vraimnet ca place ici, pour la simple raison que c'est des débutant qui l'utiliseront, et ce n'est pas la peine de les embrouiller avec des trucs qui n'ont un interet que dans des situations bien précisent.
voila voila
Par shadoh le 17/11/2002 Ă 22:06:31 (#2582571)
C'est pour cela que je me suis dis qu'il serait peut etre utile de faire un script de spawn facilement gérable par tout le monde afin que le tout à chacun puisse bénéficier des avantages de ce genre de scripts meme si celui ci impose de l'adapter pour chaques types de créatures et pour chaques area :) (on ne peut pas avoir le beurre, l'argent du beurre et la crémiere hein :D).
woups
Par Aziphael le 18/11/2002 Ă 1:08:48 (#2583667)
J'avais déjà effectué un petit test mis j'ai dû sortir du trigger. après avoir re-vérifié je dois bien avouer que tu as raison :eek: .
J'en suis le premier désolé puisque j'étais en train de construire mon module avec des rencontres de ce type :sanglote:
Ben c'est pas grave je vais utiliser un script comme le tien :mdr:
Par shadoh le 18/11/2002 Ă 8:36:48 (#2584436)
Par Nylou le 18/11/2002 Ă 11:00:09 (#2585009)
Notre gestion de spawn nous est spécifique et elle ne conviendra pas à la plupart des mod.
Cependant ,
notre manière de gérer le spawn permet :
- d'alléger le .mod (en taille, par ex avant 16Mo, après 9Mo avec 3 fois plus de monstres),
- de réduire la consommation mémoire du serveur,
- les monstres spawnent pas forcément sur les joueurs comme dans les encounters normales déclenchées par des triggers, les non combattants ne se feront plus surprendre donc,
- de gérer les drops des monstres de manière dynamique,
- j'oublie surement des choses mais eMRaistlin vous en parlera mieux que moi.
Pour ceux que ça intéresse, sachez que ça peut vous contraindre à revoir une grosse parti de votre mod et que ça ne vous correspondra pas forcément.
Par eMRaistlin le 18/11/2002 Ă 11:36:18 (#2585193)
En fait, pour moi, l'interet majeur d'un script de Spawn par Trigger par rapport a un Encounter, c'est d'avoir une main mise sur tout ce qui va se passer via cet Encounter.
En effet, mon plus gros probleme d'un encounter, c'est la gestion automatique des niveaux. Prenons un exemple :
Le demi-ogre Chaman (CR 15), et son esclave Gobelin (CR 1/4). Avec les encounter, il y'a plusieurs solution :
- Soit on regle l'encounter en 2 creature, et on met le demi-ogre en unique, ainsi que le gob.
- Avantage : c'est en partie ce qu'on veut.
- Inconvenient : Pas plus d'un Couple par encounter...
- Soit on regle pas les unique, et dans ce cas, suivant le Niveau du joueur qui entre, on aura plein de Gob, ou bien plein de Demi-ogre... Pas tres Gai non plus.
- Soit on regle l'encounter pour avoir plusieurs Couples Unique, mais dans ce cas, on abandonne la gestion du niveau...
Nous voici donc dans un cas ou le toolset ne pourra pas créer un couple dynamique en fonction du Niveau.
- Est-ce Grave ?
Non
- Y'a t'il un palliatif Sans scritp ?
Oui, mais tordu.
Pourquoi ne pas utiliser les script quand ils peuvent servir.
Ceci etant, je suis d'accord avec mirandiel pour dire que ce n'est pas la peine de compliquer un truc simple sauf si c'est necessaire.
Mais je suis d'accord avec Shadow pour dire que le script (en plus de l'avantage d'avoir ce sentiment si doux de reussite lors de test fonctionnels reussis) est interessant, plus souple, et surement plus précis que le pre-maché bioware. Mais soyons honnete, le boulot de Bioware est TRES nettement suffisant pour eviter d'avoir a faire du script si l'on en a pas le courage. Je deconselle aux noob de se lancer dans la recuperation massive de script plutot que d'utiliser le toolset d'abord.
@Shado : il est possible de realiser une forme geometrique complexe avec les encounters pour regler ton probleme de double entrées (avec des minuscule liaisons longeant les murs entre test 2 rectangles aux entrées. C'est un peu debile, mais ca marchera comme les triggers).
Par shadoh le 18/11/2002 Ă 16:04:45 (#2587121)
PS : Meme avec la solution ingénue que tu donnes eMRaistlin, il reste encore le probleme que pour refaire spawn les mobs, le joueur devra repasser sur la zone couverte par le déclencheur. Et personnellement, je trouve ca assez peu... réaliste et amusant que de faire des allez retour sur une zone précise afin de faire de l XP ;). D'ailleur, c'est sûrement une des raisons majeur du choix d'un script de spawn plutot que l'utilisation des déclencheurs d'aurora.
Par eMRaistlin le 18/11/2002 Ă 16:17:07 (#2587211)
PS : Meme avec la solution ingénue que tu donnes eMRaistlin, il reste encore le probleme que pour refaire spawn les mobs, le joueur devra repasser sur la zone couverte par le déclencheur. Et personnellement, je trouve ca assez peu... réaliste et amusant que de faire des allez retour sur une zone précise afin de faire de l XP . D'ailleur, c'est sûrement une des raisons majeur du choix d'un script de spawn plutot que l'utilisation des déclencheurs d'aurora.
Pas plus qu'avec ta solution ^^ en effet, c'est le OnEnter des trigger qui va declencher le spawn, donc il te faudra revenir dans la zone ^^.:mdr: :mdr: :mdr:
Par shadoh le 18/11/2002 Ă 17:15:32 (#2587620)
Par Nylou le 18/11/2002 Ă 17:24:11 (#2587686)
Provient du message de shadoh
Hé hé non pas du tout :). Mon script de spawn, je le place dans le on death des creatures. Donc, des que lune d entre elle meurt, elle déclenche le script qui la fera respawn 60 secondes plus tard à un des WP que j'ai défini :). Par contre, comme je l'ai dit plus haut, ce script est déstiné aux amateurs qui ne veulent pas avoir à gérer des scripts de respawn trop compliqués. Car, pour chaque zone et pour chaque type de monstre, il faudra modifier le script pour qu'il concorde avec le tag des WP et le resref des mobs :).
Nos scriptes de respawn sont également lancés dans le onDeath mais on ne gère pas de WP, on gère ça en fonction de la taille de la carte si je me souviens bien.
Pour ce qui est du scripte de spawn c'est différent.
Par shadoh le 18/11/2002 Ă 19:02:06 (#2588555)
JOL Archives 1.0.1
@ JOL / JeuxOnLine