// on unacquire - force save #include "offset_h" void fnUnAcquirePowerReservoir(object oPC,object oItem) { object oOb; location lLoc; if (GetItemPossessor(oItem)==OBJECT_INVALID) { // dropped SendMessageToPC(oPC,"You drop the power reservoir at this location."); lLoc=GetLocation(oItem); DestroyObject(oItem); oOb=CreateObject(OBJECT_TYPE_PLACEABLE,"plc_phylact001",lLoc,FALSE); } // dropped } // fnUnAcquirePowerReservoir() void fnUnAquireCorpse(object oPC,object oItem) { // PURPOSE: Unacquire Corpse location lLoc=GetLocation(oPC); int nN; object oCorpse; string sS; object oArea; lLoc=GetOffsetLocation(lLoc,1.0); oCorpse=CreateObject(OBJECT_TYPE_PLACEABLE,"corpseres",lLoc); while(oCorpse==OBJECT_INVALID) { // keep trying lLoc=GetOffsetLocation(GetLocation(oPC),1.0); oCorpse=CreateObject(OBJECT_TYPE_PLACEABLE,"corpseres",lLoc); } // keep trying nN=GetLocalInt(oItem,"nLevel"); SetLocalInt(oCorpse,"nLevel",nN); nN=GetLocalInt(oItem,"nOLevel"); SetLocalInt(oCorpse,"nOLevel",nN); sS=GetLocalString(oItem,"sKN"); SetLocalString(oCorpse,"sKN",sS); sS=GetLocalString(oItem,"sRes"); SetLocalString(oCorpse,"sRes",sS); oArea=GetLocalObject(oItem,"oAK"); SetLocalObject(oCorpse,"oAK",oArea); DestroyObject(oItem); } // fnUnAcquireCorpse() ////////////////////////////// MAIN void main() { object oPC=GetModuleItemLostBy(); object oItem=GetModuleItemLost(); string sTag=GetTag(oItem); string sRes=GetResRef(oItem); int bScriptTrigger=FALSE; string sATAG=GetTag(GetArea(oPC)); if (sATAG=="GameEntryRoom") { // destroy DestroyObject(oItem); return; } // destroy else if (sATAG!="ThePlaneofInBetween") { // not plane of in between if (GetIsPC(oPC)==TRUE&&GetIsDM(oPC)==FALSE&&GetLocalString(oPC,"sTeamID")!=""&&GetLocalInt(GetModule(),"nInProgress")==TRUE&&GetIsDead(oPC)==FALSE) { if (GetPlotFlag(oItem)==TRUE) bScriptTrigger=TRUE; if (GetStringLeft(sRes,4)=="rts_") bScriptTrigger=TRUE; else if (sTag=="soultoken"||sRes=="soultoken") bScriptTrigger=TRUE; else if (GetGoldPieceValue(oItem)>199) bScriptTrigger=TRUE; else if (GetStringLeft(sTag,4)=="mana"||GetStringLeft(sTag,4)=="MANA") bScriptTrigger=TRUE; if (sTag=="rts_powerres") { bScriptTrigger=TRUE; fnUnAcquirePowerReservoir(oPC,oItem); } else if (GetStringLeft(sTag,9)=="corpseres") { bScriptTrigger=TRUE; fnUnAquireCorpse(oPC,oItem); } if (bScriptTrigger==TRUE) DelayCommand(1.0,ExecuteScript("rts_save_player",oPC)); } } // not plane of in between if (sTag=="NW_IT_GOLD001"&&IsInConversation(oPC)&&GetLocalInt(oPC,"bGoldExploitPreventionOn")) { // Stop gold drop during unit creation exploit int nN=GetItemStackSize(oItem); GiveGoldToCreature(oPC,nN); DestroyObject(oItem); SendMessageToPC(oPC,"NOTE: You are not permitted to drop gold during conversation to prevent exploits."); } // Stop gold drop during unit creation exploit else if (GetStringLeft(sTag,7)=="MANA_CR") { // make mana pool object oOb=GetItemPossessor(oItem); if (!GetObjectType(oOb)==OBJECT_TYPE_PLACEABLE||GetStringLength(GetLocalString(oOb,"sTeamID"))<1) { // create mana pool if (sTag=="MANA_CRYSTAL_5") { // strong mana pool oOb=CreateObject(OBJECT_TYPE_PLACEABLE,"strongmanapool",GetLocation(oPC)); DestroyObject(oItem); } // strong mana pool else if (sTag=="MANA_CRYSTAL_2") { // mana pool oOb=CreateObject(OBJECT_TYPE_PLACEABLE,"manapool",GetLocation(oPC)); DestroyObject(oItem); } // mana pool else { // minor mana pool oOb=CreateObject(OBJECT_TYPE_PLACEABLE,"minormanapool",GetLocation(oPC)); DestroyObject(oItem); } // minor mana pool } // create mana pool } // make mana pool }