109 lines
4.3 KiB
Plaintext
109 lines
4.3 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name: pgs_chest_dsturb
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
OnDisturb event for guild storage chests.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Samius Maximus
|
|
//:: Created On:
|
|
//:://////////////////////////////////////////////
|
|
#include "inc_gsystem"
|
|
|
|
void main()
|
|
{
|
|
object oPlayer = GetLastDisturbed();
|
|
|
|
//--------------------------------------------
|
|
//Check if the script should proceed.
|
|
//--------------------------------------------
|
|
if (((!GetIsPC (oPlayer)) && (!GetIsDM (oPlayer))) || (GetLocalInt (OBJECT_SELF, "Item_Transfer_In_Progress")))
|
|
return;
|
|
|
|
object oChest = GetLocalObject (OBJECT_SELF, "Temp_Storage_Chest");
|
|
object oItem = GetInventoryDisturbItem();
|
|
int iItemCount = GetLocalInt (oChest, "Item_Count");
|
|
|
|
//--------------------------------------------
|
|
//Determine if item was added or removed.
|
|
//--------------------------------------------
|
|
if (GetInventoryDisturbType() == INVENTORY_DISTURB_TYPE_ADDED)
|
|
{
|
|
if (iItemCount == GetMaxHitPoints (oChest)) /*Check for more room.*/
|
|
{
|
|
SendMessageToPC (oPlayer, "This storage chest is currently at " +
|
|
"maximum capacity.");
|
|
CopyItem (oItem, oPlayer); /*Bypass OnDisturbed event again.*/
|
|
DestroyObject (oItem);
|
|
}
|
|
else if (GetHasInventory (oItem))
|
|
{
|
|
SendMessageToPC (oPlayer, "Containers may not be stored in here.");
|
|
CopyItem (oItem, oPlayer); /*Bypass OnDisturbed event again.*/
|
|
DestroyObject (oItem);
|
|
}
|
|
else if (GetTag (oItem) == "NW_IT_GOLD001")
|
|
{
|
|
int iGuild = GetLocalInt (oPlayer, "Player_Guild_Number");
|
|
|
|
if (iGuild != 0)
|
|
{
|
|
int iAmount = GetItemStackSize (oItem);
|
|
|
|
//---------------------------------------------
|
|
//Take player gold and add it to guild account.
|
|
//---------------------------------------------
|
|
SetModuleGuildAccountValue (iGuild, GetModuleGuildAccountValue
|
|
(iGuild) + iAmount);
|
|
SendPGSGuildNotice (iGuild, GetName (oPlayer) + " has donated " +
|
|
IntToString (iAmount) + " gold piece(s) to the guild account.");
|
|
DestroyObject (oItem);
|
|
}
|
|
}
|
|
else /*Valid item to store in chest.*/
|
|
{
|
|
//---------------------------------------------
|
|
//Store item on storage creature for persistency.
|
|
//---------------------------------------------
|
|
CopyItem (oItem, GetLocalObject (OBJECT_SELF, "Temp_Storage_Creature"));
|
|
|
|
//---------------------------------------------
|
|
//Increment storage count and inform player.
|
|
//---------------------------------------------
|
|
SetLocalInt (oChest, "Item_Count", iItemCount + 1);
|
|
SendMessageToPC (oPlayer, "Item has succesfully been added to " +
|
|
"the storage chest.");
|
|
}
|
|
}
|
|
else /*Item has been removed.*/
|
|
{
|
|
object oStorage = GetLocalObject (OBJECT_SELF, "Temp_Storage_Creature");
|
|
object oItemLoop = GetFirstItemInInventory (oStorage);
|
|
|
|
//--------------------------------------------
|
|
//Find item on storage creature and remove it.
|
|
//--------------------------------------------
|
|
while (GetIsObjectValid (oItemLoop))
|
|
{
|
|
//--------------------------------------------
|
|
//Check item resref and stack count for match.
|
|
//--------------------------------------------
|
|
if ((GetResRef (oItem) == GetResRef (oItemLoop)) && (GetItemStackSize (oItem) == GetItemStackSize (oItemLoop)))
|
|
{
|
|
DestroyObject (oItemLoop);
|
|
break;
|
|
}
|
|
|
|
oItemLoop = GetNextItemInInventory (oStorage);
|
|
}
|
|
|
|
//--------------------------------------------
|
|
//Decrement item count, and inform player.
|
|
//--------------------------------------------
|
|
SetLocalInt (oChest, "Item_Count", iItemCount - 1);
|
|
SendMessageToPC (oPlayer, "Item has succesfully been removed from the " +
|
|
"storage chest.");
|
|
}
|
|
}
|