Files
IL-GSC/IW/PC/ALL/scripts/mp/bots/_bots.gsc
2023-10-27 03:49:01 -04:00

3208 lines
59 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: scripts\mp\bots\_bots.gsc
* Game: Call of Duty: Infinite Warfare
* Platform: PC
* Function Count: 111
* Decompile Time: 5745 ms
* Timestamp: 10/27/2023 12:11:46 AM
*******************************************************************/
//Function Number: 1
main()
{
if(isdefined(level.createfx_enabled) && level.createfx_enabled)
{
return;
}
func_F8F4();
scripts\mp\bots\_bots_personality::func_F9FD();
level.var_274F = ::badplace_cylinder;
level.var_2750 = ::badplace_delete;
scripts\mp\bots\_bots_killstreaks::func_2DF3();
scripts\mp\bots\_bots_powers::func_2E53();
scripts\mp\bots\_bots_loadout::init();
level thread init();
}
//Function Number: 2
func_F8F4()
{
level.var_2D9E = [];
level.var_2D9E["bots_spawn"] = ::func_10656;
level.var_2D9E["bots_add_scavenger_bag"] = ::func_2D04;
level.var_2D9E["bots_add_to_level_targets"] = ::scripts\mp\bots\_bots_util::func_2D06;
level.var_2D9E["bots_remove_from_level_targets"] = ::scripts\mp\bots\_bots_util::func_2E64;
level.var_2D9E["bots_make_entity_sentient"] = ::func_2E16;
level.var_2D9E["think"] = ::func_2EAE;
level.var_2D9E["on_killed"] = ::func_C4AC;
level.var_2D9E["should_do_killcam"] = ::func_2E8E;
level.var_2D9E["get_attacker_ent"] = ::scripts\mp\bots\_bots_util::func_2DAF;
level.var_2D9E["should_pickup_weapons"] = ::func_2E90;
level.var_2D9E["on_damaged"] = ::func_2D47;
level.var_2D9E["gametype_think"] = ::func_4FF3;
level.var_2D9E["leader_dialog"] = ::scripts\mp\bots\_bots_util::func_2DFB;
level.var_2D9E["player_spawned"] = ::func_2E4D;
level.var_2D9E["should_start_cautious_approach"] = ::scripts\mp\bots\_bots_strategy::func_FF9A;
level.var_2D9E["know_enemies_on_start"] = ::func_2DF8;
level.var_2D9E["bot_get_rank_xp"] = ::func_2DB3;
level.var_2D9E["ai_3d_sighting_model"] = ::func_2D00;
level.var_2D9E["dropped_weapon_think"] = ::func_2EB6;
level.var_2D9E["dropped_weapon_cancel"] = ::func_FFA0;
level.var_2D9E["crate_can_use"] = ::func_4831;
level.var_2D9E["crate_low_ammo_check"] = ::func_483E;
level.var_2D9E["crate_should_claim"] = ::func_484B;
level.var_2D9E["crate_wait_use"] = ::func_484D;
level.var_2D9E["crate_in_range"] = ::func_483B;
level.var_2D9E["post_teleport"] = ::func_2E50;
level.var_2E5E = [];
level.var_2E5E["allies"] = ::scripts\mp\bots\_bots_personality::func_2E5D;
level.var_2E5E["axis"] = ::scripts\mp\bots\_bots_personality::func_2E5D;
level.var_2D27["deployable_vest"] = ::func_2E93;
level.var_2D27["deployable_ammo"] = ::func_2E92;
level.var_2D27["scavenger_bag"] = ::func_2E96;
level.var_2D27["deployable_grenades"] = ::func_2E94;
level.var_2D27["deployable_juicebox"] = ::func_2E95;
level.var_2E55["deployable_ammo"] = ::func_2E54;
level.var_2E52["deployable_ammo"] = ::func_2E51;
level.var_2D76["capture"] = ::scripts\mp\bots\_bots_strategy::func_6C87;
level.var_2D76["capture_zone"] = ::scripts\mp\bots\_bots_strategy::func_6C88;
level.var_2D76["protect"] = ::scripts\mp\bots\_bots_strategy::func_6C8A;
level.var_2D76["bodyguard"] = ::scripts\mp\bots\_bots_strategy::func_6C86;
level.var_2D76["patrol"] = ::scripts\mp\bots\_bots_strategy::func_6C89;
scripts\mp\bots\gametype_war::func_F8F4();
if(scripts\mp\_utility::func_2DD9())
{
scripts\mp\bots\_bots_fireteam::func_2D92();
}
}
//Function Number: 3
func_00AC(param_00,param_01)
{
if(isdefined(level.var_2D9E) && isdefined(level.var_2D9E["leader_dialog"]))
{
self [[ level.var_2D9E["leader_dialog"] ]](param_00,param_01);
}
}
//Function Number: 4
init()
{
thread func_B9A3();
thread func_2EBB();
func_97DE();
if(!func_10082())
{
return;
}
func_DE6C();
var_00 = function_001F();
if(var_00 > 0)
{
setmatchdata("hasBots",1);
if(scripts\mp\_utility::func_2DD9())
{
level thread scripts\mp\bots\_bots_fireteam::func_2D8E();
level thread scripts\mp\bots\_bots_fireteam_commander::init();
return;
}
level thread func_2D3A();
}
}
//Function Number: 5
func_97DE()
{
if(!isdefined(level.var_485C))
{
level.var_485C = 500;
}
if(!isdefined(level.var_4859))
{
level.var_4859 = 3000;
}
level.var_2E3C = 3000;
level.var_2E66 = "iw6_panzerfaust3";
level.var_2D70 = "iw7_knife";
level.var_13FBD = function_00EC();
level.var_2413 = undefined;
func_97DF();
}
//Function Number: 6
func_97DF()
{
if(isdefined(level.var_1165C))
{
var_00 = [[ level.var_1165C ]]();
}
else
{
var_00 = function_0076();
}
level.var_2E1B = 0;
level.var_2E18 = 0;
level.var_2E1C = 0;
level.var_2E19 = 0;
level.var_2E1D = 0;
level.var_2E1A = 0;
if(var_00.size > 1)
{
level.var_2E1B = var_00[0].origin[0];
level.var_2E18 = var_00[0].origin[0];
level.var_2E1C = var_00[0].origin[1];
level.var_2E19 = var_00[0].origin[1];
level.var_2E1D = var_00[0].origin[2];
level.var_2E1A = var_00[0].origin[2];
for(var_01 = 1;var_01 < var_00.size;var_01++)
{
var_02 = var_00[var_01].origin;
if(var_02[0] < level.var_2E1B)
{
level.var_2E1B = var_02[0];
}
if(var_02[0] > level.var_2E18)
{
level.var_2E18 = var_02[0];
}
if(var_02[1] < level.var_2E1C)
{
level.var_2E1C = var_02[1];
}
if(var_02[1] > level.var_2E19)
{
level.var_2E19 = var_02[1];
}
if(var_02[2] < level.var_2E1D)
{
level.var_2E1D = var_02[2];
}
if(var_02[2] > level.var_2E1A)
{
level.var_2E1A = var_02[2];
}
}
}
level.var_2E17 = (level.var_2E1B + level.var_2E18 / 2,level.var_2E1C + level.var_2E19 / 2,level.var_2E1D + level.var_2E1A / 2);
level.var_2EC5 = 1;
}
//Function Number: 7
func_2E50()
{
level.var_2EC5 = undefined;
level.var_2DD0 = undefined;
func_97DF();
scripts\mp\bots\_bots_killstreaks_remote_vehicle::func_DF76();
}
//Function Number: 8
func_10082()
{
return 1;
}
//Function Number: 9
func_DE6C()
{
wait(1);
foreach(var_01 in level.players)
{
if(isbot(var_01))
{
if(isalive(var_01))
{
var_01.var_6695 = 1;
var_01.var_2EAC = var_01.team;
var_01.var_2E99 = 1;
var_01 thread [[ level.var_2D9E["think"] ]]();
continue;
}
}
}
}
//Function Number: 10
func_2E4D()
{
func_2E82();
if(isdefined(self.var_D88E))
{
scripts\mp\bots\_bots_util::func_2E83(self.var_D88E);
self.var_D88E = undefined;
}
}
//Function Number: 11
func_2E82()
{
if(!isdefined(self.var_2D33))
{
if(!func_2D9F())
{
while(!isdefined(level.var_2E14))
{
wait(0.05);
}
if(isdefined(self.var_C80E))
{
self.var_2D33 = [[ self.var_C80E ]]();
return;
}
self.var_2D33 = scripts\mp\bots\_bots_personality::func_2E88();
return;
}
self.var_2D33 = self.var_4004;
}
}
//Function Number: 12
func_13968()
{
for(;;)
{
level waittill("connected",var_00);
if(!isai(var_00) && level.players.size > 0)
{
level.var_D40C = scripts\common\utility::array_add(level.var_D40C,var_00);
childthread func_2EF7(var_00);
childthread func_2EF6(var_00);
childthread func_2EF8(var_00);
}
}
}
//Function Number: 13
func_2EF7(param_00)
{
param_00 endon("bots_human_disconnected");
while(!scripts\common\utility::func_2286(level.players,param_00))
{
wait(0.05);
}
param_00 notify("bots_human_spawned");
}
//Function Number: 14
func_2EF6(param_00)
{
param_00 endon("bots_human_spawned");
param_00 waittill("disconnect");
param_00 notify("bots_human_disconnected");
}
//Function Number: 15
func_2EF8(param_00)
{
param_00 scripts\common\utility::waittill_any_3("bots_human_spawned","bots_human_disconnected");
level.var_D40C = scripts\common\utility::func_22A9(level.var_D40C,param_00);
}
//Function Number: 16
func_B985()
{
level.var_D40C = [];
childthread func_13968();
for(;;)
{
if(level.var_D40C.size > 0)
{
level.var_C9D7 = 1;
}
else
{
level.var_C9D7 = 0;
}
wait(0.5);
}
}
//Function Number: 17
func_2D22(param_00)
{
if(scripts\mp\_utility::func_B3EC())
{
return 1;
}
if(!level.teambased)
{
return 1;
}
if(scripts\mp\_teams::func_7F24(param_00))
{
return 1;
}
return 0;
}
//Function Number: 18
func_2D3A(param_00,param_01)
{
level endon("game_ended");
self notify("bot_connect_monitor");
self endon("bot_connect_monitor");
level.var_C9D7 = 0;
childthread func_B985();
scripts\mp\_hostmigration::func_13708(0.5);
var_02 = 1.5;
if(!isdefined(level.var_2D36))
{
level.var_2D36 = 0;
}
if(!isdefined(level.var_2D37))
{
level.var_2D37 = 0;
}
if(!isdefined(level.var_2D35))
{
level.var_2D35 = 0;
}
for(;;)
{
if(level.var_C9D7)
{
scripts\mp\_hostmigration::func_13708(var_02);
continue;
}
var_03 = isdefined(level.var_2EF5) || !level.teambased;
var_04 = function_0025(0);
var_05 = function_0025(1);
if(level.rankedmatch)
{
var_06 = "default";
var_07 = "default";
}
else
{
var_06 = function_0024(0);
var_07 = function_0024(1);
}
var_08 = "allies";
var_09 = "axis";
var_0A = func_2D34();
var_0B = func_3B22(var_0A,"humans");
if(var_0B > 1)
{
var_0C = func_2DAD();
if(!scripts\mp\_utility::func_B3EC() && isdefined(var_0C) && var_0C != "spectator")
{
var_08 = var_0C;
var_09 = scripts\mp\_utility::getotherteam(var_0C);
}
else
{
var_0D = func_3B22(var_0A,"humans_allies");
var_0E = func_3B22(var_0A,"humans_axis");
if(var_0E > var_0D)
{
var_08 = "axis";
var_09 = "allies";
}
}
}
else
{
var_0F = func_7A21();
if(isdefined(var_0F))
{
var_10 = var_0F func_2DB2();
if(isdefined(var_10) && var_10 != "spectator")
{
var_08 = var_10;
var_09 = scripts\mp\_utility::getotherteam(var_10);
}
}
}
var_11 = scripts\mp\bots\_bots_util::func_2DB5();
var_12 = scripts\mp\bots\_bots_util::func_2DB5();
if(var_11 + var_12 < scripts\mp\bots\_bots_util::func_2DA6())
{
if(var_11 < var_04)
{
var_11++;
}
else if(var_12 < var_05)
{
var_12++;
}
}
var_13 = func_3B22(var_0A,"humans_" + var_08);
var_14 = func_3B22(var_0A,"humans_" + var_09);
var_15 = var_13 + var_14;
var_16 = func_3B22(var_0A,"spectator");
var_17 = 0;
var_18 = 0;
while(var_16 > 0)
{
var_19 = var_13 + var_17 + 1 <= var_11;
var_1A = var_14 + var_18 + 1 <= var_12;
if(var_19 && !var_1A)
{
var_17++;
continue;
}
if(!var_19 && var_1A)
{
var_18++;
continue;
}
if(var_19 && var_1A)
{
if(var_16 % 2 == 1)
{
var_17++;
continue;
}
var_18++;
}
var_16--;
}
var_1B = func_3B22(var_0A,"bots_" + var_08);
var_1C = func_3B22(var_0A,"bots_" + var_09);
var_1D = var_1B + var_1C;
if(var_1D > 0)
{
level.var_2D36 = 1;
}
var_1E = 0;
if(!level.var_2D35)
{
var_1E = !func_2DAE();
if(!var_1E)
{
level.var_2D35 = 1;
}
}
if(var_1E)
{
var_1F = !getdvarint("systemlink") && !getdvarint("onlinegame");
var_20 = !var_03 && var_05 != var_04 && !level.var_2D36 && level.var_2D37 < 10 || !scripts\mp\_utility::func_766C("prematch_done");
if(var_1F || var_20)
{
level.var_2D37 = level.var_2D37 + var_02;
scripts\mp\_hostmigration::func_13708(var_02);
continue;
}
}
var_21 = int(min(var_11 - var_13 - var_17,var_04));
var_22 = int(min(var_12 - var_14 - var_18,var_05));
var_23 = 1;
var_24 = var_21 + var_22 + var_0B;
var_25 = var_04 + var_05 + var_0B;
var_26 = [-1,-1];
while(var_24 < scripts\mp\bots\_bots_util::func_2DA6() && var_24 < var_25)
{
if(var_23 && var_21 < var_04 && func_2D22(var_08))
{
var_21++;
}
else if(!var_23 && var_22 < var_05 && func_2D22(var_09))
{
var_22++;
}
var_24 = var_21 + var_22 + var_0B;
if(var_26[var_23] == var_24)
{
break;
}
var_26[var_23] = var_24;
var_23 = !var_23;
}
if(var_04 == var_05 && !var_03 && var_17 == 1 && var_18 == 0 && var_22 > 0)
{
if(!isdefined(level.var_2E56) && scripts\mp\_utility::func_766C("prematch_done"))
{
level.var_2E56 = gettime();
}
if(var_1E && !isdefined(level.var_2E56) || gettime() - level.var_2E56 < 10000)
{
var_22--;
}
}
var_27 = var_21 - var_1B;
var_28 = var_22 - var_1C;
var_29 = 1;
if(var_03)
{
var_2A = var_11 + var_12;
var_2B = var_04 + var_05;
var_2C = var_13 + var_14;
var_2D = var_1B + var_1C;
var_2E = int(min(var_2A - var_2C,var_2B));
var_2F = var_2E - var_2D;
if(var_2F == 0)
{
var_29 = 0;
}
else if(var_2F > 0)
{
var_27 = int(var_2F / 2) + var_2F % 2;
var_28 = int(var_2F / 2);
}
else if(var_2F < 0)
{
var_30 = var_2F * -1;
var_27 = -1 * int(min(var_30,var_1B));
var_28 = -1 * var_30 + var_27;
}
}
else if(!scripts\mp\_utility::func_B3EC() && var_27 * var_28 < 0 && scripts\mp\_utility::func_766C("prematch_done") && !isdefined(level.var_2EEE))
{
var_31 = int(min(abs(var_27),abs(var_28)));
if(var_27 > 0)
{
func_BC13(var_31,var_09,var_08,var_06);
}
else if(var_28 > 0)
{
func_BC13(var_31,var_08,var_09,var_07);
}
var_29 = 0;
}
if(var_29)
{
if(var_28 < 0)
{
func_5CE4(var_28 * -1,var_09);
}
if(var_27 < 0)
{
func_5CE4(var_27 * -1,var_08);
}
if(var_28 > 0)
{
level thread func_10656(var_28,var_09,undefined,undefined,"spawned_enemies",var_07);
}
if(var_27 > 0)
{
level thread func_10656(var_27,var_08,undefined,undefined,"spawned_allies",var_06);
}
if(var_28 > 0 && var_27 > 0)
{
level scripts\common\utility::func_137AC("spawned_enemies","spawned_allies");
}
else if(var_28 > 0)
{
level waittill("spawned_enemies");
}
else if(var_27 > 0)
{
level waittill("spawned_allies");
}
}
if(var_07 != var_06)
{
func_2EF9(var_09,var_07);
func_2EF9(var_08,var_06);
}
scripts\mp\_hostmigration::func_13708(var_02);
}
}
//Function Number: 19
func_2DB2()
{
if(isdefined(self.team))
{
return self.team;
}
if(isdefined(self.pers["team"]))
{
return self.pers["team"];
}
return undefined;
}
//Function Number: 20
func_2DAD()
{
foreach(var_01 in level.players)
{
if(!isai(var_01) && var_01 ishost())
{
return var_01 func_2DB2();
}
}
return "spectator";
}
//Function Number: 21
func_2DAE()
{
var_00 = 0;
var_01 = 0;
var_02 = 0;
foreach(var_04 in level.players)
{
if(!isai(var_04))
{
if(var_04 ishost())
{
var_00 = 1;
}
if(func_D229(var_04))
{
var_01 = 1;
if(var_04 ishost())
{
var_02 = 1;
}
}
}
}
return var_02 || var_01 && !var_00;
}
//Function Number: 22
func_D229(param_00)
{
if(isdefined(param_00.team) && param_00.team != "spectator")
{
return 1;
}
if(isdefined(param_00.var_1097B) && param_00.var_1097B)
{
return 1;
}
if(param_00 ismlgspectator() && isdefined(param_00.team) && param_00.team == "spectator")
{
return 1;
}
return 0;
}
//Function Number: 23
func_2D34()
{
var_00 = [];
for(var_01 = 0;var_01 < level.players.size;var_01++)
{
var_02 = level.players[var_01];
if(isdefined(var_02) && isdefined(var_02.team))
{
var_00 = func_3B21(var_00,"all");
var_00 = func_3B21(var_00,var_02.team);
if(isbot(var_02))
{
var_00 = func_3B21(var_00,"bots");
var_00 = func_3B21(var_00,"bots_" + var_02.team);
continue;
}
var_00 = func_3B21(var_00,"humans");
var_00 = func_3B21(var_00,"humans_" + var_02.team);
}
}
return var_00;
}
//Function Number: 24
func_3B21(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = [];
}
if(!isdefined(param_00[param_01]))
{
param_00[param_01] = 0;
}
param_00[param_01] = param_00[param_01] + 1;
return param_00;
}
//Function Number: 25
func_3B22(param_00,param_01)
{
if(!isdefined(param_00))
{
return 0;
}
if(!isdefined(param_00[param_01]))
{
return 0;
}
return param_00[param_01];
}
//Function Number: 26
func_BC13(param_00,param_01,param_02,param_03)
{
foreach(var_05 in level.players)
{
if(!isdefined(var_05.team))
{
continue;
}
if(isdefined(var_05.var_452B) && var_05.var_452B && isbot(var_05) && var_05.team == param_01)
{
var_05.var_2EAC = param_02;
if(isdefined(param_03))
{
var_05 scripts\mp\bots\_bots_util::func_2E81(param_03);
}
var_05 notify("luinotifyserver","team_select",func_2E15(param_02));
wait(0.05);
var_05 notify("luinotifyserver","class_select",var_05.var_2D33);
param_00--;
if(param_00 <= 0)
{
break;
}
else
{
wait(0.1);
}
}
}
}
//Function Number: 27
func_2EF9(param_00,param_01)
{
foreach(var_03 in level.players)
{
if(!isdefined(var_03.team))
{
continue;
}
if(isdefined(var_03.var_452B) && var_03.var_452B && isbot(var_03) && var_03.team == param_00)
{
if(param_01 != var_03 botgetdifficulty())
{
var_03 scripts\mp\bots\_bots_util::func_2E81(param_01);
}
}
}
}
//Function Number: 28
func_2D68()
{
kick(self.var_6640,"EXE_PLAYERKICKED_BOT_BALANCE");
wait(0.1);
}
//Function Number: 29
func_5CE4(param_00,param_01)
{
var_02 = [];
foreach(var_04 in level.players)
{
if(isdefined(var_04.var_452B) && var_04.var_452B && isbot(var_04) && !isdefined(param_01) || isdefined(var_04.team) && var_04.team == param_01)
{
var_02[var_02.size] = var_04;
}
}
for(var_06 = var_02.size - 1;var_06 >= 0;var_06--)
{
if(param_00 <= 0)
{
break;
}
if(!scripts\mp\_utility::func_9F19(var_02[var_06]))
{
var_02[var_06] func_2D68();
var_02 = scripts\common\utility::func_22A9(var_02,var_02[var_06]);
param_00--;
}
}
for(var_06 = var_02.size - 1;var_06 >= 0;var_06--)
{
if(param_00 <= 0)
{
break;
}
var_02[var_06] func_2D68();
param_00--;
}
}
//Function Number: 30
func_2E15(param_00)
{
if(param_00 == "axis")
{
return 0;
}
if(param_00 == "allies")
{
return 1;
}
if(param_00 == "autoassign" || param_00 == "random")
{
return 2;
}
return 3;
}
//Function Number: 31
func_10655(param_00,param_01,param_02)
{
var_03 = gettime() + -5536;
while(!self method_8062())
{
if(gettime() >= var_03)
{
kick(self.var_6640,"EXE_PLAYERKICKED_BOT_BALANCE");
param_02.var_151D = 1;
return;
}
wait(0.05);
if(!isdefined(self))
{
param_02.var_151D = 1;
return;
}
}
scripts\mp\_hostmigration::func_13708(randomfloatrange(0.25,2));
if(!isdefined(self))
{
param_02.var_151D = 1;
return;
}
self method_8390();
self.pers["isBot"] = 1;
self.var_6695 = 1;
self.var_2EAC = param_00;
if(isdefined(param_02.var_54CF))
{
scripts\mp\bots\_bots_util::func_2E81(param_02.var_54CF);
}
if(isdefined(param_01))
{
self [[ param_01 ]]();
}
self thread [[ level.var_2D9E["think"] ]]();
param_02.var_DD6B = 1;
}
//Function Number: 32
func_6CA1(param_00,param_01)
{
var_02 = 0;
var_03 = 0;
for(var_04 = 0;var_04 < 10;var_04++)
{
var_03 = 0;
var_05 = param_00 getplayerdata("mp","squadHQ","aiSquadMembers",var_04);
if(var_05 == var_02)
{
var_04++;
continue;
}
if(!isdefined(level.var_91D3) || !isdefined(level.var_91D3[var_05]) || level.var_91D3[var_05] == 0)
{
return var_05;
}
}
return -1;
}
//Function Number: 33
func_10656(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = gettime() + 10000;
var_07 = [];
var_08 = var_07.size;
while(level.players.size < scripts\mp\bots\_bots_util::func_2DA6() && var_07.size < param_00 && gettime() < var_06)
{
scripts\mp\_hostmigration::func_13708(0.05);
var_09 = undefined;
if(function_0280())
{
if(level.teambased)
{
var_09 = function_0281(param_01);
}
else
{
var_09 = function_0281("none");
}
}
else
{
var_09 = function_0005("",0,0,0);
}
if(!isdefined(var_09))
{
if(isdefined(param_03) && param_03)
{
if(isdefined(param_04))
{
self notify(param_04);
}
return;
}
scripts\mp\_hostmigration::func_13708(1);
continue;
}
else
{
var_0A = spawnstruct();
var_0A.var_2CFF = var_09;
var_0A.var_DD6B = 0;
var_0A.var_151D = 0;
var_0A.index = var_08;
var_0A.var_54CF = param_05;
var_07[var_07.size] = var_0A;
var_0A.var_2CFF thread func_10655(param_01,param_02,var_0A);
var_08++;
}
}
var_0B = 0;
var_06 = gettime() + -5536;
while(var_0B < var_07.size && gettime() < var_06)
{
var_0B = 0;
foreach(var_0A in var_07)
{
if(var_0A.var_DD6B || var_0A.var_151D)
{
var_0B++;
}
}
wait(0.05);
}
if(isdefined(param_04))
{
self notify(param_04);
}
}
//Function Number: 34
func_2DA0()
{
if(!level.teambased)
{
return 1;
}
if(isdefined(level.var_2EF3) && level.var_2EF3)
{
return 1;
}
return 0;
}
//Function Number: 35
func_2D9F()
{
return isdefined(level.var_2EF2) && level.var_2EF2;
}
//Function Number: 36
func_2DDF()
{
if(!isdefined(self.var_4009))
{
return 0;
}
return 1;
}
//Function Number: 37
func_2EAE()
{
self notify("bot_think");
self endon("bot_think");
self endon("disconnect");
while(!isdefined(self.pers["team"]))
{
wait(0.05);
}
level.var_8BD8 = 1;
if(func_2DA0())
{
self.var_2EAC = self.pers["team"];
}
var_00 = self.var_2EAC;
if(!isdefined(var_00))
{
var_00 = self.pers["team"];
}
scripts\mp\bots\_bots_killstreaks::func_2DF3();
self.var_6640 = self getentitynumber();
var_01 = 0;
if(!isdefined(self.var_2E99))
{
var_01 = 1;
self.var_2E99 = 1;
if(!func_2DA0())
{
self notify("luinotifyserver","team_select",func_2E15(var_00));
wait(0.5);
if(self.pers["team"] == "spectator")
{
func_2D68();
return;
}
}
}
for(;;)
{
scripts\mp\bots\_bots_util::func_2E81(self botgetdifficulty());
var_02 = self botgetdifficultysetting("advancedPersonality");
if(var_01 && isdefined(var_02) && var_02 != 0)
{
scripts\mp\bots\_bots_personality::func_2D10();
}
scripts\mp\bots\_bots_personality::func_2D0C();
if(var_01)
{
func_2E82();
if(!func_2D9F())
{
self notify("luinotifyserver","class_select",self.var_2D33);
}
if(self.health == 0)
{
self.var_331E = 1;
self notify("bot_ready_to_spawn");
self waittill("spawned_player");
self.var_331E = undefined;
self.var_2EAC = var_00;
}
if(isdefined(level.var_2D9E) && isdefined(level.var_2D9E["know_enemies_on_start"]))
{
self thread [[ level.var_2D9E["know_enemies_on_start"] ]]();
}
var_01 = 0;
}
func_2E67();
wait(0.1);
self waittill("death");
func_E292();
self waittill("spawned_player");
}
}
//Function Number: 38
func_E292()
{
self endon("started_spawnPlayer");
while(!self.var_136FF)
{
wait(0.05);
}
if(scripts\mp\_playerlogic::func_BE8F())
{
while(self.var_136FF)
{
if(self.sessionstate == "spectator")
{
if(getdvarint("numlives") == 0 || self.pers["lives"] > 0)
{
self botpressbutton("use",0.5);
}
}
wait(1);
}
}
}
//Function Number: 39
func_2DB3()
{
if(scripts\mp\_utility::func_2DE2() == 0)
{
if(!isdefined(self.pers["rankxp"]))
{
self.pers["rankxp"] = 0;
}
return self.pers["rankxp"];
}
var_00 = self botgetdifficulty();
var_01 = "bot_rank_" + var_00;
if(isdefined(self.pers[var_01]) && self.pers[var_01] > 0)
{
return self.pers[var_01];
}
var_02 = func_2E5F(var_00);
var_03 = var_02["rank"];
var_04 = var_02["prestige"];
var_05 = scripts\mp\_rank::func_80CF(var_03);
var_06 = var_05 + scripts\mp\_rank::func_80D1(var_03);
var_07 = randomintrange(var_05,var_06 + 1);
self.pers[var_01] = var_07;
return var_07;
}
//Function Number: 40
func_2D00(param_00)
{
thread func_2D01(param_00);
}
//Function Number: 41
func_2D01(param_00)
{
param_00 endon("disconnect");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
if(isalive(self) && !self botcanseeentity(param_00) && scripts\common\utility::func_13D90(self.origin,self.angles,param_00.origin,self botgetfovdot()))
{
self botgetimperfectenemyinfo(param_00,param_00.origin);
}
wait(0.1);
}
}
//Function Number: 42
func_2E5F(param_00)
{
var_01 = [];
var_01["rank"] = 0;
var_01["prestige"] = 0;
if(param_00 == "default")
{
return var_01;
}
if(!isdefined(level.var_2E69))
{
level.var_2E69 = [];
level.var_2E69["recruit"][0] = 0;
level.var_2E69["recruit"][1] = 5;
level.var_2E69["regular"][0] = 6;
level.var_2E69["regular"][1] = 9;
level.var_2E69["hardened"][0] = 10;
level.var_2E69["hardened"][1] = 19;
level.var_2E69["veteran"][0] = 20;
level.var_2E69["veteran"][1] = 29;
}
if(!isdefined(level.var_2E68))
{
level.var_2E68 = [];
level.var_2E68["recruit"][0] = 0;
level.var_2E68["recruit"][1] = 0;
level.var_2E68["regular"][0] = 0;
level.var_2E68["regular"][1] = 0;
level.var_2E68["hardened"][0] = 0;
level.var_2E68["hardened"][1] = 0;
level.var_2E68["veteran"][0] = 0;
level.var_2E68["veteran"][1] = 9;
}
if(isdefined(level.var_2E69[param_00][0]) && isdefined(level.var_2E69[param_00][1]))
{
var_01["rank"] = randomintrange(level.var_2E69[param_00][0],level.var_2E69[param_00][1] + 1);
}
if(isdefined(level.var_2E68[param_00][0]) && isdefined(level.var_2E68[param_00][1]))
{
var_01["prestige"] = randomintrange(level.var_2E68[param_00][0],level.var_2E68[param_00][1] + 1);
}
return var_01;
}
//Function Number: 43
func_4831(param_00)
{
if(isagent(self) && !isdefined(param_00.var_2F33))
{
return 0;
}
if(isdefined(param_00.var_485F) && !scripts\mp\bots\_bots_killstreaks::func_2DDB(param_00.var_485F))
{
return 0;
}
return 1;
}
//Function Number: 44
func_7A21()
{
var_00 = undefined;
var_01 = getentarray("player","classname");
if(isdefined(var_01))
{
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
if(isdefined(var_01[var_02]) && isdefined(var_01[var_02].var_452B) && var_01[var_02].var_452B && !isai(var_01[var_02]) && !isdefined(var_00) || var_00.team == "spectator")
{
var_00 = var_01[var_02];
}
}
}
return var_00;
}
//Function Number: 45
func_2D47(param_00,param_01,param_02,param_03,param_04,param_05)
{
if(!isdefined(self) || !isalive(self))
{
return;
}
if(param_02 == "MOD_FALLING" || param_02 == "MOD_SUICIDE")
{
return;
}
if(param_01 <= 0)
{
return;
}
if(!isdefined(param_04))
{
if(!isdefined(param_00))
{
return;
}
param_04 = param_00;
}
if(isdefined(param_04))
{
if(isdefined(self.var_7197))
{
self [[ self.var_7197 ]](param_00,param_01,param_02,param_03,param_04,param_05);
}
if(level.teambased)
{
if(isdefined(param_04.team) && param_04.team == self.team)
{
return;
}
else if(isdefined(param_00) && isdefined(param_00.team) && param_00.team == self.team)
{
return;
}
}
var_06 = scripts\mp\bots\_bots_util::func_2DAF(param_00,param_04);
if(isdefined(var_06))
{
self method_804A(var_06);
}
}
}
//Function Number: 46
func_C4AC(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
self method_8027();
self botclearscriptgoal();
var_0A = scripts\mp\bots\_bots_util::func_2DAF(param_01,param_00);
if(!scripts\mp\_utility::func_2DD9() && isdefined(var_0A) && var_0A.classname == "script_vehicle" && isdefined(var_0A.var_8DD9))
{
var_0B = self botgetdifficultysetting("launcherRespawnChance");
if(randomfloat(1) < var_0B)
{
self.var_E293 = 1;
}
}
}
//Function Number: 47
func_2E8E()
{
if(scripts\mp\_utility::func_2DD9())
{
return 0;
}
var_00 = 0;
var_01 = self botgetdifficulty();
if(var_01 == "recruit")
{
var_00 = 0.1;
}
else if(var_01 == "regular")
{
var_00 = 0.4;
}
else if(var_01 == "hardened")
{
var_00 = 0.7;
}
else if(var_01 == "veteran")
{
var_00 = 1;
}
return randomfloat(1) < 1 - var_00;
}
//Function Number: 48
func_2E90()
{
if(scripts\mp\_utility::func_9E59())
{
return 0;
}
return 1;
}
//Function Number: 49
func_2E67()
{
thread func_2EBA();
thread scripts\mp\bots\_bots_strategy::func_2EB8();
self thread [[ level.var_2D9E["dropped_weapon_think"] ]]();
thread func_2EB3();
thread func_2EAF();
thread scripts\mp\bots\_bots_supers::func_2EB7();
thread scripts\mp\bots\_bots_powers::func_2EB4();
thread func_2EB0();
thread scripts\mp\bots\_bots_killstreaks::func_2EB2();
thread scripts\mp\bots\_bots_killstreaks::func_2EB9();
thread func_2EB1();
}
//Function Number: 50
func_2EBA(param_00)
{
var_01 = "spawned_player";
if(isdefined(param_00) && param_00)
{
var_01 = "death";
}
self notify("bot_think_watch_enemy");
self endon("bot_think_watch_enemy");
self endon(var_01);
self endon("disconnect");
level endon("game_ended");
self.last_enemy_sight_time = gettime();
for(;;)
{
if(isdefined(self.var_10C))
{
if(self botcanseeentity(self.var_10C))
{
self.last_enemy_sight_time = gettime();
}
}
wait(0.05);
}
}
//Function Number: 51
func_2EB6()
{
self notify("bot_think_seek_dropped_weapons");
self endon("bot_think_seek_dropped_weapons");
self endon("death");
self endon("disconnect");
level endon("game_ended");
var_00 = "throwingknife_mp";
for(;;)
{
var_01 = 0;
if(scripts\mp\bots\_bots_util::func_2E3B() && self [[ level.var_2D9E["should_pickup_weapons"] ]]() && !scripts\mp\bots\_bots_util::func_2DE0())
{
var_02 = getentarray("dropped_weapon","targetname");
var_03 = scripts\common\utility::func_782F(self.origin,var_02);
if(var_03.size > 0)
{
var_04 = var_03[0];
func_2E6F(var_04);
}
}
if(!scripts\mp\bots\_bots_util::func_2DCA() && !scripts\mp\bots\_bots_util::func_2DE0() && self botgetdifficultysetting("strategyLevel") > 0)
{
var_05 = self hasweapon(var_00);
var_06 = var_05 && self method_80FB(var_00) == 0;
if(var_06)
{
if(isdefined(self.var_8444))
{
wait(5);
continue;
}
var_07 = getentarray("dropped_knife","targetname");
var_08 = scripts\common\utility::func_782F(self.origin,var_07);
foreach(var_0A in var_08)
{
if(!isdefined(var_0A))
{
continue;
}
if(!isdefined(var_0A.var_370D))
{
var_0B = scripts\mp\bots\_bots_util::func_2E58("BotGetClosestNavigablePoint",::scripts\mp\bots\_bots_util::func_74C3,var_0A.origin,32,self);
if(isdefined(var_0A))
{
var_0A.var_429A = var_0B;
var_0A.var_370D = 1;
}
else
{
continue;
}
}
if(isdefined(var_0A.var_429A))
{
self.var_8444 = 1;
func_2E6F(var_0A);
}
}
}
else if(var_05)
{
self.var_8444 = undefined;
}
}
wait(randomfloatrange(0.25,0.75));
}
}
//Function Number: 52
func_2E6F(param_00)
{
if(scripts\mp\bots\_bots_strategy::func_2DC5("seek_dropped_weapon",param_00) == 0)
{
var_01 = undefined;
if(param_00.var_336 == "dropped_weapon")
{
var_02 = 1;
var_03 = self getweaponslistprimaries();
foreach(var_05 in var_03)
{
if(param_00.model == function_00EA(var_05))
{
var_02 = 0;
}
}
if(var_02)
{
var_01 = ::func_2E4C;
}
}
var_07 = spawnstruct();
var_07.var_C270 = param_00;
var_07.var_EDC9 = 12;
var_07.var_FF0D = level.var_2D9E["dropped_weapon_cancel"];
var_07.var_157C = var_01;
scripts\mp\bots\_bots_strategy::func_2E27("seek_dropped_weapon",param_00.origin,100,var_07);
}
}
//Function Number: 53
func_2E4C(param_00)
{
self botpressbutton("use",2);
wait(2);
}
//Function Number: 54
func_FFA0(param_00)
{
if(!isdefined(param_00.var_C270))
{
return 1;
}
if(param_00.var_C270.var_336 == "dropped_weapon")
{
if(scripts\mp\bots\_bots_util::func_2DB8() > 0)
{
return 1;
}
}
else if(param_00.var_C270.var_336 == "dropped_knife")
{
if(scripts\mp\bots\_bots_util::func_2DCA())
{
self.var_8444 = undefined;
return 1;
}
}
return 0;
}
//Function Number: 55
func_2EB3(param_00)
{
self notify("bot_think_level_actions");
self endon("bot_think_level_actions");
self endon("death");
self endon("disconnect");
level endon("game_ended");
for(;;)
{
scripts\common\utility::waittill_notify_or_timeout("calculate_new_level_targets",randomfloatrange(2,10));
if(!isdefined(level.var_ABE5) || level.var_ABE5.size == 0)
{
continue;
}
if(scripts\mp\bots\_bots_strategy::func_2DC5("map_interactive_object"))
{
continue;
}
if(scripts\mp\bots\_bots_util::func_2DCA() || scripts\mp\bots\_bots_util::func_2DE0())
{
continue;
}
var_01 = undefined;
foreach(var_03 in level.var_ABE5)
{
if(scripts\common\utility::func_2286(var_03.var_8EE3,self))
{
var_01 = var_03;
break;
}
}
if(!isdefined(var_01))
{
if(randomint(100) > 25)
{
continue;
}
var_05 = scripts\common\utility::func_782F(self.origin,level.var_ABE5);
var_06 = 256;
if(isdefined(param_00))
{
var_06 = param_00;
}
else if(self botgetscriptgoaltype() == "hunt" && self botpursuingscriptgoal())
{
var_06 = 512;
}
if(distancesquared(self.origin,var_05[0].origin) > var_06 * var_06)
{
continue;
}
var_01 = var_05[0];
}
var_07 = 0;
if(var_01.var_2DD1 == "damage")
{
var_07 = func_2E8F(var_01);
if(var_07)
{
var_08 = var_01.origin[2] - var_01.var_2EAA[0].origin[2] + 55;
var_09 = var_01.origin[2] - var_01.var_2EAA[1].origin[2] + 55;
if(var_08 > 55 && var_09 > 55)
{
if(scripts\common\utility::func_2286(var_01.var_8EE3,self))
{
var_01.var_8EE3 = scripts\common\utility::func_22A9(var_01.var_8EE3,self);
}
continue;
}
}
var_0A = weaponclass(self getcurrentweapon());
if(var_0A == "spread")
{
var_0B = var_01.var_2EAA[0].origin - var_01.origin;
var_0C = var_01.var_2EAA[1].origin - var_01.origin;
var_0D = lengthsquared(var_0B);
var_0E = lengthsquared(var_0C);
if(var_0D > 22500 && var_0E > 22500)
{
if(scripts\common\utility::func_2286(var_01.var_8EE3,self))
{
var_01.var_8EE3 = scripts\common\utility::func_22A9(var_01.var_8EE3,self);
}
continue;
}
}
}
var_0F = spawnstruct();
var_0F.var_C270 = var_01;
if(var_01.var_2DD1 == "damage")
{
if(var_07)
{
var_0F.var_FF0D = ::func_ABEC;
}
else
{
var_0F.var_FF0D = ::func_ABED;
}
}
if(var_01.var_2DD1 == "use")
{
var_0F.var_157C = ::func_13036;
var_0F.var_FF0D = ::func_ABEB;
var_0F.var_EDCC = vectortoangles(var_01.origin - var_01.var_2EA8.origin)[1];
scripts\mp\bots\_bots_strategy::func_2E27("map_interactive_object",var_01.var_2EA8.origin,10,var_0F);
continue;
}
if(var_01.var_2DD1 == "damage")
{
if(var_07)
{
var_0F.var_157C = ::func_B57B;
var_0F.var_EDC9 = 20;
}
else
{
var_0F.var_157C = ::func_24B3;
var_0F.var_EDC9 = 50;
}
var_10 = undefined;
var_11 = scripts\mp\bots\_bots_util::func_2E58("GetPathDistLevelAction",::scripts\mp\bots\_bots_util::func_74C9,self.origin,var_01.var_2EAA[0].origin);
var_12 = scripts\mp\bots\_bots_util::func_2E58("GetPathDistLevelAction",::scripts\mp\bots\_bots_util::func_74C9,self.origin,var_01.var_2EAA[1].origin);
if(!isdefined(var_01))
{
continue;
}
if(var_11 <= 0 && var_12 <= 0)
{
continue;
}
if(var_11 > 0)
{
if(var_12 < 0 || var_11 <= var_12)
{
var_10 = var_01.var_2EAA[0];
}
}
if(var_12 > 0)
{
if(var_11 < 0 || var_12 <= var_11)
{
var_10 = var_01.var_2EAA[1];
}
}
if(!var_07)
{
childthread func_B981(var_10);
}
scripts\mp\bots\_bots_strategy::func_2E27("map_interactive_object",var_10.origin,10,var_0F);
}
}
}
//Function Number: 56
func_2E8F(param_00)
{
var_01 = self getcurrentweapon();
var_02 = scripts\mp\bots\_bots_util::func_2E3B() || self.var_8C1F || isdefined(self.var_9E5D) && self.var_9E5D == 1 || weaponclass(var_01) == "grenade" || scripts\mp\_weapons::func_9E6D(var_01);
return var_02;
}
//Function Number: 57
func_B981(param_00)
{
self endon("goal");
wait(0.1);
for(;;)
{
if(weaponclass(self getcurrentweapon()) == "spread")
{
if(distancesquared(self.origin,param_00.origin) > 90000)
{
wait(0.05);
continue;
}
}
var_01 = self getnearestnode();
if(isdefined(var_01))
{
if(nodesvisible(var_01,param_00))
{
if(sighttracepassed(self.origin + (0,0,55),param_00.origin + (0,0,55),0,self))
{
self notify("goal");
}
}
}
wait(0.05);
}
}
//Function Number: 58
func_24B3(param_00)
{
if(param_00.var_C270.origin[2] - self geteye()[2] > 55)
{
if(distance2dsquared(param_00.var_C270.origin,self.origin) < 225)
{
return;
}
}
self botsetflag("disable_movement",1);
func_AFF0(param_00.var_C270,0.3);
self botpressbutton("ads",0.3);
wait(0.25);
var_01 = gettime();
while(isdefined(param_00.var_C270) && !isdefined(param_00.var_C270.var_1D3F) && gettime() - var_01 < 5000)
{
func_AFF0(param_00.var_C270,0.15);
self botpressbutton("ads",0.15);
self botpressbutton("attack");
wait(0.1);
}
self botsetflag("disable_movement",0);
}
//Function Number: 59
func_B57B(param_00)
{
self botsetflag("disable_movement",1);
func_AFF0(param_00.var_C270,0.3);
wait(0.25);
var_01 = gettime();
while(isdefined(param_00.var_C270) && !isdefined(param_00.var_C270.var_1D3F) && gettime() - var_01 < 5000)
{
func_AFF0(param_00.var_C270,0.15);
self botpressbutton("melee");
wait(0.1);
}
self botsetflag("disable_movement",0);
}
//Function Number: 60
func_AFF0(param_00,param_01)
{
var_02 = param_00.origin;
if(distance2dsquared(self.origin,var_02) < 100)
{
var_02 = (var_02[0],var_02[1],self geteye()[2]);
}
self botlookatpoint(var_02,param_01,"script_forced");
}
//Function Number: 61
func_13036(param_00)
{
if(isagent(self))
{
scripts\common\utility::func_1C6E(1);
param_00.var_C270 enableplayeruse(self);
wait(0.05);
}
var_01 = param_00.var_C270.var_13031;
self botpressbutton("use",var_01);
wait(var_01);
if(isagent(self))
{
scripts\common\utility::func_1C6E(0);
if(isdefined(param_00.var_C270))
{
param_00.var_C270 disableplayeruse(self);
}
}
}
//Function Number: 62
func_ABEC(param_00)
{
if(func_ABEB(param_00))
{
return 1;
}
if(!func_2E8F(param_00.var_C270))
{
return 1;
}
return 0;
}
//Function Number: 63
func_ABED(param_00)
{
if(func_ABEB(param_00))
{
return 1;
}
if(func_2E8F(param_00.var_C270))
{
return 1;
}
return 0;
}
//Function Number: 64
func_ABEB(param_00)
{
if(!isdefined(param_00.var_C270))
{
return 1;
}
if(isdefined(param_00.var_C270.var_1D3F))
{
return 1;
}
if(scripts\mp\bots\_bots_util::func_2DCA())
{
return 1;
}
return 0;
}
//Function Number: 65
func_483B(param_00)
{
if(!isdefined(param_00.var_222) || param_00.var_222 != self)
{
if(distancesquared(self.origin,param_00.origin) > 4194304)
{
return 0;
}
}
return 1;
}
//Function Number: 66
func_2D45(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
var_01 = self [[ level.var_2D9E["crate_can_use"] ]](param_00);
if(!var_01)
{
if(level.gametype == "grnd")
{
var_01 = 1;
}
}
if(!var_01)
{
return 0;
}
if(!func_483D(param_00))
{
return 0;
}
if(level.teambased && isdefined(param_00.var_2C43) && isdefined(param_00.team) && param_00.team == self.team)
{
return 0;
}
if(!self [[ level.var_2D9E["crate_in_range"] ]](param_00))
{
return 0;
}
if(isdefined(param_00.var_2F33))
{
if(isdefined(level.var_2F30[param_00.var_2F33]) && ![[ level.var_2F30[param_00.var_2F33].var_3936 ]]())
{
return 0;
}
if(isdefined(param_00.var_55BC) && isdefined(param_00.var_55BC[self getentitynumber()]) && param_00.var_55BC[self getentitynumber()])
{
return 0;
}
if(!self [[ level.var_2D27[param_00.var_2F33] ]](param_00))
{
return 0;
}
}
return isdefined(param_00);
}
//Function Number: 67
func_483D(param_00)
{
if(!func_483A(param_00))
{
return 0;
}
if(!func_483C(param_00))
{
return 0;
}
return isdefined(param_00);
}
//Function Number: 68
func_483A(param_00)
{
if(isdefined(param_00.var_2F33))
{
return gettime() > param_00.var_64 + 1000;
}
return isdefined(param_00.var_5D44) && !param_00.var_5D44;
}
//Function Number: 69
func_483C(param_00)
{
if(!isdefined(param_00.on_path_grid))
{
func_482F(param_00);
}
return isdefined(param_00) && param_00.on_path_grid;
}
//Function Number: 70
func_C042(param_00,param_01)
{
if(isdefined(param_01.var_2F33) && param_01.var_2F33 == "scavenger_bag")
{
return abs(param_00.origin[0] - param_01.origin[0]) < 36 && abs(param_00.origin[0] - param_01.origin[0]) < 36 && abs(param_00.origin[0] - param_01.origin[0]) < 18;
}
var_02 = getdvarfloat("player_useRadius");
var_03 = distancesquared(param_01.origin,param_00.origin + (0,0,40));
return var_03 <= var_02 * var_02;
}
//Function Number: 71
func_482F(param_00)
{
param_00 thread func_483F();
param_00.on_path_grid = 0;
var_01 = undefined;
var_02 = undefined;
if(isdefined(param_00.var_72B6))
{
var_01 = param_00.var_72B6;
var_02 = gettime() + 30000;
param_00.var_72B6 = var_02;
param_00 notify("path_disconnect");
}
wait(0.05);
if(!isdefined(param_00))
{
return;
}
var_03 = func_4839(param_00);
if(!isdefined(param_00))
{
return;
}
if(isdefined(var_03) && var_03.size > 0)
{
param_00.var_BE7E = var_03;
param_00.on_path_grid = 1;
}
else
{
var_04 = getdvarfloat("player_useRadius");
var_05 = getnodesinradiussorted(param_00.origin,var_04 * 2,0)[0];
var_06 = param_00 method_8159(0,0,-1);
var_07 = undefined;
if(isdefined(param_00.var_2F33) && param_00.var_2F33 == "scavenger_bag")
{
if(scripts\mp\bots\_bots_util::func_2E4E(param_00.origin))
{
var_07 = param_00.origin;
}
}
else
{
var_07 = function_0022(param_00.origin,var_04);
}
if(isdefined(var_05) && !var_05 method_821B() && isdefined(var_07) && abs(var_05.origin[2] - var_06[2]) < 30)
{
param_00.var_BE80 = [var_07];
param_00.var_BE7E = [var_05];
param_00.on_path_grid = 1;
}
}
if(isdefined(param_00.var_72B6))
{
if(param_00.var_72B6 == var_02)
{
param_00.var_72B6 = var_01;
}
}
}
//Function Number: 72
func_4839(param_00)
{
var_01 = getnodesinradiussorted(param_00.origin,256,0);
for(var_02 = var_01.size;var_02 > 0;var_02--)
{
var_01[var_02] = var_01[var_02 - 1];
}
var_01[0] = getclosestnodeinsight(param_00.origin);
var_03 = undefined;
if(isdefined(param_00.var_72B6))
{
var_03 = function_0076();
}
var_04 = [];
var_05 = 1;
if(!isdefined(param_00.var_2F33))
{
var_05 = 2;
}
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_06 = var_01[var_02];
if(!isdefined(var_06) || !isdefined(param_00))
{
continue;
}
if(var_06 method_821B())
{
continue;
}
if(!func_C042(var_06,param_00))
{
if(var_02 == 0)
{
continue;
}
else
{
break;
}
}
wait(0.05);
if(!isdefined(param_00))
{
break;
}
if(sighttracepassed(param_00.origin,var_06.origin + (0,0,55),0,param_00))
{
wait(0.05);
if(!isdefined(param_00))
{
break;
}
if(!isdefined(param_00.var_72B6))
{
var_04[var_04.size] = var_06;
if(var_04.size == var_05)
{
return var_04;
}
else
{
continue;
}
}
var_07 = undefined;
var_08 = 0;
while(!isdefined(var_07) && var_08 < 100)
{
var_08++;
var_09 = scripts\common\utility::random(var_03);
if(distancesquared(var_06.origin,var_09.origin) > 250000)
{
var_07 = var_09;
}
}
if(isdefined(var_07))
{
var_0A = scripts\mp\bots\_bots_util::func_2E58("GetNodesOnPathCrate",::scripts\mp\bots\_bots_util::func_74C8,var_06.origin,var_07.origin);
if(isdefined(var_0A))
{
var_04[var_04.size] = var_06;
if(var_04.size == var_05)
{
return var_04;
}
else
{
continue;
}
}
}
}
}
return undefined;
}
//Function Number: 73
func_4837(param_00)
{
if(isdefined(param_00.var_BE80))
{
return param_00.var_BE80[0];
}
if(isdefined(param_00.var_BE7E))
{
if(param_00.var_BE7E.size > 1)
{
var_01 = scripts\common\utility::func_22BD(self method_8045(param_00.var_BE7E,"node_exposed"));
return scripts\common\utility::func_DCA4(var_01).origin;
}
else
{
return var_01.var_BE7E[0].origin;
}
}
}
//Function Number: 74
func_4838(param_00,param_01)
{
var_02 = func_4837(param_00);
var_02 = getclosestpointonnavmesh(var_02,self);
var_03 = param_01 * 0.9;
var_03 = var_03 * var_03;
if(distancesquared(param_00.origin,var_02) <= var_03)
{
return var_02;
}
return undefined;
}
//Function Number: 75
func_2EAF()
{
self notify("bot_think_crate");
self endon("bot_think_crate");
self endon("death");
self endon("disconnect");
level endon("game_ended");
var_00 = getdvarfloat("player_useRadius");
for(;;)
{
var_01 = randomfloatrange(2,4);
scripts\common\utility::waittill_notify_or_timeout("new_crate_to_take",var_01);
if(isdefined(self.var_2F2B) && self.var_2F2B.size == 0)
{
self.var_2F2B = undefined;
}
var_02 = level.var_3A59;
if(!scripts\mp\bots\_bots_util::func_2DCA() && isdefined(self.var_2F2B))
{
var_02 = scripts\common\utility::array_combine(var_02,self.var_2F2B);
}
if(isdefined(level.var_2E6A) && scripts\mp\_utility::_hasperk("specialty_scavenger"))
{
var_02 = scripts\common\utility::array_combine(var_02,level.var_2E6A);
}
var_02 = scripts\common\utility::func_22BC(var_02);
if(var_02.size == 0)
{
continue;
}
if(scripts\mp\bots\_bots_strategy::func_2DC5("airdrop_crate") || self botgetscriptgoaltype() == "tactical" || scripts\mp\bots\_bots_util::func_2DE0())
{
continue;
}
var_03 = [];
foreach(var_05 in var_02)
{
if(func_2D45(var_05))
{
var_03[var_03.size] = var_05;
}
}
var_03 = scripts\common\utility::func_22AF(var_03);
if(var_03.size == 0)
{
continue;
}
var_03 = scripts\common\utility::func_782F(self.origin,var_03);
var_07 = self getnearestnode();
if(!isdefined(var_07))
{
continue;
}
var_08 = self [[ level.var_2D9E["crate_low_ammo_check"] ]]();
var_09 = (var_08 || randomint(100) < 50) && !scripts\mp\killstreaks\_emp_common::isemped();
var_0A = undefined;
foreach(var_05 in var_03)
{
var_0C = 0;
if((!isdefined(var_05.var_222) || var_05.var_222 != self) && !isdefined(var_05.var_2F33))
{
var_0D = [];
foreach(var_0F in level.players)
{
if(!isdefined(var_0F.team))
{
continue;
}
if(!isai(var_0F) && level.teambased && var_0F.team == self.team)
{
if(distancesquared(var_0F.origin,var_05.origin) < 490000)
{
var_0D[var_0D.size] = var_0F;
}
}
}
if(var_0D.size > 0)
{
var_11 = var_0D[0] getnearestnode();
if(isdefined(var_11))
{
var_0C = 0;
foreach(var_13 in var_05.var_BE7E)
{
var_0C = var_0C | nodesvisible(var_11,var_13,1);
}
}
}
}
if(!var_0C)
{
var_15 = isdefined(var_05.var_2EEB) && isdefined(var_05.var_2EEB[self.team]) && var_05.var_2EEB[self.team] > 0;
var_16 = 0;
foreach(var_13 in var_05.var_BE7E)
{
var_16 = var_16 | nodesvisible(var_07,var_13,1);
}
if(var_16 || var_09 && !var_15)
{
var_0A = var_05;
break;
}
}
}
if(isdefined(var_0A))
{
if(self [[ level.var_2D9E["crate_should_claim"] ]]())
{
if(!isdefined(var_0A.var_2F33))
{
if(!isdefined(var_0A.var_2EEB))
{
var_0A.var_2EEB = [];
}
var_0A.var_2EEB[self.team] = 1;
}
}
var_1A = spawnstruct();
var_1A.var_C270 = var_0A;
var_1A.var_10D46 = ::func_1392B;
var_1A.var_FF0D = ::func_4841;
var_1B = undefined;
if(isdefined(var_0A.var_2F33))
{
if(isdefined(var_0A.var_2F32) && var_0A.var_2F32)
{
var_1A.var_EDC9 = 16;
var_1A.var_157C = undefined;
var_1B = var_0A.origin;
}
else
{
var_1A.var_EDC9 = 50;
var_1A.var_157C = ::func_12FAF;
var_1C = func_4838(var_0A,var_00);
if(!isdefined(var_1C))
{
continue;
}
var_1C = var_1C - var_0A.origin;
var_1D = length(var_1C) * randomfloat(1);
var_1B = var_0A.origin + vectornormalize(var_1C) * var_1D + (0,0,12);
}
}
else
{
var_1A.var_157C = ::func_12FBF;
var_1A.var_6302 = ::func_11052;
var_1B = func_4838(var_0A,var_00);
if(!isdefined(var_1B))
{
continue;
}
var_1A.var_EDC9 = var_00 - distance(var_0A.origin,var_1B + (0,0,40));
var_1B = var_1B + (0,0,24);
}
if(isdefined(var_1A.var_EDC9))
{
}
var_0A notify("path_disconnect");
wait(0.05);
if(!isdefined(var_0A))
{
continue;
}
scripts\mp\bots\_bots_strategy::func_2E27("airdrop_crate",var_1B,30,var_1A);
}
}
}
//Function Number: 76
func_2E93(param_00)
{
return 1;
}
//Function Number: 77
func_484B()
{
return 1;
}
//Function Number: 78
func_483E()
{
return 0;
}
//Function Number: 79
func_2E92(param_00)
{
if(self getcurrentweapon() == level.var_2F30[param_00.var_2F33].var_B7A8)
{
return 0;
}
return 1;
}
//Function Number: 80
func_2E54(param_00)
{
scripts\mp\_utility::_switchtoweapon(self.var_F0C4);
wait(1);
}
//Function Number: 81
func_2E51(param_00)
{
scripts\mp\_utility::_switchtoweapon("none");
self.var_F0C4 = self getcurrentweapon();
}
//Function Number: 82
func_2E96(param_00)
{
if(scripts\mp\bots\_bots_util::func_2DB0(0.66))
{
var_01 = self getnearestnode();
if(isdefined(param_00.var_BE7E) && isdefined(param_00.var_BE7E[0]) && isdefined(var_01))
{
if(nodesvisible(var_01,param_00.var_BE7E[0],1))
{
if(scripts\common\utility::func_13D90(self.origin,self.angles,param_00.origin,self botgetfovdot()))
{
return 1;
}
}
}
}
return 0;
}
//Function Number: 83
func_2E94(param_00)
{
var_01 = self getweaponslistoffhands();
foreach(var_03 in var_01)
{
if(self getweaponammostock(var_03) == 0)
{
return 1;
}
}
return 0;
}
//Function Number: 84
func_2E95(param_00)
{
return 1;
}
//Function Number: 85
func_483F()
{
self notify("crate_monitor_position");
self endon("crate_monitor_position");
self endon("death");
level endon("game_ended");
for(;;)
{
var_00 = self.origin;
wait(0.5);
if(!isalive(self))
{
return;
}
if(!scripts\mp\bots\_bots_util::func_2EC6(self.origin,var_00))
{
self.on_path_grid = undefined;
self.var_BE7E = undefined;
self.var_BE80 = undefined;
}
}
}
//Function Number: 86
func_484D()
{
}
//Function Number: 87
func_4841(param_00)
{
if(!isdefined(param_00.var_C270))
{
return 1;
}
return 0;
}
//Function Number: 88
func_12FBF(param_00)
{
if(isagent(self))
{
scripts\common\utility::func_1C6E(1);
param_00.var_C270 enableplayeruse(self);
wait(0.05);
}
self [[ level.var_2D9E["crate_wait_use"] ]]();
if(isdefined(param_00.var_C270.var_222) && param_00.var_C270.var_222 == self)
{
var_01 = level.var_485C / 1000 + 0.5;
}
else
{
var_01 = level.var_4859 / 1000 + 1;
}
self botpressbutton("use",var_01);
wait(var_01);
if(isagent(self))
{
scripts\common\utility::func_1C6E(0);
if(isdefined(param_00.var_C270))
{
param_00.var_C270 disableplayeruse(self);
}
}
if(isdefined(param_00.var_C270))
{
if(!isdefined(param_00.var_C270.var_2EFA))
{
param_00.var_C270.var_2EFA = [];
}
param_00.var_C270.var_2EFA[param_00.var_C270.var_2EFA.size] = self;
}
}
//Function Number: 89
func_12FAF(param_00)
{
if(isagent(self))
{
scripts\common\utility::func_1C6E(1);
param_00.var_C270 enableplayeruse(self);
wait(0.05);
}
if(isdefined(param_00.var_C270) && isdefined(param_00.var_C270.var_2F33))
{
var_01 = param_00.var_C270.var_2F33;
if(isdefined(level.var_2E55[var_01]))
{
self [[ level.var_2E55[var_01] ]](param_00.var_C270);
}
if(isdefined(param_00.var_C270))
{
var_02 = level.var_2F30[param_00.var_C270.var_2F33].var_130EE / 1000 + 0.5;
self botpressbutton("use",var_02);
wait(var_02);
if(isdefined(level.var_2E52[var_01]))
{
self [[ level.var_2E52[var_01] ]](param_00.var_C270);
}
}
}
if(isagent(self))
{
scripts\common\utility::func_1C6E(0);
if(isdefined(param_00.var_C270))
{
param_00.var_C270 disableplayeruse(self);
}
}
}
//Function Number: 90
func_1392B(param_00)
{
thread func_2ED0(param_00.var_C270);
}
//Function Number: 91
func_11052(param_00)
{
if(isdefined(param_00.var_C270))
{
param_00.var_C270.var_2EEB[self.team] = 0;
}
}
//Function Number: 92
func_2ED0(param_00)
{
param_00 endon("death");
param_00 endon("revived");
param_00 endon("disconnect");
level endon("game_ended");
var_01 = self.team;
scripts\common\utility::waittill_any_3("death","disconnect");
if(isdefined(param_00))
{
param_00.var_2EEB[var_01] = 0;
}
}
//Function Number: 93
func_2EB0()
{
self notify("bot_think_crate_blocking_path");
self endon("bot_think_crate_blocking_path");
self endon("death");
self endon("disconnect");
level endon("game_ended");
var_00 = getdvarfloat("player_useRadius");
for(;;)
{
wait(3);
if(self usebuttonpressed())
{
continue;
}
if(scripts\mp\_utility::func_9FC6())
{
continue;
}
var_01 = level.var_3A59;
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = var_01[var_02];
if(!isdefined(var_03))
{
continue;
}
if(distancesquared(self.origin,var_03.origin) < var_00 * var_00)
{
if(var_03.var_222 == self)
{
self botpressbutton("use",level.var_485C / 1000 + 0.5);
continue;
}
self botpressbutton("use",level.var_4859 / 1000 + 0.5);
}
}
}
}
//Function Number: 94
func_2EB5()
{
self notify("bot_think_revive");
self endon("bot_think_revive");
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(!level.teambased)
{
return;
}
for(;;)
{
var_00 = 2;
var_01 = getentarray("revive_trigger","targetname");
if(var_01.size > 0)
{
var_00 = 0.05;
}
level scripts\common\utility::waittill_notify_or_timeout("player_last_stand",var_00);
if(!func_2D23())
{
continue;
}
var_01 = getentarray("revive_trigger","targetname");
if(var_01.size > 1)
{
var_01 = sortbydistance(var_01,self.origin);
if(isdefined(self.var_222))
{
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
if(var_01[var_02].var_222 != self.var_222)
{
continue;
}
if(var_02 == 0)
{
break;
}
var_03 = var_01[var_02];
var_01[var_02] = var_01[0];
var_01[0] = var_03;
break;
}
}
}
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_04 = var_01[var_02];
var_05 = var_04.var_222;
if(!isdefined(var_05))
{
continue;
}
if(var_05 == self)
{
continue;
}
if(!isalive(var_05))
{
continue;
}
if(var_05.team != self.team)
{
continue;
}
if(!isdefined(var_05.inlaststand) || !var_05.inlaststand)
{
continue;
}
if(isdefined(var_05.var_2EEB) && isdefined(var_05.var_2EEB[self.team]) && var_05.var_2EEB[self.team] > 0)
{
continue;
}
if(distancesquared(self.origin,var_05.origin) < 4194304)
{
var_06 = spawnstruct();
var_06.var_C270 = var_04;
var_06.var_EDC9 = 64;
if(isdefined(self.var_A8FB) && gettime() - self.var_A8FB < 1000)
{
var_06.var_EDC9 = 32;
}
var_06.var_10D46 = ::func_1392C;
var_06.var_6302 = ::func_11039;
var_06.var_FF0D = ::func_D261;
var_06.var_157C = ::func_E4A0;
scripts\mp\bots\_bots_strategy::func_2E27("revive",var_05.origin,60,var_06);
break;
}
}
}
}
//Function Number: 95
func_1392C(param_00)
{
thread func_2ED0(param_00.var_C270.var_222);
}
//Function Number: 96
func_11039(param_00)
{
if(isdefined(param_00.var_C270.var_222))
{
param_00.var_C270.var_222.var_2EEB[self.team] = 0;
}
}
//Function Number: 97
func_D261(param_00)
{
if(!isdefined(param_00.var_C270.var_222) || param_00.var_C270.var_222.health <= 0)
{
return 1;
}
if(!isdefined(param_00.var_C270.var_222.inlaststand) || !param_00.var_C270.var_222.inlaststand)
{
return 1;
}
return 0;
}
//Function Number: 98
func_E4A0(param_00)
{
if(distancesquared(self.origin,param_00.var_C270.var_222.origin) > 4096)
{
self.var_A8FB = gettime();
return;
}
if(isagent(self))
{
scripts\common\utility::func_1C6E(1);
param_00.var_C270 enableplayeruse(self);
wait(0.05);
}
var_01 = self.team;
self botpressbutton("use",level.var_AA15 / 1000 + 0.5);
wait(level.var_AA15 / 1000 + 1.5);
if(isdefined(param_00.var_C270.var_222))
{
param_00.var_C270.var_2EEB[var_01] = 0;
}
if(isagent(self))
{
scripts\common\utility::func_1C6E(0);
if(isdefined(param_00.var_C270))
{
param_00.var_C270 disableplayeruse(self);
}
}
}
//Function Number: 99
func_2D23()
{
if(isdefined(self.var_1B3) && self.var_1B3 == 1)
{
return 0;
}
if(scripts\mp\bots\_bots_strategy::func_2DC5("revive"))
{
return 0;
}
if(scripts\mp\bots\_bots_util::func_2DE0())
{
return 0;
}
if(scripts\mp\bots\_bots_util::func_2DD4())
{
return 1;
}
var_00 = self botgetscriptgoaltype();
if(var_00 == "none" || var_00 == "hunt" || var_00 == "guard")
{
return 1;
}
return 0;
}
//Function Number: 100
func_E4A7(param_00)
{
self endon("death");
self endon("disconnect");
self endon("bad_path");
self endon("goal");
param_00 scripts\common\utility::waittill_any_3("death","revived");
self notify("bad_path");
}
//Function Number: 101
func_2DF8()
{
self endon("death");
self endon("disconnect");
level endon("game_ended");
if(gettime() > 15000)
{
return;
}
while(!scripts\mp\_utility::func_7672() || !scripts\mp\_utility::func_766C("prematch_done"))
{
wait(0.05);
}
var_00 = undefined;
var_01 = undefined;
for(var_02 = 0;var_02 < level.players.size;var_02++)
{
var_03 = level.players[var_02];
if(isdefined(var_03) && isdefined(self.team) && isdefined(var_03.team) && function_0106(self.team,var_03.team))
{
if(!isdefined(var_03.var_2EA2))
{
var_00 = var_03;
}
if(isai(var_03) && !isdefined(var_03.var_2EA1))
{
var_01 = var_03;
}
}
}
if(isdefined(var_00))
{
self.var_2EA1 = 1;
var_00.var_2EA2 = 1;
self getenemyinfo(var_00);
}
if(isdefined(var_01))
{
var_01.var_2EA1 = 1;
self.var_2EA2 = 1;
var_01 getenemyinfo(self);
}
}
//Function Number: 102
func_2E16(param_00,param_01)
{
if(isdefined(param_01))
{
return self method_81F1(param_00,param_01);
}
return self method_81F1(param_00);
}
//Function Number: 103
func_2EB1()
{
self notify("bot_think_gametype");
self endon("bot_think_gametype");
self endon("death");
self endon("disconnect");
level endon("game_ended");
scripts\mp\_utility::func_7670("prematch_done");
self thread [[ level.var_2D9E["gametype_think"] ]]();
}
//Function Number: 104
func_4FF3()
{
}
//Function Number: 105
func_B9A3()
{
for(;;)
{
level waittill("smoke",var_00,var_01);
if(var_01 == "smoke_grenade_mp")
{
var_00 thread func_B9A2();
}
}
}
//Function Number: 106
func_B9A2()
{
self endon("late_death");
thread func_1036D();
self waittill("explode",var_00);
wait(1);
var_01 = spawn("script_model",var_00);
var_01 show();
var_02 = getent("smoke_grenade_sight_clip_256","targetname");
if(isdefined(var_02))
{
var_01 clonebrushmodeltoscriptmodel(var_02);
}
wait(9.25);
var_01 delete();
}
//Function Number: 107
func_1036D()
{
self endon("explode");
self waittill("death");
waittillframeend;
self notify("late_death");
}
//Function Number: 108
func_2D04(param_00)
{
var_01 = 0;
param_00.var_2F33 = "scavenger_bag";
param_00.var_2F32 = 1;
if(!isdefined(level.var_2E6A))
{
level.var_2E6A = [];
}
foreach(var_04, var_03 in level.var_2E6A)
{
if(!isdefined(var_03))
{
var_01 = 1;
level.var_2E6A[var_04] = param_00;
break;
}
}
if(!var_01)
{
level.var_2E6A[level.var_2E6A.size] = param_00;
}
foreach(var_06 in level.var_C928)
{
if(isai(var_06) && var_06 scripts\mp\_utility::_hasperk("specialty_scavenger"))
{
var_06 notify("new_crate_to_take");
}
}
}
//Function Number: 109
func_2EBB()
{
var_00 = getentarray("bot_flag_set","targetname");
foreach(var_02 in var_00)
{
if(!isdefined(var_02.script_noteworthy))
{
continue;
}
var_02 thread func_2D94(var_02.script_noteworthy);
}
}
//Function Number: 110
func_2D94(param_00)
{
self endon("death");
for(;;)
{
self waittill("trigger",var_01);
if(scripts\mp\_utility::func_9D2D(var_01))
{
var_01 notify("flag_trigger_set_" + param_00);
var_01 botsetflag(param_00,1);
var_01 thread func_2D95(param_00);
}
}
}
//Function Number: 111
func_2D95(param_00)
{
self endon("flag_trigger_set_" + param_00);
self endon("death");
self endon("disconnect");
level endon("game_ended");
scripts\common\utility::func_136F7();
waittillframeend;
self botsetflag(param_00,0);
}