diff --git a/Core.lua b/Core.lua index 9d2f07c462..fb1517d5ba 100644 --- a/Core.lua +++ b/Core.lua @@ -271,6 +271,7 @@ function restoration:Init() "cane", --Santa's Workshop "brb", --Brooklyn Bank "mus", --The Diamond + "born", --Biker 1 "run", --Heat Street "ranc", --Midland Ranch "sah", --Shacklethorne @@ -341,8 +342,7 @@ function restoration:Init() "vit", --White House "nmh", --No Mercy "des", --Henry's Rock - "bph", --Hell's Island - "born", --Biker 1 + "bph", --Hell's Island "fex", --Buluc's Mansion --Skirmish heists below "skmc_mad", diff --git a/addMISC.xml b/addMISC.xml index fd44634fa1..76a8bde97b 100644 --- a/addMISC.xml +++ b/addMISC.xml @@ -1,5 +1,7 @@ + + diff --git a/addSC.xml b/addSC.xml index 647647c604..af4fa5a76a 100644 --- a/addSC.xml +++ b/addSC.xml @@ -945,8 +945,11 @@ - - + + + + + @@ -967,6 +970,11 @@ + + + + + diff --git a/addhudmisc.xml b/addhudmisc.xml index d536bcbc10..afcfc3ee49 100644 --- a/addhudmisc.xml +++ b/addhudmisc.xml @@ -55,6 +55,7 @@ + diff --git a/assets/guis/textures/restoration/mission_briefing/shayu.texture b/assets/guis/textures/restoration/mission_briefing/shayu.texture new file mode 100644 index 0000000000..c3ed3d73a8 Binary files /dev/null and b/assets/guis/textures/restoration/mission_briefing/shayu.texture differ diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.sequence_manager b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.sequence_manager new file mode 100644 index 0000000000..5c8e78a982 Binary files /dev/null and b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.sequence_manager differ diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.unit b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.unit new file mode 100644 index 0000000000..44c2c7b99b --- /dev/null +++ b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx.unit @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx_dummy.unit b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx_dummy.unit new file mode 100644 index 0000000000..5584b2a7d5 --- /dev/null +++ b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_phalanx/ene_acc_shield_phalanx_dummy.unit @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.sequence_manager b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.sequence_manager new file mode 100644 index 0000000000..18f51a20eb Binary files /dev/null and b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.sequence_manager differ diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.unit b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.unit new file mode 100644 index 0000000000..94ca6f208b --- /dev/null +++ b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip.unit @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip_dummy.unit b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip_dummy.unit new file mode 100644 index 0000000000..a13221c0db --- /dev/null +++ b/assets/units/pd2_dlc_vip/characters/ene_acc_shield_vip/ene_acc_shield_vip_dummy.unit @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1.unit b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1.unit index 4e6627d0b0..7650f65d1c 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1.unit @@ -15,6 +15,10 @@ + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1_husk.unit b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1_husk.unit index c17fd64c07..77e4f6f488 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1_husk.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1/ene_phalanx_1_husk.unit @@ -14,9 +14,13 @@ + + + + - + diff --git a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit index c93854a630..f2f59c5d67 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit @@ -5,7 +5,6 @@ - @@ -16,6 +15,10 @@ + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit index f47567d760..d38cace2b3 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit @@ -5,7 +5,7 @@ - + @@ -15,9 +15,13 @@ + + + + - + diff --git a/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1.unit b/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1.unit index c821b67b2b..15a352ddef 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1.unit @@ -15,6 +15,10 @@ + + + + diff --git a/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1_husk.unit b/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1_husk.unit index ef1d83bc11..7e76719461 100644 --- a/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1_husk.unit +++ b/assets/units/pd2_dlc_vip/characters/ene_vip_1/ene_vip_1_husk.unit @@ -5,7 +5,7 @@ - + @@ -15,9 +15,13 @@ + + + + - + diff --git a/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit b/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit index a0ad1af181..afa1185d97 100644 --- a/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit +++ b/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit @@ -16,6 +16,10 @@ + + + + diff --git a/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit b/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit index d91c783e2c..bbc147fb31 100644 --- a/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit +++ b/assets/units/pd2_mod_halloween/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit @@ -15,6 +15,10 @@ + + + + diff --git a/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx.unit b/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx.unit index 54715bfa1d..8b49c53a72 100644 --- a/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx.unit +++ b/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx.unit @@ -1,10 +1,29 @@ + - + + + - + + + + + + - - - + + + + + + + + + + + + + + diff --git a/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx_dummy.unit b/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx_dummy.unit new file mode 100644 index 0000000000..419f7b2dea --- /dev/null +++ b/assets/units/pd2_mod_reapers/characters/ene_acc_shield_akan_phalanx/ene_acc_shield_akan_phalanx_dummy.unit @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/assets/units/pd2_mod_reapers/characters/ene_drak_hrt_2/ene_drak_hrt_2.object b/assets/units/pd2_mod_reapers/characters/ene_drak_hrt_2/ene_drak_hrt_2.object index 293e6e5ee1..4a2d6f6676 100644 --- a/assets/units/pd2_mod_reapers/characters/ene_drak_hrt_2/ene_drak_hrt_2.object +++ b/assets/units/pd2_mod_reapers/characters/ene_drak_hrt_2/ene_drak_hrt_2.object @@ -196,7 +196,7 @@ - + @@ -208,7 +208,7 @@ - + diff --git a/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit b/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit index a411a81c05..6a0001d229 100644 --- a/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit +++ b/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault.unit @@ -17,6 +17,10 @@ + + + + diff --git a/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit b/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit index f6e11087bc..29357bd383 100644 --- a/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit +++ b/assets/units/pd2_mod_reapers/characters/ene_phalanx_1_assault/ene_phalanx_1_assault_husk.unit @@ -6,7 +6,7 @@ - + @@ -16,9 +16,13 @@ + + + + - + diff --git a/lua/managers/hud/HUDMissionBriefing.lua b/lua/managers/hud/HUDMissionBriefing.lua index b938976067..aa6a6b26bf 100644 --- a/lua/managers/hud/HUDMissionBriefing.lua +++ b/lua/managers/hud/HUDMissionBriefing.lua @@ -749,8 +749,8 @@ function HUDMissionBriefing:set_contact_info(contact, interupt) shatter = "guis/textures/restoration/mission_briefing/shatter", akashic = "guis/textures/pd2/mission_briefing/hector/contact", jiufeng = "guis/textures/restoration/mission_briefing/jiufeng", - shayu = "guis/textures/restoration/mission_briefing/event", -- Maybe someday she get own portrait - mcshay = "guis/textures/restoration/mission_briefing/mcshay", + shayu = "guis/textures/restoration/mission_briefing/shayu", + mcshay = "guis/textures/restoration/mission_briefing/mcshay", blaine = "guis/textures/restoration/mission_briefing/blaine", --Support for "Campaign Contract Sorting" mod (aka thanks OVK that you made random contractors and give them only 1 heist) silkroad = "guis/textures/restoration/mission_briefing/locke", @@ -778,8 +778,9 @@ function HUDMissionBriefing:set_contact_info(contact, interupt) shatter = "guis/textures/restoration/mission_briefing/shatter_pattern", akashic = "guis/textures/pd2/mission_briefing/hector/bd_pattern", jiufeng = "guis/dlcs/chas/textures/pd2/mission_briefing/bd_pattern", --Maybe someday they'll make this unique. - shayu = "guis/dlcs/chas/textures/pd2/mission_briefing/bd_pattern", - mcshay = "guis/textures/pd2/mission_briefing/bain/bd_pattern", + shayu = "guis/textures/pd2/mission_briefing/interupt/bd_pattern", --Need to make unique patterns + mcshay = "guis/textures/pd2/mission_briefing/interupt/bd_pattern", + blaine = "guis/textures/pd2/mission_briefing/interupt/bd_pattern", skirmish = "guis/textures/restoration/mission_briefing/shatter_pattern" } local pattern = "guis/textures/pd2/mission_briefing/".. contact .."/bd_pattern" diff --git a/lua/sc/loc/loc.lua b/lua/sc/loc/loc.lua index bb46785ef2..7d514c1c98 100644 --- a/lua/sc/loc/loc.lua +++ b/lua/sc/loc/loc.lua @@ -195,11 +195,13 @@ Hooks:Add("LocalizationManagerPostInit", "ResMod_english_Localization", function ["RestorationModSprintCancelTitleID"] = "Evasion Aced Sprint Cancels Reload", ["RestorationModSprintCancelDescID"] = "Toggle whether or not if *STARTING* a sprint will cancel any on-going reload when you have aced the \"Evasion\" skill. Reloading while actively sprinting is unaffected.", ["RestorationModQueuedShootingTitleID"] = "Buffer Fire Inputs", - ["RestorationModQueuedShootingDescID"] = "Enable/disable fire input buffering for semi-auto weapons to assist with oversampling (sending inputs faster than the weapon can fire).", - ["RestorationModQueuedShootingWindowTitleID"] = "Buffer Fire Input Sensitivity", - ["RestorationModQueuedShootingWindowDescID"] = "Determines the window of time for your fire input to be buffered based on a % of the weapon's fire time delay. Higher value = earlier buffer", - ["RestorationModQueuedShootingExcludeTitleID"] = "Buffer Inputs Fire Rate Limit", + ["RestorationModQueuedShootingDescID"] = "Enable/disable fire input buffering for semi-auto and weapons to assist with oversampling (sending inputs faster than the weapon can fire).", + ["RestorationModQueuedShootingWindowTitleID"] = "Single-Fire Buffer Sensitivity", + ["RestorationModQueuedShootingWindowDescID"] = "Determines the time window for your fire inputs to be buffered based on a % of the weapon's fire time delay. Higher value = earlier buffer", + ["RestorationModQueuedShootingExcludeTitleID"] = "Single-Fire Input Buffer Firerate Limit", ["RestorationModQueuedShootingExcludeDescID"] = "Limits the buffering of fire inputs to weapons that fire *above* the fire rate (RPM) set by this option.", + ["RestorationModQueuedShootingMidBurstTitleID"] = "Burstfire Mid-Burst Input Buffer", + ["RestorationModQueuedShootingMidBurstDescID"] = "Buffer fire inputs made *during* a burst.", ["RestorationModNoADSRecoilAnimsTitleID"] = "No ADS Recoil Animations", ["RestorationModNoADSRecoilAnimsDescID"] = "Enable/disable ADS recoil animations. Some weapons are not affected by this option (i.e. Manually operated guns, bows, flamethrowers)", ["RestorationModNoSwapOnReviveTitleID"] = "No Forced Weapon Swap on Revive", @@ -939,6 +941,8 @@ Hooks:Add("LocalizationManagerPostInit", "ResMod_english_Localization", function ["menu_state_loading"] = "Loading", ["menu_state_ingame"] = "Ingame", + ["menu_description"] = "The Plan", + -- ///Stuff ripped from the various locale files we had /// --Halloween Dozer Sword @@ -1886,7 +1890,69 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_grenade_damage_control"] = "Hip Flask", ["bm_grenade_smoke_screen_grenade_desc"] = "Radius: #{skill_color}#4m## \nDuration: #{skill_color}#12s## \nFuse: #{skill_color}#1 second after remaining stationary## \n\nDrop one of these and you'll vanish in a cloud of smoke, leaving your enemies struggling to take aim at you.", - --WEAPON & ATTACHMENT DESCRIPTIONS + --WEAPON & ATTACHMENT DESCRIPTIONS + --[[ MANUFACTURERS ]] + --In-Universe Manufacturer deets + --Crosskill/Corvus (Payday/OTWD) = Colt + --DSC [Defense System Crosskill] (PD2) = Saco Defense + --Simmons Armory (PD2) = Springfield Armory + --same acronym lol + --Bernetti = Beretta + --Chimano/Stryk = Glock + --SG = HK (Heckler Und Koch) + --Signature/FIK (PD2/OTWD + PD3) = Sig Sauer + --Signature = European Branches, FIK = American Branch? + --VF (OTWD + PD3) = FNH + --Lakner (PD2) = Walther + --Kang Arms (PD2) = Norinco + --Northwest (PD3) = China South Industries Group + --Touro = Taurus (lmao) + --LWI [Lion Weapon Inc.] (PD2) = Kel-Tec + --LWI was Taken from the incredibly hard to read text on the right side of the SUB2000 + --ITI (OTWD) = IMI/IWI + --CR/TKA (PD2/OTWD) = CZ + --TTO [Tecci Tactical Operations] (PD2) = Taran Tactical + --Ferino (OTWD) = Franchi + --Moretti (PD2) = Benelli(?) + --Stefan (PD2) = Steyr + --Wasp = Magpul + --idunno + --Repeater/Eaton (PD2/OTWD) = Winchester + --Rangehitter (PD2) = Marlin + --"Rangehitter" was bummed off it's original "Bernetti Rangehitter" name as "Bernetti"/Beretta doesn't make the SBL + + ["manufacturer_colt"] = "Crosskill", + ["manufacturer_saco"] = "DSC", + ["manufacturer_springfield"] = "Simmons", + ["manufacturer_sigusa"] = "FIK", + ["manufacturer_keltec"] = "LWI", + ["manufacturer_winchester"] = "Eaton", + ["manufacturer_marlin"] = "Rangehitter", + ["manufacturer_swesson"] = "J&M", + + ["manufacturer_fnh"] = "VF", + ["manufacturer_sig"] = "Signature", + ["manufacturer_hk"] = "S&G", + ["manufacturer_walther"] = "Lakner", + ["manufacturer_steyr"] = "Stefan", + ["manufacturer_glock"] = "Chimano", + + ["manufacturer_benelli"] = "Moretti", + ["manufacturer_franchi"] = "Ferino", + ["manufacturer_beretta"] = "Bernetti", + + ["manufacturer_kalashnikov"] = "IZMHA", + ["manufacturer_tula"] = "IZMHA", + ["manufacturer_cz"] = "TKA", + + ["manufacturer_imi"] = "ITI", + + ["manufacturer_taurus"] = "Touro", + + ["manufacturer_chinaindustries"] = "Northwest", + ["manufacturer_norinco"] = "Kang Arms", + + --Contains anything that should always be set regardless of the weapon names option chosen like descriptions or Resmod added weapons and attachments --[[ RESMOD WEAPONS + ATTACHMENTS ]] --socom deez nuts-- @@ -1918,6 +1984,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc --10-0 ["bm_wp_upg_i_tekna"] = "Tekna Burst Kit", ["bm_wp_upg_i_tekna_desc"] = "Locks this weapon to fire in #{risk}#3-round bursts##; pair it with a #{skill_color}#glaive## maybe?", + ["bm_wally_desc"] = "#{important_2}#Hey kiddo...##", --AMR16-- ["bm_wp_upg_i_m16a2"] = "AMR-16 B3 Kit", ["bm_wp_upg_i_m16a2_desc"] = "Trade full-auto for a #{skill_color}#3-round burst## setting. #{risk}#Burst#{skill_color}# fire rate is #{skill_color}#increased to 950 RPM.##", @@ -2072,6 +2139,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc --SAA/Peacemaker ["bm_ap_weapon_peacemaker_sc_desc"] = "#{risk}#The greatest handgun ever made.##\n\n#{skill_color}#Can pierce body armor, multiple enemies, shields and thin walls.##\n\nCan be #{skill_color}#fanned for an increased fire rate## at the cost of #{important_1}#more recoil, reduced effective range and the inabilty to aim down your sights.##", --CUSTOM PISTOLS + --M2019 Blaster + ["thatgun_desc"] = "It's the gun!\n\nYou know, that gun!\n\n#{skill_color}#Deals 50% of its damage through body armor and can pierce multiple enemies.##", --Malorian 3516 ["whydoyoucome"] = "The only one of its kind, made specially for rockerboy Johnny Silverhand.\n\n#{skill_color}#Can pierce multiple enemies and their body armor.\nRounds ricochet off surfaces while firing from the hip and pierce walls while aiming.\nWeapon Butt attacks shoot out a short ranged wave of fire.##", --Colt Detective @@ -2238,6 +2307,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc --Akimbo Krinkov ["bm_x_akmsu_sc_desc"] = "A small rifle useful for taking down big men. Not to be underestimated as this rifle can hold its own in just about any scenario.", --CUSTOM ARs + --QBZ-191 + ["bm_qbz191_sc_desc"] = "Next generation Chinese assault rifle chambered in 5.8x42mm.\n\n#{skill_color}#Deals 25% of its damage through body armor.##", --AN-94/92 ["bm_tilt_sc_desc"] = "#{risk}#The first 2 rounds of each trigger pull## are fired at #{skill_color}#3x the rate of fire.##", --NV4 @@ -2400,38 +2471,6 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc if weapon_names <= 2 then --Resmod names LocalizationManager:add_localized_strings({ - --In-Universe Manufacturer deets - - --Crosskill/Corvus (Payday/OTWD) = Colt - --DSC [Defense System Crosskill] (PD2) = Saco Defense - --Simmons Armory (PD2) = Springfield Armory - --same acronym lol - --Bernetti = Beretta - --Chimano/Stryk = Glock - --SG = HK (Heckler Und Koch) - --Signature/FIK (PD2/OTWD + PD3) = Sig Sauer - --Signature = European Branches, FIK = American Branch? - --VF (OTWD + PD3) = FNH - --Lakner (PD2) = Walther - --Kang Arms (PD2) = Norinco - --Northwest (PD3) = China South Industries Group - --Public Defender (PD2) = Taurus (lmao) - --LWI [Lion Weapon Inc.] (PD2) = Kel-Tec - --LWI was Taken from the incredibly hard to read text on the right side of the SUB2000 - --ITI (OTWD) = IMI/IWI - --CR/TKA (PD2/OTWD) = CZ - --TTO [Tecci Tactical Operations] (PD2) = Taran Tactical - --Ferino (OTWD) = Franchi - --Moretti (PD2) = Benelli(?) - --Stefan (PD2) = Steyr - --Wasp = Magpul - --idunno - --Repeater/Eaton (PD2/OTWD) = Winchester - --Combine the names into "Repeaton" maybe? - --Rangehitter (PD2) = Marlin - --"Rangehitter" was bummed off it's original "Bernetti Rangehitter" name as "Bernetti"/Beretta doesn't make the SBL - - --[[ PISTOLS ]] --Gecko Pistol ["bm_w_maxim9"] = "Magnus 9", @@ -2494,6 +2533,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_wp_1911_m_big"] = "Casket Magazine", --Crosskill Chunky ["bm_w_m1911"] = "Crosskill A1", + ["bm_w_x_m1911"] = "Price & MacTavish", --Crosskill Guard ["bm_w_shrew"] = "Crosskill Guard", ["bm_w_x_shrew"] = "Barry & Paul", @@ -2746,6 +2786,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc --Akimbo Krinkov ["bm_w_x_akmsu"] = "Akimbo Krinkovs", --CUSTOM ARs + --QBZ-191 + ["bm_w_pd3_qbz191"] = "Northwest B-9", --AN-94/92 ["bm_w_tilt"] = "KVK-99", --HK G36 @@ -2878,9 +2920,11 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc LocalizationManager:add_localized_strings({ ["bm_w_pl14"] = "WS-14", + ["bm_w_x_pl14"] = "Akimbo WS-14s", ["bm_w_g22c"] = "Chimano 22C", ["bm_w_x_g22c"] = "Akimbo Chimano 22Cs", ["bm_w_x_1911"] = "Akimbo Operator IIs", + ["bm_w_x_m1911"] = "Akimbo Crosskill A1s", ["bm_w_x_sparrow"] = "Akimbo Sparrows", ["bm_w_scar"] = "VF-7S", ["bm_w_scarl"] = "VF-6M", @@ -4078,8 +4122,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_gameplay_res_5"] = "Cloakers can easily counter lone or cut off heisters.", ["loading_gameplay_res_6"] = "Cloakers deal direct health damage when they kick you. This can be reduced with Deflection or the Counter Strike skill.", ["loading_gameplay_res_7"] = "Green Bulldozers deal high amounts of damage and can often break even the heaviest of armors with a single shot.", - ["loading_gameplay_res_8"] = "Saiga/Black Bulldozers trade damage for high rate of fire and boast an impressive drum magazine.", - ["loading_gameplay_res_9"] = "LMG Dozers/Skulldozers lay down heavy suppressive fire and will fire until their belts are empty.", + ["loading_gameplay_res_8"] = "Saiga/Black Bulldozers trade damage for high rate of fire and boast an impressive drum magazine. They also run faster than other dozers but have much less health.", + ["loading_gameplay_res_9"] = "LMG Dozers/Skulldozers lay down heavy suppressive fire that knockbacks on close range and will fire until their belts are empty. Their top armor can take up more damage than regular dozer but move as slow as Titandozers.", ["loading_gameplay_res_10"] = "Benelli Shotgunner Dozers replace Minigun Dozers, high rate of fire and good damage. An unholy union of Green and Black dozers.", ["loading_gameplay_res_11"] = "Target priority is important. A Bulldozer of any type is worth more attention than a Light SWAT.", ["loading_gameplay_res_12"] = "On Death Sentence, Bulldozers enter a berserker rage when their glass visors are broken, increasing their damage by 10%.", @@ -4103,37 +4147,39 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_new_units_res_title"] = "Restoration Unit Tips", ["loading_new_units_res_1"] = "OMNIA ASUs will provide damage bonuses to nearby allies marked by giving them Yellow laser attachments.", ["loading_new_units_res_2"] = "LPFs are weak to melee.", - ["loading_new_units_res_3"] = "Lighter units will be Overhealed by the LPF. Overhealed enemies are outlined in purple.", + ["loading_new_units_res_3"] = "Lighter units will be overhealed by the LPF. Enemies are outlined in purple during overhealing process.", ["loading_new_units_res_4"] = "Titan Cloakers have advanced cloaking gear that renders them nearly invisible, but it still has the ambient hum of older models of standard Cloaker gear.", ["loading_new_units_res_5"] = "Titan Dozers prefer putting distance between them and their target to unleash the full potential of their railguns undisturbed.", ["loading_new_units_res_6"] = "Titan Snipers trade damage-per-shot and armor-piercing from their standard counterparts for a higher rate of fire and being able to shoot while moving.", ["loading_new_units_res_7"] = "Instead of using a laser sight, Titan Sniper shots leave behind purple tracers.", - ["loading_new_units_res_8"] = "Titan Shields can only be pierced with the Thanatos, OVE9000 Saw when using Rip and Tear basic, and special AP rounds in Sentry Guns.", + ["loading_new_units_res_8"] = "Titan Shields can be pierced with the Thanatos, OVE9000 Saw when using Rip and Tear basic or with special AP rounds in Sentry Guns. Even shooting their shield long enough can make them drop it; beware of their sudden tactic change when it happens.", ["loading_new_units_res_9"] = "Captain Spring and Titan Dozers take bonus headshot damage at all times.", ["loading_new_units_res_10"] = "Titan Tasers fire electric rounds that severely restrict your movement temporarily, indicated by a blue UI overlay.", ["loading_new_units_res_11"] = "Veteran Cops will drop Tear Gas grenades on death when killed by anything but a headshot.", ["loading_new_units_res_12"] = "Veteran Cops move quickly making shots harder to land.", ["loading_new_units_res_13"] = "The Riot Gear clad Titan SWAT are somewhat resistant to melee.", ["loading_new_units_res_14"] = "Titan SWAT cannot be taken hostage or converted to fight on your side.", - ["loading_new_units_res_15"] = "Titan SWAT boast LMGs and automatic shotguns.", + ["loading_new_units_res_15"] = "Titan SWAT boast LMGs and automatic shotguns that either push back or concusses the enemy.", ["loading_new_units_res_16"] = "The dreaded Bravo units spawn on Pro Jobs only, when a PONR is triggered. They are powerful no-nonsense enemies with enhanced body armor, and more powerful weapons.", ["loading_new_units_res_17"] = "Bravo units can throw frag grenades. Mind your surroundings when you see them flashing and emitting a beeping countdown.", ["loading_new_units_res_18"] = "AKAN fields their own Titan units called D-Series, developed by their R&D firm DRAK.", ["loading_new_units_res_19"] = "The Grenadier launches tear gas grenades at range with his underbarrel attachment, damaging players that stand in the cloud. On Death Sentence he instead comes armed with deadlier, stamina-draining nerve gas grenades.", + ["loading_new_units_res_20"] = "Titan Shields have flashbang panels mounted on their shields. As a panel charges up, you can shoot it to stop it, breaking it and briefly stunning the wielder in the process.", --Captain Hints ["loading_captains_res_title"] = "Restoration Captain Tips", - ["loading_captains_res_1"] = "To take Captain Summers down, target his crew first starting with Doc. He's unkillable until his entire crew is dead, and the other two are nearly invulnerable until Doc is dead.", + ["loading_captains_res_1"] = "Captain Summers' high damage resistance drops as each member of his crew is taken out. Target Doc first as he can heal the rest of his crew so long as he's standing.", ["loading_captains_res_2"] = "Don't hug Captain Summers. He WILL melt you with his flamethrower.", - ["loading_captains_res_3"] = "Captain Spring can take a ton of damage but will eventually go down. Watch for his grenades and take advantage of his immobility.", + ["loading_captains_res_3"] = "Captain Spring can take a ton of damage but will eventually go down. Watch for his grenades and take advantage of his low mobility.", ["loading_captains_res_4"] = "Captain Spring throws Cluster HE grenades periodically.", - ["loading_captains_res_5"] = "Captain Spring may be dangerous, but he is incredibly slow and has poor range.", + ["loading_captains_res_5"] = "Captain Spring may be dangerous due to his knockback capabilites but he is incredibly slow and has poor range.", ["loading_captains_res_6"] = "Captain Autumn will loudly taunt when he attacks.", - ["loading_captains_res_7"] = "Unlike other Captains, the police will not announce Autumn's arrival, as to not ruin the element of surprise.", - ["loading_captains_res_8"] = "Captain Autumn will progressively disable your deployables if he's allowed to stay undetected in the map for a while. Disabled deployables are outlined in purple and can only be restored if Autumn is found and defeated.", + ["loading_captains_res_7"] = "Unlike other Captains, the police will not announce Autumn's arrival as to not ruin his element of surprise.", + ["loading_captains_res_8"] = "Captain Autumn will progressively disable your deployables if he's allowed to stay undetected when active for a while. Disabled deployables are outlined in purple and can only be restored if Autumn is found and defeated.", ["loading_captains_res_9"] = "You will probably not beat Captain Autumn in a fist fight. Don't even try.", - ["loading_captains_res_10"] = "Captain Winters is nearly immune to explosives and fire, and has strong bullet resistance, but is somewhat vulnerable to melee.", - ["loading_captains_res_11"] = "Captain Winters' shield is completely unpierceable.", + ["loading_captains_res_10"] = "Captain Winters has a strong resistance to bullets and even stronger ones to explosives and fire. Despite that, he is somewhat vulnerable to melee.", + ["loading_captains_res_11"] = "Captain Winters' shield cannot be pierced but it will break after soaking up enough damage; like Titan Shields, beware of his second phase.", ["loading_captains_res_12"] = "Captain Winters will wander the map, healing and overhealing nearby enemies.", + ["loading_captains_res_13"] = "Captain Winters' shield has flashbang panels like those used by Titan Shields; just keep in mind his flashbang panels don't break after being shot.", --Stealth Hints ["loading_stealth_res_title"] = "Restoration Stealth Tips", ["loading_stealth_res_1"] = "The security Command Post will send guards to investigate malfunctioning cameras, allowing it to be used as a lure.", @@ -4393,6 +4439,10 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["mutator_quickscope360"] = "Eagle Eye", ["mutator_quickscope360_desc"] = "Snipers now aim their rifles 100% faster.", ["mutator_quickscope360_longdesc"] = "Snipers now aim their rifles 100% faster.", + + ["mutator_goldfarbdozers"] = "Double Trouble", + ["mutator_goldfarbdozers_desc"] = "All Bulldozers that spawn will always deploy in pairs.", + ["mutator_goldfarbdozers_longdesc"] = "All Bulldozers that spawn will always deploy in pairs.", --Crime spree modifier changes ["cn_crime_spree_brief"] = "A Crime Spree is an endless series of randomly selected heists, executed in succession. With each heist you complete, your Rank and Reward will increase! Each 20th or 26th rank you will need to choose a modifier and each 100th rank there is an increase to the risk level, that will make the next heists harder to complete. After risk level 600, the amount of i-frames that player have starts to decrease and bravo units begin to spawn normally.\n\n##If you invite your crew, make sure they started their own Crime Spree before joining in order to gain ranks and Rewards as well.##", ["menu_cs_next_modifier_forced"] = "", @@ -4421,6 +4471,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["menu_cs_modifier_cloaker_tear_gas"] = "All HRT units have an additional 15% chance to become a ASU unit.", ["menu_cs_modifier_dozer_lmg"] = "Whenever a Green or Black Bulldozer spawns, there is a chance that it will be replaced by a Skulldozer.", ["menu_cs_modifier_10secondsresponsetime"] = "All police assaults now start at maximum intensity.", + ["menu_cs_modifier_dozerpairs"] = "Bulldozers will now always spawn in pairs.", ["bm_menu_skill"] = "Crew Boosts", @@ -4592,7 +4643,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) --Iron Man ["menu_juggernaut_beta_sc"] = "Iron Man", - ["menu_juggernaut_beta_desc_sc"] = "BASIC: #{owned}#$basic##\nYou can wear the #{skill_color}#Improved Combined Tactical Vest.##\n\nWhen you melee Shield enemies, they get staggered from the sheer force.\n\n#{risk}#NOTE:## #{important_1}#Captain Winters## #{risk}#cannot be staggered.##\n\nACE: #{owned}#$pro##\nYour armor recovers #{skill_color}#10%## faster.\n\nYour ranged weapons to have a chance to stagger Shield enemies when shooting their shield; chances are increased the higher the total damage of the weapon is.", + ["menu_juggernaut_beta_desc_sc"] = "BASIC: #{owned}#$basic##\nYou can wear the #{skill_color}#Improved Combined Tactical Vest.##\n\nWhen you melee Shield enemies, they get staggered from the sheer force.\n\n#{risk}#NOTE:## #{important_1}#Titan Shields## #{risk}#and## #{important_1}#Captain Winters## #{risk}#cannot be staggered.##\n\nACE: #{owned}#$pro##\nYour armor recovers #{skill_color}#10%## faster.\n\nYour ability to stagger shields is extended to your ranged weapons; chances are increased the higher the total damage of the weapon is.", --[[ SUPPORT SUBTREE ]]-- --Scavenger diff --git a/lua/sc/loc/locko.lua b/lua/sc/loc/locko.lua index 76c5d9447b..886510c3f0 100644 --- a/lua/sc/loc/locko.lua +++ b/lua/sc/loc/locko.lua @@ -197,12 +197,14 @@ Hooks:Add("LocalizationManagerPostInit", "ResMod_english_Localization", function ["RestorationModAutoDMRsDescID"] = "반자동 및 완전 자동 발사 모드가 있는 모든 지정사수 소총에 완전 자동으로 설정할 지 여부를 전환합니다.", ["RestorationModSprintCancelTitleID"] = "위기모면 에이스 효과 전력 질주 시 재장전 취소", ["RestorationModSprintCancelDescID"] = "\"위기모면\" 스킬을 사용 중일때 전력 질주를 시작하면 진행 중인 재장전을 취소할지 여부를 설정합니다. 전력 질주 중에 재장전은 영향을 받지 않습니다.", - ["RestorationModQueuedShootingTitleID"] = "발사 입력 버퍼", - ["RestorationModQueuedShootingDescID"] = "오버샘플링(무기가 발사할 수 있는 것보다 빠르게 발사)을 지원하기 위해 반자동 무기에 대한 발사 입력 버퍼링을 활성화/비활성화합니다.", - ["RestorationModQueuedShootingWindowTitleID"] = "발사 입력 대기 감도 버퍼", - ["RestorationModQueuedShootingWindowDescID"] = "무기 발사 시간 지연의 %에 따라 버퍼링할 발사 입력 시간을 결정합니다. (높은 값 = 초기 버퍼)", - ["RestorationModQueuedShootingExcludeTitleID"] = "발사 속도 입력 제한 버퍼", - ["RestorationModQueuedShootingExcludeDescID"] = "이 옵션으로 설정한 발사 속도(RPM) *이상으로* 발사하는 무기에 대한 발사 입력의 버퍼링을 제한합니다.", + ["RestorationModQueuedShootingTitleID"] = "발사 선입력", + ["RestorationModQueuedShootingDescID"] = "오버샘플링(무기가 발사할 수 있는 것보다 빠르게 발사)을 지원하기 위해 반자동 및 무기의 발사 선입력을 활성화/비활성화합니다.", + ["RestorationModQueuedShootingWindowTitleID"] = "단발 선입력 감도", + ["RestorationModQueuedShootingWindowDescID"] = "무기 발사 시간 지연의 %에 따라 버퍼링되는 발사 선입력 시간 간격을 결정합니다. (높은 값 = 더 일찍 선입력)", + ["RestorationModQueuedShootingExcludeTitleID"] = "단발 선입력 발사 속도 제한", + ["RestorationModQueuedShootingExcludeDescID"] = "이 옵션으로 설정한 발사 속도(RPM) *이상으로* 발사하는 무기에 대한 발사 선입력의 버퍼링을 제한합니다.", + ["RestorationModQueuedShootingMidBurstTitleID"] = "점사 점사 선입력", + ["RestorationModQueuedShootingMidBurstDescID"] = "점사 도중에 만들어지는 버퍼 선입력을 결정합니다.", ["RestorationModNoADSRecoilAnimsTitleID"] = "조준 중 반동 애니메이션 없음", ["RestorationModNoADSRecoilAnimsDescID"] = "조준 중 반동 애니메이션을 활성화하거나 비활성화합니다. 일부 무기는 이 옵션의 영향을 받지 않습니다(예: 수동으로 작동하는 총, 활, 화염방사기).", ["RestorationModNoSwapOnReviveTitleID"] = "소생 시 강제 무기 교체 없음", @@ -941,6 +943,8 @@ Hooks:Add("LocalizationManagerPostInit", "ResMod_english_Localization", function ["menu_state_lobby"] = "Lobby", ["menu_state_loading"] = "Loading", ["menu_state_ingame"] = "Ingame", + + ["menu_description"] = "The Plan", -- ///Stuff ripped from the various locale files we had /// @@ -1470,17 +1474,21 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization", function(loc) ["bm_w_x_model3"] = "아킴보 Frenchman Model 87 리볼버", ["bm_x_model3_sc_desc"] = "이 쌍리볼버를 들고 정오에 당신의 내면에 있는 투덜거리는 자질을 끌어내고 경찰에게 듀얼을 도전하세요.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 적을 관통할 수 있습니다.##", --Raging bull - ["bm_rage_sc_desc"] = "매우 강력한 단거리 대포. 정렬하는 멍청이들을 맞추어 빠르게 쓰려트립니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 적 여러 명을 관통할 수 있습니다.##", - ["bm_x_rage_sc_desc"] = "전혀 좋지도 않고 실용적이지도 않지만, 은행 강도 사건에서 이것들을 빼내서 경찰력을 압박하고 싶을 때 사용할 수 있습니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 적 여러 명을 관통할 수 있습니다.##", + ["bm_rage_sc_desc"] = "매우 강력한 단거리 대포. 정렬하는 멍청이들을 맞추어 빠르게 쓰려트립니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 다수의 적을 관통할 수 있습니다.##", + ["bm_x_rage_sc_desc"] = "전혀 좋지도 않고 실용적이지도 않지만, 은행 강도 사건에서 이것들을 빼내서 경찰력을 압박하고 싶을 때 사용할 수 있습니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 다수의 적을 관통할 수 있습니다.##", --Castigo ["bm_chinchilla_sc_desc"] = "강력하고 정확하며 스타일리시합니다. DC에서 더 내구성이 강한 적들을 돌파하는 데 유용합니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 적을 관통할 수 있습니다.##", ["bm_x_chinchilla_sc_desc"] = "시카리오는 그의 마크가 다운되었는지 확인해야 하며, 이 2개가 이를 보장합니다.\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 적을 관통할 수 있습니다.##", --RUS-12 - ["bm_rsh12_sc_desc"] = "한 손으로 대구경탄 싸기 시합의 절대적인 마지막 수단.\n\n#{skill_color}#방탄복과 여러 적, 방패 및 얇은 벽을 관통할 수 있습니다.##", + ["bm_rsh12_sc_desc"] = "한 손으로 대구경탄 싸기 시합의 절대적인 마지막 수단.\n\n#{skill_color}#방탄복과 다수의 적, 방패 및 얇은 벽을 관통할 수 있습니다.##", --SAA/Peacemaker ["bm_w_peacemaker"] = "Peacemaker .45LC 리볼버", - ["bm_ap_weapon_peacemaker_sc_desc"] = "#{risk}#인류 최고의 권총.##\n\n#{skill_color}#방탄복과 여러 적, 방패 및 얇은 벽을 관통할 수 있습니다.##\n\n#{important_1}#반동이 증가하고 유효 범위가 감소하고 조준을 할 수 없는 대신## #{skill_color}#발사 속도가 증가시키는## 팬링 기능이 있습니다.", + ["bm_ap_weapon_peacemaker_sc_desc"] = "#{risk}#인류 최고의 권총.##\n\n#{skill_color}#방탄복과 다수의 적, 방패 및 얇은 벽을 관통할 수 있습니다.##\n\n#{important_1}#반동이 증가하고 유효 범위가 감소하고 조준을 할 수 없는 대신## #{skill_color}#발사 속도가 증가시키는## 팬링 기능이 있습니다.", --CUSTOM HANDGUNS + --M2019 Blaster + ["thatgun_desc"] = "이건 총이야!\n\n알잖아, 그 총!\n\n#{skill_color}#방탄복을 관통해 피해의 50%를 가하고 다수의 적을 관통할 수 있습니다.##", + --Malorian 3516 + ["whydoyoucome"] = "로커보이 조니 실버핸드를 위한 특별히 제작된 유일한 총기입니다.\n\n#{skill_color}#다수의 적과 방탄복을 관통할 수 있습니다.\n탄은 지향 사격하는 동안 표면을 튕겨내고 조준하는 동안에는 벽을 관통합니다.\n개머리판으로 공격할 시 단거리를 가진 불길을 발사합니다.##", --Px4 ["bm_w_px4"] = "Bernetti Hx4 Canaan 권총", --Browning Hi-Power @@ -1702,6 +1710,9 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization", function(loc) ["bm_x_akmsu_sc_desc"] = "거물을 쓰러뜨리는 데 유용한 소형 소총. 이 소총은 거의 모든 시나리오에서 제 역할을 할 수 있기 때문에 과소평가해서는 안 됩니다.", --CUSTOM ARs + --QBZ-191 + ["bm_w_pd3_qbz191"] = "Northwest B-9 소총", + ["bm_qbz191_sc_desc"] = "5.8x42mm 구경탄을 사용하는 차세대 중국 돌격소총입니다.\n\n#{skill_color}#방탄복을 관통해 피해의 25%를 가합니다.##", --AN-94/92 ["bm_w_tilt"] = "KVK-99 소총", ["bm_tilt_sc_desc"] = "#{risk}#각 방아쇠의 처음 2발은## #{skill_color}#발사 속도의 3배로 발사합니다.##", @@ -2525,7 +2536,39 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_grenade_copr_ability"] = "약병", ["bm_grenade_damage_control"] = "힙 플라스크", ["bm_grenade_smoke_screen_grenade_desc"] = "범위: #{skill_color}#4m## \n지속 시간: #{skill_color}#12초## \n기폭: #{skill_color}#정지 상태를 유지한 후 1초## \n\n이것 하나만 던지면, 연기 속으로 사라져서, 적이 당신을 제대로 조준하지 못하게 할 수 있습니다.", - + + + ["manufacturer_colt"] = "Crosskill", + ["manufacturer_saco"] = "DSC", + ["manufacturer_springfield"] = "Simmons", + ["manufacturer_sigusa"] = "FIK", + ["manufacturer_keltec"] = "LWI", + ["manufacturer_winchester"] = "Eaton", + ["manufacturer_marlin"] = "Rangehitter", + ["manufacturer_swesson"] = "J&M", + + ["manufacturer_fnh"] = "VF", + ["manufacturer_sig"] = "Signature", + ["manufacturer_hk"] = "S&G", + ["manufacturer_walther"] = "Lakner", + ["manufacturer_steyr"] = "Stefan", + ["manufacturer_glock"] = "Chimano", + + ["manufacturer_benelli"] = "Moretti", + ["manufacturer_franchi"] = "Ferino", + ["manufacturer_beretta"] = "Bernetti", + + ["manufacturer_kalashnikov"] = "IZMHA", + ["manufacturer_tula"] = "IZMHA", + ["manufacturer_cz"] = "TKA", + + ["manufacturer_imi"] = "ITI", + + ["manufacturer_taurus"] = "Touro", + + ["manufacturer_chinaindustries"] = "Northwest", + ["manufacturer_norinco"] = "Kang Arms", + ["bm_wp_wpn_fps_upg_scar_m203_buckshot"] = "40MM Buckshot Rounds", ["bm_wp_wpn_fps_upg_scar_m203_buckshot_desc"] = "Round loaded with 6 heavy pellets.\n\nTotal ammo: 15\nDamage: 360\nAccuracy: 40\nEffective range: 9M\nMaximum range: 18M", @@ -2609,6 +2652,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_wp_1911_m_big"] = "캐스킷 탄창", --Crosskill Chunky ["bm_w_m1911"] = "Crosskill A1", + ["bm_w_x_m1911"] = "프라이스 & 맥태비시", --Crosskill Guard ["bm_w_shrew"] = "Crosskill Guard", ["bm_w_x_shrew"] = "베리 & 폴", @@ -2660,9 +2704,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc --Derringer ["bm_w_derringer"] = "Derringer", --Automag .44 - ["bm_w_amt"] = "Automag .44", - --Malorian 3516 - ["whydoyoucome"] = "로커보이 조니 실버핸드를 위한 특별히 제작된 유일한 총기입니다.\n\n#{skill_color}#다수의 적과 방탄복을 관통할 수 있습니다.\n탄은 지향 사격하는 동안 표면을 튕겨내고 조준하는 동안에는 벽을 관통합니다.\n개머리판으로 공격할 시 단거리를 가진 불길을 발사합니다.##", + ["bm_w_amt"] = "Automag .44", --Colt Detective ["bm_w_coltds"] = "Crosskill Investigator", @@ -2989,9 +3031,11 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc LocalizationManager:add_localized_strings({ ["bm_w_pl14"] = "WS-14", + ["bm_w_x_pl14"] = "아킴보 WS-14", ["bm_w_g22c"] = "Chimano 22C", ["bm_w_x_g22c"] = "아킴보 Chimano 22C", ["bm_w_x_1911"] = "아킴보 Operator II", + ["bm_w_x_m1911"] = "아킴보 Crosskill A1", ["bm_w_x_sparrow"] = "아킴보 Sparrow", ["bm_w_scar"] = "VF-7S", ["bm_w_scarl"] = "VF-6M", @@ -4190,8 +4234,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_gameplay_res_5"] = "클로커는 혼자 있는 하이스터 혹은 하이스터를 가로막을 때 쉽게 반격합니다.", ["loading_gameplay_res_6"] = "클로커는 발로 차면 직접적인 체력 피해를 가합니다. 이것은 굴절 또는 반격 스킬로 감소시킬 수 있습니다.", ["loading_gameplay_res_7"] = "그린 불도저는 많은 양의 피해량을 입히고 종종 한 발로도 가장 무거운 방탄복을 부술 수도 있습니다.", - ["loading_gameplay_res_8"] = "사이가/블랙 불도저는 피해량 대신 높은 연사력을 가지고 있으며 인상적인 드럼 탄창을 자랑합니다.", - ["loading_gameplay_res_9"] = "경기관총 도저/스컬도저는 강력한 제압 사격을 가하고 탄통이 비워질 때까지 사격합니다.", + ["loading_gameplay_res_8"] = "사이가/블랙 불도저는 피해량 대신 높은 연사력을 가지고 있으며 인상적인 드럼 탄창을 자랑합니다. 또한 다른 불도저보다 빠르게 달려오지만 체력이 훨씬 낮습니다.", + ["loading_gameplay_res_9"] = "경기관총 도저/스컬도저는 근거리에서 밀칠 수 있는 강한 제압 사격을 가하고 탄통이 비워질 때까지 사격합니다. 이들의 상의 장갑은 일반 도저보다 더 많은 피해를 견뎌낼 수 있지만 타이탄 도저만큼 느리게 움직입니다.", ["loading_gameplay_res_10"] = "베넬리 샷거너 도저는 미니건 도저를 대체하며, 그린 도저와 블랙 도저를 부정하게 조합하여 높은 연사력과 높은 피해량을 가합니다.", ["loading_gameplay_res_11"] = "목표 우선순위가 중요합니다. 모든 타입의 불도저는 경무장 SWAT보다 더 주의할 가치가 있습니다.", ["loading_gameplay_res_12"] = "데스 센텐스에서 불도저는 바이저가 깨지면 버서커 분노 상태에 돌입하여 공격력을 10%만큼 증가시킵니다.", @@ -4215,37 +4259,39 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_new_units_res_title"] = "레스토레이션 유닛 팁", ["loading_new_units_res_1"] = "옴니아 ASU는 주변 아군에게 노란색 레이저 부착물을 제공하여 피해량 보너스를 제공합니다.", ["loading_new_units_res_2"] = "LPF는 근접 공격에 약합니다.", - ["loading_new_units_res_3"] = "경무장 유닛은 LPF에 의해 과치료됩니다. 과치료된 적은 보라색 테두리으로 표시됩니다.", + ["loading_new_units_res_3"] = "경무장 유닛은 LPF에게 과치료를 받을 수 있습니다. 과치료 받는 중인 적은 보라색 윤곽선으로 표시됩니다.", ["loading_new_units_res_4"] = "타이탄 클로커는 거의 보이지 않게 만드는 고급 은폐 장비를 가지고 있지만 여전히 표준 클로커 장비의 이전 모델의 주변 소음을 가지고 있습니다.", ["loading_new_units_res_5"] = "타이탄 도저는 방해받지 않고 레일건의 잠재력을 최대한 발휘하기 위해 목표물과 거리를 두는 것을 선호합니다.", ["loading_new_units_res_6"] = "타이탄 명사수는 더 높은 연사력과 이동 중에 사격할 수 있는 대신 표준품의 탄당 피해량과 방탄복 관통력을 교환했습니다.", ["loading_new_units_res_7"] = "타이탄 명사수는 레이저 사이트를 사용하지 않는 대신 사격하면 보라색 예광을 남깁니다.", - ["loading_new_units_res_8"] = "타이탄 실드는 Thanatos 대물 저격소총, 찢고 죽인다 베이직을 찍었을때 OVE9000 톱, 센트리 건의 특수 철갑탄 탄으로만 뚫을 수 있습니다.", + ["loading_new_units_res_8"] = "타이탄 실드는 Thanatos 대물 저격소총, 찢고 죽인다 베이직을 찍었을때 OVE9000 톱, 센트리 건의 특수 철갑탄 탄으로 뚫을 수 있습니다. 방패를 충분히 오랫동안 쏘면 방패를 떨어질 수 있으므로, 방패를 떨이게 한 후 갑자기 바뀌는 전술 변화에 주의하세요.", ["loading_new_units_res_9"] = "캡틴 스프링과 타이탄 도저는 항상 추가 헤드샷 피해를 입습니다.", ["loading_new_units_res_10"] = "타이탄 테이저는 이동을 일시적으로 매우 감소되는 감전탄을 발사합니다. 맞으면 파란색 UI 오버레이로 표시됩니다.", ["loading_new_units_res_11"] = "베테랑 경찰은 헤드샷 이외의 어느것에 의해 죽을 경우 최루 가스를 떨어뜨립니다.", ["loading_new_units_res_12"] = "베테랑 경찰은 빠르게 움직여 맞추기 어렵게 만듭니다.", ["loading_new_units_res_13"] = "진압 장비를 착용한 타이탄 SWAT은 근접 공격에 저항을 다소 가지고 있습니다.", ["loading_new_units_res_14"] = "타이탄 SWAT은 인질로 잡거나 당신 편에 싸우도록 전향시킬 수도 없습니다.", - ["loading_new_units_res_15"] = "타이탄 SWAT은 경기관총과 자동 산탄총로 무장했습니다.", + ["loading_new_units_res_15"] = "타이탄 SWAT은 적을 밀어내거나 충격을 유발하는 경기관총과 자동 산탄총로 무장했습니다.", ["loading_new_units_res_16"] = "위험한 브라보 유닛은 프로 잡에서 PONR이 트리거될 때만 생성됩니다. 그들은 강화된 방탄복과 더 강력한 무기를 갖춘 강력하고 무자비한 적입니다.", ["loading_new_units_res_17"] = "브라보 유닛은 파편 수류탄을 던질 수 있습니다. 주변이 깜박이고 경고음을 듣고 카운트다운되는 것을 주의하십시오.", ["loading_new_units_res_18"] = "아칸은 그의 연구개발 회사인 DRAK에서 개발한 D-시리즈라고 불리는 자체 타이탄 유닛을 배치합니다.", ["loading_new_units_res_19"] = "척탄병은 장착된 언더베럴을 사용하여 원거리에서 최루 가스 유탄을 발사하여 구름 속에 있는 플레이어에게 피해를 줍니다. 데스 센텐스에선 대신 더 치명적이고 스태미나를 소모하는 신경가스 유탄으로 무장합니다.", - + ["loading_new_units_res_20"] = "타이탄 실드는 방패에 섬광 패널이 장착되어 있습니다. 패널이 충전 중일 때 패널을 쏘아 멈출 수 있으며, 그 과정에서 사용자를 잠시 기절시킬 수 있습니다.", + -- Captain Hints ["loading_captains_res_title"] = "레스토레이션 캡틴 팁", - ["loading_captains_res_1"] = "캡틴 서머스를 쓰러뜨리려면 먼저 닥과 그의 팀원들부터 목표로 삼으십시오. 그는 그의 모든 팀원들이 죽을 때까지 죽일 수 없으며 다른 두 사람은 닥이 죽을 때까지는 거의 무적입니다.", + ["loading_captains_res_1"] = "캡틴 서머스의 높은 피해 저항력은 그의 팀원이 제거될 때마다 감소됩니다. 닥은 살아있는 동안 나머지 팀원을 치료할 수 있으므로 그를 먼저 목표로 삼으십시오.", ["loading_captains_res_2"] = "캡틴 서머스를 안아주지 마십시오. 그는 화염 방사기로 당신을 녹일 것입니다.", - ["loading_captains_res_3"] = "캡틴 스프링은 엄청난 피해를 버틸 수 있지만 결국 쓰러질 것입니다. 그의 수류탄을 조심하고 느린 기동성을 이용하십시오.", + ["loading_captains_res_3"] = "캡틴 스프링은 엄청난 피해를 버틸 수 있지만 결국 쓰러질 것입니다. 그의 수류탄을 조심하고 그의 낮은 기동성을 이용하십시오.", ["loading_captains_res_4"] = "캡틴 스프링은 주기적으로 클러스터 고폭 수류탄을 던집니다.", - ["loading_captains_res_5"] = "캡틴 스프링은 위험할 수 있지만 엄청나게 느리고 좋지 않은 사거리를 가지고 있습니다.", + ["loading_captains_res_5"] = "캡틴 스프링은 밀침 능력을 가고 있어 위험하지만 엄청나게 느리고 사거리가 좋지 않습니다.", ["loading_captains_res_6"] = "캡틴 어텀은 공격할 때 큰 소리로 도발합니다.", - ["loading_captains_res_7"] = "다른 캡틴들과 달리 경찰은 기습 요소를 망치지 않기 위해 어텀의 도착을 알리지 않습니다.", - ["loading_captains_res_8"] = "캡틴 어텀은 한동안 맵에서 들키지 않으면 당신의 배치물를 점진적으로 비활성화할 것입니다. 비활성화된 배치물은 보라색 테투리로 표시되어 있으며 어텀을 찾아 쓰려트린 경우에만 다시 사용할 수 있습니다.", + ["loading_captains_res_7"] = "다른 캡틴들과 달리 경찰은 어텀의 기습 요소를 망치지 않기 위해 어텀의 도착을 알리지 않습니다.", + ["loading_captains_res_8"] = "캡틴 어텀은 한동안 활동 중일때 발각되지 않았다면 당신의 배치물를 점진적으로 비활성화할 것입니다. 비활성화된 배치물은 보라색 윤곽선으로 표시되어 있으며 어텀을 찾아 쓰려트린 경우에만 다시 사용할 수 있습니다.", ["loading_captains_res_9"] = "주먹 싸움에서 캡틴 어텀을 이기지 못할 것입니다. 시도조차 하지도 마십시오.", - ["loading_captains_res_10"] = "캡틴 윈터스는 폭발물과 불에 거의 면역이며 강력한 총알 저항을 갖고 있지만 근접 공격에 다소 취약합니다.", - ["loading_captains_res_11"] = "캡틴 윈터스의 방패는 완전히 뚫을 수 없습니다.", - ["loading_captains_res_12"] = "캡틴 윈터스는 맵을 돌아다니며 주변의 적들을 치료하거나 과치료합니다.", + ["loading_captains_res_10"] = "캡틴 윈터스는 총알 저항력이 더욱 강하고 폭발물과 불 저항력도 강합니다. 그럼에도 불구하고 근접 공격에는 다소 취약합니다.", + ["loading_captains_res_11"] = "캡틴 윈터스의 방패는 뚫을 수 없지만 충분한 피해를 흡수했다면 부서집니다. 타이탄 실드처럼 그의 두 번째 단계를 조심하세요.", + ["loading_captains_res_12"] = "캡틴 윈터스는 맵을 돌아다니며 주변의 적들을 치료하거나 과치료합니다.", + ["loading_captains_res_13"] = "캡틴 윈터스의 방패에는 타이탄 실드가 사용하는 것과 같은 섬광 패널이 있습니다. 그의 섬광 패널은 총에 맞아도 깨지지 않는다는 점을 명심하세요.", --Stealth Hints ["loading_stealth_res_title"] = "레스토레이션 스텔스 팁", ["loading_stealth_res_1"] = "보안 경비 지휘소는 오작동하는 카메라를 조사하기 위해 경비원을 보내고 이를 이용해 미끼로 사용할 수 있습니다.", @@ -4506,6 +4552,10 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["mutator_quickscope360"] = "독수리의 눈", ["mutator_quickscope360_desc"] = "저격수는 이제 소총을 100% 더 빠르게 조준합니다.", ["mutator_quickscope360_longdesc"] = "저격수는 이제 소총을 100% 더 빠르게 조준합니다.", + + ["mutator_goldfarbdozers"] = "이중 문제", + ["mutator_goldfarbdozers_desc"] = "생성되는 모든 불도저는 항상 쌍으로 배치됩니다.", + ["mutator_goldfarbdozers_longdesc"] = "생성되는 모든 불도저는 항상 쌍으로 배치됩니다.", --Crime spree modifier changes ["cn_crime_spree_brief"] = "크라임 스프리는 연속적으로 실행되는 무작위로 선택되는 하이스트의 끝없는 시리즈입니다. 하이스트를 완료할 때마다 등급과 보상이 증가합니다! 20 또는 26 등급마다 개조를 선택해야 하고 100 등급마다 리스크 레벨이 증가하므로 다음 습격을 완료하기가 더 어려워집니다. 리스크 레벨 600 이후에는 플레이어가 가지고 있는 무적 프레임의 양이 감소하기 시작하고 브라보 유닛이 정상적으로 스폰되기 시작합니다.\n\n##팀원을 초대하는 경우 랭크와 보상을 얻기 위해 합류하기 전에 자신만의 크라임 스프리를 시작했는지 확인하십시오.##", ["menu_cs_next_modifier_forced"] = "", @@ -4534,6 +4584,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["menu_cs_modifier_cloaker_tear_gas"] = "모든 HRT 유닛은 15%의 추가 확률로 ASU 유닛이 됩니다.", ["menu_cs_modifier_dozer_lmg"] = "그린 또는 블랙 불도저가 생성될 때마다 스컬도저로 교체될 확률이 생깁니다.", ["menu_cs_modifier_10secondsresponsetime"] = "모든 경찰 습격은 이제 최대 강도로 시작됩니다.", + ["menu_cs_modifier_dozerpairs"] = "불도저는 이제 항상 쌍으로 스폰됩니다.", ["bm_menu_skill"] = "팀원 부스트", @@ -4714,7 +4765,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) --Iron Man ["menu_juggernaut_beta_sc"] = "철인", - ["menu_juggernaut_beta_desc_sc"] = "베이직: #{owned}#$basic##\n개량형 복합 전술 조끼를 착용할 수 있게 됩니다.\n\n실드를 근접 공격하면 넘어뜨립니다.\n\n#{risk}#참고: 이 효과는## #{important_1}#캡틴 윈터스를## #{risk}#넘어뜨릴 수 없습니다.##\n\n에이스: #{owned}#$pro##\n방탄력이 #{skill_color}#10%##만큼 더 빨리 회복됩니다.\n\n원거리 무기로 실드을 공격할 때 일정 확률로 넘어뜨릴 수 있습니다. 무기의 총 대미지가 높을수록 넉백 확률이 증가합니다.", + ["menu_juggernaut_beta_desc_sc"] = "베이직: #{owned}#$basic##\n개량형 복합 전술 조끼를 착용할 수 있게 됩니다.\n\n실드를 근접 공격하면 넘어뜨립니다.\n\n#{risk}#참고:## #{important_1}#타이탄 실드## #{risk}#와## #{important_1}#캡틴 윈터스##는 #{risk}#넘어뜨릴 수 없습니다.##\n\n에이스: #{owned}#$pro##\n방탄력이 #{skill_color}#10%##만큼 더 빨리 회복됩니다.\n\n실드를 넘어뜨리는 능력이 원거리 무기까지 확장되며, 무기의 총 데미지가 높을수록 확률이 높아집니다.", --[[ SUPPORT SUBTREE ]]-- --Scavenger diff --git a/lua/sc/loc/locru.lua b/lua/sc/loc/locru.lua index 1cbf5b9198..5b3cd41699 100644 --- a/lua/sc/loc/locru.lua +++ b/lua/sc/loc/locru.lua @@ -881,6 +881,8 @@ Hooks:Add("LocalizationManagerPostInit", "ResMod_english_Localization", function ["menu_state_loading"] = "Загружается", ["menu_state_ingame"] = "В игре", + + ["menu_description"] = "План", -- ///Stuff ripped from the various locale files we had /// --Halloween Dozer Sword @@ -1124,6 +1126,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization", function(loc) --10-0 ["bm_wp_upg_i_tekna"] = "Набор 'Текна'", ["bm_wp_upg_i_tekna_desc"] = "Оружие стреляет только #{risk}#очередями##.", + ["bm_wally_desc"] = "#{important_2}#Эй, малой...##", --AMR16-- ["bm_wp_upg_i_m16a2"] = "Набор АМР-16 B3", @@ -1417,9 +1420,11 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization", function(loc) --["bm_w_derringer"] = "Деринжер", --Automag .44 --["bm_w_amt"] = "Автомаг .44", + --M2019 Blaster + ["thatgun_desc"] = "Вот это волына!\n\nИменно та самая!\n\n#{skill_color}#Наносит 50% урона через броню и может пробивать врагов.##", --Malorian 3516 --Киберсрань - ["whydoyoucome"] = "The only one of its kind, made specially for rockerboy Johnny Silverhand.\n\n#{skill_color}#Can pierce multiple enemies and their body armor.\nRounds ricochet off surfaces while firing from the hip and pierce walls while aiming.\nWeapon Butt attacks shoot out a short ranged wave of fire.##", + ["whydoyoucome"] = "Единственный в своем роде, сделанный специально для Джонни Сильверхенда.\n\n#{skill_color}#Может пробивать врагов и их броню.\nВо время стрельбы от бедра пули будут рикошетить от поверхностей. Пули пробивают стены, если стрелять в режиме прицеливания.\nУдар прикладом выпускает волну огня в небольшом радиусе.##", --Colt Detective --["bm_w_coltds"] = "Кросскилл Детектив", ["bm_lemon_dmc_desc"] = "Мечтаете о скрытном и мощном револьвере? Мечты сбываются.\n\n#{skill_color}#Наносит двойной урон при атаке сзади.##", @@ -2583,6 +2588,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_w_colt_1911"] = "Crosskill Operator II", ["bm_w_x_1911"] = "Mustang & Sally", ["bm_w_m1911"] = "Crosskill A1", + ["bm_w_x_m1911"] = "Price & MacTavish", ["bm_w_shrew"] = "Crosskill Guard", ["bm_w_x_shrew"] = "Barry & Paul", ["bm_w_usp"] = "Interceptor-45", @@ -2630,7 +2636,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_w_x_scorpion"] = "Парные Cobra", ["bm_w_coal"] = "Tatonka", ["bm_w_vityaz"] = "AK Gen 21 Tactical", - ["bm_w_shepheard"] = "FIK PC9"", + ["bm_w_shepheard"] = "FIK PC9", ["bm_w_mp5"] = "Compact-5", ["bm_w_x_mp5"] = "Парные Compact-5", ["bm_w_m45"] = "Swedish K", @@ -2811,6 +2817,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_w_colt_1911"] = "Кросскилл Оператор II", ["bm_w_x_1911"] = "Мустанг и Сэлли", ["bm_w_m1911"] = "Кроскилл А1", + ["bm_w_x_m1911"] = "Прайс и МакТавиш", ["bm_w_shrew"] = "Кроскилл Гард", ["bm_w_x_shrew"] = "Барри и Пол", ["bm_w_usp"] = "Интерсептор-45", @@ -2863,7 +2870,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Weapons", function(loc ["bm_w_x_scorpion"] = "Парные Кобры", ["bm_w_coal"] = "Татонка", ["bm_w_vityaz"] = "АК 21 Тактический", - ["bm_w_shepheard"] = "ФИК ПС9"", + ["bm_w_shepheard"] = "ФИК ПС9", ["bm_w_mp5"] = "Компакт-5", ["bm_w_x_mp5"] = "Парные Компакт-5", ["bm_w_m45"] = "Карл M-45", @@ -4227,8 +4234,8 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_gameplay_res_5"] = "Грабитель вдали от товарищей - идеальная цель для Клокеров.", ["loading_gameplay_res_6"] = "Клокеры наносят урон напрямую здоровью, когда атакуют пинком. Этот урон можно уменьшить, используя Стойкость или навык 'Контрудар'.", ["loading_gameplay_res_7"] = "Зеленые Бульдозеры наносят много урона и могут пробить даже самую тяжелую броню с одного выстрела.", - ["loading_gameplay_res_8"] = "Черные Бульдозеры (Бульдозеры с Сайгой) обладают высокой скорострельностью и большим магазином.", - ["loading_gameplay_res_9"] = "Дозеры с пулеметами/Скаллдозеры ведут огонь на поражение и не останавливаются, пока не отстреляют всю ленту.", + ["loading_gameplay_res_8"] = "Черные Бульдозеры (Бульдозеры с Сайгой) обладают высокой скорострельностью и большим магазином. Помимо этого они бегают быстрее всех дозеров.", + ["loading_gameplay_res_9"] = "Дозеры с пулеметами/Скаллдозеры ведут огонь на поражение и не останавливаются, пока не отстреляют всю ленту. Они передвигаются так же медленно, как и Титановые Дозеры.", ["loading_gameplay_res_10"] = "Дозеры с дробовиками Бенелли (Бенелли Дозеры) заменяют Дозеров с миниганами - у них и высокий урон, и высокая скорость стрельбы. Они совмещают опасность Зеленого и скорость Черного Дозеров.", ["loading_gameplay_res_11"] = "Приоритет целей важен. Бульдозеру явно стоит уделить больше внимания, чем обычному спецназовцу.", ["loading_gameplay_res_12"] = "На Смертном приговоре, Бульдозеры впадают в ярость, когда их стекло сломано, что увеличивает их урон на 10%.", @@ -4251,13 +4258,13 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) --New Units Hints ["loading_new_units_res_title"] = "Restoration - советы о новых противниках", ["loading_new_units_res_1"] = "OMNIA ASU (агенты поддержки) усиливают урон товарищей при помощи желтых лазеров.", - ["loading_new_units_res_2"] = "LPF получает больше урона от оружия ближнего боя.", + ["loading_new_units_res_2"] = "LPF получает больше урона от оружия ближнего боя. Враги помечены фиолетовым цветом, когда их лечит LPF.", ["loading_new_units_res_3"] = "Слабые противники получают дополнительное здоровье от LPF. В этом случае они помечаются фиолетовым цветом.", ["loading_new_units_res_4"] = "Титановые Клокеры обладают продвинутой экипировкой, которая делает их практически невидимыми, но издает такие же звуки, как экипировка стандартных Клокеров.", ["loading_new_units_res_5"] = "Титановые Дозеры предпочитают держать грабителей на расстоянии, чтобы выцелить их из своего Рельсотрона.", ["loading_new_units_res_6"] = "Титановые Снайперы не имеют высокого урона и пробития брони, как у их стандартных соратников, зато могут передвигаться и обладают высокой скоростью стрельбы.", ["loading_new_units_res_7"] = "Вместо лазеров, Титановые Снайперы используют фиолетовые трассеры.", - ["loading_new_units_res_8"] = "Титановые щиты можно пробить только снайперской винтовкой Thanatos, пилой OVE9000 (с навыком 'Рвать и метать') и особыми бронебойными патронами у турелей.", + ["loading_new_units_res_8"] = "Титановые щиты можно пробить только снайперской винтовкой Thanatos (и ее эквиваленты), пилой OVE9000 (с навыком 'Рвать и метать') и особыми бронебойными патронами у турелей. Однако, щит можно сбить, если вести по нему продолжительный огонь.", ["loading_new_units_res_9"] = "Капитан Спринг и Титановые Дозеры всегда получают дополнительный урон в голову.", ["loading_new_units_res_10"] = "Титановые Тазеры используют электрические боеприпасы, которые ненадолго замедляют вас. Экран засветится синим, если он выстрелит в вас.", ["loading_new_units_res_11"] = "Копы-ветераны при смерти бросят слезоточивую гранату, если не убить их в голову.", @@ -4269,6 +4276,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_new_units_res_17"] = "Отряды Браво используют осколочные гранаты. Обращайте внимание на их уникальные звук и эффект.", ["loading_new_units_res_18"] = "АКАН использует собственных Титановых юнитов - так называемая D-СЕРИЯ, разработанная корпорацией DRAK.", ["loading_new_units_res_19"] = "Гренадер использует гранаты со слезоточивым газом, которые наносят продолжительный урон игрокам, стоящим в облаке. На 'Смертном приговоре' он вооружен более смертоносным паралитическим газом, который также уменьшает выносливость.", + ["loading_new_units_res_20"] = "Титановые щиты могут ослепить вас, используя свой щит. Следите за красными огнями и звуками, которые издают щиты во время подготовки к вспышке. Вы можете выстрелить в световую панель во время зарядки, чтобы оглушить противника.", --Captain Hints ["loading_captains_res_title"] = "Restoration - советы о капитанах", ["loading_captains_res_1"] = "Чтобы победить капитана Саммерса, нужно сначала обезвредить его команду, начиная с Дока. Саммерс будет неубиваем, пока вся его команда жива; остальные двое будут практически неуязвимы, пока жив Док.", @@ -4281,7 +4289,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_captains_res_8"] = "Капитан Отем будет постепенно отключать ваше снаряжение, если дать ему оставаться незамеченным продолжительное время. Отключенное снаряжение помечено фиолетовым и будет восстановлено только после смерти Отема.", ["loading_captains_res_9"] = "Вряд ли у вас получится победить капитана Отема в кулачном бою. Не стоит пробовать.", ["loading_captains_res_10"] = "Капитан Винтерс практически неуязвим к взрывчатке и огню, обладает сильной защитой от пуль, но достаточно слаб в ближнем бою.", - ["loading_captains_res_11"] = "Щит Капитана Винтерса совершенно невозможно пробить.", + ["loading_captains_res_11"] = "Щит Капитана Винтерса совершенно невозможно пробить, но вы можете попытаться выбить его из рук. Если будете вести продолжительный огонь по щиту, то Винтерс сбросит его и войдет в ярость.", ["loading_captains_res_12"] = "Капитан Винтерс двигается по карте, постоянно подлечивая врагов.", --Stealth Hints ["loading_stealth_res_title"] = "Restoration - советы о стелсе", @@ -4533,6 +4541,10 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["mutator_quickscope360"] = "Орлиный глаз", ["mutator_quickscope360_desc"] = "Снайперы теперь прицеливаются на 100% быстрее.", ["mutator_quickscope360_longdesc"] = "Снайперы теперь прицеливаются на 100% быстрее.", + + ["mutator_goldfarbdozers"] = "Двойные неприятности", + ["mutator_goldfarbdozers_desc"] = "Все бульдозеры теперь появляются парами.", + ["mutator_goldfarbdozers_longdesc"] = "Все бульдозеры теперь появляются парами. Не влияет на заскриптованных бульдозеров.", --Crime spree modifier changes ["cn_crime_spree_brief"] = "Серия преступлений - режим, в котором вас предстоит сыграть бесконечную серию ограблений, идущих подряд. С каждым пройденным ограблением, ваши Ранг и Награда буду повышаться! Каждый 20-й и 26-й ранг вам предстоит выбрать модификатор, а каждые 100 рангов повысится уровень риска, что сделает последующие ограбления сложнее. После 600 ранга, задержка на получение урона будет уменьшаться, и среди обычных врагов начнут появляться отряды Браво.\n\n##При игре с друзьями, не забудьте убедиться, что они начали свою Серию преступлений, или они не смогут получать Ранги и Награды.##", ["menu_cs_next_modifier_forced"] = "", @@ -4561,6 +4573,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["menu_cs_modifier_cloaker_tear_gas"] = "Все агенты по спасению заложников получают дополнительный 15% шанс стать Титановыми агентами.", ["menu_cs_modifier_dozer_lmg"] = "Когда появляется Зеленый или Черный Бульдозер, есть шанс, что его заменит Скаллдозер.", ["menu_cs_modifier_10secondsresponsetime"] = "Полицейские штурмы сразу имеют максимальную интенсивность.", + ["menu_cs_modifier_dozerpairs"] = "Все бульдозеры теперь появляются парами.", ["bm_menu_skill"] = "Бонусы для команды", @@ -4733,7 +4746,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) --Iron Man ["menu_juggernaut_beta_sc"] = "Железный человек", - ["menu_juggernaut_beta_desc_sc"] = "БАЗОВЫЙ: #{owned}#$basic##\nОткрывает возможность носить #{skill_color}#Улучшенный комбинированный тактический бронежилет.##\n\nПри ударе Щитов оружием ближнего боя, они отбрасываются от вашей силы.\n\nПИКОВЫЙ: #{owned}#$pro##\nОгнестрельное оружие получает шанс отбросить Щиты. Шанс отбрасывания зависит от урона оружия.\n\nВаша броня восстанавливается на #{skill_color}#$skill_value_p1## быстрее.", + ["menu_juggernaut_beta_desc_sc"] = "БАЗОВЫЙ: #{owned}#$basic##\nОткрывает возможность носить #{skill_color}#Улучшенный комбинированный тактический бронежилет.##\n\nПри ударе Щитов оружием ближнего боя, они отбрасываются от вашей силы.\n#{risk}#Не работает против## #{important_1}#Титановых Щитов## #{risk}#и## #{important_1}#Капитана Винтерса.##\n\nПИКОВЫЙ: #{owned}#$pro##\nОгнестрельное оружие получает шанс отбросить Щиты. Шанс отбрасывания зависит от урона оружия.\n\nВаша броня восстанавливается на #{skill_color}#$skill_value_p1## быстрее.", --[[ SUPPORT SUBTREE ]]-- --Scavenger diff --git a/lua/sc/loc/loczh.lua b/lua/sc/loc/loczh.lua index 4518fc33c5..2ae51c93c7 100644 --- a/lua/sc/loc/loczh.lua +++ b/lua/sc/loc/loczh.lua @@ -4345,6 +4345,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["loading_new_units_res_17"] = "Bravo临界反应部队的血量和伤害都比一般单位要强上许多,他们进攻时会频繁地投掷破片手雷,你最好不要只在一个小坑位上蹲太久。", ["loading_new_units_res_18"] = "阿肯拥有他自己的D项目系列泰坦部队。他们看起来不同但实际属性是相同的。他们的整体视觉效果和穿着特征也是基本一致的,因此你可以轻易地认出不同的兵种。", ["loading_new_units_res_19"] = "掷弹兵的武器有能发射催泪瓦斯的下挂件,站在瓦斯中的玩家会持续受到伤害。在\"死刑宣判\"难度下,他装备了更致命的、伤血更快且会迅速清空你耐力的毒气弹。", + ["loading_new_units_res_20"] = "Titan Shields utilizes flashes that will use against you. Watch for red lights and beeping sounds. You can shoot shield's flash panels to stun them as they charge.", -- Captain Hints ["loading_captains_res_title"] = "恢复MOD劫匪小贴士(四季队长)", ["loading_captains_res_1"] = "要击败夏日队长,得先从他的医疗单位入手。夏日队长的队员死亡前,队长几乎是无敌的。而他的左右护法在医疗兵还活着时几乎是无懈可击的。", @@ -4620,6 +4621,10 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["mutator_quickscope360"] = "Eagle Eye", ["mutator_quickscope360_desc"] = "Snipers now aim their rifles 100% faster.", ["mutator_quickscope360_longdesc"] = "Snipers now aim their rifles 100% faster.", + + ["mutator_goldfarbdozers"] = "Double Firepower", + ["mutator_goldfarbdozers_desc"] = "All Bulldozers that spawn will always deploy in pairs.", + ["mutator_goldfarbdozers_longdesc"] = "All Bulldozers that spawn will always deploy in pairs.", -- Crime spree modifier changes ["cn_crime_spree_brief"] = "\"罪无止境\"是一系列随机选取并需要连续完成的劫案组合。你完成的每次一次劫案都会为你增加罪无止境等级与奖励。每过20级或26级,你都需要选择一次附加难度因子;每过100级都会增加劫案的基础难度(如枪林弹雨到祸乱横行),这会使劫案更难完成。等级600之后,玩家的无敌帧将会逐渐减少,Bravo临界反应部队将会开始生成。\n\n##如果你想邀请你的好友一起玩,请先确保他们开始了罪无止境以一起获得等级和奖励##", @@ -4648,6 +4653,7 @@ Hooks:Add("LocalizationManagerPostInit", "SC_Localization_Skills", function(loc) ["menu_cs_modifier_cloaker_smoke"] = "幻影特工现在有50%的概率在他们闪避时扔出一颗闪光弹。", ["menu_cs_modifier_cloaker_tear_gas"] = "所有人质救援队的单位都有额外15%的概率被替换为支援兵。", ["menu_cs_modifier_dozer_lmg"] = "每当有一只绿熊或黑熊被生成时,它都有概率被替换为一只骷髅熊。", + ["menu_cs_modifier_dozerpairs"] = "Bulldozers will now always spawn in pairs.", ["bm_menu_skill"] = "小队加成", diff --git a/lua/sc/managers/mission/elementspawnenemydummy.lua b/lua/sc/managers/mission/elementspawnenemydummy.lua index dc6eb04357..ed35b30104 100644 --- a/lua/sc/managers/mission/elementspawnenemydummy.lua +++ b/lua/sc/managers/mission/elementspawnenemydummy.lua @@ -2107,7 +2107,7 @@ local murkywater_normal_overkill = { --fbi ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi/ene_murkywater_light_fbi"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_1/ene_fbi_swat_1", - ["units/pd2_dlc_bph/characters/ene_murkywater_light_r870/ene_murkywater_light_r870"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_2/ene_fbi_swat_2", + ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi_r870/ene_murkywater_light_fbi_r870"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_2/ene_fbi_swat_2", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_g36/ene_murkywater_heavy_g36"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_1/ene_fbi_heavy_1", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_shotgun/ene_murkywater_heavy_shotgun"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_r870/ene_fbi_heavy_r870", @@ -2220,7 +2220,7 @@ local murkywater_mayhem = { --fbi ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi/ene_murkywater_light_fbi"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_1/ene_fbi_swat_1", - ["units/pd2_dlc_bph/characters/ene_murkywater_light_r870/ene_murkywater_light_r870"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_2/ene_fbi_swat_2", + ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi_r870/ene_murkywater_light_fbi_r870"] = "units/pd2_mod_sharks/characters/ene_fbi_swat_2/ene_fbi_swat_2", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_g36/ene_murkywater_heavy_g36"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_1/ene_fbi_heavy_1", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_shotgun/ene_murkywater_heavy_shotgun"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_r870/ene_fbi_heavy_r870", @@ -2332,7 +2332,7 @@ local murkywater_deathwish = { --fbi ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi/ene_murkywater_light_fbi"] = "units/pd2_mod_sharks/characters/ene_city_swat_1/ene_city_swat_1", - ["units/pd2_dlc_bph/characters/ene_murkywater_light_r870/ene_murkywater_light_r870"] = "units/pd2_mod_sharks/characters/ene_city_swat_2/ene_city_swat_2", + ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi_r870/ene_murkywater_light_fbi_r870"] = "units/pd2_mod_sharks/characters/ene_city_swat_2/ene_city_swat_2", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_g36/ene_murkywater_heavy_g36"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_1/ene_fbi_heavy_1", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_shotgun/ene_murkywater_heavy_shotgun"] = "units/pd2_mod_sharks/characters/ene_fbi_heavy_r870/ene_fbi_heavy_r870", @@ -2445,7 +2445,7 @@ local murkywater_hecu = { --fbi ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi/ene_murkywater_light_fbi"] = "units/pd2_mod_sharks/characters/ene_zeal_city_1/ene_zeal_city_1", - ["units/pd2_dlc_bph/characters/ene_murkywater_light_r870/ene_murkywater_light_r870"] = "units/pd2_mod_sharks/characters/ene_zeal_city_2/ene_zeal_city_2", + ["units/pd2_dlc_bph/characters/ene_murkywater_light_fbi_r870/ene_murkywater_light_fbi_r870"] = "units/pd2_mod_sharks/characters/ene_zeal_city_2/ene_zeal_city_2", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_g36/ene_murkywater_heavy_g36"] = "units/pd2_mod_sharks/characters/ene_zeal_swat_heavy/ene_zeal_swat_heavy", ["units/pd2_dlc_bph/characters/ene_murkywater_heavy_shotgun/ene_murkywater_heavy_shotgun"] = "units/pd2_mod_sharks/characters/ene_zeal_swat_heavy_r870/ene_zeal_swat_heavy_r870", diff --git a/lua/sc/managers/modifiersmanager.lua b/lua/sc/managers/modifiersmanager.lua index fef8121937..266b315987 100644 --- a/lua/sc/managers/modifiersmanager.lua +++ b/lua/sc/managers/modifiersmanager.lua @@ -331,14 +331,12 @@ else ["units/payday2/characters/ene_fbi_swat_1_sc/ene_fbi_swat_1_sc"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/payday2/characters/ene_city_swat_1_sc/ene_city_swat_1_sc"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/pd2_mod_lapd/characters/ene_city_swat_1/ene_city_swat_1"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", - ["units/pd2_mod_fbi/characters/ene_city_swat_1/ene_city_swat_1"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/pd2_dlc_gitgud/characters/ene_zeal_city_1/ene_zeal_city_1"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/payday2/characters/ene_fbi_swat_3/ene_fbi_swat_3"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/pd2_mod_lapd/characters/ene_fbi_swat_3/ene_fbi_swat_3"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/payday2/characters/ene_city_swat_3_sc/ene_city_swat_3_sc"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/pd2_mod_lapd/characters/ene_city_swat_3/ene_city_swat_3"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", - ["units/pd2_mod_fbi/characters/ene_city_swat_3/ene_city_swat_3"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", ["units/pd2_dlc_gitgud/characters/ene_zeal_city_3/ene_zeal_city_3"] = "units/pd2_mod_bravo/characters/ene_bravo_rifle/ene_bravo_rifle", --Bravo Shotgun @@ -346,7 +344,6 @@ else ["units/payday2/characters/ene_fbi_swat_2_sc/ene_fbi_swat_2_sc"] = "units/pd2_mod_bravo/characters/ene_bravo_shotgun/ene_bravo_shotgun", ["units/payday2/characters/ene_city_swat_2_sc/ene_city_swat_2_sc"] = "units/pd2_mod_bravo/characters/ene_bravo_shotgun/ene_bravo_shotgun", ["units/pd2_mod_lapd/characters/ene_city_swat_2/ene_city_swat_2"] = "units/pd2_mod_bravo/characters/ene_bravo_shotgun/ene_bravo_shotgun", - ["units/pd2_mod_fbi/characters/ene_city_swat_2/ene_city_swat_2"] = "units/pd2_mod_bravo/characters/ene_bravo_shotgun/ene_bravo_shotgun", ["units/pd2_dlc_gitgud/characters/ene_zeal_city_2/ene_zeal_city_2"] = "units/pd2_mod_bravo/characters/ene_bravo_shotgun/ene_bravo_shotgun", --Bravo LMG diff --git a/lua/sc/managers/mutatorsmanager.lua b/lua/sc/managers/mutatorsmanager.lua index c236d2b9cf..110283e850 100644 --- a/lua/sc/managers/mutatorsmanager.lua +++ b/lua/sc/managers/mutatorsmanager.lua @@ -44,6 +44,8 @@ function MutatorsManager:init() MutatorQuickScope360:new(self), MutatorCrazyTaser:new(self), MutatorMasterDodger:new(self), + MutatorGoldfarbDozers:new(self), + --MutatorFactionsReplacer:new(self), MutatorBirthday:new(self) } self._active_mutators = {} diff --git a/lua/sc/managers/statisticsmanager.lua b/lua/sc/managers/statisticsmanager.lua index a76307ed4b..342835d639 100644 --- a/lua/sc/managers/statisticsmanager.lua +++ b/lua/sc/managers/statisticsmanager.lua @@ -262,7 +262,14 @@ function StatisticsManager:init() melee = 0, explosion = 0, tied = 0 - } + } + self._defaults.killed.phalanx_vip_break = { + count = 0, + head_shots = 0, + melee = 0, + explosion = 0, + tied = 0 + } self._defaults.killed.city_swat_guard = { count = 0, head_shots = 0, diff --git a/lua/sc/modifiers/new/modifierdozerpairs.lua b/lua/sc/modifiers/new/modifierdozerpairs.lua new file mode 100644 index 0000000000..213d243f39 --- /dev/null +++ b/lua/sc/modifiers/new/modifierdozerpairs.lua @@ -0,0 +1,139 @@ +--Just be careful of not meeting two Russian Titandozers +ModifierDozerPairs = ModifierDozerPairs or class(BaseModifier) +ModifierDozerPairs._type = "ModifierDozerPairs" +ModifierDozerPairs.name_id = "none" +ModifierDozerPairs.desc_id = "menu_cs_modifier_dozerpairs" + + +function ModifierDozerPairs:init(data) + tweak_data.group_ai.enemy_spawn_groups.GREEN_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "FBI_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.GREEN_tank_DW, + rank = 3 + }, + { + unit = "boom_M4203", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.ELITE_boom, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.ELITE_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + + tweak_data.group_ai.enemy_spawn_groups.BLACK_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "BLACK_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.BLACK_tank_DW, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.ELITE_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + + tweak_data.group_ai.enemy_spawn_groups.SKULL_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "SKULL_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.SKULL_tank, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_R870", + freq = 1, + amount_max = 3, + tactics = tweak_data.group_ai._tactics.ELITE_swat_shotgun, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + + tweak_data.group_ai.enemy_spawn_groups.TIT_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "TIT_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.TIT_tank, + rank = 3 + }, + { + unit = "GS_heavy_R870", + freq = 1, + amount_min = 1, + tactics = tweak_data.group_ai._tactics.ELITE_heavy_shotgun, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } +end \ No newline at end of file diff --git a/lua/sc/mutators/new/mutatorfactionsreplacer.lua b/lua/sc/mutators/new/mutatorfactionsreplacer.lua new file mode 100644 index 0000000000..f1265f5ce6 --- /dev/null +++ b/lua/sc/mutators/new/mutatorfactionsreplacer.lua @@ -0,0 +1,95 @@ +MutatorFactionsReplacer = MutatorFactionsReplacer or class(BaseMutator) +MutatorFactionsReplacer._type = "MutatorFactionsReplacer" +MutatorFactionsReplacer.name_id = "mutator_faction_replace" +MutatorFactionsReplacer.desc_id = "mutator_faction_replace_desc" +MutatorFactionsReplacer.has_options = true +MutatorFactionsReplacer.reductions = { + money = 0, + exp = 0 +} +MutatorFactionsReplacer.disables_achievements = false +MutatorFactionsReplacer.categories = { + "enemies" +} +MutatorFactionsReplacer.icon_coords = { + 2, + 2 +} + +function MutatorFactionsReplacer:register_values(mutator_manager) + self:register_value("faction_replace", "america", "fr") +end + +function MutatorFactionsReplacer:name(lobby_data) + local name = MutatorFactionsReplacer.super.name(self) + + if self:_mutate_name("faction_replace") then + return string.format("%s - %s", name, managers.localization:text("menu_mutator_faction_replace_" .. tostring(self:value("faction_replace")))) + else + return name + end +end + +function MutatorFactionsReplacer:get_faction_override() + return self:value("faction_replace") +end + +function MutatorFactionsReplacer:setup_options_gui(node) + local params = { + callback = "_update_mutator_value", + name = "faction_selector_choice", + text_id = "menu_mutator_faction_replace", + filter = true, + update_callback = callback(self, self, "_update_faction") + } + local data_node = { + { + value = "america", + text_id = "menu_mutator_faction_replace_america", + _meta = "option" + }, + { + value = "murkywater", + text_id = "menu_mutator_faction_replace_murkywater", + _meta = "option" + }, + { + value = "russia", + text_id = "menu_mutator_faction_replace_russia", + _meta = "option" + }, + { + value = "federales", + text_id = "menu_mutator_faction_replace_federales", + _meta = "option" + }, + { + value = "zombie", + text_id = "menu_mutator_faction_replace_zombie", + _meta = "option" + }, + { + value = "nypd", + text_id = "menu_mutator_faction_replace_nypd", + _meta = "option" + }, + { + value = "lapd", + text_id = "menu_mutator_faction_replace_lapd", + _meta = "option" + }, + type = "MenuItemMultiChoice" + } + local new_item = node:create_item(data_node, params) + + new_item:set_value(self:get_faction_override()) + node:add_item(new_item) + + self._node = node + + return new_item +end + +function MutatorFactionsReplacer:_update_faction(item) + self:set_value("faction_replace", item:value()) +end \ No newline at end of file diff --git a/lua/sc/mutators/new/mutatorgoldfarbdozers.lua b/lua/sc/mutators/new/mutatorgoldfarbdozers.lua new file mode 100644 index 0000000000..a125c346b3 --- /dev/null +++ b/lua/sc/mutators/new/mutatorgoldfarbdozers.lua @@ -0,0 +1,455 @@ +--Just be careful of not meeting two Russian Titandozers +MutatorGoldfarbDozers = MutatorGoldfarbDozers or class(BaseMutator) +MutatorGoldfarbDozers._type = "MutatorGoldfarbDozers" +MutatorGoldfarbDozers.name_id = "mutator_goldfarbdozers" +MutatorGoldfarbDozers.desc_id = "mutator_goldfarbdozers_desc" +MutatorGoldfarbDozers.reductions = { + money = 0, + exp = 0 +} +MutatorGoldfarbDozers.disables_achievements = false +MutatorGoldfarbDozers.categories = {"crime_spree"} +MutatorGoldfarbDozers.icon_coords = { + 6, + 4 +} + +function MutatorGoldfarbDozers:setup() + local difficulty = Global.game_settings and Global.game_settings.difficulty or "normal" + local difficulty_index = tweak_data:difficulty_to_index(difficulty) + + --Dozer Pairs, not a pretty way to do it but it works + if difficulty_index <= 5 then + tweak_data.group_ai.enemy_spawn_groups.GREEN_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "FBI_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.GREEN_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 6 then + tweak_data.group_ai.enemy_spawn_groups.GREEN_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "FBI_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.GREEN_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 7 then + tweak_data.group_ai.enemy_spawn_groups.GREEN_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "FBI_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.GREEN_tank_DW, + rank = 3 + }, + { + unit = "boom_M4203", + freq = 0.5, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.ELITE_boom, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.DW_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + else + tweak_data.group_ai.enemy_spawn_groups.GREEN_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "FBI_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.GREEN_tank_DW, + rank = 3 + }, + { + unit = "boom_M4203", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.ELITE_boom, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.ELITE_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + end + + if difficulty_index <= 5 then + tweak_data.group_ai.enemy_spawn_groups.BLACK_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "BLACK_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.BLACK_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 6 then + tweak_data.group_ai.enemy_spawn_groups.BLACK_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "BLACK_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.BLACK_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 7 then + tweak_data.group_ai.enemy_spawn_groups.BLACK_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "BLACK_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.BLACK_tank_DW, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.5, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.DW_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + else + tweak_data.group_ai.enemy_spawn_groups.BLACK_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "BLACK_tank", + freq = 1, + amount_min = 1, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.BLACK_tank_DW, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + tactics = tweak_data.group_ai._tactics.ELITE_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + end + + if difficulty_index <= 5 then + tweak_data.group_ai.enemy_spawn_groups.SKULL_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "SKULL_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.SKULL_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 6 then + tweak_data.group_ai.enemy_spawn_groups.SKULL_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "SKULL_tank", + freq = 1, + amount_min = 1, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.SKULL_tank, + rank = 2 + }, + { + unit = "FBI_swat_M4", + freq = 1, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.FBI_swat_rifle, + rank = 1 + } + } + } + elseif difficulty_index == 7 then + tweak_data.group_ai.enemy_spawn_groups.SKULL_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "SKULL_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.SKULL_tank, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.5, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_M4", + freq = 1, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.DW_swat_rifle, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + else + tweak_data.group_ai.enemy_spawn_groups.SKULL_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "SKULL_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.SKULL_tank, + rank = 3 + }, + { + unit = "CS_tazer", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.DW_tazer, + rank = 2 + }, + { + unit = "GS_swat_R870", + freq = 1, + amount_max = 3, + tactics = tweak_data.group_ai._tactics.ELITE_swat_shotgun, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 1, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + end + + if difficulty_index <= 5 then + tweak_data.group_ai.enemy_spawn_groups.TIT_tanks = { + amount = {3, 4}, + spawn = { + { + unit = "TIT_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.TIT_tank, + rank = 2 + }, + { + unit = "FBI_heavy_G36_w", + freq = 1, + amount_min = 1, + tactics = tweak_data.group_ai._tactics.FBI_heavy, + rank = 1 + } + } + } + elseif difficulty_index == 6 then + tweak_data.group_ai.enemy_spawn_groups.TIT_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "TIT_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.TIT_tank, + rank = 2 + }, + { + unit = "FBI_heavy_G36_w", + freq = 1, + amount_min = 1, + tactics = tweak_data.group_ai._tactics.FBI_heavy, + rank = 1 + } + } + } + elseif difficulty_index == 7 then + tweak_data.group_ai.enemy_spawn_groups.TIT_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "TIT_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.TIT_tank, + rank = 3 + }, + { + unit = "GS_heavy_G36_w", + freq = 1, + amount_min = 1, + tactics = tweak_data.group_ai._tactics.MH_heavy, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + else + tweak_data.group_ai.enemy_spawn_groups.TIT_tanks = { + amount = {4, 5}, + spawn = { + { + unit = "TIT_tank", + freq = 1, + amount_min = 2, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.TIT_tank, + rank = 3 + }, + { + unit = "GS_heavy_R870", + freq = 1, + amount_min = 1, + tactics = tweak_data.group_ai._tactics.ELITE_heavy_shotgun, + rank = 1 + }, + { + unit = "medic_M4", + freq = 0.75, + amount_max = 2, + tactics = tweak_data.group_ai._tactics.FBI_medic_flank, + rank = 2 + } + } + } + end +end \ No newline at end of file diff --git a/lua/sc/network/base/networkmanager.lua b/lua/sc/network/base/networkmanager.lua index 876a432701..65379fc308 100644 --- a/lua/sc/network/base/networkmanager.lua +++ b/lua/sc/network/base/networkmanager.lua @@ -4,4 +4,11 @@ -- self:register_handler("RestorationMod__connection", RestorationMod__ConnectionNetworkHandler) -- self:register_handler("RestorationMod__unit", RestorationMod__UnitNetworkHandler) -- end --- end) \ No newline at end of file +-- end) +NetworkMatchMakingEPIC._BUILD_SEARCH_INTEREST_KEY = "restoration_12.2.2" +NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY = "restoration_12.2.2" +--Compatibility for BeardLib Editor just in case. Maybe need shift MM key stuff in networkmanager +if BLE and BLE:RunningFix() then + NetworkMatchMakingEPIC._BUILD_SEARCH_INTEREST_KEY = NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY .. "_editor" + NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY = NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY .. "_editor" +end \ No newline at end of file diff --git a/lua/sc/network/matchmaking/networkmatchmakingepic.lua b/lua/sc/network/matchmaking/networkmatchmakingepic.lua deleted file mode 100644 index 7d6c0cae3a..0000000000 --- a/lua/sc/network/matchmaking/networkmatchmakingepic.lua +++ /dev/null @@ -1,5 +0,0 @@ -NetworkMatchMakingEPIC._BUILD_SEARCH_INTEREST_KEY = "restoration_12.2.1" ---Compatibility for BeardLib Editor just in case. Maybe need shift MM key stuff in networkmanager -if BLE and BLE:RunningFix() then -NetworkMatchMakingEPIC._BUILD_SEARCH_INTEREST_KEY = NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY .. "_editor" -end \ No newline at end of file diff --git a/lua/sc/network/matchmaking/networkmatchmakingsteam.lua b/lua/sc/network/matchmaking/networkmatchmakingsteam.lua deleted file mode 100644 index c60890bb9a..0000000000 --- a/lua/sc/network/matchmaking/networkmatchmakingsteam.lua +++ /dev/null @@ -1,5 +0,0 @@ -NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY = "restoration_12.2.1" ---Compatibility for BeardLib Editor just in case -if BLE and BLE:RunningFix() then -NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY = NetworkMatchMakingSTEAM._BUILD_SEARCH_INTEREST_KEY .. "_editor" -end \ No newline at end of file diff --git a/lua/sc/tweak_data/blackmarkettweakdata.lua b/lua/sc/tweak_data/blackmarkettweakdata.lua index 372d23a312..8e04132678 100644 --- a/lua/sc/tweak_data/blackmarkettweakdata.lua +++ b/lua/sc/tweak_data/blackmarkettweakdata.lua @@ -1847,6 +1847,7 @@ function BlackMarketTweakData:_init_projectiles(tweak_data) "underbarrel_electric_groza", "underbarrel_m203_groza", "copr_ability", + "xmas_snowball", "poison_gas_grenade", "launcher_poison", "launcher_poison_ms3gl_conversion", diff --git a/lua/sc/tweak_data/charactertweakdata.lua b/lua/sc/tweak_data/charactertweakdata.lua index 7262323190..265e0cf929 100644 --- a/lua/sc/tweak_data/charactertweakdata.lua +++ b/lua/sc/tweak_data/charactertweakdata.lua @@ -2319,7 +2319,9 @@ function CharacterTweakData:_init_tank(presets) --Skulldozers, More tanky but moves as slow as Titandozers self.tank_skull = deep_clone(self.tank) - self.tank_skull.dt_suppress = nil + self.tank_skull.dt_suppress = { + range = 300 + } self.tank_skull.HEALTH_INIT = 625 self.tank_skull.marshal_logic = true self.tank_skull.move_speed = presets.move_speed.very_slow @@ -2408,6 +2410,7 @@ function CharacterTweakData:_init_tank(presets) self.tank_mini.headshot_dmg_mul = 15.625 self.tank_mini.weapon = deep_clone(presets.weapon.normal) self.tank_mini.can_throw_frag = true + self.tank_mini.grenade_toss_chance = 0.4 self.tank_mini.spawn_sound_event = self._prefix_data_p1.bulldozer() .. "_entrance_elite" table.insert(self._enemy_list, "tank_mini") end @@ -2424,6 +2427,7 @@ function CharacterTweakData:_init_tank_biker(presets) self.tank_biker.use_radio = nil self.tank_biker.no_omnia_heal = true self.tank_biker.no_asu = true + self.tank_biker.move_speed = presets.move_speed.very_slow table.insert(self._enemy_list, "tank_biker") end @@ -2733,7 +2737,7 @@ function CharacterTweakData:_init_phalanx_minion(presets) self.phalanx_minion.damage.fire_pool_damage_mul = 0.25 self.phalanx_minion.damage.hurt_severity = presets.hurt_severities.no_hurts_no_tase self.phalanx_minion.flammable = false - self.phalanx_minion.damage.shield_knocked = true + self.phalanx_minion.damage.shield_knocked = false self.phalanx_minion.priority_shout = "f31" self.phalanx_minion.bot_priority_shout = "f31x_any" self.phalanx_minion.move_speed = presets.move_speed.normal @@ -2753,7 +2757,7 @@ function CharacterTweakData:_init_phalanx_minion(presets) self.phalanx_minion.can_be_tased = false self.phalanx_minion.immune_to_knock_down = true self.phalanx_minion.immune_to_concussion = true - self.phalanx_minion.damage.immune_to_knockback = false + self.phalanx_minion.damage.immune_to_knockback = true self.phalanx_minion.spawn_sound_event_2 = "hos_shield_indication_sound_terminator_style" --that's a big ass name self.phalanx_minion.suppression = nil self.phalanx_minion.is_special = true @@ -2783,7 +2787,7 @@ end function CharacterTweakData:_init_phalanx_vip(presets) self.phalanx_vip = deep_clone(self.phalanx_minion) - self.phalanx_vip.tags = {"law", "shield", "special", "shield_titan", "captain"} + self.phalanx_vip.tags = {"law", "shield", "special", "shield_titan", "captain", "phalanx_vip"} self.phalanx_vip.damage.shield_knocked = false self.phalanx_vip.damage.immune_to_knockback = true self.phalanx_vip.immune_to_knock_down = true @@ -2840,14 +2844,46 @@ function CharacterTweakData:_init_phalanx_vip(presets) self.phalanx_vip.captain_type = restoration.captain_types.winter self.phalanx_vip.no_mutator_weapon_override = true table.insert(self._enemy_list, "phalanx_vip") + + --Winters, shield broken + self.phalanx_vip_break = deep_clone(self.phalanx_vip) + self.phalanx_vip_break.tags = {"law", "special", "captain"} + self.phalanx_vip_break.rotation_speed = 3 + self.phalanx_vip_break.damage.hurt_severity = presets.hurt_severities.only_light_hurt_no_explode + self.phalanx_vip_break.dodge = presets.dodge.elite + self.phalanx_vip_break.move_speed = presets.move_speed.very_fast + self.phalanx_vip_break.can_throw_frag = true + self.phalanx_vip_break.grenade_cooldown = 12 + self.phalanx_vip_break.grenade_toss_chance = 1 + self.phalanx_vip_break.HEALTH_INIT = 140 + self.phalanx_vip_break.headshot_dmg_mul = 2.5 + self.phalanx_vip_break.allowed_stances = nil + self.phalanx_vip_break.allowed_poses = nil + self.phalanx_vip_break.no_equip_anim = nil + self.phalanx_vip_break.no_run_start = nil + self.phalanx_vip_break.no_run_stop = nil + self.phalanx_vip_break.always_face_enemy = nil + self.phalanx_vip_break.wall_fwd_offset = nil + self.phalanx_vip_break.damage.explosion_damage_mul = 0.40 + self.phalanx_vip_break.damage.rocket_damage_mul = 0.40 + self.phalanx_vip_break.damage.fire_pool_damage_mul = 0.20 + self.phalanx_vip_break.damage.bullet_damage_mul = 0.45 + self.phalanx_vip_break.damage.fire_damage_mul = 0.30 + self.phalanx_vip_break.modify_health_on_tweak_change = true + self.phalanx_vip_break.announce_incomming = nil + self.phalanx_vip_break.marshal_logic = true + self.phalanx_vip_break.tmp_invulnerable_on_tweak_change = 15 + table.insert(self._enemy_list, "phalanx_vip_break") end function CharacterTweakData:_init_spring(presets) self.spring = deep_clone(self.tank) - self.spring.tags = {"law", "custom", "special", "captain"} + self.spring.tags = {"law", "custom", "special", "captain", "spring"} self.spring.move_speed = presets.move_speed.very_slow self.spring.rage_move_speed = presets.move_speed.fast self.spring.can_throw_frag = true + self.spring.grenade_cooldown = 12 + self.spring.grenade_toss_chance = 1 self.spring.no_run_start = true self.spring.no_run_stop = true self.spring.no_retreat = true @@ -2905,6 +2941,7 @@ function CharacterTweakData:_init_spring(presets) --Headless Titandozer Boss self.headless_hatman = deep_clone(self.spring) + self.headless_hatman.tags = {"law", "custom", "special", "captain", "headless_hatman"} self.headless_hatman.speech_prefix_p1 = "cpa" self.headless_hatman.speech_prefix_p2 = nil self.headless_hatman.speech_prefix_count = nil @@ -2989,7 +3026,7 @@ end function CharacterTweakData:_init_autumn(presets) self.autumn = deep_clone(presets.base) - self.autumn.tags = {"law", "custom", "special", "customvo"} + self.autumn.tags = {"law", "custom", "special", "customvo", "autumn"} self.autumn.experience = {} self.autumn.damage.hurt_severity = presets.hurt_severities.no_hurts self.autumn.weapon = deep_clone(presets.weapon.normal) @@ -17832,11 +17869,6 @@ function CharacterTweakData:_set_overkill_290() self.spring.dt_suppress = { range = 2500 } - - --Skulldozers can now push back players - self.tank_skull.dt_suppress = { - range = 300 - } self.autumn.damage.bullet_damage_mul = 0.45 self.presets.gang_member_damage.HEALTH_INIT = 175 diff --git a/lua/sc/tweak_data/crimespreetweakdata.lua b/lua/sc/tweak_data/crimespreetweakdata.lua index c92a132072..983a67a23b 100644 --- a/lua/sc/tweak_data/crimespreetweakdata.lua +++ b/lua/sc/tweak_data/crimespreetweakdata.lua @@ -834,6 +834,13 @@ function CrimeSpreeTweakData:init_modifiers(tweak_data) explosive_resist = {50, "add"} } }, + --Dozers can now always spawn in pairs + { + id = "dozer_pairs", + class = "ModifierDozerPairs", + icon = "crime_spree_more_dozers", + data = {} + }, --MedicDozers have a 50% chance to replace other dozer types { id = "dozer_medic", diff --git a/lua/sc/tweak_data/groupaitweakdata.lua b/lua/sc/tweak_data/groupaitweakdata.lua index 074ec7f6cc..544054ac09 100644 --- a/lua/sc/tweak_data/groupaitweakdata.lua +++ b/lua/sc/tweak_data/groupaitweakdata.lua @@ -18835,7 +18835,71 @@ function GroupAITweakData:_init_task_data(difficulty_index, difficulty) specular_mul = 1, color = Vector3(255, 0, 0) } - } + }, + phalanx_minion = { + flash_charge_stun_sound = "USM_Beep_Stop", + flash_charge_stun_effect = "effects/particles/explosions/explosion_flash_grenade", + flash_effect = "effects/payday2/particles/character/marshal_bright_light", + flash_charge_stun_sound_explosion = "no_sound", + flash_charge_timer = 3, + beep_effect = "effects/payday2/particles/character/marshal_red_light", + flash_charge_stun_range = 300, + beep_sound = "USM_Beep", + flash_range = 1200, + flash_charge_range = 1100, + flash_shape_radius = 120, + flash_charge_cooldown = 18, + flash_slotmask = "persons_no_players", + flash_shape = "cylinder", + flash_sound = "USM_Flash", + flash_range_min = 200, + flash_charge_stun_slotmask = "persons_no_players", + beep_speeds = { + 0.1, + 0.025 + }, + beep_light_data = { + type_str = "omni|specular", + range = 300, + beep_mul = 0.3, + falloff_exp = 0.5, + beep_fade_speed = 4, + specular_mul = 1, + color = Vector3(255, 0, 0) + } + }, + phalanx_vip = { + flash_charge_stun_sound = "USM_Beep_Stop", + flash_charge_stun_effect = "effects/particles/explosions/explosion_flash_grenade", + flash_effect = "effects/payday2/particles/character/marshal_bright_light", + flash_charge_stun_sound_explosion = "no_sound", + flash_charge_timer = 1.5, + beep_effect = "effects/payday2/particles/character/marshal_red_light", + flash_charge_stun_range = 300, + beep_sound = "USM_Beep", + flash_range = 1200, + flash_charge_range = 1100, + flash_shape_radius = 120, + flash_charge_cooldown = 9, + flash_slotmask = "persons_no_players", + flash_shape = "cylinder", + flash_sound = "USM_Flash", + flash_range_min = 200, + flash_charge_stun_slotmask = "persons_no_players", + beep_speeds = { + 0.1, + 0.025 + }, + beep_light_data = { + type_str = "omni|specular", + range = 300, + beep_mul = 0.3, + falloff_exp = 0.5, + beep_fade_speed = 4, + specular_mul = 1, + color = Vector3(255, 0, 0) + } + } } self.flash_shields.default = self.flash_shields.marshal_shield diff --git a/lua/sc/tweak_data/levelstweakdata.lua b/lua/sc/tweak_data/levelstweakdata.lua index ea9779a22e..d9d82ca3eb 100644 --- a/lua/sc/tweak_data/levelstweakdata.lua +++ b/lua/sc/tweak_data/levelstweakdata.lua @@ -249,6 +249,7 @@ Hooks:PostHook( LevelsTweakData, "init", "SC_levels", function(self) self.pal.ai_group_type = lapd self.friend.ai_group_type = lapd + self.friend.package = {"packages/lvl_friend", "packages/miscassets"} self.friend.player_style = "suit_sunny" self.kenaz.ai_group_type = lapd diff --git a/lua/sc/tweak_data/mutatortweakdata.lua b/lua/sc/tweak_data/mutatortweakdata.lua index ebc8737a28..96a8b517ce 100644 --- a/lua/sc/tweak_data/mutatortweakdata.lua +++ b/lua/sc/tweak_data/mutatortweakdata.lua @@ -14,6 +14,10 @@ function MutatorTweakData:init_birthday(tweak_data) buff_id = 2, spawn_rate = 1 }, + lpf = { + buff_id = 2, + spawn_rate = 1 + }, shield = { buff_id = 3, spawn_rate = 2 diff --git a/lua/sc/tweak_data/skilltreetweakdata.lua b/lua/sc/tweak_data/skilltreetweakdata.lua index 99ec419126..7140561f88 100644 --- a/lua/sc/tweak_data/skilltreetweakdata.lua +++ b/lua/sc/tweak_data/skilltreetweakdata.lua @@ -47,7 +47,7 @@ function SkillTreeTweakData:init(tweak_data) "x_sr2", "x_mp5", "x_akmsu", - "xmas_snowball", + --"xmas_snowball", "akimbo_recoil_index_addend_1", "akimbo_spread_index_addend_1", "ecm_jammer_can_activate_feedback", diff --git a/lua/sc/tweak_data/tipstweakdata.lua b/lua/sc/tweak_data/tipstweakdata.lua index 10c06da868..71df078e3c 100644 --- a/lua/sc/tweak_data/tipstweakdata.lua +++ b/lua/sc/tweak_data/tipstweakdata.lua @@ -283,6 +283,12 @@ function TipsTweakData:init() consoles = true, category = "new_units_res" }, + { + cat_index = 20, + image = "enemy_tshield", + consoles = true, + category = "new_units_res" + }, { cat_index = 1, image = "enemy_summers", @@ -355,6 +361,12 @@ function TipsTweakData:init() consoles = true, category = "captains_res" }, + { + cat_index = 13, + image = "enemy_winters_sc", + consoles = true, + category = "captains_res" + }, { cat_index = 1, image = "general_cameras", diff --git a/lua/sc/tweak_data/tweakdata.lua b/lua/sc/tweak_data/tweakdata.lua index 024b3d9f48..f2b967729b 100644 --- a/lua/sc/tweak_data/tweakdata.lua +++ b/lua/sc/tweak_data/tweakdata.lua @@ -63,21 +63,24 @@ tweak_data.grenade_launcher = { tweak_data.shotgun = { ads_move_speed_mult = 0.5, - ads_moving_spread_mult = 1.5 + ads_moving_spread_mult = 1.25 } tweak_data.shotgun_light = { - hipfire_spread_mult = 1.2, - moving_spread_mult = 1.8 + hipfire_spread_mult = 1.25, + --ads_multishot_spread_mult = 4, + moving_spread_mult = 1.5 } tweak_data.shotgun_heavy = { - hipfire_spread_mult = 0.5 + hipfire_spread_mult = 0.45, + --ads_multishot_spread_mult = 0.9 } tweak_data.shotgun_break = { - hipfire_spread_mult = 1.2 + hipfire_spread_mult = 1.15, + --ads_multishot_spread_mult = 1 } tweak_data.shotgun_pistol = { ads_move_speed_mult = 1.6, - swap_bonus = 1.75 + swap_bonus = 1.8 } tweak_data.flamethrower = { ads_move_speed_mult = 1, @@ -155,7 +158,7 @@ tweak_data.assault_rifle = { } tweak_data.akimbo = { - swap_bonus = 0.75, + swap_bonus = 0.8, ads_move_speed_mult = 0.75, ads_moving_spread_mult = 3, hipfire_spread_mult = 2, @@ -900,6 +903,7 @@ end tweak_data.medic.disabled_units = { "phalanx_vip", + "phalanx_vip_break", "spring", "headless_hatman", "taser_summers", diff --git a/lua/sc/tweak_data/upgradestweakdata.lua b/lua/sc/tweak_data/upgradestweakdata.lua index 7ed7623013..5761c7804a 100644 --- a/lua/sc/tweak_data/upgradestweakdata.lua +++ b/lua/sc/tweak_data/upgradestweakdata.lua @@ -103,7 +103,8 @@ Hooks:PostHook(UpgradesTweakData, "init", "ResLevelTableInit", function(self, tw "sparrow", "x_sparrow", "gator", - "pl14" + "pl14", + "x_pl14" } }, l15 = { diff --git a/lua/sc/tweak_data/weaponfactorytweakdata.lua b/lua/sc/tweak_data/weaponfactorytweakdata.lua index 55b82ea277..349f86bb25 100644 --- a/lua/sc/tweak_data/weaponfactorytweakdata.lua +++ b/lua/sc/tweak_data/weaponfactorytweakdata.lua @@ -1472,7 +1472,7 @@ local grips = { total_ammo_mod = per_pellet and -102 or -68, damage = per_pellet and 0 or 15, recoil = -20, - spread = 12, + spread = 5, spread_multi = {1, 1}, suppression = -1, moving_spread = 0 @@ -1488,7 +1488,7 @@ local grips = { can_shoot_through_wall = true, ap_desc = "bm_ap_armor_80_weapon_sc_desc", falloff_start_mult = 1.2, - falloff_end_mult = 1.8, + falloff_end_mult = 1.5, ads_speed_mult = 1.075 } }, @@ -1502,7 +1502,7 @@ local grips = { concealment = -3, total_ammo_mod = per_pellet and -102 or -52, damage = per_pellet and 0 or 15, - spread = 12, + spread = 5, spread_multi = {1, 1}, recoil = -20, moving_spread = 0, @@ -1519,7 +1519,7 @@ local grips = { can_shoot_through_wall = true, ap_desc = "bm_ap_armor_80_weapon_sc_desc", falloff_start_mult = 1.2, - falloff_end_mult = 1.8, + falloff_end_mult = 1.5, ads_speed_mult = 1.075 } }, @@ -1534,7 +1534,7 @@ local grips = { total_ammo_mod = per_pellet and -102 or -68, damage = per_pellet and 0 or 30, recoil = -20, - spread = 12, + spread = 5, spread_multi = {1, 1}, moving_spread = 0, suppression = -1 @@ -1553,7 +1553,7 @@ local grips = { can_shoot_through_wall = true, ap_desc = "bm_ap_weapon_sc_desc", falloff_start_mult = 1.2, - falloff_end_mult = 1.8, + falloff_end_mult = 1.5, ads_speed_mult = 1.075 } }, @@ -1565,7 +1565,7 @@ local grips = { total_ammo_mod = per_pellet and -102 or -52, damage = per_pellet and 0 or 30, recoil = -20, - spread = 12, + spread = 5, spread_multi = {1, 1}, suppression = -1, moving_spread = 0 @@ -1585,7 +1585,7 @@ local grips = { can_shoot_through_titan_shield = true, ap_desc = "bm_heavy_ap_no_mult_weapon_sc_desc", falloff_start_mult = 1.2, - falloff_end_mult = 1.8, + falloff_end_mult = 1.5, ads_speed_mult = 1.075 } }, @@ -2456,6 +2456,9 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_sights", "resmod_sights", function self.parts.wpn_fps_upg_o_specter.stance_mod.wpn_fps_ass_stoner63a_rifle = { translation = Vector3(0.015, 8, -3.52) } + self.parts.wpn_fps_upg_o_specter.stance_mod.wpn_fps_ass_pd3_qbz191 = { + translation = Vector3(-0.009, 6, -3.5) + } self.parts.wpn_fps_upg_o_specter.stance_mod.wpn_fps_ass_akilo_2022 = { translation = Vector3(-0.016, -9.5, -2.787), @@ -6710,6 +6713,25 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_g17", "resmod_g17", function(self) self.parts.wpn_fps_pis_g17_ck.stats = { value = 1 } self.parts.wpn_fps_pis_g17_ck.custom_stats = nil self.parts.wpn_fps_pis_g17_ck.forbids = nil + + self.parts.wpn_fps_pis_g17_s_mount = { + type = "shitass", + name_id = "none", + unit = "units/payday2/weapons/wpn_fps_pis_g18c/wpn_fps_pis_g18c" + , + stats = { + value = 1 + } + } + self.parts.wpn_fps_pis_g17_g_mount = { + type = "shitass2", + name_id = "none", + unit = "units/payday2/weapons/wpn_fps_pis_g22c/wpn_fps_pis_g22c" + , + stats = { + value = 1 + } + } --Chimano 88 Part Additions table.insert(self.wpn_fps_pis_g17.uses_parts, "wpn_fps_pis_g18c_g_ergo") @@ -6718,6 +6740,17 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_g17", "resmod_g17", function(self) table.insert(self.wpn_fps_pis_g17.uses_parts, "wpn_fps_upg_vg_ass_smg_verticalgrip") table.insert(self.wpn_fps_pis_g17.uses_parts, "wpn_fps_upg_vg_ass_smg_stubby") + table.insert(self.wpn_fps_pis_g17.uses_parts, "wpn_fps_pis_g18c_s_stock") + + self.wpn_fps_pis_g17.override.wpn_fps_pis_g18c_s_stock = { + adds = {"wpn_fps_pis_g17_s_mount"}, + parent = "shitass" + } + self.wpn_fps_pis_g17.override.wpn_fps_pis_g18c_g_ergo = { + adds = {"wpn_fps_pis_g17_g_mount"}, + parent = "shitass2" + } + self.wpn_fps_pis_g17_npc.override = deep_clone(self.wpn_fps_pis_g17.override) self.wpn_fps_pis_g17_npc.uses_parts = deep_clone(self.wpn_fps_pis_g17.uses_parts) @@ -6904,13 +6937,36 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_raging_bull", "resmod_raging_bull" self.parts.wpn_fps_pis_rage_g_ergo.supported = true self.parts.wpn_fps_pis_rage_g_ergo.stats = deep_clone(grips.recoil_1) - self.wpn_fps_pis_rage.override = self.wpn_fps_pis_rage.override or {} + self.parts.wpn_fps_pis_rage_fl_mount = { + type = "shitass", + name_id = "bm_wp_judge_b_standard", + unit = "units/pd2_dlc_osa/weapons/wpn_fps_smg_x_cobray/wpn_fps_smg_x_cobray", + --unit = "units/pd2_dlc_rota/weapons/wpn_fps_sho_rota/wpn_fps_sho_rota", + stats = { + value = 1 + } + } --Bronco .44 Part Additions table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_pis_g18c_co_comp_2") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_m3x") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_crimson") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_x400v") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_laser") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_tlr1") + table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_perst") + + self.wpn_fps_pis_rage.override = self.wpn_fps_pis_rage.override or {} + self.wpn_fps_pis_rage.override.wpn_fps_pis_usp_fl_adapter = { + parent = "shitass", + a_obj = "a_vg" + } + self.wpn_fps_pis_rage.override.wpn_fps_pis_2006m_fl_adapter = { + parent = "shitass", + a_obj = "a_vg" + } - --table.insert(self.wpn_fps_pis_rage.uses_parts, "wpn_fps_upg_fl_pis_x400v") - + self.wpn_fps_pis_rage_npc.override = deep_clone(self.wpn_fps_pis_rage.override) self.wpn_fps_pis_rage_npc.uses_parts = deep_clone(self.wpn_fps_pis_rage.uses_parts) self.wpn_fps_pis_rage_primary = nil @@ -7934,7 +7990,57 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_rpk", "resmod_rpk", function(self) spread = 1, recoil = -2 } + + self.parts.wpn_fps_lmg_rpk_ak_unit = { + type = "shitass", + name_id = "none", + unit = "units/payday2/weapons/wpn_fps_ass_akm/wpn_fps_ass_akm" + , + stats = { + value = 1 + } + } + --RPK Part Additions + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_specter") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_aimpoint") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_docter") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_eotech") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_t1micro") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_cmore") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_aimpoint_2") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_cs") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_rx30") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_rx01") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_reflex") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_eotech_xps") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_uh") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_fc1") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_spot") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_bmg") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_tf90") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_poe") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_health") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_hamr") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_hamr_reddot") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_atibal") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_atibal_reddot") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_s_psl") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_lmg_rpk_m_ban") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_s_skfoldable") + + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_ak_scopemount") + + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_fg_combo3") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_tapco") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_fg_midwest") + --table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_krebs") -- Don't fit right, missing their respective unique attachment points + --table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_trax") + + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_m_quick") + table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_m_quad") + + self.wpn_fps_lmg_rpk.adds = { wpn_fps_upg_o_specter = { "wpn_fps_ak_extra_ris" }, wpn_fps_upg_o_aimpoint = { "wpn_fps_ak_extra_ris" }, @@ -8103,43 +8209,6 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_rpk", "resmod_rpk", function(self) end end - --RPK Part Additions - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_specter") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_aimpoint") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_docter") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_eotech") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_t1micro") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_cmore") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_aimpoint_2") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_cs") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_rx30") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_rx01") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_reflex") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_eotech_xps") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_uh") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_fc1") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_spot") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_bmg") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_tf90") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_poe") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_health") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_hamr") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_atibal") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_s_psl") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_lmg_rpk_m_ban") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_s_skfoldable") - - --table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_o_ak_scopemount") -- doesn't work, missing "a_o_sm" - --table.insert(self.wpn_fps_lmg_rpk_npc.uses_parts, "wpn_fps_upg_o_ak_scopemount") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_upg_ak_fg_combo3") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_tapco") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_fg_midwest") - --table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_krebs") -- Don't fit right, missing their respective unique attachment points - --table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_fg_trax") - - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_m_quick") - table.insert(self.wpn_fps_lmg_rpk.uses_parts, "wpn_fps_upg_ak_m_quad") - self.wpn_fps_lmg_rpk_npc.uses_parts = deep_clone(self.wpn_fps_lmg_rpk.uses_parts) self.wpn_fps_lmg_rpk_npc.override = deep_clone(self.wpn_fps_lmg_rpk.override) @@ -10634,7 +10703,12 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_spas12", "resmod_spas12", function self.parts.wpn_fps_sho_s_spas12_folded.supported = true self.parts.wpn_fps_sho_s_spas12_folded.stats = deep_clone(stocks.fold_nocheeks_stats) self.parts.wpn_fps_sho_s_spas12_folded.custom_stats = deep_clone(stocks.fold_nocheeks_stats) - + self.parts.wpn_fps_sho_s_spas12_folded.stance_mod = { + wpn_fps_sho_spas12 = { + translation = Vector3(0,6,0) + } + } + --No Stock self.parts.wpn_fps_sho_s_spas12_nostock.pcs = { 10, @@ -11820,6 +11894,10 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_modpack_m4_ak", "resmod_modpack_m4 translation = Vector3(-0.005, 15.5, -4.34) } + self.parts.wpn_fps_upg_o_ak_scopemount.override.wpn_fps_upg_o_specter.stance_mod.wpn_fps_lmg_rpk = { + translation = Vector3(0.045, 17.5, -4.55) + } + self.parts.wpn_fps_upg_o_ak_scopemount.override.wpn_fps_upg_o_specter.stance_mod.wpn_fps_ass_akm_nomag = { translation = Vector3(-0.005, 15.5, -4.6) } @@ -12551,16 +12629,22 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_g17", "resmod_x_g17", function(s reload = -3 } + self.wpn_fps_pis_x_g17.override.wpn_fps_pis_g18c_s_stock = { + adds = {"wpn_fps_pis_g17_s_mount"}, + parent = "shitass" + } + self.wpn_fps_pis_x_g17.override.wpn_fps_pis_g18c_g_ergo = { + adds = {"wpn_fps_pis_g17_g_mount"}, + parent = "shitass2" + } + --Chimano 88 Part Additions table.insert(self.wpn_fps_pis_x_g17.uses_parts, "wpn_fps_pis_g18c_g_ergo") - table.insert(self.wpn_fps_pis_x_g17_npc.uses_parts, "wpn_fps_pis_g18c_g_ergo") - table.insert(self.wpn_fps_pis_x_g17.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_g17_npc.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_g17.uses_parts, "wpn_fps_pis_g18c_co_1") - table.insert(self.wpn_fps_pis_x_g17_npc.uses_parts, "wpn_fps_pis_g18c_co_1") + table.insert(self.wpn_fps_pis_x_g17.uses_parts, "wpn_fps_pis_g18c_s_stock") + self.wpn_fps_pis_x_g17_npc.override = deep_clone(self.wpn_fps_pis_x_g17.override) self.wpn_fps_pis_x_g17_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_g17.uses_parts) end) @@ -14215,6 +14299,18 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_pl14", "resmod_pl14", function(sel end) +Hooks:PostHook(WeaponFactoryTweakData, "_init_x_pl14", "resmod_x_pl14", function(self) + + self.wpn_fps_pis_x_pl14.override.wpn_fps_pis_pl14_m_extended = { + stats = { + value = 1, + extra_ammo = 4, + concealment = -1 + } + } + +end) + --Akimbo MP5 Hooks:PostHook(WeaponFactoryTweakData, "_init_x_mp5", "resmod_x_mp5", function(self) @@ -15701,12 +15797,49 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_chinchilla", "resmod_chinchilla", self.parts.wpn_fps_pis_chinchilla_g_death.supported = true self.parts.wpn_fps_pis_chinchilla_g_death.stats = deep_clone(grips.recoil_1) + self.parts.wpn_fps_pis_chinchilla_fl_mount = { + type = "shitass", + name_id = "none", + unit = "units/pd2_dlc_osa/weapons/wpn_fps_smg_x_cobray/wpn_fps_smg_x_cobray", + stats = { + value = 1 + } + } + + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_m3x") + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_crimson") + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_x400v") + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_laser") + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_tlr1") + table.insert(self.wpn_fps_pis_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_perst") + + self.wpn_fps_pis_chinchilla.adds = self.wpn_fps_pis_chinchilla.adds or {} + self.wpn_fps_pis_chinchilla.override = self.wpn_fps_pis_chinchilla.override or {} + + self.wpn_fps_pis_chinchilla.override.wpn_fps_pis_usp_fl_adapter = { + parent = "shitass", + a_obj = "a_vg" + } + end) --Akimbo Castigo .44 Hooks:PostHook(WeaponFactoryTweakData, "_init_x_chinchilla", "resmod_x_chinchilla", function(self) - --Nothing yet + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_m3x") + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_crimson") + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_x400v") + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_laser") + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_tlr1") + table.insert(self.wpn_fps_pis_x_chinchilla.uses_parts, "wpn_fps_upg_fl_pis_perst") + + self.wpn_fps_pis_x_chinchilla.adds = self.wpn_fps_pis_x_chinchilla.adds or {} + self.wpn_fps_pis_x_chinchilla.override = self.wpn_fps_pis_x_chinchilla.override or {} + + self.wpn_fps_pis_x_chinchilla.override.wpn_fps_pis_usp_fl_adapter = { + parent = "shitass", + a_obj = "a_vg" + } end) @@ -16397,6 +16530,10 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_g18c", "resmod_x_g18c", function magazine_empty = "last_recoil" } + table.insert(self.wpn_fps_pis_x_g18c.uses_parts, "wpn_fps_pis_g18c_s_stock") + + self.wpn_fps_pis_x_g18c_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_g18c.uses_parts) + end) --Akimbo Raging Bulls @@ -16410,6 +16547,9 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_rage", "resmod_x_rage", function reload = "reload", reload_not_empty = "reload" } + + self.wpn_fps_pis_x_rage.adds = {} + self.wpn_fps_pis_x_rage.override = { wpn_fps_pis_rage_body_standard = { animations = { @@ -16432,13 +16572,22 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_rage", "resmod_x_rage", function } } } + + self.wpn_fps_pis_x_rage.override.wpn_fps_pis_2006m_fl_adapter = { + parent = "shitass", + a_obj = "a_vg" + } + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_rage_npc.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_pis_g18c_co_1") - table.insert(self.wpn_fps_pis_x_rage_npc.uses_parts, "wpn_fps_pis_g18c_co_1") - table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_ns_pis_meatgrinder") - table.insert(self.wpn_fps_pis_x_rage_npc.uses_parts, "wpn_fps_upg_ns_pis_meatgrinder") - + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_m3x") + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_crimson") + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_x400v") + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_laser") + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_tlr1") + table.insert(self.wpn_fps_pis_x_rage.uses_parts, "wpn_fps_upg_fl_pis_perst") + + self.wpn_fps_pis_x_rage_npc.adds = deep_clone(self.wpn_fps_pis_x_rage.adds) + self.wpn_fps_pis_x_rage_npc.override = deep_clone(self.wpn_fps_pis_x_rage.override) self.wpn_fps_pis_x_rage_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_rage.uses_parts) end) @@ -17379,10 +17528,9 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_czech", "resmod_x_czech", functi } table.insert(self.wpn_fps_pis_x_czech.uses_parts, "wpn_fps_pis_g18c_co_1") - table.insert(self.wpn_fps_pis_x_czech_npc.uses_parts, "wpn_fps_pis_g18c_co_1") table.insert(self.wpn_fps_pis_x_czech.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_czech_npc.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - + table.insert(self.wpn_fps_pis_x_czech.uses_parts, "wpn_fps_pis_czech_s_standard") + self.wpn_fps_pis_x_czech_npc.override = deep_clone(self.wpn_fps_pis_x_czech.override) self.wpn_fps_pis_x_czech_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_czech.uses_parts) @@ -17540,10 +17688,9 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_x_stech", "resmod_x_stech", functi end end - table.insert(self.wpn_fps_pis_x_stech.uses_parts, "wpn_fps_pis_g18c_co_1") - table.insert(self.wpn_fps_pis_x_stech_npc.uses_parts, "wpn_fps_pis_g18c_co_1") + table.insert(self.wpn_fps_pis_x_stech.uses_parts, "wpn_fps_pis_g18c_co_1") table.insert(self.wpn_fps_pis_x_stech.uses_parts, "wpn_fps_pis_g18c_co_comp_2") - table.insert(self.wpn_fps_pis_x_stech_npc.uses_parts, "wpn_fps_pis_g18c_co_comp_2") + table.insert(self.wpn_fps_pis_x_stech.uses_parts, "wpn_fps_pis_stech_s_standard") self.wpn_fps_pis_x_stech_npc.override = deep_clone(self.wpn_fps_pis_x_stech.override) self.wpn_fps_pis_x_stech_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_stech.uses_parts) @@ -18168,6 +18315,33 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_m1911", "resmod_m1911", function(s end) +Hooks:PostHook(WeaponFactoryTweakData, "_init_x_m1911", "resmod_x_m1911", function(self) + + self.wpn_fps_pis_x_m1911.override.wpn_fps_pis_m1911_m_extended = { + stats = { + value = 3, + concealment = -1, + extra_ammo = 6, + reload = -1 + } + } + + self.wpn_fps_pis_x_m1911.override.wpn_fps_pis_1911_co_1 = { + a_obj = "a_ns", + parent = "barrel" + } + self.wpn_fps_pis_x_m1911.override.wpn_fps_pis_1911_co_2 = { + a_obj = "a_ns", + parent = "barrel" + } + + table.insert(self.wpn_fps_pis_x_m1911.uses_parts, "wpn_fps_pis_1911_co_1") + table.insert(self.wpn_fps_pis_x_m1911.uses_parts, "wpn_fps_pis_1911_co_2") + + self.wpn_fps_pis_x_m1911_npc.uses_parts = deep_clone(self.wpn_fps_pis_x_m1911.uses_parts) + +end) + --Mosconi 12G Tactical Shotgun Hooks:PostHook(WeaponFactoryTweakData, "_init_m590", "resmod_m590", function(self) @@ -18364,6 +18538,7 @@ Hooks:PostHook(WeaponFactoryTweakData, "_init_vityaz", "resmod_vityaz", function self.parts.wpn_fps_smg_vityaz_s_short.custom_stats = deep_clone(stocks.remove_folder_stats) self.wpn_fps_smg_vityaz.override = self.wpn_fps_smg_vityaz.override or {} + end) @@ -21720,7 +21895,8 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se custom_stats = { lock_burst = true, tekna_burst = true, - rof_mult = 2.1153846 + rof_mult = 2.1153846, + alt_desc = "bm_wally_desc", }, alt_icon = "guis/textures/pd2/blackmarket/icons/mods/wpn_fps_upg_i_autofire", unit = "units/payday2/weapons/wpn_upg_dummy/wpn_upg_dummy", @@ -22457,6 +22633,56 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se --[[ RJC9000'S MODS ]] + --RJC9000 and PlayBONK's PD3 QBZ-191 + if self.parts.wpn_fps_ass_pd3_qbz191_irons_folded then + self.parts.wpn_fps_ass_pd3_qbz191_barrel.stats = {value = 0} + self.parts.wpn_fps_ass_pd3_qbz191_handguard.stats = {value = 0} + self.parts.wpn_fps_ass_pd3_qbz191_grip.stats = {value = 0} + self.parts.wpn_fps_ass_pd3_qbz191_magazine.stats = {value = 0} + self.parts.wpn_fps_ass_pd3_qbz191_stock.stats = {value = 0} + + self.parts.wpn_fps_ass_pd3_qbz191_smag.supported = true + self.parts.wpn_fps_ass_pd3_qbz191_smag.stats = { + value = 2, + concealment = 1, + reload = 5, + extra_ammo = -10 + } + self.parts.wpn_fps_ass_pd3_qbz191_smag.custom_stats = { + ads_speed_mult = 0.975 + } + self.parts.wpn_fps_ass_pd3_qbz191_magazine_quick.supported = true + self.parts.wpn_fps_ass_pd3_qbz191_magazine_quick.stats = { + value = 2, + spread = -1, + concealment = -1, + reload = 3 + } + self.parts.wpn_fps_ass_pd3_qbz191_magazine_quick.custom_stats = nil + self.parts.wpn_fps_ass_pd3_qbz191_xmag.supported = true + self.parts.wpn_fps_ass_pd3_qbz191_xmag.stats = { + extra_ammo = 10, + concealment = -1, + reload = -1 + } + self.parts.wpn_fps_ass_pd3_qbz191_xmag.custom_stats = { + ads_speed_mult = 1.025 + } + + self.parts.wpn_fps_ass_pd3_qbz191_stock_extended.supported = true + self.parts.wpn_fps_ass_pd3_qbz191_stock_extended.stats = deep_clone(stocks.adj_hvy_rec_stats) + self.parts.wpn_fps_ass_pd3_qbz191_stock_extended.custom_stats = deep_clone(stocks.adj_hvy_rec_stats) + + self.wpn_fps_ass_pd3_qbz191.override = self.wpn_fps_ass_pd3_qbz191.override or {} + self.wpn_fps_ass_pd3_qbz191.override.wpn_fps_upg_m4_s_standard = { + stats = {}, + custom_stats = {} + } + + self.wpn_fps_ass_pd3_qbz191_npc.uses_parts = deep_clone(self.wpn_fps_ass_pd3_qbz191.uses_parts) + + end + --[[ GAMBYT'S MODS ]] --Gambyt's Vanilla Mod Pack @@ -22799,10 +23025,7 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se self.wpn_fps_shot_amr12.override.wpn_fps_m16_fg_standard = { adds = {} } - - table.insert(self.wpn_fps_shot_amr12.uses_parts, "wpn_fps_upg_i_singlefire") - table.insert(self.wpn_fps_shot_amr12.uses_parts, "wpn_fps_upg_i_autofire") - + self.wpn_fps_shot_amr12_npc.override = deep_clone(self.wpn_fps_shot_amr12.override) self.wpn_fps_shot_amr12_npc.uses_parts = deep_clone(self.wpn_fps_shot_amr12.uses_parts) @@ -31603,6 +31826,26 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se } end + if self.parts.wpn_fps_pis_lapd_grip_pearl then + + self.parts.wpn_fps_pis_lapd_body_standard.stance_mod = { + wpn_fps_pis_lapd = { translation = Vector3(0.15, 0, -0.65) } + } + + self.parts.wpn_fps_pis_lapd_grip_cherry.supported = true + self.parts.wpn_fps_pis_lapd_grip_cherry.stats = deep_clone(grips.recoil_acc) + self.parts.wpn_fps_pis_lapd_grip_cherry.custom_stats = deep_clone(grips.recoil_acc) + + self.parts.wpn_fps_pis_lapd_grip_pearl.supported = true + self.parts.wpn_fps_pis_lapd_grip_pearl.stats = deep_clone(grips.acc_1) + self.parts.wpn_fps_pis_lapd_grip_pearl.custom_stats = deep_clone(grips.acc_1) + + self.parts.wpn_fps_pis_lapd_grip_polymer.supported = true + self.parts.wpn_fps_pis_lapd_grip_polymer.stats = deep_clone(grips.quickdraw_1) + self.parts.wpn_fps_pis_lapd_grip_polymer.custom_stats = deep_clone(grips.quickdraw_1) + + end + --Make more attachments universally available, cartridge mismatching be damned for factory_id, i in pairs(self) do if self[factory_id] and self[factory_id .. "_npc"] and not self[factory_id].real_factory_id then @@ -31666,7 +31909,9 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se "wpn_fps_ass_shak12_ns_muzzle", "wpn_fps_upg_ak_ns_zenitco", "wpn_fps_upg_ak_ns_jmac", - "wpn_fps_snp_awp_ns_muzzle" + "wpn_fps_snp_awp_ns_muzzle", + "wpn_fps_lmg_hk51b_ns_jcomp", + "wpn_fps_lmg_kacchainsaw_ns_muzzle", } for _, part_id in ipairs(attachment_list) do if not table.contains(self[factory_id].uses_parts, part_id) and self.parts[part_id] then @@ -31693,7 +31938,8 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se "wpn_fps_smg_schakal_ns_silencer", "wpn_fps_snp_msr_ns_suppressor", "wpn_fps_snp_victor_ns_omega", - "wpn_fps_upg_ak_ns_tgp" + "wpn_fps_upg_ak_ns_tgp", + "wpn_fps_lmg_kacchainsaw_ns_suppressor" } for _, part_id in ipairs(attachment_list) do if not table.contains(self[factory_id].uses_parts, part_id) and self.parts[part_id] then @@ -32338,6 +32584,92 @@ Hooks:PostHook( WeaponFactoryTweakData, "create_bonuses", "SC_mods", function(se end end + self.wpn_fps_lmg_rpk.override.wpn_fps_upg_o_ak_scopemount = { + adds = { + "wpn_fps_lmg_rpk_ak_unit" + }, + override = deep_clone(self.parts.wpn_fps_upg_o_ak_scopemount.override) + } + + for part_id, i in pairs(self.wpn_fps_lmg_rpk.override.wpn_fps_upg_o_ak_scopemount.override) do + self.wpn_fps_lmg_rpk.override.wpn_fps_upg_o_ak_scopemount.override[part_id].parent = "shitass" + end + + for i, part_id in pairs(self.wpn_fps_lmg_rpk.uses_parts) do + if self.parts[part_id] and self.parts[part_id].type then + if self.parts[part_id].type == "vertical_grip" then + self.wpn_fps_lmg_rpk.override.wpn_fps_upg_o_ak_scopemount.override[part_id] = { + parent = "shitass" + } + end + end + end + self.wpn_fps_lmg_rpk_npc.override = deep_clone(self.wpn_fps_lmg_rpk.override) + + for i, part_id in pairs(self.wpn_fps_pis_x_chinchilla.uses_parts) do + if self.parts[part_id] and self.parts[part_id].a_obj then + if self.parts[part_id].a_obj == "a_fl" then + self.wpn_fps_pis_x_chinchilla.adds[part_id] = { + "wpn_fps_pis_chinchilla_fl_mount","wpn_fps_pis_usp_fl_adapter" + } + self.wpn_fps_pis_x_chinchilla.override[part_id] = { + parent = "shitass", + a_obj = "a_vg" + } + end + end + end + self.wpn_fps_pis_x_chinchilla_npc.adds = deep_clone(self.wpn_fps_pis_x_chinchilla.adds) + self.wpn_fps_pis_x_chinchilla_npc.override = deep_clone(self.wpn_fps_pis_x_chinchilla.override) + + for i, part_id in pairs(self.wpn_fps_pis_chinchilla.uses_parts) do + if self.parts[part_id] and self.parts[part_id].a_obj then + if self.parts[part_id].a_obj == "a_fl" then + self.wpn_fps_pis_chinchilla.adds[part_id] = { + "wpn_fps_pis_chinchilla_fl_mount","wpn_fps_pis_usp_fl_adapter" + } + self.wpn_fps_pis_chinchilla.override[part_id] = { + parent = "shitass", + a_obj = "a_vg" + } + end + end + end + self.wpn_fps_pis_chinchilla_npc.adds = deep_clone(self.wpn_fps_pis_chinchilla.adds) + self.wpn_fps_pis_chinchilla_npc.override = deep_clone(self.wpn_fps_pis_chinchilla.override) + + for i, part_id in pairs(self.wpn_fps_pis_rage.uses_parts) do + if self.parts[part_id] and self.parts[part_id].a_obj then + if self.parts[part_id].a_obj == "a_fl" then + self.wpn_fps_pis_rage.adds[part_id] = { + "wpn_fps_pis_rage_fl_mount","wpn_fps_pis_usp_fl_adapter" + } + self.wpn_fps_pis_rage.override[part_id] = { + parent = "shitass", + a_obj = "a_vg" + } + end + end + end + self.wpn_fps_pis_rage_npc.adds = deep_clone(self.wpn_fps_pis_rage.adds) + self.wpn_fps_pis_rage_npc.override = deep_clone(self.wpn_fps_pis_rage.override) + + for i, part_id in pairs(self.wpn_fps_pis_x_rage.uses_parts) do + if self.parts[part_id] and self.parts[part_id].a_obj then + if self.parts[part_id].a_obj == "a_fl" then + self.wpn_fps_pis_x_rage.adds[part_id] = { + "wpn_fps_pis_rage_fl_mount","wpn_fps_pis_2006m_fl_adapter" + } + self.wpn_fps_pis_x_rage.override[part_id] = { + parent = "shitass", + a_obj = "a_vg" + } + end + end + end + self.wpn_fps_pis_x_rage_npc.adds = deep_clone(self.wpn_fps_pis_x_rage.adds) + self.wpn_fps_pis_x_rage_npc.override = deep_clone(self.wpn_fps_pis_x_rage.override) + --GEN 1 LEGENDARY STUFF-- --Vlad's Rodina-- self.parts.wpn_fps_upg_vlad_rodina_legend = { diff --git a/lua/sc/tweak_data/weapontweakdata.lua b/lua/sc/tweak_data/weapontweakdata.lua index ffd356caef..7b132fb279 100644 --- a/lua/sc/tweak_data/weapontweakdata.lua +++ b/lua/sc/tweak_data/weapontweakdata.lua @@ -3235,8 +3235,8 @@ function WeaponTweakData:_init_stats() } --Multiplier for spread on multi-raycast weapons. This compensates for linear spread scaling which would otherwise cripple their multikill potential. - self.stat_info.shotgun_spread_increase = per_pellet and 1.75 or 3.5 - self.stat_info.shotgun_spread_increase_ads = per_pellet and 2 or 1 + self.stat_info.shotgun_spread_increase = 1.75 + self.stat_info.shotgun_spread_increase_ads = 6 --Multiplier for spread on weapons that are still hipfired even while aiming (goes against the steelsight spread mult) self.stat_info.hipfire_only_spread_increase = 0.25 / self.stat_info.stance_spread_mults.steelsight @@ -3284,7 +3284,7 @@ function WeaponTweakData:_init_stats() --Recoil multiplier. Used for stability. self.stats.recoil = {} for i = 0, 100, 1 do - table.insert(self.stats.recoil, (math.lerp( 6, 0.65, i / 100 ) * 1)) + table.insert(self.stats.recoil, (math.lerp( 7.5, 0.75, i / 100 ) * 1)) end self.stats.value = {} @@ -4025,14 +4025,25 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self[wep_id].tactical_reload = 1 self[wep_id].has_description = false end - tact_rel = {'x_deagle','x_1911','x_b92fs','jowi','x_usp','x_g17','x_g22c','x_packrat','x_shrew','x_breech','x_g18c','x_hs2000','x_p226','x_pl14','x_ppk','x_sparrow','x_legacy','x_czech','x_stech','x_holt','x_maxim9','x_type54','x_sko12' } + tact_rel = {'x_deagle','x_1911','x_b92fs','jowi','x_usp','x_g17','x_g22c','x_packrat','x_shrew','x_breech','x_g18c','x_hs2000','x_p226','x_pl14','x_ppk','x_sparrow','x_legacy','x_czech','x_stech','x_holt','x_maxim9','x_type54','x_m1911' } for i, wep_id in ipairs(tact_rel) do self[wep_id].tactical_reload = 2 self[wep_id].BURST_FIRE = 2 - self[wep_id].BURST_FIRE_RATE_MULTIPLIER = 2 + self[wep_id].BURST_DELAY = 0.015 + self[wep_id].BURST_FIRE_RATE_MULTIPLIER = 4 self[wep_id].categories = {"akimbo", "pistol"} end + local akimbo_rev = {'x_rage','x_chinchilla','x_2006m','x_model3','x_judge',"x_korth"} + for i, wep_id in ipairs(akimbo_rev) do + self[wep_id].BURST_FIRE = 2 + self[wep_id].BURST_DELAY = 0.015 + self[wep_id].BURST_FIRE_RATE_MULTIPLIER = 4 + self[wep_id].sounds.magazine_empty = nil + self[wep_id].categories = {"akimbo", "pistol"} + end + self.x_judge.categories = {"akimbo", "shotgun"} + tact_rel = {'x_sr2','x_mp5', 'x_coal', 'x_mp7', 'x_mp9', 'x_p90', 'x_polymer', 'x_schakal', 'x_scorpion', 'x_tec9','x_shepheard'} for i, wep_id in ipairs(tact_rel) do self[wep_id].tactical_reload = 2 @@ -4044,7 +4055,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self[wep_id].categories = {"akimbo", "assault_rifle"} end - local lock_em_up = {'colt_1911','usp','p226','g22c','glock_17','glock_18c','x_g18c','b92fs','ppk','mac10','x_mac10','deagle','x_deagle','x_1911','x_b92fs','jowi','g26','c96','x_c96','sterling','m1928','hs2000','rpg7','cobray','x_usp','x_g17','x_g22c','sparrow','x_sparrow','pl14','packrat','x_packrat','lemming','breech','erma','x_erma','shrew','x_shrew','stech','x_stech','czech','x_czech','maxim9','x_maxim9','holt','x_holt','m1911','beer','x_beer','type54','x_type54','legacy','x_legacy','coach','shepheard','x_shepheard','polymer','x_polymer','schakal','x_schakal','mp9','mp7','uzi','x_uzi','contender'} + local lock_em_up = {'colt_1911','usp','p226','g22c','glock_17','glock_18c','x_g18c','b92fs','ppk','mac10','x_mac10','deagle','x_deagle','x_1911','x_b92fs','jowi','g26','c96','x_c96','sterling','m1928','hs2000','rpg7','cobray','x_usp','x_g17','x_g22c','sparrow','x_sparrow','pl14','packrat','x_packrat','lemming','breech','erma','x_erma','shrew','x_shrew','stech','x_stech','czech','x_czech','maxim9','x_maxim9','holt','x_holt','m1911','x_m1911','beer','x_beer','type54','x_type54','legacy','x_legacy','coach','shepheard','x_shepheard','polymer','x_polymer','schakal','x_schakal','mp9','mp7','uzi','x_uzi','contender'} for i, wep_id in ipairs(lock_em_up) do self[ wep_id ].lock_slide = true self[ wep_id ].sounds.magazine_empty = "wp_pistol_slide_lock" @@ -4073,13 +4084,6 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.ching.lock_slide_alt = true self.ching.sounds.magazine_empty = "ching_magazine_empty" - local akimbo_rev = {'x_rage','x_chinchilla','x_2006m','x_model3','x_judge',"x_korth"} - for i, wep_id in ipairs(akimbo_rev) do - self[wep_id].BURST_FIRE = 2 - self[wep_id].BURST_FIRE_RATE_MULTIPLIER = 2 - self[wep_id].sounds.magazine_empty = nil - end - local ap_50 = { 'asval','scar','contraband','fal','galil' } @@ -4130,7 +4134,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self[ wep_id ].damage_type = "pistol" end - recat = { "usp", "x_usp", "type54", "x_type54", "shrew", "x_shrew", "colt_1911", "x_1911", "m1911", "c96" } + recat = { "usp", "x_usp", "type54", "x_type54", "shrew", "x_shrew", "colt_1911", "x_1911", "m1911", "x_m1911", "c96" } for i, wep_id in ipairs(recat) do self[ wep_id ].recategorize = { "heavy_pis" } self[ wep_id ].damage_type = "heavy_pistol" @@ -4730,6 +4734,39 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_b92fs.timers.reload_exit_empty = 0.55 self.x_b92fs.timers.reload_exit_not_empty = 0.65 + --Akimbo White Streak + self.x_pl14.has_description = true + self.x_pl14.desc_id = "bm_pl14_sc_desc" + self.x_pl14.fire_mode_data.fire_rate = 0.0882352 + self.x_pl14.CLIP_AMMO_MAX = 30 + self.x_pl14.AMMO_MAX = 150 + self.x_pl14.kick = self.stat_info.kick_tables.left_recoil + self.x_pl14.supported = true + self.x_pl14.ads_speed = 0.140 + self.x_pl14.damage_falloff = { + start_dist = 1700, + end_dist = 4000, + min_mult = 0.25 + } + self.x_pl14.stats = { + damage = 24, + spread = 44, + recoil = 79, + spread_moving = 5, + zoom = 1, + concealment = 30, + suppression = 11, + alert_size = 2, + extra_ammo = 101, + total_ammo_mod = 200, + value = 1, + reload = 20 + } + self.x_pl14.stats_modifiers = nil + self.x_pl14.panic_suppression_chance = 0.05 + self.x_pl14.timers.reload_exit_empty = 0.55 + self.x_pl14.timers.reload_exit_not_empty = 0.65 + --Akimbo Holt 9mm self.x_holt.has_description = true self.x_holt.desc_id = "bm_x_holt_sc_desc" @@ -4889,6 +4926,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_packrat.timers.reload_exit_empty = 0.55 self.x_packrat.timers.reload_exit_not_empty = 0.65 + --Akimbo Chimano Custom self.x_g22c.has_description = true self.x_g22c.desc_id = "bm_x_g22c_sc_desc" @@ -4924,7 +4962,6 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_g22c.timers.reload_exit_empty = 0.55 self.x_g22c.timers.reload_exit_not_empty = 0.65 - --Akimbo Signature .40 self.x_p226.kick = self.stat_info.kick_tables.even_recoil self.x_p226.CLIP_AMMO_MAX = 30 @@ -5655,6 +5692,41 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) --PRIMARIES + --Akimbo Crosskill Chunky + self.x_m1911.has_description = true + self.x_m1911.desc_id = "bm_m1911_sc_desc" + self.x_m1911.tactical_reload = 1 + self.x_m1911.fire_mode_data.fire_rate = 0.10714285 + self.x_m1911.CLIP_AMMO_MAX = 14 + self.x_m1911.AMMO_MAX = 80 + self.x_m1911.kick = self.stat_info.kick_tables.even_recoil + self.x_m1911.supported = true + self.x_m1911.ads_speed = 0.180 + self.x_m1911.damage_falloff = { + start_dist = 1200, + end_dist = 3500, + min_mult = 0.2 + } + self.x_m1911.stats = { + damage = 45, + spread = 51, + recoil = 75, + spread_moving = 5, + zoom = 1, + concealment = 28, + suppression = 9, + alert_size = 2, + extra_ammo = 101, + total_ammo_mod = 200, + value = 1, + reload = 20 + } + self.x_m1911.stats_modifiers = nil + self.x_m1911.panic_suppression_chance = 0.05 + self.x_m1911.reload_speed_multiplier = 1.075 + self.x_m1911.timers.reload_exit_empty = 0.55 + self.x_m1911.timers.reload_exit_not_empty = 0.65 + --Akimbo Crosskill Guard self.x_shrew.has_description = true self.x_shrew.desc_id = "bm_x_shrew_sc_desc" @@ -6604,8 +6676,8 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.chinchilla.can_shoot_through_enemy = true self.chinchilla.can_shoot_through_enemy_unlim = true self.chinchilla.reload_speed_multiplier = 1.12 - self.chinchilla.timers.reload_exit_empty = 0.5 - self.chinchilla.timers.reload_exit_not_empty = 0.5 + self.chinchilla.timers.reload_exit_empty = 0.3 + self.chinchilla.timers.reload_exit_not_empty = 0.3 --Deagle --Back to secondary @@ -10714,7 +10786,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.saiga.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.saiga.CLIP_AMMO_MAX = 5 self.saiga.AMMO_MAX = 80 - self.saiga.fire_mode_data.fire_rate = 0.12 + self.saiga.fire_mode_data.fire_rate = 0.1333333 self.saiga.shake.fire_multiplier = 1 self.saiga.shake.fire_steelsight_multiplier = -1 self.saiga.kick = self.stat_info.kick_tables.right_kick @@ -10722,13 +10794,13 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.saiga.ads_speed = 0.380 self.saiga.damage_falloff = { start_dist = 300, - end_dist = 2600, + end_dist = 2300, min_mult = 0.5 } self.saiga.stats = { damage = 45, - spread = 31, - recoil = 49, + spread = 19, + recoil = 43, spread_moving = 7, zoom = 1, concealment = 25, @@ -10750,21 +10822,21 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.sko12.rays = 9 self.sko12.AMMO_MAX = 80 self.sko12.CLIP_AMMO_MAX = 25 - self.sko12.fire_mode_data.fire_rate = 0.1714285 + self.sko12.fire_mode_data.fire_rate = 0.19047619 self.sko12.kick = self.stat_info.kick_tables.moderate_kick self.sko12.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.sko12.FIRE_MODE = "single" self.sko12.CAN_TOGGLE_FIREMODE = false self.sko12.supported = true - self.sko12.ads_speed = 0.500 + self.sko12.ads_speed = 0.460 self.sko12.damage_falloff = { - start_dist = 700, + start_dist = 600, end_dist = 3000, min_mult = 0.5 } self.sko12.stats = { damage = 45, - spread = 41, + spread = 31, recoil = 55, spread_moving = 7, zoom = 1, @@ -10796,15 +10868,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.aa12.FIRE_MODE = "auto" self.aa12.CAN_TOGGLE_FIREMODE = false self.aa12.supported = true - self.aa12.ads_speed = 0.440 + self.aa12.ads_speed = 0.400 self.aa12.damage_falloff = { - start_dist = 800, + start_dist = 700, end_dist = 3200, min_mult = 0.5 } self.aa12.stats = { damage = 45, - spread = 39, + spread = 31, recoil = 67, spread_moving = 7, zoom = 1, @@ -10834,10 +10906,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.ultima.CLIP_AMMO_MAX = 7 self.ultima.AMMO_MAX = 80 self.ultima.use_data.selection_index = 2 - self.ultima.fire_mode_data.fire_rate = 0.142857 + self.ultima.fire_mode_data.fire_rate = 0.181818181 self.ultima.kick = self.stat_info.kick_tables.moderate_kick self.ultima.supported = true - self.ultima.ads_speed = 0.340 + self.ultima.ads_speed = 0.300 self.ultima.damage_falloff = { start_dist = 700, end_dist = 3000, @@ -10845,8 +10917,8 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.ultima.stats = { damage = 45, - spread = 26, - recoil = 43, + spread = 21, + recoil = 45, spread_moving = 7, zoom = 1, concealment = 24, @@ -10878,7 +10950,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.spas12.AMMO_MAX = 80 self.spas12.CLIP_AMMO_MAX = 6 self.spas12.CAN_TOGGLE_FIREMODE = false - self.spas12.fire_mode_data.fire_rate = 0.1666667 + self.spas12.fire_mode_data.fire_rate = 0.22222222 self.spas12.BURST_FIRE = 2 self.spas12.BURST_FIRE_RATE_MULTIPLIER = 5 self.spas12.BURST_FIRE_RECOIL_MULTIPLIER = 0.25 @@ -10887,7 +10959,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.spas12.BURST_DELAY = 0.250 self.spas12.kick = self.stat_info.kick_tables.left_kick self.spas12.supported = true - self.spas12.ads_speed = 0.400 + self.spas12.ads_speed = 0.340 self.spas12.damage_falloff = { start_dist = 800, end_dist = 3300, @@ -10895,8 +10967,8 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.spas12.stats = { damage = 45, - spread = 35, - recoil = 53, + spread = 30, + recoil = 55, spread_moving = 7, zoom = 1, concealment = 24, @@ -10924,11 +10996,11 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.benelli.CLIP_AMMO_MAX = 5 self.benelli.rays = 9 self.benelli.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" - self.benelli.fire_mode_data.fire_rate = 0.15 + self.benelli.fire_mode_data.fire_rate = 0.2 self.benelli.CAN_TOGGLE_FIREMODE = false self.benelli.kick = self.stat_info.kick_tables.moderate_kick self.benelli.supported = true - self.benelli.ads_speed = 0.380 + self.benelli.ads_speed = 0.320 self.benelli.damage_falloff = { start_dist = 900, end_dist = 3500, @@ -10936,8 +11008,8 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.benelli.stats = { damage = 45, - spread = 40, - recoil = 47, + spread = 35, + recoil = 49, spread_moving = 7, zoom = 1, concealment = 22, @@ -10965,14 +11037,14 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.basset.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.basset.CLIP_AMMO_MAX = 5 self.basset.AMMO_MAX = 40 - self.basset.fire_mode_data.fire_rate = 0.12 + self.basset.fire_mode_data.fire_rate = 0.1333333 self.basset.kick = self.stat_info.kick_tables.moderate_left_kick self.basset.panic_suppression_chance = 0.05 self.basset.supported = true self.basset.ads_speed = 0.360 self.basset.damage_falloff = { start_dist = 300, - end_dist = 2600, + end_dist = 2100, min_mult = 0.5 } self.basset.stats = { @@ -10980,9 +11052,9 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) total_ammo_mod = 200, damage = 45, alert_size = 2, - spread = 31, + spread = 19, spread_moving = 8, - recoil = 51, + recoil = 41, value = 1, extra_ammo = 101, reload = 20, @@ -10999,12 +11071,12 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.striker.rays = 9 self.striker.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.striker.AMMO_MAX = 40 - self.striker.fire_mode_data.fire_rate = 0.1764705 + self.striker.fire_mode_data.fire_rate = 0.1875 self.striker.CAN_TOGGLE_FIREMODE = false self.striker.CLIP_AMMO_MAX = 12 self.striker.kick = self.stat_info.kick_tables.right_kick self.striker.supported = true - self.striker.ads_speed = 0.420 + self.striker.ads_speed = 0.340 self.striker.damage_falloff = { start_dist = 600, end_dist = 3200, @@ -11012,7 +11084,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.striker.stats = { damage = 45, - spread = 31, + spread = 22, recoil = 43, spread_moving = 7, zoom = 1, @@ -11034,10 +11106,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.rota.rays = 9 self.rota.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.rota.kick = self.stat_info.kick_tables.vertical_kick - self.rota.fire_mode_data.fire_rate = 0.15 + self.rota.fire_mode_data.fire_rate = 0.16667 self.rota.panic_suppression_chance = 0.05 self.rota.supported = true - self.rota.ads_speed = 0.360 + self.rota.ads_speed = 0.300 self.rota.damage_falloff = { start_dist = 800, end_dist = 3500, @@ -11045,7 +11117,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.rota.stats = { damage = 45, - spread = 36, + spread = 26, recoil = 41, spread_moving = 7, zoom = 1, @@ -11080,7 +11152,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_judge.BURST_FIRE = 2 self.x_judge.AMMO_MAX = 60 self.x_judge.supported = true - self.x_judge.ads_speed = 0.280 + self.x_judge.ads_speed = 0.200 self.x_judge.damage_falloff = { start_dist = 400, end_dist = 2600, @@ -11088,7 +11160,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.x_judge.stats = { damage = 60, - spread = 23, + spread = 43, recoil = 53, spread_moving = 5, zoom = 1, @@ -11126,15 +11198,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.m590.fire_rate_multiplier = 1.04166 self.m590.AMMO_MAX = 60 self.m590.supported = true - self.m590.ads_speed = 0.380 + self.m590.ads_speed = 0.320 self.m590.damage_falloff = { - start_dist = 600, - end_dist = 2500, + start_dist = 700, + end_dist = 2700, min_mult = 0.3333 } self.m590.stats = { damage = 60, - spread = 40, + spread = 60, recoil = 45, spread_moving = 6, zoom = 1, @@ -11179,15 +11251,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) ignore_always_play_anims = true } self.supernova.supported = true - self.supernova.ads_speed = 0.360 + self.supernova.ads_speed = 0.300 self.supernova.damage_falloff = { - start_dist = 700, - end_dist = 2800, + start_dist = 800, + end_dist = 3000, min_mult = 0.3333 } self.supernova.stats = { damage = 60, - spread = 48, + spread = 68, recoil = 47, spread_moving = 6, zoom = 1, @@ -11220,18 +11292,18 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.r870.kick = self.stat_info.kick_tables.vertical_kick self.r870.single.fire_rate = 0.5 self.r870.fire_mode_data.fire_rate = 0.5 - self.r870.fire_rate_multiplier = 0.91666 + self.r870.fire_rate_multiplier = 0.9583333 self.r870.AMMO_MAX = 60 self.r870.supported = true - self.r870.ads_speed = 0.400 + self.r870.ads_speed = 0.300 self.r870.damage_falloff = { - start_dist = 800, - end_dist = 3000, + start_dist = 900, + end_dist = 3300, min_mult = 0.3333 } self.r870.stats = { damage = 60, - spread = 42, + spread = 62, recoil = 51, spread_moving = 6, zoom = 1, @@ -11260,18 +11332,18 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.ksg.AMMO_MAX = 60 self.ksg.CLIP_AMMO_MAX = 14 self.ksg.fire_mode_data.fire_rate = 0.5 - self.ksg.fire_rate_multiplier = 0.83333 + self.ksg.fire_rate_multiplier = 0.875 self.ksg.kick = self.stat_info.kick_tables.vertical_kick self.ksg.supported = true - self.ksg.ads_speed = 0.420 + self.ksg.ads_speed = 0.340 self.ksg.damage_falloff = { - start_dist = 600, - end_dist = 2800, + start_dist = 700, + end_dist = 3000, min_mult = 0.3333 } self.ksg.stats = { damage = 60, - spread = 45, + spread = 65, recoil = 41, spread_moving = 7, zoom = 1, @@ -11313,15 +11385,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.m1897.BURST_FIRE_RANGE_MULTIPLIER = 0.66 self.m1897.AMMO_MAX = 60 self.m1897.supported = true - self.m1897.ads_speed = 0.380 + self.m1897.ads_speed = 0.280 self.m1897.damage_falloff = { - start_dist = 900, - end_dist = 3200, + start_dist = 1000, + end_dist = 3500, min_mult = 0.3333 } self.m1897.stats = { damage = 60, - spread = 51, + spread = 71, recoil = 41, spread_moving = 6, zoom = 1, @@ -11350,15 +11422,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.serbu.fire_mode_data.fire_rate = 0.5 self.serbu.kick = self.stat_info.kick_tables.moderate_kick self.serbu.supported = true - self.serbu.ads_speed = 0.360 + self.serbu.ads_speed = 0.260 self.serbu.damage_falloff = { - start_dist = 500, - end_dist = 2200, + start_dist = 600, + end_dist = 2400, min_mult = 0.3333 } self.serbu.stats = { damage = 60, - spread = 36, + spread = 56, recoil = 41, spread_moving = 6, zoom = 1, @@ -11400,7 +11472,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.m37.kick = self.stat_info.kick_tables.right_kick self.m37.panic_suppression_chance = 0.05 self.m37.supported = true - self.m37.ads_speed = 0.380 + self.m37.ads_speed = 0.280 self.m37.damage_falloff = { start_dist = 700, end_dist = 2800, @@ -11408,7 +11480,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.m37.stats = { damage = 60, - spread = 43, + spread = 63, recoil = 51, spread_moving = 6, zoom = 1, @@ -11435,7 +11507,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.judge.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.judge.AMMO_MAX = 30 self.judge.supported = true - self.judge.ads_speed = 0.280 + self.judge.ads_speed = 0.200 self.judge.damage_falloff = { start_dist = 400, end_dist = 2600, @@ -11443,7 +11515,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.judge.stats = { damage = 60, - spread = 33, + spread = 53, recoil = 63, spread_moving = 5, zoom = 1, @@ -11480,15 +11552,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.b682.sounds.fire_auto = "b682_fire" self.b682.kick = self.stat_info.kick_tables.vertical_kick self.b682.supported = true - self.b682.ads_speed = 0.480 + self.b682.ads_speed = 0.400 self.b682.damage_falloff = { - start_dist = 900, - end_dist = 3500, + start_dist = 1000, + end_dist = 4000, min_mult = 0.25 } self.b682.stats = { damage = 90, - spread = 61, + spread = 71, recoil = 41, spread_moving = 6, zoom = 1, @@ -11569,15 +11641,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.huntsman.fire_mode_data.fire_rate = 0.171428 self.huntsman.kick = self.stat_info.kick_tables.vertical_kick self.huntsman.supported = true - self.huntsman.ads_speed = 0.440 + self.huntsman.ads_speed = 0.380 self.huntsman.damage_falloff = { - start_dist = 600, - end_dist = 2800, + start_dist = 700, + end_dist = 3200, min_mult = 0.25 } self.huntsman.stats = { damage = 90, - spread = 58, + spread = 66, recoil = 43, spread_moving = 6, zoom = 1, @@ -11614,15 +11686,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.coach.fire_mode_data = {} self.coach.fire_mode_data.fire_rate = 0.171428 self.coach.supported = true - self.coach.ads_speed = 0.440 + self.coach.ads_speed = 0.380 self.coach.damage_falloff = { - start_dist = 600, - end_dist = 2700, + start_dist = 700, + end_dist = 3100, min_mult = 0.25 } self.coach.stats = { damage = 90, - spread = 58, + spread = 66, recoil = 43, spread_moving = 6, zoom = 1, @@ -12519,16 +12591,12 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) --[[ DISABLED SHIT NO ONE CARES ABOUT ]]-- - --Akimbo Crosskill Chunky - --DISABLED - self.x_m1911.use_data.selection_index = 5 - --Akimbo VD-12 - --DISABLED + --DISABLED - ALREADY A PRIMARY self.x_sko12.use_data.selection_index = 5 --Akimbo MP40 - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_erma.use_data.selection_index = 5 --Akimbo CR805 @@ -12536,11 +12604,11 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_hajk.use_data.selection_index = 5 --Akimbo Kross Vertex - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_polymer.use_data.selection_index = 5 --Akimbo Jackal - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_schakal.use_data.selection_index = 5 --Akimbo Chicago typewriter @@ -12552,7 +12620,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_cobray.use_data.selection_index = 5 --Akimbo Tatonka - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_coal.use_data.selection_index = 5 --Akimbo Spec Ops (Akimbo MP7) @@ -12584,17 +12652,13 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_breech.use_data.selection_index = 5 --akimbo Broomstick - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_c96.use_data.selection_index = 5 --Akimbo Leo --DISABLED-- self.x_hs2000.use_data.selection_index = 5 - --Akimbo White Streak - --DISABLED-- - self.x_pl14.use_data.selection_index = 5 - --Akimbo Gruber Kurz --DISABLED-- self.x_ppk.use_data.selection_index = 5 @@ -12604,7 +12668,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_m45.use_data.selection_index = 5 --Akimbo Signature SMG - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_shepheard.use_data.selection_index = 5 --Akimbo M13 @@ -12612,15 +12676,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.x_legacy.use_data.selection_index = 5 --Akimbo Beretta Auto - --DISABLED + --DISABLED - ALREADY A PRIMARY self.x_beer.use_data.selection_index = 5 --Akimbo AK Gen 21 Tactical - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_vityaz.use_data.selection_index = 5 --Akimbo Miyaka 10 - --DISABLED-- + --DISABLED - ALREADY A PRIMARY self.x_pm9.use_data.selection_index = 5 @@ -12631,7 +12695,6 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) if self.shatters_fury then self.shatters_fury.recategorize = { "heavy_pis", "handcannon" } self.shatters_fury.damage_type = "heavy_pistol" - self.shatters_fury.always_play_anims = true self.shatters_fury.fire_mode_data.fire_rate = 0.2142857 self.shatters_fury.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --if restoration.Options:GetValue("OTHER/ComboSounds") then @@ -13100,7 +13163,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.amr12.AMMO_MAX = 80 self.amr12.tactical_reload = 1 self.amr12.CLIP_AMMO_MAX = 5 - self.amr12.fire_mode_data.fire_rate = 0.125 + self.amr12.fire_mode_data.fire_rate = 0.17142857 self.amr12.FIRE_MODE = "single" self.amr12.CAN_TOGGLE_FIREMODE = false self.amr12.BURST_FIRE = false @@ -13108,13 +13171,13 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.amr12.supported = true self.amr12.ads_speed = 0.400 self.amr12.damage_falloff = { - start_dist = 400, + start_dist = 500, end_dist = 2800, min_mult = 0.5 } self.amr12.stats = { damage = 45, - spread = 31, + spread = 21, recoil = 49, zoom = 1, concealment = 21, @@ -13136,11 +13199,11 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.minibeck.damage_type = "shotgun" self.minibeck.damage_type_single_ray = "sniper" self.minibeck.tactical_reload = 1 - self.minibeck.fire_mode_data.fire_rate = 0.15789473 + self.minibeck.fire_mode_data.fire_rate = 0.2 self.minibeck.CLIP_AMMO_MAX = 5 self.minibeck.AMMO_MAX = 40 self.minibeck.supported = true - self.minibeck.ads_speed = 0.360 + self.minibeck.ads_speed = 0.280 self.minibeck.damage_falloff = { start_dist = 500, end_dist = 3000, @@ -13148,7 +13211,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) } self.minibeck.stats = { damage = 45, - spread = 26, + spread = 22, recoil = 69, zoom = 1, concealment = 25, @@ -13188,15 +13251,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.beck.fire_rate_multiplier = 0.9166666 self.beck.AMMO_MAX = 60 self.beck.supported = true - self.beck.ads_speed = 0.420 + self.beck.ads_speed = 0.320 self.beck.damage_falloff = { - start_dist = 700, - end_dist = 3000, + start_dist = 800, + end_dist = 3300, min_mult = 0.3333 } self.beck.stats = { damage = 60, - spread = 45, + spread = 65, recoil = 55, spread_moving = 6, zoom = 1, @@ -13233,15 +13296,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.bs23.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.bs23.kick = self.stat_info.kick_tables.right_kick self.bs23.supported = true - self.bs23.ads_speed = 0.440 + self.bs23.ads_speed = 0.400 self.bs23.damage_falloff = { - start_dist = 700, - end_dist = 3100, + start_dist = 800, + end_dist = 3600, min_mult = 0.25 } self.bs23.stats = { damage = 90, - spread = 51, + spread = 61, recoil = 41, spread_moving = 5, zoom = 1, @@ -13457,7 +13520,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.bdgr.timers.reload_exit_not_empty = 0.65 end - if self.sgs then --Gambyt's Guerilla 308. + if self.sgs then --Gambyt's Guerilla .308 self.sgs.nato = true self.sgs.categories = { "snp", @@ -13544,6 +13607,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) end if self.qsho then + self.qsho.categories = { "shotgun" } + self.qsho.recategorize = { "break_shot" } + self.qsho.damage_type = "shotgun_heavy" + self.qsho.damage_type_single_ray = "anti_materiel" self.qsho.should_reload_immediately = true self.qsho.has_description = true self.qsho.no_auto_anims = true @@ -13551,15 +13618,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.qsho.AMMO_MAX = 20 self.qsho.kick = self.stat_info.kick_tables.vertical_kick self.qsho.supported = true - self.qsho.ads_speed = 0.440 + self.qsho.ads_speed = 0.400 self.qsho.damage_falloff = { - start_dist = 800, - end_dist = 3000, + start_dist = 900, + end_dist = 3500, min_mult = 0.25 } self.qsho.stats = { damage = 90, - spread = 16, + spread = 26, recoil = 41, zoom = 1, concealment = 25, @@ -13708,7 +13775,46 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.czevo.panic_suppression_chance = 0.05 self.czevo.timers = deep_clone(self.shepheard.timers) self.x_czevo.use_data.selection_index = 5 - end + end + + if self.lapd then --Carl's M2019 Blaster + self.lapd.recategorize = {"heavy_pis", "handcannon"} + self.lapd.damage_type = "heavy_pistol" + self.lapd.desc_id = "thatgun_desc" + self.lapd.has_description = true + self.lapd.fire_mode_data.fire_rate = 0.24 + self.lapd.CLIP_AMMO_MAX = 5 + self.lapd.AMMO_MAX = 30 + self.lapd.kick = self.stat_info.kick_tables.moderate_kick + self.lapd.supported = true + self.lapd.ads_speed = 0.200 + self.lapd.damage_falloff = { + start_dist = 1500, + end_dist = 4800, + min_mult = 0.3 + } + self.lapd.stats = { + damage = 60, + spread = 86, + recoil = 57, + spread_moving = 9, + zoom = 1, + concealment = 27, + suppression = 8, + alert_size = 2, + extra_ammo = 101, + total_ammo_mod = 200, + value = 1, + reload = 20 + } + self.lapd.stats_modifiers = nil + self.lapd.panic_suppression_chance = 0.05 + self.lapd.armor_piercing_chance = 0.5 + self.lapd.can_shoot_through_enemy = true + self.lapd.can_shoot_through_enemy_unlim = true + self.lapd.sounds.fire2 = "rbull_fire" + self.lapd.timers = deep_clone(self.new_raging_bull.timers) + end if self.akm_nomag then --Leather Dann's Early Access AK self.akm_nomag.warsaw = true @@ -13966,6 +14072,40 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.umd_launcher.always_play_anims = true end + if self.sidewinder then --Cpone's Titanfall 2 Sidewinder SMR + self.sidewinder.categories = { + "grenade_launcher", + "raygun" + } + self.sidewinder.use_data.selection_index = 2 + self.sidewinder.CLIP_AMMO_MAX = 20 + self.sidewinder.AMMO_MAX = 80 + self.sidewinder.fire_mode_data.fire_rate = 0.11111111 + self.sidewinder.kick = self.stat_info.kick_tables.even_recoil + self.sidewinder.supported = true + self.sidewinder.ads_speed = 0.300 + self.sidewinder.stats = { + damage = 45, + spread = 66, + recoil = 71, + zoom = 1, + concealment = 17, + alert_size = 2, + suppression = 6, + extra_ammo = 101, + total_ammo_mod = 200, + reload = 20, + value = 10 + } + self.sidewinder.panic_suppression_chance = 0.05 + self.sidewinder.timers.reload_exit_not_empty = 0.9 + self.sidewinder.timers.reload_not_empty = 3.9 + self.sidewinder.timers.reload_exit_empty = 0.9 + self.sidewinder.timers.reload_empty = 3.9 + self.sidewinder.always_hipfire = true + self.sidewinder.always_play_anims = true + end + if self.m712 then --Pawcio's M712 self.m712.categories = {"pistol"} self.m712.recategorize = {"heavy_pis"} @@ -14364,18 +14504,18 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.mp153.tactical_reload = 1 self.mp153.rays = 9 self.mp153.AMMO_MAX = 80 - self.mp153.fire_mode_data.fire_rate = 0.12 + self.mp153.fire_mode_data.fire_rate = 0.1875 self.mp153.kick = self.stat_info.kick_tables.moderate_kick self.mp153.supported = true self.mp153.ads_speed = 0.400 self.mp153.damage_falloff = { - start_dist = 600, + start_dist = 500, end_dist = 3000, min_mult = 0.5 } self.mp153.stats = { damage = 45, - spread = 31, + spread = 21, recoil = 51, zoom = 1, concealment = 21, @@ -14394,7 +14534,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) end if self.wmtx then --Pawcio's Widomaker TX - self.wmtx.recategorize = { "light_shot" } + self.wmtx.recategorize = { "heavy_shot" } self.wmtx.damage_type = "shotgun" self.wmtx.damage_type_single_ray = "sniper" self.wmtx.upgrade_blocks = nil @@ -14409,15 +14549,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.wmtx.fire_mode_data.fire_rate = 0.5 self.wmtx.panic_suppression_chance = 0.05 self.wmtx.supported = true - self.wmtx.ads_speed = 0.320 + self.wmtx.ads_speed = 0.300 self.wmtx.damage_falloff = { - start_dist = 600, - end_dist = 3100, + start_dist = 700, + end_dist = 3500, min_mult = 0.3333 } self.wmtx.stats = { damage = 60, - spread = 34, + spread = 44, recoil = 59, spread_moving = 7, zoom = 1, @@ -14437,7 +14577,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) end if self.jackhammer then --Pawcio's Jackhammer - self.jackhammer.recategorize = { "light_shot" } + self.jackhammer.recategorize = { "heavy_shot" } --it's effectively semi auto self.jackhammer.damage_type = "shotgun" self.jackhammer.damage_type_single_ray = "sniper" self.jackhammer.upgrade_blocks = nil @@ -14454,13 +14594,13 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.jackhammer.supported = true self.jackhammer.ads_speed = 0.400 self.jackhammer.damage_falloff = { - start_dist = 900, + start_dist = 600, end_dist = 3300, min_mult = 0.5 } self.jackhammer.stats = { - damage = 45, - spread = 31, + damage = 60, + spread = 41, recoil = 53, spread_moving = 7, zoom = 1, @@ -14488,7 +14628,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.quadbarrel.rays = 9 self.quadbarrel.kick = self.stat_info.kick_tables.vertical_kick self.quadbarrel.AMMO_MAX = 40 - self.quadbarrel.sounds.stop_fire = "saiga_stop" + self.quadbarrel.sounds.stop_fire = "judge_x_fire" self.quadbarrel.BURST_FIRE = 2 self.quadbarrel.BURST_DELAY = 0.75 self.quadbarrel.CAN_TOGGLE_FIREMODE = false @@ -14498,7 +14638,7 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.quadbarrel.fire_mode_data = {} self.quadbarrel.fire_mode_data.fire_rate = 0.171428 self.quadbarrel.supported = true - self.quadbarrel.ads_speed = 0.500 + self.quadbarrel.ads_speed = 0.420 self.quadbarrel.damage_falloff = { start_dist = 500, end_dist = 3000, @@ -14543,10 +14683,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.ks23.CLIP_AMMO_MAX = 3 self.ks23.kick = self.stat_info.kick_tables.vertical_kick self.ks23.supported = true - self.ks23.ads_speed = 0.480 + self.ks23.ads_speed = 0.440 self.ks23.damage_falloff = { - start_dist = 700, - end_dist = 3100, + start_dist = 800, + end_dist = 3600, min_mult = 0.25 } self.ks23.stats = { @@ -14589,10 +14729,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.super.BURST_FIRE = false self.super.fire_mode_data.fire_rate = 0.5 self.super.supported = true - self.super.ads_speed = 0.400 + self.super.ads_speed = 0.360 self.super.damage_falloff = { - start_dist = 900, - end_dist = 2800, + start_dist = 1000, + end_dist = 3200, min_mult = 0.25 } self.super.stats = { @@ -16498,6 +16638,47 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.m4_usasoc.timers.reload_not_empty = 2.4 end + if self.pd3_qbz191 then --RJC9000 and PlayBONK's PAYDAY "THE SERVERS ARE DOWN! CAN'T PLAY, IDIOT" 3 QBZ-191 + self.pd3_qbz191.categories = { + "assault_rifle", + "dmr" + } + self.pd3_qbz191.warsaw = true + self.pd3_qbz191.recategorize = { "light_ar" } + self.pd3_qbz191.desc_id = "bm_qbz191_sc_desc" + self.pd3_qbz191.has_description = true + self.pd3_qbz191.tactical_reload = 1 + self.pd3_qbz191.AMMO_MAX = 150 + self.pd3_qbz191.fire_mode_data.fire_rate = 0.08 + self.pd3_qbz191.kick = self.stat_info.kick_tables.right_recoil + self.pd3_qbz191.supported = true + self.pd3_qbz191.ads_speed = 0.280 + self.pd3_qbz191.damage_falloff = { + start_dist = 1400, + end_dist = 4500, + min_mult = 0.75 + } + self.pd3_qbz191.stats = { + damage = 24, + spread = 78, + recoil = 75, + zoom = 1, + concealment = 22, + suppression = 8, + alert_size = 2, + extra_ammo = 101, + total_ammo_mod = 200, + value = 1, + reload = 20 + } + self.pd3_qbz191.stats_modifiers = nil + self.pd3_qbz191.armor_piercing_chance = 0.25 + self.pd3_qbz191.timers.reload_empty = 3.55 + self.pd3_qbz191.timers.reload_exit_empty = 0.95 + self.pd3_qbz191.timers.reload_exit_not_empty = 1.4 + self.pd3_qbz191.panic_suppression_chance = 0.05 + end + if self.malorian_3516 then --RJC9000 and PlayBONK's 2077 Silverhand self.malorian_3516.recategorize = { "heavy_pis", "handcannon" } self.malorian_3516.desc_id = "whydoyoucome" @@ -17377,16 +17558,16 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.omni.AMMO_MAX = 60 self.omni.tactical_reload = 1 self.omni.CLIP_AMMO_MAX = 10 - self.omni.fire_mode_data.fire_rate = 0.12 + self.omni.fire_mode_data.fire_rate = 0.15 self.omni.FIRE_MODE = "single" self.omni.CAN_TOGGLE_FIREMODE = false self.omni.BURST_FIRE = false self.omni.kick = self.stat_info.kick_tables.moderate_kick self.omni.supported = true - self.omni.ads_speed = 0.320 + self.omni.ads_speed = 0.240 self.omni.damage_falloff = { - start_dist = 900, - end_dist = 3200, + start_dist = 1000, + end_dist = 3000, min_mult = 0.66667 } self.omni.stats = { @@ -17510,15 +17691,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.f500.CLIP_AMMO_MAX = 6 self.f500.AMMO_MAX = 30 self.f500.supported = true - self.f500.ads_speed = 0.400 + self.f500.ads_speed = 0.300 self.f500.damage_falloff = { - start_dist = 800, - end_dist = 3000, + start_dist = 900, + end_dist = 3300, min_mult = 0.3333 } self.f500.stats = { damage = 60, - spread = 41, + spread = 51, recoil = 35, spread_moving = 6, zoom = 1, @@ -17781,10 +17962,10 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) self.ashot.muzzleflash = "effects/payday2/particles/weapons/big_51b_auto_fps" --"effects/particles/shotgun/shotgun_gen" self.ashot.rays = 9 self.ashot.supported = true - self.ashot.ads_speed = 0.240 + self.ashot.ads_speed = 0.220 self.ashot.damage_falloff = { start_dist = 400, - end_dist = 2200, + end_dist = 2500, min_mult = 0.25 } self.ashot.stats = { @@ -18097,20 +18278,15 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) weap.rays = not weap.keep_rays and 1 or weap.rays elseif weap.damage_falloff and weap.damage_falloff.start_dist and weap.rays and weap.damage_type and not table.contains(weap.categories, "flamethrower") then weap.alt_shotgunraycast = weap.alt_shotgunraycast or true - weap.ads_speed = weap.ads_speed - 0.1 if weap.recategorize and weap.damage_type == "shotgun" or weap.damage_type == "shotgun_heavy" then if weap.recategorize[1] == "light_shot" and not table.contains(weap.categories, "shotgun_light") then table.insert(weap.categories, "shotgun_light") weap.ene_hs_mult = 0.5 elseif weap.recategorize[1] == "heavy_shot" and not table.contains(weap.categories, "shotgun_heavy") then table.insert(weap.categories, "shotgun_heavy") - weap.damage_falloff.start_dist = math.ceil( (weap.damage_falloff.start_dist / 100) * 1.1 ) * 100 - weap.damage_falloff.end_dist = math.ceil( (weap.damage_falloff.end_dist / 100) * 1.2 ) * 100 weap.ene_hs_mult = 0.65 elseif weap.recategorize[1] == "break_shot" and not table.contains(weap.categories, "shotgun_break") then table.insert(weap.categories, "shotgun_break") - weap.damage_falloff.start_dist = math.ceil( (weap.damage_falloff.start_dist / 100) * 1.1 ) * 100 - weap.damage_falloff.end_dist = math.ceil( (weap.damage_falloff.end_dist / 100) * 1.2 ) * 100 weap.ene_hs_mult = 0.8 end end @@ -18120,11 +18296,11 @@ Hooks:PostHook( WeaponTweakData, "init", "SC_weapons", function(self) if weap.stats.damage == 30 then --Omni weap.stats.damage = 90 --60 weap.damage_falloff.min_mult = 0.16667 --0.25 - weap.object_damage_mult = 0.5 + weap.object_damage_mult = 0.25 elseif weap.stats.damage == 45 then --Auto weap.stats.damage = 120 --90 weap.damage_falloff.min_mult = 0.15 --0.2 - weap.object_damage_mult = 0.5 + weap.object_damage_mult = 0.25 elseif weap.stats.damage == 60 then --Pump weap.stats.damage = 180 --120 weap.damage_falloff.min_mult = 0.13333 --0.2 diff --git a/lua/sc/units/enemies/actions/upper_body/copactionshoot.lua b/lua/sc/units/enemies/actions/upper_body/copactionshoot.lua index 3866227fd7..faf3cbe81c 100644 --- a/lua/sc/units/enemies/actions/upper_body/copactionshoot.lua +++ b/lua/sc/units/enemies/actions/upper_body/copactionshoot.lua @@ -679,20 +679,14 @@ function CopActionShoot:update(t) if self._throw_frag and self._ext_brain._throw_frag_t < t and 2000 >= target_dis and 500 <= target_dis then local is_spring = self._ext_base._tweak_table == "spring" + local is_senator_armstrong = self._ext_base._tweak_table == "phalanx_vip_break" local is_tank_mini = self._ext_base._tweak_table == "tank_mini" - local frag_cooldown = 6 --This stuff should really be defined via tweakdata in the future. - if is_spring then - frag_cooldown = 12 - end + local frag_cooldown = self._common_data.char_tweak.grenade_cooldown or 6 --About time - local frag_roll_chance = is_spring and 1 or 0.1 - if is_tank_mini then - frag_roll_chance = 0.4 - end + local frag_roll_chance = self._common_data.char_tweak.grenade_toss_chance or 0.1 local frag_roll = math_random() <= frag_roll_chance local grenade_type = is_spring and "cluster_fuck" or "bravo_frag" - - + self._ext_brain._throw_frag_t = t + frag_cooldown if frag_roll then @@ -704,6 +698,8 @@ function CopActionShoot:update(t) if is_tank_mini then self._unit:sound():say("g90", true, nil, true) + elseif is_senator_armstrong then + self._unit:sound():say("a01", true, nil, true) else self._unit:sound():say("use_gas", true, nil, true) end diff --git a/lua/sc/units/enemies/copbase.lua b/lua/sc/units/enemies/copbase.lua index 21274f71a4..81e6dc4037 100644 --- a/lua/sc/units/enemies/copbase.lua +++ b/lua/sc/units/enemies/copbase.lua @@ -493,6 +493,9 @@ local weapons_map = { [Idstring("units/payday2/characters/ene_murkywater_1/ene_murkywater_1"):key()] = {"ump", "m4", "r870", "scar_murky"}, [Idstring("units/payday2/characters/ene_murkywater_2/ene_murkywater_2"):key()] = {"ump", "m4", "r870", "scar_murky"}, [Idstring("units/pd2_dlc_berry/characters/ene_murkywater_no_light/ene_murkywater_no_light"):key()] = {"m4", "r870", "mp5", "scar_murky"}, + + --Commissar gets his precious RPK back from Russia + [Idstring("units/payday2/characters/ene_gang_mobster_boss/ene_gang_mobster_boss"):key()] = "rpk_lmg", --Giving Friendly AI silenced pistols [Idstring("units/pd2_dlc_spa/characters/npc_spa/npc_spa"):key()] = "beretta92", diff --git a/lua/sc/units/enemies/copbrain.lua b/lua/sc/units/enemies/copbrain.lua index 38af0dc796..2e6b6399ea 100644 --- a/lua/sc/units/enemies/copbrain.lua +++ b/lua/sc/units/enemies/copbrain.lua @@ -238,6 +238,7 @@ logic_variants.tank_black.attack = TankCopLogicAttack logic_variants.tank_skull = clone(security_variant) logic_variants.tank_skull.attack = TankCopLogicAttack logic_variants.biker_guard = security_variant +logic_variants.phalanx_vip_break = security_variant logic_variants.phalanx_minion_assault = clone(security_variant) logic_variants.phalanx_minion_assault.attack = ShieldLogicAttack logic_variants.phalanx_minion_assault.intimidated = nil diff --git a/lua/sc/units/enemies/copdamage.lua b/lua/sc/units/enemies/copdamage.lua index e92752ce90..0678612bb1 100644 --- a/lua/sc/units/enemies/copdamage.lua +++ b/lua/sc/units/enemies/copdamage.lua @@ -1703,6 +1703,10 @@ function CopDamage:damage_melee(attack_data) else variant = 0 end + + if attack_data.charge_lerp_value then + result.charge_lerp_value = attack_data.charge_lerp_value + end local body_index = self._unit:get_body_index(attack_data.col_ray.body:name()) @@ -3324,7 +3328,7 @@ function CopDamage:_comment_death(attacker, killed_unit, special_comment) PlayerStandard.say_line(attacker:sound(), "g31x_any") elseif victim_base:has_tag("sniper") then PlayerStandard.say_line(attacker:sound(), "g35x_any") - elseif victim_base:has_tag("medic") then + elseif victim_base:has_tag("medic") or victim_base:has_tag("lpf") then PlayerStandard.say_line(attacker:sound(), "g36x_any") elseif victim_base:has_tag("custom") then local delay = TimerManager:game():time() + 1 @@ -3353,7 +3357,7 @@ function CopDamage:_AI_comment_death(unit, killed_unit, special_comment) unit:sound():say("g31x_any", true) elseif victim_base:has_tag("sniper") then unit:sound():say("g35x_any", true) - elseif victim_base:has_tag("medic") then + elseif victim_base:has_tag("medic") or victim_base:has_tag("lpf") then unit:sound():say("g36x_any", true) elseif victim_base:has_tag("custom") then local delay = TimerManager:game():time() + 1 diff --git a/lua/sc/units/enemies/copinventory.lua b/lua/sc/units/enemies/copinventory.lua index 39ab612097..9d56d83904 100644 --- a/lua/sc/units/enemies/copinventory.lua +++ b/lua/sc/units/enemies/copinventory.lua @@ -28,4 +28,26 @@ function CopInventory:add_unit_by_name(new_unit_name, equip) end self:add_unit(new_unit, equip) + + + if self._unit:base()._tweak_table == "phalanx_minion" or self._unit:base()._tweak_table == "phalanx_minion_assault" then + self._shield_break_data = { + anim_global_switch = "cop", + tweak_table_name_switch = "city_swat_titan_assault", + weapon_switch_selection = 2, + hurt_data = { + hurt_type = "stagger" + } + } + elseif self._unit:base()._tweak_table == "phalanx_vip" then + self._shield_break_data = { + anim_global_switch = "cop", + tweak_table_name_switch = "phalanx_vip_break", + weapon_switch_selection = 2, + hurt_data = { + hurt_type = "hurt" + } + } + end + end \ No newline at end of file diff --git a/lua/sc/units/enemies/copmovement.lua b/lua/sc/units/enemies/copmovement.lua index 329b5b2fe0..5406aa308f 100644 --- a/lua/sc/units/enemies/copmovement.lua +++ b/lua/sc/units/enemies/copmovement.lua @@ -58,6 +58,7 @@ action_variants.tank_black.walk = TankCopActionWalk action_variants.tank_skull = clone(security_variant) action_variants.tank_skull.walk = TankCopActionWalk action_variants.biker_guard = security_variant +action_variants.phalanx_vip_break = security_variant action_variants.phalanx_minion_assault = clone(security_variant) action_variants.phalanx_minion_assault.hurt = ShieldActionHurt action_variants.phalanx_minion_assault.walk = ShieldCopActionWalk @@ -325,7 +326,7 @@ function CopMovement:do_omnia(self) "summers" } heal_range = 1600 - elseif self._unit:base()._tweak_table == "phalanx_vip" then + elseif self._unit:base()._tweak_table == "phalanx_vip" or self._unit:base()._tweak_table == "phalanx_vip_break" then heal_range = 2000 heal_vo = "heal_chatter_winters" end diff --git a/lua/sc/units/enemies/logics/coplogicattack.lua b/lua/sc/units/enemies/logics/coplogicattack.lua index 2a979358b8..ec748899be 100644 --- a/lua/sc/units/enemies/logics/coplogicattack.lua +++ b/lua/sc/units/enemies/logics/coplogicattack.lua @@ -169,7 +169,7 @@ function CopLogicAttack.aim_allow_fire(shoot, aim, data, my_data) -- doesn't rea end my_data.shield_knock_cooldown = data.t + math_random(12, 24) - elseif data.unit:base()._tweak_table == "spring" or data.unit:base()._tweak_table == "phalanx_vip" then + elseif data.unit:base()._tweak_table == "spring" or data.unit:base()._tweak_table == "phalanx_vip" or data.unit:base()._tweak_table == "phalanx_vip_break" then data.unit:sound():say("a05", true) else managers.groupai:state():chk_say_enemy_chatter(data.unit, data.m_pos, "contact") diff --git a/lua/sc/units/enemies/logics/coplogicbase.lua b/lua/sc/units/enemies/logics/coplogicbase.lua index dfc607b400..75a636c34d 100644 --- a/lua/sc/units/enemies/logics/coplogicbase.lua +++ b/lua/sc/units/enemies/logics/coplogicbase.lua @@ -309,7 +309,7 @@ function CopLogicBase._set_attention_obj(data, new_att_obj, new_reaction) if AIAttentionObject.REACT_SHOOT <= new_reaction and new_att_obj.verified and contact_chatter_time_ok and (data.unit:anim_data().idle or data.unit:anim_data().move) and new_att_obj.is_person and data.char_tweak.chatter.contact then if data.unit:anim_data().idle or data.unit:anim_data().move then local tweak_table = data.unit:base()._tweak_table - if tweak_table == "phalanx_vip" then + if tweak_table == "phalanx_vip" or tweak_table == "phalanx_vip_break" then data.unit:sound():say("a01", true) elseif tweak_table == "spring" then data.unit:sound():say("a01", true) diff --git a/lua/sc/units/enemies/logics/coplogictravel.lua b/lua/sc/units/enemies/logics/coplogictravel.lua index 7da4ee2ba9..48811e986e 100644 --- a/lua/sc/units/enemies/logics/coplogictravel.lua +++ b/lua/sc/units/enemies/logics/coplogictravel.lua @@ -386,3 +386,23 @@ Hooks:PreHook(CopLogicTravel, "_on_destination_reached", "RR_on_destination_reac managers.groupai:state():chk_say_enemy_chatter(data.unit, data.m_pos, math_random() > 0.5 and "ready" or "inpos") -- Ready! / I'm in position! end end) + +-- Fix enemies sometimes disappearing when they are told to retire +-- Basically this function doesn't check if the retiring unit reached their actual retire spot +local _on_destination_reached_original = CopLogicTravel._on_destination_reached +function CopLogicTravel._on_destination_reached(data, ...) + local objective = data.objective + if objective.type == "flee" or objective.type == "defend_area" and objective.grp_objective and objective.grp_objective.type == "retire" then + local nav_seg = data.unit:movement():nav_tracker():nav_segment() + if objective.nav_seg == nav_seg or objective.area and objective.area.nav_segs[nav_seg] then + data.unit:brain():set_active(false) + data.unit:base():set_slot(data.unit, 0) + else + objective.in_place = true + data.logic.on_new_objective(data) + end + return + end + + return _on_destination_reached_original(data, ...) +end diff --git a/lua/sc/units/player/playerstandard.lua b/lua/sc/units/player/playerstandard.lua index d59a590a1e..c0d2da1ca1 100644 --- a/lua/sc/units/player/playerstandard.lua +++ b/lua/sc/units/player/playerstandard.lua @@ -26,7 +26,7 @@ local norecoil_blacklist = { --From Zdann --Pistols ["peacemaker"] = true, - ["model3"] = true + --["model3"] = true } local sound_buffer = BeardLib.Utils:FindMod("Megumin's Staff") and XAudio and blt.xaudio.setup() and XAudio.Buffer:new( BeardLib.Utils:FindMod("Megumin's Staff").ModPath .. "assets/soundbank/megumins_staff_charge.ogg") @@ -284,13 +284,15 @@ function PlayerStandard:_check_action_throw_projectile(t, input) end --Here! - local action_forbidden = not PlayerBase.USE_GRENADES or not self:_projectile_repeat_allowed() or self:chk_action_forbidden("interact") or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_meleeing() or self:_is_using_bipod() + local action_forbidden = not PlayerBase.USE_GRENADES or not self:_projectile_repeat_allowed() or self:chk_action_forbidden("interact") or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_meleeing() or self:_is_using_bipod() or self:_in_burst() if action_forbidden then return end self:_start_action_throw_projectile(t, input) + self._queue_fire = nil + self._queue_burst = nil return true end @@ -307,20 +309,22 @@ function PlayerStandard:_check_action_throw_grenade(t, input) end --Here! - local action_forbidden = not PlayerBase.USE_GRENADES or self:chk_action_forbidden("interact") or self._unit:base():stats_screen_visible() or self:_is_throwing_grenade() or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_meleeing() or self:_is_using_bipod() + local action_forbidden = not PlayerBase.USE_GRENADES or self:chk_action_forbidden("interact") or self._unit:base():stats_screen_visible() or self:_is_throwing_grenade() or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_meleeing() or self:_is_using_bipod() or self:_in_burst() if action_forbidden then return end self:_start_action_throw_grenade(t, input) + self._queue_fire = nil + self._queue_burst = nil return action_wanted end function PlayerStandard:_action_interact_forbidden() --Here! - local action_forbidden = self:chk_action_forbidden("interact") or self._unit:base():stats_screen_visible() or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self._ext_movement:has_carry_restriction() or self:is_deploying() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() or self:_on_zipline() + local action_forbidden = self:chk_action_forbidden("interact") or self._unit:base():stats_screen_visible() or self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self._ext_movement:has_carry_restriction() or self:is_deploying() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() or self:_on_zipline() or self:_in_burst() return action_forbidden end @@ -369,6 +373,8 @@ function PlayerStandard:_check_action_melee(t, input) local instant = tweak_data.blackmarket.melee_weapons[melee_entry].instant self:_start_action_melee(t, input, instant) + self._queue_fire = nil + self._queue_burst = nil --Stop chainsaw when no longer meleeing. if input.btn_melee_release then @@ -417,10 +423,12 @@ function PlayerStandard:_check_use_item(t, input) --Here! if action_wanted then - local action_forbidden = self._use_item_expire_t or self:_interacting() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() + local action_forbidden = self._use_item_expire_t or self:_interacting() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() or self:_in_burst() if not action_forbidden and managers.player:can_use_selected_equipment(self._unit) then self:_start_action_use_item(t) + self._queue_burst = nil + self._queue_fire = nil new_action = true end @@ -617,7 +625,7 @@ end function PlayerStandard:_check_action_primary_attack(t, input) local new_action = nil - local action_wanted = input.btn_primary_attack_state or input.btn_primary_attack_release or self._queue_fire or self._spin_up_shoot + local action_wanted = input.btn_primary_attack_state or input.btn_primary_attack_release or input.real_input_pressed or self._queue_fire or self._spin_up_shoot action_wanted = action_wanted or self:is_shooting_count() action_wanted = action_wanted or self:_is_charging_weapon() @@ -642,6 +650,19 @@ function PlayerStandard:_check_action_primary_attack(t, input) force_ads_recoil_anims = nil end + local queue_inputs = restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShooting") + local queue_window = restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingWindow") or 0.5 + local queue_exlude = restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingExclude") or 0.6 + local queue_mid_burst = restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingMidBurst") + + if queue_inputs and weap_base:in_burst_mode() then + if queue_mid_burst and input.real_input_pressed then + self._queue_burst = true + end + else + self._queue_burst = nil + end + if weap_base:out_of_ammo() then self._spin_up_shoot = nil if input.btn_primary_attack_press then @@ -696,20 +717,29 @@ function PlayerStandard:_check_action_primary_attack(t, input) end end else - if restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShooting") then - if input.btn_primary_attack_press and fire_mode == "single" and not weap_base:in_burst_mode() and not weap_base:start_shooting_allowed() then - local next_fire = weap_base:weapon_fire_rate() / weap_base:fire_rate_multiplier() - local next_fire_last = weap_base._next_fire_allowed - next_fire - local next_fire_delay = weap_base._next_fire_allowed - next_fire_last - local next_fire_current_t = weap_base._next_fire_allowed - t - local queue_window = restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingWindow") or 0.5 - local queue_exlude = (restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingExclude") and 60 / restoration.Options:GetValue("OTHER/WeaponHandling/QueuedShootingExclude")) or 0.6 - if queue_exlude >= next_fire and next_fire_current_t < next_fire_delay * queue_window then - self._queue_fire = true + if queue_inputs then + if input.btn_primary_attack_press and fire_mode == "single" then + if not weap_base:in_burst_mode() and not weap_base:start_shooting_allowed() then + local next_fire = weap_base:weapon_fire_rate() / weap_base:fire_rate_multiplier() + local next_fire_last = weap_base._next_fire_allowed - next_fire + local next_fire_delay = weap_base._next_fire_allowed - next_fire_last + local next_fire_current_t = weap_base._next_fire_allowed - t + local next_fire_queue = 60 / queue_exlude + + if next_fire_queue >= next_fire and next_fire_current_t < next_fire_delay * queue_window then + self._queue_fire = true + end + else + if (self:_in_burst() and queue_mid_burst) or not self:_in_burst() then + if input.real_input_pressed or not input.fake_attack then + self._queue_burst = true + end + end end end else self._queue_fire = nil + self._queue_burst = nil end self:_check_stop_shooting() @@ -808,6 +838,10 @@ function PlayerStandard:_check_action_primary_attack(t, input) self._queue_fire = nil self._already_fired = true + if input.clear_queue then + self._queue_burst = nil + end + if weap_base._descope_on_fire then self._d_scope_t = (weap_base._next_fire_allowed - t) * 0.7 end @@ -834,8 +868,16 @@ function PlayerStandard:_check_action_primary_attack(t, input) local fire_anim_offset2 = weap_base:weapon_tweak_data().fire_anim_offset2 local spin_up_semi = fire_mode == "single" and weap_base:weapon_tweak_data().spin_up_semi if not spin_up_semi then - if not self._state_data.in_steelsight or not weap_base:tweak_data_anim_play("fire_steelsight", weap_base:fire_rate_multiplier( ignore_rof_mult_anims ), fire_anim_offset, fire_anim_offset2) then - weap_base:tweak_data_anim_play("fire", weap_base:fire_rate_multiplier( ignore_rof_mult_anims ), fire_anim_offset, fire_anim_offset2) + local second_gun_base = weap_base._second_gun and weap_base._second_gun:base() + local second_gun_turn = weap_base._second_turn + if second_gun_turn ~= true then + if not self._state_data.in_steelsight or not weap_base:tweak_data_anim_play("fire_steelsight", weap_base:fire_rate_multiplier( ignore_rof_mult_anims ), fire_anim_offset, fire_anim_offset2) then + weap_base:tweak_data_anim_play("fire", weap_base:fire_rate_multiplier( ignore_rof_mult_anims ), fire_anim_offset, fire_anim_offset2) + end + if second_gun_base then + second_gun_base:tweak_data_anim_stop("fire") + second_gun_base:tweak_data_anim_stop("fire_steelsight") + end end end @@ -1051,6 +1093,8 @@ function PlayerStandard:_check_action_interact(t, input) self._ext_camera:camera_unit():base():set_limits(80, 50) end self:_start_action_interact(t, input, timer, interact_object) + self._queue_burst = nil + self._queue_fire = nil end if not new_action then @@ -1422,6 +1466,7 @@ function PlayerStandard:_start_action_running(t) end self._queue_fire = nil + self._queue_burst = nil self._running_wanted = false if (not self._state_data.shake_player_start_running or not self._ext_camera:shaker():is_playing(self._state_data.shake_player_start_running)) and managers.user:get_setting("use_headbob") then @@ -2450,12 +2495,18 @@ function PlayerStandard:_update_burst_fire(t) if burst_hipfire then self:_interupt_action_steelsight(t) end - if self._equipped_unit:base():burst_rounds_remaining() or (self._equipped_unit:base():in_burst_mode() and self._equipped_unit:base()._auto_burst and not self._equipped_unit:base():clip_empty() and self._controller and self._controller:get_input_bool("primary_attack")) then - self:_check_action_primary_attack(t, { btn_primary_attack_state = true, btn_primary_attack_press = true }) + local input_pressed = self._controller and self._controller:get_input_pressed("primary_attack") == true or nil + local input_bool = self._controller and self._controller:get_input_bool("primary_attack") + local auto_burst = self._equipped_unit:base()._auto_burst + local queue_burst = not auto_burst and (self._queue_burst and not self:_in_burst()) + local burst_complete = self._equipped_unit:base()._burst_rounds_remaining <= 0 + if self._equipped_unit:base():burst_rounds_remaining() or queue_burst or (self._equipped_unit:base():in_burst_mode() and auto_burst and not self._equipped_unit:base():clip_empty() and input_bool) then + self:_check_action_primary_attack(t, { btn_primary_attack_state = true, btn_primary_attack_press = true, fake_attack = true, real_input_pressed = input_pressed, clear_queue = not auto_burst and burst_complete }) end end end + --Recoil used at the end of burst fire. function PlayerStandard:force_recoil_kick(weap_base, shots_fired) local recoil_multiplier = (weap_base:recoil() + weap_base:recoil_addend()) * weap_base:recoil_multiplier() * (shots_fired or 1) @@ -2472,7 +2523,7 @@ function PlayerStandard:_check_action_deploy_bipod(t, input, autodeploy) end local is_leaning = TacticalLean and ((TacticalLean:GetLeanDirection() or TacticalLean:IsExitingLean()) and true) or nil - action_forbidden = self._state_data.in_air or self._is_sliding or (autodeploy and self._move_dir) or is_leaning or self:_on_zipline() or self:_is_throwing_projectile() or self:_is_meleeing() or self:is_equipping() or self:_changing_weapon() + action_forbidden = self._state_data.in_air or self._is_sliding or (autodeploy and self._move_dir) or self:in_steelsight() or is_leaning or self:_on_zipline() or self:_is_throwing_projectile() or self:_is_meleeing() or self:is_equipping() or self:_changing_weapon() local weapon = self._equipped_unit:base() local bipod_part = managers.weapon_factory:get_parts_from_weapon_by_perk("bipod", weapon._parts) @@ -3043,9 +3094,6 @@ function PlayerStandard:_do_melee_damage(t, bayonet_melee, melee_hit_ray, melee_ end end local defense_data = character_unit:character_damage():damage_melee(action_data) - if defense_data then - defense_data.charge_lerp_value = action_data.charge_lerp_value - end self:_check_melee_special_damage(col_ray, character_unit, defense_data, melee_entry) self:_perform_sync_melee_damage(hit_unit, col_ray, action_data.damage, action_data.damage_effect) @@ -3071,7 +3119,9 @@ function PlayerStandard:_check_melee_special_damage(col_ray, character_unit, def end local melee_tweak = tweak_data.blackmarket.melee_weapons[melee_entry] local char_damage = character_unit:character_damage() + local fire_on_charge = melee_tweak and melee_tweak.stats.charge_bonus_fire local charge_lerp_value = defense_data.charge_lerp_value + local charge_fire_check = (fire_on_charge and charge_lerp_value and charge_lerp_value > tweak_data.blackmarket.melee_weapons[melee_entry].stats.charge_bonus_start) or (not fire_on_charge and true) if melee_tweak.random_special_effects then local selector = WeightedSelector:new() @@ -3101,7 +3151,6 @@ function PlayerStandard:_check_melee_special_damage(col_ray, character_unit, def char_damage:damage_tase(action_data) end - local charge_fire_check = (tweak_data.blackmarket.melee_weapons[melee_entry].stats.charge_bonus_fire and charge_lerp_value and charge_lerp_value > tweak_data.blackmarket.melee_weapons[melee_entry].stats.charge_bonus_start) or (not tweak_data.blackmarket.melee_weapons[melee_entry].stats.charge_bonus_fire and true) if melee_tweak.fire_dot_data and charge_fire_check and char_damage.damage_fire then local action_data = { variant = "fire", @@ -3345,6 +3394,9 @@ function PlayerStandard:_start_action_reload(t) end end + self._queue_fire = nil + self._queue_burst = nil + --Drop My Mag compatibilty --I might take the time to better integrate this into the reload timers so you're not instantly dropping a mag right when you reload for _, weapon_base in ipairs({ weapon, weapon._second_gun and weapon._second_gun:base() }) do @@ -3670,7 +3722,7 @@ function PlayerStandard:_check_action_cash_inspect(t, input) return end - local action_forbidden = self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() or self:_on_zipline() or self:running() or self:_is_reloading() or self:in_steelsight() or self:is_equipping() or self:shooting() or self:_is_cash_inspecting(t) + local action_forbidden = self:_interacting() and not managers.player:has_category_upgrade("player", "no_interrupt_interaction") or self:is_deploying() or self:_changing_weapon() or self:_is_throwing_projectile() or self:_is_meleeing() or self:_on_zipline() or self:running() or self:_is_reloading() or self:in_steelsight() or self:is_equipping() or self:shooting() or self:_is_cash_inspecting(t) or self:_in_burst() if action_forbidden then return @@ -3686,6 +3738,7 @@ function PlayerStandard:_check_action_cash_inspect(t, input) --Applys the anim weight self._camera_unit:anim_state_machine():set_parameter(state, "alt_inspect", anim_weight) + self._equipped_unit:base():tweak_data_anim_play("inspect") managers.player:send_message(Message.OnCashInspectWeapon) end @@ -3703,6 +3756,8 @@ function PlayerStandard:_start_action_unequip_weapon(t, data) --self:_interupt_action_running(t) self:_interupt_action_charging_weapon(t) self._spin_up_shoot = nil + self._queue_burst = nil + self._queue_fire = nil local result = self._ext_camera:play_redirect(self:get_animation("unequip"), speed_multiplier) diff --git a/lua/sc/units/vehicles/animatedvehiclebase.lua b/lua/sc/units/vehicles/animatedvehiclebase.lua index 4d3d786cfd..750a649ffb 100644 --- a/lua/sc/units/vehicles/animatedvehiclebase.lua +++ b/lua/sc/units/vehicles/animatedvehiclebase.lua @@ -18,7 +18,7 @@ Hooks:PostHook(AnimatedVehicleBase, "set_enabled", "woohoo_wow", function(self, elseif self._unit:damage():has_sequence("mat_zeals") and difficulty == 8 then self._unit:damage():run_sequence_simple("mat_zeals") end - elseif faction == "lapd" or faction == "fbi" or faction == "sfpd" then + elseif faction == "lapd" or faction == "fbi" then if self._unit:damage():has_sequence("mat_blueswat") and difficulty < 5 then self._unit:damage():run_sequence_simple("mat_blueswat") elseif self._unit:damage():has_sequence("mat_fbi") and difficulty == 5 or difficulty == 6 then diff --git a/lua/sc/units/weapons/akimboweaponbase.lua b/lua/sc/units/weapons/akimboweaponbase.lua index 8bd894f7b5..0fbce3a831 100644 --- a/lua/sc/units/weapons/akimboweaponbase.lua +++ b/lua/sc/units/weapons/akimboweaponbase.lua @@ -15,11 +15,11 @@ else if fire_mode_data then fire_mode_data.original_fire_rate = fire_mode_data.original_fire_rate or fire_mode_data.fire_rate - if tweak_data.weapon[self._name_id].FIRE_MODE and tweak_data.weapon[self._name_id].FIRE_MODE == "auto" then + --if tweak_data.weapon[self._name_id].FIRE_MODE and tweak_data.weapon[self._name_id].FIRE_MODE == "auto" then fire_mode_data.fire_rate = fire_mode_data.original_fire_rate / 1.25 - else - fire_mode_data.fire_rate = fire_mode_data.original_fire_rate / 1.75 - end + --else + -- fire_mode_data.fire_rate = fire_mode_data.original_fire_rate / 1.5 + --end end end diff --git a/lua/sc/units/weapons/newraycastweaponbase.lua b/lua/sc/units/weapons/newraycastweaponbase.lua index 67d4547cae..509a4c8af7 100644 --- a/lua/sc/units/weapons/newraycastweaponbase.lua +++ b/lua/sc/units/weapons/newraycastweaponbase.lua @@ -218,7 +218,13 @@ function NewRaycastWeaponBase:conditional_accuracy_multiplier(current_state) if full_steelsight then if multi_ray then mul = mul * tweak_data.weapon.stat_info.shotgun_spread_increase_ads or 1 + + for _, category in ipairs(self:categories()) do + local multishot_spread = tweak_data[category] and tweak_data[category].ads_multishot_spread_mult or 1 + mul = mul * multishot_spread + end end + if self:weapon_tweak_data().always_hipfire or self.AKIMBO then mul = mul * tweak_data.weapon.stat_info.hipfire_only_spread_increase or 1 end @@ -611,7 +617,7 @@ function NewRaycastWeaponBase:_update_stats_values(disallow_replenish, ammo_data self._burst_fire_ads_spread_multiplier = self:weapon_tweak_data().BURST_FIRE_ADS_SPREAD_MULTIPLIER self._burst_fire_range_multiplier = self:weapon_tweak_data().BURST_FIRE_RANGE_MULTIPLIER --self._delayed_burst_recoil = self:weapon_tweak_data().DELAYED_BURST_RECOIL - self._burst_delay = self:weapon_tweak_data().BURST_DELAY or (self.AKIMBO and 0.05) or 0.09 + self._burst_delay = self:weapon_tweak_data().BURST_DELAY or (self.AKIMBO and 0.03) or 0.09 self._lock_burst = self:weapon_tweak_data().LOCK_BURST if self._lock_burst then self:_set_burst_mode(true, true) @@ -1321,7 +1327,7 @@ end local toggle_firemode_original = NewRaycastWeaponBase.toggle_firemode function NewRaycastWeaponBase:toggle_firemode(...) - return not self._macno and self._has_burst_fire and not self._locked_fire_mode and not self:gadget_overrides_weapon_functions() and self:_check_toggle_burst() or toggle_firemode_original(self, ...) + return self._burst_rounds_remaining <= 0 and not self._macno and self._has_burst_fire and not self._locked_fire_mode and not self:gadget_overrides_weapon_functions() and self:_check_toggle_burst() or toggle_firemode_original(self, ...) end function NewRaycastWeaponBase:can_reload() diff --git a/lua/sc/units/weapons/npcraycastweaponbase.lua b/lua/sc/units/weapons/npcraycastweaponbase.lua index 3f02663657..8be6269876 100644 --- a/lua/sc/units/weapons/npcraycastweaponbase.lua +++ b/lua/sc/units/weapons/npcraycastweaponbase.lua @@ -157,6 +157,20 @@ function NPCRaycastWeaponBase:_fire_raycast(user_unit, from_pos, direction, dmg_ return result end +function NPCRaycastWeaponBase:trigger_held(...) + local fired = nil + + if self._next_fire_allowed <= Application:time() then + fired = self:fire(...) + + if fired then + self._next_fire_allowed = self._next_fire_allowed + ((tweak_data.weapon[self._name_id].auto and tweak_data.weapon[self._name_id].auto.fire_rate) or 1) + end + end + + return fired +end + function NPCRaycastWeaponBase:_sound_autofire_end() local tweak_sound = tweak_data.weapon[self._name_id].sounds local sound_name = tweak_sound.prefix .. self._setup.user_sound_variant .. self._voice .. "_end" diff --git a/main.xml b/main.xml index 536919020d..7d51cda8b3 100644 --- a/main.xml +++ b/main.xml @@ -7,7 +7,7 @@ - + @@ -87,8 +87,6 @@ - - @@ -343,6 +341,7 @@ + @@ -379,6 +378,8 @@ + + @@ -519,6 +520,7 @@