1119 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1119 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #include "rd_treasure"
 | |
| //#include "x0_i0_treasure"
 | |
| #include "rd_level"
 | |
| #include "nw_i0_tool"
 | |
| 
 | |
| object GetCampCreature(string sEncounter,string sCampType, int iType, int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0);
 | |
| object GetCampCreature2(string sEncounter,string sCampType, int iType, int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0);
 | |
| object GetCampCreature3(string sEncounter,string sCampType, int iType, int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0);
 | |
| object GetCampMob(int iType, string sEncounter, string sCampType, int iLevel, int iBaseStart, int iBase, int iBaseMax, int iCampType, int iUnique = 1, int iOverride = 0);
 | |
| void SpawnCampMob(int iType, string sEncounter, string sCampType, int iLevel, int iBaseStart, int iBase,  int iBaseMax, int iCampType, int iUnique = 1, int iOverride = 0);
 | |
| object GetCreature(string sEncounter, string sCreature);
 | |
| object GetWanderingCreature(string sEncounter, string sCreature);
 | |
| int AdjustLevel(int iLevel);
 | |
| object GetRaceCreature(string sCampType,location lLoc, int iLevel);
 | |
| object GetRaceCreatures(string sCampType,location lLoc, int iLevel, int iNum=0);
 | |
| string BossMob(string sCreature);
 | |
| void FixItemComponent(object oCreature, string sTag);
 | |
| void FixItemComponents(object oCreature);
 | |
| 
 | |
| void SpawnCampMob(int iType, string sEncounter, string sCampType, int iLevel, int iBaseStart, int iBase,  int iBaseMax, int iCampType, int iUnique = 1, int iOverride = 0)
 | |
| {
 | |
| //wrapper function
 | |
| GetCampMob(iType, sEncounter, sCampType, iLevel, iBaseStart, iBase,iBaseMax, iCampType,iUnique,iOverride);
 | |
| }
 | |
| 
 | |
| object GetCampMob(int iType, string sEncounter, string sCampType, int iLevel, int iBaseStart, int iBase,  int iBaseMax, int iCampType, int iUnique = 1, int iOverride = 0)
 | |
| {
 | |
| string sCreature;
 | |
| string sCampTypeCheck;
 | |
| object oCreature;
 | |
| int iCreature;
 | |
| 
 | |
| //Check for existing creature first before spawning new one.
 | |
| iCreature = 0;
 | |
| oCreature = GetObjectByTag(sEncounter + "_S");
 | |
| if (GetIsObjectValid(oCreature))
 | |
|     {
 | |
|     sCampTypeCheck= GetLocalString(oCreature,"CampType");
 | |
|     if (sCampTypeCheck == sCampType)
 | |
|         iCreature = 1;
 | |
|     if (iOverride > 0)
 | |
|         iCreature = 0;
 | |
|     }
 | |
| 
 | |
| if (iCreature == 0  || iUnique == 0)
 | |
|     {
 | |
|     if (iCampType == 1)
 | |
|         {
 | |
|         oCreature = GetCampCreature(sEncounter,sCampType,iType,iLevel,iBaseStart, iBase, iBaseMax,iOverride);
 | |
|         } else {
 | |
|         if (iCampType == 2)
 | |
|             oCreature = GetCampCreature2(sEncounter,sCampType,iType,iLevel,iBaseStart, iBase, iBaseMax, iOverride);
 | |
|         else
 | |
|             oCreature = GetCampCreature3(sEncounter,sCampType,iType,iLevel,iBaseStart, iBase, iBaseMax, iOverride);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iType == 1)
 | |
|     {
 | |
|     if (Random(5)==0)
 | |
|         {
 | |
|         AssignCommand(oCreature,ActionRandomWalk());
 | |
|         DelayCommand(3.0f,AssignCommand(oCreature,ClearAllActions()));
 | |
|         }
 | |
|     if (Random(20)==0)
 | |
|         SetActionMode(oCreature,ACTION_MODE_DETECT,TRUE);
 | |
|     }
 | |
| 
 | |
| if (iType == 2)
 | |
|     {
 | |
|     if (Random(10)==0)
 | |
|         {
 | |
|         AssignCommand(oCreature,ActionRandomWalk());
 | |
|         DelayCommand(3.0f,AssignCommand(oCreature,ClearAllActions()));
 | |
|         }
 | |
|     }
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| //GetCampCreature is for leveled up campsites
 | |
| object GetCampCreature(string sEncounter, string sCampType,int iType,int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0)
 | |
| {
 | |
| object oCreature;
 | |
| object oEncounter;
 | |
| location lLoc;
 | |
| string sType;
 | |
| string sCreature;
 | |
| string sCreatureBase;
 | |
| string sEncounterName;
 | |
| string sOriginalCreature;
 | |
| int iRandom;
 | |
| int iMobTargetLevel;
 | |
| int iMobLevel;
 | |
| int iNewLevel;
 | |
| int iLevels;
 | |
| int iMod;
 | |
| int iChance;
 | |
| int iItems;
 | |
| int iIndex;
 | |
| 
 | |
| oEncounter=GetObjectByTag(sEncounter);
 | |
| lLoc = GetLocation(oEncounter);
 | |
| 
 | |
| iRandom = Random(10) + 1;
 | |
| switch (iRandom)
 | |
|     {
 | |
|     case 1: case 2: case 3: sType = "f"; break;  //fighter
 | |
|     case 4: case 5: sType = "r"; break;  //rogue
 | |
|     case 6: sType = "m"; break;  //mage
 | |
|     case 7: case 8: sType = "c"; break;  //cleric
 | |
|     case 9: sType = "s"; break;  //special class
 | |
|     case 10: sType = "x"; break;  //special creature
 | |
|     }
 | |
| 
 | |
| //override with leader for boss spawn
 | |
| if (iType==99)
 | |
|     sType = "l";
 | |
| 
 | |
| iMobTargetLevel=iLevel;
 | |
| 
 | |
| if (iMobTargetLevel < 3)
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel--; break;
 | |
|         case 2: iMobTargetLevel; break;
 | |
|         case 3: iMobTargetLevel; break;
 | |
|         case 99: iMobTargetLevel++; break;
 | |
|         }
 | |
|     }
 | |
| else if (iMobTargetLevel < 6)
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel=iMobTargetLevel-2; break;
 | |
|         case 2: iMobTargetLevel--; break;
 | |
|         case 3: iMobTargetLevel; break;
 | |
|         case 99: iMobTargetLevel=iMobTargetLevel+1; break;
 | |
|         }
 | |
