Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Dépeuplement de zone

Par Jaha Effect le 4/1/2003 à 9:14:33 (#2941134)

Voilà, j'utilise un petit script pour nettoyer mes zones des PNJ qui la peuple quand plus aucun PJ n'est dans la zone, seulement j'ai un petit problème car quand je quitte ces zone, mes henchmen ou animaux de compagnie sont détruit en même temps que les PNJ de la zone nettoyé. j'ai pas trouvé comment faire pour palier ce problème alors si vous avez une idée n'hésitez pas :)

#include "zinclude"
void main()
{
if (GetIsPC(GetExitingObject())) {
SetLocalInt(OBJECT_SELF, "A_QP_postegarde", GetLocalInt(OBJECT_SELF, "A_QP_postegarde")-1);
// la variable A_QP_postegarde s'incremente chaque fois qu'un PJ entre dans la zone
// donc, quand tous les PJs sont partis, elle vaut 0
if (GetLocalInt(OBJECT_SELF, "A_QP_postegarde") == 0) {
object ref = GetObjectByTag("PG_chef");
object PNJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, ref);
int i = 1;
while (GetIsObjectValid(PNJ)) {
AssignCommand(PNJ, ClearAllActions());
DestroyObject(PNJ);
PNJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, ref, i++);
}
}
}
}


Merci d'avance :)

Jaha Effect :D

Par eMRaistlin le 4/1/2003 à 10:45:09 (#2941311)

tres simple...


j'ai eu le meme pb...

tu fais un if (GetMaster()==OBJECT_INVALID) then destroy object, au lieu de faire juste le destroy...

et voila... ca marche :)

Par Fantome le 4/1/2003 à 11:04:58 (#2941374)

Hello,

L'intérêt d'un tel script c'est pour des questions de performance ?
Et où le placez vous ?

Merci.

a+

Par eMRaistlin le 4/1/2003 à 11:23:00 (#2941443)

effectivement, afin d'optmizer les zones, je ne spawn que les zone ou il a des joueurs...

Ce script se met sur le OnExit de toutes les area concernées...

A noter que sans le OnEnter qui va bien, cela ne sert pas a grand chose.

Si tu fais une recherche de mes post, j'avais par le passe poste la methode utilisee sur NwNRo... mais de toute facon, c'etait plutot a titre d'exemple qu'autre chose, vu que chaque module necessite des script refait pour cela...

@Jaha : Je t'invite aussi a verifier si l'objet PNJ n'est pas PlotFlag, ca te permettra d'avoir la possibilite d'interdire a une creature spot d'etre detruite... ^^ (ca evite de detruire les quelques Pnj qui pourraient habiter une zone spawnée, et ca permet de faire, sur un persistant, un nettoyage de toutes les zones sur le OnExit, meme les zones de villes, en mettant les villageois en Plot. (ou bien en les spottanbt avec une variable... c'est pareil....)

Par Jaha Effect le 4/1/2003 à 17:46:28 (#2944029)

Merci beaucoup eM :)

Jaha Effect :D

Par Jaha Effect le 4/1/2003 à 22:14:41 (#2945927)

Provient du message de eMRaistlin
tres simple...


j'ai eu le meme pb...

tu fais un if (GetMaster()==OBJECT_INVALID) then destroy object, au lieu de faire juste le destroy...

et voila... ca marche :)


J'arrive pas à l'implémenter (honte sur moi) :(
Je vais examiner ton poste qui traite du peuplement sur ton module, je verais mieux comment tu as fait :)

Jaha Effect :D

Par Jaha Effect le 4/1/2003 à 22:46:27 (#2946058)

Vala ça marche, j'ai réutilisé ton scripte qui marche bien, j'ai juste rajouté un ClearAllActions(); car visiblement les PNJ de la zone ne faisait plus ce qui leur était commandé de faire, en l'occurence ne s'assayaient plus lors du spawn dans la zone :)

#include "zinclude"
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,"A_QP_postegarde");

//Mise a jour du Compteur
if (GetIsPC(oPCexiting))
{
nNBdePC = nNBdePC-1;
SetLocalInt(oAreaLeaved,"A_QP_postegarde",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)
)
{
AssignCommand(oObjetaDetruire, ClearAllActions()); // pour initialisation des actions PNJ
if (!GetPlotFlag(oObjetaDetruire))
{
if (GetName(GetMaster(oObjetaDetruire))==")
DestroyObject (oObjetaDetruire);
}
}
oObjetaDetruire=GetNextObjectInArea();
}
}

//LOG~DEBUG
}


je met le lien vers le post traitant des peuplements
ici

Jaha Effect :D

JOL Archives 1.0.1
@ JOL / JeuxOnLine