Aschbourne_PRC8/_module/nss/loot_inc_main.nss

82 lines
2.8 KiB
Plaintext
Raw Permalink Normal View History

2024-06-14 10:48:20 -04:00
// Throw this switch for debugging
#include "loot_inc_data"
int LOOT_INC_MAIN_DEBUGGING = TRUE;
int GetPartyMemberCount (object oPC, int iMinimumLevel)
{
int iPartyMemberCount = 0;
int iPartyMemberLevel;
object oPartyMember = GetFirstFactionMember (oPC);
while (GetIsObjectValid (oPartyMember))
{
if (GetIsPC (oPartyMember))
{
iPartyMemberCount ++;
iPartyMemberLevel = GetLevelByPosition (1, oPartyMember) + GetLevelByPosition (2, oPartyMember) + GetLevelByPosition (3, oPartyMember);
if (iPartyMemberLevel < iMinimumLevel) iPartyMemberCount --;
}
oPartyMember = GetNextFactionMember (oPC);
}
if (iPartyMemberCount < 1) iPartyMemberCount = 1;
WriteTimestampedLogEntry ("iPartyMemberCount " + IntToString (iPartyMemberCount));
return iPartyMemberCount;
}
object GetRandomPartyMember (object oPC)
{
int iPartyMemberCount = GetPartyMemberCount (oPC, 0);
int iRandNum = (Random (iPartyMemberCount)+1);
if (iRandNum == 1) return oPC;
object oPartyMember = GetFirstFactionMember (oPC);
int iCounter;
for (iCounter = 1; iCounter < iRandNum; iCounter ++)
{
if (!GetIsPC(oPartyMember)) iCounter --;
oPartyMember = GetNextFactionMember (oPC);
}
return oPartyMember;
}
int GetIsOverMaxAllowedLevel (object oPC , object oCaller)
{
int iHighestPartyMemberLevel = 0;
object oPartyMember = GetFirstFactionMember(oPC);
while (GetIsObjectValid(oPartyMember))
{
int iPartyMemberLevel = GetLevelByPosition (1, oPartyMember) + GetLevelByPosition (2, oPartyMember) + GetLevelByPosition (3, oPartyMember);
if (iPartyMemberLevel > iHighestPartyMemberLevel) iHighestPartyMemberLevel = iPartyMemberLevel;
oPartyMember = GetNextFactionMember(oPC);
}
int iMaxAllowedLevel = GetMaxAllowedLevel (oCaller);
if (iHighestPartyMemberLevel > iMaxAllowedLevel) return TRUE;
return FALSE;
}
void GenerateUniqueTreasure (object oCaller,object oPC)
{
int iMinimumLevel = GetMinimumLevel (oCaller);
int iNumberOfItemsToGenerate = GetPartyMemberCount (oPC, iMinimumLevel);
int iMinimum = GetMinimumNumberOfItemsToGenerate (oCaller);
int iMaximum = GetMaximumNumberOfItemsToGenerate (oCaller);
if (iNumberOfItemsToGenerate < iMinimum) iNumberOfItemsToGenerate = iMinimum;
if (iNumberOfItemsToGenerate > iMaximum) iNumberOfItemsToGenerate = iMaximum;
int iNumItemsInList = GetTotalAvailableItems (oCaller);
int iRandomNumber;
string sItemTemplate;
int iCounter;
for (iCounter = 0; iCounter < iNumberOfItemsToGenerate; iCounter ++)
{
iRandomNumber = Random (iNumItemsInList)+1;
sItemTemplate = GetUniqueItemFromList (oCaller, iRandomNumber);
CreateItemOnObject (sItemTemplate,oCaller,1);
if (LOOT_INC_MAIN_DEBUGGING == TRUE) WriteTimestampedLogEntry (GetTag (oCaller) + " generated " + sItemTemplate);
}
}