/******************************************************************* * Decompiled By: Bog * Decompiled File: maps\mp\bots\_bots_loadout.gsc * Game: Call of Duty: Ghosts * Platform: PC * Function Count: 41 * Decompile Time: 797 ms * Timestamp: 10/27/2023 1:17:36 AM *******************************************************************/ //Function Number: 1 func_44DF() { func_45BB(); func_4526(); func_4583(); func_451E(); init_bot_attachmenttable(); init_bot_camotable(); level.bot_loadouts_initialized = 1; } //Function Number: 2 func_4526() { var_00 = "mp/botClassTable.csv"; level.botloadoutsets = []; var_01 = bot_loadout_fields(); var_02 = 0; for(;;) { var_02++; var_03 = tablelookup(var_00,0,"botPersonalities",var_02); var_04 = tablelookup(var_00,0,"botDifficulties",var_02); if(!isdefined(var_03) || var_03 == "") { break; } if(!isdefined(var_04) || var_04 == "") { break; } var_05 = []; foreach(var_07 in var_01) { var_05[var_07] = tablelookup(var_00,0,var_07,var_02); } var_09 = strtok(var_03,"| "); var_0A = strtok(var_04,"| "); foreach(var_0C in var_09) { foreach(var_0E in var_0A) { var_0F = bot_loadout_set(var_0C,var_0E,1); var_10 = spawnstruct(); var_10.loadoutvalues = var_05; var_0F.loadouts[var_0F.loadouts.size] = var_10; } } } } //Function Number: 3 func_45BB() { var_00 = "mp/botTemplateTable.csv"; level.botloadouttemplates = []; var_01 = bot_loadout_fields(); var_02 = 0; for(;;) { var_02++; var_03 = tablelookup(var_00,0,"template_",var_02); if(!isdefined(var_03) || var_03 == "") { break; } var_04 = "template_" + var_03; level.botloadouttemplates[var_04] = []; foreach(var_06 in var_01) { var_07 = tablelookup(var_00,0,var_06,var_02); if(isdefined(var_07) && var_07 != "") { level.botloadouttemplates[var_04][var_06] = var_07; } } } } //Function Number: 4 func_8FFE(param_00,param_01,param_02) { if(!isusingmatchrulesdata()) { return 1; } if(!getmatchrulesdata("commonOption","allowCustomClasses")) { return 1; } if(param_01 == "specialty_null") { return 1; } if(param_01 == "none") { return 1; } if(param_00 == "equipment") { if(getmatchrulesdata("commonOption","perkRestricted",param_01)) { return 0; } param_00 = "weapon"; } var_03 = param_00 + "Restricted"; var_04 = param_00 + "ClassRestricted"; var_05 = ""; switch(param_00) { case "weapon": var_05 = maps\mp\_utility::getweaponclass(param_01); break; case "attachment": var_05 = maps\mp\_utility::getattachmenttype(param_01); break; case "killstreak": var_05 = param_02; break; case "perk": var_05 = "ability_" + level.bot_perktypes[param_01]; break; default: return 0; } if(getmatchrulesdata("commonOption",var_03,param_01)) { return 0; } if(getmatchrulesdata("commonOption",var_04,var_05)) { return 0; } return 1; } //Function Number: 5 func_8FFD(param_00) { var_01 = "none"; var_02 = ["veteran","hardened","regular","recruit"]; var_02 = common_scripts\utility::array_randomize(var_02); foreach(var_04 in var_02) { var_01 = func_1623("weap_statstable",param_00,"loadoutPrimary",self.personality,var_04); if(var_01 != "none") { return var_01; } } if(isdefined(level.bot_personality_list)) { var_06 = common_scripts\utility::array_randomize(level.bot_personality_list); foreach(var_08 in var_06) { foreach(var_04 in var_02) { var_01 = func_1623("weap_statstable",param_00,"loadoutPrimary",var_08,var_04); if(var_01 != "none") { self.bot_fallback_personality = var_08; return var_01; } } } } if(isusingmatchrulesdata()) { for(var_0C = 0;var_0C < 6 && !isdefined(var_01) || var_01 == "none" || var_01 == "";var_0C++) { if(getmatchrulesdata("defaultClasses",self.team,var_0C,"class","inUse")) { var_01 = getmatchrulesdata("defaultClasses",self.team,var_0C,"class","weaponSetups",0,"weapon"); if(var_01 != "none") { self.bot_fallback_personality = "weapon"; return var_01; } } } } self.bot_fallback_personality = "weapon"; return level.bot_fallback_weapon; } //Function Number: 6 func_9005(param_00) { if(isdefined(param_00)) { var_01 = level.bot_weap_personality[param_00]; if(isdefined(var_01)) { var_02 = strtok(var_01,"| "); if(var_02.size > 0) { maps/mp/bots/_bots_util::bot_set_personality(common_scripts\utility::func_6306(var_02)); } } } } //Function Number: 7 bot_loadout_fields() { var_00 = []; var_00[var_00.size] = "loadoutPrimary"; var_00[var_00.size] = "loadoutPrimaryBuff"; var_00[var_00.size] = "loadoutPrimaryAttachment"; var_00[var_00.size] = "loadoutPrimaryAttachment2"; var_00[var_00.size] = "loadoutPrimaryCamo"; var_00[var_00.size] = "loadoutPrimaryReticle"; var_00[var_00.size] = "loadoutSecondary"; var_00[var_00.size] = "loadoutSecondaryBuff"; var_00[var_00.size] = "loadoutSecondaryAttachment"; var_00[var_00.size] = "loadoutSecondaryAttachment2"; var_00[var_00.size] = "loadoutSecondaryCamo"; var_00[var_00.size] = "loadoutSecondaryReticle"; var_00[var_00.size] = "loadoutEquipment"; var_00[var_00.size] = "loadoutOffhand"; var_00[var_00.size] = "loadoutStreakType"; var_00[var_00.size] = "loadoutStreak1"; var_00[var_00.size] = "loadoutStreak2"; var_00[var_00.size] = "loadoutStreak3"; var_00[var_00.size] = "loadoutPerk1"; var_00[var_00.size] = "loadoutPerk2"; var_00[var_00.size] = "loadoutPerk3"; var_00[var_00.size] = "loadoutPerk4"; var_00[var_00.size] = "loadoutPerk5"; var_00[var_00.size] = "loadoutPerk6"; var_00[var_00.size] = "loadoutPerk7"; var_00[var_00.size] = "loadoutPerk8"; var_00[var_00.size] = "loadoutPerk9"; var_00[var_00.size] = "loadoutPerk10"; var_00[var_00.size] = "loadoutPerk11"; var_00[var_00.size] = "loadoutPerk12"; var_00[var_00.size] = "loadoutPerk13"; var_00[var_00.size] = "loadoutPerk14"; var_00[var_00.size] = "loadoutPerk15"; var_00[var_00.size] = "loadoutPerk16"; var_00[var_00.size] = "loadoutPerk17"; var_00[var_00.size] = "loadoutPerk18"; var_00[var_00.size] = "loadoutPerk19"; var_00[var_00.size] = "loadoutPerk20"; var_00[var_00.size] = "loadoutPerk21"; var_00[var_00.size] = "loadoutPerk22"; var_00[var_00.size] = "loadoutPerk23"; return var_00; } //Function Number: 8 bot_loadout_set(param_00,param_01,param_02) { var_03 = param_01 + "_" + param_00; if(!isdefined(level.botloadoutsets)) { level.botloadoutsets = []; } if(!isdefined(level.botloadoutsets[var_03]) && param_02) { level.botloadoutsets[var_03] = spawnstruct(); level.botloadoutsets[var_03].loadouts = []; } if(isdefined(level.botloadoutsets[var_03])) { return level.botloadoutsets[var_03]; } } //Function Number: 9 bot_loadout_pick(param_00,param_01) { var_02 = bot_loadout_set(param_00,param_01,0); if(isdefined(var_02) && isdefined(var_02.loadouts) && var_02.loadouts.size > 0) { var_03 = randomint(var_02.loadouts.size); return var_02.loadouts[var_03].loadoutvalues; } } //Function Number: 10 bot_validate_weapon(param_00,param_01,param_02,param_03) { var_04 = maps\mp\_utility::func_3C6F(param_00); if(isdefined(param_01) && param_01 != "none" && !func_8FFE("attachment",param_01)) { return 0; } if(isdefined(param_02) && param_02 != "none" && !func_8FFE("attachment",param_02)) { return 0; } if(isdefined(param_03) && param_03 != "none" && !func_8FFE("attachment",param_03)) { return 0; } if(param_01 != "none" && !common_scripts\utility::array_contains(var_04,param_01)) { return 0; } if(param_02 != "none" && !common_scripts\utility::array_contains(var_04,param_02)) { return 0; } if(isdefined(param_03) && param_03 != "none" && !common_scripts\utility::array_contains(var_04,param_03)) { return 0; } if((param_01 == "none" || param_02 == "none") && !isdefined(param_03) || param_03 == "none") { return 1; } if(!isdefined(level.bot_invalid_attachment_combos)) { level.bot_invalid_attachment_combos = []; level.allowable_double_attachments = []; var_05 = "mp/attachmentcombos.csv"; var_06 = 0; for(;;) { var_06++; var_07 = tablelookupbyrow(var_05,0,var_06); if(var_07 == "") { break; } var_08 = 0; for(;;) { var_08++; var_09 = tablelookupbyrow(var_05,var_08,0); if(var_09 == "") { break; } if(var_09 == var_07) { if(tablelookupbyrow(var_05,var_08,var_06) != "no") { level.allowable_double_attachments[var_09] = 1; } continue; } if(tablelookupbyrow(var_05,var_08,var_06) == "no") { level.bot_invalid_attachment_combos[var_07][var_09] = 1; } } } } if(param_01 == param_02 && !isdefined(level.allowable_double_attachments[param_01])) { return 0; } if(isdefined(param_03)) { if(param_02 == param_03 && !isdefined(level.allowable_double_attachments[param_02])) { return 0; } if(param_01 == param_03 && !isdefined(level.allowable_double_attachments[param_01])) { return 0; } if(param_03 != "none" && param_01 == param_03 && param_02 == param_03) { return 0; } if(isdefined(level.bot_invalid_attachment_combos[param_02]) && isdefined(level.bot_invalid_attachment_combos[param_02][param_03])) { return 0; } if(isdefined(level.bot_invalid_attachment_combos[param_01]) && isdefined(level.bot_invalid_attachment_combos[param_01][param_03])) { return 0; } } return !isdefined(level.bot_invalid_attachment_combos[param_01]) && isdefined(level.bot_invalid_attachment_combos[param_01][param_02]); } //Function Number: 11 bot_validate_reticle(param_00,param_01,param_02) { if(isdefined(param_01[param_00 + "Attachment"]) && isdefined(level.bot_attachment_reticle[param_01[param_00 + "Attachment"]])) { return 1; } if(isdefined(param_01[param_00 + "Attachment2"]) && isdefined(level.bot_attachment_reticle[param_01[param_00 + "Attachment2"]])) { return 1; } if(isdefined(param_01[param_00 + "Attachment3"]) && isdefined(level.bot_attachment_reticle[param_01[param_00 + "Attachment3"]])) { return 1; } return 0; } //Function Number: 12 bot_perk_cost(param_00) { return level.perktable_costs[param_00]; } //Function Number: 13 func_5BA1(param_00,param_01) { if(bot_perk_cost(param_00) > 0) { var_02 = []; var_02["type"] = param_01; var_02["name"] = param_00; level.bot_perktable[level.bot_perktable.size] = var_02; level.bot_perktypes[param_00] = param_01; } } //Function Number: 14 func_4583() { level.perktable_costs = []; var_00 = 1; for(;;) { var_01 = tablelookupbyrow("mp/perktable.csv",var_00,1); if(var_01 == "") { break; } level.perktable_costs[var_01] = int(tablelookupbyrow("mp/perktable.csv",var_00,10)); var_00++; } level.perktable_costs["none"] = 0; level.perktable_costs["specialty_null"] = 0; level.bot_perktable = []; level.bot_perktypes = []; var_00 = 1; var_02 = "ability_null"; while(isdefined(var_02) && var_02 != "") { var_02 = getsubstr(var_02,8); for(var_03 = 4;var_03 <= 13;var_03++) { var_01 = tablelookupbyrow("mp/cacabilitytable.csv",var_00,var_03); if(var_01 != "") { func_5BA1(var_01,var_02); } } var_00++; var_02 = tablelookupbyrow("mp/cacabilitytable.csv",var_00,1); } } //Function Number: 15 func_451E() { var_00 = "mp/statstable.csv"; var_01 = 4; var_02 = 37; var_03 = 38; level.bot_weap_statstable = []; level.bot_weap_personality = []; var_04 = 1; for(;;) { var_05 = tablelookupbyrow(var_00,var_04,var_01); if(var_05 == "specialty_null") { break; } var_06 = tablelookupbyrow(var_00,var_04,var_03); var_07 = tablelookupbyrow(var_00,var_04,var_02); if(var_05 != "" && var_07 != "") { level.bot_weap_personality[var_05] = var_07; } if(var_06 != "" && var_05 != "" && var_07 != "") { var_08 = "loadoutPrimary"; if(maps\mp\gametypes\_class::isvalidsecondary(var_05,0)) { var_08 = "loadoutSecondary"; } else if(!maps\mp\gametypes\_class::func_49A6(var_05,0)) { var_04++; continue; } if(!isdefined(level.bot_weap_statstable[var_08])) { level.bot_weap_statstable[var_08] = []; } var_09 = strtok(var_07,"| "); var_0A = strtok(var_06,"| "); foreach(var_0C in var_09) { if(!isdefined(level.bot_weap_statstable[var_08][var_0C])) { level.bot_weap_statstable[var_08][var_0C] = []; } foreach(var_0E in var_0A) { if(!isdefined(level.bot_weap_statstable[var_08][var_0C][var_0E])) { level.bot_weap_statstable[var_08][var_0C][var_0E] = []; } var_0F = level.bot_weap_statstable[var_08][var_0C][var_0E].size; level.bot_weap_statstable[var_08][var_0C][var_0E][var_0F] = var_05; } } } var_04++; } } //Function Number: 16 func_1623(param_00,param_01,param_02,param_03,param_04) { var_05 = "specialty_null"; if(param_02 == "loadoutPrimary") { var_05 = "iw6_honeybadger"; } else if(param_02 == "loadoutSecondary") { var_05 = "iw6_p226"; } if(param_03 == "default") { param_03 = "run_and_gun"; } if(param_02 == "loadoutSecondary" && common_scripts\utility::array_contains(param_01,"specialty_twoprimaries")) { param_02 = "loadoutPrimary"; } if(!isdefined(level.bot_weap_statstable)) { return var_05; } if(!isdefined(level.bot_weap_statstable[param_02])) { return var_05; } if(!isdefined(level.bot_weap_statstable[param_02][param_03])) { return var_05; } if(!isdefined(level.bot_weap_statstable[param_02][param_03][param_04])) { return var_05; } var_05 = bot_loadout_choose_from_set(level.bot_weap_statstable[param_02][param_03][param_04],param_00,param_01,param_02); return var_05; } //Function Number: 17 bot_loadout_choose_from_perktable(param_00,param_01,param_02,param_03,param_04,param_05) { var_06 = "specialty_null"; if(!isdefined(level.bot_perktable)) { return var_06; } if(!isdefined(level.bot_perktable_groups)) { level.bot_perktable_groups = []; } if(!isdefined(level.bot_perktable_groups[param_00])) { var_07 = strtok(param_00,"_"); var_07[0] = ""; var_08 = 0; if(common_scripts\utility::array_contains(var_07,"any")) { var_08 = 1; } var_09 = []; foreach(var_0B in level.bot_perktable) { if(var_08 || common_scripts\utility::array_contains(var_07,var_0B["type"])) { var_09[var_09.size] = var_0B["name"]; } } level.bot_perktable_groups[param_00] = var_09; } if(level.bot_perktable_groups[param_00].size > 0) { var_06 = bot_loadout_choose_from_set(level.bot_perktable_groups[param_00],param_01,param_02,param_03); } return var_06; } //Function Number: 18 bot_validate_perk(param_00,param_01,param_02,param_03,param_04,param_05) { var_06 = param_04 - param_03 + 1; if(isdefined(param_05)) { var_06 = param_05; } var_07 = 0; var_08 = int(getsubstr(param_01,11)); if(param_00 == "specialty_twoprimaries") { return 0; } if(param_00 == "specialty_extra_attachment") { return 0; } if(!func_8FFE("perk",param_00)) { return 0; } for(var_09 = var_08 - 1;var_09 > 0;var_09--) { var_0A = "loadoutPerk" + var_09; if(param_02[var_0A] == "none" || param_02[var_0A] == "specialty_null") { continue; } if(param_00 == param_02[var_0A]) { return 0; } if(var_09 >= param_03 && var_09 <= param_04) { var_07 = var_07 + bot_perk_cost(param_02[var_0A]); } } if(var_07 + bot_perk_cost(param_00) > var_06) { return 0; } return 1; } //Function Number: 19 func_1620(param_00,param_01,param_02,param_03,param_04,param_05) { var_06 = int(getsubstr(param_00,5,6)) - 1; switch(param_03) { case "loadoutPrimary": return maps\mp\gametypes\_class::func_7E4F(level.classtablename,var_06,0); case "loadoutPrimaryAttachment": return maps\mp\gametypes\_class::func_7E50(level.classtablename,var_06,0,0); case "loadoutPrimaryAttachment2": return maps\mp\gametypes\_class::func_7E50(level.classtablename,var_06,0,1); case "loadoutPrimaryBuff": return maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_06,0); case "loadoutPrimaryCamo": return maps\mp\gametypes\_class::func_7E52(level.classtablename,var_06,0); case "loadoutPrimaryReticle": return maps\mp\gametypes\_class::table_getweaponreticle(level.classtablename,var_06,0); case "loadoutSecondary": return maps\mp\gametypes\_class::func_7E4F(level.classtablename,var_06,1); case "loadoutSecondaryAttachment": return maps\mp\gametypes\_class::func_7E50(level.classtablename,var_06,1,0); case "loadoutSecondaryAttachment2": return maps\mp\gametypes\_class::func_7E50(level.classtablename,var_06,1,1); case "loadoutSecondaryBuff": return maps\mp\gametypes\_class::table_getweaponbuff(level.classtablename,var_06,1); case "loadoutSecondaryCamo": return maps\mp\gametypes\_class::func_7E52(level.classtablename,var_06,1); case "loadoutSecondaryReticle": return maps\mp\gametypes\_class::table_getweaponreticle(level.classtablename,var_06,1); case "loadoutEquipment": return maps\mp\gametypes\_class::func_7E4A(level.classtablename,var_06,0); case "loadoutOffhand": return maps\mp\gametypes\_class::func_7E4C(level.classtablename,var_06,0); case "loadoutStreak1": return maps\mp\gametypes\_class::func_7E4B(level.classtablename,var_06,0); case "loadoutStreak2": return maps\mp\gametypes\_class::func_7E4B(level.classtablename,var_06,1); case "loadoutStreak3": return maps\mp\gametypes\_class::func_7E4B(level.classtablename,var_06,2); case "loadoutPerk6": case "loadoutPerk5": case "loadoutPerk4": case "loadoutPerk3": case "loadoutPerk2": case "loadoutPerk1": var_07 = int(getsubstr(param_03,11)); var_08 = maps\mp\gametypes\_class::func_7E4D(level.classtablename,var_06,var_07); if(var_08 == "") { return "specialty_null"; } var_09 = int(getsubstr(var_08,0,1)); var_0A = int(getsubstr(var_08,1,2)); var_0B = tablelookupbyrow("mp/cacabilitytable.csv",var_09 + 1,var_0A + 3); return var_0B; } return param_05; } //Function Number: 20 init_bot_attachmenttable() { var_00 = "mp/attachmenttable.csv"; var_01 = 5; var_02 = 19; var_03 = 11; level.bot_attachmenttable = []; level.bot_attachment_reticle = []; var_04 = 1; for(;;) { var_05 = tablelookupbyrow(var_00,var_04,var_01); if(var_05 == "done") { break; } var_06 = tablelookupbyrow(var_00,var_04,var_02); if(var_05 != "" && var_06 != "") { var_07 = tablelookupbyrow(var_00,var_04,var_03); if(var_07 == "TRUE") { level.bot_attachment_reticle[var_05] = 1; } var_08 = strtok(var_06,"| "); foreach(var_0A in var_08) { if(!isdefined(level.bot_attachmenttable[var_0A])) { level.bot_attachmenttable[var_0A] = []; } if(!common_scripts\utility::array_contains(level.bot_attachmenttable[var_0A],var_05)) { var_0B = level.bot_attachmenttable[var_0A].size; level.bot_attachmenttable[var_0A][var_0B] = var_05; } } } var_04++; } } //Function Number: 21 bot_loadout_choose_from_attachmenttable(param_00,param_01,param_02,param_03,param_04) { var_05 = "none"; if(!isdefined(level.bot_attachmenttable)) { return var_05; } if(!isdefined(level.bot_attachmenttable[param_04])) { return var_05; } var_05 = bot_loadout_choose_from_set(level.bot_attachmenttable[param_04],param_00,param_01,param_02); return var_05; } //Function Number: 22 init_bot_camotable() { var_00 = "mp/camotable.csv"; var_01 = 1; var_02 = 5; level.bot_camotable = []; var_03 = 0; for(;;) { var_04 = tablelookupbyrow(var_00,var_03,var_01); if(!isdefined(var_04) || var_04 == "") { break; } var_05 = tablelookupbyrow(var_00,var_03,var_02); if(isdefined(var_05) && int(var_05)) { level.bot_camotable[level.bot_camotable.size] = var_04; } var_03++; } } //Function Number: 23 bot_loadout_choose_from_camotable(param_00,param_01,param_02,param_03,param_04) { var_05 = "none"; if(!isdefined(level.bot_camotable)) { return var_05; } var_05 = bot_loadout_choose_from_set(level.bot_camotable,param_00,param_01,param_02); return var_05; } //Function Number: 24 func_1628(param_00) { var_01 = 8; if(isdefined(param_00["loadoutPrimary"]) && param_00["loadoutPrimary"] == "none") { var_01 = var_01 + 1; } if(isdefined(param_00["loadoutSecondary"]) && param_00["loadoutSecondary"] == "none") { var_01 = var_01 + 1; } if(isdefined(param_00["loadoutEquipment"]) && param_00["loadoutEquipment"] == "none") { var_01 = var_01 + 1; } if(isdefined(param_00["loadoutOffhand"]) && param_00["loadoutOffhand"] == "none") { var_01 = var_01 + 1; } return var_01; } //Function Number: 25 bot_loadout_valid_choice(param_00,param_01,param_02,param_03) { var_04 = 1; switch(param_02) { case "loadoutPrimary": var_04 = func_8FFE("weapon",param_03); break; case "loadoutOffhand": case "loadoutEquipment": var_04 = func_8FFE("equipment",param_03); break; case "loadoutPrimaryBuff": var_04 = maps\mp\gametypes\_class::func_49AE(param_03,param_01["loadoutPrimary"]); break; case "loadoutPrimaryAttachment": var_04 = bot_validate_weapon(param_01["loadoutPrimary"],param_03,"none"); break; case "loadoutPrimaryAttachment2": var_04 = bot_validate_weapon(param_01["loadoutPrimary"],param_01["loadoutPrimaryAttachment"],param_03); break; case "loadoutPrimaryAttachment3": var_04 = bot_validate_weapon(param_01["loadoutPrimary"],param_01["loadoutPrimaryAttachment"],param_01["loadoutPrimaryAttachment2"],param_03); break; case "loadoutPrimaryReticle": var_04 = bot_validate_reticle("loadoutPrimary",param_01,param_03); break; case "loadoutPrimaryCamo": var_04 = !isdefined(self.botloadoutfavoritecamo) || param_03 == self.botloadoutfavoritecamo; break; case "loadoutSecondary": var_04 = param_03 != param_01["loadoutPrimary"]; var_04 = var_04 && func_8FFE("weapon",param_03); break; case "loadoutSecondaryBuff": var_04 = maps\mp\gametypes\_class::func_49AE(param_03,param_01["loadoutSecondary"]); break; case "loadoutSecondaryAttachment": var_04 = bot_validate_weapon(param_01["loadoutSecondary"],param_03,"none"); break; case "loadoutSecondaryAttachment2": var_04 = bot_validate_weapon(param_01["loadoutSecondary"],param_01["loadoutSecondaryAttachment"],param_03); break; case "loadoutSecondaryAttachment3": var_04 = bot_validate_weapon(param_01["loadoutSecondary"],param_01["loadoutSecondaryAttachment"],param_01["loadoutSecondaryAttachment2"],param_03); break; case "loadoutSecondaryReticle": var_04 = bot_validate_reticle("loadoutSecondary",param_01,param_03); break; case "loadoutSecondaryCamo": var_04 = !isdefined(self.botloadoutfavoritecamo) || param_03 == self.botloadoutfavoritecamo; break; case "loadoutStreak3": case "loadoutStreak2": case "loadoutStreak1": var_04 = maps/mp/bots/_bots_ks::bot_killstreak_is_valid_internal(param_03,"bots",undefined,param_01["loadoutStreakType"]); var_04 = var_04 && func_8FFE("killstreak",param_03,param_01["loadoutStreakType"]); break; case "loadoutPerk12": case "loadoutPerk11": case "loadoutPerk10": case "loadoutPerk9": case "loadoutPerk8": case "loadoutPerk7": case "loadoutPerk6": case "loadoutPerk5": case "loadoutPerk4": case "loadoutPerk3": case "loadoutPerk2": case "loadoutPerk1": var_04 = bot_validate_perk(param_03,param_02,param_01,1,12,func_1628(param_01)); break; case "loadoutPerk15": case "loadoutPerk14": case "loadoutPerk13": if(param_01["loadoutStreakType"] != "streaktype_specialist") { var_04 = 0; } else { var_04 = bot_validate_perk(param_03,param_02,param_01,-1,-1); } break; case "loadoutPerk23": case "loadoutPerk22": case "loadoutPerk21": case "loadoutPerk20": case "loadoutPerk19": case "loadoutPerk18": case "loadoutPerk17": case "loadoutPerk16": if(param_01["loadoutStreakType"] != "streaktype_specialist") { var_04 = 0; } else { var_04 = bot_validate_perk(param_03,param_02,param_01,16,23,8); } break; } return var_04; } //Function Number: 26 bot_loadout_choose_from_set(param_00,param_01,param_02,param_03,param_04) { var_05 = "none"; var_06 = undefined; var_07 = 0; if(common_scripts\utility::array_contains(param_00,"specialty_null")) { var_05 = "specialty_null"; } foreach(var_09 in param_00) { var_0A = undefined; if(getsubstr(var_09,0,9) == "template_") { var_0A = var_09; var_0B = level.botloadouttemplates[var_09][param_03]; var_09 = bot_loadout_choose_from_set(strtok(var_0B,"| "),param_01,param_02,param_03,1); if(isdefined(var_0A) && isdefined(self.chosentemplates[var_0A])) { return var_09; } } if(var_09 == "attachmenttable") { return bot_loadout_choose_from_attachmenttable(param_01,param_02,param_03,self.personality,self.difficulty); } if(var_09 == "weap_statstable") { return func_1623(param_01,param_02,param_03,self.personality,self.difficulty); } if(var_09 == "camotable") { return bot_loadout_choose_from_camotable(param_01,param_02,param_03,self.personality,self.difficulty); } if(getsubstr(var_09,0,5) == "class" && int(getsubstr(var_09,5,6)) > 0) { var_09 = func_1620(var_09,param_01,param_02,param_03,self.personality,self.difficulty); } if(isdefined(level.bot_perktable) && getsubstr(var_09,0,10) == "perktable_") { return bot_loadout_choose_from_perktable(var_09,param_01,param_02,param_03,self.personality,self.difficulty); } if(bot_loadout_valid_choice(param_01,param_02,param_03,var_09)) { var_07 = var_07 + 1; if(randomfloat(1) <= 1 / var_07) { var_05 = var_09; var_06 = var_0A; } } } if(isdefined(var_06)) { self.chosentemplates[var_06] = 1; } return var_05; } //Function Number: 27 func_1624(param_00) { self.chosentemplates = []; foreach(var_06, var_02 in param_00) { var_03 = strtok(var_02,"| "); var_04 = bot_loadout_choose_from_set(var_03,var_02,param_00,var_06); param_00[var_06] = var_04; } return param_00; } //Function Number: 28 func_161E(param_00) { var_01 = "recruit"; for(var_02 = 18;var_02 >= 0;var_02--) { var_03 = int(tablelookupbyrow("mp/squadEloTable.csv",var_02,0)); if(param_00 >= var_03 || var_02 == 0) { return tablelookupbyrow("mp/squadEloTable.csv",var_02,self.pers["squadSlot"] + 1); } } return var_01; } //Function Number: 29 bot_loadout_get_difficulty() { var_00 = "regular"; if(getdvar("squad_match") == "1") { var_00 = func_161E(getsquadassaultelo()); } else { var_00 = self botgetdifficulty(); if(var_00 == "default") { maps/mp/bots/_bots_util::bot_set_difficulty("default"); var_00 = self botgetdifficulty(); } } return var_00; } //Function Number: 30 func_1625() { while(!isdefined(level.bot_loadouts_initialized)) { wait(0.05); } while(!isdefined(self.personality)) { wait(0.05); } var_00 = []; var_01 = bot_loadout_get_difficulty(); self.difficulty = var_01; var_02 = self botgetpersonality(); if(getdvar("squad_match") == "1") { var_00 = bot_loadout_setup_squad_match(var_00); var_02 = self botgetpersonality(); } else if(getdvar("squad_vs_squad") == "1") { var_00 = func_8FFF(var_00); var_02 = self botgetpersonality(); } else if(getdvar("squad_use_hosts_squad") == "1" && level.wargame_client.team == self.team) { var_00 = func_9000(var_00); var_02 = self botgetpersonality(); } else { if(isdefined(self.botlastloadout)) { var_03 = self.botlastloadoutdifficulty == var_01; var_04 = self.botlastloadoutpersonality == var_02; if(var_03 && var_04 && !isdefined(self.hasdied) || self.hasdied && !isdefined(self.respawn_with_launcher)) { return self.botlastloadout; } } var_00 = bot_loadout_pick(var_02,var_01); var_00 = func_1624(var_00); if(isdefined(level.bot_funcs["gametype_loadout_modify"])) { var_00 = self [[ level.bot_funcs["gametype_loadout_modify"] ]](var_00); } if(var_00["loadoutPrimary"] == "none") { self.bot_fallback_personality = undefined; var_00["loadoutPrimary"] = func_8FFD(var_00); var_00["loadoutPrimaryCamo"] = "none"; var_00["loadoutPrimaryAttachment"] = "none"; var_00["loadoutPrimaryAttachment2"] = "none"; var_00["loadoutPrimaryAttachment3"] = "none"; var_00["loadoutPrimaryReticle"] = "none"; if(isdefined(self.bot_fallback_personality)) { if(self.bot_fallback_personality == "weapon") { func_9005(var_00["loadoutPrimary"]); } else { maps/mp/bots/_bots_util::bot_set_personality(self.bot_fallback_personality); } var_02 = self.personality; self.bot_fallback_personality = undefined; } } self.botlastloadout = var_00; self.botlastloadoutdifficulty = var_01; self.botlastloadoutpersonality = var_02; if(isdefined(var_00["loadoutPrimaryCamo"]) && var_00["loadoutPrimaryCamo"] != "none") { self.botloadoutfavoritecamo = var_00["loadoutPrimaryCamo"]; } if(isdefined(self.respawn_with_launcher)) { if(isdefined(level.bot_respawn_launcher_name) && func_8FFE("weapon",level.bot_respawn_launcher_name)) { var_00["loadoutSecondary"] = level.bot_respawn_launcher_name; var_00["loadoutSecondaryAttachment"] = "none"; var_00["loadoutSecondaryAttachment2"] = "none"; self.botlastloadout = undefined; } self.respawn_with_launcher = undefined; } } var_00 = bot_loadout_setup_perks(var_00); maps\mp\gametypes\_class::func_49A1(var_00["loadoutStreak1"]); maps\mp\gametypes\_class::func_49A1(var_00["loadoutStreak2"]); maps\mp\gametypes\_class::func_49A1(var_00["loadoutStreak3"]); if(maps\mp\_utility::func_8FFB()) { if(common_scripts\utility::array_contains(self.pers["loadoutPerks"],"specialty_twoprimaries")) { var_05 = bot_loadout_pick("cqb",var_01); var_00["loadoutSecondary"] = var_05["loadoutPrimary"]; var_00["loadoutSecondaryAttachment"] = var_05["loadoutPrimaryAttachment"]; var_00["loadoutSecondaryAttachment2"] = var_05["loadoutPrimaryAttachment2"]; var_00 = func_1624(var_00); var_00 = bot_loadout_setup_perks(var_00); } if(common_scripts\utility::array_contains(self.pers["loadoutPerks"],"specialty_extra_attachment")) { var_06 = bot_loadout_pick(var_02,var_01); var_00["loadoutPrimaryAttachment3"] = var_06["loadoutPrimaryAttachment2"]; if(common_scripts\utility::array_contains(self.pers["loadoutPerks"],"specialty_twoprimaries")) { var_00["loadoutSecondaryAttachment2"] = var_06["loadoutPrimaryAttachment2"]; } else { var_00["loadoutSecondaryAttachment2"] = var_06["loadoutSecondaryAttachment2"]; } var_00 = func_1624(var_00); var_00 = bot_loadout_setup_perks(var_00); } else { var_00["loadoutSecondaryAttachment2"] = "none"; if(!bot_validate_reticle("loadoutSecondary",var_00,var_00["loadoutSecondaryReticle"])) { var_00["loadoutSecondaryReticle"] = "none"; } } } return var_00; } //Function Number: 31 bot_loadout_setup_perks(param_00) { self.pers["loadoutPerks"] = []; self.pers["specialistBonusStreaks"] = []; self.pers["specialistStreaks"] = []; self.pers["specialistStreakKills"] = []; var_01 = 0; var_02 = isdefined(param_00["loadoutStreakType"]) && param_00["loadoutStreakType"] == "streaktype_specialist"; if(var_02) { param_00["loadoutStreak1"] = "none"; param_00["loadoutStreak2"] = "none"; param_00["loadoutStreak3"] = "none"; } foreach(var_08, var_04 in param_00) { if(var_04 == "specialty_null" || var_04 == "none") { continue; } if(getsubstr(var_08,0,11) == "loadoutPerk") { var_05 = int(getsubstr(var_08,11)); if(!var_02 && var_05 > 12) { continue; } var_06 = maps\mp\_utility::getbaseperkname(var_04); if(var_05 <= 12) { self.pers["loadoutPerks"][self.pers["loadoutPerks"].size] = var_06; } else if(var_05 <= 15) { param_00["loadoutStreak" + var_01 + 1] = var_06 + "_ks"; self.pers["specialistStreaks"][self.pers["specialistStreaks"].size] = var_06 + "_ks"; var_07 = 0; if(var_01 > 0) { var_07 = self.pers["specialistStreakKills"][self.pers["specialistStreakKills"].size - 1]; } self.pers["specialistStreakKills"][self.pers["specialistStreakKills"].size] = var_07 + bot_perk_cost(var_06) + 2; var_01++; } else { self.pers["specialistBonusStreaks"][self.pers["specialistBonusStreaks"].size] = var_06; } } } if(var_02 && !isdefined(self.pers["specialistStreakKills"][0])) { self.pers["specialistStreakKills"][0] = 0; self.pers["specialistStreaks"][0] = "specialty_null"; } if(var_02 && !isdefined(self.pers["specialistStreakKills"][1])) { self.pers["specialistStreakKills"][1] = self.pers["specialistStreakKills"][0]; self.pers["specialistStreaks"][1] = "specialty_null"; } if(var_02 && !isdefined(self.pers["specialistStreakKills"][2])) { self.pers["specialistStreakKills"][2] = self.pers["specialistStreakKills"][1]; self.pers["specialistStreaks"][2] = "specialty_null"; } return param_00; } //Function Number: 32 func_1691() { var_00 = self botgetpersonality(); var_01 = bot_loadout_get_difficulty(); var_02 = bot_loadout_set(var_00,var_01,0); if(isdefined(var_02) && isdefined(var_02.loadouts) && var_02.loadouts.size > 0) { self.classcallback = ::func_1625; return 1; } var_03 = getsubstr(self.name,0,self.name.size - 10); self.classcallback = undefined; return 0; } //Function Number: 33 func_169F(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { if(isdefined(param_06)) { return param_00 getprivateplayerdata("privateMatchSquadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05,param_06); } if(isdefined(param_05)) { return param_00 getprivateplayerdata("privateMatchSquadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05); } if(isdefined(param_04)) { return param_00 getprivateplayerdata("privateMatchSquadMembers",param_01,"loadouts",param_02,param_03,param_04); } return param_00 getprivateplayerdata("privateMatchSquadMembers",param_01,"loadouts",param_02,param_03); } //Function Number: 34 bot_squad_lookup_ranked(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { if(isdefined(param_06)) { return param_00 getrankedplayerdata("squadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05,param_06); } if(isdefined(param_05)) { return param_00 getrankedplayerdata("squadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05); } if(isdefined(param_04)) { return param_00 getrankedplayerdata("squadMembers",param_01,"loadouts",param_02,param_03,param_04); } return param_00 getrankedplayerdata("squadMembers",param_01,"loadouts",param_02,param_03); } //Function Number: 35 bot_squad_lookup_enemy(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { if(isdefined(param_06)) { return getenemysquaddata("squadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05,param_06); } if(isdefined(param_05)) { return getenemysquaddata("squadMembers",param_01,"loadouts",param_02,param_03,param_04,param_05); } if(isdefined(param_04)) { return getenemysquaddata("squadMembers",param_01,"loadouts",param_02,param_03,param_04); } return getenemysquaddata("squadMembers",param_01,"loadouts",param_02,param_03); } //Function Number: 36 bot_squad_lookup(param_00,param_01,param_02,param_03,param_04,param_05,param_06) { var_07 = ::bot_squad_lookup_ranked; if(getdvar("squad_match") == "1" && self.team == "axis") { var_07 = ::bot_squad_lookup_enemy; } else if(!maps\mp\_utility::func_50C1()) { var_07 = ::func_169F; } return self [[ var_07 ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06); } //Function Number: 37 bot_squadmember_lookup(param_00,param_01,param_02) { if(getdvar("squad_match") == "1" && self.team == "axis") { return getenemysquaddata("squadMembers",param_01,param_02); } if(!maps\mp\_utility::func_50C1()) { return param_00 getprivateplayerdata("privateMatchSquadMembers",param_01,param_02); } return param_00 getrankedplayerdata("squadMembers",param_01,param_02); } //Function Number: 38 bot_loadout_copy_from_client(param_00,param_01,param_02,param_03) { param_00["loadoutPrimary"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"weapon"); param_00["loadoutPrimaryAttachment"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"attachment",0); param_00["loadoutPrimaryAttachment2"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"attachment",1); param_00["loadoutPrimaryAttachment3"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"attachment",2); param_00["loadoutPrimaryBuff"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"buff"); param_00["loadoutPrimaryCamo"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"camo"); param_00["loadoutPrimaryReticle"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",0,"reticle"); param_00["loadoutSecondary"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"weapon"); param_00["loadoutSecondaryAttachment"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"attachment",0); param_00["loadoutSecondaryAttachment2"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"attachment",1); param_00["loadoutSecondaryBuff"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"buff"); param_00["loadoutSecondaryCamo"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"camo"); param_00["loadoutSecondaryReticle"] = bot_squad_lookup(param_01,param_02,param_03,"weaponSetups",1,"reticle"); param_00["loadoutEquipment"] = bot_squad_lookup(param_01,param_02,param_03,"perks",0); param_00["loadoutOffhand"] = bot_squad_lookup(param_01,param_02,param_03,"perks",1); param_00["loadoutStreak1"] = "none"; param_00["loadoutStreak2"] = "none"; param_00["loadoutStreak3"] = "none"; var_04 = bot_squad_lookup(param_01,param_02,param_03,"perks",5); if(isdefined(var_04)) { param_00["loadoutStreakType"] = var_04; if(var_04 == "streaktype_assault") { param_00["loadoutStreak1"] = bot_squad_lookup(param_01,param_02,param_03,"assaultStreaks",0); param_00["loadoutStreak2"] = bot_squad_lookup(param_01,param_02,param_03,"assaultStreaks",1); param_00["loadoutStreak3"] = bot_squad_lookup(param_01,param_02,param_03,"assaultStreaks",2); } else if(var_04 == "streaktype_support") { param_00["loadoutStreak1"] = bot_squad_lookup(param_01,param_02,param_03,"supportStreaks",0); param_00["loadoutStreak2"] = bot_squad_lookup(param_01,param_02,param_03,"supportStreaks",1); param_00["loadoutStreak3"] = bot_squad_lookup(param_01,param_02,param_03,"supportStreaks",2); } else if(var_04 == "streaktype_specialist") { param_00["loadoutPerk13"] = bot_squad_lookup(param_01,param_02,param_03,"specialistStreaks",0); param_00["loadoutPerk14"] = bot_squad_lookup(param_01,param_02,param_03,"specialistStreaks",1); param_00["loadoutPerk15"] = bot_squad_lookup(param_01,param_02,param_03,"specialistStreaks",2); } } var_05 = 1; var_06 = maps\mp\gametypes\_class::getnumabilitycategories(); var_07 = maps\mp\gametypes\_class::getnumsubability(); for(var_08 = 0;var_08 < var_06;var_08++) { for(var_09 = 0;var_09 < var_07;var_09++) { var_0A = bot_squad_lookup(param_01,param_02,param_03,"abilitiesPicked",var_08,var_09); if(isdefined(var_0A) && var_0A) { var_0B = tablelookup("mp/cacAbilityTable.csv",0,var_08 + 1,4 + var_09); param_00["loadoutPerk" + var_05] = var_0B; var_05++; continue; } param_00["loadoutPerk" + var_05] = "specialty_null"; } } var_05 = 16; for(var_08 = 0;var_08 < var_06;var_08++) { for(var_09 = 0;var_09 < var_07;var_09++) { var_0A = bot_squad_lookup(param_01,param_02,param_03,"specialistBonusStreaks",var_08,var_09); if(isdefined(var_0A) && var_0A) { var_0B = tablelookup("mp/cacAbilityTable.csv",0,var_08 + 1,4 + var_09); param_00["loadoutPerk" + var_05] = var_0B; var_05++; continue; } param_00["loadoutPerk" + var_05] = "specialty_null"; } } param_00["loadoutCharacterType"] = bot_squad_lookup(param_01,param_02,param_03,"type"); func_9005(param_00["loadoutPrimary"]); self.playercardpatch = bot_squadmember_lookup(param_01,param_02,"patch"); self.playercardbackground = bot_squadmember_lookup(param_01,param_02,"background"); if(getdvar("squad_match") == "1" && self.team == "axis") { self.squad_bot_dog_type = getenemysquaddogtype(); } else { self.squad_bot_dog_type = param_01 getcommonplayerdatareservedint("mp_dog_type"); } return param_00; } //Function Number: 39 bot_loadout_setup_squad_match(param_00) { var_01 = level.players[0]; foreach(var_03 in level.players) { if(!isai(var_03) && isplayer(var_03)) { var_01 = var_03; break; } } var_05 = self.pers["squadSlot"]; var_06 = bot_squadmember_lookup(var_01,var_05,"ai_loadout"); self.pers["rankxp"] = bot_squadmember_lookup(var_01,var_05,"squadMemXP"); if(self.team == "allies") { if(isdefined(var_01)) { var_07 = var_01 getrankedplayerdatareservedint("prestigeLevel"); self.pers["prestige_fake"] = var_07; } } else if(self.team == "axis") { self.pers["prestige_fake"] = getsquadassaultenemyprestige(); } param_00 = bot_loadout_copy_from_client(param_00,var_01,var_05,var_06); return param_00; } //Function Number: 40 func_8FFF(param_00) { var_01 = level.squad_vs_squad_allies_client; if(self.team == "axis") { var_01 = level.squad_vs_squad_axis_client; } var_02 = self.pers["squadSlot"]; var_03 = bot_squadmember_lookup(var_01,var_02,"ai_loadout"); self.pers["rankxp"] = bot_squadmember_lookup(var_01,var_02,"squadMemXP"); if(isdefined(var_01)) { var_04 = var_01 getrankedplayerdatareservedint("prestigeLevel"); self.pers["prestige_fake"] = var_04; } param_00 = bot_loadout_copy_from_client(param_00,var_01,var_02,var_03); return param_00; } //Function Number: 41 func_9000(param_00) { var_01 = level.wargame_client; var_02 = self.pers["squadSlot"]; var_03 = bot_squadmember_lookup(var_01,var_02,"ai_loadout"); self.pers["rankxp"] = bot_squadmember_lookup(var_01,var_02,"squadMemXP"); if(isdefined(var_01)) { var_04 = var_01 getrankedplayerdatareservedint("prestigeLevel"); self.pers["prestige_fake"] = var_04; } param_00 = bot_loadout_copy_from_client(param_00,var_01,var_02,var_03); return param_00; }