GammaAge/_module/nss/re_spawnerhb_v2.nss
Jaysyn904 b927d0faf8 File re-organization.
File re-organization.  Added module builder & hak builder.
2021-09-16 10:15:32 -04:00

94 lines
3.8 KiB
Plaintext

//:://///////////////////////////////////////////////////////////////
//:: FileName re_spawnerhb
//:: Copyright (c) 2001 Bioware Corp.
//:://///////////////////////////////////////////////////////////////
/*
This script is used in the heartbeat of the
BESIE MMORPG Spawner tool, part of the BESIE Random
Encounter package by Ray Miller.
*/
//:://///////////////////////////////////////////////////////////////
//:: Created By: Ray Miller
//:: Created On: 9-2-02
//:://///////////////////////////////////////////////////////////////
#include "re_rndenc"
void main()
{
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//Set this parameter to FALSE if you wish
//your encounter distances to be constant
//
int RandomDistance = FALSE
//
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
/*
if you don't want a DM possessed NPC to produce spawns,
insert the following code into your module OnClientEnter
handler.
if(GetIsDM(GetEnteringObject())) SetLocalInt(GetModule(), "re_" + GetName(GetEnteringObject()), TRUE);
else DeleteLocalInt(GetModule(), "re_" + GetName(GetEnteringObject()));
*/
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
;
float fChanceOfEncounter = IntToFloat(GetMaxHitPoints(OBJECT_SELF)) / 100;
int iFaction;
int iCounterX;
object oEncounterObject;
object oArea = GetArea(OBJECT_SELF);
object oPC = GetFirstPC();
while(GetIsObjectValid(oPC))
{
if(GetArea(oPC) == oArea)
{
string sLeader = GetPCPlayerName(GetFactionLeader(oPC)) + GetName(GetFactionLeader(oPC));
if(!GetLocalInt(OBJECT_SELF, "i" + sLeader))
{
iFaction++;
SetLocalString(OBJECT_SELF, "sFaction" + IntToString(iFaction), sLeader);
}
SetLocalInt(OBJECT_SELF, "i" + sLeader, GetLocalInt(OBJECT_SELF, "i" + sLeader) + 1);
SetLocalObject(OBJECT_SELF, "o" + sLeader + IntToString(GetLocalInt(OBJECT_SELF, "i" + sLeader)), oPC);
}
oPC = GetNextPC();
}
CleanHouse();
if(!iFaction) return;
string sLeader = GetLocalString(OBJECT_SELF, "sFaction" + IntToString(Random(iFaction) + 1));
int iMember = Random(GetLocalInt(OBJECT_SELF, "i" + sLeader)) + 1;
oEncounterObject = GetLocalObject(OBJECT_SELF, "o" + sLeader + IntToString(iMember));
for(iCounterX = 1; iCounterX <= iFaction; iCounterX++)
{
DeleteLocalInt(OBJECT_SELF, "i" + GetLocalString(OBJECT_SELF, "sFaction" + IntToString(iCounterX)));
DeleteLocalString(OBJECT_SELF, "sFaction" + IntToString(iCounterX));
}
string sTemplate = GetTag(OBJECT_SELF);
int iNumberOfParties;
int iOrientation = 0;
int iMinDistance = RandomDistance;
int iDifficulty = GetFortitudeSavingThrow(OBJECT_SELF);
int iChanceFromBehind = GetReflexSavingThrow(OBJECT_SELF);
int iMaxDistance = GetWillSavingThrow(OBJECT_SELF);
if(!GetLocalInt(oEncounterObject, "bInitialized"))
{
SetRndEncProperties(oEncounterObject, iDifficulty, TRUE, sTemplate, 180, 2, ENCOUNTER_TYPE_AREA);
}
if(!iMaxDistance)
{
iMaxDistance = 1;
}
if(GetStringLeft(sTemplate, 3) != "re_")
sTemplate = "random";
fChanceOfEncounter = IntToFloat(iFaction) * fChanceOfEncounter;
if((Random(99) + 1) < iChanceFromBehind)
{
iOrientation = 180;
iMaxDistance = 2;
}
RandomEncounter(fChanceOfEncounter, oEncounterObject, sTemplate, 0, 0, iMinDistance, iMaxDistance, iOrientation, 30);
}