Xiulito Administrador/a
Edad : 44 Localización : Vivo aqui Puntos de Actividad : 6817
Cantidad de envíos : 101 Fecha de inscripción : 22/03/2008
Nº. de Miembro : 1 Respeto por el Foro :
| Tema: "Limpieza de Area inteligente" Miér 28 Ene 2009, 9:25 pm | |
| Dos scripts que limpiaran nuestras áreas de objetos, efectos, bolsas de cadáveres y bichos, ¿que hace a este sistema inteligente?, pues facil, tiene un retardo de X tiempo para hacer la limpieza, esto es por si cuando el PJ sale del área y se acuerda de que dejó el objeto equivocado pues si se da prisa puede volver antes de que se destruya, otra cosa que tiene es que solo destruye las criaturas hostiles por lo que puedes ponerlo en un área de una ciudad por si se cuelan orcos y no tener miedo a que este script aniquile todos tus guardias, una cosa que tenemos que tener en cuenta es que para la destrucción de bolsas de cadáveres el sistema que he utilizado es el de destruir primero el inventario de todo objeto en el área y ya de por si desaparece la bolsa automáticamente, esto significa que si colocas cofres en un área donde pongas este script pues se limpiara también por lo tanto tendrás que colocar la etiqueta del cofre en cuestión en el apartado señalado para que no se vea afectado. El primer script no hace falta que lo coloques en ninguna parte, es suficiente con tenerlo creado. Nombre: rrc_limpiar - Código:
-
int SiPC() { object oPC = GetFirstObjectInArea(); while(GetIsObjectValid(oPC)) { if(GetIsPC(oPC)) { return TRUE; break; } oPC = GetNextObjectInArea(); } return FALSE; } void main() { float fD = 0.1; if (SiPC()==TRUE)return; //============================================================================\\ //----------------------- # Limpia los Bichos # ------------------------------\\ //============================================================================\\ object oBicho = GetFirstObjectInArea(); while (GetIsObjectValid(oBicho) == TRUE) { if(GetObjectType(oBicho)==OBJECT_TYPE_CREATURE) { int iHostil = GetStandardFactionReputation(STANDARD_FACTION_HOSTILE, oBicho); if (iHostil) { DelayCommand(fD, DestroyObject(oBicho)); fD=fD+0.1; } } oBicho = GetNextObjectInArea(); } //============================================================================\\ //---------------------- # Limpia los Encuentros # ---------------------------\\ //============================================================================\\ object oEncuentro = GetFirstObjectInArea(); while (GetIsObjectValid(oEncuentro) == TRUE) { if(GetObjectType(oEncuentro)==OBJECT_TYPE_ENCOUNTER) { SetEncounterActive(TRUE, oEncuentro); } oEncuentro = GetNextObjectInArea(); } //============================================================================\\ //------------------------ # Limpia los Objetos # ----------------------------\\ //============================================================================\\ object oItem = GetFirstObjectInArea(); while (GetIsObjectValid(oItem) == TRUE) { if(GetObjectType(oItem)==OBJECT_TYPE_ITEM) { DelayCommand(fD, DestroyObject(oItem)); fD=fD+0.1; } oItem = GetNextObjectInArea(); } //============================================================================\\ //------------------------ # Limpia los Efectos # ----------------------------\\ //============================================================================\\ object oEfecto = GetFirstObjectInArea(); while (GetIsObjectValid(oEfecto) == TRUE) { if(GetObjectType(oEfecto)==OBJECT_TYPE_AREA_OF_EFFECT) { DelayCommand(fD, DestroyObject(oEfecto)); fD=fD+0.1; } oEfecto = GetNextObjectInArea(); } //============================================================================\\ //--------------------- # Limpia Bolsa de Cadaveres # ------------------------\\ //============================================================================\\ object oBolsita = GetFirstObjectInArea(); while (GetIsObjectValid(oBolsita) == TRUE) { if(GetIsPC(oBolsita) || GetIsDM(oBolsita))break; // Utilizar para objetos que no queremos que sean eliminados, como cofres y demas. // if(GetTag(oBolsita)=="No_se_elimina") // break; object oDesecho = GetFirstItemInInventory(oBolsita); while(GetIsObjectValid(oDesecho) == TRUE) { DelayCommand(fD, DestroyObject(oDesecho)); fD=fD+0.1; oDesecho = GetNextItemInInventory(oBolsita); } oBolsita = GetNextObjectInArea(); } } Este otro tendrás que colocarlo en el OnExit de todas las áreas que quieres que se limpien. Nombre: rrc_exit_limpia - Código:
-
int SiPC() { object oPC = GetFirstObjectInArea(); while(GetIsObjectValid(oPC)) { if(GetIsPC(oPC)) { return TRUE; break; } oPC = GetNextObjectInArea(); } return FALSE; } void main() { object oPC = GetExitingObject(); if (SiPC()==TRUE)return; DelayCommand(30.0, ExecuteScript("rrc_limpiar", OBJECT_SELF)); }
| |
|