// 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
}