//::///////////////////////////////////////////////
//:: Name: pgs_chest_used
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    OnUsed event for storage chests.
*/
//:://////////////////////////////////////////////
//:: Created By: Samius Maximus
//:: Created On:
//:://////////////////////////////////////////////
#include "inc_gsystem_terr"

void main()
{
    object oPlayer = GetLastUsedBy();

    if (GetLocalInt (OBJECT_SELF, "Currently_In_Use"))  /*Check if available.*/
    {
        SendMessageToPC (oPlayer, "This storage chest is currently in use.");
        return;
    }

    int iTerritory = GetPGSStorageTerritory (OBJECT_SELF);
    int iTerritoryGuild = GetTerritoryGuildNumber (iTerritory);
    object oCreature = GetTerritoryStorageCreature (iTerritory);
    vector vChest = GetPosition (OBJECT_SELF);
    int iCopyItems = FALSE;

    //--------------------------------------------
    //Create storage object - has actual storage.
    //--------------------------------------------
    object oUniqueStorage = CreateObject (OBJECT_TYPE_PLACEABLE, "storage_chest_u",
        Location (GetArea (OBJECT_SELF), Vector (vChest.x, vChest.y, vChest.z -
        10.0f), GetFacing (oPlayer)));

    //--------------------------------------------
    //Check for previous initialization of storage.
    //--------------------------------------------
    if (!GetIsObjectValid (oCreature))
        oCreature = CreateObject (OBJECT_TYPE_CREATURE, "storagecreature",
            GetLocation (OBJECT_SELF));

    else if (GetIsDM (oPlayer) || iTerritory == 0 || (GetLocalInt (oPlayer, "Player_Guild_Rank") == 4 && GetLocalInt (oPlayer, "Player_Guild_Number") == iTerritoryGuild))
        iCopyItems = TRUE;

    if (iCopyItems)
        PrintString ("DM has access to storage chests.");

    //--------------------------------------------
    //Make storage creature invis. to players.
    //--------------------------------------------
    ApplyEffectToObject (DURATION_TYPE_PERMANENT, EffectVisualEffect
        (VFX_DUR_CUTSCENE_INVISIBILITY), oCreature);

    //--------------------------------------------
    //Loop through items to calculate item count.
    //--------------------------------------------
    object oItem = GetFirstItemInInventory (oCreature);
    int iItemCount = 0;

    SetLocalInt (oPlayer, "Item_Transfer_In_Progress", TRUE);

    //--------------------------------------------
    //Copy storage items into storage chest.
    //--------------------------------------------
    while (GetIsObjectValid (oItem))
    {
        if (iCopyItems)
            CopyItem (oItem, oUniqueStorage);

        iItemCount++;
        oItem = GetNextItemInInventory (oCreature);
    }

    DeleteLocalInt (oPlayer, "Item_Transfer_In_Progress");
    SetLocalInt (OBJECT_SELF, "Item_Count", iItemCount);

    //--------------------------------------------
    //Store storage-related variables.
    //--------------------------------------------
    SetLocalInt (OBJECT_SELF, "Currently_In_Use", TRUE);
    SetLocalObject (oUniqueStorage, "Temp_Storage_Creature", oCreature);
    SetLocalObject (oUniqueStorage, "Temp_Storage_Chest", OBJECT_SELF);

    //--------------------------------------------
    //Give player access to storage inventory.
    //--------------------------------------------
    DelayCommand (1.0f, AssignCommand (oPlayer, ActionInteractObject
        (oUniqueStorage)));
}