#include "nw_i0_spells" object RandomArea() { object oRandomArea; switch (d20() + d6() - 1) { case 1 : oRandomArea = GetObjectByTag("AersMountain"); break; case 2 : oRandomArea = GetObjectByTag("Cliffs"); break; case 3 : oRandomArea = GetObjectByTag("Dawn"); break; case 4 : oRandomArea = GetObjectByTag("DarknessFalls"); break; case 5 : oRandomArea = GetObjectByTag("DesertofRa"); break; case 6 : oRandomArea = GetObjectByTag("tor_ctfwdm"); break; case 7 : oRandomArea = GetObjectByTag("DragonsDomain"); break; case 8 : oRandomArea = GetObjectByTag("ForestofLostHope"); break; case 9 : oRandomArea = GetObjectByTag("tor_fdlpth"); break; case 10 : oRandomArea = GetObjectByTag("FrostValley"); break; case 11 : oRandomArea = GetObjectByTag("KainsIsland"); break; case 12 : oRandomArea = GetObjectByTag("CastleCourtyard"); break; case 13 : oRandomArea = GetObjectByTag("ThenesMines"); break; case 14 : oRandomArea = GetObjectByTag("MoonShayIsle"); break; case 15 : oRandomArea = GetObjectByTag("MtBarovchocy"); break; case 16 : oRandomArea = GetObjectByTag("MtDrake"); break; case 17 : oRandomArea = GetObjectByTag("NoMansLand"); break; case 18 : oRandomArea = GetObjectByTag("Oblivion"); break; case 19 : oRandomArea = GetObjectByTag("OceanofDestiny"); break; case 20 : oRandomArea = GetObjectByTag("SeaofFallenAngels"); break; case 21 : oRandomArea = GetObjectByTag("ShadowRealm"); break; case 22 : oRandomArea = GetObjectByTag("SkullGorge"); break; case 23 : oRandomArea = GetObjectByTag("stingerforest"); break; case 24 : oRandomArea = GetObjectByTag("TheUnderdarkForest"); break; case 25 : oRandomArea = GetObjectByTag("UpperTrollOutpost"); break; case 26 : oRandomArea = GetObjectByTag("VenomPlains"); break; default : oRandomArea = GetObjectByTag("VenomPlains"); break; } return oRandomArea; } string RandomMonster() { string sMonster; switch(d10()) { case 1 : sMonster = "br_ra1sttba"; break; // Scourge case 2 : sMonster = "tb_rstroll"; break; // Vaprak case 3 : sMonster = "sf_boss_death"; break; // Death case 4 : sMonster = "bx_hung4ba"; break; // Famine case 5 : sMonster = "bx_fpestil"; break; // Pestilence case 6 : sMonster = "bx_waro4ks"; break; // War case 7 : sMonster = "sf_boss_fidemon"; break; // Fire & Ice Demon case 8 : sMonster = "sf_boss_shdwfnd"; break; // Fiend of the Blinding Shadows case 9 : sMonster = "warbeast"; break; // War Beast case 10 : sMonster = "tb_rstroll"; break; default : sMonster = "br_ra1sttba"; break; } return sMonster; } void SpawnRandomBoss() { SendMessageToAllDMs("DEBUG :: Inside Boss Spawn Function"); int nAmmount, nRandomWaypoint; string sArea; float fHelpDelay; location lRandom; object oMonster, oWaypoint, oSearcher; object oRandomArea = RandomArea(); string sMonster = RandomMonster(); // Added in for quick bandaid. Module was spawning duplicates of bosses at times // this will just check twice to see if they have already been spawned. if (GetLocalInt(GetModule(), sMonster) == 1) sMonster = RandomMonster(); if (GetLocalInt(GetModule(), sMonster) == 1) sMonster = RandomMonster(); if(GetIsObjectValid(oRandomArea)) { oWaypoint = GetFirstObjectInArea(oRandomArea); while(GetIsObjectValid(oWaypoint)) { if(GetTag(oWaypoint) == "br_MassagreWaypoint") nAmmount++; oWaypoint = GetNextObjectInArea(oRandomArea); } nRandomWaypoint = Random(nAmmount) + 1; oSearcher = GetNearestObjectToLocation(OBJECT_TYPE_WAYPOINT, Location(oRandomArea, Vector(5.0, 5.0, 0.0), 0.0), 1); oWaypoint = GetNearestObjectByTag("br_MassagreWaypoint", oSearcher, nRandomWaypoint); if(!GetIsObjectValid(oWaypoint)) oWaypoint = oSearcher; fHelpDelay = GetRandomDelay(40.0, 200.0); lRandom = GetLocation(oWaypoint); oMonster = CreateObject(OBJECT_TYPE_CREATURE, sMonster, lRandom, TRUE); SetLocalInt(GetModule(), sMonster, 1); sArea = GetName(GetArea(oMonster)); DelayCommand(4.0, AssignCommand(oMonster, SpeakString("The World will be mine!", TALKVOLUME_SHOUT))); DelayCommand(fHelpDelay, AssignCommand(oMonster, SpeakString(sArea + " is already conquered! No one will be safe!", TALKVOLUME_SHOUT))); } }