Initial Upload
Initial Upload
This commit is contained in:
111
_module/nss/rd_db_store_lite.nss
Normal file
111
_module/nss/rd_db_store_lite.nss
Normal file
@@ -0,0 +1,111 @@
|
||||
//::///////////////////////////////////////////////////////////////
|
||||
//:: Database item storage "lite"
|
||||
//:: Written by Rich Dersheimer - June 2003
|
||||
//:: Allows database storage of a container item's worth of objects
|
||||
//::///////////////////////////////////////////////////////////////
|
||||
//:: Usage: PC must have a "container" item in his inventory, with
|
||||
//:: the tag "STORAGE", in order to store items in the database,
|
||||
//:: and to retrieve any stored items from the database.
|
||||
//:: Additionally, there must be a usable placeable, or some other
|
||||
//:: way to trigger this script. I've attached it to the OnUsed
|
||||
//:: event of a chest, but I imagine it could be triggered in a
|
||||
//:: conversation with a "Storage Unit Manager" or "Banker" NPC.
|
||||
//::
|
||||
//:: To store items in the database, put the items inside the
|
||||
//:: storage box, and trigger this script.
|
||||
//::
|
||||
//:: To retrieve items from the database, make sure the storage
|
||||
//:: box is empty, and trigger this script.
|
||||
//::
|
||||
//:: You can't store any items if you've already got some stored,
|
||||
//:: and you can't retrieve any if your storage box has something
|
||||
//:: in it. That way, the database only stores a limited number
|
||||
//:: of items (any combination up to 35 small items) and hopefully
|
||||
//:: the process doesn't use up too much bandwidth.
|
||||
//::
|
||||
//:: Thanks to BaadF00d on the NWN scripting forum for sparking
|
||||
//:: the discussion and thought that led to this script.
|
||||
//::
|
||||
//:: NWN scripters have my permission to use and abuse this script
|
||||
//:: as they see fit, but do try to give me credit for the code :)
|
||||
//:: - Rich Dersheimer
|
||||
//::///////////////////////////////////////////////////////////////
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
object oBox = GetItemPossessedBy(oPC, "bs_storage");
|
||||
object oItem;
|
||||
string sDatabaseName = "LODStorage"; // put your database name here
|
||||
int nBoxUsed = GetCampaignInt(sDatabaseName, "BoxUsed");
|
||||
int nCount = 1;
|
||||
|
||||
// make sure a PC used the chest
|
||||
if(!GetIsPC(oPC))
|
||||
return;
|
||||
|
||||
// make sure the PC has a storage box
|
||||
if(oBox == OBJECT_INVALID)
|
||||
{
|
||||
SendMessageToPC(oPC, "In order to store or retrieve items, you must have a storage box in your inventory!");
|
||||
return;
|
||||
}
|
||||
|
||||
if(nBoxUsed == FALSE) // nothing is stored, attempt to store items
|
||||
{
|
||||
// make sure there is something in the box
|
||||
if(GetFirstItemInInventory(oBox) == OBJECT_INVALID)
|
||||
{
|
||||
SendMessageToPC(oPC, "There was nothing in your box to store.");
|
||||
return;
|
||||
}
|
||||
|
||||
oItem = GetFirstItemInInventory(oBox);
|
||||
|
||||
while(oItem != OBJECT_INVALID)
|
||||
{
|
||||
// store the item in the database
|
||||
StoreCampaignObject(sDatabaseName, "Item" + IntToString(nCount), oItem, oPC);
|
||||
|
||||
// increase the stored item index count
|
||||
nCount++;
|
||||
|
||||
// nuke the item you just stored
|
||||
DestroyObject(oItem);
|
||||
|
||||
// get the next item
|
||||
oItem = GetNextItemInInventory(oBox);
|
||||
}
|
||||
|
||||
// flag the database as having stored some of your items
|
||||
SetCampaignInt(sDatabaseName, "BoxUsed", TRUE);
|
||||
}
|
||||
else // something is stored, so attempt to retrieve stored items
|
||||
{
|
||||
// make sure there is nothing in the box
|
||||
if(GetFirstItemInInventory(oBox) != OBJECT_INVALID)
|
||||
{
|
||||
SendMessageToPC(oPC, "Your box must be empty to retrieve your stored items!");
|
||||
return;
|
||||
}
|
||||
|
||||
// retrieve the first item stored
|
||||
oItem = RetrieveCampaignObject(sDatabaseName, "Item" + IntToString(nCount), GetLocation(oPC), oBox, oPC);
|
||||
|
||||
// loop through all items stored
|
||||
while(oItem != OBJECT_INVALID)
|
||||
{
|
||||
// remove the retrieved item from the database
|
||||
DeleteCampaignVariable(sDatabaseName, "Item" + IntToString(nCount), oPC);
|
||||
|
||||
// increase the stored item index count
|
||||
nCount++;
|
||||
|
||||
// get the next item
|
||||
oItem = RetrieveCampaignObject(sDatabaseName, "Item" + IntToString(nCount), GetLocation(oPC), oBox, oPC);
|
||||
}
|
||||
|
||||
// flag the database as having no items stored by you
|
||||
SetCampaignInt(sDatabaseName, "BoxUsed", FALSE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user