/////////////////////////////////////////////////////////////////////// //: FILE NAME: gb_loot_corpse //: EVENT HANDLE: NA Called from OnDeath //: FUNCTION: To make a corpse lootable /////////////////////////////////////////////////////////////////////// //: CREATED BY: Glenn J. Berden (a.k.a. Jassper) //: CREATED ON: 01/21/03 //: MODIFIED BY: //: MODIFIED ON: /////////////////////////////////////////////////////////////////////// //: Place the following 2 lines in the OnDeath of the creature. //: SetIsDestroyable(FALSE,TRUE); //: ExecuteScript("gb_loot_corpse",OBJECT_SELF); /////////////////////////////////////////////////////////////////////// void main() { // Create Corps loot bag and hide it in the ground. // Because invis object makes a terrible sound lol :) location lSelf = GetLocation(OBJECT_SELF); vector vPos = GetPositionFromLocation(lSelf); vector vSinkIt = Vector(vPos.x,vPos.y,vPos.z - 0.11f); location lSpot = Location(GetAreaFromLocation(lSelf),vSinkIt,GetFacingFromLocation(lSelf)); CreateObject(OBJECT_TYPE_PLACEABLE,"loot_corps",lSpot); object oSelf = OBJECT_SELF; object oCorps = GetNearestObjectByTag("LootCorps"); object oItem = GetFirstItemInInventory(); object oLootAll = GetWaypointByTag("WP_LootAll"); SetLocalString(oCorps,"Body",GetTag(oSelf)); /////////////////////////////////////////////////////////////////// // Check for gold /////////////////////////////////////////////////////////////////// int nGold = GetGold(oSelf); if(nGold > 0) { AssignCommand(oCorps,TakeGoldFromCreature(nGold,oSelf)); } /////////////////////////////////////////////////////////////////// // Create Items in Loot corps, Destroy what is on Actual Corps. /////////////////////////////////////////////////////////////////// // Check equip items /////////////////////////////////////////////////////////////////// int i; for(i=0; i<14; i++) { object oItem = GetItemInSlot(i); if(GetIsObjectValid(oLootAll)) // Will recreate all items { if(GetIsObjectValid(oItem)) { CreateItemOnObject(GetResRef(oItem),oCorps,GetNumStackedItems(oItem)); if(i==0 || i==1) // Remember Items left on corps Head and Chest {SetLocalString(oCorps,GetTag(oItem),GetResRef(oItem));} else { SetPlotFlag(oItem,FALSE); DestroyObject(oItem); } } } else { // Will recreate only Droppable or plot Items if(GetIsObjectValid(oItem) && (GetDroppableFlag(oItem) || GetPlotFlag(oItem))) { CreateItemOnObject(GetResRef(oItem),oCorps,GetNumStackedItems(oItem)); if(i==0 || i==1)// Remember Items left on corps Head and Chest {SetLocalString(oCorps,GetTag(oItem),GetResRef(oItem));} else { SetPlotFlag(oItem,FALSE); DestroyObject(oItem); } } } } ///////////////////////////////////////////////////////////////// // Check what is in general inventory ///////////////////////////////////////////////////////////////// while(GetIsObjectValid(oItem)) { int nStack = GetNumStackedItems(oItem); if(!GetIsObjectValid(oLootAll)) { if(GetDroppableFlag(oItem) || GetPlotFlag(oItem)) {CreateItemOnObject(GetResRef(oItem),oCorps,nStack);} } else {CreateItemOnObject(GetResRef(oItem),oCorps,nStack);} SetPlotFlag(oItem,FALSE); DestroyObject(oItem); oItem = GetNextItemInInventory(); } DelayCommand(360.0f,SignalEvent(oCorps,EventUserDefined(110))); }