Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Dépeuplement de zone
Dépeuplement de zone
Par Jaha Effect le 4/1/2003 Ã 9:14:33 (#2941134)
#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)
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)
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)
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)
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)
#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