141 lines
4.6 KiB
Plaintext
141 lines
4.6 KiB
Plaintext
#include "apts_inc_ptok"
|
|
#include "ats_inc_common"
|
|
|
|
//int BANK_PRIME_HASH = 20963;
|
|
int BANK_PRIME_HASH = 196613;
|
|
int BANK_VAULT_SIZE = 15;
|
|
|
|
void InitHash(object oStorableItem)
|
|
{
|
|
int iHashNum = APTS_HashString(GetTag(oStorableItem), BANK_PRIME_HASH);
|
|
PrintString(GetTag(oStorableItem)+" , "+IntToString(iHashNum));
|
|
if(GetLocalString(GetModule(), "BANK_STORABLE_" + IntToString(iHashNum)) == "")
|
|
SetLocalString(GetModule(), "BANK_STORABLE_" + IntToString(iHashNum), GetTag(oStorableItem));
|
|
else
|
|
PrintString("Hash collision: " + GetTag(oStorableItem));
|
|
}
|
|
|
|
void InitializeBankDemo()
|
|
{
|
|
// PrintString("Initializing Bank");
|
|
// object oItemBase = GetObjectByTag("BANK_ITEM_BASE");
|
|
|
|
// object oStorableItem = GetFirstItemInInventory(oItemBase);
|
|
// while(GetIsObjectValid(oStorableItem))
|
|
// {
|
|
// DelayCommand(0.0, InitHash(oStorableItem));
|
|
// oStorableItem = GetNextItemInInventory(oItemBase);
|
|
// }
|
|
}
|
|
|
|
void AddPersistentItem(object oPlayer, object oVault, object oItem)
|
|
{
|
|
int i;
|
|
string sDataString;
|
|
int iQuantity;
|
|
int iNumToStore;
|
|
int iVaultCount = GetTokenInt(oPlayer, "vault_itemcount");
|
|
int iItemHash;
|
|
|
|
// Vault is full
|
|
if(iVaultCount >= BANK_VAULT_SIZE)
|
|
{
|
|
AssignCommand(oPlayer, ActionDoCommand(SetCommandable(FALSE, oPlayer)));
|
|
AssignCommand(oPlayer, ActionTakeItem(oItem, oVault));
|
|
AssignCommand(oPlayer, ActionDoCommand(SetCommandable(TRUE, oPlayer)));
|
|
FloatingTextStringOnCreature("You cannot place anymore items into your vault.", oPlayer);
|
|
return;
|
|
}
|
|
if(ATS_IsItemNoDrop(oItem))
|
|
return;
|
|
|
|
AssignCommand(GetNearestObjectByTag("Banker"), SpeakString("", TALKVOLUME_SILENT_TALK));
|
|
|
|
for(i = 1; i <= BANK_VAULT_SIZE; ++i)
|
|
{
|
|
// Slot is empty
|
|
if(GetTokenInt(oPlayer, "vault_item_" + IntToString(i)) == 0)
|
|
{
|
|
iNumToStore = 0;
|
|
PrintString(GetTag(oItem));
|
|
iItemHash = APTS_HashString(GetTag(oItem), BANK_PRIME_HASH);
|
|
if(GetLocalString(GetModule(), "BANK_STORABLE_" + IntToString(iItemHash)) == "")
|
|
{
|
|
AssignCommand(GetNearestObjectByTag("Banker"), SpeakString("This item seems to be unique. I cannot guarantee the safety of that item."));
|
|
break;
|
|
}
|
|
sDataString = IntToString(iItemHash);
|
|
iQuantity = GetNumStackedItems(oItem);
|
|
if(iQuantity < 10)
|
|
sDataString += "0";
|
|
sDataString += IntToString(iQuantity);
|
|
iNumToStore = StringToInt(sDataString);
|
|
break;
|
|
}
|
|
}
|
|
|
|
SetTokenInt(oPlayer, "vault_item_" + IntToString(i), iNumToStore);
|
|
SetTokenInt(oPlayer, "vault_itemcount", iVaultCount + 1);
|
|
}
|
|
|
|
void RemovePersistentItem(object oPlayer, object oItem)
|
|
{
|
|
int i;
|
|
string sDataString;
|
|
int iQuantity;
|
|
int iNumToStore;
|
|
int iVaultCount = GetTokenInt(oPlayer, "vault_itemcount");
|
|
int iItemHash = APTS_HashString(GetTag(oItem), BANK_PRIME_HASH);
|
|
|
|
sDataString = IntToString(iItemHash);
|
|
iQuantity = GetNumStackedItems(oItem);
|
|
if(iQuantity < 10)
|
|
sDataString += "0";
|
|
sDataString += IntToString(iQuantity);
|
|
iNumToStore = StringToInt(sDataString);
|
|
if(!GetIdentified(oItem))
|
|
iNumToStore = -iNumToStore;
|
|
|
|
for(i = 1; i <= BANK_VAULT_SIZE; ++i)
|
|
{
|
|
if(GetTokenInt(oPlayer, "vault_item_" + IntToString(i)) == iNumToStore)
|
|
{
|
|
DeleteTokenInt(oPlayer, "vault_item_" + IntToString(i));
|
|
break;
|
|
}
|
|
}
|
|
|
|
SetTokenInt(oPlayer, "vault_itemcount", iVaultCount - 1);
|
|
}
|
|
|
|
|
|
void MoveItemsToVault(object oMover, object oVault, int bDestroyMover = FALSE, int bTriggerVault = FALSE)
|
|
{
|
|
object oItem = GetFirstItemInInventory(oMover);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
AssignCommand(oMover, ActionGiveItem(oItem, oVault));
|
|
oItem = GetNextItemInInventory(oMover);
|
|
}
|
|
if(bTriggerVault)
|
|
{
|
|
object oPC = GetLocalObject(oMover, "pc_obj");
|
|
AssignCommand(oMover, ActionDoCommand(AssignCommand(oPC, DoPlaceableObjectAction(oVault, PLACEABLE_ACTION_USE))));
|
|
}
|
|
if(bDestroyMover)
|
|
AssignCommand(oMover, ActionDoCommand(DestroyObject(oMover)));
|
|
|
|
}
|
|
void GrabItemsFromVault(object oMover, object oVault, object oPC, int bJumpToPC = FALSE)
|
|
{
|
|
object oItem = GetFirstItemInInventory(oVault);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
AssignCommand(oMover, ActionTakeItem(oItem, oVault));
|
|
oItem = GetNextItemInInventory(oVault);
|
|
}
|
|
if(bJumpToPC)
|
|
AssignCommand(oMover, ActionJumpToObject(oPC));
|
|
|
|
}
|