//:://///////////////////////////////////////////// //:: phs_wndestr_act //::////////////////////////////////////////////// /* OnActivateItem script for the Wand of Destruction add the following to the module's OnActivateItem event to activate this item ExecuteScript("phs_wndestr_act",OBJECT_SELF); Oct 12: - small tweak that should make it clean up non destroyable corpses properly */ //::////////////////////////////////////////////// //:: Created By: Piotr "Phantom" Banasik //:: Created On: 26 Sept 2002 //:: Last Modified: Oct 12, 2002 //::////////////////////////////////////////////// void ActivateAOE(location lTarg, object oActivator, object oAct); void myDestroyObject(object oObj); void EmptyObject(object oObj); void main() { object oAct = GetItemActivated(); if (GetTag(oAct) == "WandofDestruction") { object oActivator = GetItemActivator(); if (!GetIsDM(oActivator)) { SendMessageToPC(oActivator,"Mortals are not allowed to use this item!"); SendMessageToPC(oActivator,"The wand crumbles in your hands."); SendMessageToAllDMs(GetName(oActivator)+" just tried to use the Cloud of Destruction Wand!"); DestroyObject(oAct); return; } object oActTarget = GetItemActivatedTarget(); if (oActTarget == OBJECT_INVALID) { location lActLoc = GetItemActivatedTargetLocation(); ActivateAOE(lActLoc,oActivator,oAct); } else { if (GetObjectType(oActTarget) == OBJECT_TYPE_CREATURE) { if (GetIsPC(oActTarget)) { SendMessageToPC(oActivator,"You can't destroy players!"); return; } if (GetIsDM(oActTarget)) { SendMessageToPC(oActivator,"You can't destroy DM's!"); return; } } myDestroyObject(oActTarget); } } } //:://///////////////////////////////////////////// //:: void ActivateAOE( //:: location lTarg, //:: object oActivator, //:: object oAct) //::////////////////////////////////////////////// /* Activates an area of effect type thing that anhiliates anything in its radius */ //::////////////////////////////////////////////// //:: Created By: Piotr "Phantom" Banasik //:: Created On: 26 Sept 2002 //:: Last Modified: 26 Sept 2002 //::////////////////////////////////////////////// void ActivateAOE(location lTarg, object oActivator, object oAct) { int iEffectType = VFX_FNF_LOS_HOLY_10; float fRadius = RADIUS_SIZE_MEDIUM; int iObjectFilter = OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE; effect eAOE = EffectVisualEffect(iEffectType); ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eAOE,lTarg); //Find first target in the size object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarg, FALSE, iObjectFilter); //Cycle through the objects in the radius while (GetIsObjectValid(oTarget)) { myDestroyObject(oTarget); //Get next target in the shape. oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarg, FALSE, iObjectFilter); } } //:://///////////////////////////////////////////// //:: void myDestroyObject(object oObj) //::////////////////////////////////////////////// /* Destroys oObj .. displays a visual effect for the item destroyed too (depending on object type displays a diffrent effect) Oct 12: - added default effect to be the harm effect (affects non standard things destroyed like doors) - added a tweak that should hopefuly destroy corpses that have been set to not fade out */ //::////////////////////////////////////////////// //:: Created By: Piotr "Phantom" Banasik //:: Created On: 26 Sept 2002 //:: Last Modified: Oct 12, 2002 //::////////////////////////////////////////////// void myDestroyObject(object oObj) { int iEffectType = VFX_IMP_HARM; int iOType = GetObjectType(oObj); // make sure players and dms are left out of the carnage if (iOType == OBJECT_TYPE_CREATURE) { if (GetIsPC(oObj)) BootPC(oObj); // Added by SoulFlame to boot players with Destruction Wand. if (GetIsDM(oObj)) return; } switch (iOType) { case OBJECT_TYPE_CREATURE: iEffectType = VFX_IMP_DEATH_L; break; case OBJECT_TYPE_ITEM: iEffectType = VFX_IMP_FLAME_S; break; case OBJECT_TYPE_PLACEABLE: iEffectType = VFX_IMP_FLAME_M; break; } effect eDestr = EffectVisualEffect(iEffectType); location lObj = GetLocation(oObj); ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eDestr,lObj); EmptyObject(oObj); if (GetObjectType(oObj) == OBJECT_TYPE_CREATURE) { // set the creature to insta die AssignCommand(oObj,SetIsDestroyable(TRUE,FALSE,TRUE)); } DestroyObject(oObj); } //:://///////////////////////////////////////////// //:: void EmptyObject(object oObj) //::////////////////////////////////////////////// /* if oObj has an inventory destroys everything inside first */ //::////////////////////////////////////////////// //:: Created By: Piotr "Phantom" Banasik //:: Created On: 26 Sept 2002 //:: Last Modified: 26 Sept 2002 //::////////////////////////////////////////////// void EmptyObject(object oObj) { // if doesnt have inventory .. just return .. nothing to do if (!GetHasInventory(oObj)) return; object oItem; oItem = GetFirstItemInInventory(oObj); while (oItem != OBJECT_INVALID) { DestroyObject(oItem); oItem = GetNextItemInInventory(oObj); } }