[SCRIPT] How to find new weapons/mods/masks
So I've seen several requests on how to find the new items that OVERKILL adds to the game. Here is a script with baselines set for the Halloween update (Update 16-FTS), by that I mean.. if you ran this script with the Halloween update, you would see no output because there is nothing new since then. However in the future, you can run this script with new updates and see new weapons/mods/masks in your 'Debug Console' or in iphlpapi.log.
When I ran this script with my baseline at Update 15, I saw the following:

So you can see that the weapon 'usp' was added for the Halloween update.
Enjoy & let me know if you have issues.
When I ran this script with my baseline at Update 15, I saw the following:

So you can see that the weapon 'usp' was added for the Halloween update.
Enjoy & let me know if you have issues.
Code:
function arrayIndexOf(arr, item)
for i,v in ipairs(arr) do
if v == item then return i end
end
return nil
end
-- Run at main menu to show new weapons
local wep_msg = false
local wep_arr = { 'usp', 'new_m4', 'glock_17', 'mp9', 'r870', 'glock_18c', 'amcar', 'm16', 'olympic', 'ak74', 'akm', 'akmsu', 'saiga', 'ak5', 'aug', 'g36', 'p90', 'new_m14', 'deagle', 'new_mp5', 'colt_1911', 'mac10', 'serbu', 'huntsman', 'b92fs', 'new_raging_bull', 'saw' }
for k,v in pairs(tweak_data.upgrades.definitions) do
if v.category == "weapon" and not arrayIndexOf(wep_arr, k) then
if not wep_msg then
wep_msg = true
io.stderr:write("\nNew weapon(s):\n")
end
io.stderr:write("weapon_id: " .. v.weapon_id .. ", factory_id: " .. v.factory_id .. "\n")
end
end
-- Run at main menu to show new weapon mods
local mod_msg = false
local mod_arr = { 'wpn_fps_pis_usp_body_standard', 'wpn_fps_pis_usp_fl_adapter', 'wpn_fps_smg_mac10_body_ris', 'wpn_fps_upg_fl_ass_smg_sho_peqbox', 'wpn_fps_pis_deagle_o_standard_front_long', 'wpn_upg_ak_s_folding_vanilla', 'wpn_fps_shot_huntsman_s_short', 'wpn_fps_m16_fg_standard', 'wpn_fps_pis_rage_b_comp2', 'wpn_fps_pis_rage_b_standard', 'wpn_fps_upg_o_t1micro', 'wpn_fps_smg_mac10_s_skel', 'wpn_fps_pis_rage_body_smooth', 'wpn_upg_saiga_fg_standard', 'wpn_fps_pis_rage_b_short', 'wpn_fps_pis_g17_m_standard', 'wpn_fps_shot_saiga_b_standard', 'wpn_upg_ak_g_standard', 'wpn_fps_pis_beretta_sl_brigadier', 'wpn_fps_smg_mac10_body_ris_special', 'wpn_upg_o_marksmansight_rear_vanilla', 'wpn_fps_smg_mp5_b_mp5a5', 'wpn_fps_smg_akmsu_b_standard', 'wpn_fps_pis_deagle_fg_rail', 'wpn_upg_saiga_m_20rnd', 'wpn_fps_pis_usp_m_standard', 'wpn_fps_upg_vg_ass_smg_verticalgrip', 'wpn_fps_smg_mac10_m_short', 'wpn_fps_upg_ns_ass_smg_small', 'wpn_upg_ak_fg_combo1', 'wpn_fps_saw_b_normal', 'wpn_fps_m4_uupg_o_flipup', 'wpn_fps_pis_g18c_m_mag_33rnd', 'wpn_fps_smg_olympic_fg_railed', 'wpn_fps_pis_beretta_body_rail', 'wpn_fps_smg_mp9_m_extended', 'wpn_fps_smg_p90_b_long', 'wpn_fps_pis_g18c_co_comp_2', 'wpn_fps_pis_1911_b_standard', 'wpn_fps_shot_saiga_m_5rnd', 'wpn_fps_smg_akmsu_fg_rail', 'wpn_fps_ass_ak5_body_rail', 'wpn_fps_smg_mac10_s_fold', 'wpn_fps_m4_upper_reciever_edge', 'wpn_fps_shot_shorty_s_solid_short', 'wpn_fps_upg_ns_ass_smg_medium', 'wpn_fps_ass_m14_body_ebr', 'wpn_fps_shot_shorty_m_extended_short', 'wpn_fps_m16_s_solid_vanilla', 'wpn_fps_ass_g36_body_standard', 'wpn_fps_upg_m4_m_straight_vanilla', 'wpn_fps_m4_uupg_m_std', 'wpn_fps_smg_olympic_s_short', 'wpn_fps_pis_1911_m_extended', 'wpn_fps_pis_1911_body_standard', 'wpn_fps_smg_p90_m_std', 'wpn_upg_ak_fg_combo3', 'wpn_fps_pis_deagle_co_long', 'wpn_fps_m4_uupg_s_fold', 'wpn_fps_upg_fl_pis_laser', 'wpn_fps_pis_beretta_b_std', 'wpn_fps_ass_ak5_fg_ak5a', 'wpn_fps_smg_p90_body_p90', 'wpn_fps_ass_ak_body_lowerreceiver', 'wpn_fps_ass_ak5_fg_fnc', 'wpn_fps_shot_r870_fg_railed', 'wpn_fps_pis_rage_b_comp1', 'wpn_fps_aug_m_pmag', 'wpn_fps_ass_g36_m_standard', 'wpn_fps_shot_r870_body_rack', 'wpn_fps_pis_deagle_g_standard', 'wpn_fps_shot_r870_gadget_rail', 'wpn_fps_upg_m4_m_drum', 'wpn_fps_pis_deagle_m_standard', 'wpn_fps_m16_fg_vietnam', 'wpn_fps_upg_ns_pis_medium', 'wpn_fps_ass_74_body_upperreceiver', 'wpn_fps_ass_g36_fg_ksk', 'wpn_fps_aug_fg_a3', 'wpn_fps_smg_mp5_b_m5k', 'wpn_fps_pis_g17_body_standard', 'wpn_fps_upg_m4_g_standard', 'wpn_fps_smg_mp5_body_rail', 'wpn_fps_smg_akmsu_body_lowerreceiver', 'wpn_fps_shot_r870_s_m4', 'wpn_fps_upg_ns_pis_large', 'wpn_fps_aug_b_long', 'wpn_upg_ak_s_folding', 'wpn_fps_ak_extra_ris', 'wpn_upg_saiga_fg_lowerrail', 'wpn_fps_m4_lower_reciever', 'wpn_fps_pis_deagle_body_standard', 'wpn_fps_upg_ns_shot_shark', 'wpn_fps_upg_fl_pis_tlr1', 'wpn_fps_aug_b_short', 'wpn_fps_pis_1911_b_vented', 'wpn_upg_ak_fg_combo2', 'wpn_fps_amcar_uupg_body_upperreciever', 'wpn_fps_m4_uupg_b_medium_vanilla', 'wpn_fps_shot_r870_s_nostock', 'wpn_fps_upg_m4_m_straight', 'wpn_fps_ass_74_m_standard', 'wpn_fps_smg_olympic_fg_olympic', 'wpn_fps_m4_uupg_b_short', 'wpn_fps_smg_mp5_m_drum', 'wpn_fps_smg_p90_b_short', 'wpn_fps_ass_m14_m_standard', 'wpn_fps_pis_beretta_g_ergo', 'wpn_upg_ak_s_skfoldable', 'wpn_fps_upg_ns_ass_smg_stubby', 'wpn_fps_pis_deagle_b_standard', 'wpn_fps_shot_r870_fg_wood', 'wpn_fps_upg_m4_g_standard_vanilla', 'wpn_fps_upg_fl_ass_smg_sho_surefire', 'wpn_fps_m4_uupg_fg_rail', 'wpn_fps_shot_r870_b_short', 'wpn_fps_shot_r870_s_folding', 'wpn_fps_ass_ak5_s_ak5c', 'wpn_upg_ak_s_skfoldable_vanilla', 'wpn_fps_ass_ak5_fg_ak5c', 'wpn_fps_shot_r870_m_extended', 'wpn_fps_ass_akm_b_standard', 'wpn_fps_shot_r870_s_solid', 'wpn_fps_upg_m4_s_standard', 'wpn_fps_pis_beretta_o_std', 'wpn_fps_ass_ak5_s_ak5b', 'wpn_fps_upg_ns_pis_small', 'wpn_fps_smg_mac10_ris_dummy', 'wpn_fps_ass_g36_body_sl8', 'wpn_fps_m4_uupg_fg_lr300', 'wpn_fps_m4_uupg_m_std_vanilla', 'wpn_fps_ass_m14_b_standard', 'wpn_fps_upg_ns_ass_smg_tank', 'wpn_fps_pis_usp_b_tactical', 'wpn_fps_shot_r870_b_long', 'wpn_fps_smg_mp9_s_fold', 'wpn_fps_pis_g18c_co_1', 'wpn_fps_ass_g36_fg_c', 'wpn_fps_ass_ak5_s_ak5a', 'wpn_fps_m4_uupg_b_short_vanilla', 'wpn_fps_pis_g18c_s_stock', 'wpn_fps_smg_mp5_s_ring', 'wpn_fps_m4_uupg_b_long', 'wpn_fps_pis_deagle_g_bling', 'wpn_fps_pis_1911_co_1', 'wpn_fps_upg_vg_ass_smg_verticalgrip_vanilla', 'wpn_fps_pis_g18c_g_ergo', 'wpn_upg_ak_fg_standard', 'wpn_fps_pis_rage_g_ergo', 'wpn_fps_ass_ak5_b_std', 'wpn_fps_pis_1911_b_long', 'wpn_fps_ass_g36_s_kv', 'wpn_fps_ass_g36_b_long', 'wpn_upg_ak_fg_combo4', 'wpn_fps_upg_m4_g_ergo', 'wpn_fps_shot_r870_s_nostock_big', 'wpn_fps_pis_g18c_b_standard', 'wpn_fps_m16_s_solid', 'wpn_upg_ak_m_drum', 'wpn_fps_pis_beretta_g_std', 'wpn_fps_upg_ns_ass_smg_firepig', 'wpn_fps_pis_deagle_co_short', 'wpn_fps_smg_akmsu_fg_standard', 'wpn_upg_o_marksmansight_front', 'wpn_fps_m4_upper_reciever_round_vanilla', 'wpn_fps_addon_ris', 'wpn_upg_ak_s_psl', 'wpn_fps_upg_m4_s_adapter', 'wpn_fps_pis_beretta_co_co1', 'wpn_fps_shot_r870_fg_big', 'wpn_fps_upg_ns_shot_thick', 'wpn_fps_pis_beretta_body_beretta', 'wpn_fps_aug_ris_special', 'wpn_fps_pis_usp_b_expert', 'wpn_fps_pis_usp_m_extended', 'wpn_fps_upg_o_eotech', 'wpn_fps_ass_74_b_standard', 'wpn_upg_ak_s_adapter', 'wpn_fps_pis_deagle_g_ergo', 'wpn_fps_pis_1911_co_2', 'wpn_fps_pis_rage_g_standard', 'wpn_fps_smg_mp5_b_mp5a4', 'wpn_fps_pis_g18c_m_mag_17rnd', 'wpn_fps_smg_mp5_body_mp5', 'wpn_fps_pis_beretta_sl_std', 'wpn_fps_pis_beretta_m_std', 'wpn_fps_pis_deagle_o_standard_front', 'wpn_fps_smg_olympic_s_adjust', 'wpn_fps_aug_body_aug', 'wpn_fps_ass_m16_o_handle_sight', 'wpn_fps_smg_mp5_fg_mp5a5', 'wpn_fps_pis_beretta_co_co2', 'wpn_fps_smg_mp5_fg_mp5sd', 'wpn_fps_ass_ak5_body_ak5', 'wpn_fps_shot_shorty_s_nostock_short', 'wpn_fps_pis_usp_b_match', 'wpn_fps_pis_g18c_body_frame', 'wpn_fps_smg_mp5_s_adjust', 'wpn_fps_pis_1911_o_long', 'wpn_fps_smg_mp5_fg_m5k', 'wpn_fps_smg_mp9_m_short', 'wpn_fps_pis_g17_b_standard', 'wpn_fps_ass_m16_os_frontsight', 'wpn_fps_smg_mp5_s_solid', 'wpn_fps_upg_m4_s_standard_vanilla', 'wpn_fps_pis_rage_b_long', 'wpn_fps_m16_fg_railed', 'wpn_fps_pis_1911_g_bling', 'wpn_fps_pis_1911_g_ergo', 'wpn_fps_m4_uupg_draghandle_vanilla', 'wpn_fps_pis_1911_m_standard', 'wpn_fps_smg_mp9_b_dummy', 'wpn_fps_pis_1911_o_standard', 'wpn_fps_ass_m14_body_lower', 'wpn_upg_ak_m_akm', 'wpn_fps_m4_uupg_fg_rail_ext', 'wpn_fps_upg_vg_ass_smg_afg', 'wpn_fps_upg_m4_g_sniper', 'wpn_fps_pis_1911_g_standard', 'wpn_fps_ass_g36_g_standard', 'wpn_upg_o_marksmansight_rear', 'wpn_fps_pis_rage_body_standard', 'wpn_fps_shot_huntsman_b_long', 'wpn_fps_shot_r870_s_nostock_vanilla', 'wpn_fps_aug_b_medium', 'wpn_fps_smg_mac10_body_mac10', 'wpn_fps_smg_mp5_m_std', 'wpn_fps_pis_deagle_m_extended', 'wpn_fps_smg_mac10_b_dummy', 'wpn_fps_smg_mac10_m_extended', 'wpn_fps_shot_huntsman_s_long', 'wpn_fps_shot_r870_s_solid_single', 'wpn_fps_shot_r870_body_standard', 'wpn_fps_ass_g36_s_sl8', 'wpn_fps_shot_r870_s_nostock_single', 'wpn_fps_shot_r870_fg_small', 'wpn_fps_pis_deagle_b_long', 'wpn_fps_ass_m14_body_jae', 'wpn_fps_shot_huntsman_b_short', 'wpn_fps_ass_akm_body_upperreceiver_vanilla', 'wpn_fps_upg_ns_ass_smg_large', 'wpn_fps_smg_mp9_s_skel', 'wpn_fps_ass_m14_body_dmr', 'wpn_fps_ass_m14_body_upper', 'wpn_fps_upg_m4_m_pmag', 'wpn_fps_shot_r870_fg_railed_vanilla', 'wpn_fps_upg_o_specter', 'wpn_fps_ass_akm_body_upperreceiver', 'wpn_fps_m4_uupg_draghandle', 'wpn_fps_upg_m4_s_pts', 'wpn_fps_pis_deagle_o_standard_rear', 'wpn_fps_shot_r870_s_solid_big', 'wpn_fps_smg_mp9_body_mp9', 'wpn_upg_o_marksmansight_front_vanilla', 'wpn_fps_smg_mp5_fg_mp5a4', 'wpn_fps_smg_mp5_b_mp5sd', 'wpn_fps_ass_g36_b_short', 'wpn_fps_shot_r870_ris_special', 'wpn_fps_amcar_uupg_fg_amcar', 'wpn_fps_upg_o_aimpoint_2', 'wpn_fps_upg_vg_ass_smg_stubby', 'wpn_fps_pis_beretta_m_extended', 'wpn_fps_shot_r870_s_solid_vanilla', 'wpn_fps_ass_g36_fg_k', 'wpn_fps_m4_uupg_b_medium', 'wpn_fps_m4_upper_reciever_round', 'wpn_fps_upg_o_docter', 'wpn_fps_ass_g36_s_standard', 'wpn_fps_shot_huntsman_body_standard', 'wpn_fps_upg_o_aimpoint', 'wpn_fps_saw_body_standard', 'wpn_fps_saw_m_blade', 'wpn_fps_m4_uupg_b_sd' }
for k,v in pairs(tweak_data.blackmarket.weapon_mods) do
if not arrayIndexOf(mod_arr, k) then
if not mod_msg then
mod_msg = true
io.stderr:write("\nNew weapon mod(s):\n")
end
io.stderr:write("id: " .. k .. ", desc_id: " .. tostring(v.desc_id) .. ", name_id: " .. tostring(v.name_id) .. "\n")
end
end
-- Run at main menu to show new masks
local mask_msg = false
local mask_arr = { 'gagball', 'mummy', 'mr_sinister', 'cthulhu', 'hog', 'skull', 'scarecrow', 'bullet', 'rubber_male', 'clown_56', 'alienware', 'baby_happy', 'baby_cry', 'baby_angry', 'dripper', 'dallas_clean', 'oni', 'anonymous', 'kawaii', 'clowncry', 'outlandish_a', 'jaw', 'dallas', 'venomorph', 'chains_clean', 'grin', 'pumpkin_king', 'tounge', 'rubber_female', 'shogun', 'irondoom', 'brazil_baby', 'day_of_the_dead', 'outlandish_c', 'demon', 'hockey', 'biglips', 'troll', 'buha', 'vampire', 'character_locked', 'chains', 'demonictender', 'zombie', 'dillinger_death_mask', 'brainiack', 'shrunken', 'stonekisses', 'bear', 'babyrhino', 'greek_tragedy', 'monkeybiss', 'wolf', 'wolf_clean', 'dawn_of_the_dead', 'hoxton_clean', 'witch', 'zipper', 'frank', 'outlandish_b', 'hoxton' }
managers.blackmarket:_setup_masks()
for k,v in pairs(tweak_data.blackmarket.masks) do
if not arrayIndexOf(mask_arr, k) then
if not mask_msg then
mask_msg = true
io.stderr:write("\nNew mask(s):\n")
end
io.stderr:write("id: " .. k .. ", desc_id: " .. tostring(v.desc_id) .. ", name_id: " .. tostring(v.name_id) .. ", unit: " .. tostring(v.unit) .. "\n")
end
end
I made a list by hand for all masks, colors and patterns to get each item with the correct "value"