aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut')
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut164
1 files changed, 164 insertions, 0 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut
index cf7f7e15..d6d578bb 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_ai_gamemodes.gnut
@@ -1,6 +1,170 @@
global function AiGameModes_Init
+global function AiGameModes_SetGruntWeapons
+global function AiGameModes_SetSpectreWeapons
+
+global function AiGameModes_SpawnDropShip
+global function AiGameModes_SpawnDropPod
+global function AiGameModes_SpawnReaper
+global function AiGameModes_SpawnTitan
+
+global function GetValidIntroDropShipSpawn
+
+
+const INTRO_DROPSHIP_CUTOFF = 2000
+
+struct
+{
+ array< string > gruntWeapons = [ "mp_weapon_rspn101" ]
+ array< string > spectreWeapons = [ "mp_weapon_hemlok_smg" ]
+} file
+
void function AiGameModes_Init()
{
+}
+
+//------------------------------------------------------
+
+void function AiGameModes_SetGruntWeapons( array< string > weapons )
+{
+ file.gruntWeapons = weapons
+}
+
+void function AiGameModes_SetSpectreWeapons( array< string > weapons )
+{
+ file.spectreWeapons = weapons
+}
+
+//------------------------------------------------------
+
+void function AiGameModes_SpawnDropShip( vector pos, vector rot, int team, int count, void functionref( array<entity> guys ) squadHandler = null )
+{
+ string squadName = MakeSquadName( team, UniqueString( "" ) )
+
+ CallinData drop
+ drop.origin = pos
+ drop.yaw = rot.y
+ drop.dist = 768
+ drop.team = team
+ drop.squadname = squadName
+ SetDropTableSpawnFuncs( drop, CreateSoldier, count )
+ SetCallinStyle( drop, eDropStyle.ZIPLINE_NPC )
+
+ thread RunDropshipDropoff( drop )
+
+ WaitSignal( drop, "OnDropoff" )
+
+ array< entity > guys = GetNPCArrayBySquad( squadName )
+
+ foreach ( guy in guys )
+ {
+ ReplaceWeapon( guy, file.gruntWeapons[ RandomInt( file.gruntWeapons.len() ) ], [] )
+ guy.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
+ }
+
+ if ( squadHandler != null )
+ thread squadHandler( guys )
+}
+
+
+void function AiGameModes_SpawnDropPod( vector pos, vector rot, int team, string content /*( ͡° ͜ʖ ͡°)*/, void functionref( array<entity> guys ) squadHandler = null )
+{
+ string squadName = MakeSquadName( team, UniqueString( "" ) )
+ array<entity> guys
+
+ entity pod = CreateDropPod( pos, <0,0,0> )
+
+ InitFireteamDropPod( pod )
+
+ for ( int i = 0; i < 4 ;i++ )
+ {
+ entity npc = CreateNPC( content, team, pos,<0,0,0> )
+ DispatchSpawn( npc )
+ SetSquad( npc, squadName )
+
+ switch ( content )
+ {
+ case "npc_soldier":
+ ReplaceWeapon( npc, file.gruntWeapons[ RandomInt( file.gruntWeapons.len() ) ], [] )
+ break
+
+ case "npc_spectre":
+ ReplaceWeapon( npc, file.spectreWeapons[ RandomInt( file.spectreWeapons.len() ) ], [] )
+ break
+ }
+
+ npc.SetParent( pod, "ATTACH", true )
+
+ npc.EnableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE | NPC_ALLOW_HAND_SIGNALS | NPC_ALLOW_FLEE )
+ guys.append( npc )
+ }
+
+ // The order here is different so we can show on minimap while were still falling
+ if ( squadHandler != null )
+ thread squadHandler( guys )
+
+ waitthread LaunchAnimDropPod( pod, "pod_testpath", pos, rot )
+
+ ActivateFireteamDropPod( pod, guys )
+}
+
+void function AiGameModes_SpawnReaper( vector pos, vector rot, int team, string aiSettings = "", void functionref( entity reaper ) reaperHandler = null )
+{
+ entity reaper = CreateSuperSpectre( team, pos, rot )
+ SetSpawnOption_Titanfall( reaper )
+ SetSpawnOption_Warpfall( reaper )
+
+ if ( aiSettings != "" )
+ SetSpawnOption_AISettings( reaper, aiSettings )
+
+ DispatchSpawn( reaper )
+
+
+ if ( reaperHandler != null )
+ thread reaperHandler( reaper )
+}
+
+// including aisettings stuff specifically for at bounty titans
+void function AiGameModes_SpawnTitan( vector pos, vector rot, int team, string setFile, string aiSettings = "", void functionref( entity titan ) titanHandler = null )
+{
+ entity titan = CreateNPCTitan( setFile, TEAM_BOTH, pos, rot )
+ SetSpawnOption_Titanfall( titan )
+ SetSpawnOption_Warpfall( titan )
+
+ if ( aiSettings != "" )
+ SetSpawnOption_AISettings( titan, aiSettings )
+
+ DispatchSpawn( titan )
+
+ if ( titanHandler != null )
+ thread titanHandler( titan )
+}
+
+// entity.ReplaceActiveWeapon gave grunts archers sometimes, this is my replacement for it
+void function ReplaceWeapon( entity guy, string weapon, array<string> mods )
+{
+ guy.TakeActiveWeapon()
+ guy.GiveWeapon( weapon, mods )
+ guy.SetActiveWeaponByName( weapon )
+}
+
+// Checks if we can spawn a dropship at a node, this should guarantee dropship ziplines
+array<entity> function GetValidIntroDropShipSpawn( array<entity> introNodes )
+{
+ array<entity> introShipSpawns
+
+ if ( GetZiplineDropshipSpawns().len() == 0 )
+ return []
+
+ foreach ( node in introNodes )
+ {
+ entity closestNode = GetClosest( GetZiplineDropshipSpawns(), node.GetOrigin() )
+ SetTeam( closestNode, node.GetTeam() )
+
+ if ( Distance( closestNode.GetOrigin(), node.GetOrigin() ) < INTRO_DROPSHIP_CUTOFF )
+ introShipSpawns.append( closestNode )
+ }
+
+ return introShipSpawns
} \ No newline at end of file