From 6ad82f6f34c885a281e8645f370d8fd977886688 Mon Sep 17 00:00:00 2001 From: andromeda <50086718+JayAndromeda@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:11:17 -0500 Subject: [PATCH] bungie: patch 8.1.0 - 8.1.5 (#137) * bungie: patch 8.1.0 * add: choir of one and spec sidearm reserves * add: heavy burst shotgun and icebreaker * add: rocket assisted sidearm dmg * fix: pve icebreaker dmg * fix: choir of one pve dmg * fix: high ground * add: closing time * fix: closing time * bungie: patch 8.1.5 --- Cargo.lock | 2 +- Cargo.toml | 2 +- build_resources/cached_build.ron | 70 +++++++++++++---------- build_resources/weapon_formulas.json | 85 +++++++++++++++++----------- src/perks/exotic_armor.rs | 2 +- src/perks/exotic_perks.rs | 17 +++--- src/perks/meta_perks.rs | 23 ++++++++ src/perks/mod.rs | 5 ++ src/perks/perk_options_handler.rs | 9 ++- src/perks/year_1_perks.rs | 6 ++ src/perks/year_6_perks.rs | 20 +++++-- src/perks/year_7_perks.rs | 79 +++++++++++++++++++++++++- src/weapons/reserve_calc.rs | 32 ++++++++++- 13 files changed, 271 insertions(+), 81 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 167c2e9c..57142ee4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -839,7 +839,7 @@ dependencies = [ [[package]] name = "oracle_engine" -version = "8.0.5" +version = "8.1.5" dependencies = [ "built", "console_error_panic_hook", diff --git a/Cargo.toml b/Cargo.toml index 1b2bd86a..e596a85a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "oracle_engine" edition = "2021" -version = "8.0.5" +version = "8.1.5" rust-version = "1.65" repository = "https://github.com/d2foundry/oracle_engine/" build = "build.rs" diff --git a/build_resources/cached_build.ron b/build_resources/cached_build.ron index 46eec046..fe73f342 100644 --- a/build_resources/cached_build.ron +++ b/build_resources/cached_build.ron @@ -1,5 +1,5 @@ ( - last_manifest_version: "227664.24.08.21.1730-3-bnet.56627", + last_manifest_version: "229444.24.11.09.2354-1-bnet.57652", dim_perk_mappings: [ (23371658, 2551157718), (64332393, 2428997981), @@ -36,6 +36,7 @@ (706172244, 4252909580), (711234314, 3511092054), (711628886, 2272927194), + (717070634, 3966416502), (777774560, 1774574192), (781192741, 3708227201), (788178929, 2679249093), @@ -94,6 +95,7 @@ (2002547233, 2213355989), (2014892510, 1428297954), (2037312142, 2594592626), + (2073244114, 2579169598), (2091001077, 1275731761), (2139363611, 744594675), (2140591236, 2319119708), @@ -114,6 +116,7 @@ (2541826827, 776531651), (2562668800, 3324494224), (2570477205, 2458213969), + (2617553311, 1955165503), (2649013855, 2117683199), (2658083589, 3436462433), (2662236651, 3414324643), @@ -125,12 +128,14 @@ (2748801589, 438098033), (2785334058, 684456054), (2799030358, 2109543898), + (2817499044, 3987942396), (2840833776, 3700496672), (2856365672, 2030760728), (2860991074, 2244851822), (2889515627, 3673922083), (2896748467, 557221067), (2898218424, 3722653512), + (2904194311, 1134488199), (2923251173, 1015611457), (2938480696, 247725512), (2939589096, 365154968), @@ -167,6 +172,7 @@ (3797647183, 2010801679), (3878366039, 951095735), (3920370755, 280464955), + (3955464425, 1194056669), (3974407819, 2866798147), (4045335048, 460017080), (4063561849, 2980589453), @@ -466,12 +472,13 @@ 25342263726256186: 1697667052, 96164366097689229: 1690131582, 151851769660428791: 1712898526, + 159563408477030070: 1730591107, 247756957047965770: 1713046196, 286720667179379016: 1680496635, 426551043894261173: 1710479452, 493023904928987938: 1712898526, + 531962313230060982: 1730590632, 592777914046834360: 1680496635, - 599816271413687980: 1713227351, 607066149012376452: 1712942748, 729727116400300520: 1710479452, 743673170876272541: 1684295508, @@ -484,6 +491,7 @@ 1079452123250189338: 1680496635, 1151794517160114820: 1680496635, 1201785814984351021: 1697667052, + 1275250356743671704: 1730654475, 1314493068387908900: 1710703262, 1360754775753024406: 1712954145, 1554031479368009082: 1712898526, @@ -492,6 +500,7 @@ 2022487631388811195: 1712954145, 2191254335229349921: 1684295508, 2237942400504764581: 1680496635, + 2267114322525280915: 1730661888, 2271323569132994441: 1713058005, 2277066384349976511: 1710724046, 2299937750594665614: 1701181946, @@ -504,26 +513,23 @@ 2563303734963395229: 1680496635, 2579867287616434221: 1680496635, 2582315887316527881: 1712955561, - 2668911066598036537: 1712898526, 2712361922010411279: 1698268764, 2760168780730167984: 1684379160, + 2801619315364138722: 1730590632, 2810817194880086838: 1711326555, - 3004488217445250455: 1712942748, 3008335480088787758: 1684377413, + 3025157817720570000: 1730940948, 3124694739480044178: 1710479452, 3138242711524099245: 1712954145, 3139500059912092432: 1712954145, - 3393636850042390246: 1712942748, - 3528261361374862963: 1712954145, 3656318235229422293: 1684379160, - 3941466017707627905: 1712954145, 3986689097416667537: 1680496635, - 4044582387215175309: 1712949500, 4147888747978803714: 1684362236, - 4172437772409060101: 1712949500, + 4249787907601498364: 1730590662, 4311900104822630129: 1710479452, 4315419827562734321: 1712955561, 4382782997569268038: 1680496635, + 4394983267978990161: 1730663115, 4397661654161916656: 1680496635, 4494454098144955160: 1692393868, 4524767293552705221: 1711593365, @@ -531,7 +537,6 @@ 4569342009760144225: 1680496635, 4812869241058066745: 1680496635, 4844906799453798667: 1717263753, - 4853446628103177708: 1712949500, 4892218797544752307: 1724449986, 4912320138215754782: 1698268764, 4912743626812637223: 1710724046, @@ -545,7 +550,6 @@ 5490204527215486242: 1680496635, 5549937041145970107: 1712954145, 5554258319145810390: 1684358756, - 5587189736915968022: 1712898586, 5642771627529812769: 1712954145, 5651488379692480574: 1680496635, 5730993258442906441: 1712954145, @@ -553,8 +557,8 @@ 5768830231017509325: 1712898526, 5817710688730467837: 1692391910, 5912581016949511866: 1680496635, + 5943577166148364587: 1730662935, 5960939197459801903: 1712898526, - 5982825595589047205: 1712942748, 6037254698249202619: 1698268764, 6054917076034235559: 1684379160, 6076666098403797320: 1680496635, @@ -565,22 +569,23 @@ 6230575109249907536: 1680496635, 6243987267281908635: 1701181946, 6274363714618169512: 1684295508, - 6313788515135995397: 1712949500, 6327658762308138670: 1710479452, 6363452143098841417: 1706473954, 6473053250605466342: 1680496635, 6500812278097371025: 1684379160, + 6535290696833366531: 1730591368, 6573503137015225832: 1712898526, 6595410095464072111: 1710724046, + 6688404647401817261: 1730942218, 6699844844506846450: 1680496635, 6747805715162712253: 1680496635, - 6758874728965987499: 1712954145, 6855283399424678182: 1692393868, 6908568959876379152: 1680496635, 6933808191514592685: 1684377413, 6944715218863357907: 1680628406, 7122621605219302199: 1698268764, 7141193817629311303: 1710724046, + 7187944380692619457: 1730594406, 7253551552190870532: 1713060318, 7313615483250839220: 1680496635, 7347641944935334036: 1710724046, @@ -588,16 +593,17 @@ 7493169524533961427: 1680496635, 7597582506962440226: 1685322398, 7694379552234629306: 1692070894, + 7819135696256509853: 1732047535, 7983625608962812396: 1680496635, 8022762522124515381: 1680496635, 8106082430759988391: 1712898526, - 8115465426119871684: 1717263753, 8191980717281991705: 1710724046, 8241434017069492578: 1681936834, 8327454592483952299: 1680496635, 8430403466069600732: 1680496635, 8441156684811791270: 1718741626, 8449346478144492797: 1685317465, + 8533260392798367949: 1730590632, 8550895403021475289: 1713059795, 8576565785560222210: 1680496635, 8587357221083748138: 1710479452, @@ -607,7 +613,6 @@ 8763510390693129511: 1680496635, 8775614015632122880: 1680496635, 8854422331114967618: 1684379160, - 8886024862218411478: 1713360863, 8962282902936320520: 1680496635, 8991469619888284264: 1680496635, 9047328011699883751: 1680496635, @@ -620,10 +625,11 @@ 9489004956803206137: 1680496635, 9526138507653796866: 1718741351, 9620626056191743501: 1680496635, - 9702149135369454073: 1712898915, 9703899090713043668: 1724106344, + 9723841265787267527: 1731026189, 9726296745744303979: 1717263753, 9728586762901908904: 1680496635, + 9754601202357263919: 1730591039, 9834417392745968561: 1697573317, 9844843869658332756: 1713160822, 9910833339952022360: 1680496635, @@ -632,34 +638,33 @@ 10152887516121825520: 1680496635, 10260991195514136372: 1717263753, 10362949304220229966: 1684377413, - 10415504035774815601: 1712949500, - 10475485977387026118: 1718741884, 10483893117766707920: 1710724046, 10560167714726377861: 1680496635, 10571952070840525441: 1680496635, + 10739615916985493409: 1730663402, 10758550488751295140: 1712898526, 10901943782322610329: 1692393868, 10998294304530301782: 1710479452, 11013679018726612442: 1685489087, - 11057840995757609501: 1712949500, 11322964994480880235: 1712942748, - 11338782145942211740: 1713129652, 11362993348484167678: 1689555684, 11542548001101910997: 1701181946, 11554811412464348675: 1680581901, + 11588588445477059031: 1730942931, 11657070273076191468: 1684295508, 11751415656612495180: 1712955561, 11751416756124123391: 1696566906, 11784808576698396833: 1684295508, 11792866108024384582: 1680496635, + 11827635086396145949: 1730590766, 11839155587859974249: 1710479452, 11884910338994267923: 1710724046, 11891134467995490508: 1712430246, 11935434388806816888: 1680496635, 11971503449378884788: 1680496635, - 12000086685271534896: 1713059200, 12036801967101574881: 1710724046, 12180391799000520098: 1710652564, + 12232659098460778380: 1730661813, 12263360506490505738: 1712898526, 12325892118056368530: 1680496635, 12329802572898706721: 1680629457, @@ -667,6 +672,7 @@ 12389450796888940047: 1680581901, 12395815167029581576: 1710479452, 12437622405778850525: 1680496635, + 12437675591873637156: 1730662854, 12496753076773337630: 1712428899, 12569162363419385574: 1680496635, 12575515919115786269: 1680496635, @@ -674,10 +680,12 @@ 12646758339643467371: 1700577766, 12692691720038358244: 1703362640, 12700919354009335382: 1712954145, + 12755130987517284058: 1730661143, 12795027126086721977: 1694536499, 13027179234752494412: 1684358756, 13042737382530873792: 1712954145, 13045224040310436977: 1710724046, + 13232177492902488362: 1730937876, 13385463444919190517: 1684377413, 13386079354000962766: 1684379160, 13397320205534617665: 1712955561, @@ -687,9 +695,8 @@ 13601940378749455053: 1712954145, 13653109446908182109: 1712955561, 13762249673837658437: 1680496635, - 13775797709739613344: 1712942748, - 13800258191388803736: 1712942748, 13825588542506396531: 1692393868, + 13829354016133936556: 1730941224, 13923115613387342882: 1680496635, 13950133909943157225: 1680496635, 14148555925010377664: 1680496635, @@ -701,7 +708,9 @@ 14587969472883855259: 1710724046, 14633952268396238333: 1680496635, 14653711479586740022: 1711328341, + 14667149617307945063: 1730661414, 14683820608543013062: 1684377413, + 14703266489911587834: 1730661271, 14708901793184003398: 1712898526, 14708936092164057946: 1680496635, 14717924909128602966: 1718741000, @@ -710,15 +719,16 @@ 15200413822669298636: 1710479452, 15207095098433440528: 1680496635, 15450820022852980103: 1710724046, + 15480219162363041159: 1730591229, 15502824796685688181: 1684377413, 15555440237134489310: 1680496635, 15660932891370033553: 1712955561, - 15714235929347243916: 1722971128, 15838371886896816978: 1712898526, 15892735954122214721: 1680496635, 15949062174490237448: 1712955561, 15969424579882116223: 1698268764, 15970735762772118334: 1712898526, + 15991784005571362945: 1730663269, 16015876281474265523: 1684377413, 16024709382890568553: 1686522956, 16054053762813903310: 1685489087, @@ -729,29 +739,31 @@ 16422354876371683779: 1680496635, 16475522862564448563: 1680496635, 16475694329210003018: 1680496635, - 16582191795562173260: 1712942748, + 16508103034844284395: 1730663043, 16601707565103156076: 1710479452, 16619525660780727936: 1680496635, 16897273880191509885: 1697667052, 16902030042329507235: 1684377413, 16926591053303423321: 1712954145, + 17033880385050296664: 1732047695, + 17075373874491922674: 1730594287, 17115307512459561417: 1711327049, + 17200727046280595283: 1730590632, 17283189678931478183: 1684377413, - 17385298375651957242: 1712898649, 17510475912938301460: 1680496635, 17549300852572264387: 1684295508, 17557903845863085098: 1684377413, 17573385649225343491: 1713046196, 17597204927108014018: 1680496635, - 17628074861033856401: 1712942748, - 17653460705139584999: 1681936834, 17750427679545006841: 1710654268, 17862934280936635933: 1689028097, 17878804288285267691: 1680496635, 17888456975267958505: 1712954145, 17903567184153978182: 1680496635, 17954793324409161886: 1692391910, + 18009167993201714837: 1730661656, 18031641091888816881: 1680496635, + 18070203709097659925: 1730941157, 18191659443462311345: 1684362236, 18201879985635758711: 1680496635, 18412585884519436836: 1680496635, diff --git a/build_resources/weapon_formulas.json b/build_resources/weapon_formulas.json index 821c5607..f59cdc4e 100644 --- a/build_resources/weapon_formulas.json +++ b/build_resources/weapon_formulas.json @@ -17,6 +17,7 @@ "3602718766": {"name": "Quicksilver Storm", "cat": "default", "subFam": "Rapid-Fire", "magProf": "large" }, "1385166695": {"name": "Centrifuse", "cat": "default", "subFam": "Precision", "magProf": "small"}, "4184462049": {"name": "Necrochasm", "cat": "default", "subFam": "Rapid-Fire", "magProf": "large" }, + "3698448090": {"name": "Choir of One", "cat": "default", "subFam": "ChoirOfOne", "magProf": "choirOfOne" }, "cat": { "default": { @@ -52,12 +53,13 @@ }, "subFam": { - "Rapid-Fire": {"damage": 13.433, "crit_mult": 10.38, "pve_damage": 13.41, "pve_crit_mult": 0, "burst_delay": 2.5, "burst_size": 1, "inner_burst_delay": 0}, - "High-Impact": {"damage": 22.061, "crit_mult": 16, "pve_damage": 22.000, "pve_crit_mult": 5, "burst_delay": 5, "burst_size": 1, "inner_burst_delay": 0}, - "Adaptive": {"damage": 15.033, "crit_mult": 14, "pve_damage": 15.009, "pve_crit_mult": 3, "burst_delay": 3, "burst_size": 1, "inner_burst_delay": 0}, + "Rapid-Fire": {"damage": 13.497, "crit_mult": 10, "pve_damage": 13.41, "pve_crit_mult": 0, "burst_delay": 2.5, "burst_size": 1, "inner_burst_delay": 0}, + "High-Impact": {"damage": 23.003, "crit_mult": 15, "pve_damage": 22.000, "pve_crit_mult": 5, "burst_delay": 5, "burst_size": 1, "inner_burst_delay": 0}, + "Adaptive": {"damage": 15.033, "crit_mult": 13, "pve_damage": 15.009, "pve_crit_mult": 3, "burst_delay": 3, "burst_size": 1, "inner_burst_delay": 0}, "Support-Frame": {"damage": 18.626, "crit_mult": 5.45, "pve_damage": 18.626, "pve_crit_mult": 5.45, "burst_delay": 3, "burst_size": 1, "inner_burst_delay": 0}, - "Precision": {"damage": 19.038, "crit_mult": 14, "pve_damage": 20.000, "pve_crit_mult": 3, "burst_delay": 4, "burst_size": 1, "inner_burst_delay": 0}, + "Precision": {"damage": 19.402, "crit_mult": 13, "pve_damage": 20.000, "pve_crit_mult": 3, "burst_delay": 4, "burst_size": 1, "inner_burst_delay": 0}, "Cerberus": {"damage": 18.615, "crit_mult": 17, "pve_damage": 18.000, "pve_crit_mult": 10, "burst_delay": 5, "burst_size": 4, "inner_burst_delay": 0}, + "ChoirOfOne": {"damage": 40.27, "crit_mult": 15, "pve_damage": 148.905, "pve_crit_mult": 5, "burst_delay": 8, "burst_size": 1, "inner_burst_delay": 0}, "SweetBuiss": {"damage": 15.161, "crit_mult": -5, "pve_damage": 15.000, "pve_crit_mult": -5, "burst_delay": 4, "burst_size": 1, "inner_burst_delay": 0} }, @@ -78,6 +80,10 @@ "mag": {"evpp": 0.0 ,"vpp": 0.0, "offset": 150.0}, "reserve_id": 0 }, + "choirOfOne": { + "mag": {"evpp": 0.0 ,"vpp": 0.0, "offset": 25.0}, + "reserve_id": 3698448090 + }, "tommy": { "mag": {"evpp": 0.0 ,"vpp": 0.0, "offset": 100.0}, "reserve_id": 0 @@ -129,8 +135,8 @@ } }, "subFam": { - "Precision": {"damage": 90.0, "crit_mult": -2.5, "pve_damage": 100.74, "pve_crit_mult": 0, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, - "Lightweight": {"damage": 77.692, "crit_mult": 5, "pve_damage": 85.61, "pve_crit_mult": 5, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, + "Precision": {"damage": 99.0, "crit_mult": -9, "pve_damage": 100.74, "pve_crit_mult": 0, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, + "Lightweight": {"damage": 77.555, "crit_mult": 5, "pve_damage": 85.61, "pve_crit_mult": 5, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, "Trinity": {"damage": 29.077, "crit_mult": 0, "pve_damage": 34.3, "pve_crit_mult": 0, "burst_delay": 0, "burst_size": 3, "inner_burst_delay": 0, "one_ammo":true}, "Hierarchy": {"damage": 82.308, "crit_mult": 5, "pve_damage": 100.74, "pve_crit_mult": 0, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, "leviathan": {"damage": 345.6, "crit_mult": 5, "pve_damage": 345.6, "pve_crit_mult": 5, "burst_delay": 0, "burst_size": 1, "inner_burst_delay": 0}, @@ -354,8 +360,8 @@ "WaveFrame": {"damage": 130.0, "crit_mult": -25.5, "pve_damage": 130.0, "pve_crit_mult": -25.5, "burst_delay": 20, "burst_size": 1, "inner_burst_delay": 0.0}, "Lightweight": {"damage": 200.0, "crit_mult": -25.5, "pve_damage": 200.0, "pve_crit_mult": -25.5,"burst_delay": 20, "burst_size": 1, "inner_burst_delay": 0.0}, "FightingLion": {"damage": 150.0, "crit_mult": -25.5, "pve_damage": 150.0, "pve_crit_mult": -25.5, "burst_delay": 20, "burst_size": 1, "inner_burst_delay": 0.0}, - "Adaptive": {"damage": 280.5, "crit_mult": -25.5, "pve_damage": 280.5, "pve_crit_mult": -25.5, "burst_delay": 15, "burst_size": 1, "inner_burst_delay": 0.0}, - "Rapid-Fire": {"damage": 225.0, "crit_mult": -25.5, "pve_damage": 225.0, "pve_crit_mult": -25.5, "burst_delay": 12, "burst_size": 1, "inner_burst_delay": 0.0}, + "Adaptive": {"damage": 280.5, "crit_mult": -25.5, "pve_damage": 280.5, "pve_crit_mult": -25.5, "burst_delay": 15, "burst_size": 1, "inner_burst_delay": 0.0}, + "Rapid-Fire": {"damage": 240.75, "crit_mult": -25.5, "pve_damage": 240.75, "pve_crit_mult": -25.5, "burst_delay": 12, "burst_size": 1, "inner_burst_delay": 0.0}, "Precision": {"damage": 300.0, "crit_mult": -25.5, "pve_damage": 300.0, "pve_crit_mult": -25.5, "burst_delay": 18, "burst_size": 1, "inner_burst_delay": 0.0}, "Parasite": {"damage": 835.0, "crit_mult": -25.5, "pve_damage": 835.0, "pve_crit_mult": -25.5, "burst_delay": 18, "burst_size": 1, "inner_burst_delay": 0.0}, "TODO": {"damage": 0.0, "crit_mult": -25.5, "pve_damage": 0.0, "pve_crit_mult": -25.5, "burst_delay": 0, "burst_size": 0, "inner_burst_delay": 0.0}, @@ -456,14 +462,14 @@ } }, "subFam": { - "Precision": {"damage": 40.462, "crit_mult": 12, "pve_damage": 40.00, "pve_crit_mult": 0, "burst_delay": 10, "burst_size": 1, "inner_burst_delay": 0}, - "Aggressive": {"damage": 47.538, "crit_mult": 18, "pve_damage": 50.0, "pve_crit_mult": 5, "burst_delay": 15, "burst_size": 1, "inner_burst_delay": 0}, - "Adaptive": {"damage": 44.769, "crit_mult": 15.65, "pve_damage": 46.502, "pve_crit_mult": 0, "burst_delay": 13, "burst_size": 1, "inner_burst_delay": 0}, + "Precision": {"damage": 45.297, "crit_mult": 3, "pve_damage": 40.00, "pve_crit_mult": 0, "burst_delay": 10, "burst_size": 1, "inner_burst_delay": 0}, + "Aggressive": {"damage": 49.029, "crit_mult": 18, "pve_damage": 50.0, "pve_crit_mult": 5, "burst_delay": 15, "burst_size": 1, "inner_burst_delay": 0}, + "Adaptive": {"damage": 44.504, "crit_mult": 15, "pve_damage": 46.502, "pve_crit_mult": 0, "burst_delay": 13, "burst_size": 1, "inner_burst_delay": 0}, "Lightweight":{"damage": 39.692, "crit_mult": 22, "pve_damage": 42.00, "pve_crit_mult": 5, "burst_delay": 12, "burst_size": 1, "inner_burst_delay": 0}, "Crimson": {"damage": 18.042, "crit_mult": 18, "pve_damage": 19.00, "pve_crit_mult": 5, "burst_delay": 7, "burst_size": 3, "inner_burst_delay": 3}, "Eriana": {"damage": 77.115, "crit_mult": 18, "pve_damage": 78.00, "pve_crit_mult": 5, "burst_delay": 20, "burst_size": 1, "inner_burst_delay": 0}, "LastWord": {"damage": 38.308, "crit_mult": 31, "pve_damage": 40.3118, "pve_crit_mult": 15, "burst_delay": 8, "burst_size": 1, "inner_burst_delay": 0}, - "HeavyBurst": {"damage": 23.846, "crit_mult": 29, "pve_damage": 25.006, "pve_crit_mult": 15, "burst_delay": 11, "burst_size": 2, "inner_burst_delay": 3} + "HeavyBurst": {"damage": 23.995, "crit_mult": 36, "pve_damage": 25.006, "pve_crit_mult": 15, "burst_delay": 11, "burst_size": 2, "inner_burst_delay": 3} }, "magProf": { "small": { @@ -607,8 +613,8 @@ } }, - "subFam": { - "High-Impact": {"damage": 47.574, "crit_mult": -5, "pve_damage": 39.601, "pve_crit_mult": -5, "burst_delay": 5, "burst_size": 1, "inner_burst_delay": 0.0}, + "subFam": { + "High-Impact": {"damage": 47.574, "crit_mult": -2, "pve_damage": 39.601, "pve_crit_mult": -2, "burst_delay": 5, "burst_size": 1, "inner_burst_delay": 0.0}, "Adaptive": {"damage": 40.99, "crit_mult": -5, "pve_damage": 34.261, "pve_crit_mult": -5, "burst_delay": 4, "burst_size": 1, "inner_burst_delay": 0.0}, "Aggressive": {"damage": 36.154, "crit_mult": -10, "pve_damage": 36.154, "pve_crit_mult": -10, "burst_delay": 3, "burst_size": 1, "inner_burst_delay": 0.0}, "Rapid-Fire": {"damage": 25.515, "crit_mult": -10, "pve_damage": 21.4, "pve_crit_mult": -10, "burst_delay": 2, "burst_size": 1, "inner_burst_delay": 0.0}, @@ -655,6 +661,7 @@ "891750167": {"name": "Revision Zero III", "cat": "revisionZero", "subFam": "Aggressive", "magProf": "aggressive"}, "891750166": {"name": "Revision Zero II", "cat": "revisionZero", "subFam": "Aggressive", "magProf": "aggressive"}, "3834106778": {"name": "Revision Zero I", "cat": "revisionZero", "subFam": "Aggressive", "magProf": "aggressive"}, + "1473821207": {"name": "Revision Zero", "cat": "revisionZero", "subFam": "Aggressive", "magProf": "aggressive"}, "427899681": {"name": "Red Death Reformed", "cat": "default", "subFam": "High-Impact", "magProf": "default"}, "1634975868": {"name": "Heavy Burst", "cat": "default", "subFam": "HeavyBurst", "magProf": "graviton"}, "69420": {"name": "test_weapon", "cat": "test", "subFam": "test", "magProf": "test"}, @@ -691,14 +698,14 @@ } }, "subFam": { - "Aggressive": {"damage": 15.478, "crit_mult": 22, "pve_damage": 18.60, "pve_crit_mult": 10, "burst_delay": 10, "burst_size": 4, "inner_burst_delay": 2}, - "High-Impact": {"damage": 22.061, "crit_mult": 16, "pve_damage": 26.4, "pve_crit_mult": 5, "burst_delay": 12, "burst_size": 3, "inner_burst_delay": 2}, - "Rapid-Fire": {"damage": 14.615, "crit_mult": 20, "pve_damage": 16.80, "pve_crit_mult": 10, "burst_delay": 6, "burst_size": 3, "inner_burst_delay": 2}, - "Adaptive": {"damage": 20.154, "crit_mult": 16, "pve_damage": 22.812, "pve_crit_mult": 8, "burst_delay": 10, "burst_size": 3, "inner_burst_delay": 2}, - "Lightweight": {"damage": 17.07, "crit_mult": 16.5, "pve_damage": 19.2, "pve_crit_mult": 8, "burst_delay": 8, "burst_size": 3, "inner_burst_delay": 2}, + "Aggressive": {"damage": 15.495, "crit_mult": 23, "pve_damage": 18.60, "pve_crit_mult": 10, "burst_delay": 10, "burst_size": 4, "inner_burst_delay": 2}, + "High-Impact": {"damage": 21.996, "crit_mult": 15, "pve_damage": 26.4, "pve_crit_mult": 5, "burst_delay": 12, "burst_size": 3, "inner_burst_delay": 2}, + "Rapid-Fire": {"damage": 14.504, "crit_mult": 20, "pve_damage": 16.80, "pve_crit_mult": 10, "burst_delay": 6, "burst_size": 3, "inner_burst_delay": 2}, + "Adaptive": {"damage": 21.996, "crit_mult": 8, "pve_damage": 22.812, "pve_crit_mult": 8, "burst_delay": 10, "burst_size": 3, "inner_burst_delay": 2}, + "Lightweight": {"damage": 17.006, "crit_mult": 18, "pve_damage": 19.2, "pve_crit_mult": 8, "burst_delay": 8, "burst_size": 3, "inner_burst_delay": 2}, "VigilanceWing": {"damage": 15.972, "crit_mult": 8, "pve_damage": 18.9, "pve_crit_mult": -2, "burst_delay": 9, "burst_size": 5, "inner_burst_delay": 2}, - "GravitonLance": {"damage": 19.038, "crit_mult": 19, "pve_damage": 19.018, "pve_crit_mult": 8, "burst_delay": 10, "burst_size": 2, "inner_burst_delay": 2}, - "HeavyBurst": {"damage": 22.91, "crit_mult": 16.728, "pve_damage": 22.91, "pve_crit_mult": 16.728, "burst_delay": 10, "burst_size": 2, "inner_burst_delay": 2}, + "GravitonLance": {"damage": 22.996, "crit_mult": 18, "pve_damage": 19.018, "pve_crit_mult": 8, "burst_delay": 9, "burst_size": 2, "inner_burst_delay": 2}, + "HeavyBurst": {"damage": 22.996, "crit_mult": 18, "pve_damage": 18.786, "pve_crit_mult": 16.728, "burst_delay": 9, "burst_size": 2, "inner_burst_delay": 2}, "test": {"damage": 10.0, "crit_mult": 25.5, "pve_damage": 10.0, "pve_crit_mult": 25.5, "burst_delay": 2, "burst_size": 5, "inner_burst_delay": 2} }, "magProf": { @@ -872,11 +879,11 @@ } }, "subFam": { - "High-Impact": {"damage":40.154, "crit_mult":26, "pve_damage":40.00, "pve_crit_mult":13, "burst_delay":12, "burst_size":1, "inner_burst_delay":0}, - "Rapid-Fire": {"damage":28.154, "crit_mult":22, "pve_damage":27.50, "pve_crit_mult":10, "burst_delay":7, "burst_size":1, "inner_burst_delay":0}, - "Lightweight": {"damage":32.143, "crit_mult":26, "pve_damage":32.025, "pve_crit_mult":13, "burst_delay":9, "burst_size":1, "inner_burst_delay":0}, - "Precision": {"damage":38.077, "crit_mult":16, "pve_damage":38.00, "pve_crit_mult":5, "burst_delay":10, "burst_size":1, "inner_burst_delay":0}, - "Aggressive": {"damage":54.077, "crit_mult":10, "pve_damage":70.2, "pve_crit_mult":-1, "burst_delay":15, "burst_size":1, "inner_burst_delay":0} + "High-Impact": {"damage":42.001, "crit_mult":26, "pve_damage":40.00, "pve_crit_mult":13, "burst_delay":12, "burst_size":1, "inner_burst_delay":0}, + "Rapid-Fire": {"damage":27.996, "crit_mult":23, "pve_damage":27.50, "pve_crit_mult":10, "burst_delay":7, "burst_size":1, "inner_burst_delay":0}, + "Lightweight": {"damage":32.006, "crit_mult":26, "pve_damage":32.025, "pve_crit_mult":13, "burst_delay":9, "burst_size":1, "inner_burst_delay":0}, + "Precision": {"damage":38.506, "crit_mult":15, "pve_damage":38.00, "pve_crit_mult":5, "burst_delay":10, "burst_size":1, "inner_burst_delay":0}, + "Aggressive": {"damage":53.995, "crit_mult":10, "pve_damage":70.2, "pve_crit_mult":-1, "burst_delay":15, "burst_size":1, "inner_burst_delay":0} }, "magProf": { "default": { @@ -891,6 +898,7 @@ "895140517": {"name": "Precision Frame", "cat": "default", "subFam": "Precision", "magProf": "default", "pve":1.245}, "536517534": {"name": "Duality", "cat": "Duality", "subFam": "Slug", "magProf": "default", "pve":1.242}, "918679156": {"name": "Precision Frame", "cat": "slug", "subFam": "Slug", "magProf": "default", "pve":1.204}, + "3923638944": {"name": "Heavy Burst", "cat": "slug", "subFam": "HeavyBurst", "magProf": "HeavyBurst", "pve":1.204}, "996573084": {"name": "Rapid-Fire Frame", "cat": "default", "subFam": "Rapid-Fire", "magProf": "rapidfire", "pve":0.934}, "1210807262": {"name": "Tractor Cannon", "cat": "Tractor", "subFam": "Tractor", "magProf": "tractor", "pve":1.10}, "1394384862": {"name": "The Chaperone", "cat": "slug", "subFam": "Slug", "magProf": "default", "pve":1.242}, @@ -960,6 +968,7 @@ "Conditional": {"damage":26.70, "crit_mult":-20, "pve_damage":22.25, "pve_crit_mult":-20, "burst_delay":33, "burst_size":12, "inner_burst_delay":0, "one_ammo": true}, "Acrius": {"damage":26.70, "crit_mult":-20, "pve_damage":22.25, "pve_crit_mult":-20, "burst_delay":33, "burst_size":12, "inner_burst_delay":0, "one_ammo": true}, "Slug": {"damage":180.154, "crit_mult":13, "pve_damage":163.718, "pve_crit_mult":13, "burst_delay":27, "burst_size":1, "inner_burst_delay":0, "one_ammo": true}, + "HeavyBurst": {"damage":98.995, "crit_mult":13, "pve_damage":98.995, "pve_crit_mult":13, "burst_delay":27, "burst_size":2, "inner_burst_delay":2, "one_ammo": true}, "LoW": {"damage":41.923, "crit_mult":-3, "pve_damage":39.0, "pve_crit_mult":-3, "burst_delay":6, "burst_size":5, "inner_burst_delay":2}, "Lightweight": {"damage":22.01, "crit_mult":-20, "pve_damage":18.33, "pve_crit_mult":-20, "burst_delay":22, "burst_size":12, "inner_burst_delay":0, "one_ammo": true}, "Tractor": {"damage":22.01, "crit_mult":-20, "pve_damage":18.33, "pve_crit_mult":-20, "burst_delay":22, "burst_size":12, "inner_burst_delay":0, "one_ammo": true}, @@ -970,6 +979,11 @@ "mag": {"evpp": 0.0, "vpp": 0.0375, "offset": 3.625}, "reserve_id": 71 }, + "HeavyBurst": { + "mag": {"evpp": 0.0, "vpp": 0.075, "offset": 7.25}, + "round_to": 2, + "reserve_id": 702 + }, "rapidfire": { "mag": {"vpp": 0.0375, "offset": 3.625}, "reserve_id": 701 @@ -1007,8 +1021,8 @@ "3449390870": {"name": "Adaptive Frame", "cat": "default" , "subFam": "Adaptive_Burst", "magProf": "adaptive_burst"}, "2641107734": {"name": "Trespasser", "cat": "default" , "subFam": "Adaptive_Burst", "magProf": "adaptive_burst"}, "2984682260": {"name": "Forerunner", "cat": "Forerunner", "subFam": "Forerunner", "magProf": "forerunner"}, - "1903618525": {"name": "Final Warning", "cat": "default" , "subFam": "Final-Warning", "magProf": "final_warning"}, - "2928496916": {"name": "Rocket-Assisted Frame", "cat": "zero", "subFam": "zero", "magProf": "rocket_assisted"}, + "1903618525": {"name": "Final Warning", "cat": "default" , "subFam": "Final-Warning", "magProf": "final_warning"}, + "2928496916": {"name": "Rocket-Assisted Frame", "cat": "default", "subFam": "RocketAssisted", "magProf": "rocket_assisted"}, "cat": { "default": { "range": {"vpp_start": 0.04,"offset_start": 11,"vpp_end": 0.03,"offset_end": 22, "floor_percent": 0.5}, @@ -1050,6 +1064,7 @@ "Adaptive": {"damage":36.083, "crit_mult":5, "pve_damage":36.00, "pve_crit_mult":-5, "burst_delay":6, "burst_size":1, "inner_burst_delay":0}, "Lightweight": {"damage":31.038, "crit_mult":5, "pve_damage":31.00, "pve_crit_mult":-5, "burst_delay":5, "burst_size":1, "inner_burst_delay":0}, "Forerunner": {"damage":47.231, "crit_mult":16, "pve_damage":39.114, "pve_crit_mult":15, "burst_delay":9, "burst_size":1, "inner_burst_delay":0}, + "RocketAssisted": {"damage":93.301, "crit_mult":-20.63, "pve_damage":243.308, "pve_crit_mult":-20.63, "burst_delay":18, "burst_size":1, "inner_burst_delay":0}, "zero": {"damage": 0, "crit_mult": 0, "pve_damage": 0, "pve_crit_mult": 0, "burst_delay": 0, "burst_size": 0, "inner_burst_delay": 0} }, "magProf": { @@ -1099,6 +1114,7 @@ "3081173348": {"name": "Borealis", "cat": "default", "subFam": "Aggressive", "magProf": "default", "pve": 1.265}, "3468089894": {"name": "Aggressive Frame", "cat": "default", "subFam": "Aggressive", "magProf": "default", "pve": 1.265}, "2905188646": {"name": "Still Hunt", "cat": "default", "subFam": "Adaptive", "magProf": "default", "pve": 1.265}, + "1111334348": {"name": "Ice Breaker", "cat": "default", "subFam": "IceBreaker", "magProf": "iceBreaker", "pve": 1.265}, "cat": { "default": { "range": {"vpp_start": 0.0,"offset_start": 999.0,"vpp_end": 0.0,"offset_end": 999.9, "floor_percent": 0.999}, @@ -1115,6 +1131,7 @@ "Rapid-Fire": {"damage":85.002 , "crit_mult":99, "pve_damage":90.952, "pve_crit_mult":99, "burst_delay":13, "burst_size":1, "inner_burst_delay":0}, "Adaptive": {"damage":118.999 , "crit_mult":89, "pve_damage":127.329, "pve_crit_mult":89, "burst_delay":20, "burst_size":1, "inner_burst_delay":0}, "Aggressive": {"damage":135.007, "crit_mult":102, "pve_damage":144.457, "pve_crit_mult":102, "burst_delay":25, "burst_size":1, "inner_burst_delay":0}, + "IceBreaker": {"damage":135.007, "crit_mult":102, "pve_damage":172.554, "pve_crit_mult":102, "burst_delay":37, "burst_size":1, "inner_burst_delay":0}, "Whisper": {"damage":170, "crit_mult":102, "pve_damage":181.9, "pve_crit_mult":102, "burst_delay":25, "burst_size":1, "inner_burst_delay":0} }, "magProf": { @@ -1126,6 +1143,10 @@ "mag": {"vpp": 0.03, "offset": 2.49}, "reserve_id": 1201 }, + "iceBreaker": { + "mag": {"vpp": 0.0, "offset": 10.0}, + "reserve_id": 0 + }, "whisper": { "mag": {"vpp": 0.03, "offset": 2.49}, "reserve_id": 281315705 @@ -1167,10 +1188,10 @@ } }, "subFam": { - "Aggressive": {"damage":13.613, "crit_mult":12,"pve_damage":14.00, "pve_crit_mult":0, "burst_delay":2.5, "burst_size":1, "inner_burst_delay":0}, - "Lightweight":{"damage":10.542, "crit_mult":21, "pve_damage":10.86, "pve_crit_mult":8, "burst_delay":2.0, "burst_size":1, "inner_burst_delay":0}, - "Precision": {"damage":16.411, "crit_mult":7, "pve_damage":17.01, "pve_crit_mult":-5, "burst_delay":3.0, "burst_size":1, "inner_burst_delay":0}, - "Adaptive": {"damage":10.905, "crit_mult":11, "pve_damage":11.25, "pve_crit_mult":0, "burst_delay":2.0, "burst_size":1, "inner_burst_delay":0}, + "Aggressive": {"damage":13.613, "crit_mult":13,"pve_damage":14.00, "pve_crit_mult":0, "burst_delay":2.5, "burst_size":1, "inner_burst_delay":0}, + "Lightweight":{"damage":10.6, "crit_mult":21, "pve_damage":10.86, "pve_crit_mult":8, "burst_delay":2.0, "burst_size":1, "inner_burst_delay":0}, + "Precision": {"damage":16.701, "crit_mult":5, "pve_damage":17.01, "pve_crit_mult":-5, "burst_delay":3.0, "burst_size":1, "inner_burst_delay":0}, + "Adaptive": {"damage":11.498, "crit_mult":11, "pve_damage":11.25, "pve_crit_mult":0, "burst_delay":2.0, "burst_size":1, "inner_burst_delay":0}, "Osteo" : {"damage":18.202, "crit_mult":6, "pve_damage":18.73, "pve_crit_mult":-5, "burst_delay":3.0, "burst_size":1, "inner_burst_delay":0} }, "magProf": { diff --git a/src/perks/exotic_armor.rs b/src/perks/exotic_armor.rs index 319452d3..07864116 100644 --- a/src/perks/exotic_armor.rs +++ b/src/perks/exotic_armor.rs @@ -50,7 +50,7 @@ pub fn exotic_armor() { let mult = if _input.calc_data.ammo_type == &AmmoType::SPECIAL { 0.3 } else { - 0.6 + 0.45 }; DamageModifierResponse { diff --git a/src/perks/exotic_perks.rs b/src/perks/exotic_perks.rs index b03bab10..a46eb434 100644 --- a/src/perks/exotic_perks.rs +++ b/src/perks/exotic_perks.rs @@ -163,6 +163,7 @@ pub fn exotic_perks() { let mut out = HashMap::new(); if _input.value > 0 { out.insert(StatHashes::HANDLING.into(), 20); + out.insert(StatHashes::STABILITY.into(), 20); out.insert(StatHashes::RELOAD.into(), 40); }; out @@ -218,13 +219,12 @@ pub fn exotic_perks() { add_rsmr( Perks::Roadborn, Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { - let mut reload = 0; - if _input.value > 0 { - reload = 40; + if _input.value == 0 { + return ReloadModifierResponse::default(); }; ReloadModifierResponse { - reload_stat_add: reload, - reload_time_scale: 1.0, + reload_stat_add: 40, + reload_time_scale: 0.75, } }), ); @@ -397,6 +397,7 @@ pub fn exotic_perks() { Box::new(|_input: ModifierResponseInput| -> FiringModifierResponse { FiringModifierResponse { burst_size_add: -2.0, + burst_delay_add: -0.033, ..Default::default() } }), @@ -405,10 +406,10 @@ pub fn exotic_perks() { add_dmr( Perks::HakkeHeavyBurst, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { - let crit_scale = 1.828 / _input.calc_data.base_crit_mult; + let crit_scale = 1.8525 / _input.calc_data.base_crit_mult; DamageModifierResponse { - explosive_dmg_scale: 1.48, - impact_dmg_scale: 1.48, + explosive_dmg_scale: 1.485, + impact_dmg_scale: 1.485, crit_scale, ..Default::default() } diff --git a/src/perks/meta_perks.rs b/src/perks/meta_perks.rs index 38c5b358..e7444ff9 100644 --- a/src/perks/meta_perks.rs +++ b/src/perks/meta_perks.rs @@ -54,12 +54,26 @@ pub fn meta_perks() { WeaponType::AUTORIFLE | WeaponType::PULSERIFLE => 1.15, WeaponType::SUBMACHINEGUN => 1.1, WeaponType::HANDCANNON => 1.05, + WeaponType::SNIPER => 1.6, _ => 1.0, }; } if *_input.calc_data.enemy_type == EnemyType::ELITE && !_input.pvp { dmg_scale *= match *_input.calc_data.weapon_type { WeaponType::TRACERIFLE => 1.2, + WeaponType::SNIPER => 1.75, + _ => 1.0, + }; + } + if *_input.calc_data.enemy_type == EnemyType::MINIBOSS && !_input.pvp { + dmg_scale *= match *_input.calc_data.weapon_type { + WeaponType::SNIPER => 1.35, + _ => 1.0, + }; + } + if *_input.calc_data.enemy_type == EnemyType::CHAMPION && !_input.pvp { + dmg_scale *= match *_input.calc_data.weapon_type { + WeaponType::SNIPER => 1.25, _ => 1.0, }; } @@ -164,6 +178,15 @@ pub fn meta_perks() { }; }; } + if *_input.calc_data.weapon_type == WeaponType::SIDEARM && _input.calc_data.intrinsic_hash == 914 { + let percent = if _input.pvp {0.536} else {0.822}; + + return ExplosivePercentResponse { + percent, + delyed: 0.0, + retain_base_total: true + }; + } if *_input.calc_data.weapon_type == WeaponType::ROCKET && _input.calc_data.intrinsic_hash < 1000 //ensures not exotic diff --git a/src/perks/mod.rs b/src/perks/mod.rs index 05ea2b13..92e7a70b 100644 --- a/src/perks/mod.rs +++ b/src/perks/mod.rs @@ -427,6 +427,11 @@ pub enum Perks { ChaosReshaped = 3640170453, CircleOfLife = 2298656195, + //episode 2 | year 7 + AirTrigger = 1421772400, + ClosingTime = 1194056669, + LoneWolf = 2579169598, + //subclass OnYourMark = 3066103999, Hedrons = 3469412970, diff --git a/src/perks/perk_options_handler.rs b/src/perks/perk_options_handler.rs index 36162547..f8f59ad7 100644 --- a/src/perks/perk_options_handler.rs +++ b/src/perks/perk_options_handler.rs @@ -293,19 +293,24 @@ fn hash_to_perk_option_data(_hash: u32) -> Option { //season 22 | year 6 Perks::PrecisionInstrument => Some(PerkOptionData::stacking(6)), Perks::LooseChange => Some(PerkOptionData::toggle()), - Perks::HighGround => Some(PerkOptionData::toggle()), + Perks::HighGround => Some(PerkOptionData::stacking(3)), Perks::HeadRush => Some(PerkOptionData::toggle()), Perks::EnlightendAction => Some(PerkOptionData::stacking(12)), Perks::SwordLogic => Some(PerkOptionData::stacking(4)), //season 23 | year 6 Perks::Onslaught => Some(PerkOptionData::stacking(3)), Perks::DesperateMeasures => Some(PerkOptionData::stacking(3)), - Perks::MasterOfArms => Some(PerkOptionData::toggle()), + Perks::MasterOfArms => Some(PerkOptionData::stacking(2)), //episode 1 | year 7 Perks::ChaosReshaped => Some(PerkOptionData::stacking(2)), Perks::CircleOfLife => Some(PerkOptionData::toggle()), + //episode 2 | year 7 + Perks::AirTrigger => Some(PerkOptionData::toggle()), + Perks::ClosingTime => Some(PerkOptionData::options(["Base", "Max Effect"].to_vec())), + Perks::LoneWolf => Some(PerkOptionData::options(["Base", "Alone"].to_vec())), + //exotics Perks::CranialSpike => Some(PerkOptionData::stacking(5)), Perks::DarkForgedTrigger => Some(PerkOptionData::toggle()), diff --git a/src/perks/year_1_perks.rs b/src/perks/year_1_perks.rs index 5f0676d4..241a77bc 100644 --- a/src/perks/year_1_perks.rs +++ b/src/perks/year_1_perks.rs @@ -164,6 +164,12 @@ pub fn year_1_perks() { Perks::ExplosivePayload, Box::new(|_input: ModifierResponseInput| -> DamageModifierResponse { if _input.pvp { + if *_input.calc_data.weapon_type == WeaponType::HANDCANNON { + return DamageModifierResponse { + explosive_dmg_scale: 0.93, + ..Default::default() + }; + } DamageModifierResponse::default() } else { DamageModifierResponse { diff --git a/src/perks/year_6_perks.rs b/src/perks/year_6_perks.rs index 3f0455c9..fdff2b93 100644 --- a/src/perks/year_6_perks.rs +++ b/src/perks/year_6_perks.rs @@ -381,7 +381,14 @@ pub fn year_6_perks() { if _input.value == 0 { return DamageModifierResponse::default(); } - let mult = if _input.pvp { 1.15 } else { 1.25 }; + let mult = match (_input.value, _input.pvp) { + (0, _) => 0.0, + (1, false) => 1.1, + (2, false) => 1.175, + (3.., false) => 1.25, + (1..=2, true) => 1.1, + (3.., true) => 1.15, + }; DamageModifierResponse { impact_dmg_scale: mult, @@ -664,9 +671,14 @@ pub fn year_6_perks() { if _input.value == 0 { return DamageModifierResponse::default(); } + let buff = match _input.value { + 0 => 1.0, + 1 => 1.15, + 2.. => 1.25, + }; DamageModifierResponse { - impact_dmg_scale: 1.15, - explosive_dmg_scale: 1.15, + impact_dmg_scale: buff, + explosive_dmg_scale: buff, ..Default::default() } }), @@ -699,7 +711,7 @@ pub fn year_6_perks() { 0 => unreachable!(), 1 => 20, 2.. => 60, - }; + }; stats.insert(StatHashes::RELOAD.into(), buff); stats }), diff --git a/src/perks/year_7_perks.rs b/src/perks/year_7_perks.rs index c231b349..cf9f189a 100644 --- a/src/perks/year_7_perks.rs +++ b/src/perks/year_7_perks.rs @@ -46,5 +46,82 @@ pub fn year_7_perks() { ..Default::default() } }), - ) + ); + add_sbr( + Perks::AirTrigger, + Box::new(|_input: ModifierResponseInput| -> HashMap { + let mut stats = HashMap::new(); + + if _input.value > 0 { + stats.insert(StatHashes::RELOAD.into(), 30); + } + stats + }), + ); + add_rsmr( + Perks::AirTrigger, + Box::new(|_input: ModifierResponseInput| -> ReloadModifierResponse { + let buff = 0.8; + if _input.value == 0 { + return ReloadModifierResponse::default(); + } + ReloadModifierResponse { + reload_time_scale: buff, + reload_stat_add: 30, + } + }), + ); + add_sbr( + Perks::LoneWolf, + Box::new(|_input: ModifierResponseInput| -> HashMap { + let mut stats = HashMap::new(); + if _input.value > 0 { + stats.insert(StatHashes::AIRBORNE.into(), 10 * _input.value as i32); + stats.insert(StatHashes::AIM_ASSIST.into(), 10 * _input.value as i32); + } + stats + }), + ); + add_hmr( + Perks::LoneWolf, + Box::new( + |_input: ModifierResponseInput| -> HandlingModifierResponse { + if _input.value == 0 { + HandlingModifierResponse::default(); + } + HandlingModifierResponse { + ads_scale: 1.0 - (0.1 * _input.value as f64), + ..Default::default() + } + }, + ), + ); + add_sbr( + Perks::ClosingTime, + Box::new(|_input: ModifierResponseInput| -> HashMap { + let mut stats = HashMap::new(); + if _input.value > 0 { + stats.insert(StatHashes::RANGE.into(), 10 * _input.value as i32); + stats.insert(StatHashes::HANDLING.into(), (20 * _input.value as i32) + 10); + } + stats + }), + ); + add_hmr( + Perks::ClosingTime, + Box::new( + |_input: ModifierResponseInput| -> HandlingModifierResponse { + if _input.value == 0 { + HandlingModifierResponse::default(); + } + HandlingModifierResponse { + stat_add: 25 * _input.value as i32, + stow_scale: 1.0 - (0.1 * _input.value as f64), + draw_scale: 1.0 - (0.1 * _input.value as f64), + ads_scale: 1.0 - (0.1 * _input.value as f64), + ..Default::default() + } + }, + ), + ); } diff --git a/src/weapons/reserve_calc.rs b/src/weapons/reserve_calc.rs index d192d8b6..99bf4d03 100644 --- a/src/weapons/reserve_calc.rs +++ b/src/weapons/reserve_calc.rs @@ -23,6 +23,7 @@ enum ReserveIDs { HighInventoryRockets, AdaptiveBurstLinearFusionRifle, RocketAssistedFrame, + HeavyBurstShotgun, //kinetic exotic special Arbalest, @@ -40,6 +41,7 @@ enum ReserveIDs { Merciless, Telesto, Tessellation, + ChoirOfOne, //exotic heavy Anarchy, @@ -88,6 +90,7 @@ impl From for ReserveIDs { 1002 => ReserveIDs::HighInventoryRockets, 2202 => ReserveIDs::AdaptiveBurstLinearFusionRifle, 1701 => ReserveIDs::RocketAssistedFrame, + 702 => ReserveIDs::HeavyBurstShotgun, //kinetic exotic special 2564164194 => ReserveIDs::Arbalest, @@ -105,6 +108,7 @@ impl From for ReserveIDs { 656200654 => ReserveIDs::Merciless, 1927916065 => ReserveIDs::Telesto, 2769013282 => ReserveIDs::Tessellation, + 3698448090 => ReserveIDs::ChoirOfOne, //heavy 389268985 => ReserveIDs::Anarchy, @@ -161,6 +165,7 @@ pub fn calc_reserves(_mag_size: f64, _mag_stat: i32, _inv_stat: i32, _id: u32, _ rapid_grenade_launcher(_mag_size, _mag_stat, _inv_stat) } ReserveIDs::RocketAssistedFrame => rocket_assisted(_mag_size, _mag_stat, _inv_stat), + ReserveIDs::HeavyBurstShotgun => heavy_burst_shotguns(_mag_size, _mag_stat, _inv_stat), //exotic kinetic special ReserveIDs::ForeRunner => forerunner(_mag_size, _mag_stat, _inv_stat), @@ -180,6 +185,7 @@ pub fn calc_reserves(_mag_size: f64, _mag_stat: i32, _inv_stat: i32, _id: u32, _ ReserveIDs::Merciless => merciless(_inv_stat), ReserveIDs::Telesto => telesto(_inv_stat), ReserveIDs::Tessellation => tessellation(_inv_stat), + ReserveIDs::ChoirOfOne => choir_of_one(_inv_stat), //exotic heavy ReserveIDs::Anarchy => anarchy(_inv_stat), @@ -269,6 +275,20 @@ fn shotguns(_mag_size: f64, _mag_stat: i32, _inv_stat: i32) -> f64 { vpp * _inv_stat as f64 + offset } +fn heavy_burst_shotguns(_mag_size: f64, _mag_stat: i32, _inv_stat: i32) -> f64 { + let offset = match _mag_size.ceil() as i32 { + 6 => 28.0, + 8 => 26.266, + 10 => 25.2, + 12 => 24.534, + 14 => 24.0, + _ => 24.0, + }; + + let vpp = ((offset * (5.0 / 3.0)) - offset) / 100.0; + vpp * _inv_stat as f64 + offset +} + fn rapid_fire_shotgun(_mag_size: f64, _mag_stat: i32, _inv_stat: i32) -> f64 { let offset = match _mag_size.ceil() as i32 { 4 => 14.0, @@ -308,8 +328,8 @@ fn adaptive_burst_linear_fusion_rifle(_mag_size: f64, _mag_stat: i32, _inv_stat: vpp * _inv_stat as f64 + offset } fn rocket_assisted(_mag_size: f64, _mag_stat: i32, _inv_stat: i32) -> f64 { - let offset = 15.6; - 0.08 * _inv_stat as f64 + offset + let offset = 34.3; + 0.15 * _inv_stat as f64 + offset } fn heavy_compressed_wave(_mag_size: f64, _mag_stat: i32, _inv_stat: i32) -> f64 { let offset = 20.6; @@ -402,6 +422,14 @@ fn buried_bloodline(_inv_stat: i32) -> f64 { _ => 75.0, } } +fn choir_of_one(_inv_stat: i32) -> f64 { + match _inv_stat { + 0 => 200.0, + 1..=20 => 241.0, + 21..=40 => 280.0, + _ => 300.0, + } +} fn conditional_finality(_inv_stat: i32) -> f64 { match _inv_stat { 51 => 18.0,