/******************************************************************* * Decompiled By: Bog * Decompiled File: scripts\mp\bots\_bots_strategy.gsc * Game: Call of Duty: Infinite Warfare * Platform: PC * Function Count: 53 * Decompile Time: 2371 ms * Timestamp: 10/27/2023 12:27:46 AM *******************************************************************/ //Function Number: 1 func_2D4C() { var_00 = func_2D4B(self.var_4B0F); if(isdefined(var_00) && var_00.size > 0) { return scripts\common\utility::random(var_00).origin; } return undefined; } //Function Number: 2 func_2D4B(param_00) { if(isdefined(self.var_5060)) { return scripts\mp\bots\_bots_util::func_2DA8(param_00,self.var_5060); } return []; } //Function Number: 3 func_2E86() { wait(1); func_2E87(level.var_2C7A); level.var_2E80 = 1; } //Function Number: 4 func_2E8A() { func_2E87(level.var_DBFE); } //Function Number: 5 func_2E87(param_00) { foreach(var_02 in param_00) { if(!isdefined(var_02.var_2EFE)) { var_02.var_2EFE = []; var_03 = function_00B7(var_02.trigger); foreach(var_05 in var_03) { if(!var_05 method_821B()) { var_02.var_2EFE = scripts\common\utility::array_add(var_02.var_2EFE,var_05); } } } } } //Function Number: 6 func_2DA3(param_00,param_01,param_02) { var_03 = []; var_04 = []; var_04[var_04.size] = param_00; if(isdefined(param_01)) { var_04[var_04.size] = param_01; } if(isdefined(param_01)) { var_04[var_04.size] = param_02; } foreach(var_06 in var_04) { var_03["purpose"] = var_06; var_03["item_action"] = scripts\mp\bots\_bots_util::func_2DAA(var_06); if(isdefined(var_03["item_action"])) { return var_03; } } } //Function Number: 7 func_2E7E(param_00,param_01,param_02,param_03,param_04) { self notify("bot_set_ambush_trap"); self endon("bot_set_ambush_trap"); if(!isdefined(param_00)) { return 0; } var_05 = undefined; if(!isdefined(param_04) && isdefined(param_01) && param_01.size > 0) { if(!isdefined(param_02)) { return 0; } var_06 = []; var_07 = undefined; if(isdefined(param_03)) { var_07 = anglestoforward((0,param_03,0)); } foreach(var_09 in param_01) { if(!isdefined(var_07)) { var_06[var_06.size] = var_09; continue; } if(distancesquared(var_09.origin,param_02.origin) > 90000) { if(vectordot(var_07,vectornormalize(var_09.origin - param_02.origin)) < 0.4) { var_06[var_06.size] = var_09; } } } if(var_06.size > 0) { var_05 = scripts\common\utility::random(var_06); var_0B = getnodesinradius(var_05.origin,300,50); var_0C = []; foreach(var_0E in var_0B) { if(!isdefined(var_0E.var_2D0B)) { var_0C[var_0C.size] = var_0E; } } var_0B = var_0C; param_04 = self botnodepick(var_0B,min(var_0B.size,3),"node_trap",param_02,var_05); } } if(isdefined(param_04)) { var_10 = undefined; if(param_00["purpose"] == "trap_directional" && isdefined(var_05)) { var_11 = vectortoangles(var_05.origin - param_04.origin); var_10 = var_11[1]; } if(self bothasscriptgoal() && self botgetscriptgoaltype() != "critical" && self botgetscriptgoaltype() != "tactical") { self botclearscriptgoal(); } var_12 = self botsetscriptgoalnode(param_04,"guard",var_10); if(var_12) { var_13 = scripts\mp\bots\_bots_util::func_2ECB(); if(var_13 == "goal") { thread scripts\mp\bots\_bots_util::func_2D9C("stand",5); if(!isdefined(self.var_10C) || 0 == self botcanseeentity(self.var_10C)) { if(isdefined(var_10)) { self method_8056(var_05.origin,param_00["item_action"]); } else { self method_8056(self.origin + anglestoforward(self.angles) * 50,param_00["item_action"]); } self.var_1E27 = undefined; thread func_2E7F("grenade_fire"); thread func_2E7F("missile_fire"); var_14 = 3; if(param_00["purpose"] == "tacticalinsertion") { var_14 = 6; } scripts\common\utility::waittill_any_timeout_1(var_14,"missile_fire","grenade_fire"); wait(0.05); self notify("ambush_trap_ent"); if(isdefined(self.var_1E27) && param_00["purpose"] == "c4") { thread func_2ED2(self.var_1E27,param_00["item_action"],300); } self.var_1E27 = undefined; wait(randomfloat(0.25)); self botsetstance("none"); } } return 1; } } return 0; } //Function Number: 8 func_2E7F(param_00) { self endon("death"); self endon("disconnect"); self endon("bot_set_ambush_trap"); self endon("ambush_trap_ent"); level endon("game_ended"); self waittill(param_00,var_01); self.var_1E27 = var_01; } //Function Number: 9 func_2ED2(param_00,param_01,param_02) { self endon("death"); self endon("disconnect"); param_00 endon("death"); level endon("game_ended"); var_03 = param_02 * param_02; for(;;) { if(distancesquared(self.origin,param_00.origin) > var_03) { var_04 = self method_8111(param_00.origin,1); if(var_04 < var_03) { self botpressbutton(param_01); return; } } wait(randomfloatrange(0.25,1)); } } //Function Number: 10 func_2D2B(param_00,param_01,param_02) { thread func_2D4F(param_00,param_01,"capture",param_02); } //Function Number: 11 func_2D2C(param_00,param_01,param_02,param_03) { param_03["capture_trigger"] = param_02; thread func_2D4F(param_00,param_01,"capture_zone",param_03); } //Function Number: 12 func_2E57(param_00,param_01,param_02) { if(!isdefined(param_02) || !isdefined(param_02["min_goal_time"])) { param_02["min_goal_time"] = 12; } if(!isdefined(param_02) || !isdefined(param_02["max_goal_time"])) { param_02["max_goal_time"] = 18; } thread func_2D4F(param_00,param_01,"protect",param_02); } //Function Number: 13 func_2E3D(param_00,param_01,param_02) { if(!isdefined(param_02) || !isdefined(param_02["min_goal_time"])) { param_02["min_goal_time"] = 0; } if(!isdefined(param_02) || !isdefined(param_02["max_goal_time"])) { param_02["max_goal_time"] = 0.01; } thread func_2D4F(param_00,param_01,"patrol",param_02); } //Function Number: 14 func_2DC1(param_00,param_01,param_02) { if(!isdefined(param_02) || !isdefined(param_02["min_goal_time"])) { param_02["min_goal_time"] = 15; } if(!isdefined(param_02) || !isdefined(param_02["max_goal_time"])) { param_02["max_goal_time"] = 20; } thread func_2D4F(param_00,param_01,"bodyguard",param_02); } //Function Number: 15 func_2D4F(param_00,param_01,param_02,param_03) { self notify("started_bot_defend_think"); self endon("started_bot_defend_think"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self endon("defend_stop"); thread func_508D(); if(isdefined(self.var_2D51) || self botgetscriptgoaltype() == "camp") { self botclearscriptgoal(); } self.var_2D51 = 1; self.var_2D57 = param_02; if(param_02 == "capture_zone") { self.var_2D55 = undefined; self.var_2D53 = param_01; self.var_2D56 = param_03["capture_trigger"]; } else { self.var_2D55 = param_01; self.var_2D53 = undefined; self.var_2D56 = undefined; } if(scripts\mp\_utility::func_9E0E(param_00)) { self.var_2D4D = param_00; childthread func_B962(); } else { self.var_2D4D = undefined; self.var_2D52 = param_00; } self botsetstance("none"); var_04 = undefined; var_05 = 6; var_06 = 10; if(isdefined(param_03)) { self.var_5060 = param_03["entrance_points_index"]; self.var_5092 = param_03["score_flags"]; self.var_2D54 = param_03["override_origin_node"]; if(isdefined(param_03["override_goal_type"])) { var_04 = param_03["override_goal_type"]; } if(isdefined(param_03["min_goal_time"])) { var_05 = param_03["min_goal_time"]; } if(isdefined(param_03["max_goal_time"])) { var_06 = param_03["max_goal_time"]; } if(isdefined(param_03["override_entrances"]) && param_03["override_entrances"].size > 0) { self.var_5091 = param_03["override_entrances"]; self.var_5060 = self.name + " " + gettime(); foreach(var_08 in self.var_5091) { var_08.var_DA7C[self.var_5060] = scripts\mp\bots\_bots_util::func_6655(var_08.origin,scripts\mp\bots\_bots_util::func_507A(),"prone"); wait(0.05); var_08.var_4A9C[self.var_5060] = scripts\mp\bots\_bots_util::func_6655(var_08.origin,scripts\mp\bots\_bots_util::func_507A(),"crouch"); wait(0.05); } } } if(!isdefined(self.var_2D4D)) { var_0A = undefined; if(isdefined(param_03) && isdefined(param_03["nearest_node_to_center"])) { var_0A = param_03["nearest_node_to_center"]; } if(!isdefined(var_0A) && isdefined(self.var_2D54)) { var_0A = self.var_2D54; } if(!isdefined(var_0A) && isdefined(self.var_2D56) && isdefined(self.var_2D56.nearest_node)) { var_0A = self.var_2D56.nearest_node; } if(!isdefined(var_0A)) { var_0A = getclosestnodeinsight(scripts\mp\bots\_bots_util::func_507A()); } if(!isdefined(var_0A)) { var_0B = self method_8533(); var_0C = scripts\mp\bots\_bots_util::func_507A(); var_0D = getnodesinradiussorted(var_0C,256,0,500,"path",var_0B); for(var_0E = 0;var_0E < var_0D.size;var_0E++) { var_0F = vectornormalize(var_0D[var_0E].origin - var_0C); var_10 = var_0C + var_0F * 15; if(sighttracepassed(var_10,var_0D[var_0E].origin,0,undefined)) { var_0A = var_0D[var_0E]; break; } wait(0.05); if(sighttracepassed(var_10 + (0,0,55),var_0D[var_0E].origin + (0,0,55),0,undefined)) { var_0A = var_0D[var_0E]; break; } wait(0.05); } } self.var_C031 = var_0A; } var_11 = level.var_2D76[param_02]; if(!isdefined(var_04)) { var_04 = "guard"; if(param_02 == "capture" || param_02 == "capture_zone") { var_04 = "objective"; } } var_12 = scripts\mp\bots\_bots_util::func_2DD5(); if(param_02 == "protect") { childthread func_DAA4(); } for(;;) { self.var_D888 = self.var_4B0D; self.var_4B0D = undefined; self.var_4B0C = undefined; self.var_4B0E = undefined; self.var_4B0F = func_36E6(var_12); var_13 = self botgetscriptgoaltype(); var_14 = scripts\mp\bots\_bots_util::func_2DBB(var_04,var_13); if(!var_14) { wait(0.25); continue; } var_15 = var_05; var_16 = var_06; var_17 = 1; if(isdefined(self.var_5090)) { self.var_4B0E = self.var_5090; self.var_5090 = undefined; var_17 = 0; var_15 = 1; var_16 = 2; } else if(isdefined(self.var_508E)) { self.var_4B0D = self.var_508E; self.var_508E = undefined; } else { self [[ var_11 ]](); } self botclearscriptgoal(); var_18 = ""; if(isdefined(self.var_4B0D) || isdefined(self.var_4B0E)) { if(var_17 && scripts\mp\bots\_bots_util::func_2DDD() && !isplayer(param_00) && isdefined(self.var_5060)) { var_19 = func_2DA3("trap_directional","trap","c4"); if(isdefined(var_19)) { var_1A = scripts\mp\bots\_bots_util::func_2DA8(undefined,self.var_5060); func_2E7E(var_19,var_1A,self.var_C031); } } if(isdefined(self.var_4B0E)) { var_1B = undefined; if(isdefined(self.var_4B0C)) { var_1B = self.var_4B0C[1]; } self botsetscriptgoal(self.var_4B0E,0,var_04,var_1B); } else if(!isdefined(self.var_4B0C)) { self botsetscriptgoalnode(self.var_4B0D,var_04); } else { self botsetscriptgoalnode(self.var_4B0D,var_04,self.var_4B0C[1]); } if(var_12) { if(!isdefined(self.var_D888) || !isdefined(self.var_4B0D) || self.var_D888 != self.var_4B0D) { self botsetstance("none"); } } var_1C = self botgetscriptgoal(); self notify("new_defend_goal"); scripts\mp\bots\_bots_util::func_13960(); if(var_04 == "objective") { func_508C(); self botgetpathdist(1); self botsetflag("cautious",0); } if(self bothasscriptgoal()) { var_1D = self botgetscriptgoal(); if(scripts\mp\bots\_bots_util::func_2EC6(var_1D,var_1C)) { var_18 = scripts\mp\bots\_bots_util::func_2ECB(20,"defend_force_node_recalculation"); } } if(var_18 == "goal") { if(var_12) { self botsetstance(self.var_4B0F); } childthread func_5097(); } } if(var_18 != "goal") { wait(0.25); continue; } var_1E = randomfloatrange(var_15,var_16); var_18 = scripts\common\utility::waittill_any_timeout_1(var_1E,"node_relinquished","goal_changed","script_goal_changed","defend_force_node_recalculation","bad_path"); if((var_18 == "node_relinquished" || var_18 == "bad_path" || var_18 == "goal_changed" || var_18 == "script_goal_changed") && self.var_4B0F == "crouch" || self.var_4B0F == "prone") { self botsetstance("none"); } } } //Function Number: 16 func_36E6(param_00) { var_01 = "stand"; if(param_00) { var_02 = 100; var_03 = 0; var_04 = 0; var_05 = self botgetdifficultysetting("strategyLevel"); if(var_05 == 1) { var_02 = 20; var_03 = 25; var_04 = 55; } else if(var_05 >= 2) { var_02 = 10; var_03 = 20; var_04 = 70; } var_06 = self.var_AE62; if(isdefined(var_06) && var_06 == "archetype_heavy") { var_04 = 0; } var_07 = randomint(100); if(var_07 < var_03) { var_01 = "crouch"; } else if(var_07 < var_03 + var_04) { var_01 = "prone"; } if(var_01 == "prone") { var_08 = func_2D4B("prone"); var_09 = func_5064("prone"); if(var_09.size >= var_08.size) { var_01 = "crouch"; } } if(var_01 == "crouch") { var_0A = func_2D4B("crouch"); var_0B = func_5064("crouch"); if(var_0B.size >= var_0A.size) { var_01 = "stand"; } } } return var_01; } //Function Number: 17 func_FF9A(param_00) { var_01 = 1250; var_02 = var_01 * var_01; if(param_00) { if(self botgetdifficultysetting("strategyLevel") == 0) { return 0; } if(self.var_2D57 == "capture_zone" && self istouching(self.var_2D56)) { return 0; } return distancesquared(self.origin,self.var_2D52) > var_02 * 0.75 * 0.75; } if(self botpursuingscriptgoal() && distancesquared(self.origin,self.var_2D52) < var_02) { var_03 = self method_8034(); return 0 <= var_03 && var_03 <= var_01; } return 0; } //Function Number: 18 func_F9AE(param_00,param_01) { var_02 = spawnstruct(); if(isdefined(param_01)) { var_02.origin = param_01; } else { var_02.origin = param_00.origin; } var_02.var_205 = param_00; var_02.var_735E = 0; return var_02; } //Function Number: 19 func_508C() { self notify("defense_cautious_approach"); self endon("defense_cautious_approach"); level endon("game_ended"); self endon("defend_force_node_recalculation"); self endon("death"); self endon("disconnect"); self endon("defend_stop"); self endon("started_bot_defend_think"); if(![[ level.var_2D9E["should_start_cautious_approach"] ]](1)) { return; } var_00 = self botgetscriptgoal(); var_01 = self botgetscriptgoalnode(); var_02 = 1; var_03 = 0.2; while(var_02) { wait(0.25); if(!self bothasscriptgoal()) { return; } var_04 = self botgetscriptgoal(); if(!scripts\mp\bots\_bots_util::func_2EC6(var_00,var_04)) { return; } var_03 = var_03 + 0.25; if(var_03 >= 0.5) { var_03 = 0; if([[ level.var_2D9E["should_start_cautious_approach"] ]](0)) { var_02 = 0; } } } self botgetpathdist(1.8); self botsetflag("cautious",1); var_05 = self method_8033(); if(!isdefined(var_05) || var_05.size <= 2) { return; } self.var_AECF = []; var_06 = 1000; if(isdefined(level.var_DAA3)) { var_06 = level.var_DAA3; } var_07 = var_06 * var_06; var_08 = self method_8533(); var_09 = getnodesinradius(self.var_2D52,var_06,0,500,"path",var_08); if(var_09.size <= 0) { return; } var_0A = 5 + self botgetdifficultysetting("strategyLevel") * 2; var_0B = int(min(var_0A,var_09.size)); var_0C = self botnodepickmultiple(var_09,15,var_0B,"node_protect",scripts\mp\bots\_bots_util::func_507A(),"ignore_occupancy"); for(var_0D = 0;var_0D < var_0C.size;var_0D++) { var_0E = func_F9AE(var_0C[var_0D]); self.var_AECF = scripts\common\utility::array_add(self.var_AECF,var_0E); } var_0F = botgetmemoryevents(0,gettime() - -5536,1,"death",0,self); foreach(var_11 in var_0F) { if(distancesquared(var_11,self.var_2D52) < var_07) { var_12 = getclosestnodeinsight(var_11); if(isdefined(var_12)) { var_0E = func_F9AE(var_12,var_11); self.var_AECF = scripts\common\utility::array_add(self.var_AECF,var_0E); } } } if(isdefined(self.var_5060)) { var_14 = scripts\mp\bots\_bots_util::func_2DA8("stand",self.var_5060); for(var_0D = 0;var_0D < var_14.size;var_0D++) { var_0E = func_F9AE(var_14[var_0D]); self.var_AECF = scripts\common\utility::array_add(self.var_AECF,var_0E); } } if(self.var_AECF.size == 0) { return; } childthread func_B959(); var_15 = self botgetscriptgoaltype(); var_16 = self botgetscriptgoalradius(); var_17 = self botgetscriptgoalyaw(); wait(0.05); for(var_18 = 1;var_18 < var_05.size - 2;var_18++) { scripts\mp\bots\_bots_util::func_2ECC(); var_19 = getlinkednodes(var_05[var_18]); if(var_19.size == 0) { continue; } var_1A = []; for(var_0D = 0;var_0D < var_19.size;var_0D++) { if(!scripts\common\utility::func_13D90(self.origin,self.angles,var_19[var_0D].origin,0)) { continue; } for(var_1B = 0;var_1B < self.var_AECF.size;var_1B++) { var_11 = self.var_AECF[var_1B]; if(nodesvisible(var_11.var_205,var_19[var_0D],1)) { var_1A = scripts\common\utility::array_add(var_1A,var_19[var_0D]); var_1B = self.var_AECF.size; } } } if(var_1A.size == 0) { continue; } var_1C = self botnodepick(var_1A,1 + var_1A.size * 0.15,"node_hide"); if(isdefined(var_1C)) { var_1D = []; for(var_0D = 0;var_0D < self.var_AECF.size;var_0D++) { if(nodesvisible(self.var_AECF[var_0D].var_205,var_1C,1)) { var_1D = scripts\common\utility::array_add(var_1D,self.var_AECF[var_0D]); } } self botclearscriptgoal(); self botsetscriptgoalnode(var_1C,"critical"); childthread func_B95A(); var_1E = scripts\mp\bots\_bots_util::func_2ECB(undefined,"cautious_approach_early_out"); self notify("stop_cautious_approach_early_out_monitor"); if(var_1E == "cautious_approach_early_out") { break; } if(var_1E == "goal") { for(var_0D = 0;var_0D < var_1D.size;var_0D++) { var_1F = 0; while(var_1D[var_0D].var_735E < 18 && var_1F < 3.6) { self botlookatpoint(var_1D[var_0D].origin + (0,0,self getplayerviewheight()),0.25,"script_search"); wait(0.25); var_1F = var_1F + 0.25; } } } } wait(0.05); } self notify("stop_location_monitoring"); self botclearscriptgoal(); if(isdefined(var_01)) { self botsetscriptgoalnode(var_01,var_15,var_17); return; } self botsetscriptgoal(self.var_4B0E,var_16,var_15,var_17); } //Function Number: 20 func_B95A() { self endon("cautious_approach_early_out"); self endon("stop_cautious_approach_early_out_monitor"); var_00 = undefined; if(isdefined(self.var_2D55)) { var_00 = self.var_2D55 * self.var_2D55; } else if(isdefined(self.var_2D53)) { var_01 = func_2D2D(); var_00 = var_01 * var_01; } wait(0.05); for(;;) { if(distancesquared(self.origin,self.var_2D52) < var_00) { self notify("cautious_approach_early_out"); } wait(0.05); } } //Function Number: 21 func_B959() { self endon("stop_location_monitoring"); var_00 = 10000; for(;;) { var_01 = self getnearestnode(); if(isdefined(var_01)) { var_02 = self botgetfovdot(); for(var_03 = 0;var_03 < self.var_AECF.size;var_03++) { if(nodesvisible(var_01,self.var_AECF[var_03].var_205,1)) { var_04 = scripts\common\utility::func_13D90(self.origin,self.angles,self.var_AECF[var_03].origin,var_02); var_05 = !var_04 || self.var_AECF[var_03].var_735E < 17; if(var_05 && distancesquared(self.origin,self.var_AECF[var_03].origin) < var_00) { var_04 = 1; self.var_AECF[var_03].var_735E = 18; } if(var_04) { self.var_AECF[var_03].var_735E++; if(self.var_AECF[var_03].var_735E >= 18) { self.var_AECF[var_03] = self.var_AECF[self.var_AECF.size - 1]; self.var_AECF[self.var_AECF.size - 1] = undefined; var_03--; } } } } } wait(0.05); } } //Function Number: 22 func_DAA4() { self notify("protect_watch_allies"); self endon("protect_watch_allies"); var_00 = []; var_01 = 1050; var_02 = var_01 * var_01; var_03 = 900; if(isdefined(level.var_DAA3)) { var_03 = level.var_DAA3; } for(;;) { var_04 = gettime(); var_05 = func_2DB7(self.var_2D52,var_03); foreach(var_07 in var_05) { var_08 = var_07.var_6640; if(!isdefined(var_08)) { var_08 = var_07 getentitynumber(); } if(!isdefined(var_00[var_08])) { var_00[var_08] = var_04 - 1; } if(!isdefined(var_07.var_A8D4)) { var_07.var_A8D4 = var_04 - 10001; } if(var_07.health == 0 && isdefined(var_07.var_4E72) && var_04 - var_07.var_4E72 < 5000) { if(var_04 - var_07.var_A8D4 > 10000 && var_04 > var_00[var_08]) { if(isdefined(var_07.var_1B1) && isdefined(var_07.var_1B1.team) && var_07.var_1B1.team == scripts\common\utility::func_7984(self.team)) { if(distancesquared(var_07.origin,self.origin) < var_02) { self botgetimperfectenemyinfo(var_07.var_1B1,var_07.origin); var_09 = getclosestnodeinsight(var_07.origin); if(isdefined(var_09)) { self.var_5090 = var_09.origin; self notify("defend_force_node_recalculation"); } var_07.var_A8D4 = var_04; } var_00[var_08] = var_04 + 10000; } } } } wait(randomint(5) + 1 * 0.05); } } //Function Number: 23 func_508F() { if(isdefined(self.var_5091)) { return self.var_5091; } if(scripts\mp\bots\_bots_util::func_2DD5()) { var_00 = func_2D4B(self.var_4B0F); if(var_00.size == 0 && !isdefined(self.var_5060)) { var_00 = findentrances(self.origin); } return var_00; } if(scripts\mp\bots\_bots_util::func_2DDD() || scripts\mp\bots\_bots_util::func_2DD4()) { var_00 = findentrances(self.origin); return var_00; } } //Function Number: 24 func_5097() { self notify("defense_watch_entrances_at_goal"); self endon("defense_watch_entrances_at_goal"); self endon("new_defend_goal"); self endon("script_goal_changed"); var_00 = self getnearestnode(); var_01 = undefined; if(scripts\mp\bots\_bots_util::func_2DD5()) { var_02 = func_508F(); var_01 = []; if(isdefined(var_00)) { foreach(var_04 in var_02) { if(nodesvisible(var_00,var_04,1)) { var_01 = scripts\common\utility::array_add(var_01,var_04); } } } } else if(scripts\mp\bots\_bots_util::func_2DDD() || scripts\mp\bots\_bots_util::func_2DD4()) { var_01 = func_508F(); if(isdefined(var_00) && !issubstr(self getcurrentweapon(),"riotshield")) { if(!scripts\mp\_utility::func_9FB3(var_00.ishacknode) && !scripts\mp\_utility::func_9FB3(self.var_C031.ishacknode)) { if(nodesvisible(var_00,self.var_C031,1)) { var_01 = scripts\common\utility::array_add(var_01,self.var_C031); } } } } if(isdefined(var_01)) { childthread scripts\mp\bots\_bots_util::func_2ED4(var_01); if(scripts\mp\bots\_bots_util::func_2DD4()) { childthread func_2E23(); return; } childthread func_2E22(); } } //Function Number: 25 func_2E22() { self notify("bot_monitor_watch_entrances_at_goal"); self endon("bot_monitor_watch_entrances_at_goal"); self notify("bot_monitor_watch_entrances"); self endon("bot_monitor_watch_entrances"); while(!isdefined(self.var_1395E)) { wait(0.05); } var_00 = level.var_2D9E["get_watch_node_chance"]; for(;;) { foreach(var_02 in self.var_1395E) { if(var_02 == self.var_C031) { var_02.var_1395D[self.var_6640] = 0.8; continue; } var_02.var_1395D[self.var_6640] = 1; } var_04 = isdefined(var_00); if(!var_04) { func_D924(0.5); } foreach(var_02 in self.var_1395E) { if(var_04) { var_06 = self [[ var_00 ]](var_02); var_02.var_1395D[self.var_6640] = var_02.var_1395D[self.var_6640] * var_06; } if(func_6656(var_02)) { var_02.var_1395D[self.var_6640] = var_02.var_1395D[self.var_6640] * 0.5; } } wait(randomfloatrange(0.5,0.75)); } } //Function Number: 26 func_2E23() { self notify("bot_monitor_watch_entrances_bodyguard"); self endon("bot_monitor_watch_entrances_bodyguard"); self notify("bot_monitor_watch_entrances"); self endon("bot_monitor_watch_entrances"); while(!isdefined(self.var_1395E)) { wait(0.05); } for(;;) { var_00 = anglestoforward(self.var_2D4D.angles) * (1,1,0); var_00 = vectornormalize(var_00); foreach(var_02 in self.var_1395E) { var_02.var_1395D[self.var_6640] = 1; var_03 = var_02.origin - self.var_2D4D.origin; var_03 = vectornormalize(var_03); var_04 = vectordot(var_00,var_03); if(var_04 > 0.6) { var_02.var_1395D[self.var_6640] = var_02.var_1395D[self.var_6640] * 0.33; } else if(var_04 > 0) { var_02.var_1395D[self.var_6640] = var_02.var_1395D[self.var_6640] * 0.66; } if(!func_6654(var_02)) { var_02.var_1395D[self.var_6640] = var_02.var_1395D[self.var_6640] * 0.5; } } wait(randomfloatrange(0.4,0.6)); } } //Function Number: 27 func_6654(param_00) { var_01 = getnodezone(param_00); var_02 = vectornormalize(param_00.origin - self.origin); for(var_03 = 0;var_03 < level.var_13FBD;var_03++) { if(botzonegetcount(var_03,self.team,"enemy_predict") > 0) { if(isdefined(var_01) && var_03 == var_01) { return 1; } else { var_04 = vectornormalize(getzoneorigin(var_03) - self.origin); var_05 = vectordot(var_02,var_04); if(var_05 > 0.2) { return 1; } } } } return 0; } //Function Number: 28 func_D924(param_00) { if(self.var_1395E.size <= 0) { return; } var_01 = self.var_1395E; for(var_02 = 0;var_02 < level.var_13FBD;var_02++) { if(botzonegetcount(var_02,self.team,"enemy_predict") <= 0) { continue; } if(var_01.size == 0) { break; } var_03 = vectornormalize(getzoneorigin(var_02) - self.origin); for(var_04 = 0;var_04 < var_01.size;var_04++) { var_05 = getnodezone(var_01[var_04]); var_06 = 0; if(isdefined(var_05) && var_02 == var_05) { var_06 = 1; } else { var_07 = vectornormalize(var_01[var_04].origin - self.origin); var_08 = vectordot(var_07,var_03); if(var_08 > 0.2) { var_06 = 1; } } if(var_06) { var_01[var_04].var_1395D[self.var_6640] = var_01[var_04].var_1395D[self.var_6640] * param_00; var_01[var_04] = var_01[var_01.size - 1]; var_01[var_01.size - 1] = undefined; var_04--; } } } } //Function Number: 29 func_6656(param_00) { var_01 = func_2DB6(self.var_2D52); foreach(var_03 in var_01) { if(func_6657(var_03,param_00)) { return 1; } } return 0; } //Function Number: 30 func_6657(param_00,param_01) { var_02 = anglestoforward(param_00.angles); var_03 = vectornormalize(param_01.origin - param_00.origin); var_04 = vectordot(var_02,var_03); if(var_04 > 0.6) { return 1; } return 0; } //Function Number: 31 func_2DB6(param_00,param_01) { if(!isdefined(param_01)) { if(isdefined(level.var_DAA3)) { param_01 = level.var_DAA3; } else { param_01 = 900; } } var_02 = []; var_03 = func_2DB7(param_00,param_01); foreach(var_05 in var_03) { if(!isai(var_05) || var_05 scripts\mp\bots\_bots_util::func_2DD8(param_00)) { var_02 = scripts\common\utility::array_add(var_02,var_05); } } return var_02; } //Function Number: 32 func_2DB7(param_00,param_01) { var_02 = param_01 * param_01; var_03 = []; for(var_04 = 0;var_04 < level.var_C928.size;var_04++) { var_05 = level.var_C928[var_04]; if(var_05 != self && isdefined(var_05.team) && var_05.team == self.team && scripts\mp\_utility::func_9F9D(var_05)) { if(distancesquared(param_00,var_05.origin) < var_02) { var_03 = scripts\common\utility::array_add(var_03,var_05); } } } return var_03; } //Function Number: 33 func_508D() { level endon("game_ended"); self endon("started_bot_defend_think"); self endon("defend_stop"); self endon("disconnect"); self waittill("death"); if(isdefined(self)) { thread func_2D4E(); } } //Function Number: 34 func_2D4E() { self notify("defend_stop"); self.var_2D51 = undefined; self.var_2D52 = undefined; self.var_2D55 = undefined; self.var_2D53 = undefined; self.var_2D57 = undefined; self.var_2D56 = undefined; self.var_2D54 = undefined; self.var_2D4D = undefined; self.var_5092 = undefined; self.var_C031 = undefined; self.var_5090 = undefined; self.var_508E = undefined; self.var_D888 = undefined; self.var_4B0D = undefined; self.var_4B0C = undefined; self.var_4B0E = undefined; self.var_5060 = undefined; self.var_5091 = undefined; self botclearscriptgoal(); self botsetstance("none"); } //Function Number: 35 func_5064(param_00) { var_01 = []; foreach(var_03 in level.var_C928) { if(!isdefined(var_03.team)) { continue; } if(var_03.team == self.team && var_03 != self && isai(var_03) && var_03 scripts\mp\bots\_bots_util::func_2DD7() && var_03.var_4B0F == param_00) { if(var_03.var_2D57 == self.var_2D57 && scripts\mp\bots\_bots_util::func_2DD8(var_03.var_2D52)) { var_01 = scripts\common\utility::array_add(var_01,var_03); } } } return var_01; } //Function Number: 36 func_B962() { var_00 = 0; var_01 = 175; var_02 = self.var_2D4D.origin; var_03 = 0; var_04 = 0; for(;;) { if(!isdefined(self.var_2D4D)) { thread func_2D4E(); } self.var_2D52 = self.var_2D4D.origin; self.var_C031 = self.var_2D4D getnearestnode(); if(!isdefined(self.var_C031)) { self.var_C031 = self getnearestnode(); } if(self botgetscriptgoaltype() != "none") { var_05 = self botgetscriptgoal(); var_06 = self.var_2D4D getvelocity(); var_07 = lengthsquared(var_06); if(var_07 > 100) { var_00 = 0; if(distancesquared(var_02,self.var_2D4D.origin) > var_01 * var_01) { var_02 = self.var_2D4D.origin; var_04 = 1; var_08 = vectornormalize(var_05 - self.var_2D4D.origin); var_09 = vectornormalize(var_06); if(vectordot(var_08,var_09) < 0.1) { self notify("defend_force_node_recalculation"); wait(0.25); } } } else { var_00 = var_00 + 0.05; if(var_03 > 100 && var_04) { var_02 = self.var_2D4D.origin; var_04 = 0; } if(var_00 > 0.5) { var_0A = distancesquared(var_05,self.var_2D52); if(var_0A > self.var_2D55 * self.var_2D55) { self notify("defend_force_node_recalculation"); wait(0.25); } } } var_03 = var_07; if(abs(self.var_2D4D.origin[2] - var_05[2]) >= 50) { self notify("defend_force_node_recalculation"); wait(0.25); } } wait(0.05); } } //Function Number: 37 func_6C87() { var_00 = func_2D4C(); var_01 = scripts\mp\bots\_bots_util::func_2D78(scripts\mp\bots\_bots_util::func_507A(),self.var_2D55,var_00); if(isdefined(var_01)) { if(isdefined(var_00)) { var_02 = vectornormalize(var_00 - var_01.origin); self.var_4B0C = vectortoangles(var_02); } else { var_03 = vectornormalize(var_01.origin - scripts\mp\bots\_bots_util::func_507A()); self.var_4B0C = vectortoangles(var_03); } self.var_4B0D = var_01; return; } if(isdefined(var_00)) { func_2DC2(var_00,undefined); return; } func_2DC2(undefined,scripts\mp\bots\_bots_util::func_507A()); } //Function Number: 38 func_6C88() { var_00 = func_2D4C(); var_01 = scripts\mp\bots\_bots_util::func_2D79(self.var_2D53,var_00); if(isdefined(var_01)) { if(isdefined(var_00)) { var_02 = vectornormalize(var_00 - var_01.origin); self.var_4B0C = vectortoangles(var_02); } else { var_03 = vectornormalize(var_01.origin - scripts\mp\bots\_bots_util::func_507A()); self.var_4B0C = vectortoangles(var_03); } self.var_4B0D = var_01; return; } if(isdefined(var_00)) { func_2DC2(var_00,undefined); return; } func_2DC2(undefined,scripts\mp\bots\_bots_util::func_507A()); } //Function Number: 39 func_6C8A() { var_00 = scripts\mp\bots\_bots_util::func_2D77(scripts\mp\bots\_bots_util::func_507A(),self.var_2D55); if(isdefined(var_00)) { var_01 = vectornormalize(scripts\mp\bots\_bots_util::func_507A() - var_00.origin); self.var_4B0C = vectortoangles(var_01); self.var_4B0D = var_00; return; } func_2DC2(scripts\mp\bots\_bots_util::func_507A(),undefined); } //Function Number: 40 func_6C86() { var_00 = scripts\mp\bots\_bots_util::func_2D7A(scripts\mp\bots\_bots_util::func_507A(),self.var_2D55); if(isdefined(var_00)) { self.var_4B0D = var_00; return; } var_01 = self getnearestnode(); if(isdefined(var_01)) { self.var_4B0D = var_01; return; } self.var_4B0E = self.origin; } //Function Number: 41 func_6C89() { var_00 = undefined; var_01 = self method_8533(); var_02 = getnodesinradius(scripts\mp\bots\_bots_util::func_507A(),self.var_2D55,0,520,"path",var_01); if(isdefined(var_02) && var_02.size > 0) { var_00 = self botnodepick(var_02,1 + var_02.size * 0.5,"node_traffic"); } if(isdefined(var_00)) { self.var_4B0D = var_00; return; } func_2DC2(undefined,scripts\mp\bots\_bots_util::func_507A()); } //Function Number: 42 func_2DC2(param_00,param_01) { if(self.var_2D57 == "capture_zone") { self.var_4B0E = scripts\mp\bots\_bots_util::func_2E49(scripts\mp\bots\_bots_util::func_507A(),self.var_2D53,::func_2D2A); } else { self.var_4B0E = scripts\mp\bots\_bots_util::func_2E4A(scripts\mp\bots\_bots_util::func_507A(),self.var_2D55,::func_2D2A,0.15,0.9); } if(isdefined(param_00)) { var_02 = vectornormalize(param_00 - self.var_4B0E); self.var_4B0C = vectortoangles(var_02); return; } if(isdefined(param_01)) { var_02 = vectornormalize(self.var_4B0E - param_01); self.var_4B0C = vectortoangles(var_02); } } //Function Number: 43 func_2D2A(param_00) { if(func_2D2F(param_00,1,1,1)) { return 0; } return 1; } //Function Number: 44 func_2D2F(param_00,param_01,param_02,param_03) { for(var_04 = 0;var_04 < level.var_C928.size;var_04++) { var_05 = level.var_C928[var_04]; if(var_05.team == self.team && var_05 != self) { if(isai(var_05)) { if(param_02) { if(distancesquared(param_00,var_05.origin) < 441) { return 1; } } if(param_03 && var_05 bothasscriptgoal()) { var_06 = var_05 botgetscriptgoal(); if(distancesquared(param_00,var_06) < 441) { return 1; } } continue; } if(param_01) { if(distancesquared(param_00,var_05.origin) < 441) { return 1; } } } } return 0; } //Function Number: 45 func_2D2D() { var_00 = 0; if(isdefined(self.var_2D53)) { foreach(var_02 in self.var_2D53) { var_03 = distance(self.var_2D52,var_02.origin); var_00 = max(var_03,var_00); } } return var_00; } //Function Number: 46 func_2EB8() { self notify("bot_think_tactical_goals"); self endon("bot_think_tactical_goals"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.var_113D0 = []; for(;;) { if(self.var_113D0.size > 0 && !scripts\mp\bots\_bots_util::func_2DE0()) { var_00 = self.var_113D0[0]; if(!isdefined(var_00.var_151D)) { self notify("start_tactical_goal"); if(isdefined(var_00.var_10D46)) { self [[ var_00.var_10D46 ]](var_00); } childthread func_13956(var_00); var_01 = "tactical"; if(isdefined(var_00.var_8430)) { var_01 = var_00.var_8430; } self botsetscriptgoal(var_00.var_842B,var_00.var_842C,var_01,var_00.var_159,var_00.var_C293); var_02 = scripts\mp\bots\_bots_util::func_2ECB(undefined,"stop_tactical_goal"); self notify("stop_goal_aborted_watch"); if(var_02 == "goal") { if(isdefined(var_00.var_157C)) { self [[ var_00.var_157C ]](var_00); } } if(var_02 != "script_goal_changed") { self botclearscriptgoal(); } if(isdefined(var_00.var_6302)) { self [[ var_00.var_6302 ]](var_00); } } self.var_113D0 = scripts\common\utility::func_22A9(self.var_113D0,var_00); } wait(0.05); } } //Function Number: 47 func_13956(param_00) { self endon("stop_tactical_goal"); self endon("stop_goal_aborted_watch"); wait(0.05); for(;;) { if(isdefined(param_00.var_151D) || isdefined(param_00.var_FF0D) && self [[ param_00.var_FF0D ]](param_00)) { self notify("stop_tactical_goal"); } wait(0.05); } } //Function Number: 48 func_2E27(param_00,param_01,param_02,param_03) { var_04 = spawnstruct(); var_04.type = param_00; var_04.var_842B = param_01; if(isdefined(self.var_C550)) { if(!scripts\common\utility::func_2286(self.var_C550,param_00)) { return; } } var_04.priority = param_02; var_04.var_C270 = param_03.var_C270; var_04.var_8430 = param_03.var_EDCA; var_04.var_159 = param_03.var_EDCC; var_04.var_842C = 0; if(isdefined(param_03.var_EDC9)) { var_04.var_842C = param_03.var_EDC9; } var_04.var_10D46 = param_03.var_10D46; var_04.var_6302 = param_03.var_6302; var_04.var_FF0D = param_03.var_FF0D; var_04.var_157C = param_03.var_157C; var_04.var_C293 = param_03.var_C293; for(var_05 = 0;var_05 < self.var_113D0.size;var_05++) { if(var_04.priority > self.var_113D0[var_05].priority) { break; } } for(var_06 = self.var_113D0.size - 1;var_06 >= var_05;var_06--) { self.var_113D0[var_06 + 1] = self.var_113D0[var_06]; } self.var_113D0[var_05] = var_04; } //Function Number: 49 func_2DC5(param_00,param_01) { if(!isdefined(self.var_113D0)) { return 0; } if(isdefined(param_00)) { foreach(var_03 in self.var_113D0) { if(var_03.type == param_00) { if(isdefined(param_01) && isdefined(var_03.var_C270)) { return var_03.var_C270 == param_01; } else { return 1; } } } return 0; } return self.var_113D0.size > 0; } //Function Number: 50 func_2D02(param_00,param_01) { if(!isdefined(self.var_113D0)) { return; } foreach(var_03 in self.var_113D0) { if(var_03.type == param_00) { if(isdefined(param_01)) { if(isdefined(var_03.var_C270) && var_03.var_C270 == param_01) { var_03.var_151D = 1; } continue; } var_03.var_151D = 1; } } } //Function Number: 51 func_2D5C() { self.var_C550[0] = "map_interactive_object"; foreach(var_01 in self.var_113D0) { if(var_01.type != "map_interactive_object") { var_01.var_151D = 1; } } } //Function Number: 52 func_2D69() { self.var_C550 = undefined; } //Function Number: 53 func_2E1E() { var_00 = gettime(); if(!isdefined(self.var_A8E5) || var_00 - self.var_A8E5 > 1000) { self.var_A8E5 = var_00; var_01 = func_2DA3("tacticalinsertion"); if(!isdefined(var_01)) { return 0; } if(isdefined(self.var_10C) && self botcanseeentity(self.var_10C)) { return 0; } var_02 = getzonenearest(self.origin); if(!isdefined(var_02)) { return 0; } var_03 = botzonenearestcount(var_02,self.team,1,"enemy_predict",">",0); if(!isdefined(var_03)) { return 0; } var_04 = self method_8533(); var_05 = getnodesinradius(self.origin,500,0,999,"path",var_04); if(var_05.size <= 0) { return 0; } var_06 = self botnodepick(var_05,var_05.size * 0.15,"node_hide"); if(!isdefined(var_06)) { return 0; } return func_2E7E(var_01,undefined,undefined,undefined,var_06); } return 0; }