RATDOG/_module/nss/otres_forestrand.nss
Jaysyn904 909da8ff18 Added helms and dynamic goblins
Added  helms and dynamic goblins.  Added onEnter spawner scripts to all dungeon areas.  Fixed the Dishonest Patrol to be dynamic & more like PnP.  Full compile.

Co-Authored-By: Draygoth <65428430+Draygoth@users.noreply.github.com>
2022-11-30 00:45:38 -05:00

292 lines
11 KiB
Plaintext

/* This script is put in the OnEnter of a random forest encounter map.
The map will have all the encounters below already in place where
the PCs will arrive, but they will be inactive. This script will
randomly choose which encounter to activate. For undead, the script
checks to see if it is day with a GetIsDay() function, and if it is,
will re-run the function to try to get a non-undead encounter.
Theoretically, this could be an infinite loop, but with the number
of encounters here, it won't happen.
*/
//------------RandomEncounter Function------------------------------------------
//Follows is the list of possible encounters or encounter types
//See the end on how to add an enounter
void RandomEncounter()
{//begin RandomEncounter function
object oEncounter;
object oPC=GetPCSpeaker();
object oWay=OBJECT_SELF;//added to fix "No enemies" issue
int iDieRoll2;
int iDieRoll;
//Randomizer
int iSeed=FloatToInt(100*log(IntToFloat(GetTimeMillisecond()+GetCalendarDay()+GetTimeHour())));
int i;
for (i=0;i!=iSeed;i++)
{
iDieRoll=Random(67);
} //This number should match iDieRoll below
//Roll random encounter or encounter type
iDieRoll=Random(67)+1; //change this to match the max if you add encounters
if (iDieRoll==1)
{oEncounter=GetNearestObjectByTag("Badger",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>1)&&iDieRoll<7)
{oEncounter=GetNearestObjectByTag("Bandit",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>6)&&iDieRoll<10) //Encounter type beetle
{iDieRoll2=d4();
switch (iDieRoll2)
{
case 1:
oEncounter=GetNearestObjectByTag("BombBeetle",oWay);
SetEncounterActive(TRUE,oEncounter);
break;
case 2:
oEncounter=GetNearestObjectByTag("FireBeetle",oWay);
SetEncounterActive(TRUE,oEncounter);
break;
case 3:
oEncounter=GetNearestObjectByTag("StagBeetle",oWay);
SetEncounterActive(TRUE,oEncounter);
break;
case 4:
oEncounter=GetNearestObjectByTag("StinkBeetle",oWay);
SetEncounterActive(TRUE,oEncounter);
break;
default:
oEncounter=GetNearestObjectByTag("BombBeetle",oWay);
SetEncounterActive(TRUE,oEncounter);
break;
}
return;
}
else if (iDieRoll==10)
{oEncounter=GetNearestObjectByTag("Boar",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>10)&&(iDieRoll<13))
{oEncounter=GetNearestObjectByTag("BrownBear",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==13)
{oEncounter=GetNearestObjectByTag("Bugbear",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>13)&&(iDieRoll<19))
{oEncounter=GetNearestObjectByTag("Character",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==19)
{oEncounter=GetNearestObjectByTag("Cougar",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>19)&&(iDieRoll<22))
{oEncounter=GetNearestObjectByTag("DireTiger",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>21)&&(iDieRoll<25))
{oEncounter=GetNearestObjectByTag("DireWolf",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==25)
{oEncounter=GetNearestObjectByTag("Dog",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==26) //Encounter type giant
{iDieRoll2=Random(90)+1;
if ((iDieRoll2>0)&&(iDieRoll2<8))
{oEncounter=GetNearestObjectByTag("Ettin",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>7)&&(iDieRoll2<86))
{oEncounter=GetNearestObjectByTag("HillGiant",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>85)&&(iDieRoll2<91))
{oEncounter=GetNearestObjectByTag("StoneGiant",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
}
else if (iDieRoll==27) //Encounter type dragon
{iDieRoll2=Random(59)+1;
if ((iDieRoll2>0)&&(iDieRoll2<17))
{oEncounter=GetNearestObjectByTag("BlackDragon",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll2==17)
{oEncounter=GetNearestObjectByTag("BlueDragon",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>17)&&(iDieRoll2<58))
{oEncounter=GetNearestObjectByTag("GreenDragon",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll2==58)
{oEncounter=GetNearestObjectByTag("RedDragon",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll2==59)
{oEncounter=GetNearestObjectByTag("WhiteDragon",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
}
else if (iDieRoll==28)
{oEncounter=GetNearestObjectByTag("GreyRender",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>28)&&(iDieRoll<33)) //Encounter type humanoid
{iDieRoll2=Random(80)+1;
if ((iDieRoll2>0)&&(iDieRoll2<11))
{oEncounter=GetNearestObjectByTag("Goblin",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>10)&&(iDieRoll2<61))
{oEncounter=GetNearestObjectByTag("Kobold",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>60)&&(iDieRoll2<81))
{oEncounter=GetNearestObjectByTag("Orc",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
}
else if (iDieRoll==33)
{oEncounter=GetNearestObjectByTag("Krenshar",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==34)
{oEncounter=GetNearestObjectByTag("Lion",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>34)&&(iDieRoll<37)) //Encounter type lycanthrope
{iDieRoll2=d20();
if ((iDieRoll2>0)&&(iDieRoll2<6))
{oEncounter=GetNearestObjectByTag("Aranea",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>5)&&(iDieRoll2<11))
{oEncounter=GetNearestObjectByTag("Wererat",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>10)&&(iDieRoll2<21))
{oEncounter=GetNearestObjectByTag("Werewolf",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
}
else if (iDieRoll==37)
{oEncounter=GetNearestObjectByTag("Malar",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>37)&&(iDieRoll<42))
{oEncounter=GetNearestObjectByTag("Ogre",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>41)&&(iDieRoll<45))
{oEncounter=GetNearestObjectByTag("Spider",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==45)
{oEncounter=GetNearestObjectByTag("Stirge",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==46)
{oEncounter=GetNearestObjectByTag("Troll",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>46)&&(iDieRoll<49)) //Encounter type undead
{//Check to see if it is night and retry script if it is
if (GetIsDay())
{RandomEncounter();
return;}
iDieRoll2=Random(125+1);
if ((iDieRoll2>0)&&(iDieRoll2<6))
{oEncounter=GetNearestObjectByTag("Allip",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>5)&&(iDieRoll2<10))
{oEncounter=GetNearestObjectByTag("Bodak",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>9)&&(iDieRoll2<20))
{oEncounter=GetNearestObjectByTag("Curst",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>19)&&(iDieRoll2<30))
{oEncounter=GetNearestObjectByTag("Ghast",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>29)&&(iDieRoll2<73))
{oEncounter=GetNearestObjectByTag("Ghoul",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll2==73)
{oEncounter=GetNearestObjectByTag("Lich",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>73)&&(iDieRoll2<81))
{oEncounter=GetNearestObjectByTag("Mohrg",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>80)&&(iDieRoll2<95))
{oEncounter=GetNearestObjectByTag("Shadow",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>94)&&(iDieRoll2<105))
{oEncounter=GetNearestObjectByTag("Spectre",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>104)&&(iDieRoll2<115))
{oEncounter=GetNearestObjectByTag("Vampire",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>114)&&(iDieRoll2<122))
{oEncounter=GetNearestObjectByTag("Wight",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll2>121)&&(iDieRoll2<126))
{oEncounter=GetNearestObjectByTag("Wraith",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
}
else if (iDieRoll==49)
{oEncounter=GetNearestObjectByTag("WilloWisp",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>49)&&(iDieRoll<57))
{oEncounter=GetNearestObjectByTag("Wolf",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>56)&&(iDieRoll<60))
{oEncounter=GetNearestObjectByTag("Worg",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==60) //Skeleton Re-animator
{oEncounter=GetNearestObjectByTag("Skeleton",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==61) //Zombie Re-animator
{oEncounter=GetNearestObjectByTag("Zombie",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if ((iDieRoll>61)&&(iDieRoll<67)) //Ettercap
{oEncounter=GetNearestObjectByTag("Ettercap",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
else if (iDieRoll==67) //Rat
{oEncounter=GetNearestObjectByTag("Rat",oWay);
SetEncounterActive(TRUE,oEncounter);
return;}
//add new encounters here by copying the "else if" above that matches what you
//want to do (i.e. ==, range, or sub-table) then change the iRoll statement
//and Randomizer back at the beginning
else FloatingTextStringOnCreature(IntToString(iDieRoll),oPC);//catch all debug - if it fires, you are missing that number in the else ifs above
}//end RandomEncounter function
void main()
{
RandomEncounter(); //choose and activate the random encounter
}