|     }
 | |
| else if (iMobTargetLevel < 10)
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel=iMobTargetLevel-2; break;
 | |
|         case 2: iMobTargetLevel; break;
 | |
|         case 3: iMobTargetLevel+1; break;
 | |
|         case 99: iMobTargetLevel=iMobTargetLevel+ Random(2) + 1; break;
 | |
|         }
 | |
|     }
 | |
| else if (iMobTargetLevel < 15)
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel=iMobTargetLevel-3; break;
 | |
|         case 2: iMobTargetLevel; break;
 | |
|         case 3: iMobTargetLevel+1; break;
 | |
|         case 99: iMobTargetLevel=iMobTargetLevel + Random(2) + 2; break;
 | |
|         }
 | |
|     }
 | |
| else if (iMobTargetLevel < 25)
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel=iMobTargetLevel-3; break;
 | |
|         case 2: iMobTargetLevel; break;
 | |
|         case 3: iMobTargetLevel+2; break;
 | |
|         case 99: iMobTargetLevel=iMobTargetLevel + Random(3) + 3; break;
 | |
|         }
 | |
|     }
 | |
| else
 | |
|     {
 | |
|     switch (iType)
 | |
|         {
 | |
|         case 1: iMobTargetLevel=iMobTargetLevel-2; break;
 | |
|         case 2: iMobTargetLevel+1; break;
 | |
|         case 3: iMobTargetLevel + Random(2) + 2; break;
 | |
|         case 99: iMobTargetLevel=iMobTargetLevel + Random(3)+4; break;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| iMobTargetLevel=AdjustLevel(iMobTargetLevel);
 | |
| 
 | |
| if (iMobTargetLevel>iBaseStart)
 | |
|     {
 | |
|     iMod = (iMobTargetLevel-iBaseStart)/iBase+1;
 | |
|     if (iMod>iBaseMax)
 | |
|         iMod=iBaseMax;
 | |
|     } else {
 | |
|     iMod=1;
 | |
|     }
 | |
| 
 | |
| if (iMod<1)
 | |
|     iMod=1;
 | |
| 
 | |
| sCreatureBase = "_" + IntToString(iMod);
 | |
| 
 | |
| sCreature = "en3_" + sCampType + "_" + sType + sCreatureBase;
 | |
| sOriginalCreature = sCreature;
 | |
| sCreature = BossMob(sCreature);
 | |
| sEncounterName = sEncounter + "_S";
 | |
| if (iOverride > 0)
 | |
|     sEncounterName = sEncounterName + IntToString(iOverride);
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE,sEncounterName);
 | |
| SetLocalString(oCreature,"CampType",sCampType);
 | |
| 
 | |
| //debug line
 | |
| //SendMessageToPC(GetFirstPC(),"Spawning " + sCreature);
 | |
| //Bad Tag Detection
 | |
| if (GetName(oCreature)=="")
 | |
|     {
 | |
|     string sMessage;
 | |
|     sMessage = sCreature + " did not spawn at " + sEncounter;
 | |
|     SendMessageToPC(GetFirstPC(),sMessage);
 | |
|     WriteTimestampedLogEntry(sMessage);
 | |
|     }
 | |
| 
 | |
| iMobLevel = GetHitDice(oCreature);
 | |
| 
 | |
| if (iMobLevel<iMobTargetLevel)
 | |
|     {
 | |
|     iLevels = iMobTargetLevel - iMobLevel;
 | |
|     iNewLevel = LevelMob(oCreature,iLevels);
 | |
|     AssignCommand(oCreature,ActionRest());
 | |
|     if (iNewLevel > 0)
 | |
|         {
 | |
|         if (iType == 99)
 | |
|             DelayCommand(0.5f,EquipMob(oCreature,1));
 | |
|         else
 | |
|             DelayCommand(0.5f,EquipMob(oCreature));
 | |
|         }
 | |
|     //debug line
 | |
|     //SendMessageToPC(GetFirstPC(),"Leveled " + GetName(oCreature) + " type " + IntToString(iType) + " to " + IntToString(iNewLevel) + " based on level " + IntToString(iLevel));
 | |
|     }
 | |
| 
 | |
| iMobLevel = GetHitDice(oCreature);
 | |
| 
 | |
| if (iType == 99)
 | |
|     {
 | |
|     if (GetLocalInt(GetFirstPC(),"Unlucky")==1)
 | |
|         iMobLevel=iMobLevel*2;
 | |
| 
 | |
|     iChance = iMobLevel/2;
 | |
|     if (sCreature != sOriginalCreature)
 | |
|         iChance = iChance + 25;
 | |
| 
 | |
|     if (Random(100)<iChance)
 | |
|         {
 | |
|         GetMagicItem(oCreature);
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| if (iType == 3)
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         SetLocalInt(oCreature,"Wander",1);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
| 
 | |
| if (iType == 2)
 | |
|     {
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 5)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom == 5)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Wander",Random(2)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iType == 1)
 | |
|     {
 | |
|     if (Random(5) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 4)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom <6)
 | |
|             SetLocalInt(oCreature,"Wander",Random(5)+2);
 | |
|         else if (iRandom < 8)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Scout",Random(4)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| AssignCommand(oCreature,ActionEquipMostEffectiveArmor());
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| //GetCampCreature2 is for non leveled up campsites
 | |
| object GetCampCreature2(string sEncounter, string sCampType,int iType,int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0)
 | |
| {
 | |
| object oCreature;
 | |
| object oEncounter;
 | |
| location lLoc;
 | |
| string sType;
 | |
| string sCreature;
 | |
| string sOriginalCreature;
 | |
| string sCreatureBase;
 | |
| string sEncounterName;
 | |
| int iRandom;
 | |
| int iMobLevel;
 | |
| int iChance;
 | |
| 
 | |
| iRandom = Random(10)+1;
 | |
| 
 | |
| if (iType == 1 && iRandom == 1)
 | |
|     iType = 2;
 | |
| else if (iType == 2 && iRandom == 1)
 | |
|     iType = 3;
 | |
| else if (iType == 2 && iRandom > 8)
 | |
|     iType = 1;
 | |
| else if (iType == 3 && iRandom > 8)
 | |
|     iType = 2;
 | |
| 
 | |
| switch (iType)
 | |
|     {
 | |
|     case 1: iRandom=Random(iBaseStart)+1;
 | |
|             sCreature = "en3_" + sCampType + "_1_" + IntToString(iRandom);
 | |
|             break;
 | |
|     case 2: iRandom=Random(iBase)+1;
 | |
|             sCreature = "en3_" + sCampType + "_2_" + IntToString(iRandom);
 | |
|             break;
 | |
|     case 3: iRandom=Random(iBaseMax)+1;
 | |
|             sCreature = "en3_" + sCampType + "_3_" + IntToString(iRandom);
 | |
|             break;
 | |
|     case 99: sCreature = "en3_" + sCampType + "_Boss";
 | |
|              break;
 | |
|     }
 | |
| 
 | |
| oEncounter=GetObjectByTag(sEncounter);
 | |
| lLoc = GetLocation(oEncounter);
 | |
| sOriginalCreature = sCreature;
 | |
| sCreature = BossMob(sCreature);
 | |
| sEncounterName = sEncounter + "_S";
 | |
| if (iOverride > 0)
 | |
|     sEncounterName = sEncounterName + IntToString(iOverride);
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE,sEncounterName);
 | |
| SetLocalString(oCreature,"CampType",sCampType);
 | |
| 
 | |
| //Bad Tag Detection
 | |
| if (GetName(oCreature)=="")
 | |
|     {
 | |
|     string sMessage;
 | |
|     sMessage = sCreature + " did not spawn at " + sEncounter;
 | |
|     SendMessageToPC(GetFirstPC(),sMessage);
 | |
|     WriteTimestampedLogEntry(sMessage);
 | |
|     }
 | |
| 
 | |
| if (iType == 99)
 | |
|     {
 | |
|     iMobLevel = GetLevelByPosition(1,oCreature) +
 | |
|          GetLevelByPosition(2,oCreature) +
 | |
|          GetLevelByPosition(3,oCreature);
 | |
| 
 | |
|     if (GetLocalInt(GetFirstPC(),"Unlucky")==1)
 | |
|         iMobLevel=iMobLevel*3;
 | |
| 
 | |
|     iChance = iMobLevel/2;
 | |
|     if (sCreature != sOriginalCreature)
 | |
|         iChance = iChance + 25;
 | |
| 
 | |
|     if (Random(100)<iChance)
 | |
|         GetMagicItem(oCreature);
 | |
| 
 | |
|     if (Random(100)<(iMobLevel/4+1))
 | |
|         CreateRandomItem(oCreature);
 | |
| 
 | |
| // Taking out undroppable items
 | |
| //    if (Random(100)<(iMobLevel*2))
 | |
| //        GetMagicItem(oCreature,FALSE);
 | |
|     }
 | |
| 
 | |
| if (iType == 3)
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         SetLocalInt(oCreature,"Wander",1);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
| 
 | |
| if (iType == 2)
 | |
|     {
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 5)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom == 5)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Wander",Random(2)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iType == 1)
 | |
|     {
 | |
|     if (Random(5) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 4)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom <6)
 | |
|             SetLocalInt(oCreature,"Wander",Random(5)+2);
 | |
|         else if (iRandom < 8)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Scout",Random(4)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| FixItemComponents(oCreature);
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| //GetCampCreature3 is for dragons
 | |
| object GetCampCreature3(string sEncounter, string sCampType,int iType,int iLevel, int iBaseStart, int iBase, int iBaseMax, int iOverride = 0)
 | |
| {
 | |
| object oCreature;
 | |
| object oEncounter;
 | |
| location lLoc;
 | |
| string sType;
 | |
| string sCreature;
 | |
| string sOriginalCreature;
 | |
| string sColor;
 | |
| string sEncounterName;
 | |
| int iRandom;
 | |
| int iAdjust;
 | |
| int iLevelTest;
 | |
| 
 | |
| 
 | |
| if (iType == 99)
 | |
|     {
 | |
|     iAdjust = Random(10)+1;
 | |
|     if (iAdjust < 2)
 | |
|         iLevelTest=iLevel-2;
 | |
|     else if (iAdjust < 4)
 | |
|         iLevelTest=iLevel-1;
 | |
|     else if (iAdjust < 8)
 | |
|         iLevelTest=iLevel;
 | |
|     else if (iAdjust < 10)
 | |
|         iLevelTest=iLevel+1;
 | |
|     else
 | |
|         iLevelTest=iLevel+2;
 | |
| 
 | |
|     if (iLevelTest<15)
 | |
|         sType = "001";
 | |
|     else if (iLevelTest < 19)
 | |
|         sType = "002";
 | |
|     else
 | |
|         sType = "003";
 | |
| 
 | |
| 
 | |
|     iRandom = 1;
 | |
|     if (sType=="001")
 | |
|         {
 | |
|         if (iLevel <11)
 | |
|             iRandom = 1;
 | |
|         if (iLevel <13)
 | |
|             iRandom = Random(3)+1;
 | |
|         else
 | |
|             iRandom=Random(4)+2;
 | |
|         }
 | |
|     else if (sType=="002")
 | |
|         {
 | |
|         if (iLevel <15)
 | |
|             iRandom = 1;
 | |
|         else
 | |
|             iRandom=Random(5)+1;
 | |
|         }
 | |
|     else
 | |
|         iRandom=Random(6)+1;
 | |
| 
 | |
|     switch (iRandom)
 | |
|         {
 | |
|         case 1: sColor = "WHITE"; break;
 | |
|         case 2: sColor = "BLACK"; break;
 | |
|         case 3: sColor = "BLUE"; break;
 | |
|         case 4: sColor = "GREEN"; break;
 | |
|         case 5: sColor = "RED"; break;
 | |
|         case 6: sColor = "SHADOW"; break;
 | |
|         }
 | |
| 
 | |
| 
 | |
|     sCreature = "NW_DRG" + sColor + sType;
 | |
|     if (sColor == "SHADOW")
 | |
|         sCreature = "X2_DRAGONSHAD001";
 | |
| 
 | |
|     if (sCampType == "dracolich")
 | |
|         sCreature = "X2_DRACOLICH001";
 | |
|     } else {
 | |
| 
 | |
|     if (iLevel <13)
 | |
|         iAdjust = 1;
 | |
|     else if (iLevel < 17)
 | |
|         iAdjust = Random(2)+1;
 | |
|     else
 | |
|         iAdjust = Random(3)+1;
 | |
| 
 | |
|     if (iAdjust == 1)
 | |
|         {
 | |
|         iRandom = Random(4)+1;
 | |
|         switch (iRandom)
 | |
|             {
 | |
|             case 1: sCreature = "x0_wyrmling_blk"; break;
 | |
|             case 2: sCreature = "x0_wyrmling_wht"; break;
 | |
|             case 3: sCreature = "x0_wyrmling_grn"; break;
 | |
|             case 4: sCreature = "x0_wyrmling_blu"; break;
 | |
|             case 5: sCreature = "x0_wyrmling_red"; break;
 | |
|             }
 | |
|         }
 | |
|     else if (iAdjust == 2)
 | |
|         sCreature = "en3_dragon_" + IntToString(Random(3)+1);
 | |
|     else
 | |
|         sCreature = "en3_dragon2_" + IntToString(Random(2)+1);
 | |
| 
 | |
|     if (sCampType == "dracolich")
 | |
|         if (Random(3)==1)
 | |
|                sCreature = "X2_DRAGONSHAD001";
 | |
|     }
 | |
| 
 | |
| oEncounter=GetObjectByTag(sEncounter);
 | |
| lLoc = GetLocation(oEncounter);
 | |
| sOriginalCreature = sCreature;
 | |
| sCreature = BossMob(sCreature);
 | |
| sEncounterName = sEncounter + "_S";
 | |
| if (iOverride > 0)
 | |
|     sEncounterName = sEncounterName + IntToString(iOverride);
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE,sEncounterName);
 | |
| SetLocalString(oCreature,"CampType",sCampType);
 | |
| 
 | |
| //Bad Tag Detection
 | |
| if (GetName(oCreature)=="")
 | |
|     SendMessageToPC(GetFirstPC(),"The dragon " + sCreature + " did not spawn at " + sEncounter);
 | |
| 
 | |
| if (iType == 99)
 | |
|     {
 | |
|     if (sCreature != sOriginalCreature)
 | |
|         CreateRandomItem(oCreature);
 | |
| 
 | |
|     if (sType == "001")
 | |
|         {
 | |
|         if (Random(2)==0)
 | |
|             {
 | |
|             GetMagicItem(oCreature);
 | |
|             }
 | |
|         if (Random(100)<5)
 | |
|             CreateRandomItem(oCreature);
 | |
|         }
 | |
|     else if (sType == "002")
 | |
|         {
 | |
|         GetMagicItem(oCreature);
 | |
|         if (Random(100)<10)
 | |
|             CreateRandomItem(oCreature);
 | |
|         }
 | |
|     else if (sType == "003")
 | |
|         {
 | |
|         GetMagicItem(oCreature);
 | |
|         if (Random(2)==0)
 | |
|             {
 | |
|             GetMagicItem(oCreature);
 | |
|             }
 | |
|         if (Random(100)<15)
 | |
|             CreateRandomItem(oCreature);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iType == 3)
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         SetLocalInt(oCreature,"Wander",1);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
| 
 | |
| if (iType == 2)
 | |
|     {
 | |
|     if (Random(10) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 5)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom == 5)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Wander",Random(2)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iType == 1)
 | |
|     {
 | |
|     if (Random(5) == 0)
 | |
|         {
 | |
|         iRandom=Random(10);
 | |
|         if (iRandom < 4)
 | |
|             SetLocalInt(oCreature,"Wander",1);
 | |
|         else if (iRandom <6)
 | |
|             SetLocalInt(oCreature,"Wander",Random(5)+2);
 | |
|         else if (iRandom < 8)
 | |
|             SetLocalInt(oCreature,"Scout",1);
 | |
|         else
 | |
|             SetLocalInt(oCreature,"Scout",Random(4)+2);
 | |
|         SetLocalInt(oCreature,"SpawnType",1);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| FixItemComponents(oCreature);
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| object GetCreature(string sEncounter, string sCreature)
 | |
| {
 | |
| object oCreature;
 | |
| location lLoc;
 | |
| string sOriginalCreature;
 | |
| 
 | |
| lLoc = GetLocation(GetObjectByTag(sEncounter));
 | |
| sOriginalCreature = sCreature;
 | |
| sCreature = BossMob(sCreature);
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE,sEncounter + "_S");
 | |
| FixItemComponents(oCreature);
 | |
| 
 | |
| if (sCreature != sOriginalCreature)
 | |
|     {
 | |
|     if (Random(2) == 0)
 | |
|         CreateRandomItem(oCreature);
 | |
|     else
 | |
|         GetMagicItem(oCreature);
 | |
|     }
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| int AdjustLevel(int iLevel)
 | |
| {
 | |
| int iRandom;
 | |
| 
 | |
| 
 | |
| iRandom = Random(10)+1;
 | |
| if (iRandom==5 || iRandom==6)
 | |
|     iLevel--;
 | |
| if (iRandom==8 || iRandom==9)
 | |
|     iLevel++;
 | |
| 
 | |
| 
 | |
| if (iLevel<1)
 | |
|     iLevel=1;
 | |
| if (iLevel>40)
 | |
|     iLevel=40;
 | |
| 
 | |
| return iLevel;
 | |
| }
 | |
| 
 | |
| object GetWanderingCreature(string sEncounter, string sCreature)
 | |
| {
 | |
| object oCreature;
 | |
| location lLoc;
 | |
| string sOriginalCreature;
 | |
| 
 | |
| lLoc = GetLocation(GetObjectByTag(sEncounter));
 | |
| sOriginalCreature = sCreature;
 | |
| sCreature = BossMob(sCreature);
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE,sEncounter + "_W");
 | |
| 
 | |
| if (sCreature != sOriginalCreature)
 | |
|     {
 | |
|     if (Random(2) == 0)
 | |
|         CreateRandomItem(oCreature);
 | |
|     else
 | |
|         GetMagicItem(oCreature);
 | |
|     }
 | |
| 
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| object GetRaceCreatures(string sCampType,location lLoc, int iLevel, int iNum=0)
 | |
| {
 | |
| int iNumber;
 | |
| int iCount;
 | |
| object oCreature;
 | |
| 
 | |
| if (iNum == 0)
 | |
|     {
 | |
|     iNum = iLevel/4+1;
 | |
|     if (iNum>4)
 | |
|         iNum=4;
 | |
|     }
 | |
| 
 | |
| iNumber=Random(iNum)+1;
 | |
| 
 | |
| if (iNumber > 2 && iLevel < 3)
 | |
|     iNumber = 2;
 | |
| if (iNumber == 4 && iLevel < 7)
 | |
|     iNumber = 3;
 | |
| 
 | |
| iCount = 1;
 | |
| while (iCount <= iNumber)
 | |
|     {
 | |
|     oCreature = GetRaceCreature(sCampType,lLoc,iLevel);
 | |
|     iCount++;
 | |
|     }
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| object GetRaceCreature(string sCampType,location lLoc, int iLevel)
 | |
| {
 | |
| object oCreature;
 | |
| object oEncounter;
 | |
| string sType;
 | |
| string sCreature;
 | |
| string sCreatureBase;
 | |
| int iRandom;
 | |
| int iMobTargetLevel;
 | |
| int iMobLevel;
 | |
| int iNewLevel;
 | |
| int iLevels;
 | |
| int iMod;
 | |
| int iBaseStart;
 | |
| int iBase;
 | |
| int iBaseMax;
 | |
| 
 | |
| iRandom = Random(10) + 1;
 | |
| switch (iRandom)
 | |
|     {
 | |
|     case 1: case 2: case 3: sType = "f"; break;  //fighter
 | |
|     case 4: case 5: sType = "r"; break;  //rogue
 | |
|     case 6: sType = "m"; break;  //mage
 | |
|     case 7: case 8: sType = "c"; break;  //cleric
 | |
|     case 9: sType = "s"; break;  //special class
 | |
|     case 10: sType = "x"; break;  //special creature
 | |
|     }
 | |
| 
 | |
| 
 | |
| if (iLevel > 15)
 | |
|     {
 | |
|     iMobTargetLevel=iLevel + Random(6) - 3;
 | |
|     } else {
 | |
|     if (iLevel > 5)
 | |
|         {
 | |
|         iMobTargetLevel=iLevel + Random(3) - 2;
 | |
|         } else {
 | |
|         iMobTargetLevel=iLevel + Random(2) - 1;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| if (iMobTargetLevel < 1)
 | |
|     iMobTargetLevel = 1;
 | |
| 
 | |
| iBaseStart = 1;
 | |
| iBase=1;
 | |
| iBaseMax=1;
 | |
| 
 | |
| if (iMobTargetLevel>iBaseStart)
 | |
|     {
 | |
|     iMod = (iMobTargetLevel-iBaseStart)/iBase+1;
 | |
|     if (iMod>iBaseMax)
 | |
|         iMod=iBaseMax;
 | |
|     } else {
 | |
|     iMod=1;
 | |
|     }
 | |
| sCreatureBase = "_" + IntToString(iMod);
 | |
| 
 | |
| sCreature = "en3_" + sCampType + "_" + sType + sCreatureBase;
 | |
| oCreature=CreateObject(OBJECT_TYPE_CREATURE, sCreature,lLoc,FALSE);
 | |
| 
 | |
| //debug line
 | |
| //SendMessageToPC(GetFirstPC(),"Spawning " + sCreature);
 | |
| //Bad Tag Detection
 | |
| if (GetName(oCreature)=="")
 | |
|     SendMessageToPC(GetFirstPC(),sCreature + " did not spawn.");
 | |
| 
 | |
| iMobLevel = GetLevelByPosition(1,oCreature) +
 | |
|          GetLevelByPosition(2,oCreature) +
 | |
|          GetLevelByPosition(3,oCreature);
 | |
| 
 | |
| if (iMobLevel<iMobTargetLevel)
 | |
|     {
 | |
|     iLevels = iMobTargetLevel - iMobLevel;
 | |
|     iNewLevel = LevelMob(oCreature,iLevels);
 | |
|     AssignCommand(oCreature,ActionRest());
 | |
|     if (iNewLevel > 0)
 | |
|         EquipMob(oCreature);
 | |
|     //debug line
 | |
|     //SendMessageToPC(GetFirstPC(),"Leveled " + GetName(oCreature) + " to " + IntToString(iNewLevel));
 | |
|     }
 | |
| 
 | |
| return oCreature;
 | |
| }
 | |
| 
 | |
| string BossMob(string sCreature)
 | |
| {
 | |
| string sBoss;
 | |
| int iRandom;
 | |
| int iFlag;
 | |
| 
 | |
| sBoss="";
 | |
| iFlag = 1;
 | |
| 
 | |
| if (sCreature == "en3_undead1_boss")
 | |
|     sBoss = "undead1_boss" + IntToString(Random(3)+1);
 | |
| 
 | |
| if (sCreature == "en3_undead6_boss")
 | |
|     sBoss = "undead6_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_golem1_boss")
 | |
|     sBoss = "golem1_boss" + IntToString(Random(3)+1);
 | |
| 
 | |
| if (sCreature == "en3_golem2_boss")
 | |
|     sBoss = "golem2_boss" + IntToString(Random(3)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon1_boss")
 | |
|     sBoss = "summon1_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon2_boss")
 | |
|     sBoss = "summon2_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon3_boss")
 | |
|     sBoss = "summon3_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon4_boss")
 | |
|     sBoss = "summon4_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon6_boss")
 | |
|     sBoss = "summon6_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_summon5_boss")
 | |
|     sBoss = "summon5_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_slaad3_boss")
 | |
|     sBoss = "slaad3_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_demon_boss")
 | |
|     sBoss = "demon_boss" + IntToString(Random(2)+1);
 | |
| 
 | |
| if (sCreature == "en3_slaad1_boss")
 | |
|     sBoss = "slaad1_boss1";
 | |
| 
 | |
| if (sCreature == "en3_slaad2_boss")
 | |
|     sBoss = "slaad2_boss1";
 | |
| 
 | |
| if (sCreature == "en3_harpy_boss")
 | |
|     sBoss = "harpy_boss1";
 | |
| 
 | |
| if (sCreature == "en3_unkempt_boss")
 | |
|     sBoss = "unkempt_boss1";
 | |
| 
 | |
| if (sCreature == "en3_drider1_boss")
 | |
|     sBoss = "drider1_boss1";
 | |
| 
 | |
| if (sCreature == "en3_giant_boss")
 | |
|     sBoss = "giant_boss1";
 | |
| 
 | |
| if (sCreature == "en3_troll_boss")
 | |
|     sBoss = "troll_boss1";
 | |
| 
 | |
| if (sCreature == "en3_gnoll_boss")
 | |
|     sBoss = "gnoll_boss1";
 | |
| 
 | |
| if (sCreature == "en3_medusa")
 | |
|     sBoss = "medusa_boss1";
 | |
| 
 | |
| if (sCreature == "en3_stinger_boss")
 | |
|     sBoss = "stinger_boss1";
 | |
| 
 | |
| if (sCreature == "en3_bugbear_boss")
 | |
|     sBoss = "bugbear_boss1";
 | |
| 
 | |
| if (sCreature == "en3_kobold_boss")
 | |
|     sBoss = "kobold_boss1";
 | |
| 
 | |
| if (sCreature == "en3_vampire_l_1")
 | |
|     sBoss = "en3_vampire_" + IntToString(Random(3)+1);
 | |
| 
 | |
| if (sCreature == "en3_bandit_l_1")
 | |
|     sBoss = "bandit_1";
 | |
| 
 | |
| if (sCreature == "en3_bandit_l_2")
 | |
|     sBoss = "bandit_2";
 | |
| 
 | |
| if (sCreature == "en3_bandit_l_3")
 | |
|     sBoss = "bandit_3";
 | |
| 
 | |
| if (sCreature == "en3_merc_l_1")
 | |
|     sBoss = "merc_1";
 | |
| 
 | |
| if (sCreature == "en3_merc_l_2")
 | |
|     sBoss = "merc_2";
 | |
| 
 | |
| if (sCreature == "en3_merc_l_3")
 | |
|     sBoss = "merc_3";
 | |
| 
 | |
| if (sCreature == "en3_shade_l_1")
 | |
|     sBoss = "shade_1";
 | |
| 
 | |
| if (sCreature == "en3_halfling_l_1")
 | |
|     sBoss = "halfling_1";
 | |
| 
 | |
| if (sCreature == "en3_elf_l_1")
 | |
|     sBoss = "elf_1";
 | |
| 
 | |
| if (sCreature == "en3_drow_l_1")
 | |
|     sBoss = "drow_1";
 | |
| 
 | |
| if (sCreature == "en3_dwarf_l_1")
 | |
|     sBoss = "dwarf_1";
 | |
| 
 | |
| if (sCreature == "en3_duergar_l_1")
 | |
|     sBoss = "duergar_1";
 | |
| 
 | |
| if (sCreature == "en3_angelic_l_1")
 | |
|     sBoss = "angelic_1";
 | |
| 
 | |
| if (sCreature == "en3_fiend_l_1")
 | |
|     sBoss = "fiend_1";
 | |
| 
 | |
| if (sCreature == "en3_orc_l_2")
 | |
|     sBoss = "orc_2";
 | |
| 
 | |
| if (sCreature == "en3_orc_l_4")
 | |
|     sBoss = "orc_4";
 | |
| 
 | |
| if (sCreature == "en3_minotaur_l_1")
 | |
|     sBoss = "minotaur_1";
 | |
| 
 | |
| if (sCreature == "en3_minotaur_l_3")
 | |
|     sBoss = "minotaur_3";
 | |
| 
 | |
| if (sCreature == "en3_lizard_l_1")
 | |
|     sBoss = "lizard_1";
 | |
| 
 | |
| if (sCreature == "en3_lizard_l_2")
 | |
|     sBoss = "lizard_1";
 | |
| 
 | |
| if (sCreature == "en3_goblin_l_3")
 | |
|     sBoss = "goblin_3";
 | |
| 
 | |
| if (sCreature == "en3_giant_l_1")
 | |
|     sBoss = "giant_1";
 | |
| 
 | |
| if (sCreature == "en3_giant_l_3")
 | |
|     sBoss = "giant_3";
 | |
| 
 | |
| if (sCreature == "en3_ogre_l_2")
 | |
|     sBoss = "ogre_2";
 | |
| 
 | |
| if (sCreature == "en3_beholdermage")
 | |
|     sBoss = "en3_beholderboss";
 | |
| 
 | |
| if (sCreature == "en3_CYCLOPSA")
 | |
|     sBoss = "en3_CYCLOPSboss";
 | |
| 
 | |
| if (sCreature == "en3_SATYR")
 | |
|     sBoss = "en3_SATYRboss";
 | |
| 
 | |
| if (sCreature == "en3_cambion")
 | |
|     sBoss = "en3_cambionboss";
 | |
| 
 | |
| if (sCreature == "en3_rakshasa")
 | |
|     sBoss = "en3_rakshasaboss";
 | |
| 
 | |
| if (sCreature == "NW_WEREWOLF")
 | |
|     sBoss = "en3_Werewolfboss";
 | |
| 
 | |
| if (sCreature == "EN3_TIEFLINGN1")
 | |
|     sBoss = "en3_tiefboss";
 | |
| 
 | |
| if (sCreature == "NW_DRGBLACK003")
 | |
|     sBoss = "en3_DRGBLACKboss";
 | |
| 
 | |
| if (sCreature == "NW_DRGRED003")
 | |
|     sBoss = "en3_DRGREDboss";
 | |
| 
 | |
| if (sCreature == "en3_monkevil")
 | |
|     sBoss = "en3_monkevil2";
 | |
| 
 | |
| if (sCreature == "en3_paladingood")
 | |
|     sBoss = "en3_paladingood2";
 | |
| 
 | |
| if (sCreature == "en3_demilich")
 | |
|     sBoss = "en3_azethoth";
 | |
| 
 | |
| if (sCreature == "en3_spider2_boss")
 | |
|     sBoss = "EN3_BOSSSPIDER";
 | |
| 
 | |
| if (sCreature == "EN3_BEARDIREBOSS")
 | |
|     sBoss = "EN3_BOSSBEARDIRE";
 | |
| 
 | |
| if (sCreature == "en3_trog_boss")
 | |
|     sBoss = "trog_boss";
 | |
| 
 | |
| if (sCreature == "en3_stirge_boss")
 | |
|     sBoss = "stirge_boss";
 | |
| 
 | |
| if (sCreature == "en3_blackguard")
 | |
|     sBoss = "en3_bgboss";
 | |
| if (sCreature == "en4_ctorm")
 | |
|     sBoss = "en4_ctboss";
 | |
| if (sCreature == "en3_gnome_l_1")
 | |
|     sBoss = "en3_gnome_boss";
 | |
| if (sCreature == "en3_human_l_1")
 | |
|     sBoss = "en3_human_boss";
 | |
| if (sCreature == "en3_PLANETAR1")
 | |
|     sBoss = "en3_pboss";
 | |
| 
 | |
| if (sCreature == "en4_mindflayer")
 | |
|     sBoss = "en4_mfboss";
 | |
| 
 | |
| if (sCreature == "en3_kobold_boss")
 | |
|     sBoss = "kobold_boss";
 | |
| 
 | |
| if (sBoss == "")
 | |
|     iFlag = 0;
 | |
| 
 | |
| iRandom=Random(20)+1;
 | |
| if (GetLocalInt(GetModule(),"UniqueBoss") == 1)
 | |
|     iRandom=1;
 | |
| if (iRandom < 4 && iFlag == 1)
 | |
|     if (GetLocalInt(GetModule(),sBoss) == 0)
 | |
|         {
 | |
|         sCreature=sBoss;
 | |
|         SetLocalInt(GetModule(),sBoss,1);
 | |
|         }
 | |
| 
 | |
| return sCreature;
 | |
| }
 | |
| 
 | |
| void FixItemComponents(object oCreature)
 | |
| {
 | |
| string sTag;
 | |
| 
 | |
| sTag = "en4_bargskin";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_ostinger";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_mheart";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_lichdust";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_demonhide";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC14";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC09";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC10";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_salskin";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_rscale";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_bbvsack";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC17";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_beye";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_igtongue";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_wessence";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_ceye";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_ftooth";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC06";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "NW_IT_MSMLMISC19";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| 
 | |
| sTag = "en3_seye";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_lichskull";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en3_igeye";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_cfeather";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_btail";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_gheart";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_mskull";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_cubeooze";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_mfstalk";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_mspike";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_ghair";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| sTag = "en4_card";
 | |
| FixItemComponent(oCreature,sTag);
 | |
| 
 | |
| }
 | |
| 
 | |
| void FixItemComponent(object oCreature, string sTag)
 | |
| {
 | |
| object oItem;
 | |
| 
 | |
| if (HasItem(oCreature,sTag))
 | |
|     {
 | |
|     oItem = GetItemPossessedBy(oCreature, sTag);
 | |
|     if (Random(3)>0)
 | |
|         DestroyObject(oItem);
 | |
|     }
 | |
| }
 |