//============================================================================================================================ // // stalingrad.gm // // Who When What //---------------------------------------------------------------------------------------------------------------------------- // d00d 09-12-2010 Finished waypoints, fixed stuckage, added more facings to camp goals where applicable. // Fixed conditional variables overwriting functions in map table (!!!). // AliceInChains 13-05-2010 Waypointing near finished, just some roofs left // Partial implementation of DEFEND groups. Added (basic) bot roles // TODO: Improve Defense, optimize routing/waypoints, increase SNIPE spots (also for Allies) //============================================================================================================================= // Spawns: // Axis Rear Spawn, spawnpoint 1 ( Fall back spawn after Munitions Depot is captured/Main gate is blown by Allies ) // Allies River Spawn, spawnpoint 2 ( Starting spawn for Allies ) // Munitions Depot, spawnpoint 3 ( Checkpoint spawn, fixed for Allies after Main gate is blown ) /* AXIS DEFEND/MOBILEMG42/SNIPE: Axis_Bridge 5 DEFEND, 2 MG42, 4 SNIPE Axis_EastBridge 5 DEFEND, 2 MG42, 4 SNIPE Axis_MunitionsDepot 4 DEFEND, 2 MG42, 1 SNIPE Axis_MainGate 5 DEFEND, 1 MG42, 2 SNIPE Axis_WesternWall 2 DEFEND, 2 MG42, 4 SNIPE Axis_Church 5 DEFEND, 2 MG42, 2 SNIPE Axis_EastTank 8 DEFEND, 4 MG42, 4 SNIPE Axis_WestTank 5 DEFEND, 1 MG42, 2 SNIPE --------------------------------------------------- Total 39 DEFEND, 16 MG42, 23 SNIPE */ global Map = { Debug = false, Ammo_Cabinet_south_ammocabinet = "AMMOCAB_south_ammocabinet", Health_Cabinet_south_healthcabinet = "HEALTHCAB_south_healthcabinet", Call_Artillery_368 = "CALLARTILLERY_368", Call_Artillery_464 = "CALLARTILLERY_464", Call_Artillery_474 = "CALLARTILLERY_474", Artillery_D_504 = "ARTILLERY_D_504", Checkpoint_munitionsflag = "CHECKPOINT_munitionsflag", Build_Allied_Command_Post = "BUILD_Allied_Command_Post", Build_Axis_Command_Post = "BUILD_Axis_Command_Post", Build_East_Tank_MG_Nest = "BUILD_East_Tank_MG_Nest", Build_West_Tank_MG_Nest = "BUILD_West_Tank_MG_Nest", Plant_Allied_Command_Post = "PLANT_Allied_Command_Post", Plant_Axis_Command_Post = "PLANT_Axis_Command_Post", Plant_East_Tank = "PLANT_East_Tank", Plant_East_Tank_MG_Nest = "PLANT_East_Tank_MG_Nest", Plant_Main_Gate = "PLANT_Main_Gate", Plant_West_Tank = "PLANT_West_Tank", Plant_West_Tank_MG_Nest = "PLANT_West_Tank_MG_Nest", Plant_Western_Wall = "PLANT_Western_Wall", Mount_328 = "MOUNTMG42_328", Mount_East_Tank_MG_Nest = "MOUNTMG42_East_Tank_MG_Nest", Mount_West_Tank_MG_Nest = "MOUNTMG42_West_Tank_MG_Nest", Repair_328 = "REPAIRMG42_328", Repair_East_Tank_MG_Nest = "REPAIRMG42_East_Tank_MG_Nest", Repair_West_Tank_MG_Nest = "REPAIRMG42_West_Tank_MG_Nest", // Conditionals Main_Gate_Is_Destroyed = false, Western_Wall_Is_Destroyed = false, East_Tank_Is_Destroyed = false, West_Tank_Is_Destroyed = false, Navigation = { jump_pt = { // better response time than nav flags navigate = function(_this) { _this.Bot.PressButton(BTN.JUMP); yield(); }, }, }, Roles = { AXIS = { AllBots = true, DEFENDER2 = { // East Tank //~crucialClass = CLASS.ENGINEER, numbots = 2, }, DEFENDER1 = { // West Tank //~crucialClass = CLASS.ENGINEER, numbots = 2, }, }, }, Allied_Command_Post_Built = function( trigger ) { if ( !Map.Main_Gate_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, Map.Plant_Allied_Command_Post ); } SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_Allied_Command_Post ); }, Axis_Command_Post_Built = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, Map.Build_Axis_Command_Post ); if ( Map.Main_Gate_Destroyed || Map.Western_Wall_Destroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, Map.Plant_Axis_Command_Post ); } }, East_Tank_MG_Nest_Built = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, Map.Build_East_Tank_MG_Nest ); }, West_Tank_MG_Nest_Built = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, Map.Build_West_Tank_MG_Nest ); }, Allied_Command_Post_Destroyed = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, Map.Plant_Allied_Command_Post ); SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_Allied_Command_Post ); }, Axis_Command_Post_Destroyed = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, Map.Build_Axis_Command_Post ); SetAvailableMapGoals( TEAM.ALLIES, false, Map.Plant_Axis_Command_Post ); }, East_Tank_Destroyed = function( trigger ) { Map.East_Tank_Is_Destroyed = true; Util.ClearRoleForGoals( ".*_Axis_WestTank.*", ROLE.DEFENDER1 ); //~Util.ClearRoleForGoals( ".*_Axis_MainGate.*", ROLE.DEFENDER1 ); SetAvailableMapGoals( TEAM.AXIS, false, { Map.Build_East_Tank_MG_Nest, Map.Repair_East_Tank_MG_Nest, ".*_Axis_Church.*", ".*_Axis_EastTank.*", ".*_Axis_MainGate.*", }); SetAvailableMapGoals( TEAM.ALLIES, false, { Map.Plant_East_Tank, ".*_Allies_EastTank.*", "GRENADE_east_tank_mg.*", "SMOKEBOMB_east_tank.*", }); }, East_Tank_MG_Nest_Destroyed = function( trigger ) { if ( !Map.East_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, Map.Build_East_Tank_MG_Nest ); } }, Main_Gate_Destroyed = function( trigger ) { Map.Main_Gate_Is_Destroyed = true; // Munitions Depot is lost so fall back and concentrate defenses around tanks and approach routes. sleep(2.0); // Bot pathfinding is done before blockwall state is updated otherwise SetAvailableMapGoals( TEAM.AXIS, false, { ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", ".*_Axis_MunitionsDepot.*", }); SetAvailableMapGoals( TEAM.AXIS, true, { Map.Build_Axis_Command_Post, ".*_Axis_MainGate.*", ".*_Axis_EastTank.*", ".*_Axis_WestTank.*", }); SetAvailableMapGoals( TEAM.ALLIES, false, { ".*_Allies_MainGate.*", ".*_Allies_WesternWall.*", }); SetAvailableMapGoals( TEAM.ALLIES, true, { "AMMOCAB_south_ammocabinet", "HEALTHCAB_south_healthcabinet", }); if ( !Map.East_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, { Map.Repair_East_Tank_MG_Nest, Map.Build_East_Tank_MG_Nest, }); SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Plant_East_Tank, ".*_Allies_EastTank.*", "GRENADE_east_tank_mg.*", "SMOKEBOMB_east_tank.*", }); } if ( !Map.West_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, { Map.Build_West_Tank_MG_Nest, Map.Repair_West_Tank_MG_Nest, }); SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Plant_West_Tank, ".*_Allies_WestTank.*", "GRENADE_west_tank_mg.*", "SMOKEBOMB_west_tank.*", }); } }, West_Tank_Destroyed = function( trigger ) { Map.West_Tank_Is_Destroyed = true; Util.ClearRoleForGoals( ".*_Axis_EastTank.*", ROLE.DEFENDER2 ); //~Util.ClearRoleForGoals( ".*_Axis_MainGate.*", ROLE.DEFENDER2 ); SetAvailableMapGoals( TEAM.AXIS, false, { Map.Repair_West_Tank_MG_Nest, Map.Build_West_Tank_MG_Nest, ".*_Axis_WestTank.*", ".*_Axis_WesternWall.*", }); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_Church.*" ); // Ambush Allies using Western Wall --> Church route SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_MainGate.*" ); // West defense no longer needed; back to agressive East defense SetAvailableMapGoals( TEAM.ALLIES, false, { "SMOKEBOMB_west_tank.*", "GRENADE_west_tank_mg.*", Map.Plant_West_Tank, ".*_Allies_WestTank.*", }); }, West_Tank_MG_Nest_Destroyed = function( trigger ) { if ( !Map.West_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, Map.Build_West_Tank_MG_Nest ); } }, Western_Wall_Destroyed = function( trigger ) { Map.Western_Wall_Is_Destroyed = true; // Munitions Depot can still be captured at this point. Probably the only situation where bots need to be spread out. sleep(2.0); SetAvailableMapGoals( TEAM.AXIS, false, { ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", }); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_WesternWall.*" ); if ( !Map.East_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, { Map.Repair_East_Tank_MG_Nest, Map.Build_East_Tank_MG_Nest, }); SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Plant_East_Tank, ".*_Allies_EastTank.*", "GRENADE_east_tank_mg.*", "SMOKEBOMB_east_tank.*", }); } if ( !Map.West_Tank_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, true, { Map.Build_West_Tank_MG_Nest, Map.Repair_West_Tank_MG_Nest, }); SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Plant_West_Tank, ".*_Allies_WestTank.*", "GRENADE_west_tank_mg.*", "SMOKEBOMB_west_tank.*", }); } if ( Map.Main_Gate_Is_Destroyed ) { SetAvailableMapGoals( TEAM.ALLIES, false, ".*_Allies_WesternWall.*" ); // Munitions Depot secured so move out } }, munitionsflag_Axis_Captured = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, { ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", }); if ( Map.Western_Wall_Is_Destroyed ) { SetAvailableMapGoals( TEAM.AXIS, false, { ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", }); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_MunitionsDepot.*" ); } }, munitionsflag_Allies_Captured = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, { ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", }); SetAvailableMapGoals( TEAM.AXIS, true, ".*_Axis_MunitionsDepot.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, ".*_Allies_MainGate.*" ); // 4 ATTACK ==> cover dynamite/route to flag if ( !Map.Western_Wall_Is_Destroyed ) { SetAvailableMapGoals( TEAM.ALLIES, true, ".*_Allies_WesternWall.*" ); // 4 ATTACK ==> cover dynamite/route to flag } }, }; global OnMapLoad = function() { OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built ); OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built ); OnTrigger( "The East Tank MG Nest has been constructed!", Map.East_Tank_MG_Nest_Built ); OnTrigger( "The West Tank MG Nest has been constructed!", Map.West_Tank_MG_Nest_Built ); 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( "Allies have destroyed the East Tank!", Map.East_Tank_Destroyed ); OnTrigger( "The East Tank MG Nest has been damaged!", Map.East_Tank_MG_Nest_Destroyed ); OnTrigger( "Allies have blown the Main Gate and secured the Munitions Depot spawn!", Map.Main_Gate_Destroyed ); OnTrigger( "Allied team has destroyed the West Tank!", Map.West_Tank_Destroyed ); OnTrigger( "The West Tank MG Nest has been damaged!", Map.West_Tank_MG_Nest_Destroyed ); OnTrigger( "Allies have breached the Upper wall", Map.Western_Wall_Destroyed ); OnTrigger( "Axis reclaim the Munitions Depot!", Map.munitionsflag_Axis_Captured ); OnTrigger( "Allies capture the Munitions Depot!", Map.munitionsflag_Allies_Captured ); Util.SetMaxUsers( 5, Map.Checkpoint_munitionsflag ); Util.SetMaxUsers( 1, "DEFEND_.*" ); Util.SetMaxUsers( 1, "MOUNTMG42_.*" ); Util.SetMaxUsers( 1, "GRENADE_.*" ); Util.SetMaxUsersInProgress( 2, "BUILD_.*" ); Util.SetMaxUsersInUse( 1, "BUILD_.*" ); Util.SetMaxUsersInProgress( 2, "PLANT_.*" ); Util.SetMaxUsersInUse( 1, "PLANT_.*" ); Util.SetMaxUsersInProgress( 2, "MOBILEMG42_.*" ); Util.SetMaxUsersInProgress( 2, "SNIPE_.*" ); Util.SetGoalOffset( -200, 60, 0, Map.Plant_West_Tank ); SetMapGoalProperties( "ATTACK_.*", {MinCampTime=15, MaxCampTime=20} ); SetMapGoalProperties( "ATTACK_Allies_EastTank_Main", {MinCampTime=2, MaxCampTime=3} ); // Special Case SetMapGoalProperties( "ATTACK_Allies_WestTank_Main", {MinCampTime=2, MaxCampTime=3} ); // Special Case SetMapGoalProperties( "DEFEND_.*", {MinCampTime=30, MaxCampTime=45} ); SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=60, MaxCampTime=90} ); SetMapGoalProperties( "SNIPE_.*", {MinCampTime=45, MaxCampTime=60} ); Util.DisableGoal( ".*", true ); // All but Routes ETUtil.LimitToClass( Map.Plant_Allied_Command_Post, TEAM.AXIS, CLASS.COVERTOPS ); // Axis Goals SetAvailableMapGoals( TEAM.AXIS, true, { "CHECKPOINT_munitionsflag", ".*_Axis_Bridge.*", ".*_Axis_EastBridge.*", }); // Allied Goals SetAvailableMapGoals( TEAM.ALLIES, true, { "CHECKPOINT_munitionsflag", Map.Build_Allied_Command_Post, Map.Plant_Main_Gate, Map.Plant_Western_Wall, }); MapRoutes = { // Allied PLANT_Main_Gate = { ROUTE_alliedRiverSpawn = { ROUTE_bridgeLeft = { Weight = 2, ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, }, ROUTE_alliedRiverSpawn_Bridge = { ROUTE_bridgeLeft = { ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, }, ROUTE_alliedRiverSpawn_Flank = { ROUTE_eastBridge_Left = { ROUTE_munitionsDepot_Right = {}, }, ROUTE_eastBridge_Right = { ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_alliedCommandPost = // Needed? { ROUTE_munitionsDepot_Right = {}, }, }, PLANT_Western_Wall = { ROUTE_alliedRiverSpawn = { ROUTE_bridgeLeft = { Weight = 2, ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_eastBridge_Left = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, ROUTE_eastBridge_Right = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_alliedRiverSpawn_Bridge = { ROUTE_bridgeLeft = { Weight = 2, ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, }, ROUTE_alliedRiverSpawn_Flank = { ROUTE_eastBridge_Left = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, ROUTE_eastBridge_Right = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_alliedCommandPost = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, BUILD_Allied_Command_Post = { ROUTE_alliedRiverSpawn = { ROUTE_eastBridge_Left = { Weight = 2, }, ROUTE_eastBridge_Right = { Weight = 2, }, ROUTE_bridgeLeft = { ROUTE_bridgeLeft_End = {}, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = {}, }, }, ROUTE_alliedRiverSpawn_Flank = { ROUTE_eastBridge_Left = {}, ROUTE_eastBridge_Right = {}, }, }, PLANT_West_Tank = { ROUTE_munitionsDepot = { ROUTE_westernWall = { ROUTE_churchSide = { ROUTE_eastTank_Approach = {}, }, ROUTE_westTank_Approach = {}, }, ROUTE_mainGate = { ROUTE_churchSide = { ROUTE_westTank_Approach = {}, }, }, }, }, PLANT_East_Tank = { ROUTE_munitionsDepot = { ROUTE_westernWall = { ROUTE_churchSide = { ROUTE_eastTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, ROUTE_westTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, ROUTE_mainGate = { ROUTE_churchSide = { ROUTE_westTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, ROUTE_eastTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, }, }, PLANT_Axis_Command_Post = { ROUTE_munitionsDepot = { ROUTE_westernWall = { ROUTE_churchSide = { ROUTE_eastTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, }, ROUTE_mainGate = { ROUTE_eastTank_Approach = { ROUTE_eastTank_Left = {}, ROUTE_eastTank_Right = {}, }, }, }, }, // Combined Allied/Axis CHECKPOINT_munitionsflag = { // Allied ROUTE_alliedRiverSpawn = { ROUTE_bridgeLeft = { Weight = 2, ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_eastBridge_Left = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, ROUTE_eastBridge_Right = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_alliedRiverSpawn_Bridge = { ROUTE_bridgeLeft = { Weight = 2, ROUTE_bridgeLeft_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, ROUTE_bridgeRight = { ROUTE_bridgeRight_End = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, }, ROUTE_alliedRiverSpawn_Flank = { ROUTE_eastBridge_Left = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, ROUTE_eastBridge_Right = { ROUTE_munitionsDepot_Left = {}, ROUTE_munitionsDepot_Right = {}, }, }, // Axis ROUTE_axisRearSpawn = { ROUTE_churchSide = { ROUTE_mainGate = {}, ROUTE_westernWall = {}, }, ROUTE_eastTank_Approach = { ROUTE_mainGate = {}, ROUTE_westernWall = {}, }, ROUTE_westTank_Approach = { ROUTE_westernWall = {}, }, }, ROUTE_axisRearSpawn_Crossroad = { ROUTE_churchSide = { ROUTE_mainGate = {}, ROUTE_westernWall = {}, }, ROUTE_eastTank_Approach = { ROUTE_mainGate = {}, ROUTE_westernWall = {}, }, ROUTE_westTank_Approach = { ROUTE_westernWall = {}, }, }, }, }; // Copy Routes MapRoutes.ATTACK_Allies_WesternWall_1 = MapRoutes.PLANT_Western_Wall; MapRoutes.ATTACK_Allies_WesternWall_2 = MapRoutes.PLANT_Western_Wall; MapRoutes.ATTACK_Allies_WesternWall_3 = MapRoutes.PLANT_Western_Wall; MapRoutes.ATTACK_Allies_WesternWall_4 = MapRoutes.PLANT_Western_Wall; MapRoutes.ATTACK_Allies_MainGate_1 = MapRoutes.PLANT_Main_Gate; MapRoutes.ATTACK_Allies_MainGate_2 = MapRoutes.PLANT_Main_Gate; MapRoutes.ATTACK_Allies_MainGate_3 = MapRoutes.PLANT_Main_Gate; MapRoutes.ATTACK_Allies_MainGate_4 = MapRoutes.PLANT_Main_Gate; MapRoutes.ATTACK_Allies_EastTank_Main = MapRoutes.PLANT_EastTank; MapRoutes.ATTACK_Allies_WestTank_Main = MapRoutes.PLANT_WestTank; MapRoutes.PLANT_Allied_Command_Post = MapRoutes.CHECKPOINT_munitionsflag; Util.Routes(MapRoutes); Util.MapDebugPrint( "OnMapLoad: Stalingrad" ); }; global OnBotJoin = function( bot ) { bot.MaxViewDistance = 1600; // Really needed as this map has fog team = bot.GetTeam(); class = bot.GetClass(); if ( team == TEAM.ALLIES ) { if ( class == CLASS.COVERTOPS ) { bot.ChangePrimaryWeapon( WEAPON.GARAND ); } } if ( team == TEAM.AXIS ) { if ( class == CLASS.COVERTOPS ) { bot.ChangePrimaryWeapon( WEAPON.K43 ); } } };