1924 lines
57 KiB
Plaintext
1924 lines
57 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
This script represents the standard encounter table
|
|
for the BESIE Random Encounter System By Ray Miller.
|
|
It is meant to be used as an include, and will not
|
|
compile on its own.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Ray Miller
|
|
//:: Created On: God knows. I wrote this months ago!
|
|
//:://////////////////////////////////////////////
|
|
|
|
|
|
string GetRndEncCreature(float fMinCR = 0.0, float fMaxCR = 9999.0, string sCreatureTable = "")
|
|
{
|
|
// IF NOT INITIALIZED THEN DO SO
|
|
/*if(!GetLocalInt(GetModule(), "re_bInitialized"))
|
|
{
|
|
SetRndEncProperties();
|
|
}*/
|
|
|
|
// DECLARE AND INTIALIZE VARIABLES
|
|
object oMod = GetModule();
|
|
string sChoice = "nil";
|
|
string sBuild;
|
|
int bCustom;
|
|
int iCounter1;
|
|
int iCounter2 = 0;
|
|
int iCounter3;
|
|
int iVarNum;
|
|
float fCR;
|
|
if (fMinCR > 18.0) fMinCR = 18.0;
|
|
sCreatureTable = GetStringLowerCase(sCreatureTable);
|
|
if(GetStringLeft(sCreatureTable, 8) == "commoner") sCreatureTable = "z" + GetStringRight(sCreatureTable, GetStringLength(sCreatureTable) - 8);
|
|
|
|
/* The following code was added with v1.8. It checks to see if the template contains the string '2da'
|
|
if so it checks to ensure the tag name matches the file name of a 2DA file by looking for the 'TableLength'
|
|
parameter on Row 0. If it is present, a check is made to ensure that the parameter is correct. If so, the
|
|
standard or 'old style' table will be ignored and this routine will draw an encounter from the 2da file. */
|
|
if(GetStringLeft(sCreatureTable, 3) == "2da")
|
|
{
|
|
string s2DAMatch = "re_" + GetStringRight(GetStringLowerCase(sCreatureTable), GetStringLength(sCreatureTable) - 4);
|
|
int iTableLength = StringToInt(Get2DAString(s2DAMatch, "TableLength", 0));
|
|
if(iTableLength && Get2DAString(s2DAMatch, "ResRef", iTableLength) != "" && Get2DAString(s2DAMatch, "ResRef", iTableLength + 1) == "")
|
|
{
|
|
int iRnd = Random(iTableLength) + 1;
|
|
string sTreasure = Get2DAString(s2DAMatch, "Treasure", iRnd);
|
|
int iMinimum = StringToInt(Get2DAString(s2DAMatch, "Minimum", iRnd));
|
|
int iMaximum = StringToInt(Get2DAString(s2DAMatch, "Maximum", iRnd));
|
|
if(!iMinimum && !iMaximum) iMaximum = 1;
|
|
SetLocalInt(oMod, "re_iMinNumberOfCreatures", iMinimum);
|
|
SetLocalInt(oMod, "re_iMaxNumberOfCreatures", iMaximum);
|
|
string sCreature = Get2DAString(s2DAMatch, "ResRef", iRnd);
|
|
if(sTreasure != "") SetLocalString(GetModule(), "re_s2DATreasure", sTreasure);
|
|
return sCreature;
|
|
}
|
|
else
|
|
{
|
|
string sError = "BESIE error: 2DA Table " + s2DAMatch + " is not present or is invalid!";
|
|
object oPC = GetFirstPC();
|
|
SendMessageToAllDMs(sError);
|
|
while(GetIsObjectValid(oPC))
|
|
{
|
|
SendMessageToPC(oPC, sError);
|
|
oPC = GetNextPC();
|
|
}
|
|
WriteTimestampedLogEntry(sError);
|
|
return "";
|
|
}
|
|
}
|
|
|
|
// PICK RANDOM ABERRATION
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "n")
|
|
{
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_BATTDEVOUR";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 1:sChoice = "X2_BEHOLDER001";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 2:sChoice = "X2_BEHOLDER003";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 3:sChoice = "X2_DRIDER001";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 4:sChoice = "X2_DRIDER002";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 5:sChoice = "X2_DRIDER003";
|
|
fCR = 17.0;
|
|
break;
|
|
|
|
case 6:sChoice = "X2_DRIDER004";
|
|
fCR = 23.0;
|
|
break;
|
|
|
|
case 7:sChoice = "X2_DRIDER005";
|
|
fCR = 28.0;
|
|
break;
|
|
|
|
case 8:sChoice = "X2_FDRIDER002";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 9:sChoice = "X2_DRIDERW01";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_ETTERCAP";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 11:sChoice = "X2_BEHOLDER002";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 12:sChoice = "X2_FDRIDER001";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_HORROR";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_DEVOUR";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 15:sChoice = "X2_MINDFLAYER001";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 16:sChoice = "X2_MINDFDARKENER";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 17:sChoice = "X2_MINDFVENERATR";
|
|
fCR = 20.0;
|
|
break;
|
|
|
|
case 18:sChoice = "X2_MINDFLAYER002";
|
|
fCR = 19.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_UMBERHULK";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_WILLOWISP";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 21:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && sChoice != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// PICK RANDOM ANIMAL
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "a")
|
|
{
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_BEARDIREBOSS";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_BEARBLCK";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_BEARBRWN";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_BEARDIRE";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_BEARKODIAK";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_BEARPOLAR";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_BEASTMALAR001";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_DIREWOLF";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_WOLFDIREBOSS";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_WOLFWINT";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_WOLF";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_WORG";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_COUGAR";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_CRAGCAT";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_DIRETIGER";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_JAGUAR";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_CAT";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 17:sChoice = "NW_LION";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 18:sChoice = "NW_PANTHER";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_BADGER";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_BOAR";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 21:sChoice = "NW_DIREBADG";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 22:sChoice = "NW_BOARDIRE";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 23:sChoice = "NW_RAT001";
|
|
fCR = 0.12;
|
|
break;
|
|
|
|
case 24:sChoice = "NW_RATDIRE001";
|
|
fCR = 0.33;
|
|
break;
|
|
|
|
case 25:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && sChoice != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM CONSTRUCT
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "c")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_BATHORROR";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_GolBone";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_GolClay";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_GOLFLESH";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_HELMHORR";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_GOLIRON";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_MINOGON";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_SHGUARD";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_GOLSTONE";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 9:sChoice = "X2_GOLEM002";
|
|
fCR = 32.0;
|
|
break;
|
|
|
|
case 10:sChoice = "nw_goldmflesh001";
|
|
fCR = 25.0;
|
|
break;
|
|
|
|
case 11:sChoice = "X2_GOLIRON_HUGE";
|
|
fCR = 21.0;
|
|
break;
|
|
|
|
case 12:sChoice = "X2_GOLEM001";
|
|
fCR = 35.0;
|
|
break;
|
|
|
|
case 13:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && sChoice != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM DRAGON
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "d")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_DRGBLACK001";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_DRGBLUE001";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_DRGGREEN001";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_DRGRED001";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_DRGWHITE001";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_DRGBLACK002";
|
|
fCR = 17.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_DRGBLUE002";
|
|
fCR = 18.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_DRGGREEN002";
|
|
fCR = 18.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_DRGRED002";
|
|
fCR = 19.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_DRGWHITE002";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_DRGBLACK003";
|
|
fCR = 21.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_DRGBLUE003";
|
|
fCR = 23.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_DRGGREEN003";
|
|
fCR = 23.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_DRGRED003";
|
|
fCR = 25.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_HALFDRA001";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 15:sChoice = "X2_DRAGONSHAD001";
|
|
fCR = 22.0;
|
|
break;
|
|
|
|
case 16:sChoice = "X2_DRAGONPRIS001";
|
|
fCR = 37.0;
|
|
break;
|
|
|
|
case 17:sChoice = "X0_WYRMLING_BLK";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 18:sChoice = "X0_WYRMLING_BLU";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 19:sChoice = "X0_WYRMLING_GRN";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 20:sChoice = "X0_WYRMLING_RED";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 21:sChoice = "X0_WYRMLING_WHT";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 22:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && sChoice != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM ELEMENTAL
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "e")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_AIR";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_Earth";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_AIRELDER";
|
|
fCR = 20.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_EARTHELD";
|
|
fCR = 17.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_FIREELDER";
|
|
fCR = 17.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_WATELDER";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_FIRE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_AIRGREAT";
|
|
fCR = 18.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_EARTHGREAT";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_FIREGREAT";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_WATERGREAT";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_AIRHUGE";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_EARTHHUGE";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_FIREHUGE";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_WATERHUGE";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_INVSTALK";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_WATER";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 17:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM GIANT
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "g")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_ETTIN";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_GNTHILL";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 2:sChoice ="NW_GNTMOUNT";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_GNTFIRE";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_GNTFROST";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_OGRE01";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_OGRE02";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_OGRECHIEF01";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_OGRECHIEF02";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 9:sChoice = "nw_ogreboss";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_OGREMAGEBOSS";
|
|
fCR = 21.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_OGREMAGE01";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_OGREMAGE02";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_TROLL";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_TROLLCHIEF";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_TROLLBOSS";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_TROLLWIZ";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 17:sChoice = "X0_GNTFIREFEM";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 18:sChoice = "X0_GNTFROSTFEM";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 19:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM HUMANOID
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "h")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_BUGBEARA";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_BUGBEARB";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 2:sChoice = "nw_bugbearboss";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_BUGCHIEFA";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_BUGCHIEFB";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_BUGWIZA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_BUGWIZB";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_GRIG";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_PIXIE";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_GOBLINA";
|
|
fCR = 0.25;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_GOBLINB";
|
|
fCR = 0.25;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_GOBLINBOSS";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_GOBCHIEFA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_GOBCHIEFB";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_GOBWIZA";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_GOBWIZB";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_OLDCHIEFA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 17:sChoice = "NW_OLDCHIEFB";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_OLDMAGEA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_OLDMAGEB";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 21:sChoice = "NW_OLDWARB";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 22:sChoice = "NW_OLDWARRA";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 23:sChoice = "NW_YUAN_TI001";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 24:sChoice = "NW_YUAN_TI003";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 25:sChoice = "NW_YUAN_TI002";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 26:sChoice = "NW_MINOTAUR";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 27:sChoice = "NW_MinChief";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 28:sChoice = "NW_MINOTAURBOSS";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 29:sChoice = "NW_MINWIZ";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 30:sChoice = "NW_ORCA";
|
|
fCR = 0.25;
|
|
break;
|
|
|
|
case 31:sChoice = "NW_ORCB";
|
|
fCR = 0.25;
|
|
break;
|
|
|
|
case 32:sChoice = "NW_OrcChiefA";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 33:sChoice = "NW_ORCCHIEFB";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 34:sChoice = "nw_orcboss";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 35:sChoice = "NW_ORCWIZA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 36:sChoice = "NW_ORCWIZB";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 37:sChoice = "NW_KOBOLD001";
|
|
fCR = 0.33;
|
|
break;
|
|
|
|
case 38:sChoice = "NW_KOBOLD002";
|
|
fCR = 0.33;
|
|
break;
|
|
|
|
case 39:sChoice = "NW_KOBOLD004";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 40:sChoice = "NW_KOBOLD006";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 41:sChoice = "NW_KOBOLD005";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 42:sChoice = "NW_KOBOLD003";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 43:sChoice = "NW_GNOLL001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 44:sChoice = "NW_GNOLL002";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 45:sChoice = "NW_HOBGOBLIN001";
|
|
fCR = 0.33;
|
|
break;
|
|
|
|
case 46:sChoice = "NW_HOBGOBLIN002";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 47:sChoice = "X0_ASABI_CHIEF";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 48:sChoice = "X0_ASABI_SHAMAN";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 49:sChoice = "X0_ASABI_WARRIOR";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 50:sChoice = "X0_MEDUSA";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 51:sChoice = "X0_STINGER";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 52:sChoice = "X0_STINGER_CHIEF";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 53:sChoice = "X0_STINGER_MAGE";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 54:sChoice = "X0_STINGER_WAR";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 55:sChoice = "nw_seahag";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 56:sChoice = "";
|
|
fCR = 4.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM INSECT
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "i")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_BTLBOMB";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_BTLFIRE";
|
|
fCR = 0.25;
|
|
break;
|
|
|
|
case 2:sChoice = "nw_beetleboss";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_BTLFIRE02";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_BTLSTAG";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_BTLSTINK";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_SPIDDIRE";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_SPIDGIANT";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_SPIDPHASE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_SPIDERBOSS";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_SPIDSWRD";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_SPIDWRA";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 12:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM MISCELLANEOUS
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "m")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "X0_BASILISK";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 1:sChoice = "X0_COCKATRICE";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 2:sChoice = "X2_HARPY001";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_GRAYREND";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 4:sChoice = "X2_DEEPROTHE001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 5:sChoice = "X0_GORGON";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_KRENSHAR";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_STIRGE";
|
|
fCR = 0.33;
|
|
break;
|
|
|
|
case 8:sChoice = "X0_MANTICORE";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 9:sChoice = "X2_GELCUBE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 10:sChoice = "";
|
|
fCR = 5.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM PLANAR
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "p")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_DEMON";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_HALFFND001";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_HELLHOUND";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_BEASTXVIM";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_RAKSHASA";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_SHMASTIF";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_DMSUCUBUS";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_DMVROCK";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_MEPAIR";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_MEPDUST";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_MEPEARTH";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_MEPFIRE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_MEPICE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_IMP";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_MEPMAGMA";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_MEPOOZE";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_DMQUASIT";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 17:sChoice = "NW_MEPSALT";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_MEPSTEAM";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_MEPWATER";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 21:sChoice = "NW_TIEFLING02";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 22:sChoice = "NW_SLAADBL";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 23:sChoice = "NW_SLAADDETH";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 24:sChoice = "NW_SLAADDTHBOSS";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 25:sChoice = "NW_SLAADGRAY";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 26:sChoice = "NW_SLAADGRYBOSS";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 27:sChoice = "NW_SLAADGRN";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 28:sChoice = "NW_SLAADRED";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 29:sChoice = "X2_SPIDERDEMO001";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 30:sChoice = "x2_erinyes";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 31:sChoice = "X2_PITFIEND001";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 32:sChoice = "X0_FORM_MYRMARCH";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 33:sChoice = "X0_FORM_QUEEN";
|
|
fCR = 20.0;
|
|
break;
|
|
|
|
case 34:sChoice = "X0_FORM_TASKMAST";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 35:sChoice = "X0_FORM_WARRIOR";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 36:sChoice = "X0_FORM_WORKER";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 37:sChoice = "X2_SLAADBLACK001";
|
|
fCR = 30.0;
|
|
break;
|
|
|
|
case 38:sChoice = "X2_SLAADWHITE001";
|
|
fCR = 25.0;
|
|
break;
|
|
|
|
case 39:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM SHAPECHANGER
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "s")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_ARANEA";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_WERECAT";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_WERERAT001";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_WEREWOLF";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_WERERAT";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 5:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM UNDEAD
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "u")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_GHAST";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_GHOUL";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_GHOULLORD";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_GHOULBOSS";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_MUMCLERIC";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_MUMMY";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_MUMMYBOSS";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_MUMFIGHT";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_ZOMBWARR02";
|
|
fCR = 19.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_Bodak";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_CURST004";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_CURST003";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_CURST002";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_CURST001";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_DOOMKGHT";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_DOOMKGHTBOSS";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_LICH001";
|
|
fCR = 28.0;
|
|
break;
|
|
|
|
case 17:sChoice = "NW_LICH003";
|
|
fCR = 17.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_LICHBOSS";
|
|
fCR = 21.0;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_MOHRG";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 21:sChoice = "NW_REVENANT001";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 22:sChoice = "NW_SKELDEVOUR";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 23:sChoice = "NW_VAMPIRE";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 24:sChoice = "NW_VAMPIRE003";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 25:sChoice = "NW_VAMPIRE004";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 26:sChoice = "NW_VAMPIRE002";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 27:sChoice = "NW_VAMPIRE001";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 28:sChoice = "NW_WIGHT";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 29:sChoice = "NW_VAMPIRE_SHAD";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 30:sChoice = "NW_SHADOW";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 31:sChoice = "NW_SHFIEND";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 32:sChoice = "NW_SKELETON";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 33:sChoice = "NW_SKELCHIEF";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 34:sChoice = "NW_SKELMAGE";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 35:sChoice = "NW_SKELPRIEST";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 36:sChoice = "NW_SKELWARR01";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 37:sChoice = "NW_SKELWARR02";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 38:sChoice = "NW_ALLIP";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 39:sChoice = "NW_SPECTRE";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 40:sChoice = "NW_WRAITH";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 41:sChoice = "NW_ZOMBTYRANT";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 42:sChoice = "NW_ZOMBIE01";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 43:sChoice = "NW_ZOMBIE02";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 44:sChoice = "NW_ZOMBIEBOSS";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 45:sChoice = "NW_ZOMBWARR01";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 47:sChoice = "X2_SPIDERDEMO001";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 48:sChoice = "x2_erinyes";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 49:sChoice = "X2_PITFIEND001";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 50:sChoice = "X0_FORM_MYRMARCH";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 51:sChoice = "X0_FORM_QUEEN";
|
|
fCR = 20.0;
|
|
break;
|
|
|
|
case 52:sChoice = "X0_FORM_TASKMAST";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 53:sChoice = "X0_FORM_WARRIOR";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 54:sChoice = "X0_FORM_WORKER";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 55:sChoice = "X2_SLAADBLACK001";
|
|
fCR = 30.0;
|
|
break;
|
|
|
|
case 56:sChoice = "X2_SLAADWHITE001";
|
|
fCR = 25.0;
|
|
break;
|
|
|
|
case 57:sChoice = "X2_MINDFLAYER003";
|
|
fCR = 18.0;
|
|
break;
|
|
|
|
case 58:sChoice = "X2_DEMILICH001";
|
|
fCR = 24.0;
|
|
break;
|
|
|
|
case 59:sChoice = "X2_DRACOLICH001";
|
|
fCR = 43.0;
|
|
break;
|
|
|
|
case 60:sChoice = "";
|
|
fCR = 0.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
// PICK RANDOM BANDIT
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "b")
|
|
{
|
|
iCounter2 = 0; //Reset the counter
|
|
sChoice = "nil"; //Reset sChoice
|
|
while(sChoice != "")
|
|
{
|
|
switch(iCounter2)
|
|
{
|
|
case 0:sChoice = "NW_DUECLER001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 1:sChoice = "NW_DUECLER005";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 2:sChoice = "NW_DUECLER010";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 3:sChoice = "NW_DUECLER015";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 4:sChoice = "NW_DUECLER020";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 5:sChoice = "NW_DUEMAGE001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 6:sChoice = "NW_DUEMAGE005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 7:sChoice = "NW_DUEMAGE010";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 8:sChoice = "NW_DUEMAGE015";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 9:sChoice = "NW_DUEMAGE020";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 10:sChoice = "NW_DUEROGUE001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 11:sChoice = "NW_DUEROGUE005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 12:sChoice = "NW_DUEROGUE010";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 13:sChoice = "NW_DUEROGUE015";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 14:sChoice = "NW_DUEROGUE020";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 15:sChoice = "NW_DUEFIGHT001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 16:sChoice = "NW_DUEFIGHT005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 17:sChoice = "NW_DUEFIGHT010";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 19:sChoice = "NW_DUEFIGHT015";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 20:sChoice = "NW_DUEFIGHT020";
|
|
fCR = 14.0;
|
|
break;
|
|
|
|
case 21:sChoice = "NW_DWARFMERC001";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 22:sChoice = "NW_DWARFMERC002";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 23:sChoice = "NW_DWARFMERC003";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 24:sChoice = "NW_DWARFMERC004";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 25:sChoice = "NW_DWARFMERC005";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 26:sChoice = "NW_DWARFMERC006";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 27:sChoice = "NW_DROWROGUE001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 28:sChoice = "NW_DROWROGUE005";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 29:sChoice = "NW_DROWROGUE010";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 30:sChoice = "NW_DROWROGUE015";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 31:sChoice = "NW_DROWROGUE020";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 33:sChoice = "NW_DROWMAGE001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 34:sChoice = "NW_DROWMAGE005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 35:sChoice = "NW_DROWMAGE010";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 36:sChoice = "NW_DROWMAGE015";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 37:sChoice = "NW_DROWMAGE020";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 38:sChoice = "NW_DROWFIGHT001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 39:sChoice = "NW_DROWFIGHT005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 40:sChoice = "NW_DROWFIGHT010";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 41:sChoice = "NW_DROWFIGHT015";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 42:sChoice = "NW_DROWFIGHT020";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 43:sChoice = "NW_DROWCLER001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 44:sChoice = "NW_DROWCLER005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 45:sChoice = "NW_DROWCLER010";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 46:sChoice = "NW_DROWCLER015";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 47:sChoice = "NW_DROWCLER020";
|
|
fCR = 16.0;
|
|
break;
|
|
|
|
case 48:sChoice = "NW_HALFMERC001";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 49:sChoice = "NW_HALFMERC002";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 50:sChoice = "NW_HALFMERC003";
|
|
fCR = 5.0;
|
|
break;
|
|
|
|
case 51:sChoice = "NW_HALFMERC004";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 52:sChoice = "NW_HALFMERC005";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 53:sChoice = "NW_HALFMERC006";
|
|
fCR = 13.0;
|
|
break;
|
|
|
|
case 54:sChoice = "NW_BANDIT006";
|
|
fCR = 7.0;
|
|
break;
|
|
|
|
case 55:sChoice = "NW_BANDIT001";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 56:sChoice = "NW_BANDIT002";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 57:sChoice = "NW_BANDIT007";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 58:sChoice = "NW_BANDIT004";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 59:sChoice = "NW_BANDIT005";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 60:sChoice = "NW_BANDIT003";
|
|
fCR = 1.0;
|
|
break;
|
|
|
|
case 61:sChoice = "NW_GYPSY006";
|
|
fCR = 11.0;
|
|
break;
|
|
|
|
case 62:sChoice = "NW_GYPSY005";
|
|
fCR = 8.0;
|
|
break;
|
|
|
|
case 63:sChoice = "NW_GYPSY004";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 64:sChoice = "NW_GYPSY007";
|
|
fCR = 10.0;
|
|
break;
|
|
|
|
case 65:sChoice = "NW_GYPSY002";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 66:sChoice = "NW_GYPSY001";
|
|
fCR = 0.5;
|
|
break;
|
|
|
|
case 67:sChoice = "NW_GYPSY003";
|
|
fCR = 4.0;
|
|
break;
|
|
|
|
case 68:sChoice = "NW_HUMANMERC005";
|
|
fCR = 12.0;
|
|
break;
|
|
|
|
case 69:sChoice = "NW_HUMANMERC006";
|
|
fCR = 15.0;
|
|
break;
|
|
|
|
case 70:sChoice = "NW_HUMANMERC001";
|
|
fCR = 2.0;
|
|
break;
|
|
|
|
case 71:sChoice = "NW_HUMANMERC002";
|
|
fCR = 3.0;
|
|
break;
|
|
|
|
case 72:sChoice = "NW_HUMANMERC003";
|
|
fCR = 6.0;
|
|
break;
|
|
|
|
case 73:sChoice = "NW_HUMANMERC004";
|
|
fCR = 9.0;
|
|
break;
|
|
|
|
case 74:sChoice = "";
|
|
fCR = 12.0;
|
|
break;
|
|
}
|
|
if(fCR >= fMinCR && fCR <= fMaxCR && GetStringLowerCase(sChoice) != "")
|
|
{
|
|
SetLocalString(oMod, "re_sCreatureList" + IntToString(iVarNum), sChoice);
|
|
iVarNum++;
|
|
}
|
|
iCounter2++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// PICK RANDOM CREATURE FROM CUSTOM TABLE
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(bCustom
|
|
&& (GetSubString(sCreatureTable, iCounter1, 1) == "0" || StringToInt(GetSubString(sCreatureTable, iCounter1, 1)) > 0))
|
|
{
|
|
sBuild = sBuild + GetSubString(sCreatureTable, iCounter1, 1);
|
|
}
|
|
else if(bCustom)
|
|
{
|
|
SetLocalInt(OBJECT_SELF, "re_iVarNum", iVarNum);
|
|
SetLocalFloat(OBJECT_SELF, "re_fMinCR", fMinCR);
|
|
SetLocalFloat(OBJECT_SELF, "re_fMaxCR", fMaxCR);
|
|
ExecuteScript("re_custom" + sBuild, OBJECT_SELF);
|
|
iVarNum = GetLocalInt(OBJECT_SELF, "re_iVarNum");
|
|
DeleteLocalInt(OBJECT_SELF, "re_iVarNum");
|
|
DeleteLocalFloat(OBJECT_SELF, "re_fMinCR");
|
|
DeleteLocalFloat(OBJECT_SELF, "re_fMaxCR");
|
|
bCustom = FALSE;
|
|
sBuild = "";
|
|
}
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "x")
|
|
{
|
|
bCustom = TRUE;
|
|
}
|
|
}
|
|
|
|
// PICK RANDOM CREATURE FROM COMMONER TABLE (For the commoner spawner)
|
|
for(iCounter1 = 0; iCounter1 <= GetStringLength(sCreatureTable); iCounter1++)
|
|
{
|
|
if(bCustom
|
|
&& (GetSubString(sCreatureTable, iCounter1, 1) == "0" || StringToInt(GetSubString(sCreatureTable, iCounter1, 1)) > 0))
|
|
{
|
|
sBuild = sBuild + GetSubString(sCreatureTable, iCounter1, 1);
|
|
}
|
|
else if(bCustom)
|
|
{
|
|
ExecuteScript("re_commoner" + sBuild, OBJECT_SELF);
|
|
iVarNum = GetLocalInt(OBJECT_SELF, "re_iVarNum");
|
|
DeleteLocalInt(OBJECT_SELF, "re_iVarNum");
|
|
bCustom = FALSE;
|
|
sBuild = "";
|
|
}
|
|
if(GetSubString(sCreatureTable, iCounter1, 1) == "z")
|
|
{
|
|
bCustom = TRUE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// SELECT THE RANDOM CREATURE
|
|
if(!iVarNum) return "";
|
|
int iRnd = Random(iVarNum);
|
|
string sCreature = GetLocalString(oMod, "re_sCreatureList" + IntToString(iRnd));
|
|
// Copy the Min and Max number of creatures from the corresponding simulated "array" to the
|
|
// root variable in the module object.
|
|
SetLocalInt(oMod, "re_iMinNumberOfCreatures", GetLocalInt(oMod, "re_iMinNumberOfCreatures" + IntToString(iRnd)));
|
|
SetLocalInt(oMod, "re_iMaxNumberOfCreatures", GetLocalInt(oMod, "re_iMaxNumberOfCreatures" + IntToString(iRnd)));
|
|
// Reset the local module variables that store min and max number of creatures
|
|
// so we don't use old numbers at a later time.
|
|
for(iCounter3 = 1; iCounter3 <= iVarNum; iCounter3++)
|
|
{
|
|
SetLocalInt(oMod, "re_iMinNumberOfCreatures" + IntToString(iCounter3), 0);
|
|
SetLocalInt(oMod, "re_iMaxNumberOfCreatures" + IntToString(iCounter3), 0);
|
|
}
|
|
return sCreature;
|
|
}
|