106 lines
3.4 KiB
Plaintext
106 lines
3.4 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
// item and body cleanup
|
|
// By Deva Bryson Winblood
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
int fnIsManaObject(object oItem)
|
|
{ // return true if mana crystal
|
|
int nRet=FALSE;
|
|
string sRes=GetResRef(oItem);
|
|
if (sRes=="mana_crystal_5"||sRes=="mana_crystal_2"||sRes=="mana_crystal_1") nRet=TRUE;
|
|
return nRet;
|
|
} // fnIsManaObject()
|
|
|
|
int fnIsSoulObject(object oItem)
|
|
{ // return true if is soul token
|
|
int nRet=FALSE;
|
|
string sRes=GetResRef(oItem);
|
|
if (sRes=="soultoken") nRet=TRUE;
|
|
return nRet;
|
|
} // fnIsSoulObject()
|
|
|
|
void main()
|
|
{
|
|
float fDist;
|
|
object oMe=OBJECT_SELF;
|
|
object oOb;
|
|
object oI;
|
|
int nC=1;
|
|
int nValue;
|
|
int nSG;
|
|
string sTag;
|
|
int bGotItAll=TRUE;
|
|
object oStore=OBJECT_INVALID;
|
|
string sStoreTag=GetLocalString(oMe,"sStoreTag");
|
|
if (GetStringLength(sStoreTag)>0) oStore=GetObjectByTag(sStoreTag);
|
|
SetLocalInt(oMe,"nGNBDisabled",TRUE);
|
|
// loose items
|
|
if (oStore==OBJECT_INVALID) AssignCommand(oMe,SpeakString("*I don't know where my store is*"));
|
|
oOb=GetNearestObject(OBJECT_TYPE_ITEM,oMe,nC);
|
|
fDist=GetDistanceBetween(oMe,oOb);
|
|
while(oOb!=OBJECT_INVALID&&fDist<30.0)
|
|
{ // object
|
|
if (GetPlotFlag(oOb)==FALSE&&fnIsManaObject(oOb)==FALSE)
|
|
{ // not plot
|
|
if (fDist<8.0)
|
|
{ // instant clean
|
|
nValue=GetGoldPieceValue(oOb);
|
|
nValue=FloatToInt(IntToFloat(nValue)*0.8);
|
|
if (nValue>0&&oStore!=OBJECT_INVALID)
|
|
{ // give gold to store
|
|
nSG=GetStoreGold(oStore);
|
|
nSG=nSG+nValue;
|
|
SetStoreGold(oStore,nSG);
|
|
} // give gold to store
|
|
AssignCommand(oMe,SpeakString("*cleaned '"+GetName(oOb)+"'*"));
|
|
DelayCommand(1.0,DestroyObject(oOb));
|
|
} // instant clean
|
|
else
|
|
{ // move to object
|
|
AssignCommand(oMe,ActionMoveToObject(oOb,FALSE,1.0));
|
|
nC=1000;
|
|
bGotItAll=FALSE;
|
|
} // move to object
|
|
} // not plot
|
|
nC++;
|
|
oOb=GetNearestObject(OBJECT_TYPE_ITEM,oMe,nC);
|
|
fDist=GetDistanceBetween(oMe,oOb);
|
|
} // object
|
|
// look for bodies and remains
|
|
nC=1;
|
|
oOb=GetNearestObject(OBJECT_TYPE_PLACEABLE,oMe,nC);
|
|
fDist=GetDistanceBetween(oMe,oOb);
|
|
while(oOb!=OBJECT_INVALID&&fDist<30.0)
|
|
{ // object
|
|
if (fDist<8.0&&GetHasInventory(oOb)==TRUE)
|
|
{ // instant clean
|
|
oI=GetFirstItemInInventory(oOb);
|
|
while(oI!=OBJECT_INVALID)
|
|
{ // inventory
|
|
nValue=GetGoldPieceValue(oI);
|
|
nValue=FloatToInt(IntToFloat(nValue)*0.8);
|
|
if (nValue<1) nValue=1;
|
|
if (nValue>0&&oStore!=OBJECT_INVALID)
|
|
{ // destroy
|
|
DelayCommand(1.0,DestroyObject(oI));
|
|
nSG=GetStoreGold(oStore);
|
|
nSG=nSG+nValue;
|
|
SetStoreGold(oStore,nSG);
|
|
} // destroy
|
|
oI=GetNextItemInInventory(oOb);
|
|
} // inventory
|
|
DelayCommand(3.0,DestroyObject(oOb));
|
|
} // instant clean
|
|
else if (GetHasInventory(oOb)==TRUE&&bGotItAll==TRUE)
|
|
{ // move
|
|
AssignCommand(oMe,ActionMoveToObject(oOb,FALSE,1.0));
|
|
nC=1000;
|
|
bGotItAll=FALSE;
|
|
} // move
|
|
nC++;
|
|
oOb=GetNearestObject(OBJECT_TYPE_ITEM,oMe,nC);
|
|
fDist=GetDistanceBetween(oMe,oOb);
|
|
} // object
|
|
if (bGotItAll==TRUE) SetLocalInt(oMe,"nGNBDisabled",FALSE);
|
|
else {DelayCommand(5.0,ExecuteScript("itemcleanup",OBJECT_SELF)); }
|
|
}
|