//========================================================================================== // // minelabs_a3f.gm // // Who When What //------------------------------------------------------------------------------------------ // ^1[UJE]^3Niek 15 December 2016 Initial Script // Native12 19.01.2017 Script & waypoints // Lift is disabled for bots, because (IMO) this is not good way for them. // If you want to bots use lift, you can only biconnect waypoints near lift (only waypoints UID: 3169 & 3171) // and then you have to enable disabled routes in InitializeRoutes table. // Native12 24.01.2017 Added coverspots and detonatespots // Native12 23.09.2017 Released // Native12 18.01.2018 Fixed bug in routes for CHECKPOINT_supplyflag // Native12 27.01.2018 Fixed bug Util.SetGoalRange for goal "DEFUSE_Command_Post_.*" // Native12 01.02.2018 Rename file // //========================================================================================== // global Map = { Debug = 0, ShowMovers = false, Allied_CP_Build = false, Axis_CP_Build = false, First_Door_destroyed = false, FirstDoorThread = true, Second_Door_destroyed = false, SecondDoorThread = true, RepulsorGunDestroyed = false, DocumentsTransmitted = false, Allies_Win = false, LiftIsBottom = true, LiftIsOnTheTop = false, LiftMoving = false, ExitDoorOpened = false, ExitDoorClosed = true, KeySecured = false, DoorOpened = false, SupplyflagAllies = false, GunDestroyed = false, Gun_Dyno = 0, TankPastWeaponSupply = false, AllyInside = 0, AxisInside = 0, AllyIn_CT = 0, RepulsorGunDyno = 0, Roles = { AXIS = { AllBots = true, // each bot is considered for a role DEFENDER = { numbots = 5, crucialClass = CLASS.ENGINEER, }, DEFENDER1 = { numbots = 5, crucialClass = CLASS.ENGINEER, }, DEFENDER2 = { numbots = 5, //crucialClass = CLASS.ENGINEER, }, DEFENDER3 = { numbots = 5, crucialClass = CLASS.ENGINEER, }, }, ALLIES = { AllBots = true, // each bot is considered for a role ATTACKER = { numbots = 5, crucialClass = CLASS.ENGINEER, }, ATTACKER1 = { numbots = 5, crucialClass = CLASS.ENGINEER, }, ATTACKER2 = { numbots = 5, //crucialClass = CLASS.ENGINEER, }, ATTACKER3 = { numbots = 5, crucialClass = CLASS.ENGINEER, }, }, }, Exit_door_Moving = function( trigger ) { if ( trigger.Action == "opening" ) { Map.ExitDoorClosed = false; Map.ExitDoorOpened = true; Map.Switches.exit_door.Enabled = false; Util.MapDebugPrint( "Exit door opening" ); } if ( trigger.Action == "closing" ) { Map.ExitDoorOpened = false; Map.ExitDoorClosed = true; Util.MapDebugPrint( "Exit door closing" ); Map.Switches.exit_door.Enabled = true; Util.MapDebugPrint( "Exit door switch enabled" ); } }, Switches = { // /bot waypoint_setproperty paththrough UseSwitch_PT:exit_door exit_door = { AimPosition = Vec3(-4944.929, 6082.125, 752.752), // /bot aim_pos Enabled = true, Priority = 0.0, WaypointName = "exitDoorSwitch", LimitBots = 1, Timeout = 2500, Wait = function() { return Map.ExitDoorOpened; }, }, // /bot waypoint_setproperty paththrough UseSwitch_PT:lower_switch_out lower_switch_out = { WaypointName = "lower_switch_out_WP", Enabled = false, //on the start of map is disabled LimitBots = 1, AimPosition = Vec3(-6397.875, 6272.023, 502.095), // /bot aim_pos Priority = 0.0, Timeout = 3000, Wait = function() { return Map.LiftIsBottom; }, }, // /bot waypoint_setproperty paththrough UseSwitch_PT:lower_switch_in lower_switch_in = { WaypointName = "lower_switch_in_WP", Enabled = true, //on the start of map is enabled LimitBots = 1, AimPosition = Vec3(-6525.875, 6400.114, 502.079), // /bot aim_pos Priority = 0.0, Timeout = 2500, Wait = function() { return Map.LiftIsOnTheTop; }, }, }, Lift_on_the_top = { Name = "Lift_on_the_top", TriggerOnEntity = GetGoal("MOVER_lift").GetEntity(), OnEnter = function(ent) { Map.LiftIsOnTheTop = true; Map.LiftMoving = false; Util.MapDebugPrint( "Lift is on the top" ); }, OnExit = function(ent) { }, }, Lift_bottom = { Name = "Lift_bottom", TriggerOnEntity = GetGoal("MOVER_lift").GetEntity(), OnEnter = function(ent) { Map.LiftIsBottom = true; Map.LiftMoving = false; Map.Switches.lower_switch_out.Enabled = false; Map.Switches.lower_switch_in.Enabled = true; Util.MapDebugPrint( "Lift is at the bottom" ); }, OnExit = function(ent) { }, }, Lift_Moving = function( trigger ) { if ( Map.DoorOpened ) { vel = ToVector(trigger.Action); Map.Switches.lower_switch_out.Enabled = true; if ( vel[ 2 ] > 0 ) { Map.LiftIsBottom = false; Map.LiftMoving = true; Util.MapDebugPrint( "Lift goes up" ); } if ( vel[ 2 ] < 0 ) { Map.LiftIsOnTheTop = false; Map.LiftMoving = true; Util.MapDebugPrint( "Lift goes down" ); } sleep(1); Map.Switches.lower_switch_in.Enabled = false; } }, Navigation = { // /bot waypoint_setproperty paththrough Navigation_PT:jump jump = { navigate = function(_this) { _this.Bot.HoldButton(BTN.JUMP, 0.55); sleep(0.55); }, }, // /bot waypoint_setproperty paththrough Navigation_PT:wait_low wait_low = { navigate = function(_this) { if ( Map.LiftMoving ) { while ( Map.LiftMoving ) { yield(); } if ( !Map.LiftIsBottom ) { _this.Goto(Vector3(-6295.425, 6420.261, 472.125)); Util.MapDebugPrint( "Bots can not board lift" ); } } else { if ( !Map.LiftIsBottom ) { _this.Goto(Vector3(-6295.425, 6420.261, 472.125)); Util.MapDebugPrint( "Bots can not board lift" ); } } }, }, }, vkey_Taken = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_Key_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_vkey" ); SetAvailableMapGoals( TEAM.ALLIES, false, "SMOKEBOMB_Allies_Key_.*" ); SetAvailableMapGoals( 0, true, "DEFEND_LockedDoor_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Locked_Door" ); Util.MapDebugPrint( "vkey_Taken" ); }, vkey_Returned = function( trigger ) { SetAvailableMapGoals( 0, false, "DEFEND_LockedDoor_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Locked_Door" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Key_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_vkey" ); SetAvailableMapGoals( TEAM.ALLIES, true, "SMOKEBOMB_Allies_Key_.*" ); Util.MapDebugPrint( "vkey_Returned" ); }, vkey_Secured = function( trigger ) { Map.KeySecured = true; WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false ); Map.SetSpawn(); SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_vkey" ); sleep(2); SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Locked_Door" ); if ( !Map.Allied_CP_Build and !Map.Axis_CP_Build ) { SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Command_Post" ); } SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Gun_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Flag_.*" ); Util.MapDebugPrint( "vkey_Secured" ); }, Door_opened = function( trigger ) { Map.DoorOpened = true; SetAvailableMapGoals( 0, false, "MOUNTMG42_Yard" ); SetAvailableMapGoals( 0, false, "REPAIRMG42_Yard" ); SetAvailableMapGoals( 0, false, "DEFEND_LockedDoor_.*" ); SetAvailableMapGoals( 0, true, "AMMOCAB_misc_cabinet_supply1" ); SetAvailableMapGoals( 0, true, "HEALTHCAB_misc_cabinet_health1" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_Key_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_Yard_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "SMOKEBOMB_Allies_Key_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Allies_Yard_.*" ); if ( !Map.Allied_CP_Build and !Map.Axis_CP_Build ) { SetAvailableMapGoals( 0, true, "BUILD_Command_Post" ); } else if ( Map.Axis_CP_Build ) { SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" ); } else if ( Map.Allied_CP_Build ) { SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Command_Post" ); } if ( !Map.SupplyflagAllies ) { SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_supplyflag" ); } SetAvailableMapGoals( TEAM.ALLIES, true, ".*_Allies_Gun_.*" ); if ( !Map.GunDestroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_gun" ); } Util.MapDebugPrint( "Door_opened" ); }, supplyflag_Axis_Captured = function( trigger ) { Map.SupplyflagAllies = false; Map.SetSpawn(); SetAvailableMapGoals( TEAM.AXIS, false, "CHECKPOINT_supplyflag" ); if ( !Map.GunDestroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_supplyflag" ); } Util.MapDebugPrint( "supplyflag_Axis_Captured" ); }, supplyflag_Allies_Captured = function( trigger ) { Map.SupplyflagAllies = true; Map.SetSpawn(); SetAvailableMapGoals( TEAM.ALLIES, false, "CHECKPOINT_supplyflag" ); if ( !Map.GunDestroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_supplyflag" ); } Util.MapDebugPrint( "supplyflag_Allies_Captured" ); }, gun_Planted = function( trigger ) { Map.Gun_Dyno += 1; Util.MapDebugPrint( "gun_Planted" ); }, gun_Defused = function( trigger ) { Map.Gun_Dyno -= 1; Util.MapDebugPrint( "gun_Defused" ); }, gun_Destroyed = function( trigger ) { Map.SupplyflagAllies = true; if ( Map.Gun_Dyno > 0 ) { SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_gun_.*" ); } Map.SetSpawn(); Map.Gun_Dyno = 0; Map.GunDestroyed = true; WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, true ); Util.DisableGoal( "CHECKPOINT_supplyflag" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_Gun_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Flag_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_gun" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_WS_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_Axis_Gun_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, ".*_Allies_WS_.*" ); Util.MapDebugPrint( "gun_Destroyed" ); }, Tank_at_start = { Name = "Tank_at_start", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { sleep(1); SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_Tank" ); Util.MapDebugPrint( "Tank is ready to escort" ); }, OnExit = function(ent) { ETUtil.SetExcludeIndexes( "ESCORT_Tank", {} ); }, }, Tank_at_gun = { Name = "Tank_at_gun", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNT_Tank_Allies" ); Util.MapDebugPrint( "Tank is ready to mount" ); }, OnExit = function(ent) { }, }, Tank_near_weapon_supply = { Name = "Tank_near_weapon_supply", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { ETUtil.SetExcludeIndexes( "ESCORT_Tank", { 2, 3, 4, 5} ); ETUtil.SetExcludeIndexes( "MOUNT_Tank_Allies", { 1, 2, 3, 4} ); ETUtil.SetExcludeIndexes( "MOUNT_Tank_Axis", { 1, 2, 3, 4} ); SetGoalRole( "DEFEND_Axis_WS_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } ); Util.SetMaxUsers( 1, "DEFEND_Axis_WS_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_WS_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_Axis_Gun_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, ".*_Allies_Gun_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_CP_.*" ); Util.MapDebugPrint( "Tank_near_weapon_supply" ); }, OnExit = function(ent) { }, }, Tank_past_weapon_supply = { Name = "Tank_past_weapon_supply", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { Map.TankPastWeaponSupply = true; ETUtil.SetExcludeIndexes( "ESCORT_Tank", {} ); ETUtil.SetExcludeIndexes( "MOUNT_Tank_Allies", {} ); ETUtil.SetExcludeIndexes( "MOUNT_Tank_Axis", {} ); SetAvailableMapGoals( TEAM.ALLIES, false, ".*_Allies_WS_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, ".*_Allies_CP_.*" ); Util.MapDebugPrint( "Tank_past_weapon_supply" ); }, OnExit = function(ent) { SetAvailableMapGoals( TEAM.AXIS, true, "MOUNT_Tank_Axis" ); }, }, Tank_at_CP = { Name = "Tank_at_CP", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { SetAvailableMapGoals( TEAM.ALLIES, false, ".*_Allies_CP_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allies_FirstDoor_.*" ); Util.MapDebugPrint( "Tank_at_CP" ); }, OnExit = function(ent) { SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_FirstDoor_.*" ); GetGoal("DEFEND_Axis_CP_19").AimVectors = { Vec3(0.968, -0.111, -0.226), Vec3(0.703, 0.606, -0.372), Vec3(-0.674, 0.643, -0.362) }; GetGoal("DEFEND_Axis_CP_14").AimVectors = { Vec3(0.876, 0.328, -0.355), Vec3(0.267, 0.867, -0.420), Vec3(-0.466, 0.819, -0.335) }; GetGoal("DEFEND_Axis_CP_13").AimVectors = { Vec3(0.815, 0.382, -0.436), Vec3(0.267, 0.842, -0.469), Vec3(-0.460, 0.809, -0.366) }; SetGoalPriority( "DEFEND_Axis_CP_19", 0.51, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_CP_14", 0.51, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_CP_13", 0.51, TEAM.AXIS, 0 ); SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_Axis_CP_.*" ); }, }, tank_Built = function( trigger ) { SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_tank" ); Util.MapDebugPrint( "tank_Built" ); }, tank_Damaged = function( trigger ) { if ( !Map.Second_Door_destroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_tank" ); } Util.MapDebugPrint( "tank_Damaged" ); }, Allied_Command_Post_Built = function( trigger ) { Map.Allied_CP_Build = true; Map.SetSpawn(); if ( Map.DoorOpened ) { SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Command_Post" ); } Util.MapDebugPrint( "Allied_Command_Post_Built" ); }, Axis_Command_Post_Built = function( trigger ) { Map.Axis_CP_Build = true; Map.SetSpawn(); if ( Map.DoorOpened ) { SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" ); } Util.MapDebugPrint( "Axis_Command_Post_Built" ); }, SetSpawn1 = function(bot) { if ( !Map.KeySecured ) { bot.ChangeSpawnPoint(0); } else { if (bot.GetTeam() == TEAM.ALLIES) { if ( !Map.First_Door_destroyed ) { if ( Map.Allied_CP_Build ) { if ( Map.GunDestroyed ) { if ( !Map.TankPastWeaponSupply ) { if ( bot.HasRole(ROLE.ATTACKER2) or bot.HasRole(ROLE.ATTACKER3) ) { bot.ChangeSpawnPoint(4); } else { bot.ChangeSpawnPoint(0); } } else { bot.ChangeSpawnPoint(4); } } else { bot.ChangeSpawnPoint(0); } } else { bot.ChangeSpawnPoint(0); } } else { if ( Map.Allied_CP_Build ) { bot.ChangeSpawnPoint(4); } else { bot.ChangeSpawnPoint(0); } } } else { if ( !Map.First_Door_destroyed ) { if ( Map.Axis_CP_Build ) { if ( Map.GunDestroyed ) { bot.ChangeSpawnPoint(4); //CP spawn } else { bot.ChangeSpawnPoint(3); //weaponsupply spawn } } else { if ( Map.GunDestroyed ) { bot.ChangeSpawnPoint(5); //minesupply spawn } else { bot.ChangeSpawnPoint(3); //weaponsupply spawn } } } else { if ( Map.Axis_CP_Build ) { if ( Map.AllyIn_CT > 0 ) { if ( bot.HasRole(ROLE.DEFENDER3) ) { bot.ChangeSpawnPoint(4); //CP spawn } else { bot.ChangeSpawnPoint(5); //minesupply spawn if ( bot.GetReinforceTime() <= 3 and Map.AllyIn_CT > 0 and Map.AxisInside == 0 ) { bot.ExecCommand("kill"); } } } else { if ( bot.HasRole(ROLE.DEFENDER2) or bot.HasRole(ROLE.DEFENDER3) ) { bot.ChangeSpawnPoint(4); //CP spawn } else { bot.ChangeSpawnPoint(5); //minesupply spawn } } } else { bot.ChangeSpawnPoint(5); //minesupply spawn } } } } }, SetSpawn = function() { foreach(bot in BotTable) { Map.SetSpawn1(bot); } }, Command_Post_Planted = function( trigger ) { Util.MapDebugPrint( "Command_Post_Planted" ); sleep(0.1); foreach( goal in Util.GoalTable("DEFUSE_Command_Post_.*") ) { name = goal.GetName(); Util.SetGoalRange( name, 1600); } }, Command_Post_Defused = function( trigger ) { Util.MapDebugPrint( "Command_Post_Defused" ); }, Allied_Command_Post_Destroyed = function( trigger ) { Map.Allied_CP_Build = false; Map.SetSpawn(); if ( Map.DoorOpened ) { SetAvailableMapGoals( 0, true, "BUILD_Command_Post" ); } Util.MapDebugPrint( "Allied_Command_Post_Destroyed" ); }, Axis_Command_Post_Destroyed = function( trigger ) { Map.Axis_CP_Build = false; Map.SetSpawn(); if ( Map.DoorOpened ) { SetAvailableMapGoals( 0, true, "BUILD_Command_Post" ); } Util.MapDebugPrint( "Axis_Command_Post_Destroyed" ); }, Tank_near_first_door = { Name = "Tank_near_first_door", TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(), OnEnter = function(ent) { SetAvailableMapGoals( TEAM.AXIS, false, "MOUNT_Tank_Axis" ); Util.MapDebugPrint( "Tank_near_first_door" ); }, OnExit = function(ent) { }, }, Control_trigger = { Name = "Control_trigger", TriggerOnClass = CLASS.ANYPLAYER, OnEnter = function(ent) { if( GetEntTeam(ent) == TEAM.ALLIES ) { if ( Map.AllyIn_CT == 0 ) { Map.SetSpawn(); } Map.AllyIn_CT += 1; Util.MapDebugPrint( "Allies in CT + 1; Total amount: " + Map.AllyIn_CT ); if ( Map.AllyInside == 0 ) { Util.LimitToClass( "PLANT_Command_Post", TEAM.AXIS, CLASS.COVERTOPS ); if ( Map.First_Door_destroyed ) { SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_CP_.*" ); SetGoalRole( ".*_Axis_CP_.*", ROLE.DEFENDER3 ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_FirstDoorEntrance_.*" ); sleep(0.5); if ( !Map.Second_Door_destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_CP_.*" ); } } if ( Map.Second_Door_destroyed ) { SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_CP_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_SecondDoorEntrance_.*" ); } } } }, OnExit = function(ent) { if( GetEntTeam(ent) == TEAM.ALLIES ) { Map.AllyIn_CT -= 1; Util.MapDebugPrint( "Allies in CT - 1; Total amount: " + Map.AllyIn_CT ); if ( Map.AllyIn_CT == 0 ) { Map.SetSpawn(); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_FirstDoorEntrance_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_SecondDoorEntrance_.*" ); Util.LimitToClass( "PLANT_Command_Post", TEAM.AXIS, CLASS.COVERTOPS, CLASS.ENGINEER ); ClearGoalRole( ".*_Axis_CP_.*", ROLE.DEFENDER3 ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_CP_.*" ); Util.MapDebugPrint( "Ally in CT = 0" ); } } }, }, Inside_bunker = { Name = "Inside_bunker", TriggerOnClass = CLASS.ANYPLAYER, OnEnter = function(ent) { if( GetEntTeam(ent) == TEAM.ALLIES ) { if ( Map.AllyInside == 0 ) { Map.SetSpawn(); } Map.AllyInside += 1; Util.MapDebugPrint( "Allies inside + 1; Total amount: " + Map.AllyInside ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_FirstDoorEntrance_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_SecondDoorEntrance_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Bunker_.*" ); if ( !Map.DocsTaken ) { SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Documents_.*" ); } } else { Map.AxisInside += 1; } }, OnExit = function(ent) { if( GetEntTeam(ent) == TEAM.ALLIES ) { Map.AllyInside -= 1; Util.MapDebugPrint( "Allies inside - 1; Total amount: " + Map.AllyInside ); if ( Map.AllyInside == 0 ) { Map.SetSpawn(); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_Bunker_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Documents_.*" ); if ( Map.AllyIn_CT == 0 ) { SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_FirstDoorEntrance_.*" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_SecondDoorEntrance_.*" ); ClearGoalRole( ".*_Axis_CP_.*", ROLE.DEFENDER3 ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_CP_.*" ); } else { if ( Map.First_Door_destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_FirstDoorEntrance_.*" ); } if ( Map.Second_Door_destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_SecondDoorEntrance_.*" ); } } Util.MapDebugPrint( "Ally inside = 0" ); } } else { Map.AxisInside -= 1; } }, }, First_Door_Thread = function() { start = Vector3(-4371.458, 7038.193, 280.125); end = Vector3(-4478.456, 7038.803, 280.125); Util.MapDebugPrint("^5First_Door_Thread started"); while (1) { tr = TraceLine(start, end, null, TRACE.SOLID, 0, false); if(tr.fraction < 1) { if ( Map.FirstDoorThread ) { Util.MapDebugPrint("THREAD - First door"); Map.FirstDoorThread = false; } if ( Map.Debug ) { DrawDebugLine( start, end, COLOR.RED, 1 ); } } else { if ( !Map.FirstDoorThread ) { Util.MapDebugPrint("First door to the laboratory destroyed"); Map.FirstDoorThread = true; Map.First_Door_destroyed = true; Util.EnableGoal( "ROUTE_DoorOppositeLift" ); Util.EnableGoal( "ROUTE_FirstDoor" ); Map.SetSpawn(); Util.SetMaxUsers( 1, "ESCORT_Tank" ); Util.SetMaxUsers( 1, "BUILD_tank" ); SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_FirstDoor_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Allies_FirstDoor_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allies_Bunker_.*" ); if ( !Map.DocsTaken ) { SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_docs" ); } if ( !Map.RepulsorGunDestroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Repulsor_Gun" ); } } if ( Map.Debug ) { DrawDebugLine( start, end, COLOR.GREEN, 1 ); } } sleep(2); } }, Second_Door_Thread = function() { start = Vector3(-4307.876, 5187.582, 365.818); end = Vector3(-4144.741, 5187.115, 376.125); Util.MapDebugPrint("^5Second_Door_Thread started"); while (1) { tr = TraceLine(start, end, null, TRACE.SOLID, 0, false); if(tr.fraction < 1) { if ( Map.SecondDoorThread ) { Util.MapDebugPrint("THREAD - Second door"); Map.SecondDoorThread = false; } if ( Map.Debug ) { DrawDebugLine( start, end, COLOR.RED, 1 ); } } else { if ( !Map.SecondDoorThread ) { Util.MapDebugPrint("Second door to the laboratory destroyed"); Map.SecondDoorThread = true; Map.Second_Door_destroyed = true; Map.SetSpawn(); Util.EnableGoal( "ROUTE_DoorToSecondDoor" ); Util.EnableGoal( "ROUTE_SecondDoor" ); if ( Map.AllyIn_CT > 0 ) { SetAvailableMapGoals( TEAM.AXIS, false, ".*_Axis_CP_.*" ); } SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_Tank" ); SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_Tank_Allies" ); if ( !Map.LadderBuilt ) { SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_ladder" ); } if ( Map.AllyInside == 0 ) { SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_SecondDoorEntrance_.*" ); } ClearGoalRole( ".*_Axis_FirstDoorEntrance_.*", ROLE.DEFENDER2 ); ClearGoalRole( "MOBILEMG42_Axis_FirstDoorEntrance_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } ); ClearGoalRole( "MOBILEMG42_Axis_SecondDoorEntrance_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } ); ClearGoalRole( "PLANT_Repulsor_Gun", { ROLE.ATTACKER2, ROLE.ATTACKER3 } ); ClearGoalRole( "FLAG_docs", { ROLE.ATTACKER, ROLE.ATTACKER1 } ); ClearGoalRole( "ATTACK_Allies_Bunker_.*", ROLE.ATTACKER3 ); SetGoalRole( "ATTACK_Allies_Bunker_.*", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2 } ); if ( !Map.RepulsorGunDestroyed and !Map.DocumentsTransmitted ) { SetGoalRole( "PLANT_Repulsor_Gun", { ROLE.ATTACKER, ROLE.ATTACKER1 } ); } } if ( Map.Debug ) { DrawDebugLine( start, end, COLOR.GREEN, 1 ); } } sleep(2); } }, ladder_Built = function( trigger ) { Map.LadderBuilt = true; Wp.SetWaypointFlag( "Ladder_1", "closed", false ); Wp.SetWaypointFlag( "Ladder_3", "closed", true ); Wp.SetWaypointFlag( "Ladder_4", "closed", true ); Util.EnableGoal( "ROUTE_LadderNearSecondDoor" ); Util.EnableGoal( "ROUTE_AmmoStorage" ); SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_ladder" ); Util.MapDebugPrint( "ladder_Built" ); }, Repulsor_Gun_Planted = function( trigger ) { Map.RepulsorGunDyno += 1; Util.MapDebugPrint( "Repulsor_Gun_Planted" ); }, Repulsor_Gun_Defused = function( trigger ) { Map.RepulsorGunDyno -= 1; Util.MapDebugPrint( "Repulsor_Gun_Defused" ); }, Repulsor_Gun_Destroyed = function( trigger ) { if ( Map.RepulsorGunDyno > 0 ) { SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Repulsor_Gun_.*" ); } Map.RepulsorGunDestroyed = true; SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Repulsor_Gun" ); if ( Map.DocumentsTransmitted ) { if ( !Map.Axis_Win ) { Map.Allies_Win = true; ETUtil.WinningChat( TEAM.ALLIES ); ETUtil.LosingChat( TEAM.AXIS ); Util.MapDebugPrint( "Allies_Win" ); } } else { ClearGoalRole( "FLAG_docs", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); ClearGoalRole( "ATTACK_Allies_Bunker_.*", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); } Util.MapDebugPrint( "Repulsor_Gun_Destroyed" ); }, docs_Taken = function( trigger ) { Map.DocsTaken = true; SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Documents_.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "FLAG_docs" ); SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Transmitter" ); if ( Map.RepulsorGunDestroyed ) { SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Bunker_.*" ); SetAvailableMapGoals( 0, true, "ATTACK_Transmitter_.*" ); } else { SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Bunker_.*" ); SetAvailableMapGoals( 0, true, "ATTACK_Transmitter_0.*" ); sleep(0.5); if ( !Map.RepulsorGunDestroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Bunker_.*" ); } } Util.MapDebugPrint( "docs_Taken" ); }, docs_Returned = function( trigger ) { Map.DocsTaken = false; SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Transmitter" ); SetAvailableMapGoals( 0, false, "ATTACK_Transmitter_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Bunker_.*" ); if ( Map.First_Door_destroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_docs" ); } if ( Map.AllyInside > 0 ) { SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Documents_.*" ); } Util.MapDebugPrint( "docs_Returned" ); }, docs_Secured = function( trigger ) { Map.DocumentsTransmitted = true; SetAvailableMapGoals( TEAM.ALLIES, false, "CAPPOINT_Transmitter" ); SetAvailableMapGoals( 0, false, "ATTACK_Transmitter_.*" ); if ( Map.RepulsorGunDestroyed ) { if ( !Map.Axis_Win ) { Map.Allies_Win = true; ETUtil.WinningChat( TEAM.ALLIES ); ETUtil.LosingChat( TEAM.AXIS ); Util.MapDebugPrint( "Allies_Win" ); } } else { Util.SetMaxUsers( 2, "DEFEND_Axis_Bunker_.*" ); ClearGoalRole( "PLANT_Repulsor_Gun", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); ClearGoalRole( "ATTACK_Allies_Bunker_.*", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); } Util.MapDebugPrint( "docs_Secured" ); }, Thirty_second = function( trigger ) { if ( TestMap ) { return; } Util.MapDebugPrint( "^5Thirty_second" ); sleep(30); if ( !Map.Allies_Win ) { Map.Axis_Win = true; Util.MapDebugPrint( "^5Axis_Win" ); ETUtil.WinningChat( TEAM.AXIS ); ETUtil.LosingChat( TEAM.ALLIES ); } }, }; global OnMapLoad = function() { OnTrigger( "Allied Command Post constructed", Map.Allied_Command_Post_Built ); OnTrigger( "Axis Command Post constructed", Map.Axis_Command_Post_Built ); OnTrigger( "Planted at the Command Post.", Map.Command_Post_Planted ); OnTrigger( "Planted at Command Post.", Map.Command_Post_Planted ); //Nitmod OnTrigger( "Defused at the Command Post.", Map.Command_Post_Defused ); OnTrigger( "Defused at Command Post.", Map.Command_Post_Defused ); //Nitmod OnTrigger( "the allied did construct a ^1ladder to the second floor!", Map.ladder_Built ); OnTrigger( "^5The tank has been repaired", Map.tank_Built ); OnTrigger( "^5The tank has been damaged", Map.tank_Damaged ); OnTrigger( "Axis team has destroyed the Allied Command Post", Map.Allied_Command_Post_Destroyed ); OnTrigger( "Allied team has destroyed the Axis Command Post", Map.Axis_Command_Post_Destroyed ); OnTrigger( "Planted at The Repulsor Gun.", Map.Repulsor_Gun_Planted ); OnTrigger( "Defused at The Repulsor Gun.", Map.Repulsor_Gun_Defused ); OnTrigger( "The repulse gun was destroyed!", Map.Repulsor_Gun_Destroyed ); OnTrigger( "Planted at the gun.", Map.gun_Planted ); OnTrigger( "Planted at gun.", Map.gun_Planted ); //Nitmod OnTrigger( "Defused at the gun.", Map.gun_Defused ); OnTrigger( "Defused at gun.", Map.gun_Defused ); //Nitmod OnTrigger( "The anti tank gun was destroyed, the tank is coming", Map.gun_Destroyed ); OnTrigger( "^1The documents are not on the table!", Map.docs_Taken ); OnTrigger( "^1The key is not on the table!", Map.vkey_Taken ); OnTrigger( "^2The axis did return the documents!", Map.docs_Returned ); OnTrigger( "^2The axis returned the key!", Map.vkey_Returned ); OnTrigger( "^1The allied has taken the documents to the transmitter!", Map.docs_Secured ); OnTrigger( "^1The allies unlocked the gate!", Map.vkey_Secured ); OnTrigger( "the axis did capture the weapon supply!", Map.supplyflag_Axis_Captured ); OnTrigger( "the allies captured the weapon supply!", Map.supplyflag_Allies_Captured ); OnTrigger( "the door is open", Map.Door_opened ); OnTrigger( "thirty second warning.", Map.Thirty_second ); OnTrigger( "lift_goto", Map.Lift_Moving ); OnTrigger( "ldoor_Moving", Map.Exit_door_Moving ); Util.DisableGoal( ".*", true ); ClearGoalRole( ".*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3, ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); Util.DisableGoal( "ROUTE_DoorOppositeLift" ); Util.DisableGoal( "ROUTE_FirstDoor" ); Util.DisableGoal( "ROUTE_DoorToSecondDoor" ); Util.DisableGoal( "ROUTE_SecondDoor" ); Util.DisableGoal( "ROUTE_LadderNearSecondDoor" ); Util.DisableGoal( "ROUTE_AmmoStorage" ); SetAvailableMapGoals( 0, true, "MOUNTMG42_Yard" ); SetAvailableMapGoals( 0, true, "REPAIRMG42_Yard" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Key_.*" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Yard_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_vkey" ); SetAvailableMapGoals( TEAM.ALLIES, true, "SMOKEBOMB_Allies_Key_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allies_Yard_.*" ); Util.SetMaxUsers( 1, "MOUNTMG42_.*" ); Util.SetMaxUsers( 1, "REPAIRMG42_.*" ); Util.SetMaxUsers( 1, "BUILD_Command_Post" ); Util.SetMaxUsers( 1, "PLANT_Command_Post" ); Util.SetMaxUsers( 1, "MOUNT_Tank_.*" ); Util.SetMaxUsers( 1, "SMOKEBOMB_Allies_CP_20" ); Util.SetMaxUsers( 1, "BUILD_ladder" ); Util.SetMaxUsers( 2, "BUILD_tank" ); Util.SetMaxUsers( 2, "DEFEND_Axis_WS.*" ); Util.SetMaxUsers( 2, "ATTACK_Transmitter_.*" ); Util.SetMaxUsers( 4, "CHECKPOINT_supplyflag" ); Util.AddUseWp( "PLANT_gun", "Gun_WP" ); Util.AddUseWp( "PLANT_Repulsor_Gun", "plant_RG_WP" ); Util.AddUseWp( "BUILD_ladder", "Ladder_2" ); Util.SetGoalRange( "SMOKEBOMB_Allies_CP_20", 700); ETUtil.SetExcludeIndexes( "ESCORT_Tank", { 0, 1, 2, 3 } ); SetGoalPriority( "DEFEND_Axis_Key_0.*", 0.51, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_Flag_.*", 0.51, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_FirstDoor_.*", 0.52, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_FirstDoorEntrance_.*", 0.53, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_SecondDoorEntrance_.*", 0.53, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_Bunker_.*", 0.54, TEAM.AXIS, 0 ); SetGoalPriority( "DEFEND_Axis_Documents_.*", 0.54, TEAM.AXIS, 0 ); SetGoalPriority( "ATTACK_Transmitter_.*", 0.55, 0, 0 ); SetGoalPriority( "PLANT_Command_Post", 0.75, TEAM.AXIS, CLASS.ENGINEER ); SetGoalPriority( "PLANT_Command_Post", 0.82, TEAM.ALLIES, CLASS.COVERTOPS ); SetGoalRole( "DEFEND_Axis_Key_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2 }); SetGoalRole( "CALLARTILLERY_Axis_Key_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2 }); SetGoalRole( "DEFEND_Axis_Flag_.*", ROLE.DEFENDER2 ); SetGoalRole( "DEFEND_Axis_Yard_.*", ROLE.DEFENDER3 ); SetGoalRole( "DEFEND_Axis_Documents_.*", ROLE.DEFENDER ); SetGoalRole( ".*_Axis_FirstDoorEntrance_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2 } ); SetGoalRole( ".*_Axis_SecondDoorEntrance_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } ); SetGoalRole( "MOUNTMG42_Yard", { ROLE.DEFENDER3, ROLE.ATTACKER3 }); SetGoalRole( "ATTACK_Transmitter_0.*", { ROLE.DEFENDER2, ROLE.DEFENDER3, ROLE.ATTACKER2, ROLE.ATTACKER3 }); SetGoalRole( "FLAG_vkey", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2 }); SetGoalRole( "SMOKEBOMB_Allies_Key_.*", { ROLE.ATTACKER, ROLE.ATTACKER1, ROLE.ATTACKER2 }); SetGoalRole( "ATTACK_Allies_Yard_.*", ROLE.ATTACKER3 ); SetGoalRole( "DEFEND_Allies_WS_.*", { ROLE.ATTACKER2, ROLE.ATTACKER3 } ); SetGoalRole( "PLANT_Repulsor_Gun", { ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); SetGoalRole( "FLAG_docs", { ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); SetGoalRole( "ATTACK_Allies_Bunker_.*", { ROLE.ATTACKER1, ROLE.ATTACKER2, ROLE.ATTACKER3 } ); WeaponTable.SetWeaponTeamAvailability ( TEAM.ALLIES, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false ); WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.FLAMETHROWER, false ); WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.MORTAR, false ); WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.VENOM, false ); RegionTrigger.Create(AABB(-1267.900,22.650,159.079,-1070.109,602.521,355.082), "DisableCombatMovement", "Wooden_Footbridge"); RegionTrigger.Create(AABB(-972.287,856.442,-36.455,-859.082,1023.697,251.136), "DisableCombatMovement", "Ladder_To_Key"); RegionTrigger.Create(AABB(-980.039,489.182,145.125,-866.625,595.066,263.567), "DisableCombatMovement", "Window_Near_Key"); RegionTrigger.Create(AABB(-846.859,622.126,179.125,-763.235,757.646,269.125), "DisableBotPush", "Table_With_Key"); RegionTrigger.Create(AABB(3063.842,4746.277,-18.904,3364.766,4864.826,271.732), "DisableCombatMovement", "Ladder_to_Spawn"); RegionTrigger.Create(AABB(2662.990,3627.017,34.891,3201.405,3897.235,232.554), "DisableCombatMovement", "Around_Gun"); RegionTrigger.Create(AABB(2831.125,4879.125,193.125,3195.939,5139.125,311.337), "DisableCombatMovement", "Weapon_Supply_1"); RegionTrigger.Create(AABB(1948.990,4879.125,193.259,2467.356,5011.442,315.125), "DisableCombatMovement", "Weapon_Supply_2"); RegionTrigger.Create(AABB(1604.798,4623.125,193.125,1904.873,4794.274,311.388), "DisableCombatMovement", "Weapon_Supply_3"); RegionTrigger.Create(AABB(-1824.043,5608.610,349.759,-1347.904,5813.676,751.113), "DisableCombatMovement", "Hill_1_near_CP"); RegionTrigger.Create(AABB(-2147.400,5024.370,315.375,-1385.337,6274.872,1151.125), "DisableCombatMovement", "Hill_2_near_CP"); RegionTrigger.Create(AABB(-6528.875,6184.670,449.125,-6267.029,6521.628,773.913), "DisableCombatMovement", "Lower_switch"); RegionTrigger.Create(AABB(-5152.875,7391.125,257.125,-5083.966,7541.948,503.471), "DisableCombatMovement", "Vent_Shaft"); RegionTrigger.Create(AABB(-5152.875,7391.125,257.125,-5083.966,7541.948,503.471), "DisableBotPush", ""); RegionTrigger.Create(AABB(-4071.125,5875.091,305.125,-3885.549,5986.943,400.645), "BreakableDistance", "Wooden_Fence"); OnTriggerRegion(AABB(3178.892,2550.151,-54.758,3216.892,2588.151,19.242), Map.Tank_at_start); OnTriggerRegion(AABB(2418.687,3446.883,-54.873,2456.687,3484.883,19.127), Map.Tank_at_gun); OnTriggerRegion(AABB(2660.102,4709.086,-62.875,2698.102,4747.086,11.125), Map.Tank_near_weapon_supply); OnTriggerRegion(AABB(2579.996,5632.335,-28.270,2617.996,5670.335,45.730), Map.Tank_past_weapon_supply); OnTriggerRegion(AABB(-1326.451,6425.609,313.171,-1288.451,6463.609,387.171), Map.Tank_at_CP); OnTriggerRegion(AABB(-2805.961,7015.381,259.819,-2767.961,7053.381,333.819), Map.Tank_near_first_door); OnTriggerRegion(AABB(-6449.285,6425.613,705.125,-6411.285,6463.613,779.125), Map.Lift_on_the_top); OnTriggerRegion(AABB(-6472.234,6355.277,401.125,-6434.234,6393.277,423.125), Map.Lift_bottom); OnTriggerRegion(AABB(-7600.875,4151.125,242.009,-2817.314,7744.875,866.585), Map.Control_trigger); OnTriggerRegion(AABB(-7600.875,4151.125,251.246,-4943.125,7548.698,866.199), Map.Inside_bunker); thread(Map.First_Door_Thread); thread(Map.Second_Door_Thread); Wp.SetWaypointFlag( "Ladder_1", "closed", true ); Wp.SetWaypointFlag( "Ladder_3", "closed", false ); Wp.SetWaypointFlag( "Ladder_4", "closed", false ); Map.SetSpawn(); Util.UpdateSwitchData(); print( "^3Omni-bot map script ^3by ^1Q^2i^3k^4i ^3and ^1n^2a^4t^8i^3v^5e12^3 for map: ^7" + GetMapName() ); Util.BotChat( 0, "say", "^3Omni-bot map script ^3by ^1Q^2i^3k^4i ^3and ^1n^2a^4t^8i^3v^5e12 ^3for ^3map ^7" + GetMapName(), 1 ); }; global OnBotJoin = function( bot ) { bot.TargetBreakableDist = 100.0; Map.SetSpawn(); }; global InitializeRoutes = function() { MapRoutes = { CHECKPOINT_supplyflag = { ROUTE_Headquarters_Spawn = { ROUTE_SmallDoor = { ROUTE_AroundWall = { ROUTE_AroundWall_2 = {}, }, ROUTE_Park_1 = { ROUTE_Park_2 = {}, }, }, ROUTE_NearLockedDoor = { ROUTE_OpenedGate = {}, }, }, ROUTE_Minesupply_Spawn = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = { ROUTE_EmergencyExit = {}, }, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = { ROUTE_EmergencyExit = {}, }, },*/ ROUTE_DoorOppositeLift = { Weight = 4, ROUTE_FirstDoor = {}, }, ROUTE_DoorToSecondDoor = { Weight = 2, ROUTE_SecondDoor = {}, }, }, }, BUILD_ladder = { }, PLANT_ladder = { }, BUILD_tank = { }, PLANT_gun = { ROUTE_Headquarters_Spawn = { ROUTE_SmallDoor = { ROUTE_AroundWall = { ROUTE_AroundWall_2 = {}, }, ROUTE_Park_1 = { ROUTE_Park_2 = {}, }, }, ROUTE_NearLockedDoor = { ROUTE_OpenedGate = {}, }, }, }, FLAG_vkey = { ROUTE_Hut_Spawn = { ROUTE_HillNearKey_1 = { ROUTE_HillNearKey_2 = {}, ROUTE_OutsideLadder = { ROUTE_InsideHall = {}, }, }, ROUTE_LeftWayToKey = { ROUTE_OutsideLadder = { ROUTE_InsideHall = {}, }, ROUTE_InsideStairs = { ROUTE_InsideHall = {}, }, }, }, }, BUILD_Command_Post = { }, FLAG_docs = { }, PLANT_Repulsor_Gun = { ROUTE_CP_Spawn = { ROUTE_FirstDoor = { ROUTE_DoorOppositeLift = { Weight = 3, ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = {}, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = {}, },*/ ROUTE_LadderNearSecondDoor = { ROUTE_AmmoStorage = {}, }, }, }, ROUTE_SecondDoor = { ROUTE_DoorToSecondDoor = { ROUTE_LadderNearSecondDoor = { Weight = 2, ROUTE_AmmoStorage = {}, }, }, ROUTE_DoorOppositeLift = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = {}, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = {}, },*/ }, }, }, ROUTE_Weaponsupply_Spawn = { ROUTE_FirstDoor = { ROUTE_DoorOppositeLift = { Weight = 3, ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = {}, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = {}, },*/ ROUTE_LadderNearSecondDoor = { ROUTE_AmmoStorage = {}, }, }, }, ROUTE_SecondDoor = { ROUTE_DoorToSecondDoor = { ROUTE_LadderNearSecondDoor = { Weight = 2, ROUTE_AmmoStorage = {}, }, }, ROUTE_DoorOppositeLift = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = {}, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = {}, },*/ }, }, }, }, PLANT_Command_Post = { ROUTE_Minesupply_Spawn = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = { ROUTE_EmergencyExit = { ROUTE_BackWay_1 = { ROUTE_BackWay_2 = { ROUTE_BackWay_3 = { ROUTE_BackWay_4 = {}, }, }, }, }, }, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = { ROUTE_EmergencyExit = { ROUTE_BackWay_1 = { ROUTE_BackWay_2 = { ROUTE_BackWay_3 = { ROUTE_BackWay_4 = {}, }, }, }, }, }, },*/ ROUTE_DoorOppositeLift = { Weight = 4, ROUTE_FirstDoor = { ROUTE_BackWay_1 = { ROUTE_BackWay_2 = { ROUTE_BackWay_3 = { ROUTE_BackWay_4 = {}, }, }, }, }, }, ROUTE_DoorToSecondDoor = { Weight = 2, ROUTE_SecondDoor = { ROUTE_BackWay_1 = { ROUTE_BackWay_2 = { ROUTE_BackWay_3 = { ROUTE_BackWay_4 = {}, }, }, }, }, }, }, }, CAPPOINT_Locked_Door = { ROUTE_FlagKeyRoom = { ROUTE_LadderToKeyRoom = { ROUTE_YardBox_1 = { ROUTE_NearLockedDoor = {}, }, }, ROUTE_InsideHall = { ROUTE_InsideStairs = { ROUTE_TunnelBox = { ROUTE_YardBox_2 = { ROUTE_NearLockedDoor = {}, }, }, }, }, ROUTE_AroundGarrage = { ROUTE_WoodenGate = { ROUTE_NearLockedDoor = {}, }, }, }, }, }; MapRoutes["DEFEND_LockedDoor_.*"] = { ROUTE_Hut_Spawn = { ROUTE_HillNearKey_1 = { ROUTE_AroundGarrage = { ROUTE_WoodenGate = {}, }, }, }, }; MapRoutes[".*_Axis_Gun_.*"] = { ROUTE_Minesupply_Spawn = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = { ROUTE_EmergencyExit = {}, }, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = { ROUTE_EmergencyExit = {}, }, },*/ ROUTE_DoorOppositeLift = { Weight = 4, ROUTE_FirstDoor = {}, }, ROUTE_DoorToSecondDoor = { Weight = 2, ROUTE_SecondDoor = {}, }, }, }; MapRoutes["ATTACK_Transmitter_.*"] = { ROUTE_Minesupply_Spawn = { ROUTE_AroundLaboratory_1 = { Weight = 3, ROUTE_LaboratoryStairs = { ROUTE_EmergencyExit = {}, }, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 = { ROUTE_EmergencyExit = {}, }, },*/ ROUTE_DoorOppositeLift = { Weight = 4, ROUTE_FirstDoor = {}, }, }, }; MapRoutes[".*_Axis_Bunker_.*"] = { ROUTE_Minesupply_Spawn = { ROUTE_AroundLaboratory_1 = { Weight = 2, ROUTE_LaboratoryStairs ={}, }, /*ROUTE_Lift_1 = { ROUTE_Lift_2 ={}, },*/ ROUTE_LadderNearSecondDoor = { ROUTE_AmmoStorage = {}, }, }, }; //MapRoutes.CHECKPOINT_supplyflag = MapRoutes.PLANT_gun; //MapRoutes.CHECKPOINT_supplyflag = MapRoutes[".*_Axis_Gun_.*"]; MapRoutes[".*_Allies_Gun_.*"] = MapRoutes.PLANT_gun; MapRoutes["DEFEND_Axis_Flag_.*"] = MapRoutes[".*_Axis_Gun_.*"]; MapRoutes[".*_Axis_WS_.*"] = MapRoutes[".*_Axis_Gun_.*"]; MapRoutes[".*_Axis_CP_.*"] = MapRoutes[".*_Axis_Gun_.*"]; MapRoutes["DEFEND_Axis_Documents_.*"] = MapRoutes[".*_Axis_Bunker_.*"]; MapRoutes.FLAG_docs = MapRoutes.PLANT_Repulsor_Gun; MapRoutes["ATTACK_Allies_Bunker_.*"] = MapRoutes.PLANT_Repulsor_Gun; Util.Routes(MapRoutes); };