aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut370
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_forwardbase_kodai_fd.nut8
2 files changed, 217 insertions, 161 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
index 5e5692e0..75d89a2d 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
@@ -181,23 +181,29 @@ void function OnNpcDeath( entity victim, entity attacker, var damageInfo )
if ( findIndex != -1 )
{
file.spawnedNPCs.remove( findIndex )
- SetGlobalNetInt( "FD_AICount_Current", file.spawnedNPCs.len() )
- string name = victim.GetTargetName()
- int aitype = FD_GetAITypeID_ByString(name)
- try
+ switch(FD_GetAITypeID_ByString(victim.GetTargetName())) //FD_GetAINetIndex_byAITypeID does not support all titan ids
{
- if (GetGlobalNetInt(FD_GetAINetIndex_byAITypeID( aitype )) > -1)
- SetGlobalNetInt(FD_GetAINetIndex_byAITypeID( aitype ), GetGlobalNetInt(FD_GetAINetIndex_byAITypeID( aitype )) - 1) // lower scoreboard number by 1
- }
- catch (exception)
- {
- print (exception)
- }
+ case(eFD_AITypeIDs.TITAN):
+ case(eFD_AITypeIDs.RONIN):
+ case(eFD_AITypeIDs.NORTHSTAR):
+ case(eFD_AITypeIDs.SCORCH):
+ case(eFD_AITypeIDs.TONE):
+ case(eFD_AITypeIDs.ION):
+ case(eFD_AITypeIDs.MONARCH):
+ case(eFD_AITypeIDs.LEGION):
+ case(eFD_AITypeIDs.TITAN_SNIPER):
+ SetGlobalNetInt("FD_AICount_Titan",GetGlobalNetInt("FD_AICount_Titan")-1)
+ break
+ default:
+ string netIndex = FD_GetAINetIndex_byAITypeID(FD_GetAITypeID_ByString(victim.GetTargetName()))
+ if(netIndex != "")
+ SetGlobalNetInt(netIndex,GetGlobalNetInt(netIndex)-1)
+ }
}
if ( victim.GetOwner() == attacker || !attacker.IsPlayer() || attacker == victim )
return
-
+
int playerScore = 0
int money = 0
if ( victim.IsNPC() )
@@ -242,6 +248,8 @@ void function OnNpcDeath( entity victim, entity attacker, var damageInfo )
attackerInfo.attacker.AddToPlayerGameStat( PGS_DEFENSE_SCORE, playerScore ) // i assume this is how support score gets added
}
}
+
+
}
void function RateSpawnpoints_FD(int _0, array<entity> _1, int _2, entity _3){}
@@ -317,7 +325,7 @@ array<entity> function getRoute(string routeName)
return ret
}
-array<int> function getEnemyTypesForWave(int wave)
+array<int> function getHighestEnemyAmountsForWave(int waveIndex)
{
table<int,int> npcs
npcs[eFD_AITypeIDs.TITAN]<-0
@@ -342,7 +350,7 @@ array<int> function getEnemyTypesForWave(int wave)
// npcs[eFD_AITypeIDs.TITAN_SNIPER]<-0
- foreach(WaveEvent e in waveEvents[wave])
+ foreach(WaveEvent e in waveEvents[waveIndex])
{
if(e.spawnEvent.spawnAmount==0)
continue
@@ -364,9 +372,8 @@ array<int> function getEnemyTypesForWave(int wave)
}
}
array<int> ret = [-1,-1,-1,-1,-1,-1,-1,-1,-1]
- foreach(int key,int value in npcs){
- printt("Key",key,"has value",value)
- SetGlobalNetInt(FD_GetAINetIndex_byAITypeID(key),value)
+ foreach(int key,int value in npcs)
+ {
if(value==0)
continue
int lowestArrayIndex = 0
@@ -391,6 +398,72 @@ array<int> function getEnemyTypesForWave(int wave)
return ret
}
+void function SetEnemyAmountNetVars(int waveIndex)
+{
+ int total = 0
+ table<int,int> npcs
+ npcs[eFD_AITypeIDs.TITAN]<-0
+ npcs[eFD_AITypeIDs.TITAN_NUKE]<-0
+ npcs[eFD_AITypeIDs.TITAN_ARC]<-0
+ npcs[eFD_AITypeIDs.TITAN_MORTAR]<-0
+ npcs[eFD_AITypeIDs.GRUNT]<-0
+ npcs[eFD_AITypeIDs.SPECTRE]<-0
+ npcs[eFD_AITypeIDs.SPECTRE_MORTAR]<-0
+ npcs[eFD_AITypeIDs.STALKER]<-0
+ npcs[eFD_AITypeIDs.REAPER]<-0
+ npcs[eFD_AITypeIDs.TICK]<-0
+ npcs[eFD_AITypeIDs.DRONE]<-0
+ npcs[eFD_AITypeIDs.DRONE_CLOAK]<-0
+ // npcs[eFD_AITypeIDs.RONIN]<-0
+ // npcs[eFD_AITypeIDs.NORTHSTAR]<-0
+ // npcs[eFD_AITypeIDs.SCORCH]<-0
+ // npcs[eFD_AITypeIDs.LEGION]<-0
+ // npcs[eFD_AITypeIDs.TONE]<-0
+ // npcs[eFD_AITypeIDs.ION]<-0
+ // npcs[eFD_AITypeIDs.MONARCH]<-0
+ // npcs[eFD_AITypeIDs.TITAN_SNIPER]<-0
+
+
+ foreach(WaveEvent e in waveEvents[waveIndex])
+ {
+ if(e.spawnEvent.spawnAmount==0)
+ continue
+ switch(e.spawnEvent.spawnType)
+ {
+ case(eFD_AITypeIDs.TITAN):
+ case(eFD_AITypeIDs.RONIN):
+ case(eFD_AITypeIDs.NORTHSTAR):
+ case(eFD_AITypeIDs.SCORCH):
+ case(eFD_AITypeIDs.TONE):
+ case(eFD_AITypeIDs.ION):
+ case(eFD_AITypeIDs.MONARCH):
+ case(eFD_AITypeIDs.LEGION):
+ case(eFD_AITypeIDs.TITAN_SNIPER):
+ npcs[eFD_AITypeIDs.TITAN]+=e.spawnEvent.spawnAmount
+ break
+ default:
+ npcs[e.spawnEvent.spawnType]+=e.spawnEvent.spawnAmount
+
+ }
+ total+= e.spawnEvent.spawnAmount
+ }
+ SetGlobalNetInt("FD_AICount_Titan",npcs[eFD_AITypeIDs.TITAN])
+ SetGlobalNetInt("FD_AICount_Titan_Nuke",npcs[eFD_AITypeIDs.TITAN_NUKE])
+ SetGlobalNetInt("FD_AICount_Titan_Mortar",npcs[eFD_AITypeIDs.TITAN_MORTAR])
+ SetGlobalNetInt("FD_AICount_Titan_Arc",npcs[eFD_AITypeIDs.TITAN_ARC])
+ SetGlobalNetInt("FD_AICount_Grunt",npcs[eFD_AITypeIDs.GRUNT])
+ SetGlobalNetInt("FD_AICount_Spectre",npcs[eFD_AITypeIDs.SPECTRE])
+ SetGlobalNetInt("FD_AICount_Spectre_Mortar",npcs[eFD_AITypeIDs.SPECTRE_MORTAR])
+ SetGlobalNetInt("FD_AICount_Stalker",npcs[eFD_AITypeIDs.STALKER])
+ SetGlobalNetInt("FD_AICount_Reaper",npcs[eFD_AITypeIDs.REAPER])
+ SetGlobalNetInt("FD_AICount_Ticks",npcs[eFD_AITypeIDs.TICK])
+ SetGlobalNetInt("FD_AICount_Drone",npcs[eFD_AITypeIDs.DRONE])
+ SetGlobalNetInt("FD_AICount_Drone_Cloak",npcs[eFD_AITypeIDs.DRONE_CLOAK])
+ SetGlobalNetInt("FD_AICount_Current",total)
+ SetGlobalNetInt("FD_AICount_Total",total)
+
+}
+
bool function runWave(int waveIndex,bool shouldDoBuyTime)
@@ -399,6 +472,7 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
SetGlobalNetInt("FD_currentWave",waveIndex)
file.havesterWasDamaged = false
file.harvesterShieldDown = false
+ SetEnemyAmountNetVars(waveIndex)
for(int i = 0; i<20;i++)//Number of npc type ids
{
file.harvesterDamageSource.append(0.0)
@@ -408,14 +482,15 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
player.diedThisRound = false
player.scoreThisRound = 0
}
- array<int> enemys = getEnemyTypesForWave(waveIndex)
+ array<int> enemys = getHighestEnemyAmountsForWave(waveIndex)
+
foreach(entity player in GetPlayerArray())
{
Remote_CallFunction_NonReplay(player,"ServerCallback_FD_AnnouncePreParty",enemys[0],enemys[1],enemys[2],enemys[3],enemys[4],enemys[5],enemys[6],enemys[7],enemys[8])
}
if(shouldDoBuyTime)
{
-
+ SetGlobalNetInt("FD_waveState",WAVE_STATE_BREAK)
OpenBoostStores()
foreach(entity player in GetPlayerArray())
Remote_CallFunction_NonReplay(player,"ServerCallback_FD_NotifyStoreOpen")
@@ -429,10 +504,10 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
CloseBoostStores()
MessageToTeam(TEAM_MILITIA,eEventNotifications.FD_StoreClosing)
}
-
+
//SetGlobalNetTime("FD_nextWaveStartTime",Time()+10)
wait 10
-
+ SetGlobalNetInt("FD_waveState",WAVE_STATE_INCOMING)
foreach(entity player in GetPlayerArray())
{
Remote_CallFunction_NonReplay(player,"ServerCallback_FD_ClearPreParty")
@@ -440,12 +515,13 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
}
SetGlobalNetBool("FD_waveActive",true)
MessageToTeam(TEAM_MILITIA,eEventNotifications.FD_AnnounceWaveStart)
-
-
+ SetGlobalNetInt("FD_waveState",WAVE_STATE_BREAK)
+
//main wave loop
-
+ thread SetWaveStateReady()
foreach(WaveEvent event in waveEvents[waveIndex])
{
+
if(event.shouldThread)
thread event.eventFunction(event.smokeEvent,event.spawnEvent,event.waitEvent,event.soundEvent)
else
@@ -455,7 +531,7 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
}
waitUntilLessThanAmountAlive_expensive(0)
-
+ SetGlobalNetInt("FD_waveState",WAVE_STATE_COMPLETE)
if(!IsAlive(fd_harvester.harvester))
{
float totalDamage = 0.0
@@ -632,6 +708,12 @@ bool function runWave(int waveIndex,bool shouldDoBuyTime)
}
+void function SetWaveStateReady(){
+ wait 5
+ SetGlobalNetInt("FD_waveState",WAVE_STATE_IN_PROGRESS)
+}
+
+
void function OnHarvesterDamaged(entity harvester, var damageInfo)
{
if ( !IsValid( harvester ) )
@@ -795,7 +877,7 @@ void function HarvesterThink()
PlayFactionDialogueToTeam( "fd_baseShieldRecharging", TEAM_MILITIA )
else
PlayFactionDialogueToTeam( "fd_baseShieldRechargingShort", TEAM_MILITIA )
- isRegening = true
+ isRegening = true
}
float newShieldHealth = ( harvester.GetShieldHealthMax() / GENERATOR_SHIELD_REGEN_TIME * deltaTime ) + harvester.GetShieldHealth()
@@ -1082,23 +1164,21 @@ void function singleNav_thread(entity npc, string routeName,int nodesToScip= 0,f
void function SquadNav_Thread( array<entity> npcs ,string routeName,int nodesToScip = 0,float nextDistance = 200.0)
{
- //TODO this function wont stop when noone alive anymore
+ //TODO this function wont stop when noone alive anymore also it only works half of the time
array<entity> routeArray = getRoute(routeName)
WaitFrame()//so other code setting up what happens on signals is run before this
if(routeArray.len()==0)
return
- int scippedNodes = 0
+ int nodeIndex = 0
foreach(entity node in routeArray)
{
if(!IsAlive(fd_harvester.harvester))
return
- if(scippedNodes < nodesToScip)
- {
- scippedNodes++
+ if(nodeIndex++ < nodesToScip)
continue
- }
+
SquadAssaultOrigin(npcs,node.GetOrigin(),nextDistance)
}
@@ -1498,25 +1578,98 @@ void function spawnSuperSpectre(SmokeEvent smokeEvent,SpawnEvent spawnEvent,Wait
thread ReaperMinionLauncherThink(npc)
SetTargetName( npc, GetTargetNameForID(spawnEvent.spawnType))
- thread spawnSuperSpectre_threaded(npc)
+
}
void function spawnDroppodGrunts(SmokeEvent smokeEvent,SpawnEvent spawnEvent,WaitEvent waitEvent,SoundEvent soundEvent)
{
PingMinimap(spawnEvent.origin.x, spawnEvent.origin.y, 4, 600, 150, 0)
- thread CreateTrackedDroppodSoldier(spawnEvent.origin,TEAM_IMC, spawnEvent.route)
+ entity pod = CreateDropPod( spawnEvent.origin, <0,0,0> )
+ SetTeam( pod, TEAM_IMC )
+ InitFireteamDropPod( pod )
+ waitthread LaunchAnimDropPod( pod, "pod_testpath", spawnEvent.origin, <0,0,0> )
+
+ string squadName = MakeSquadName( TEAM_IMC, UniqueString( "ZiplineTable" ) )
+ array<entity> guys
+ bool adychecked = false
+
+ for ( int i = 0; i < spawnEvent.spawnAmount; i++ )
+ {
+ entity guy = CreateSoldier( TEAM_IMC, spawnEvent.origin,<0,0,0> )
+
+ SetTeam( guy, TEAM_IMC )
+ guy.EnableNPCFlag( NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
+ guy.DisableNPCFlag( NPC_ALLOW_PATROL)
+ DispatchSpawn( guy )
+
+ guy.SetParent( pod, "ATTACH", true )
+ SetSquad( guy, squadName )
+
+ SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.GRUNT))
+ AddMinimapForHumans(guy)
+ file.spawnedNPCs.append(guy)
+ guys.append( guy )
+ }
+
+ ActivateFireteamDropPod( pod, guys )
+ SquadNav_Thread(guys,spawnEvent.route)
}
void function spawnDroppodStalker(SmokeEvent smokeEvent,SpawnEvent spawnEvent,WaitEvent waitEvent,SoundEvent soundEvent)
{
PingMinimap(spawnEvent.origin.x, spawnEvent.origin.y, 4, 600, 150, 0)
- thread CreateTrackedDroppodStalker(spawnEvent.origin,TEAM_IMC)
+ entity pod = CreateDropPod( spawnEvent.origin, <0,0,0> )
+ SetTeam( pod, TEAM_IMC )
+ InitFireteamDropPod( pod )
+ waitthread LaunchAnimDropPod( pod, "pod_testpath", spawnEvent.origin, <0,0,0> )
+
+ string squadName = MakeSquadName( TEAM_IMC, UniqueString( "ZiplineTable" ) )
+ array<entity> guys
+
+ for ( int i = 0; i < spawnEvent.spawnAmount; i++ )
+ {
+ entity guy = CreateStalker( TEAM_IMC, spawnEvent.origin,<0,0,0> )
+
+ SetTeam( guy, TEAM_IMC )
+ guy.EnableNPCFlag( NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
+ guy.DisableNPCFlag( NPC_ALLOW_PATROL)
+ DispatchSpawn( guy )
+
+ SetSquad( guy, squadName )
+ AddMinimapForHumans(guy)
+ SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.STALKER))
+ guys.append( guy )
+ }
+
+ ActivateFireteamDropPod( pod, guys )
+ SquadNav_Thread(guys,spawnEvent.route)
}
void function spawnDroppodSpectreMortar(SmokeEvent smokeEvent,SpawnEvent spawnEvent,WaitEvent waitEvent,SoundEvent soundEvent)
{
PingMinimap(spawnEvent.origin.x, spawnEvent.origin.y, 4, 600, 150, 0)
- thread CreateTrackedDroppodSpectreMortar(spawnEvent.origin,TEAM_IMC)
+ entity pod = CreateDropPod( spawnEvent.origin, <0,0,0> )
+ SetTeam( pod, TEAM_IMC )
+ InitFireteamDropPod( pod )
+ waitthread LaunchAnimDropPod( pod, "pod_testpath", spawnEvent.origin, <0,0,0> )
+
+ string squadName = MakeSquadName( TEAM_IMC, UniqueString( "ZiplineTable" ) )
+ array<entity> guys
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ entity guy = CreateSpectre( TEAM_IMC, spawnEvent.origin,<0,0,0> )
+
+ SetTeam( guy, TEAM_IMC )
+ DispatchSpawn( guy )
+
+ SetSquad( guy, squadName )
+ SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.SPECTRE_MORTAR))
+ AddMinimapForHumans(guy)
+ guys.append( guy )
+ }
+
+ ActivateFireteamDropPod( pod, guys )
}
void function spawnGenericNPC(SmokeEvent smokeEvent,SpawnEvent spawnEvent,WaitEvent waitEvent,SoundEvent soundEvent)
@@ -1618,134 +1771,21 @@ void function fd_spawnCloakDrone(SmokeEvent smokeEffect,SpawnEvent spawnEvent,Wa
void function SpawnTick(SmokeEvent smokeEffect,SpawnEvent spawnEvent,WaitEvent waitEvent,SoundEvent soundEvent)
{
PingMinimap(spawnEvent.origin.x, spawnEvent.origin.y, 4, 600, 150, 0)
- for (int i = 0; i < floor(spawnEvent.spawnAmount / 4); i++)
- {
- thread CreateTrackedDroppodTick(spawnEvent.origin, TEAM_IMC, spawnEvent.route)
- wait 0.5
- }
-}
-
-/****************************************************************************************\
-####### # # ####### # # ####### # # ####### # ###### ####### ######
-# # # # ## # # # # # # # # # # #
-# # # # # # # # # # # # # # # # #
-##### # # ##### # # # # ####### ##### # ###### ##### ######
-# # # # # # # # # # # # # # # #
-# # # # # ## # # # # # # # # #
-####### # ####### # # # # # ####### ####### # ####### # #
-\****************************************************************************************/
-void function spawnSuperSpectre_threaded(entity npc)
-{
-
-}
-
-void function CreateTrackedDroppodSoldier( vector origin, int team, string route = "")
-{
-
-
- entity pod = CreateDropPod( origin, <0,0,0> )
- SetTeam( pod, team )
- InitFireteamDropPod( pod )
- waitthread LaunchAnimDropPod( pod, "pod_testpath", origin, <0,0,0> )
-
- string squadName = MakeSquadName( team, UniqueString( "ZiplineTable" ) )
- array<entity> guys
- bool adychecked = false
-
- for ( int i = 0; i < 4; i++ )
- {
- entity guy = CreateSoldier( team, origin,<0,0,0> )
-
- SetTeam( guy, team )
- guy.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
- DispatchSpawn( guy )
-
- guy.SetParent( pod, "ATTACH", true )
- SetSquad( guy, squadName )
-
- SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.GRUNT))
- AddMinimapForHumans(guy)
- file.spawnedNPCs.append(guy)
- guys.append( guy )
- }
-
- ActivateFireteamDropPod( pod, guys )
-}
-
-void function CreateTrackedDroppodSpectreMortar( vector origin, int team)
-{
-
-
- entity pod = CreateDropPod( origin, <0,0,0> )
- SetTeam( pod, team )
- InitFireteamDropPod( pod )
- waitthread LaunchAnimDropPod( pod, "pod_testpath", origin, <0,0,0> )
-
- string squadName = MakeSquadName( team, UniqueString( "ZiplineTable" ) )
- array<entity> guys
-
- for ( int i = 0; i < 4; i++ )
- {
- entity guy = CreateSpectre( team, origin,<0,0,0> )
-
- SetTeam( guy, team )
- guy.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
- DispatchSpawn( guy )
-
- SetSquad( guy, squadName )
- SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.SPECTRE_MORTAR))
- AddMinimapForHumans(guy)
- guys.append( guy )
- }
-
- ActivateFireteamDropPod( pod, guys )
-}
-void function CreateTrackedDroppodStalker( vector origin, int team)
-{
-
-
- entity pod = CreateDropPod( origin, <0,0,0> )
- SetTeam( pod, team )
- InitFireteamDropPod( pod )
- waitthread LaunchAnimDropPod( pod, "pod_testpath", origin, <0,0,0> )
-
- string squadName = MakeSquadName( team, UniqueString( "ZiplineTable" ) )
- array<entity> guys
-
- for ( int i = 0; i < 4; i++ )
- {
- entity guy = CreateStalker( team, origin,<0,0,0> )
-
- SetTeam( guy, team )
- guy.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
- DispatchSpawn( guy )
-
- SetSquad( guy, squadName )
- AddMinimapForHumans(guy)
- SetTargetName( guy, GetTargetNameForID(eFD_AITypeIDs.STALKER))
- guys.append( guy )
- }
-
- ActivateFireteamDropPod( pod, guys )
-}
-
-void function CreateTrackedDroppodTick( vector origin, int team, string route = "" )
-{
- entity pod = CreateDropPod( origin, <0,0,0> )
- SetTeam( pod, team )
+ entity pod = CreateDropPod( spawnEvent.origin, <0,0,0> )
+ SetTeam( pod, TEAM_IMC )
InitFireteamDropPod( pod )
- waitthread LaunchAnimDropPod( pod, "pod_testpath", origin, <0,0,0> )
+ waitthread LaunchAnimDropPod( pod, "pod_testpath", spawnEvent.origin, <0,0,0> )
- string squadName = MakeSquadName( team, UniqueString( "ZiplineTable" ) )
+ string squadName = MakeSquadName( TEAM_IMC, UniqueString( "ZiplineTable" ) )
array<entity> guys
- for ( int i = 0; i < 4; i++ )
+ for ( int i = 0; i < spawnEvent.spawnAmount; i++ )
{
- entity guy = CreateFragDrone( team, origin, <0,0,0> )
+ entity guy = CreateFragDrone( TEAM_IMC, spawnEvent.origin, <0,0,0> )
SetSpawnOption_AISettings(guy, "npc_frag_drone_fd")
- SetTeam( guy, team )
- guy.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE )
+ SetTeam( guy, TEAM_IMC )
+ guy.EnableNPCFlag( NPC_ALLOW_INVESTIGATE )
guy.EnableNPCMoveFlag(NPCMF_WALK_ALWAYS | NPCMF_PREFER_SPRINT)
DispatchSpawn( guy )
AddMinimapForHumans(guy)
@@ -1756,8 +1796,24 @@ void function CreateTrackedDroppodTick( vector origin, int team, string route =
}
ActivateFireteamDropPod( pod, guys )
+ SquadNav_Thread(guys,spawnEvent.route)
}
+/****************************************************************************************\
+####### # # ####### # # ####### # # ####### # ###### ####### ######
+# # # # ## # # # # # # # # # # #
+# # # # # # # # # # # # # # # # #
+##### # # ##### # # # # ####### ##### # ###### ##### ######
+# # # # # # # # # # # # # # # #
+# # # # # ## # # # # # # # # #
+####### # ####### # # # # # ####### ####### # ####### # #
+\****************************************************************************************/
+
+
+
+
+
+
void function PingMinimap(float x, float y, float duration, float spreadRadius, float ringRadius, int colorIndex)
{
foreach(entity player in GetPlayerArray())
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_forwardbase_kodai_fd.nut b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_forwardbase_kodai_fd.nut
index 341cfc21..19f7c0e6 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_forwardbase_kodai_fd.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_forwardbase_kodai_fd.nut
@@ -27,8 +27,8 @@ void function initFrontierDefenseData()
wave0.append(createDroppodGruntEvent( < 1309, 2122, 1324>, "hillRouteClose"))
wave0.append(createDroppodGruntEvent( < 985, -110, 1369>, "hillRouteClose"))
wave0.append(createDroppodGruntEvent( < 264, 2840, 968>, "hillRouteClose"))
- wave0.append(createDroppodGruntEvent( < 2193, 434, 955>, "hillRouteClose"))
- wave0.append(createDroppodGruntEvent( < 909, 3094, 968>, "hillRouteClose"))
+ wave0.append(createDroppodStalkerEvent( < 2193, 434, 955>, "hillRouteClose"))
+ wave0.append(createDroppodStalkerEvent( < 909, 3094, 968>, "hillRouteClose"))
wave0.append(createWaitForTimeEvent(7))
wave0.append(createWaitUntilAliveEvent(1))
@@ -45,8 +45,8 @@ void function initFrontierDefenseData()
wave0.append(createDroppodGruntEvent( < 1309, 2122, 1324>, "hillRouteClose"))
wave0.append(createDroppodGruntEvent( < 985, -110, 1369>, "hillRouteClose"))
wave0.append(createDroppodGruntEvent( < 264, 2840, 968>, "hillRouteClose"))
- wave0.append(createDroppodGruntEvent( < 2193, 434, 955>, "hillRouteClose"))
- wave0.append(createDroppodGruntEvent( < 909, 3094, 968>, "hillRouteClose"))
+ wave0.append(createDroppodStalkerEvent( < 2193, 434, 955>, "hillRouteClose"))
+ wave0.append(createDroppodStalkerEvent( < 909, 3094, 968>, "hillRouteClose"))
wave0.append(createWaitForTimeEvent(7))
wave0.append(createWaitUntilAliveEvent(1))