La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 13:42:15
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Posté le : 23/01/2003 18:17:32 Sujet du message : Destruction des monstres après la sortie du joueur de l'area
Bon heu ben je m'explique ^^
J'aimerais que, dès qu'il n'y a plus de joueurs dans une zone, que tous les monstres disparaissent, pour éviter qu'ils passent de zone en zone (car c'est lourd de voir des monstres partout en ville)... Je pense qu'il faut mettre le script dans le OnExit de la zone, mais quel script ? Merci pour vos réponses |
Revenir en haut | |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Bah merci pour vos nombreuses réponses
Mais heureusement j'ai trouvé en cherchant un peu (comme quoi ) Code : void main()
{ //DECLARATION DES VARIABLES object oPCexiting=GetExitingObject(); object oAreaLeaved = OBJECT_SELF; object oObjetaDetruire = GetFirstObjectInArea(oAreaLeaved); object oFirstPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); int nNBdePC = GetLocalInt(oAreaLeaved,"nNBdePC"); //Mise a jour du Compteur if (GetIsPC(oPCexiting)) { nNBdePC = nNBdePC-1; SetLocalInt(oAreaLeaved,"nNBdePC",nNBdePC); } //TEST POUR VERIFIER SI IL RESTE DES PC DANS L'Area if (nNBdePC == 0) { //BOUCLE DE DESTRUCTION DES CREATURES/ITEM while (GetIsObjectValid(oObjetaDetruire)) { if ( (GetObjectType(oObjetaDetruire)== OBJECT_TYPE_CREATURE)|| (GetObjectType(oObjetaDetruire)== OBJECT_TYPE_ITEM) ) { DestroyObject (oObjetaDetruire); } oObjetaDetruire=GetNextObjectInArea(); } } //LOG~DEBUG } Pas testé encore, mais normalement ça marche A mettre sur le OnExit |
Revenir en haut | |
Jedaï Chevalier Messages: 89 Localisation: Le Havre, ville pourrie |
N'oublie pas de mettre le script correspondant dans le OnEnter.
|
Revenir en haut | |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Il est obligatoire pour faire fonctionner celui du OnExit ?
|
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
je dirai en 'aveugle' (vu que j'ai pas vu le script du OnEnter), oui car il doit compter les joueurs entrants dans la zone, maintenant, histoire de titiller Jedaï, est ce que le script prévoit la déco des joueurs ?
|
Revenir en haut | |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Ca donne ça sur le OnEnter:
Code : //Script d'area_enter qui cree des monstres
#include "ro_createmonster" void main() { //Declaration des variables object oPCentering = GetEnteringObject(); object oAreaEntered = OBJECT_SELF; int nNBdePC = GetLocalInt(oAreaEntered,"nNBdePC"); //Incrementation du compteur de PC dans l'area if (GetIsPC(oPCentering)) { nNBdePC = nNBdePC+1; SetLocalInt(oAreaEntered, "nNBdePC",nNBdePC); //Si c'est le premier PC a entrer, generation des monstres en fonction de l'area if (nNBdePC==1) { CreateMonsters(oAreaEntered); } else { WriteTimestampedLogEntry(GetName(oPCentering)+GetTag(oAreaEntered)+"enter correct"); } //LOG~DEBUG } } |
Revenir en haut | |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Et hum, autre petite question, si par exemple il y a des npc dans l'area...
Et qu'à la sortie du pc de l'area, le npc est détruit... Quand un pc reviendra, le npc sera recréé au même endroit ? |
Revenir en haut | |
Jaha Effect Acolyte Messages: 39 |
Il est bien joli ton scripte mais y'a quelques trucs qui y manque pour que celà fonctionne correctement. (Je le connais bien ce scripte, c'est celui de eMRaistlin mais vous l'avez salement épuré, surtout mal épuré dirais je)
1 - Si tu veux pas que tes NPC ne soit détruits, il faudra les mettre en plot, et bien sur indiquer que les objets en plot ne soit pas détruits ou les recréer dans le OnEnter de ta zone 2 - Si tu possède un pet, ben il passera a la casserole avec ces copains les gros méchants monstres Jaha Effect |
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
ben comme ca se produit sur le dernier pj qui sort y a pas de problème de familiers, mais par contre effectivement, tous les PNJs non plots sont détruits !(ca peut poser des problèmes ..)
Beau script, j'ai pas vu la patte de eMRaistlin mais je te crois sur parole. |
Revenir en haut | |
Jaha Effect Acolyte Messages: 39 |
Si la patte de eMRaistlin est flagrante, regarde le #include "ro_createmonster" dans le script du OnEnter, c'est un include de Ragnarok, le module de eM. Et il n'a aucun interet placé ici, il fait partir d'une structure complète de spawn lié à des noms d'area formaté pour que ça marche
Randons à César, ce qui est à César Le script du OnExit doit ressembler a ça pour gerer les plot et les pets Code : void main()
{ //DECLARATION DES VARIABLES object oPCexiting=GetExitingObject(); object oAreaLeaved = OBJECT_SELF; object oObjetaDetruire = GetFirstObjectInArea(oAreaLeaved); object oFirstPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); int nNBdePC = GetLocalInt(oAreaLeaved,"nNBdePC"); //Mise a jour du Compteur if (GetIsPC(oPCexiting)) { nNBdePC = nNBdePC-1; SetLocalInt(oAreaLeaved,"nNBdePC",nNBdePC); } //TEST POUR VERIFIER SI IL RESTE DES PC DANS L'Area if (nNBdePC == 0) { //BOUCLE DE DESTRUCTION DES CREATURES/ITEM while (GetIsObjectValid(oObjetaDetruire)) { if ( (GetObjectType(oObjetaDetruire)== OBJECT_TYPE_CREATURE)|| // nettoyage de la zone des creatures de la zone (GetObjectType(oObjetaDetruire)== OBJECT_TYPE_ITEM) // nettoyage de la zone des objets qui la jonche ) { AssignCommand(oObjetaDetruire, ClearAllActions()); // pour initialisation des actions PNJ if (!GetPlotFlag(oObjetaDetruire)) // verifie si il y a des creatures en plot { if (GetName(GetMaster(oObjetaDetruire))=="") // pour eviter la mort du pet DestroyObject (oObjetaDetruire); } } oObjetaDetruire=GetNextObjectInArea(); } } //LOG~DEBUG } Jaha Effect |
Revenir en haut | |
Jacky Ecuyer Messages: 42 Localisation: Là, sur ma chaise devant l'écran de mon ordi. |
Bah je l'ai trouvé tel quel ici: http://forums.jeuxonline.info/showthread.php?s=&threadid=128864
J'ai rien changé Mais alors je sais pas si c'est très intéressant, vu les changements et les problèmes que ça peut causer sur les respawn de monstres et autres rencontres... Et question bête: qu'appelez vous par "plots", s'il vous plait ? |
Revenir en haut | |
Jaha Effect Acolyte Messages: 39 |
Il en existe plusieures versions sur le forum Jeuxonline de ce systeme de spawn, pour ce qui est du OnEnter pour l'utilisation dans ton module, tu vas devoir l'adapter par contre le OnExit que je t'ai mis iras très bien.
Tu peux très bien t'inspirer du système d'eMR sans prob mais tu pourras pas l'utiliser tel quel. Un plot c'est une créature ou un objet qui as la case intrigue de ces propriétés cochée pour éviter que le premier joueur venu te l'explose. J'espère que ça répond a ta question Jaha Effect |
Revenir en haut | |
Wololo Légende vivante Messages: 385 |
moi je ne fais qu'aider, je ne sais d'où est tiré le cript, et je ne fréquente que très peu JOL ...
|
Revenir en haut | |
Jaha Effect Acolyte Messages: 39 |
C'est pas un reproche, ce qui me dérangeais c'est que le scripte ne soit pas complet (j'avais jamais vu cette version sur JOL d'ailleur)
Jaha Effect |
Revenir en haut | |
Zyzko Novice Messages: 10 |
Un autre plutot simple et efficace :
Code : void main() { object oAreaEntered = OBJECT_SELF; object oEntering = GetEnteringObject(); object oChecked = GetFirstObjectInArea(oAreaEntered); if(GetIsPC(oEntering)) { while(GetIsObjectValid(oChecked)) { if(GetIsPC(oChecked) && oChecked != oEntering) { oChecked = OBJECT_INVALID; break; } else { oChecked = GetNextObjectInArea(oAreaEntered); } } oChecked = GetFirstObjectInArea(oAreaEntered); while(GetIsObjectValid(oChecked)) { if(GetIsEncounterCreature(oChecked)) { DestroyObject(oChecked); oChecked = GetNextObjectInArea(oAreaEntered); } else { oChecked = GetNextObjectInArea(oAreaEntered); } } } } _________________ ------------------------------------------ Arcantia Builder @ 1formatik server ------------------------------------------ |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum