int glNumOfAreas = 6;
string[] gvEnemies = { "brute", "grunt" }
//---------------------------------------------------------------------
// This chooses what enemy to pick
string ChoseEnemy()
{
int lIndex = RandInt(0, 1);
return gvEnemies[lIndex];
}
// This inits an enemy
void InitEnemies()
{
// General setup
SetEntityActive("servant_ChoseEnemy()_*, false);
SetEnemyDisabled("servant_ChoseEnemy()_*, false);
ClearEnemyPatrolNodes("servant_ChoseEnemy()_*);
////////////////
// Different pathnodes
// 1
if(RandInt(0,1)==1) AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_8", RandFloat(1,7), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_80", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_83", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_78", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_41", RandFloat(1,2), "");
else AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_3", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_1", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_4", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_5", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_8", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_14", RandFloat(1,1), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_1", "PathNodeArea_17", RandFloat(1,1), "");
//////////////////////////
// 2
if(RandInt(0,1)==1) AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_78", RandFloat(1,7), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_83", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_83", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_8", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_14", RandFloat(1,2), "");
else AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_85", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_88", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_56", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_57", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_55", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_59", RandFloat(1,1), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_2", "PathNodeArea_64", RandFloat(1,1), "");
//////////////////////////
// 3
AddEnemyPatrolNode("servant_ChoseEnemy()_3", "PathNodeArea_59", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_3", "PathNodeArea_55", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_3", "PathNodeArea_57", RandFloat(1,2), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_3", "PathNodeArea_88", RandFloat(1,1), "");
//////////////////////////
// 4
if(RandInt(0,1)==1) AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_71", RandFloat(1,7), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_74", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_30", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_34", RandFloat(1,3), "");
else AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_65", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_64", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_59", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_4", "PathNodeArea_55", RandFloat(1,3), "");
//////////////////////////
// 5
if(RandInt(0,1)==1) AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_17", RandFloat(1,7), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_14", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_8", RandFloat(1,5), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_5", RandFloat(1,3), "");
else AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_24", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_27", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_30", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_5", "PathNodeArea_74", RandFloat(1,3), "");
//////////////////////////
// 6
AddEnemyPatrolNode("servant_ChoseEnemy()_6", "PathNodeArea_43", RandFloat(1,2), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_6", "PathNodeArea_41", RandFloat(1,3), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_6", "PathNodeArea_78", RandFloat(1,2), "");
AddEnemyPatrolNode("servant_ChoseEnemy()_6", "PathNodeArea_83", RandFloat(1,1), "");
}
// Helper to reset all enemy event related stuff
void ResetEnemyEvent()
{
SetLocalVarInt("EnemyEventActive", 0); //Clear that any enemy event is in progress!
RemoveTimer("EnemyEventStart"); //In case the timer has ended yet.
}
//---------------------------------------------------------------------
void EnemyDisabled(string &in asEnemy, string &in asType)
{
ResetEnemyEvent();
AddDebugMessage("Disabled Enemy: "+ asEnemy, false);
}
//---------------------------------------------------------------------
void CollideEnemyEvent(string &in asParent, string &in asChild, int alState)
{
/////////////////////////
//Check if OK to start event
//There can only be one enemy event triggered at any time!
if(GetLocalVarInt("EnemyEventActive")==1) return;
SetLocalVarInt("EnemyEventActive",1);
//Get index of area (and the enemy)
int lIdx = GetLocalVarInt(asChild+"_Idx");
SetLocalVarInt("EnemyEvent_Idx",lIdx);
/////////////////////////
//Start up event
//Area only triggered once!
SetEntityActive(asChild, false);
//Use timer so it enconter feels more random
AddTimer("EnemyEventStart", RandFloat(0.5, 3.5), "TimerEnemyEventStart");
//Setup checkpoint
string sCheckPointStartPos = "PlayerStartArea_"+RandInt(2,4);
CheckPoint("checkpoint", sCheckPointStartPos, "CheckPointEnemy", "Hints", "Regular");
}
//Used a delay start of enemy to make it feel more random.
void TimerBruteEventStart(string &in asTimer)
{
int lIdx = GetLocalVarInt("EnemyEvent_Idx");
SetEntityActive("servant_ChoseEnemy()_"+lIdx, true);
AddDebugMessage("Started enemy event: "+ "servant_ChoseEnemy()_"+lIdx, false);
}
//---------------------------------------------------------------------
void CheckPointEnemy(string &in asName, int alCount)
{
ResetEnemyEvent();
InitEnemies(); //Reset all enemy paths
//Enable a random area
int lIdx = RandInt(1, glNumOfAreas);
SetEntityActive("Area_Event_"+lIdx, true);
AddDebugMessage("Checkpoint activated Random Area: "+lIdx, false);
}
////////////////////////////
// Run first time starting map
void OnStart()
{
SetMapDisplayNameEntry("SewerSouth");
//Enemies
for(int i=1; i<=glNumOfAreas; ++i)
{
AddEntityCollideCallback("Player", "Area_Event_"+i, "CollideEnemyEvent", false, 1);
SetLocalVarInt("Area_Event_"+i+"_Idx", i);
}
}
Appearntly theres a unexpected end of file or so, and I am really bad at locating those. Would you guys help me a little?