Files
HeroesStone_PRC8/_module/nss/hc_inc_persist.nss
Jaysyn904 1eefc84201 Initial Commit
Initial Commit.
2025-09-14 15:40:46 -04:00

141 lines
4.7 KiB
Plaintext

// hcr3.1
// 9/3/2003 fix for empty bags.
// fix for dbag count.
// hcr3 persistence 8/12/2003
// using module tag now for bag data if you change the tag of your module
// you will have to change the names of the files and variables.
// also im not removing the tables every time this speeds up backups.
// changed to 5 bags per player to speed up backup for campaign vars.
// this script is for hcr specific persistence code.
#include "i_tagtests"
void HCStoreDB(string sID)
{
object oMod = GetModule();
int nInst;
int iCount;
int nGold = 0;
object oItem;
object oDB;
string sBlank;
location lBag = GetLocation(GetObjectByTag("HC_CORPSELOC"));
object oTemp = CreateObject(OBJECT_TYPE_PLACEABLE, "bagyard", lBag, FALSE, sID);
string sNID = GetTag(oTemp);
DestroyObject(oTemp);
nInst = 0;
string sCount;
string sMTag = GetTag(GetModule());
// hcr3 8/12/2003 default is 5 bags per player.
// lag seems too great with more than that.
while (nInst <= 4)
{
string sInst = IntToString(nInst);
// hcr3.1 9/3/2003
DestroyCampaignDatabase("HCRDBAG" + GetName(oMod) + sNID + sInst);
oDB = GetObjectByTag("DropBag" + sNID, nInst);
// 7/28/2003
nGold = 0;
iCount = 0;
location lLoc = GetLocation(oDB);
SetCampaignLocation("HCRDBAG" + sMTag + sNID + sInst, "LOCATION", lLoc);
oItem = GetFirstItemInInventory(oDB);
while (GetIsObjectValid(oItem))
{
// hcr3.1 fix to remove dupes from containers.
if (GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX)
{
object oInv = GetFirstItemInInventory(oItem);
while (GetIsObjectValid(oInv))
{
SetLocalInt(oInv, "BackedUP", TRUE);
oInv = GetNextItemInInventory(oItem);
}
}
oItem = GetNextItemInInventory(oDB);
}
oItem = GetFirstItemInInventory(oDB);
while (GetIsObjectValid(oItem))
{
if (!GetIsNoDrop(oItem) && GetTag(oItem) != "bagofgold" && !GetLocalInt(oItem, "BackedUP"))
{
iCount++;
sCount = IntToString(iCount);
StoreCampaignObject( "HCRDBAG" + sMTag + sNID + sInst , "Item"+ sCount, oItem);
}
else if (GetTag(oItem) == "bagofgold")
nGold = GetLocalInt(oItem,"AmtGold") + nGold;
oItem = GetNextItemInInventory(oDB);
}
// hcr3.1 fix to remove dupes from containers.
int nCount;
for (nCount = 0; nCount++; nCount <= iCount)
{
DeleteLocalInt(oItem, "BackedUP");
}
SetCampaignInt("HCRDBAG"+ sMTag + sNID + sInst, "DBGOLD" , nGold);
SetCampaignInt("HCRDBAG"+ sMTag + sNID + sInst, "ITMCOUNT" , iCount);
nInst++;
}
}
void HCLoadDB(string sID, object oPlayer)
{
location lBlank;
object oMod = GetModule();
object oYard = GetObjectByTag("HC_CORPSELOC");
location lBag = GetLocation(oYard);
object oTemp = CreateObject(OBJECT_TYPE_PLACEABLE, "bagyard", lBag, FALSE, sID);
string sNID = GetTag(oTemp);
DestroyObject(oTemp);
string sBlank;
if (sBlank == sID)
return;
int nInst = 0;
string sMTag = GetTag(GetModule());
while (nInst <= 4)
{
string sInst = IntToString(nInst);
float fInst = IntToFloat(nInst)+0.25;
int iCount = 1;
// use last location if not valid use bagyard.
location lLoc = GetCampaignLocation("HCRDBAG" + sMTag + sNID + sInst, "LOCATION");
if (!GetIsObjectValid(GetAreaFromLocation(lLoc)))
{
lLoc = GetLocation(GetObjectByTag("BagYard"));
object oArea = GetArea(GetObjectByTag("BagYard"));
lLoc = Location(oArea, GetPositionFromLocation(lLoc)+ Vector( fInst, fInst, 0.0), 0.0);
}
object oDropBag = CreateObject(OBJECT_TYPE_PLACEABLE, "DyingCorpse", lLoc, FALSE, "DropBag" + sID);
SetLocalObject(oMod,"DropBag"+sID, oDropBag);
SetLocalObject(oDropBag,"Owner",oPlayer);
SetLocalString(oDropBag,"Name",GetName(oPlayer));
SetLocalString(oDropBag, "Pkey", sID);
SetLocalString(oDropBag, "NID", sNID);
int nItems = GetCampaignInt("HCRDBAG"+ sMTag + sNID + sInst, "ITMCOUNT");
string sCount;
while (iCount <= nItems)
{
sCount = IntToString(iCount);
RetrieveCampaignObject( "HCRDBAG" + sMTag + sNID + sInst , "Item" + sCount, lBag, oDropBag);
iCount++;
}
int nGold = GetCampaignInt( "HCRDBAG"+ sMTag + sNID + sInst, "DBGOLD");
if (nGold > 0)
{
object oBag=CreateItemOnObject("bagofgold",oDropBag);
SetLocalInt(oBag,"AmtGold",nGold);
SetLocalInt(oDropBag, "AmtGold", nGold);
}
SetLocalObject(oPlayer, "DROPBAG", oDropBag);
// hcr3.1 9/3/2003 fix to destroy empty bags.
if (GetFirstItemInInventory(oDropBag) == OBJECT_INVALID)
DestroyObject(oDropBag);
nInst++;
}
}