Files

447 lines
14 KiB
Lua

COOP_LEVELS = {
"bk_coop_simulation_00",
"coop_bb_deathstar_escape",
"coop_meows_lockdown_v_2",
"coop_mission_rehan_v3",
"coop_ventilation",
"js_coop_lj10_v2",
"js_coop_module700_ttc_b3",
"js_coop_p2_waterworks_ob",
"level09_choose_your_destiny_a1",
"lw_lambdaware_b4",
"syn_deadsimple",
"Poison_Coop_RE1_Beta1",
"oc_systems2B-2",
"oc_systems2B-1",
"mph_twilight1_bb_fix",
"level03_underground_1f5",
"js_coop_sewers_vv5",
"js_coop_minimall_p7",
"js_coop_coast_x1",
"coop_z_harrier2",
"coop_d3_c17_10a_10b_jedi2e",
"coop_bb_tombs_v1",
"js_coop_tbr_[a1]_ttc_v6b",
"js_coop_tbr_[a1]_ttc_v7a",
"x_coop_kanny_lockdown_reloaded",
"x_coop_minimall_reloaded_v5",
"tbr_coop_skyscrapers_v4",
"x_coop_space",
"x_coop_helicave",
"x_coop_citadel",
"x_coop_minimall",
"tbr_coop_thousand_antlions_v3b",
"tbr_coop_red_keops_v4",
"tbr_coop_red_keops_v2",
"ta_coop_the_pitts_v2a",
"ta_coop_the_edge_v4",
"ta_coop_the_edge_v2",
"ta_coop_run_for_your_life_v1",
"ta_coop_run_for_your_life_0",
"ta_coop_phrenetic_escape_v3",
"ta_coop_phrenetic_escape_0",
"ta_coop_last_man_standing_v5",
"ta_coop_last_man_standing_v2",
"ta_coop_last_man_standing_0",
"syn_lvcoop_part2",
"syn_lvcoop_part1",
"sg_coop_steamlab_b5",
"sg_coop_steamlab_b4",
"sg_coop_steamlab_b1",
"sg_coop_runoff_zb",
"sg_coop_runoff_zb2",
"sg_coop_resistance_b2",
"sg_coop_resistance_b1",
"sg_coop_overwatch_b4",
"sg_coop_overwatch_b3",
"sg_coop_overwatch_b1",
"sg_coop_lockdown_b3",
"scary_united_coop",
"scary_gmod_coop_x",
"poison_coop_re1_beta1",
"oblivion_coop_v1",
"mp_coop_fan_p2port",
"mp_coop_fan_p2port_fawosfix",
"mm_coop_underpass_v2",
"js_x_coop_stargate",
"js_lm_coop_underground_v4b",
"js_coop_zero_g_oc4",
"js_coop_waterworks_ttc_v4",
"js_coop_waterworks_ttc_v3",
"js_coop_vtol_x_v5",
"js_coop_underground_x_v3",
"js_coop_ultraviolet_v6b",
"js_coop_ttc_tbr_p1",
"js_coop_train_station_v1",
"js_coop_train_reloaded",
"js_coop_train_reloaded_2a",
"js_coop_train_reloada",
"js_coop_thunder",
"js_coop_thunder_b4",
"js_coop_thunder_b3a",
"js_coop_thunder_b2",
"js_coop_teleport_v9fix",
"js_coop_teleport_sg_zb",
"js_coop_teleport_sg_zb3",
"js_coop_team_v3",
"js_coop_team_ttc_b1",
"js_coop_tbr_cave_v7a",
"js_coop_tbr_cave_v5_!",
"js_coop_subway_x_v6",
"js_coop_subway_fixed",
"js_coop_space_x_v2",
"js_coop_space_station_v2a",
"js_coop_space_fixed",
"js_coop_sky_chase_tbr_v3",
"js_coop_siege_v4",
"js_coop_shore",
"js_coop_sewers_v5",
"js_coop_sewers_v3",
"js_coop_savescientist_v5a",
"js_coop_save_scientist_v4",
"js_coop_save_scientist_v3b",
"js_coop_savescientist_ob1",
"js_coop_save_dog_v4b",
"js_coop_save_dog_tbr_v5",
"js_coop_save_dog_tbr_v3",
"js_coop_rocks_v8",
"js_coop_rm_powerworks_2020_v2",
"js_coop_ravenholm_x_bb",
"js_coop_ravenholm_x2",
"js_coop_quest_vv9",
"js_coop_quest_v9",
"js_coop_quest",
"js_coop_powerworks_v2",
"js_coop_powercrysis_v3_b",
"js_coop_part3_waterworks_v2",
"js_coop_part2_waterworks_v3",
"js_coop_part2_powerworks_v1a",
"js_coop_nation_v1",
"js_coop_monsterkill_v2b",
"js_coop_monsterkill_reload_b",
"js_coop_missiontwo_v1f",
"js_coop_minimall_fixed",
"js_coop_mesa_v3",
"js_coop_lvls_tbr_combine_v1",
"js_coop_lockdown_x_v7",
"js_coop_lockdown_tbr_v3",
"js_coop_lk8",
"js_coop_lj9",
"js_coop_lh5_windows",
"js_coop_lh5",
"js_coop_levels_tbr_rock_v27",
"js_coop_levelcube_ttc_a",
"js_coop_level8_x_v1",
"js_coop_level5_x_v1",
"js_coop_lc3_nuke_m",
"js_coop_lc3",
"js_coop_la4",
"js_coop_killer_lost_v16",
"js_coop_killer_lost_final_d1",
"js_coop_horror_v13",
"js_coop_horror_v12",
"js_coop_helicave_x_v2",
"js_coop_hanhack_vv6",
"js_coop_hacktown_v3",
"js_coop_hacktown_v1",
"js_coop_gnarkill_puzzlev3",
"js_coop_gethev_v1a",
"js_coop_docks_x_v4",
"js_coop_docks2_vv3",
"js_coop_deep_v12",
"js_coop_deep6_x_v4",
"js_coop_dasole_x_v2",
"js_coop_dasole_ttc_b1",
"js_coop_dasole2_v7",
"js_coop_dasole2_ttc_b1",
"js_coop_cubix_v1",
"js_coop_cranecase_x_v4",
"js_coop_cranecase_p1",
"js_coop_combine_reload_b",
"js_coop_combine2_ttc_p5",
"js_coop_combine2_sg_b4",
"js_coop_combine2_sg_b3",
"js_coop_coast_x_v5",
"js_coop_citadel_v14fixx",
"js_coop_citadel_blast_v5",
"js_coop_church_ttc_ob",
"js_coop_cavettc_ob",
"js_coop_bugbait_v3",
"js_coop_bridgewar_v6",
"js_coop_blueberry_ob_p7",
"js_coop_basemission_beta",
"js_coop_antlionrun_v4",
"js_coop_airboats_v5",
"js_coop_acc_v6",
"js_coop_2fort_teleport_p1",
"js_coop_2fort_b11_teleport_x3",
"js_coop_2011_savedog_v2",
"jr_coop_undergroundescape_v1",
"gm_escape_coop_part_01",
"eye_coop8",
"dm_rebledefence_coop",
"dm_coop_perverslabyrinthe",
"dm_chickencoop_v2",
"csv_coop_evac_5_credits",
"csv_coop_darkbonus",
"coop_zombiescity",
"coop_zombie_map",
"coop_zombie_invasion_10_r1",
"coop_zelda01_b",
"coop_warpath_v1",
"coop_war_of_the_worlds_1ve",
"coop_wardogs_v5",
"coop_wardogs_v4",
"coop_venture_v1c",
"coop_venture_rc4",
"coop_uprising_c",
"coop_unnormal",
"coop_unnamed_1",
"coop_underground_win",
"coop_traps_v1c",
"coop_trainstation_02_1cube",
"coop_train_escape_z1",
"coop_train_02_1cube",
"coop_town_level4d",
"coop_town_level3a",
"coop_town_level2a",
"coop_town_level1",
"coop_tim-3",
"coop_thunder",
"coop_the_pitts_pr2",
"coop_the_pitts_fix",
"coop_the_escape_part4_beta4",
"coop_the_escape_part3_beta5",
"coop_the_escape_part2_beta6",
"coop_the_escape_part1_beta19",
"coop_the_edge_r1",
"coop_swampthing_v6",
"coop_striders_revenge_2b",
"coop_stargate",
"coop_sd_zombie-city_b1",
"coop_run_for_your_life",
"coop_run_for_your_life_0",
"coop_rocks_v11",
"coop_resistance_part1_v1c",
"coop_resident_evil_sg_zb4",
"coop_redqueen_zba_z3",
"coop_rebel_incursion5",
"coop_rebel_escape_r1",
"coop_ravenholm_2a_cube",
"coopqwest_one_jr",
"coop_port_sg_zb",
"coop_planet_ant",
"coop_other_in_blackmesa_hl2",
"coop_other_city17_outland_ep2",
"coop_other_city17",
"coop_other_city17_ep1",
"coop_other_city17_antarctic_ep3",
"coop_nvc_citadel_escape",
"coop_npcwar_v6",
"coop_npcwar_v6_aldo",
"coop_npcwar_final",
"coop_npcwar3_v6",
"coop_npcwar3_final",
"coop_npcwar3_aldo",
"coop_npcwar2_final",
"coop_npcwar2_aldo",
"coop_mw_revenge_ttc_v1",
"coop_monster",
"coop_missile_silo_bb3",
"coop_missile_silo206",
"coop_miniflatgrass",
"coop_militia_sg_zb",
"coop_metamorphics_egypt_level1",
"coop_meows_winter_wonderland",
"coop_meows_tower_of_babel_v_4",
"coop_meows_tower_of_babel_v_3",
"coop_meows_symphony_eight_v_4",
"coop_meows_stairway_hell_v_2",
"coop_meows_stairway_hell_v_1",
"coop_meows_sewer_mania_v_5",
"coop_meows_sewer_mania_v4",
"coop_meows_runoff_winter_v7",
"coop_meows_runoff_winter_v5",
"coop_meows_runoff_ver_1",
"coop_meows_runoff_v_4",
"coop_meows_runoff_v_3",
"coop_meows_runoff_v_2",
"coop_meows_round_robin_v9",
"coop_meows_round_robin_fixed",
"coop_meows_revenge_v_3",
"coop_meows_pyramid_v1",
"coop_meows_pyramid_pr1",
"coop_meows_pitifull",
"coop_meows_new_tricks_v_7a",
"coop_meows_new_tricks_v_6",
"coop_meows_lockdown_v_3",
"coop_meows_lockdown_v1d",
"coop_meows_kill_em_all_ver2",
"coop_meows_kill_em_all_v_4",
"coop_meows_island_defence_v_1",
"coop_meows_island_defence",
"coop_meows_icey_topsy_turvey",
"coop_meows_house_to_house_z1",
"coop_meows_house_to_house",
"coop_meows_house_to_house1",
"coop_meows_fun_day_out_z1",
"coop_meows_corridoors_v_6",
"coop_meows_corridoors_v_5",
"coop_meows_corridoors_r1",
"coop_manticore",
"coop_manticore_bb",
"coop_lockdown_b2",
"coop_linux_zombie_2b",
"coop_linux_ravenholm_1g",
"coop_level_9a",
"coop_level_7b",
"coop_level_6d",
"coop_level_5b",
"coop_level_4a",
"coop_level_1",
"coop_level_1b_cube",
"coop_level07_scary_house_v4",
"coop_level07_scary_house_fix2",
"coop_level06_base",
"coop_level02_traps_v1c",
"coop_level01_dooms_entry_v1b",
"coop_last_man_standing_v2",
"coop_ktz-treehouse",
"coop_ktz-hell",
"coop_kinyoenta_vz_g",
"coop_killbox_1",
"coop_great_evil",
"coop_fog_lab",
"coop_fog_city",
"coop_fleeravenholm_part1",
"coop_fleeravenholm",
"coop_fire_pit_finalv2",
"coop_ffgs_powerhouse",
"coop_evacuationbm",
"coop_evac_5_credits",
"coop_evac_4",
"coop_evac_3",
"coop_evac_2",
"coop_evac_1",
"coop_epicycle_v4",
"coop_ep1_level4_remote_2b",
"coop_ep1_level3_remote_2a",
"coop_ep1_level3_remote_1e",
"coop_ep1_level2_remote_1c",
"coop_ep1_level2_jedi_1l",
"coop_ep1_level1_remote_2a",
"coop_dtm_c2e1_v1b209",
"coop_dooms_entry_v1b",
"coop_dogs_revenge_1b",
"coop_dogs_rampage_2b",
"coop_dog_1d_cube",
"coop_defensegarage_v2",
"coop_darkmesa",
"coop_darkbonus",
"coop_dark17",
"coop_danmaku_i",
"coop_d3_c17_15_d_2y",
"coop_coopbox_v2",
"coop_combat17",
"coop_coast_01_1k_cube",
"coop_city_c17_level3_jedi_1b",
"coop_city_c17_level3_jedi_1a",
"coop_city_17_level5_jedi_1b",
"coop_city_17_level5_jedi_1a",
"coop_city_17_level4_jedi_1h",
"coop_city_17_level1_jedi_1a",
"coop_city_17_jedi_2f",
"coop_citadel_level1_2i",
"coop_citadel_escape_v7",
"coop_citadel_escape_v5",
"coop_citadel_escape_v2fix",
"coop_citadel_escape_p6",
"coop_citadel_chapter12_1f",
"coop_citadel_2_1a_cube",
"coop_cc_nochance_v1b60",
"coop_canalsv4",
"coop_canalsv10",
"coop_canals_f4",
"coop_canals_f3",
"coop_burlybrawl_bb",
"coop_bunker_buddies",
"coop_breen_1d_cube",
"coop_breen_01_jedi_5e",
"coop_blueberry_oblivion_x1",
"coop_blueberry",
"coop_blame!_log2_v2",
"coop_blame!_log2_v1",
"coop_blame!_log1_v2",
"coop_blame_log1_v1",
"coop_blame!_log1_v1",
"coop_blame!_log1_v1a",
"coop_blackmesa_combat",
"coop_bb_xtotalcontrol",
"coop_bb_xtotalcontrol_d",
"coop_bb_level_2_b6",
"coop_bb_level_1",
"coop_atlantis_beta04",
"coop_a_place_to_die_jbrfix_final_v1",
"coop_a_place_to_die_jbrfixed2i",
"coop_ant_tower_b1_3",
"coop_across_the_darkness3a",
"coop_abducted_4",
"coop_abducted_3",
"coop_abducted_2",
"coop_abducted_1",
"coop9_oblivion_blueberry_x3",
"coop6_180_blueberry",
"coop4_ob_gunzfly_p5",
"coop4_ob_gunzfly_p4",
"coop3_oblivion_lockdown_x1",
"coop_123module_v2",
"coop_123module_bb2",
"cl_coop_venture_up",
"cl_coop_quest_v5",
"cl_coop_level3_topside_b2",
"cl_coop_level2_survive_r1",
"cl_coop_level2_survive",
"cl_coop_level1_escape_r1",
"cl_coop_level1_escape",
"cl_coop_laserquest_b2",
"cl_coop_doors_v4",
"cl_coop_doors",
"cl_coop_corridor_b3",
"cl_coop_cages",
"cl_coop_breakable",
"cl_coop_breakable_b2",
"ad_coop_mara_final"
}
function GetInstalledCoopLevels()
local installedMaps = {}
local availableLevels = {}
for _, fileName in ipairs(file.Find("maps/*.bsp", "GAME")) do
installedMaps[string.lower(string.StripExtension(fileName))] = true
end
for _, levelName in ipairs(COOP_LEVELS) do
local normalizedName = string.lower(levelName)
if installedMaps[normalizedName] and not table.HasValue(availableLevels, normalizedName) then
table.insert(availableLevels, normalizedName)
end
end
return availableLevels
end
function GetRandomLevel(excludeLevel)
local candidates = {}
local excluded = string.lower(excludeLevel or game.GetMap() or "")
for _, levelName in ipairs(GetInstalledCoopLevels()) do
if levelName ~= excluded then
table.insert(candidates, levelName)
end
end
if #candidates == 0 then return nil end
return candidates[math.random(#candidates)]
end