//========================================================================================== // // uje_01.gm // // Who When What //------------------------------------------------------------------------------------------ // |TP|kaos 23 December 2012 Rev.2 // pending some attack-defense goals, routes, groups and trigger zones. I keep it ... //========================================================================================== // Last Update: 24 December 2012 global Map = { Debug = 0, // please set to zero before distributing your script Allied_CP_Dyno = 0, Axis_CP_Dyno = 0, a_door_Dyno = 0, a_fence_Dyno = 0, a_ladder_Dyno = 0, bridge_Dyno = 0, well_Dyno = 0, viplocked = 1, //1=locked 0=unlocked vipstatus = 0, //0=initial 1=live 2=dead TunneldoorStatus = 0, //0=closed 1=opened bridge_Destroyed = 0, parause = 0, Talk = true, Ammo_Cabinet_ammo0 = "AMMOCAB_ammo0", Ammo_Cabinet_ammo1 = "AMMOCAB_ammo1", Ammo_Cabinet_ammo2 = "AMMOCAB_ammo2", Ammo_Cabinet_ammo3 = "AMMOCAB_ammo3", Health_Cabinet_health0 = "HEALTHCAB_health0", Health_Cabinet_health1 = "HEALTHCAB_health1", Health_Cabinet_health2 = "HEALTHCAB_health2", Health_Cabinet_health3 = "HEALTHCAB_health3", Checkpoint_tunnelspawnflag = "CHECKPOINT_tunnelspawnflag", Build_Allied_CP = "BUILD_Allied_CP", Build_Axis_CP = "BUILD_Axis_CP", Build_VIP_lock = "BUILD_VIP_lock", Build_a_door = "BUILD_a_door", Build_a_fence = "BUILD_a_fence", Build_a_ladder = "BUILD_a_ladder", Build_bridge = "BUILD_bridge", Build_bridge1 = "BUILD_bridge1", Build_bridge2 = "BUILD_bridge2", Build_well = "BUILD_well", Build_arado = "BUILD_Arado", Plant_Allied_CP = "PLANT_Allied_CP", Plant_Axis_CP = "PLANT_Axis_CP", Plant_a_door = "PLANT_a_door", Plant_a_fence = "PLANT_a_fence", Plant_a_ladder = "PLANT_a_ladder", Plant_bridge = "PLANT_bridge", Plant_well = "PLANT_well", Hostage = "MOVER_hostage", Parachute = "MOVER_para", Navigation = { window1 = { navigate = function( _this ) { _this.Bot.HoldButton(BTN.JUMP, 0.25); sleep(0.25); _this.Bot.HoldButton(BTN.CROUCH, 0.25); sleep(0.25); wpinfo = table(); wp1 = Wp.GetWaypointByName("window1_jump", wpinfo); if(_this.Goto(wpinfo.position) == EVENT.PATH_FAILED ) { sleep(0.5); Util.MapDebugPrint("damn window1"); _this.Goto(Vector3(-412.997, -3336.816, 168.125)); sleep(0.5); } }, }, window2 = { navigate = function( _this ) { _this.Bot.HoldButton(BTN.JUMP, 0.25); sleep(0.25); _this.Bot.HoldButton(BTN.CROUCH, 0.25); sleep(0.25); wpinfo = table(); wp2 = Wp.GetWaypointByName("window2_jump", wpinfo); if(_this.Goto(wpinfo.position) == EVENT.PATH_FAILED ) { sleep(0.5); Util.MapDebugPrint("damn window2"); _this.Goto(Vector3(-412.997, -3336.816, 168.125)); sleep(0.5); } }, }, // /bot waypoint_setproperty paththrough Navigation_PT:jump stuck1 = { navigate = function( _this ) { sleep(0.5); _this.Goto(Vector3(96.732, 1766.867, -471.875)); sleep(0.5); }, }, }, MountVehicle = { Enabled = false, }, Movers = { "MOVER_hostage", "MOVER_para", "MOVER_pharmacy_front", "MOVER_pharmacy_rubble", }, Allied_CP_Built = function( trigger ) { Util.MapDebugPrint( "Allied_CP_Built" ); }, Axis_CP_Built = function( trigger ) { Util.MapDebugPrint( "Axis_CP_Built" ); }, VIP_ready = function( trigger ) { ETUtil.CountClass( TEAM.AXIS, CLASS.ENGINEER ); Util.MapDebugPrint( "VIP_ready" ); }, VIP_lock_Built = function( trigger ) { Map.viplocked = 0; Map.vipstatus = 1; foreach ( id and bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES ) { Util.IgnoreTargetGoal( bot, "MOVER_hostage", 5 ); } } if ( ETUtil.CountClass( TEAM.AXIS, CLASS.MEDIC ) == 0 ) { ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.MEDIC, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.MEDIC, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.MEDIC, true, 1 ); } Util.BotChat(TEAM.AXIS, "vsay", VOICE.G_CHEER, 1); Util.DisableGoal( "BUILD_well" ); Util.DisableGoal( "PLANT_well" ); Util.DisableGoal( "BUILD_a_ladder" ); Util.DisableGoal( "PLANT_a_ladder" ); Util.DisableGoal( "BUILD_a_door" ); Util.DisableGoal( "PLANT_a_door" ); Util.DisableGoal( "SWITCH_tunneldoor_.*" ); Util.DisableGoal( "ATTACK_vip1_.*" ); Util.DisableGoal( "DEFEND_vip1_.*" ); Util.EnableGoal( "DEFEND_tower" ); SetGoalPriority( "BUILD_bridge", 0.95); SetGoalPriority( "BUILD_bridge1", 0.96); SetGoalPriority( "BUILD_bridge2", 0.97); Util.DisableGoal( "BUILD_VIP_lock" ); Util.BotChat(TEAM.AXIS, "sayteam", "Go team, we have to escort the spunky!", 1); Util.BotChat(TEAM.ALLIES, "sayteam", "The spunky has been released, get him!", 1); SetAvailableMapGoals( TEAM.AXIS, false, "CHECKPOINT_tunnelspawnflag" ); SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge" ); Util.DisableGoal( "MOBILEMG42_vip1.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_CP" ); SetAvailableMapGoals( TEAM.ALLIES, false, { "CHECKPOINT_tunnelspawnflag", "PLANTMINE_.*", "AMMOCAB_ammo1", "HEALTHCAB_health1", }); Map.bridge_Built = thread( Map.bridgeTraceLineThread ); sleep(5); Util.EnableGoal( "ESCORT_hostage" ); Util.MapDebugPrint( "VIP_lock_Built" ); }, VIP_killed = function( trigger ) { Map.vipstatus = 2; foreach ( id and bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES ) { Util.IgnoreTargetGoal( bot, "MOVER_hostage", 9999 ); } } if ( ETUtil.CountClass( TEAM.AXIS, CLASS.MEDIC ) == 0 ) { ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.MEDIC, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.MEDIC, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.MEDIC, false, 1 ); } SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_hostage" ); SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_hostage_m" ); //This ensures that CLASS.MEDIC has a hole to close, //in case of which all the escort spots are occupied by other classes. Util.MapDebugPrint( "VIP_killed" ); }, VIP_revived = function( trigger ) { Map.vipstatus = 1; foreach ( id and bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES ) { Util.IgnoreTargetGoal( bot, "MOVER_hostage", 2 ); } } SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_hostage" ); //If the allies are not occupation, seek the vip if this is alive, SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_hostage_m" ); //and save trigger zones. if ( ETUtil.CountClass( TEAM.AXIS, CLASS.MEDIC ) == 0 ) { ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.MEDIC, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.MEDIC, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.MEDIC, true, 1 ); } Util.MapDebugPrint( "VIP_revived" ); }, a_door_Built = function( trigger ) { Util.MapDebugPrint( "a_door_Built" ); }, a_fence_Built = function( trigger ) { Util.MapDebugPrint( "a_fence_Built" ); }, a_ladder_Built = function( trigger ) { Util.MapDebugPrint( "a_ladder_Built" ); }, Arado_Built = function( trigger ) { if ( ETUtil.CountClass( TEAM.AXIS, CLASS.MEDIC ) < 2) { ETUtil.ChangeClass( TEAM.AXIS, CLASS.ENGINEER, CLASS.MEDIC, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.MEDIC, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.MEDIC, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.MEDIC, false, 1 ); } ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.ENGINEER, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.ENGINEER, true, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.ENGINEER, true, 1 ); Util.DisableGoal( "BUILD_Arado" ); SetGoalPriority( "PLANT_Allied_CP", 0.81, TEAM.AXIS, CLASS.ENGINEER); Util.MapDebugPrint( "arado_Built" ); }, well_Built = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_well" ); Util.MapDebugPrint( "well_Built" ); }, Allied_CP_Planted = function( trigger ) { Map.Allied_CP_Dyno += 1; Util.MapDebugPrint( "Allied_CP_Planted" ); }, Axis_CP_Planted = function( trigger ) { Map.Axis_CP_Dyno += 1; Util.MapDebugPrint( "Axis_CP_Planted" ); }, a_door_Planted = function( trigger ) { Map.a_door_Dyno += 1; Util.MapDebugPrint( "a_door_Planted" ); }, a_fence_Planted = function( trigger ) { Map.a_fence_Dyno += 1; Util.MapDebugPrint( "a_fence_Planted" ); }, a_ladder_Planted = function( trigger ) { Map.a_ladder_Dyno += 1; Util.MapDebugPrint( "a_ladder_Planted" ); }, bridge_Planted = function( trigger ) { Map.bridge_Dyno += 1; Util.MapDebugPrint( "bridge_Planted" ); }, well_Planted = function( trigger ) { foreach ( id and bot in BotTable ) { if (ETUtil.CountClass( TEAM.AXIS, CLASS.ENGINEER ) < 2 && bot.GetTeam() == TEAM.AXIS && bot.GetClass() == CLASS.ENGINEER && bot.GetReinforceTime() < 15) { bot.ExecCommand("kill"); } } Map.well_Dyno += 1; SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_well" ); Util.MapDebugPrint( "well_Planted" ); }, Allied_CP_Defused = function( trigger ) { Map.Allied_CP_Dyno -= 1; Util.MapDebugPrint( "Allied_CP_Defused" ); }, Axis_CP_Defused = function( trigger ) { Map.Axis_CP_Dyno -= 1; Util.MapDebugPrint( "Axis_CP_Defused" ); }, a_door_Defused = function( trigger ) { Map.a_door_Dyno -= 1; Util.MapDebugPrint( "a_door_Defused" ); }, a_fence_Defused = function( trigger ) { Map.a_fence_Dyno -= 1; Util.MapDebugPrint( "a_fence_Defused" ); }, a_ladder_Defused = function( trigger ) { Map.a_ladder_Dyno -= 1; Util.MapDebugPrint( "a_ladder_Defused" ); }, bridge_Defused = function( trigger ) { Map.bridge_Dyno -= 1; Util.MapDebugPrint( "bridge_Defused" ); }, well_Defused = function( trigger ) { Map.well_Dyno -= 1; SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_well" ); Util.MapDebugPrint( "well_Defused" ); }, Allied_CP_Destroyed = function( trigger ) { Map.Allied_CP_Dyno = 0; Util.MapDebugPrint( "Allied_CP_Destroyed" ); }, Axis_CP_Destroyed = function( trigger ) { Map.Axis_CP_Dyno = 0; Util.MapDebugPrint( "Axis_CP_Destroyed" ); }, a_door_Destroyed = function( trigger ) { Map.a_door_Dyno = 0; Util.MapDebugPrint( "a_door_Destroyed" ); }, a_fence_Destroyed = function( trigger ) { Map.a_fence_Dyno = 0; Util.MapDebugPrint( "a_fence_Destroyed" ); }, a_ladder_Destroyed = function( trigger ) { Map.a_ladder_Dyno = 0; Util.MapDebugPrint( "a_ladder_Destroyed" ); }, bridge_Destroyed = function( trigger ) { Map.bridge_Destroyed = 1; SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge" ); SetAvailableMapGoals( TEAM.AXIS, false, { "BUILD_bridge1", "BUILD_bridge2", }); Wp.SetWaypointFlag("bridgefast","closed",false); Map.bridge_Dyno = 0; sleep (8); Map.bridge_Built = thread( Map.bridgeTraceLineThread ); print( "bridge_Destroyed" ); }, well_Destroyed = function( trigger ) { Map.well_Dyno = 0; SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_well" ); Util.MapDebugPrint( "well_Destroyed" ); }, tunnelspawnflag_Axis_Captured = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, "CHECKPOINT_tunnelspawnflag" ); SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_tunneldoor_switch1" ); Util.MapDebugPrint( "tunnelspawnflag_Axis_Captured" ); }, tunnelspawnflag_Allies_Captured = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_tunnelspawnflag" ); SetAvailableMapGoals( TEAM.ALLIES, false, "CHECKPOINT_tunnelspawnflag" ); SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_tunneldoor_switch" ); Util.MapDebugPrint( "tunnelspawnflag_Allies_Captured" ); }, tunneldoor = function( trigger ) { if ( Map.TunneldoorStatus == 0 && Map.viplocked == 1 ) { Map.TunneldoorStatus = 1; //tunneldoor opened SetAvailableMapGoals( TEAM.AXIS, false, "SWITCH_tunneldoor_.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_tunnelspawnflag" ); Util.LimitToClass("CHECKPOINT_tunnelspawnflag", TEAM.ALLIES, CLASS.COVERTOPS); SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_tunneldoor_switch" ); print( "tunneldoor_opened" ); } else if ( Map.TunneldoorStatus == 1 && Map.viplocked == 1 ) { Map.TunneldoorStatus = 0; //tunneldoor closed SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_tunneldoor_switch1" ); SetAvailableMapGoals( TEAM.ALLIES, false, { "CHECKPOINT_tunnelspawnflag", "SWITCH_tunneldoor.*", }); print( "tunneldoor_closed" ); } foreach ( id and bot in BotTable ) { if ( Map.TunneldoorStatus == 0 && Map.viplocked == 1 && bot.GetTeam() == TEAM.AXIS && bot.DistanceTo(Vector3(-1399.629, -3051.149, 40.125)) <= 200 ) { SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_tunneldoor_switch" ); Util.MapDebugPrint( "switch_outdoor for axis" ); } } Util.MapDebugPrint( "tunneldoor" ); }, newspawn = function( trigger ) { Util.DisableGoal( "DEFEND_tower" ); Util.EnableGoal( "ROUTE.*" ); Util.EnableGoal( "MOVER_para" ); SetAvailableMapGoals( TEAM.ALLIES, false, { "PLANT_bridge", "PLANT_Axis_CP", }); SetGoalPriority( "PLANT_Allied_CP", 0.0, TEAM.AXIS, CLASS.ENGINEER); SetAvailableMapGoals( TEAM.AXIS, false, { "BUILD_bridge.*", "AMMOCAB_ammo1", "HEALTHCAB_health1", }); SetAvailableMapGoals( TEAM.AXIS, true, { "AMMOCAB_ammo3", "HEALTHCAB_health3", }); Wp.SetWaypointFlag("parain","closed",false); SetAvailableMapGoals( TEAM.AXIS, true, { "ROUTE_.*", "MOVER_para", }); SetAvailableMapGoals( TEAM.ALLIES, false, { "ROUTE_.*", "MOVER_para", }); Util.SetMaxUsers( 1, "ROUTE_para.*" ); Util.SetMaxUsersInProgress( 1, "ROUTE_para.*" ); Util.SetMaxUsersInUse( 1, "ROUTE_para.*" ); threadKill( Map.bridge_Built ); threadKill( Map.bridge1_Built ); threadKill( Map.bridge2_Built ); Util.ShowActiveGoals (); Util.MapDebugPrint( "newspawn" ); }, Arado_Available = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, { "PLANT_Allied_CP", "BUILD_Arado", }); SetGoalPriority( "BUILD_Arado", 1.0); SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_a_fence" ); SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_a_fence" ); if ( ETUtil.CountClass( TEAM.AXIS, CLASS.ENGINEER ) == 0) { ETUtil.ChangeClass( TEAM.AXIS, CLASS.SOLDIER, CLASS.ENGINEER, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.COVERTOPS, CLASS.ENGINEER, false, 1 ); ETUtil.ChangeClass( TEAM.AXIS, CLASS.FIELDOPS, CLASS.ENGINEER, false, 1 ); } Util.MapDebugPrint( "Arado_Available" ); }, parachute_in_use = function( trigger ) { Map.parause = 1; SetAvailableMapGoals( TEAM.AXIS, false, { "ROUTE_parachute", "ROUTE_parain", }); Wp.SetWaypointFlag("parain","closed",true); Wp.SetWaypointFlag("para_room1","closed",true); Wp.SetWaypointFlag("para_room2","closed",true); Wp.SetWaypointFlag("para_room3","closed",true); Util.MapDebugPrint( "parachute_in_use" ); //If a player dies using the parachute, the parachute will remain permanently in the trigger, //giving the impression that this is in use all time. This loop ensures replacement of its use. c = 0; while (c < 20) { //print("c: ", c); c = c + 1; if (Map.parause == 0) { Util.MapDebugPrint( "parachute_available" ); break; } else if (c == 20) { Map.parause = 0; SetAvailableMapGoals( TEAM.AXIS, true, { "ROUTE_parachute", "ROUTE_parain", }); Wp.SetWaypointFlag("parain","closed",false); Wp.SetWaypointFlag("para_room1","closed",false); Wp.SetWaypointFlag("para_room2","closed",false); Wp.SetWaypointFlag("para_room3","closed",false); Util.MapDebugPrint( "parachute_unlocked" ); } sleep(1); } }, parachute_ready = { Name="parachute", TriggerOnEntity = GetGoal("MOVER_para").GetEntity(), OnEnter = function(ent) { Map.parause = 0; Util.MapDebugPrint( "parachute in trigger" ); }, OnExit = function(ent) { Map.parause = 0; SetAvailableMapGoals( TEAM.AXIS, true, { "ROUTE_parachute", "ROUTE_parain", }); Wp.SetWaypointFlag("parain","closed",false); Wp.SetWaypointFlag("para_room1","closed",false); Wp.SetWaypointFlag("para_room2","closed",false); Wp.SetWaypointFlag("para_room3","closed",false); Util.MapDebugPrint( "parachute out trigger" ); }, }, parachute_room = { Name="parachute", TriggerOnClass = CLASS.ANYPLAYER, OnEnter = function(ent) { if( GetEntTeam(ent) == TEAM.AXIS ) { Wp.SetWaypointFlag("para_room1","closed",true); Wp.SetWaypointFlag("para_room2","closed",true); Wp.SetWaypointFlag("para_room3","closed",true); Util.MapDebugPrint( "parachute room occupied" ); } }, OnExit = function(ent) { Wp.SetWaypointFlag("para_room1","closed",false); Wp.SetWaypointFlag("para_room2","closed",false); Wp.SetWaypointFlag("para_room3","closed",false); Util.MapDebugPrint( "parachute room free" ); }, }, vip_jump1 = { Name="vip_jump1", TriggerOnEntity = GetGoal("MOVER_hostage").GetEntity(), OnEnter = function(ent) { Wp.SetWaypointFlag("jump1","closed",true); Wp.SetWaypointFlag("jump2","closed",false); SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_hostage.*" ); sleep(2); SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_hostage.*" ); print(GetEntName(ent),"in jump1"); }, OnExit = function(ent) { Wp.SetWaypointFlag("jump1","closed",false); Wp.SetWaypointFlag("jump2","closed",false); print(GetEntName(ent),"exited jump1"); }, }, vip_jump2 = { Name="vip_jump2", TriggerOnEntity = GetGoal("MOVER_hostage").GetEntity(), OnEnter = function(ent) { Wp.SetWaypointFlag("jump3","closed",true); Wp.SetWaypointFlag("jump4","closed",true); Wp.SetWaypointFlag("jump5","closed",false); SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_hostage.*" ); sleep(2); SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_hostage.*" ); print(GetEntName(ent),"in jump2"); }, OnExit = function(ent) { Wp.SetWaypointFlag("jump3","closed",false); Wp.SetWaypointFlag("jump4","closed",false); Wp.SetWaypointFlag("jump5","closed",false); print(GetEntName(ent),"exited jump2"); }, }, //Bridge //Necessary to close the loops when they have served their purpose, 2 active loops cause instability, 3 terrifying bridgeTraceLineThread = function() { start = Vector3(-733,-265,16); end = Vector3(-964,-265,16); interval = 2; while (1) { tr = TraceLine(start, end, null, TRACE.SHOT, 0, false); if(tr.fraction < 1) { Map.bridge_Destroyed = 0; SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge1" ); Wp.SetWaypointFlag("bridgefast","closed",true); //Util.DisableGoal( "ROUTE_bridgefast" ); Map.bridge1_Built = thread( Map.bridge1TraceLineThread ); //DrawDebugLine(start, end, COLOR.RED, interval); //Util.MapDebugPrint("bridge_built"); break; } else { SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_bridge1" ); //DrawDebugLine(start, end, COLOR.GREEN, interval); //Util.MapDebugPrint("bridge_not_built"); } sleep(interval); } }, bridge1TraceLineThread = function() { start = Vector3(-730,-550,260); end = Vector3(-970,-550,260); interval = 2; while (1) { tr = TraceLine(start, end, null, TRACE.SHOT, 0, false); if(tr.fraction < 1) { SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge2" ); Map.bridge2_Built = thread( Map.bridge2TraceLineThread ); //DrawDebugLine(start, end, COLOR.RED, interval); //Util.MapDebugPrint("bridge1_built"); break; } else if ( Map.bridge_Destroyed == 1 ) { SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge" ); Map.bridge_Built = thread( Map.bridgeTraceLineThread ); //DrawDebugLine(start, end, COLOR.GREEN, interval); //Util.MapDebugPrint("bridge1_not_built"); break; } else { SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_bridge2" ); //DrawDebugLine(start, end, COLOR.GREEN, interval); //Util.MapDebugPrint("bridge1_not_built"); } sleep(interval); } }, bridge2TraceLineThread = function() { start = Vector3(-750,20,260); end = Vector3(-970,20,260); interval = 2; while (1) { tr = TraceLine(start, end, null, TRACE.SHOT, 0, false); if(tr.fraction < 1) { SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_bridge.*" ); SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_CP" ); //DrawDebugLine(start, end, COLOR.RED, interval); //Util.MapDebugPrint("bridge2_built"); break; } else if ( Map.bridge_Destroyed == 1 ) { SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge" ); Map.bridge_Built = thread( Map.bridgeTraceLineThread ); //DrawDebugLine(start, end, COLOR.GREEN, interval); //Util.MapDebugPrint("bridge2_not_built"); break; } else { //Util.MapDebugPrint("bridge2_not_built"); //DrawDebugLine(start, end, COLOR.GREEN, interval); SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_bridge2" ); } sleep(interval); } }, vipfree = function( trigger ) { ETUtil.WinningChat( TEAM.AXIS ); sleep(1); ETUtil.LosingChat( TEAM.ALLIES ); Util.MapDebugPrint( "vip is free" ); }, }; global OnMapLoad = function() { // Register callback functions OnTrigger( "^5The Allied-CP has been constructed.", Map.Allied_CP_Built ); OnTrigger( "^5The Axis-CP has been constructed.", Map.Axis_CP_Built ); OnTrigger( "^5The V.I.P. has been taken hostage.", Map.VIP_ready ); OnTrigger( "^5The VIP has been released", Map.VIP_lock_Built ); OnTrigger( "^5The VIP has been killed..", Map.VIP_killed ); OnTrigger( "^5The VIP has been revived..", Map.VIP_revived ); OnTrigger( "^5The door has been repaired", Map.a_door_Built ); OnTrigger( "MISSING_STRING", Map.a_fence_Built ); OnTrigger( "MISSING_STRING", Map.a_ladder_Built ); OnTrigger( "The well-entrance is closed", Map.well_Built ); OnTrigger( "The floatplane has been repaired.", Map.Arado_Built ); OnTrigger( "Planted at the MISSING_STRING.", Map.Allied_CP_Planted ); OnTrigger( "Planted at the MISSING_STRING.", Map.Axis_CP_Planted ); OnTrigger( "Planted at the MISSING_STRING.", Map.a_door_Planted ); OnTrigger( "Planted at the MISSING_STRING.", Map.a_fence_Planted ); OnTrigger( "Planted at the MISSING_STRING.", Map.a_ladder_Planted ); OnTrigger( "Planted at the bridge.", Map.bridge_Planted ); OnTrigger( "Planted at the well.", Map.well_Planted ); OnTrigger( "Defused at the MISSING_STRING.", Map.Allied_CP_Defused ); OnTrigger( "Defused at the MISSING_STRING.", Map.Axis_CP_Defused ); OnTrigger( "Defused at the MISSING_STRING.", Map.a_door_Defused ); OnTrigger( "Defused at the MISSING_STRING.", Map.a_fence_Defused ); OnTrigger( "Defused at the MISSING_STRING.", Map.a_ladder_Defused ); OnTrigger( "Defused at the MISSING_STRING.", Map.well_Defused ); OnTrigger( "^5The Allied-CP has been destroyed.", Map.Allied_CP_Destroyed ); OnTrigger( "^5The Axis-CP has been destroyed.", Map.Axis_CP_Destroyed ); OnTrigger( "^5The door has been damaged", Map.a_door_Destroyed ); OnTrigger( "MISSING_STRING", Map.a_fence_Destroyed ); OnTrigger( "MISSING_STRING", Map.a_ladder_Destroyed ); OnTrigger( "uje_bridge_collapsed", Map.bridge_Destroyed ); OnTrigger( "The well-entrance is opened", Map.well_Destroyed ); OnTrigger( "^5The Axis sieged the tunnels.", Map.tunnelspawnflag_Axis_Captured ); OnTrigger( "^5The Axis Tunnel-spawns are disabled.", Map.tunnelspawnflag_Allies_Captured ); OnTrigger( "uje_repair_floatplane", Map.Arado_Available ); OnTrigger( "uje_paratroopers", Map.newspawn ); OnTrigger( "tunneldoor0_stop", Map.tunneldoor ); OnTrigger( "para_Moving", Map.parachute_in_use ); OnTrigger( "^5The VIP is escaping into freedom.", Map.vipfree ); para_room = OnTriggerRegion(AABB(784.845,1863.039,-238.875,1272.875,2102.806,-164.875), Map.parachute_room ); parachute_ready = OnTriggerRegion(AABB(-1203.092,5074.093,-56.860,956.585,6585.480,484.940), Map.parachute_ready ); vip_jump1 = OnTriggerRegion(AABB(30.095,1588.020,-494.875,460.655,1749.771,-420.875), Map.vip_jump1 ); vip_jump2 = OnTriggerRegion(AABB(-320.875,1130.055,-494.875,-98.169,1731.193,-406.639), Map.vip_jump2 ); windowscm = OnTriggerRegion(AABB(-341.107,-3328.875,145.235,266.831,-3119.125,219.235), RegionTrigger.DisableCombatMovement ); windowsps = OnTriggerRegion(AABB(-341.107,-3328.875,145.235,266.831,-3119.125,219.235), RegionTrigger.DisableBotPush ); //Initial goals Util.DisableGoal( "SWITCH_airalarm_switch" ); Util.DisableGoal( "PLANT_VIP_lock" ); Util.DisableGoal( "PLANT_a_ladder" ); Util.DisableGoal( "ESCORT_hostage" ); Util.DisableGoal( "ESCORT_hostage_m" ); Util.DisableGoal( "ROUTE.*" ); Util.DisableGoal( "MOVER_para" ); Util.DisableGoal( "DEFEND_tower" ); SetAvailableMapGoals( TEAM.AXIS, false, { "DEFEND_vip1.*", "PLANTMINE_.*", "BUILD_Axis_CP", "BUILD_Arado", "BUILD_bridge.*", "PLANT_a_fence", "PLANT_Allied_CP", "SWITCH_tunneldoor_.*", "AMMOCAB_ammo3", "HEALTHCAB_health3", }); SetAvailableMapGoals( TEAM.ALLIES, false, { "ATTACK_vip1.*", "AMMOCAB_ammo0", "HEALTHCAB_health0", "AMMOCAB_ammo3", "HEALTHCAB_health3", "SWITCH_tunneldoor_.*", "BUILD_Allied_CP", "BUILD_a_fence", "CHECKPOINT_tunnelspawnflag", }); Util.LimitToClass( "PLANT_Axis_CP", TEAM.ALLIES, CLASS.COVERTOPS); Util.LimitToClass( "ESCORT_hostage_m", TEAM.AXIS, CLASS.MEDIC ); SetGoalPriority( "BUILD_VIP_lock", 0.90); SetGoalPriority( "PLANT_well", 0.90); SetGoalPriority( "BUILD_a_ladder", 0.90); SetGoalPriority( "BUILD_Allied_CP", 0.85); SetGoalPriority( "BUILD_Axis_CP", 0.85); SetGoalPriority( "CHECKPOINT_tunnelspawnflag", 0.79); SetGoalPriority( "SWITCH_tunneldoor_.*", 0.79); Util.SetGoalPosition( 832.033, -3955.979, 216.125, "BUILD_a_door" ) ; Util.SetGoalPosition( 67.921, 6610.251, -652.520, "BUILD_Arado" ) ; Util.SetGoalPosition( 228.187, 4707.434, -487.875, "PLANT_a_fence" ) ; Util.SetGoalPosition( -432.541, -271.489, -423.156, "BUILD_bridge" ) ; Util.SetGoalPosition( -1031.591, -913.651, 344.332, "BUILD_bridge1" ) ; Util.SetGoalPosition( -837.315, -525.429, 344.332, "BUILD_bridge2" ) ; Util.SetGoalPosition( -730.488, -275.719, -452.628, "PLANT_bridge" ) ; Util.SetGoalPosition( 1940.505, -3880.210, 24.125, "PLANT_well" ) ; Util.SetGoalPosition( -1233.183, 5057.875, -271.845, "PLANT_Allied_CP" ) ; // Max users per goal Util.SetMaxUsers( 1, "DEFEND_.*" ); Util.SetMaxUsers( 1, "GRENADE_.*" ); Util.SetMaxUsers( 1, "MOUNTMG42_.*" ); Util.SetMaxUsers( 2, "MOBILEMG42_.*" ); Util.SetMaxUsers( 1, "PLANT.*" ); Util.SetMaxUsers( 1, "SWITCH.*" ); Util.SetMaxUsers( 4, "ESCORT_hostage" ); //probably two escort spots when available attack-defense Util.SetMaxUsers( 2, "ESCORT_hostage_m" ); // Camp times SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} ); SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=20, MaxCampTime=60} ); SetMapGoalProperties( "ATTACK_.*", {MinCampTime=15, MaxCampTime=45} ); SetMapGoalProperties( "DEFEND_.*", {MinCampTime=15, MaxCampTime=45} ); MapRoutes = { MOVER_hostage = { ROUTE_axis_spawn5 = { ROUTE_parachute = { ROUTE_parain = { ROUTE_paraout = {}, }, }, ROUTE_front1 = { ROUTE_front1_2 = { ROUTE_front1_3 = {}, ROUTE_front1_4 = {}, }, }, ROUTE_front2 = { ROUTE_front2_2 = {}, }, ROUTE_rear = { ROUTE_rear2 = { ROUTE_rear2_2 = {}, }, ROUTE_rear3 = { ROUTE_rear3_2 = {}, }, }, }, }, BUILD_Arado = { ROUTE_axis_spawn5 = { ROUTE_sea = { ROUTE_sea2 = { ROUTE_sea3 = { ROUTE_sea4 = {}, }, }, ROUTE_sea2_1 = { ROUTE_sea2_2 = {}, }, }, }, }, }; //MapRoutes.MOVER_hostage = MapRoutes.BUILD_Arado; Util.Routes(MapRoutes); Util.ShowActiveGoals (); Util.MapDebugPrint( "Omni-bot map script for UJE VIP executed." ); }; global OnBotJoin = function( bot ) { bot.IgnoreTarget( GetGoal("MOVER_pharmacy_rubble").GetEntity(), 9999 ); bot.IgnoreTarget( GetGoal("MOVER_pharmacy_front").GetEntity(), 9999 ); //Bots do not shoot the vip, while this is chained. //The axis will not shoot for the rest of the map. //Allies team only when the vip alive. mg = GetGoal("MOVER_hostage"); if ( bot.GetTeam() == TEAM.AXIS || TEAM.ALLIES) { bot.IgnoreTarget(mg.GetEntity(), 9999); } foreach ( id and bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES && Map.vipstatus == 1) { Util.IgnoreTargetGoal( bot, "MOVER_hostage", 5 ); } else if ( bot.GetTeam() == TEAM.ALLIES && Map.vipstatus == 0) { Util.IgnoreTargetGoal( bot, "MOVER_hostage", 9999 ); } } };