Après quelques vacances, je reviens pour vous filer un petit script simple histoire de nettoyer vos zones des loot ou des items que les joueurs abandonnent malgrés vos poubelles ^^
Dans le onEnter de la zone :
void main() { object oArea=GetArea(OBJECT_SELF); int iPC=GetLocalInt(oArea,"iPC"); object oPC=GetEnteringObject();
if (GetIsPC(oPC)) { iPC=iPC+1; SetLocalInt(oArea,"iPC",iPC);}
}
A chaque PJ qui rentre dans la zone, elle ajoute 1 à son compteur.
Et dans le onExit :
void main() { object oArea=GetArea(OBJECT_SELF); int iPC=GetLocalInt(oArea,"iPC"); object oPC=GetExitingObject();
if (GetIsPC(oPC)) { iPC=iPC-1; SetLocalInt(oArea,"iPC",iPC);}
iPC=GetLocalInt(oArea,"iPC");
if (iPC<=0){ ExecuteScript("zon_cleaner",oArea);} }
Il retire 1 du compteur à chaque joueur qui sort de la zone et si le score du compteur est à zéro, il lance le script suivant à nommer "zon_cleaner":
void main() { object oArea = GetArea(OBJECT_SELF); object oObject = GetFirstObjectInArea(oArea); while(GetIsObjectValid(oObject)) { int nChk = GetObjectType(oObject);
switch(nChk) { case OBJECT_TYPE_ITEM: { DestroyObject(oObject); break; } case OBJECT_TYPE_PLACEABLE: { if (GetTag(oObject)=="BodyBag") { DestroyObject(oObject); } break; } } //end switch oObject=GetNextObjectInArea(); } //end while
}
Ce script vérifie la nature des objets de la zone et détruit tous les items ainsi que les sacs de butin laissés par les cadavres. Il ne touche pas aux items dans les inventaires des NPC bien sûr.
Donc, tant qu'il y a quelqu'un dans une zone, les objets restent au sol. A vous de placer les 2 premiers scripts dans les endroits les plus pollués de votre module.
|