PoA_PRC8/_module/nss/divideloot.nss
Jaysyn904 db6c871708 Fixed DivideLoot() bug
Fixed DivideLoot() bug from GetNumberPartyMembers() finally getting fixed.  Updated classes.2da  Full compile.  Updated release archive.
2025-03-11 15:04:14 -04:00

99 lines
2.4 KiB
Plaintext

//Created by Genisys / Guile 5/26/08
/*
This script will give every member every member 50% of each items' value
up-to 600,000 Gold (10 Gold for Plot or Cheap Items), divided by the number
of members! So if you put in a 200,000 gold piece item the total value will be
100,000 gold DIVIDED BY Each Member, so if there are 4 members, each will get
25,000 Gold for that item.
*/
#include "X0_I0_PARTYWIDE"
#include "nw_i0_plot"
//Put this script OnClose
object oTarget;
object oItem;
int GetIdentifiedGoldPieceValue(object oItem)
{
// Initial flag
int bIdentified = GetIdentified(oItem);
// If not already, set to identfied
if (!bIdentified) SetIdentified(oItem, TRUE);
// Get the GP value
int nGP=GetGoldPieceValue(oItem);
//Cap the max gold for an item at 200,000 gold.(1/2 the value)
if(nGP >400000)
{
nGP = 400000;
return nGP;
}
else if(nGP<10)
{
nGP = 10;
return nGP;
}
else
{ return nGP; }
}
void main()
{
//declare major variables
object oPC = GetLastClosedBy();
oTarget = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oTarget);
int nMembers = GetNumberPartyMembers(oPC);
//if not a pc stop
if (!GetIsPC(oPC)) return;
//If the closer is not the person who has the key stop the script!!
if (GetItemPossessedBy(oPC, "barrel")== OBJECT_INVALID) return;
//Note all items which are plot or unidentified might cause an error, lets check.
while(oItem != OBJECT_INVALID)
{
//Lets loop through to get the total cost of all items in the container
// Get the Identified GP value
int nGP = GetIdentifiedGoldPieceValue(oItem);
//Note 15 Gold minimum divide by #of Member (15 Party members max!
int aValue = nGP+20; //This is done to prevent the divide by 0 error.
int bValue = aValue/2; //50% of the item's value
int nValue = bValue;
//GiveGoldToAll(oPC, nValue);
GiveGoldToAll(oPC, nValue);
oItem = GetNextItemInInventory(oTarget);
}
//Lets destroy all the stuff now.
oItem = GetFirstItemInInventory(oTarget);
while(oItem != OBJECT_INVALID)
{
if(GetIsObjectValid(oItem))
{
DestroyObject(oItem, 0.0f);
}
//Loop to make sure we got all items.
oItem = GetNextItemInInventory(oTarget);
}
//Let's prevent reopening for 3 seconds, to ensure all contents are gone!
DelayCommand(0.4, SetLocked(OBJECT_SELF, TRUE));
DelayCommand(3.0, SetLocked(OBJECT_SELF, FALSE));
}