diff --git a/TheWarWithin/Priorities/RogueAssassination.simc b/TheWarWithin/Priorities/RogueAssassination.simc index afc920701..0c8802bca 100644 --- a/TheWarWithin/Priorities/RogueAssassination.simc +++ b/TheWarWithin/Priorities/RogueAssassination.simc @@ -147,7 +147,7 @@ actions.stealthed+=/envenom,if=effective_combo_points>=variable.effective_spend_ # Rupture during Indiscriminate Carnage actions.stealthed+=/rupture,cycle_targets=1,if=effective_combo_points>=variable.effective_spend_cp&buff.indiscriminate_carnage.up&(refreshable|!settings.cycle)&(!variable.regen_saturated|!variable.scent_saturation|!dot.rupture.ticking)&target.time_to_die>15 # Improved Garrote: Apply or Refresh with buffed Garrotes, accounting for Indiscriminate Carnage -actions.stealthed+=/garrote,cycle_targets=1,if=stealthed.improved_garrote&(remains<12|pmultiplier<=1|(buff.indiscriminate_carnage.up&active_dot.garrote1&target.time_to_die-remains>2 +actions.stealthed+=/garrote,cycle_targets=1,if=(remains<12|pmultiplier<=1|((buff.indiscriminate_carnage.up&((active_dot.garrote1&target.time_to_die-remains>2 actions.stealthed+=/garrote,if=stealthed.improved_garrote&(pmultiplier<=1|remains<12|active_enemies>1&buff.master_assassin_aura.up&buff.master_assassin_aura.remains<3)&combo_points.deficit>=1+2*talent.shrouded_suffocation diff --git a/TheWarWithin/Priorities/RogueSubtlety.simc b/TheWarWithin/Priorities/RogueSubtlety.simc index 3d98bdf27..f6b34fb81 100644 --- a/TheWarWithin/Priorities/RogueSubtlety.simc +++ b/TheWarWithin/Priorities/RogueSubtlety.simc @@ -11,8 +11,7 @@ actions.precombat+=/stealth actions+=/stealth actions+=/kick actions+=/variable,name=stealth,value=buff.shadow_dance.up|buff.stealth.up|buff.vanish.up -actions+=/variable,name=targets,value=spell_targets.shuriken_storm -actions+=/variable,name=skip_rupture,value=buff.shadow_dance.up|!buff.slice_and_dice.up|buff.darkest_night.up|variable.targets>=8&!talent.replicating_shadows&talent.unseen_blade +actions+=/variable,name=skip_rupture,value=buff.shadow_dance.up|!buff.slice_and_dice.up|buff.darkest_night.up|active_enemies>=8&!talent.replicating_shadows&talent.unseen_blade actions+=/variable,name=maintenance,value=(dot.rupture.ticking|variable.skip_rupture)&buff.slice_and_dice.up actions+=/variable,name=secret,value=buff.shadow_dance.up|(cooldown.flagellation.remains<40&cooldown.flagellation.remains>20&talent.death_perception) actions+=/variable,name=racial_sync,value=(buff.flagellation_buff.up&buff.shadow_dance.up)|!talent.shadow_blades&buff.symbols_of_death.up|boss&fight_remains<20 @@ -43,9 +42,9 @@ actions+=/call_action_list,name=build actions+=/call_action_list,name=fill,if=!variable.stealth # Combo Point Builder -actions.build+=/shadowstrike,cycle_targets=1,if=debuff.find_weakness.remains<=2&variable.targets=2&talent.unseen_blade|!used_for_danse&talent.danse_macabre -actions.build+=/shuriken_storm,if=talent.deathstalkers_mark&!buff.premeditation.up&variable.targets>=(2+3*buff.shadow_dance.up)|buff.clear_the_witnesses.up&!buff.symbols_of_death.up|buff.flawless_form.up&variable.targets>=3&!variable.stealth -actions.build+=/shuriken_tornado,if=buff.lingering_darkness.up|talent.deathstalkers_mark&cooldown.shadow_blades.remains>=32&variable.targets>=2|talent.unseen_blade&buff.symbols_of_death.up&variable.targets>=4 +actions.build+=/shadowstrike,cycle_targets=1,if=debuff.find_weakness.remains<=2&active_enemies=2&talent.unseen_blade|!used_for_danse&!talent.premeditation +actions.build+=/shuriken_storm,if=talent.deathstalkers_mark&!buff.premeditation.up&active_enemies>=(2+3*buff.shadow_dance.up)|buff.clear_the_witnesses.up&!buff.symbols_of_death.up|buff.flawless_form.up&active_enemies>=3&!variable.stealth +actions.build+=/shuriken_tornado,if=buff.lingering_darkness.up|talent.deathstalkers_mark&cooldown.shadow_blades.remains>=32&active_enemies>=2|talent.unseen_blade&buff.symbols_of_death.up&active_enemies>=4 actions.build+=/shadowstrike actions.build+=/goremaws_bite,if=combo_points.deficit>=3 actions.build+=/gloomblade @@ -54,7 +53,7 @@ actions.build+=/backstab # Cooldowns actions.cds+=/cold_blood,if=cooldown.secret_technique.up&buff.shadow_dance.up&combo_points>=6&variable.secret actions.cds+=/potion,if=buff.bloodlust.up|boss&fight_remains<30|buff.flagellation_buff.up -actions.cds+=/symbols_of_death,if=(buff.symbols_of_death.remains<=3&variable.maintenance&(buff.flagellation_buff.up|!talent.flagellation|cooldown.flagellation.remains>=30-15*!talent.death_perception&cooldown.secret_technique.remains<=8|!talent.death_perception)|boss&fight_remains<=15) +actions.cds+=/symbols_of_death,if=(buff.symbols_of_death.remains<=3&variable.maintenance&(buff.flagellation_buff.up&cooldown.secret_technique.remains<8|!talent.flagellation|buff.flagellation_persist.up&talent.unseen_blade|cooldown.flagellation.remains>=30-15*!talent.death_perception&cooldown.secret_technique.remains<8|!talent.death_perception)|boss&fight_remains<=15) actions.cds+=/shadow_blades,if=variable.maintenance&variable.shd_cp&buff.shadow_dance.up&!buff.premeditation.up actions.cds+=/thistle_tea,if=buff.shadow_dance.remains>2&!buff.thistle_tea.up actions.cds+=/flagellation,if=combo_points>=5|boss&fight_remains<=25 @@ -68,13 +67,13 @@ actions.fill+=/bag_of_tricks actions.finish+=/secret_technique,if=variable.secret # Maintenance Finisher actions.finish+=/rupture,if=!variable.skip_rupture&(!dot.rupture.ticking|refreshable)&target.time_to_die-remains>6 -actions.finish+=/rupture,cycle_targets=1,if=!variable.skip_rupture&!variable.priority_rotation&target.time_to_die>=(2*combo_points)&refreshable&variable.targets>=2 +actions.finish+=/rupture,cycle_targets=1,if=!variable.skip_rupture&!variable.priority_rotation&target.time_to_die>=(2*combo_points)&refreshable&active_enemies>=2 # Direct Damage Finisher -actions.finish+=/black_powder,if=!variable.priority_rotation&variable.maintenance&variable.targets>=2&!buff.flawless_form.up&!buff.darkest_night.up +actions.finish+=/black_powder,if=!variable.priority_rotation&variable.maintenance&active_enemies>=2&!buff.flawless_form.up&!buff.darkest_night.up actions.finish+=/coup_de_grace,if=debuff.fazed.up actions.finish+=/eviscerate # Shadow Dance, Vanish, Shadowmeld -actions.stealth_cds+=/shadow_dance,if=variable.shd_cp&variable.maintenance&cooldown.secret_technique.remains<=24&(buff.symbols_of_death.remains>=6|buff.flagellation_persist.remains>=6)|boss&boss&fight_remains<=10 +actions.stealth_cds+=/shadow_dance,if=variable.shd_cp&variable.maintenance&cooldown.secret_technique.remains<=24&(buff.symbols_of_death.remains>=6|buff.flagellation_persist.remains>=6)|boss&fight_remains<=10 actions.stealth_cds+=/vanish,if=energy>=40&!buff.subterfuge.up&effective_combo_points<=3 actions.stealth_cds+=/shadowmeld,if=energy>=40&combo_points.deficit>=3 \ No newline at end of file diff --git a/TheWarWithin/RogueAssassination.lua b/TheWarWithin/RogueAssassination.lua index 9f8fc4523..773602c80 100644 --- a/TheWarWithin/RogueAssassination.lua +++ b/TheWarWithin/RogueAssassination.lua @@ -11,6 +11,7 @@ local GetUnitChargedPowerPoints = GetUnitChargedPowerPoints local strformat, wipe, max = string.format, table.wipe, math.max local UA_GetPlayerAuraBySpellID = C_UnitAuras.GetPlayerAuraBySpellID + local orderedPairs = ns.orderedPairs local spec = Hekili:NewSpecialization( 259 ) @@ -531,6 +532,9 @@ spec:RegisterHook( "spend", function( amt, resource ) end end ) +spec:RegisterStateExpr( "poison_chance", function () + return ( 0.3 + ( talent.destiny_defined.enabled and 0.05 or 0 ) + ( talent.improved_poisons.enabled and 0.05 or 0 ) ) * ( talent.dragontempered_blades.enabled and 0.7 or 1 ) +end ) spec:RegisterStateExpr( "persistent_multiplier", function () if not this_action then return 1 end @@ -1707,8 +1711,7 @@ spec:RegisterAbilities( { usable = function () return stealthed.ambush or buff.audacity.up or buff.blindside.up, "requires stealth or audacity/blindside/sepsis_buff" end, cp_gain = function () - if buff.shadow_blades.up then return 6 end - return 2 + ( buff.shadow_blades.up and 1 or 0 ) + ( buff.broadside.up and 1 or 0 ) + talent.improved_ambush.rank + ( talent.seal_fate.enabled and buff.cold_blood.up and not talent.inevitable_end.enabled and 1 or 0 ) + return 2 + ( buff.broadside.up and 1 or 0 ) + talent.improved_ambush.rank + ( talent.seal_fate.enabled and buff.cold_blood.up and not talent.inevitable_end.enabled and 1 or 0 ) end, handler = function () @@ -1717,7 +1720,7 @@ spec:RegisterAbilities( { if buff.blindside.up then removeBuff( "blindside" ) end if covenant.night_fae and buff.sepsis_buff.up then removeBuff( "sepsis_buff" ) end if buff.audacity.up then removeBuff( "audacity" ) end - if buff.deathstalkers_mark_buff.up then removeStack( "deathstalkers_mark_buff" ) end + if buff.deathstalkers_mark_buff.up then removeBuff( "deathstalkers_mark_buff" ) end if stealthed.ambush and talent.deathstalkers_mark.enabled then applyDebuff( "target", "deathstalkers_mark", nil, 3 ) @@ -2048,6 +2051,7 @@ spec:RegisterAbilities( { if buff.darkest_night.up and combo_points.deficit == 0 then removeBuff( "darkest_night" ) applyDebuff( "target", "deathstalkers_mark", nil, 3 ) + if talent.clear_the_witnesses.enabled then applyBuff( "clear_the_witnesses" ) end end if pvptalent.system_shock.enabled then @@ -2096,24 +2100,39 @@ spec:RegisterAbilities( { cooldown = 0, gcd = "totem", school = "physical", - spend = 35, spendType = "energy", startsCombat = true, cycle = function () return buff.deadly_poison.up and "deadly_poison_dot" or buff.amplifying_poison.up and "amplifying_poison_dot" or nil end, + cp_gain = function() + local fanCP = buff.clear_the_witnesses.up and 2 or 1 + + -- Predict crit gains + if talent.seal_fate.enabled then + -- calculate the crit chance of Fan of Knives then estimate + fanCP = fanCP + floor( true_active_enemies * ( 0.01 * ( crit_pct_current + ( talent.deadly_precision.enabled and 5 or 0 ) + ( talent.thrown_precision.enabled and 5 or 0 ) + ( buff.momentum_of_despair.up and 10 or 0 ) + ( buff.master_assassin_any.up and 20 or 0 ) ) ) ) + end + + return fanCP + end, + handler = function () - gain( buff.clear_the_witnesses.up and 2 or 1, "combo_points" ) + gain( action.fan_of_knives.cp_gain, "combo_points" ) removeBuff( "hidden_blades" ) removeBuff( "clear_the_witnesses" ) + -- This is a rough estimation for AoE poison applications. If required, can be iterated on in the future if it needs to be referenced in an APL + local newDeadlyPoisons = floor( poison_chance * max( 0, true_active_enemies - active_dot.deadly_poison_dot ) ) + if buff.deadly_poison.up then applyDebuff( "target", "deadly_poison_dot" ) - active_dot.deadly_poison_dot = min( active_enemies, active_dot.deadly_poison_dot + 8 ) - elseif buff.amplifying_poison.up then + active_dot.deadly_poison_dot = min( active_enemies, active_dot.deadly_poison_dot + newDeadlyPoisons ) + end + if buff.amplifying_poison.up then applyDebuff( "target", "amplifying_poison_dot" ) - active_dot.amplifying_poison_dot = min( active_enemies, active_dot.amplifying_poison_dot + 8 ) + active_dot.amplifying_poison_dot = min( active_enemies, active_dot.amplifying_poison_dot + newDeadlyPoisons ) end end, }, @@ -2862,7 +2881,7 @@ spec:RegisterOptions( { damage = true, damageExpiration = 6, - potion = "phantom_fire", + potion = "tempered_potion", package = "Assassination", } ) @@ -2954,4 +2973,4 @@ spec:RegisterSetting( "allow_shadowmeld", nil, { } ) -spec:RegisterPack( "Assassination", 20241030, [[Hekili:v3ZAZTTrs(BrvQIH0wsMKsYpYjQuETt2lzV8OI8T5BceceueNib4IhswBPI)2VUNxyMb9maKIYoBLylzIb9m9JPFpdVA0vF6QlNfwgF1VoE44thn8KHhp6SZE343D1LLpSo(QlxhgDB4nWVKgUc(73xuewuKKgwMKLIp9HLzHZqOuKvLhbJyrz56IV7vV6MKYfvxFCu2QxvKSQAj7nIYdNxI)7OxD1LxxLSS8NsV6AZLW43C8ORUmSQCrw(vxEzYQpaanz2Sy(iJlIU6sCKhnA4rJFZ3Tz6VewugNVzQCTTzAuwEECeoHB(5n)SAWJoCZu8NNbVec3ntRwJZSAqdF3rJFl8WFmdqLntxNLTmj9MntNNbG)hsVlonB1MP3dywwv5MPFmm)24c4x(1KBwa)izU2Osk2mDw29Pga)ua4F6(4WBPao8wAJDKVv5OrWd)J47skGL58KLlJ1wGAJB4zakJ)8TIF(oNa9ThngF47xUm7EpW8TCKqhg)xBMMhVm8ZBMgNgNFZd4)8M4u8h)RQK84vXPLfgqy83Hqo86LWQFvwo83V)3(b9rmcNJFmbazre82bfHLv5mjOntVlmpH9QAJF47ySw4L(FzljG2pph5cS1PAGVHlW8PfWm(NHa69NaRmbKJxMuuwWKIlJdxwUigfP)v2UJy26C2v)TRUe4ubPXFUeFYLHrITaaFmipwk(JYN5jR5p7sj0aeKn8IRGxESfyHXdYVjHxD5bGit81vZNF8S4WYffLHlVnoViyfiODC16nt7Tzk8zafHAacqYgv)ntXf4DXbZYOg8MPtabIntF8Xnt5tixwoiffLpMj4oDqnwgU66QIfwO37xVEjWT)Oo0XTJi4X9cjWEIfHiVieKMaaMnFosaoXjbqGC3cBmkUomn2aNqmP(jLjr3Y2)0tr0kwKC3XG8wyskmPNdseSNYEwmxqgOI1ifoElu6xcVfKnkQqzYYmC5Fh8BG(N7qPDyMQYzt6)qUoa6mmxH4oM0WLGQNfXr3Ii5PorY45ZJ58gq541zbRZsWnitVysTW9X1dQyDC6SGO1TqdmWYAIaaZtKse(LTuIcrzlNfC9YSSzSpxtkqaElAMsLhsWW5TmevcxI7Yqawt1US6AGgmVcSNauOZEwOqmuyfZKqqOWIqqiO9qUbsSVa0vTkbvumrkN8fGcjjennzH)b(LBqvILH53exIKOxBrIKttE1AqHiOUj6HOLXb8xOGPxApsftsNLGyXk0EpaLW8uWvajDSpQGFoO5BbxrosDafyfXLLOa6XSLgqCKd(aTzLzGqQvh3ElEz1aAQ2xmcCdGa7Rf)hi0mIub4txbuKSGzjWSFbWCpZIB8h8xVMB8tg45MPFGJOid4noya3eMNNv2cdqzm54KvRZZUlEwG49QjGAkRgZrY1GZsLjRxMGciNZLoXpVFN4kAA9vZfaC(YujZZGNJHAV)ONl26ajH3(nUqUJIIJCKgwddCSfZ5NeuQnt)781e6tc3od6N0FWL44oHXjiAJT4qCXeLvLww7ALhU7BDQbQDwNl2efl1jbQvLvUhG(8CIKtOVrh0InpjcTbFbF19sGAVz6luUquSipRAgGzfWKKfX2Njn42ush1hD5DHPjGBae(gTfUdbSayqOlgWQh)V)jdQG5HhsJKmnBXajhN5SbQrgM9pxMhgeUcz3xD5PNz6GwBoAXOSZbjIRH3FwWYQOBFauuMKkj9pf1N9BaFeYGAIKLfhdgwIULdNZ0mQyn2fXHZShRMHgbNWKaljKOH45SFJrm)raYZRwI(Cpd2x43fSduYhwIDg(IvpkhQJ0hSCKw7KmgtKqKqQksZkJMcQJDTRtFmgwLgqzA3WIUAMRFK(ERtBFVfaDG7VCP0maWktdYMhCBkiyGsmFphmBb3RyDoW)1K(L2QuY)AXH6rdNTxODjeMg7R86Rw3Kx(pjHf)8sMsu(C1bZBJe7WZdtMfeFhIzHZG91O7EiOg2DXc2wzW2B4DmbbPjpPIrpcb2ErsX88sV7ad2Y1mdYApBsEn9HhBc5EtJTTSq7K7yBmC79RDLIcHLEnt)kJ2A7uoL)Fncv9ROC6(qPMd5YtgUBKqcZ2ekUWCdKck5GzeKEdz7RcrhYJ)8AWAkqPzoBeLLZ8oLYDJA(GxxEC7QMa9Tet7Yo6XerbyqB(alJwZcxbB)aVwVdNveIasEDYYKsMlGvfivcO85pC)Iy8f(fvKZ)DLlxECH5j6EYELM0Njr9sHsrE(PcHTSP3euGEJplpEz9gJxW9Lr(cUdkeg4R1cZGhdjr2QKc9IPokSQacneq5WsGy1qnfFpJ9OScKxfHTv6HK8ivqKvPlJlkq(TizWPIKbJm51CjzwIMiKIZwdpdI0xBVgNwG)2YQy9mcQ0aAPn1ipyndo22fCwMSIYaJf4huWMYaEU9Xziq9ikPV2xVEtGNvI4yFwDe)MZU96sbrZvyRPsmmN9VxgaoufLuOfIJVPVd(bmHjZli6OD3ImWb)4vRbHGAIVNunYzfm1MHzQ4BEVy9Uz6VlxW(ZMyTj8LOG39X4FhWKwCJOeutDdtoYYQXt0nN8wJ0Zq)2klseGajMmxH02Nl3mBrzv4evC1MMoDWum2M7KVefwWQIaYEuj71VNWFjydg22Pygcn5wyOxNaF67uiCdXlj(hvEnuOTjqj5lDzqbp)EIvlSqR2P(5pbu8RSqznft68eODkIrTesQHysY8NuRRZk45ZBot40qOjAbQNRGz09TExkFSA1AzjrqIZCU9oW9cUXUvqyibrZk872gtGHLc9LGDyqagMrrYqCTkr3sDeaGU826m(pnnCdlkqBoiAKvvyKaQFpZL1U6fR35JHebZRYFOHpY5jSztXQYdXFwWdX)AqNFXdPrOCdx3VCJDHFlB(xnX5fX53ksZJBZgEbY8K8ygA5xHNXEch1SZrKD2o1mqLJ7DdC7Mrl9cCcmIIYCq3qeSvJljdMLDf)r7Ec9C4FULa2)D8Y14J)NYkIZKRyvGeeVclsIyLLecudhfTtFa(fihJFN)Q57gogjSEBQaLgQ7A4fVUMmBP(0oYl(t3m9t8hZvqngIZ4tYflQ(8(yzHDbprRUzHvJlqT7RreF(Q7ZEnKuVLnRB0Vr2fzrfCE16BJJxJvnzzrglO0cEz7XqCEF2pWLOqLZAeP6QYrPIPrau(Ou7IatFFoA6SeTAVQxYzTgiEjibx(5qjpmL31eJnc2KCuNRZQBRODCG1ot8mZIU1HxbM8388hwURyYDv11DsMdDqKrQXMibMqKyBljABOQPK4xl5oVsC(l7D340JExlSIgBc9grGnQVJk0mlh6emlyr3gWtfwVoeF9jA7BDbNxiT9SvqRns6agvLhFVD1xvdcG5W2YfOstROlHuUcEdkzhwIY1SOFyDlZYq0M1h(D05W5SSigQBbNnW4zywfrN(rJyPZwYD1dmfcCVvKED3UZkKDvrVwtJ8464AQhG5EcpHCm22S0LsIZhyy3NGOaVffx1Cxb8Qb4y8h43DfLJDaTRaLfakCq8k0)4SQLxDjO3b(05b3enJzuIdFxJ2WP3T3BtC)WiLxUTqu84(r4sqSfIulyD1)(FdBOVo7ZoXeQHsOb0nf1LL9sMU54Ci2g4fdtlwLGzq11cX5W3QfJTYDoSxfol4FvfhNIDPvkRlIvltQNP7JMBjBM2IHsnQ7O09juQyLRTeW90C01FqTcOYFge9XdbqCBvRCrf99gBfH0vhnT)eTEAktAFZHDcoQLlzO7iNPoHR0KPfTQGTQkkdbfULkfnflZWFudjJ99kQRKWIHVhGVJ7Ui0S5b9HBd1JcULPASMhjIrCC54JvuyS5bEGqJKH07bUJN27Ud(A1nShOqKd8JidqU57S4MMSGXnyVJ3oMY4VCmLrumLr)NitHfx98qWJok3jmDRpUq2vxyO1RbIzcZTX(yskVRAj6Md7dujeLFcnwDDyPEop5qHYsUz)bMcSEu7cp2EjnHh0qi)WluKSAfdPtWbZNHczs2afxAEcDBcVBTTn42Ult8iteE0JOtsk6qpvdN(b1t)br4m)b)asKghpd)ywh)ickaOCF63(4V9DabRa8pL9jGN3fzaaGalG3OaDpenHoq3ZiRqlOmG3os1Vf)OFH)4E5oJpG3XtJhArgyX29r)Lf)d8KxD)cMEz0N4vHFozvfEuoQd)7Vjc)dBoUcEPwJQYZHNV8bJkhYwK1jzdGva)LOCPODYdpNLMyUwh6zfgh58Ass(ZyrNpiqUlRJm8(fStmrvUaprz9QurHLxKuY7WvDsutm3m(yBNrAhF7717hpAXCNExQAaB8znkLf)vfB3whv3ZDNoKLRc0tTA5smKiK5GDtzDUnoIN)K6HDhecl6qkBolQhyx8q3wUwiZkZSyXciIHz887lCZGXf5yGotknRmqCmWO8mRD(Z(G5OVGsqnzA1GW2tR2xrBj7vFYJwMSoqE(jiCmO9j)ndzCAtbIIW0BQaTVW21qGTzktm0JmbQstF9vTg8apyzce(sGGxcRYrd36LPmNwxOeHpt8JTy1eExwYSaWOjBrS9r87TiYSe8XJ(HCCGFmgCUzbfzCDmJ2(wgrP1ux6RPRkIjHTUuFOIkulOr3AqBjKQhRMqPPIO4CUkBdf)nLr4VKd1iovfmYD1)Qpzc5z3ufZHVVJRa(CN5W6cwoSka)aJkn6jySkyb8)raE6i5NrsP1f1PKeFjx5jWliWceJVSRK26)LLDgicb3PXmmQ5XUy7rwzvaXxXvWZEbWSe8WiZEF31MxiwzMC1ZyQfi90ulW98iSdskZyoaXMgMQtRNVUAzrS(KJEApuFGSgxPi4)RA2n4r21ESJ0h71H3WYsgqkrNA0hj8Iy7vWCWxf(GAXGDPqa3Fw7jyR1CuMDZnWMU5vPPXl13nTopjdOSpea7auU)SvU4lHuJaK05zAb5TiSa9WR84W0hcMTUGo(8MJIv8hIyfNPkaakiqfIF9iuLHrByjfhJH7eNFnOoSi4AW8bwofRPJCu0E3C)IeeaIxg04GHPRoFSS0O8prUsHI7mA3cbzmjfMI2rfSDluys63fTXcAsGDq6AmBoiW(KV2PatIwZJXaBIaMNnqyyN)9wEuq5ASDV9edeEi25yrnFyHEIw54fHqRjc0rIMDXav4ggt0VNhFueRAhGAh8Uwiex4FK9R65rGmbbU0cxGGkaXYzj4bzXDbToOTYYQPdlOigX6cUeDPsFE3peCnSiHoNRCQGxgjZdDJqLpWtFr)HhF6lhE8jVGIlIEfEeELD8c3Eno4i(Ys5cEugAGARpRCnDSQNzLb7CVTOgIMxpgHMeUA9YK5paFSWuHEu2JfnbgL1D7AsZp7cg92e9j0(JmEAD6jEFDkjW)tDaUr9COnSKiUSeIu8oYRuDLECiMPzWrWz8uuvJmYe5iZCXHIbW(tYQqEp4ndRa4H8sEJPkd8)4yk7xrM9shj7XxtiPRZOnYJQYCkcHS0JI8PBEvOSBA(DuLzgB9iVE37wGI2fWTm8DwryX7dfJWblIdeF6oPYUdhwbxfsPFBNJbTTs2p2mge5(fFK(EDIkwFYi(aFgbn78P0MOjxr1ep3EWxhyvZxurAxvvMSmSK886VLGsCnNqK6dhasEp5W150WVtj7QlnNWr69PZQm0f8Qv44a686WKCQtKx5ICWvfQ2zwMilMmWYyGdGv0gCgjnUOiUqQG4G2Ziwn1XyD3OkBP8CZ(peyfQP8KxkB1cYtMpsjzniBDpnuqL5hs7NZIdNPcLa)ewEl8sOvBDi4tYCM14y1iFGJlDcxsdFf447iJIv4e(nSaNywiU9Es5uBPrQhK8syvZ6xF8tUglibpt0YoSKxMfjjEZujnEGqM4tKPnR99xYKhFnODFwrYS6UNRrkr072V2teADgu5vssTVXCMA92qI9HCQ1Ft(MVQ(kV5yWkzMWtHkSq0YxGFtvPkJgXvmupTJp5XKj8RHUWU12LBJq7KMxwhFk86J(fXmAii9r2MtS565(7Gm(XkzeYef6D1rHGokYF96PV6aYFDECiNTR8Fr4LGOANooUcTBfVw)PZdhTdnlnQrO2vIXFgMiQVP2PMLPY062W4xEViYjrtFBDCL0S8QeYbN(EQhYpVn9pIUTDcLgtVYuJ2)z8RtlWg6eK5h2mirJkOFMxVUOkTHNQ1RKIPP8UgdfnWogDLiH8yKWpmXQ4qu4(HANtv(5r9qH8cSDbeWkzTviNxQFabefLSa0BxmpbZsaf7YBZIzSK)FlcVrDA6uw9f9c5rrgD7NybkwBFimTeaJWKuDKxx1TuVYBjsc)ZJiBHecCty7Tz7IYsq7WoxXq5YT(mTzT)NLmeRdjpR6UsJU3NG8SIQ87ygLxMHYL8dWqRPB5dAQhEVw4RIl2Uc2n8PBkAuZ2MtCx7XQeKELbeN2q3(H3Vz1Hnuz04s871s75uBa73sBXmHxCnPoyIIL2b(h2qhsIJA)P)GeKjGOCbqBq7WXHAlzY7RqXjkM5qtBopko5XUaZRBhNuun9vO(Ha81gE8OnkB3EWcNX7Ndzwp4zV6qHBoClv4IuKuJzSdqOAUuD6bl3LONPHIvmvSaMzrKD29E1FWpwDV6346mWdGO(HPRBQkuhBr)ENAyAHPfTxNBrCVZV4A2GY5oJnpmwU37vk2f7zp6rAERsXg5aQUcOtBUQ3Bv7rqsA8DjLyh9G5lyMrim78rIBqZorvrtvN3IgouHzXr0Pq87yxwuM8Elx7c9TO2LBH2l(vDwCo7W3BCReFFyEkQaaC9fLytwTolVua(Vvjx8TQR(wSjLYyT4uvz2kEJ9ac(PGG)XB(5)hwI2Xld3pKbRLC2J)w5j1bj4g3bLFl3GV7bij2Wa7p6ZduZWj0ZGsvMfGB4uNn8Eln8OUp5SaTVRCU6zzZptqD57p2osRde3A7Q1A0HJ8DKOsxrbRPW)1GvxNjRk9BphoUyISH(zpJ0ihW(zGg5AM2p0Ox)1a67foWBEMw5KBrLTLX2Tj1L(p7tQOT6pxNKrBsGd4BLyClO7iT8Tqaq7h7fKFNvn7qxrZl(cla7(MXOJsR7XzWHm7ottCaV9YkMumq6k52jk4qf2oJ27p4rIKI2IA7WXtF22RtUgzH)VDRWg(2iAMd7dxJAf6603yZo2FawbY35aK2N5KgGKyagR19hGDXzehVKTJ34q1JEhryj4q1YlDuHMz9WSGlDXYALmYFzRos2c0o6x5wK0vDRY2rrByUqXOTBKkcwnXq8BlsjX3kWjhsNaordC5tkvBmpRGVvat0zA(0eSTR7Df8DaWK94gbWDnUoT(D0WDe0(onnnSdTpfnDb89YMk3R8DJb)md(wb8UUHQJR7Df8DaWFHei7200XTxo8jCNTGsBBN1lDBNHihlSNyqAo88I)2enCHf890sgDCoS7wdRjWvZC0rO)85IYEL24yoEY0g6CqSTHDTVJaN9vZgbatmtmUfytOtBUoY(tm8ebjEvIWZ)9MPSV5YGNJnSC28K6kJwCSYNWxo5v6N7In)m1iKjG)qSCetA0HuhYkT(eJJCXMF(B2mDBpFaDz2fqPUR4fZ(OdtMpXT50E9pWTH8hF0JnHlM4Xq3GEh0I6yDytFWaEci9yDKUjEPH0nPi1lmc86cpeenC2bkPdAh483Gf0USJhOGUqIAwBibnsVxMpA85F)zuDlpBb11dEa9Yr2Kw0p0OZsoSXbiGl(QDue6DG)dHaUR)BWllGNYvSGATQV8)g87lIYN(fPGoWXRsbUgHNRR7a9zZuWW6YpqivqEW5Uy0zSv5xMBJa3lz33raIvFFpDbGu8M4wy4fJhCX3pEidh3RxVaTHk1x2aceW5TLWftuv71nvq34s3oA9UxGAhlajXLSBqE8rYUff(yJIJp4Xh7B1mk9OoK7Npzem06BUGlM0)0HV8KHukNoY1z4bGa2hh9m6HJZNGCyxOR(bPwGVpf019ePF6O1z6TtxCdZMhHAbKFZWJQjDwzj7Ord9CcOCpzQt9THgJlaU0zW)VtGuC6YLgMKgwB0jKN)6Ehq(u8scAlKKvBL056p(4bQpxSG6P(afs3J8i10X3TEmAcb1s78JhV2o9M81hF0RmTD3Yi01O6Tr(54MBu1QBpF8r3hi(hF0r36CrhMDi6IomirzqBFKIAOyGkHr6N1Mlg1ou4XBRpoZJeocvZJx(ftgD2lPVaJAcf2bhx)ZToN46pY4yHlCF55OZMRDad4in2Kq3XTI9lhidGLUa6CDI2NcKooDenVR1SQgXJp6r1WKXcNN)I3PVDftBGFw7a75PxRV4SEe9yDpBlhhq0z19APRQPEobtHrD3)nLSnXJE7kROKWkG5d(Dz4330)WNbrXu13ma18D2OmbAc7DcIfVsasJeXSNDpiqNKoVcZxcURNULxzBkFkTBSnEQMcCo77RBQ71StQbDrd94JtTtG(AE5Ur5z9GkSev78QBIzBaOeAyOKP)qABD1B92ZF9GgYW9RdS2U)jVyYzd5kBAWHCqoKbU881WT2ubTU(fPdhq0sZ96t0fYxm5uWeS7WxGN3J81EnnMROIenR8lE9aEG9DPxG7MCIS)n62O5nMiJ(y0zW9C4NXeHuD2U1FQnwuzYgG9qTEKL7lr)wAw4lg2RLMe(cCVPP4VxHAuM(a6CA2JU9F1CrSz6DgO8Hy)8vQNgXt4Kgqbfg75AgAEoObfu96RD9MJr11tplon1PDKKCmIBiFR)AJJCDkmyYCNB7jL7mo0)0x2xWrB0hoV4SbVSwHVvwyGDMd61)ahbzqxdhLv)MhRDPSWU(TEsnnv42Dt3Bi)YaqgA4EGKZLL3lFjLqHnrMF5OWcmsxj8ftgR5GejY2vHIxZqL913JiuiJCxPX5yLRwBN2LEGlX0oS)9597UckSxUxNa73goy)dCKHh(ESmTVRkWTQojr9DNVXjJv7LjE65iBXFwUXx3nd4SbGseFANEZtr7eTYP)QWqCYoQzu2PE1RW87CIV67LFw)MQW3oDRIJ0XD5p(OYnrKyY(AbPNxFppbe1B(oVyC7VLBI7Glo1N)E1OnpznawBChrDO82ycKO0VjOM8SFrqPLYPz13kvcFu)l(TIebvvMmAv0k2Y692cR3QhQL1vL3WoUJQaBSGlWckQkjEsnnQ7Jkg5DlVvL8JU0yRlVwmUW46wLwu3cseRdt)OQV3guzbNyR8OJC4zinz3MKA5yT9TouNwKMxdqYwCG2XuQuw13T3Qk5ehxatNpz8aAvCJ61evBGlYRbdd7pnrjI3KF3L067be391v6dXIWq3AJ1cFn07GgnHspF1efurFuF3DNuph9v0aPTxYljPEhqxuoAceR05FjVkD6cPvt7EJ7mPZ9qpbP7gmaYSJZ)qR9gAEVOXsFgyF8CI9f6U3P77Neim33x9lsi9AtXsv(a3ofsEbfjKx1HjNiSJ3gp(0U4ZB3UXwfLYyNVFE2gDFsDxMgxn)YeRgES8W3WSa9xCsAvr32gG7KHD(yh531r2Uh3CTHyf(7IYfs(LtgrA)ifN6z(P1PvEKR0V3(cQ5xeunxnkwenPTT5WXxFy795P5xxygLkGi)9NmS3bBb)9eZQ5ixfZYcCGIWgQIBBINKtPLpdyyrmTeaKxMCdENfGHxaWpI1zQqmDrGjHe5VQ6uJUo(AHeP5Z8hwJ(paFyzELahLqL8HnarCoG7Li1pe8L4guepPG16VQ(iX5i0bgrzt8Z6D)DR2ExkRt7y2E1mU2(AO5TTV(ZCV2loK1oVYUqDKzD(A04Qyq6efV1vr(W2PYdWgB0wVk6aRSD9Cy4KS2XE2lpEinKgmqVByAS2g0zs242izJ3NKSrgnf8F1iz8i3A5lK)AkRSACSCMWmglJ2LLPSLqCliMfvssSoziHBuI4V39VG(jxDSLtW8Q8hyBIPMuQ3s9f2)28wQVH(3MxY874EMezJ(sPhLyqZ2FSBV2w4gYBLcg8Q6tv2gC6B4Vg(Hn7gfRkwse0cv88DzQuR8gtAdsc3KvDZauN0wJ1SgwZ0nhMPQH)7Z53abS2wNhVtJ1OSPgetFZlTaxZR)GXoLrGSQOKrlKiyuSi8D2EwwlsP4gRfYUpMTtLXKeDFL1ALGy3BRCU9TOEnYX7U7RWm4HXKjZdKfjq1Nyn94YdfBqB8T9ofXFdMnAGLZbfAcGkPoz4WZQBiP9M0NlLY1ljEgK10olK14r12Miw9(Wd2(f3(N7JztN1go8Tnyy48wUH1foUqgYMHr03lVvQWuMobqFrKTkt5ZEP7coWtGIktb13Pyy6vLTggwJZfyLHMdSh2jhy(C6PPoFigEuyErLbAdLfTRXd71xqBvb6y84jdfHlyM4yuqFGiNWyl1vWQxlAgxCe0yKD8ITJihpIsEnpjLjMXsfojYzjURz(JwPuZEC68r22fylAvEpWv8kvwTz1AdhF9YUoPw0lrTscSlTSanIySKRJO10NvBwmzrnnXwjs9lSsNbIHIANXRXdgKcR)o45k95aDzRq7c3fwLZATn7947k6QAFaj6(tg1chtrfRy40yONkpVZySZIXJvgvvcwW4zrm7KavCmB291Ja6E9BxvAHv4gPiMOBqfn54pj6AFvDP)oLok0e1FWxKs)KqCsBSKvMyRO5EA(e3NSG6Qkpccj3Uk1T0fe90u6jG358zxi(nyqJ6c5Ry)J9JyTGiUkXoIynwfE3d5(HQi0CuhSjJE5y1X9H4EJen)PBa06KgGH3XpIPxcXWjfcSfRKsqFSPho8A16XWPzL6p9mrmL8jf1JpN9BSj(hbU98kwPEz14P5SO1gPmAwDpzUSk62hyDM5XEQORV98T2hOtotO9YtNGo5SbnWWI1yof0OMsnCADwUkl)TUdKIwusEAn6v3JPu7NKox0qWw5sSmAqwdmRfDOTGV(Z00moWr2A8KLUtDjM7TMMF)Pd2xsKm5qSkN3X4qsDLYDa7tUZxBMJpk6yFTXdy(bu2fMmli(owidZaX)K0lGicnPLQGuyu1gUV0fIwd83LOUUPt9gKYe95R)titetJdWqJbvlL6dpjuFsSHxg3gq8aHRqERdGU)e)zisUs9dzeb555x6yx26sitCc(fNlGqx9RJp7DS7m6R())]] ) +spec:RegisterPack( "Assassination", 20241031, [[Hekili:v3tAZTTrw(BrvQIH0wsMKsYhzfvkp2jZMmBoklVt(MaHabfXksao4qYAkv83((E9f6UXRBasr5KjoXsHOr3V7(D1nVA0vF(QlNfwgF1VoE44thnA4OJhn(0XNE6vxw(W64RUCDy0TH3a)sA4k4VFFrryrrsAyzswk(0hwMfodNLISQ8iyelklxx8DV6v3KuUO66JJYw9QIKvvlzVruE48s8)p6vxD51vjll)P0RUMgeo5QldRkxKLF1LxMS6dWmNmBwmF4XfrxDjo8Jgn8OXV572m9xclkJZ3mvcGBMgLLNhhHR6MFEZpRg8Od3mf)5zWlHZ7MPvRXLxnOHV7OXVfE4pMb4ZMPRZYwMKEZMPZZGP)hsVlonB1MP3dOxwv5MPFmm)24c4x(1KBwa)izU2Osk2mDw29Pgt(PWK)57JdVLAYH3sBSJ8bLJgbp8tX3LuaG58KLlJ1aqTXn8maLXF(wXpFNZj9ThngF47xUm7EpZ5B5iH(C8FTzAE8YWVSzACAC(npG)V3eNI)4FvLKhVkoTSWygg)D4mhE9sa6xLLd)97)TFqFeJW14htGPSicE7GIWYQCMy0MP3fMNWEvTXp8Dmwl8s)VmqcO9ZZrUadovd8nCbMpVawX)ieqV)ayLjGW8YKIYcMOCzC4YYfXOC9VYurIzW5SR(BGmzKq0hyDb5XsXEuKmpzn)zxkNaaNydV4QlboCqA8xkXze(RXoM2WvxxvSWA(E)61lbk6hJdlxuugU8248cuKp)wU8wci3TieX3qGJbKNS5ZV6s49bvIKWRU8aqkm(6Q5ZpEM(ueScMHJRwVzAVntHpdiYudqaLSr1FZuesVloywg1G3mDciJTz6JpUzkFb5QhbPO2XXmDHPdqcWjoiaflsUZc9)LWBbEvrfkJuMHO6DWVb2dUdL(aCRkNPe9pG)U46Wu4HiXieLGtdxcMcwehDRobrGS3kFbdCeXS6NuMeDlB27PiIiiEmishMKclZ5Gqh7PSNfZ1vaQkIKN6ajfJYcpvMnqKeN9Yq0qwjkPItEnMEz11aMmVcnmxJvXZNhZzoGv3RZcwNLGkDtVysTcZX1dQyDC6SGO1TG0gOvnwdZ5jsrc)cxkzHOSLZcUEzw2m2NZedoB3OqscrtZ(4)b)YnOzLYW8BIl3xKigoSITGbHI1liemjjvHeAgGbWvjO1NjsjJNgj61oir5vRbdIOeWdrlJd4iBbAFzFIWjPZsqoWkCtFywcZtb)bKOCF0a)CWm4cUHCeraRnfXLLOW0XmqdWd5GpqBvzBqiTQJ6EIxwnGMM9fJafwfyFTO6aHzmKkaF6kGIKfmlbw9la(WzwssFI)61ss)KbEUz6h4ikYaEJdgWnH55zLTWayuintfJ5yXAWLOYK1ltqP3Z5sk4N3N9VDJYBAmwanSvHdqkbXbQ52X4TLC75IlQ)Ves8xiL4PydhPrjGbo2IJ8tRwNNDhkh835qg6icFJp05OpXfZ4EEXPqAJT4qeyIYQslR9NYdl9TwS0A(LAZ)JteauGIsXj7UyDuSzNeOwnM4Ea6RZjsoHU2nyLzEse6uWfCO7La1EZ0xO2KVyrEw1maZkGfjlIPCj3cSP4Dj8NlVlmnb8lHWHikpFaAn4EeUBpaM4F(NSxh246H0ij3XMFlzTm3CqtJMonDj8Z8WGWvit(Qlp9mx(I5X7kbwycZsyd31Do73yW3pcYmZRwIoPodKPS8NIXEMdd5AaCMfSSk62hatSjPs(3tXWB)gZpoZGbMKLfhd7EeDlFEotBNdRXUioCM9y963vRKMI15WCQXTKwov8lTOICP6zsefIJws5goJvpkhMd1hSCKwkUgJjsiykT)PzpvZQ4XUuY1hJXoFdO2P3ydE1kx)iDv5tBxvUpYfIxUuUvdW0tdYMhCBkicHYwFpFA856PvClnvQScuXLdAELxykqWEgH3XKqKgPLA47nPJ)ts0WpNJzHMVwDyVZrcn)8WKzbX3Hyw4mqFhD(fNQHT46OFMhee51m7gm2OTl20CjVe2oWjT8QZG(1ZM2wti4HGqQYzOnYcztQi2y42QH(C6BBiDeBXry0eJGpfmWcCqqbjKjpeIUMg)L1WUd4wYnIC9pr549HjohYTNmK7SruwoZhvF5Fr58TbJ4dSejnlCfO)d(nEhIAOIeqrVozzsjZjSQcKqblF(d3VigFHFrfS9Fx5tVIK711k3UekWulb5UOCp2NlmQO(SsrIebub2uLUmUaZ)OmbLPIeuIuG17Rye33iFFMuYlfgc5PKke0EtVjOaDVFwE8YAH9xW9Rr(cUdTeg4R1IBHhjkrcQKcYILokSQacWeq5WsGy1WIfxpWEuYi3lfzZIqkodyafyQjQnRWbD83wwfRNZoLTll7GgzMQzeX2EMZsxwugSvj(bfSLmGNvFCfcupIs6RD41Bk1Ssng7ZQdZ3C1THl1mAcHBr(d5OoZICyMkmJ3NZe)bh8)984OKc2qByOnumQG1YbzGyoqIoSH)eMGUG1H(UuKbE4hVAnimQyHE8JZjEgfwWs9nIUQmIsVP9suM)(y8VdyszUrncUG(EkoYxQXt03j4Tg5YH(TvBMqmfi5J5LJM6SuN1IwQWjQ4Xn31ZbBWrQkBiR8Sson2ELIOkm8AjH4XjqcjOFu5)sHMoJsrr68YS6i03NkmeUv4ZtmVWV0PkqjmIb7c1IqmJs0Ad0MUQF(taZ(6iGANulpeQpwTATSekimoN7BaSXUoT56ScEYazpoWqwlAbAyRGT16B5B2TcccliAwH)YMX)PP3lWlc2kbsFwvHrUJ(DXW1GjueHLH8LWUUG8pmZI0G4cArhlD45pxcZLVwSLjyEv(dn83ppHbQkXR8q8Nf8uLCnSjtXdPritLVzJuZTqhvCan27S5)fQb248I4CxBB0XjzEsEmdR9BWZqE2rv0CetMTtn15ME3MUDBZhnZKHaFQOmh0RJaRhCjzWnbxXF0UNqphUtBj)9FhVCn(4)PSm4mXowzobPVWIKiwTpHysXrr70hGFbYX435pjMAz9Xo0l(t3m9Z8hZnSmg8m)ZCxG4gLVpwwaxWzWQBwy1WagPIx3bkXE(MMAPXHDn2Jx7ZVYovSN9AOIERvw3WOr2fzrLhIQ13ghVgRAYYImwiXf8(iaJH89z)axIcTUQXHQlfNppt7uDj3fwyFFom6SeQAVQxYzTfiEDhbN15ZsEykVVggBeBi5OoxNv3wv84tw7mXZml6whEfyXFZZFu0UcH2vPw3jzo0dugPg7QfybrITTKORCuxlj(NLCNxjo)16UBC6rVRfwrdLqpreqNtnLndrt1O855gKhfwICiwGcSgvzziA6)d)o6f0Cw24c13lInW4zy25qpYX9csNTmXS(A2mGD0SQzrzNGzcm62aE6a71H4ZprZ6HR55fY9K2QzRng7agVLNFa7AaRgemNI8Lc0TvKED3UZkKTsrVwZK746ysQhGPoHNyhgBVT0LsrQpWKj(meM5TO4QM7kGxnaTI)GU5UcyWlUa5cGCzq8k0)4SQLxDjy3b(05b3enJTPeF(DnAdNE3EVnrjXrkVCBHO4X9JWLGadeYvW6Q)9)guOVo7loXeQHsyb0nf11o7LmBZX5qOpWlgMwSkbt4PlaX5W3kGXLX9vHZc(xvXXPyFuLY6GydpXCl)Y0ghkTBUJYWNiXsc4WJj2eW34C01FqHgm5pdI(4HaiUTQvUOI(EJTIq6kpk7prRNMXK2voStWHJC)W3yHTttvbdgkkdHnmkvMvmuQvKojvddDpOyzwP7w4ZSZ98b4d1dXTLLASM7gIrCC54JvKpSbmEGWCJHq7bUdw2RsbhwDp3duiYb(reiyv8xkqdaShos3cI4taU57CALHnMXBhBA8xp20ik20O)JNnnM7mb4Fvi4lfL7eMU1hxiB2lmU(1a1nH5WwFmVR3vTeDoK9bQKzYpwgRUoSupn18zHANCZ(dmfKfqRl8elijs8Ggc5NyHIKvRyuHeCW8vOqMdoWWLMNq3cemQnCB3LjEKjcp6r0jjfDONQlt)G6P)GiCMpXpvePXXZWpM1yvIGcak3N)Tp(BFhqWkapdzFc4ZBrgmbqGfWBuGovJBHoq3ZiRqlO2aVDKQFlEW(c)X9YDdEaVfKgp0ImWIT7J(lk)h4jV6(fml1yKeRc)sYQk88Buh(3Fte(h2xBf8AzhvLNdphZQVwLdzazDs2G5kG)suUu0o5HNZstmxR56ScJJCDnjj)rSOjpei3L1rgE)c2r4OkxGNOSEvQOY9lsk5D4QojQjMBgFSTZiTJV996xKhZAUtVlvnGn(SgLYI)Qc1T1r1nb3Pdz5Qa9HRwUedKezoyJqwNBJJ45pPEy3bbpIoKYwZI6b2fp0TLRfYSY0AwSaIyygp9)chpyCrogOZKsZkdeN9lkpZAN)Spyo6aucAjtwIccpTAhI2s2R(IhTmzDG8aFq4yq7l(BgY40McefHP3ubwFb11qGTzktm0JmbAsth(QwdEGhSmbcFjqWlbOC0WTgmL506cLi8zIFSfqt4DzjZcGnnzaX2hXV3IiZsWhpUiYXbo2yW5MfuKXTXmA7BzeLvtDPVM(UiwegCP(qfvOwqJUtE2YzQESAcLMgIIZ5MSnm83ugH)somJ40uWi3v)R(KjKNDtvmF(9DCfWN7m7rxGzpcMZ8KOsweEQQ8a(sfW)FcWJej)Grk3DrD0iXxYvEc8ofybIXx2vC9(FzzNbIZG92A1KQWOMh7IThzLvbeFfxbp7DcMLGNaz277(aNieRmtR5zmZcKEAQf4EEe2bjLzmhGyldZ0P1ZxxTSiwFXrpThQpqwJRue8)vn7g8C6Ap2r6J96WByzjdiLOtn6JeErS1iyo4RcFqbmyJxeW9N1Eb2AlhLz3CdO0nVknnEPU2068KmGY(qaObOC)zRCXxotnIysNNPf13IWc0dVYJdtFiy26c6q4BokwXFicECMQaaOGavwaQhHQmmAdlP4ymCN48RbZHfbxdBFGLtXA5ihfT3n3VibNaXldwCWGgvhcxwIv(NixPqXDgTBHGmMKctr7OI(Ufkmj97I2ybnjWoiDnwnheyFYx7uGjrR5XyGnraZZgimSZ)ElpkOCn2UHGIbcpe7CSOAlSqpXD54LUrRjc0rIMDXav4ggl0VNhFueRgrGzh8cwieb8pY(v98iqMGaNTcgovbiwolbpvlUlL0bTvwwnBybfXiwxWLOlv2ZjYmsJTEqVWvEpWQuJVdZMWqpWjFr)HhF6lhE8jVGI3H(cE0WJhD2lC7R4GJ4ufLJ3rzfAsqD(SYrFcS)iJeuhn)7RJGh)J6aAJMfqt(jrCsp2Fl8EYRuDTxCiMQwWVPz8m6eUcg(8hyrRW3NqgO)HIbW(VKvH8EpBgwMXd5vigZSeSD9Xxz2zFo8lSNzjf7CR5OgIMtBgrwvJcID60tsWyrtOr5CIDj15NYehneMFoKQwAkEHSeRICIBEJLCLDV1rsU81tt6MG2nl)oQVlJUCKxV7DZrODbCldFNv6A8sqXiCWI4aXNUtMS7WzlWvHu632Xoqtw0(XMXGif48r671jQy9rp5d8veSSZxsBIMeIQjEU9GVoWQMVOI0UQQmzPOGB2BnSLtL4ExHi1hYryKq0g1EkLNFY)HiDPO5VtEPSq)KNoDeSy9qAD3qu4eSLxfpCten8YvkC0LMq4i9UcAvg6WF1kCCagTomjN6K7vUihCmIQXNLPnJjXTmg43y9ZbxFsJlaesA)4G2Z)gvMF2jApREa8loaUr4cXTKtkxAwUzYds2dqqy95o(jxJ5zNNGvzFhYREGKMVzQKOpqWM)SJT)NfhotfYd(jS8R4LfPuXj4WYC7144)iFGJBedxYr)jiRqM2mlnqRkhW(qoh7Vbg3NvKml(v1x)nhdBNLj8QOcR6R8f438tQkurCfb1t7qyECxu8K5W(AjCOS42iZm6nDy75JTorU8cAPuOmxPbKj8RHTWU12LBJWWKMxwhFo86J(fXkAOX9rMqp24(Ch4qnKXkLjYef2edCux)6fSV6Ig4684qobv5UJWnGbTG3Cx6DCCfAFx8AlAopwZo0yBuJqTBkJ)imruFtTdimB7cRljJF59IiNen9T9X9QENxL0f4L2t9q(5TP)r0TTtO0yAitnA)NXVobGnugL5h2mirJsQFMxVUOkTHNY3RK1OP8UgdfnWogDLiH8uMWpkZQaRu4(HAhey(b(9qH8cOnbcyLSMXKZl1pGaIIswa75umpbZsaf7YBZIzaY)VfH3OonIkpEeDq6rrgD7NaafW2hctlHPrS3DDOKx1TuVYBjsc)ZLVT2zyZuDKLBcRJNpRyRsNfUpbjHfv53XCMyzgkMWpmdUAzfcsNylZM9bkl)Vd7AbjBlDlFqZ8W71IhxC75vWU2nCtrJA2qDIB)owLG0RmG40g62p8(nRoSHjJgxREVwUrkLcy)w6tMj8IRjTbtuS0oqGhPDjdP0p9fKq5cGIG7(ghA7jdwMjE3pit6bpRphk8CHBxhjcICAmJDg9uNZovFrWY0h6WBOaMPs6HgGOrXiVadfhfzMJmT5tO4il7AAED7Kuftthc1pmHV2rSaMzrKDUaF1N4N6Ux9BCBg4bq04S21jtfQJTiL3Pgu26Twywr71wZz3T1xCJIq5CNHYdJM79kHID1B2JEKMxiuSroGQRa6KYvTUvThbjPX3LuID0dMVGzgHgSZhjUbn7evfnvDElA4qfMfhrNcXVyDzryZ7TCTBX3I64cewV4x1zX5Slda(9r8Wta(49H5PO6p44lQbMSADwEPyY)wLuX3QUTBXwukJ1GtvLzR4T1diJNcY4hV5N)FyPzhV)B)qgaj5Sh)TYZPdsUnUHi)w(29UhGKuddS)OVmqTcNqVckdzwtCdx6SNV3spFu3MCwtTVlCU6vzZptqD5AhBhP1bIBPSAbJoCJVJev66jyTe(VNQ66kzvNF71WXndK9SF2ZinYXC)mqJCTs7hA0R)Zy23lCG38mb5KQOYMYy7usDz)Z(CkAB(Z15y0Me4y(TslU1S7iP8TqaWDp2li)oBA2HTIMxzfwtS770IokTUhxbhYS7mnXX8TxGysXaPJKBNOGdty7mAV)MpsKu0uuBhoE6ZMUojmYc(F7GWg(2iALd7tFJccDD8CSzh7VjwnLVZXuAFeuAmLedWaw3FtSloJ4WLSD8ghME07mclbhQgEPJg0mRpL18sx8QwjJ8x2QFKTMAhDRCls6QEvz7OOn2UqXOTBJkcwnXq8VxKsIV1jNCiDAYjAFlFsPAJ5zD6BDIj6lnFwc2w4ExN(omXKD4gXK7ACDc(D0UDe0(oTmn2hAFkA6AY3lkvUH8DJb)mp9ToX7QcvhH7DD67We)vsGSBlthvVC4t4oVdk9E7SwdC72iYbG9edsZHNx83MOngSMFpn6qhxd7EGWAbC1IeDC2F(CrzVsBCSgpzAdDoi22WU23rGZ(2yJyctmtlU10MqN0CDK9Ny4joL4fjcp73BMY(YkdE(v4TKw0v)64ZEh25YzZtQlrAXXk3dF5KxPFam28ZuJqMj(dX6smPrliDiRg7tmo7fB(5VzZ0T9Gc0Lvxml1ThVy1hDyY8jU3zTx)dCVN(Jp6z7HlM4zpVb9oOflZ6Zn9je4jG0J1r6M4Lgs3KIudye41fEiiA4SdusFQDGZFdwk9YoEYc6cjQzrIe0i9Uq(OXN)9Nr1a9maQRNabAWr2sz0p0OftoSXjjGl(QDMe6DG)tJaAa4BWBnGNYDTGcw1b)Vb)A4O8PFJkOp54DQa3IWZ19EG(QzkyyDliiKkipbDxm6mgu(15AjWni7(Ycqa999upEP4nX1XWlgp4IVF8qgoUxVNbAdvQV1beiGZRnHlMOk7RBQG(MlD7m27ga1oFasIlzBH84JK9Rj8XgvjFWJp23QRu6rDA3pFYiyO1xHbxmP)PdF5jdPmoDKRJ1dmdyhv0ZOBkoFcYHDHU6NOAb((uqx3lK(XKwNP3oDX9C28SulM53m8OAsNvcZoA0qphkk3lM64FByX4cGlDg8V70ukoM5YnMKBS2OLip)19oG8P41h0wijRuL056p(4bQpxaq9uFGcP7rE2A647wpgnHGAPD(5KxttVjF9Xh9ktB32mcBnQMCKFGU5BQA12Np(O7tg)Jp6OTDUOdRoeOrhgKOIOTpsr5umqLWi9dDZfJAFw4HERpoZZgooRMNZ8lMm6SxsFtg1CwyNGC9p36aJR)iJZhUW9LNJwCU2bmGJ0qjHU1Bf6lhiJLLUw6CBI2hZIoUCeDXR1QQgXJp6X0WKXcNN)Q3YVDftBGFwAG98001xCwpIMTUN9ohhq0I19AP9QPEobtHrD3)DNSnXJwDLvFsacy(GFxg(TB9p8fqumv9niqnFNnkZjnH9obXIxjaPrIy2ZUheOtsNxHPob16P79vMs5tPrNTXt1sGRzFF99CVM98mylAOhFCQDc0xxm3nkpR9AbquP5v3nZ2tGsOHHsM(dPP6Q3eSN)6bnKH7xhyTDJuEXKZgYn20Gd5GCidC55RxITPcADPlshoGO5I71NOFGVyYPWwWUdFbEEpYx710yUIks02WV41d4b23LMcUBYjYw5OBJM3JIm6Jrlc3ZHFgtes1z7wJQ2aOYKDc7HAnll3xI(T01WxmSxlDl8fOUPP4VxHAuM(a60B2JUpG1CrSz6DgO8Hy)8n7NgXt4KgqbfB2ZTm08ardgO61x7gghJQRNEwCAAt7ij5yeFJ8T(lOps4uSHjZDUTNuUZ4q)tFzFbhTrl58IZg8YAd(wzHb0mh0R)bocYGUCoQD9BE(2LYc76x)j10uHB3nDVH8BfazOH7bsoxwEV8vLcf2ez(v0clWiDJWxmzSMdsKiBxfkEndv2xFHIqHmsTsJd0k3S2oPLEGlX0oO)(8(Lybf2l11jW(THd2)ahz4HRJLP9LwbQQ6Ke13D(gNmwPlt80Zr2I)SCJVUBgWzdaJi(So9MNI1jAJt)vHH4KDuZOSt9QxH535eF11LFw)I(WNMUvXr6Ow(JpQCtejMSVzo6513Ztar9MVZlg3(B5M4o4It95VxnAZtwdG1gxfthkVEOajk9lhQjp73nuAPCAw9TwLWh1)IFFprqvLjJwfTITSEVTy3B1d1Y6QYByh32tWESGlWckQkjEslnQB2jg5DlVSM8JU0yRlVwmU546wLwuxhseWHPFu1xZcQSGtOkp6ihEgst2TjPwowBF9d1jG08(as2Id0oMsLYQ(U9wvjN44My68jJhqBIBuVMOAdCrEDzyS)ttuI4n530kT(EaXDFDVgraeg2wBalCyO3bnAcLE(QjkyI(O(UBuPEoAXObY9EjV)I6DaDr5OjqSsN)18YhQlKwnR7nUuIo3d9eKUBWaiZoo)dT0n08ErJL(mW(45e7R0nfu31Neim33x9RYh9AtXsv(a3ofsEfbjKx1NtoryhVwE8zDXN3UDJTkkLXoFp(Sn2(K2Um3C18BvS65JLh(gBlq)nOKwv0T3dWDYWoFSJ876iB3JBcBiwH)UOCHKFlLrK2psXPEMFADALh5k97Tdqn)gHQj0Oyr0K22wdhFpIT3xNMFtEzuQaI83FYWEhSf83tmRMJekMLf4afbfQIBBINKlPLpdyyrmReWmVm5g86ladVaM)iwtQcX0fbBjKi)vvNA01XxlKi3(m)H1O)dWhwMxjWr5Ss(WgtrCoG7Li1pe8L4guepPG1fWQ(iX5i0NmIYM4N17(lzT9UuwN0y2EZmUuFnS8223mAUH9IdzTZRSluhzwNVgnUkgKorXBDvKpSDQ8mzJnARxfDGv2UEo24KS2XE0LhpKEMgmqVByAaBd6mjBCBKSX7ts2iJMc(VAKmEKBT8T(FnLvwnowotyBglJ2LLPSLqCliMfvssSoziHBuI4V39Vi)jHog4emVk)bMsm1Is9wQV5(3M3s9v1)28sMFz3ZKiB0xk9OedA2(JD712c3qERuWGxvFQY2GlFd)1WpSz3OyvXsIGwOINVllLcYBSOnij8TSQBgG6K2AaZAynZ2CyMQg(VpNFzeWABDE8onGrztniw(M3FbUwx)bJDkJazvrjJwirWOyr47S9SSasP4gRfYUpMPPYysIUVYcwji292kNBFlAxJC8U7(kmdEymzY8azrcu9jwtpU8qXg0gFBVtr83GzJgy5CqHMaOsQtgo8S6gsAVj95YOCniXZGSM1zHSgpQ22eXQ1dpy7bU9p3hZMoRnC4Qnyy48wUH1foUqgYMHr03lVvAWuMobWErKTjt5ZEP7coWtGIktb1xVyy6vLTggwJZfyLHMdSh2jhy(C6LPoFigEuyENLbwdLfTRXd71xqBvb6y84jdfHlyM4yuqFGiNWyl1vWQxlUnU4iOXi74nChroEeL8AEsktmJLkCsKZsCxB7pAJsn7XPZhzVVadOv59aH4vQSAZQ1go(AWUoPw0GOwjb2LwwGgrma56iAn9z1MftwuttSvIu)cR0zGyOO2z8A8GbPW6VdEUsFoqxgeAx4UWQCwRTzRJVRORQ9bKO7pzulCmfvSIHtJHEQ88oJXolgpwzuvjyHnplIzNeOIJzRUVEeq3RF7Qsl2fUrkIj6gurto(tIU2xvx6VtzJc3I6tCGu6NeItAJLSYeBfn3tZNOkD8iiUB7sr3VLEDOxFDJBIv5C(QieZqVRjgJPSypBgd(pnQBKVMbySErPPq9e9tvH9HOWDr4rQsd4WRwM7hQIHZrLYMm6LJvhiiIlzsef13I06SiGbaYpeQxcr5jftSf8KYyFSPpq8Q56zRvZA5F6zIOo5lkAPFo73yl8pcskZRyfdMvfOMRIwJMYOz1DT5YQOBFG17Mh7PMV(Sk0ANIo5mH9np9k6KZg0adlwJzDqJAkTbQ175Q6a0QokfTOK88C0RUluP0fLUF0qWw50SmErwloRf)OTGV(Z0SDoWr(C8KhVtDjM7TQNF)Pd2xsKm5qSoO3X4qsRPsnG9j35pBMJpk6yFn6dSbfySlmzwq8DSGkMbI)jPxaXmAslvHXWOQnCWPleTg4VlrD9nx1BHkt0Nd)NqMQMghXHgdQwk1hEsy(KqHxgzhq8aHRqEZfGoif)fiwVs9JHeb555x6yxuDjKjozi7oL(Q))d]] ) diff --git a/TheWarWithin/RogueOutlaw.lua b/TheWarWithin/RogueOutlaw.lua index 8cf9707f5..a2eae018d 100644 --- a/TheWarWithin/RogueOutlaw.lua +++ b/TheWarWithin/RogueOutlaw.lua @@ -261,6 +261,11 @@ spec:RegisterAuras( { duration = 3600, max_stack = 1 }, + echoing_reprimand = { + id = 470671, + duration = 30, + max_stack = 1 + }, escalating_blade = { id = 441786, duration = 3600, @@ -848,12 +853,12 @@ spec:RegisterHook( "reset_precast", function() removeStack( "opportunity", numShots ) end - if talent.underhanded_upper_hand.enabled then - if buff.adrenaline_rush.up and buff.subterfuge.up then + if talent.underhanded_upper_hand.enabled and buff.adrenaline_rush.up then + -- Revisit for all Stealth effects (and then resume countdown upon breaking Stealth). + if buff.subterfuge.up then buff.adrenaline_rush.expires = buff.adrenaline_rush.expires + buff.subterfuge.remains end - - if buff.blade_flurry.up and buff.adrenaline_rush.up then + if buff.blade_flurry.up then buff.blade_flurry.expires = buff.blade_flurry.expires + buff.adrenaline_rush.remains end end @@ -907,6 +912,11 @@ spec:RegisterAbilities( { state:QueueAuraExpiration( "adrenaline_rush", ExpireAdrenalineRush, buff.adrenaline_rush.remains ) end + if talent.edge_case.enabled then + addStack( "fatebound_coin_heads" ) + addStack( "fatebound_coin_tails" ) + end + energy.regen = energy.regen * 1.6 energy.max = energy.max + 50 forecastResources( "energy" ) @@ -931,14 +941,13 @@ spec:RegisterAbilities( { gcd = "totem", school = "physical", - spend = function() return talent.tight_spender.enabled and 22.5 or 25 end, + spend = function() return 25 * ( talent.tight_spender.enabled and 0.94 or 1 ) end, spendType = "energy", startsCombat = true, texture = 135610, usable = function() - -- if settings.crackshot_lock and talent.crackshot.enabled and not stealthed.all then return false, "userpref requires stealth" end return combo_points.current > 0, "requires combo points" end, @@ -949,6 +958,10 @@ spec:RegisterAbilities( { applyBuff( "between_the_eyes" ) + if stealthed.rogue and talent.crackshot.enabled then + spec.abilities.dispatch.handler() + end + if set_bonus.tier30_4pc > 0 and ( debuff.soulrip.up or active_dot.soulrip > 0 ) then removeDebuff( "target", "soulrip" ) active_dot.soulrip = 0 @@ -988,10 +1001,7 @@ spec:RegisterAbilities( { handler = function () applyBuff( "blade_flurry" ) if talent.deft_maneuvers.enabled then gain( action.blade_flurry.cp_gain, "combo_points" ) end - if talent.underhanded_upper_hand.enabled then - if buff.adrenaline_rush.up then buff.blade_flurry.expires = buff.blade_flurry.expires + buff.adrenaline_rush.remains end - if buff.slice_and_dice.up then buff.slice_and_dice.expires = buff.slice_and_dice.expires + buff.blade_flurry.remains end - end + if talent.underhanded_upper_hand.enabled and buff.adrenaline_rush.up then buff.blade_flurry.expires = buff.blade_flurry.expires + buff.adrenaline_rush.remains end end, }, @@ -1062,7 +1072,7 @@ spec:RegisterAbilities( { gcd = "totem", school = "physical", - spend = function() return ( talent.tight_spender.enabled and 31.5 or 35 ) - 5 * ( buff.summarily_dispatched.up and buff.summarily_dispatched.stack or 0 ) end, + spend = function() return 35 * ( talent.tight_spender.enabled and 0.94 or 1 ) - ( 5 * buff.summarily_dispatched.stack ) end, spendType = "energy", startsCombat = true, @@ -1070,7 +1080,6 @@ spec:RegisterAbilities( { usable = function() return combo_points.current > 0, "requires combo points" end, handler = function () removeBuff( "brutal_opportunist" ) - removeBuff( "storm_of_steel" ) if talent.alacrity.enabled and combo_points.current > 4 then addStack( "alacrity" ) @@ -1079,15 +1088,19 @@ spec:RegisterAbilities( { addStack( "summarily_dispatched", ( buff.summarily_dispatched.up and buff.summarily_dispatched.remains or nil ), 1 ) end - if set_bonus.tier29_2pc > 0 then applyBuff( "vicious_followup" ) end - - spend( combo_points.current, "combo_points" ) - removeStack( "supercharged_combo_points" ) - if buff.coup_de_grace.up then if debuff.fazed.up then addStack( "flawless_form", nil, 5 ) end removeBuff( "coup_de_grace" ) end + + if buff.slice_and_dice.up then + buff.slice_and_dice.expires = buff.slice_and_dice.expires + combo_points.current * 3 + else applyBuff( "slice_and_dice", combo_points.current * 3 ) end + + if set_bonus.tier29_2pc > 0 then applyBuff( "vicious_followup" ) end + + spend( combo_points.current, "combo_points" ) + removeStack( "supercharged_combo_points" ) end, copy = { 2098, "coup_de_grace", 441776 } @@ -1107,7 +1120,7 @@ spec:RegisterAbilities( { talent = "ghostly_strike", startsCombat = true, - cp_gain = function () return buff.shadow_blades.up and combo_points.max or ( 1 + ( buff.broadside.up and 1 or 0 ) ) end, + cp_gain = function () return 1 + ( buff.broadside.up and 1 or 0 ) end, handler = function () applyDebuff( "target", "ghostly_strike" ) @@ -1315,15 +1328,7 @@ spec:RegisterAbilities( { startsCombat = true, texture = 136189, - cp_gain = function () - if buff.shadow_blades.up then return 7 end - return 1 + ( buff.broadside.up and 1 or 0 ) - end, - - -- 20220604 Outlaw priority spreads bleeds from the trinket. - cycle = function () - if buff.acquired_axe_driver.up and debuff.vicious_wound.up then return "vicious_wound" end - end, + cp_gain = function () return 1 + ( buff.broadside.up and 1 or 0 ) end, handler = function () gain( action.sinister_strike.cp_gain, "combo_points" ) @@ -1339,6 +1344,9 @@ spec:RegisterAbilities( { addStack( "escalating_blade" ) end end + + if talent.echoing_reprimand.enabled then removeBuff( "echoing_reprimand" ) end + end, copy = 1752, @@ -1376,7 +1384,6 @@ spec:RegisterAbility( "shadowmeld", { end, } ) - spec:RegisterRanges( "pick_pocket", "kick", "blind", "shadowstep" ) spec:RegisterOptions( { @@ -1397,55 +1404,6 @@ spec:RegisterOptions( { package = "Outlaw", } ) - ---[[ Retired 12/21/23: -spec:RegisterSetting( "ambush_anyway", false, { - name = strformat( "%s: Regardless of Talents", Hekili:GetSpellLinkWithTexture( 1752 ) ), - desc = strformat( "If checked, %s may be recommended even without %s talented.", Hekili:GetSpellLinkWithTexture( 1752 ), - Hekili:GetSpellLinkWithTexture( spec.talents.hidden_opportunity[2] ) ), - type = "toggle", - width = "full", -} ) - -This is currently the correct rotation, it should not be a spec option. -spec:RegisterSetting( "use_ld_opener", false, { - name = strformat( "%s: Use Before %s (Opener)", Hekili:GetSpellLinkWithTexture( spec.abilities.adrenaline_rush.id ), Hekili:GetSpellLinkWithTexture( spec.abilities.roll_the_bones.id ) ), - desc = function() - return strformat( "If checked, %s will be recommended before %s during the opener to guarantee at least 2 buffs from %s.\n\n" - .. ( state.talent.loaded_dice.enabled and "|cFF00FF00" or "|cFFFF0000" ) .. "Requires %s|r", - Hekili:GetSpellLinkWithTexture( spec.abilities.adrenaline_rush.id ), Hekili:GetSpellLinkWithTexture( spec.abilities.roll_the_bones.id ), - Hekili:GetSpellLinkWithTexture( spec.talents.loaded_dice[2] ), Hekili:GetSpellLinkWithTexture( spec.talents.loaded_dice[2] ) ) - end, - type = "toggle", - width = "full" -} ) - - -not required as of 11.0.5 talent change that refreshes BTE when you stealth. Leave here in case it's ever needed again. -spec:RegisterSetting( "stealth_padding", 0.1, { - name = strformat( "%s: %s Padding", Hekili:GetSpellLinkWithTexture( spec.abilities.between_the_eyes.id ), Hekili:GetSpellLinkWithTexture( assassin.abilities.stealth.id ) ), - desc = strformat( "If set above zero, abilities recommended during %s effects will assume that %s ends earlier than it actually does.\n\n" - .. "This setting can be used to prevent a late %s from occurring after %s expires, putting %s on a long cooldown despite %s.", Hekili:GetSpellLinkWithTexture( assassin.abilities.stealth.id ), - assassin.abilities.stealth.name, Hekili:GetSpellLinkWithTexture( spec.abilities.between_the_eyes.id ), assassin.abilities.stealth.name, spec.abilities.between_the_eyes.name, - Hekili:GetSpellLinkWithTexture( spec.talents.crackshot[2] ) ), - type = "range", - min = 0, - max = 1, - step = 0.05, - width = "full", -} ) - -not required as of 11.0.5 talent change that refreshes BTE when you stealth. Leave here in case it's ever needed again. -spec:RegisterSetting( "crackshot_lock", false, { - name = strformat( "%s: %s |cFFFF0000Only|r", Hekili:GetSpellLinkWithTexture( spec.abilities.between_the_eyes.id ), Hekili:GetSpellLinkWithTexture( assassin.abilities.stealth.id ) ), - desc = strformat( "If checked and %s is talented, %s will never be recommended outside of %s.\n\nThis is |cFFFF0000NOT|r the default simulation behavior, " - .. "but can prevent %s from being placed on a long cooldown.", Hekili:GetSpellLinkWithTexture( spec.talents.crackshot[2] ), - Hekili:GetSpellLinkWithTexture( spec.abilities.between_the_eyes.id ), Hekili:GetSpellLinkWithTexture( assassin.abilities.stealth.id ), - Hekili:GetSpellLinkWithTexture( spec.abilities.between_the_eyes.id ), assassin.abilities.stealth.name ), - type = "toggle", - width = "full" -} )--]] - local assassin = class.specs[ 259 ] spec:RegisterSetting( "check_blade_rush_range", true, { @@ -1455,39 +1413,6 @@ spec:RegisterSetting( "check_blade_rush_range", true, { width = "full" } ) ---[[ spec:RegisterSetting( "mfd_points", 3, { - name = strformat( "%s: Combo Points", Hekili:GetSpellLinkWithTexture( spec.talents.marked_for_death[2] ) ), - desc = strformat( "%s will only be recommended if when you have the specified number of combo points or fewer.", - Hekili:GetSpellLinkWithTexture( spec.talents.marked_for_death[2] ) ), - type = "range", - min = 0, - max = 5, - step = 1, - width = "full" -} ) ]] - ---[[ spec:RegisterSetting( "no_rtb_in_dance_cto", true, { - name = "Never |T1373910:0|t Roll the Bones during |T236279:0|t Shadow Dance", - desc = function() - return "If checked, |T1373910:0|t Roll the Bones will never be recommended during |T236279:0|t Shadow Dance. " - .. "This is consistent with guides but is not yet reflected in the default SimulationCraft profiles as of 12 February 2023.\n\n" - .. ( state.talent.count_the_odds.enabled and "|cFF00FF00" or "|cFFFF0000" ) .. "Requires |T237284:0|t Count the Odds|r" - end, - type = "toggle", - width = "full" -} ) - -The APLs should handle this behaviour, not a spec option -spec:RegisterSetting( "never_roll_in_window", false, { - name = strformat( "%s: Never Reroll in %s", Hekili:GetSpellLinkWithTexture( spec.abilities.roll_the_bones.id ), Hekili:GetSpellLinkWithTexture( 1784 ) ), - desc = strformat( "If checked, %s will never be recommended while %s is active.\n\n" - .. "This preference is not proven to be more optimal than the default behavior, but it is consistent with guides.", - Hekili:GetSpellLinkWithTexture( spec.abilities.roll_the_bones.id ), - Hekili:GetSpellLinkWithTexture( spec.talents.subterfuge[2] ) ), - type = "toggle", - width = "full", -} ) ]] - spec:RegisterSetting( "allow_shadowmeld", false, { name = strformat( "%s: Use in Groups", Hekili:GetSpellLinkWithTexture( 58984 ) ), desc = strformat( "If checked, %s may be recommended for Night Elves when its conditions are met. Your stealth-based abilities can be used in %s, even if your action bar does not change. " .. @@ -1536,6 +1461,4 @@ spec:RegisterSetting( "sinister_clash", -0.5, { width = 1.5, } ) - - -spec:RegisterPack( "Outlaw", 20241025, [[Hekili:T3Z6snUrw)SqLQ8GdGJTbtMzlmvLzsYMmBU9fs29Fw0ww2wbzjhDbcvr5N9VZ50QL6RscWSZKn5hZmmsDF6Up3V06WSrZ(LzxTGLhm7hgpC8zJgoEYGrdp78jZUk)(TbZUAlZ)g2k4hIzBG)(hlYJy3Hp((Oe2cC2zjfP(WRwNNVn7F8zF2QW81fZh4NS5ZYc3ueXYdtI9tzlZX)V)Nn7Q5fHr5FB8S52w6jtgp7kwr(6K0zxDv4M3bqoCXIa(WdY8NDfo8tgn8KXN(p2D9OrdgoyYU3V790Jh(Mtg(6J3Dn8VJgw(VtGHHqA31fBXfuzWim(PKWSK4S6N)6tgpHp5HJQMCA(CV0G0KOODxNFxa7gLXpgg3phKTnWpF31F3xU76FCBqCq6URZcYZdJxjpyAh99SFlbEDAWTHzH4QF9Y0KnLlM0Gh(gyW)kFJF9YW4WS1iy9tIxeM34epxEl9Vz4m3D97GT2DRdIjiKfUiif3Cx)28VcEoq6GrKc08S1j51a7Zpz8RbG9lRHTW)HbR()bgzy8SRIcZYZqUa(gd(PFGyPcIzZJcwm7TaT0h3LavpaqAbXE5Rd8cUpiJtntd3YF9VMbW(T8Xa4xCL(kyuWpMS76Bcc2w(qygWPzEXYLi58y8hH)FcDEsIwKCh8tHW7(2nBttUnyXN9ptbiMDtyCgmyw8c4VUnje(h4TPPHlOJF9GMDfUcawHn7QdG1KffeNpWxGtguEY2DDVDxFiFJmq)OninydlePmxS76Z2D9dpubOWYTLNXCQaS0OxvTT8Ul0)MGuPH1N2chuUfSmYITZYbzRNg5OMj4AuCDbCwkCrHskYrgj4ha8(v5bSiKncPBPbltdqUoA02MRm5efhic5cbRinWFgugefKbd(Nsd8jHf(mKjvDIoLwcjVTcabijocVt0X(ic9ueHkWI(alN38OKKfYizyuNjpQfHzBz5(R1gZK2htoswwYkIYTjAPqXajDbQh5)3MKLfcdeo9XaL42IiqBeJEaOxAtiI8djPMnZz59R3iLqXgVJY69TXaQpTyRH0hs4zrrj3b6(c3SHKVcXbZxHSAIllVEzVb4ARqVsRzYwylfinWBzabhEl(trfW)G6LrYhY5hf5fLG8PtjQULx5XP0fPHGqyEAalRifg)rnm4vPGAdVnbrbbe7eOrfEFolDvqE2G5rSfbElJkstVNyugJmkQ4Q)D5EoJFQ3DnqudJdkzWfgvslOrSeLd(zUzgsSjjgF8UR)soNaFG)J65HKBAKjXr3leM4RdEsGNGlcmuuCGDhdgtiaW3s4aqREjs4yUe4)mLus(98JlYIKbKqKVHFI5KVeuRBXwG7HOVSflYisJh3pHABLvcdDLMAbeMY5OZha9BrOFGqsxN9eWbFhnkaXbdJFM5tpyXXeglwyzHfd4Krcuh3CQjfGS0uIYZjE6eIAtmncRQMRjEiVnyWUR)IOSKAQM0ejXHOYjUGMiQxcPRZtHhJAxpgj7cfHBRveseR80IaKmZ4gZzihndxKnHzz8hHdtDjW9gyJOrXOlMwQAugHROZu)f9SkircgNkugFqtsMIdSSEzXZuuipAKWiylG0uTVeSTyt4jTiijWRIcubE5hBc4kRaDv4GOuIhmq2Juf8Eus8k0jrG6nKVzQFxCs6gwK4DwN2LtjPHEUjXY6wPJZ5AGAd7p8KpUN(gfhBYk2gK6VgvOKk5sJfzyInMlczxMK2bCo(1bSfCVqcZZihCZHnaEI4c2KqWAgcPI4f4ZpBygkrI7tIUHka5IJY7ql6neOD2kgQIKphvzFXMoKKsH)KNhSbnxIQnifPb3IGAtcU5PdIBvONBHlbCT6PPe9GwOdC)krAmlCHhUlZhGA4RzGVeyqgxYzPngjoeT3GiItAaO9fCsCgf0yZG8WnbE5jaZxq1Q2NpILHRwNRWKHVezAbxF04K(buMxLKkCRf8wSiQoQao2QsD(DbcJOXOVWCMhCtPY2iCQL2tC2i4SbtLpEsTVFsHiiMKTBtsZlIdZVhztZY5CT07wfLmNr08p)rRz4WkclpMzpPfsnad0TVeVTjGrSSbO3i(OjnuWFm5mKE4kSnZlYwxdJJmunJhoUMsmU3v3ZH2KHYSJCO4vf7kEkF9J(ukV35RI)wsHd4ygkHFcP96eIhS0B2GfdyLAjDhPaIxKWGOtFjl9wcbEBn4SLrS7ilhGdBB0JlRdKbPatyfly(4lvmTkpRsSRUgskQzrsbY4UmG(9DYiHBmaEPKAJXeGOSs)8ozmx1uvaBAr)pGhLFjxja(e0pJGaC(FdDSWCCiXhleOyKBo8nv5UzmFN9fLht(gqzY1okjZVWbIk)YBE08lT7VEp7kRa9nJhk7hI0uv0fUYFXaarRrC4OVnGl7HBR9FoJSHGNxXgLF69xhaXTVGRTyb4lc6ceOekNs3twcQY5DFPKcl0R(S7J9dQcx(T4(B31FnTbLXJYBCpCoiIC0qhPgWhev84)hpmbp808uckFWrFCYngl63aQbrVudtsjQBvKPiGowOrDjJBnpnPyvzuRyOQYz2ISRVrM6AU5YYtd9XTKSjof5ELdGu8TJ0dWTE(v(yzWckVEDcJvMAmCg6b32P5tYv001JJQE7Yv5oyodChvrB(OjKU6Y3NgSkiUEzzP(Sy08AAkW3tlHsojkF)2IOSaTCxm6C5bgHM9Y8(TIfR2GqsBSFU8yNZwHQvrK4nzgz7a9cNYirv(oQ2mB3gDpQ1pd)FklGozKJ3aBxbPld8Z9yz(GHbwSpW8hKwSPgOnmgl5Iqpfj17wyoihcCEgBlG3QZWcarZIaFs9sbdHoaGz4U1MHvbGIXeULeTbWtjtTbjmExVqWTjWjhmKeza05yRFBPMEUwN)ffcnYW9ZCGsXNcmnGW9xuTDW84H2dMhSK8310v(CUSFwbQPtlm6nBcwecgIX8BakDZRC0VYZR4G)a2bBbJ2bBc95XPBl8kbPaFpLOV54QlJZ5HfQ8Acn6MCR7CUtY9EMWADhnIlij4rTK2WoPLRs1uDgoBiBYBtsIaxXf1csHB5RI5PytkLYu1gqJEKt1z3eUDBazrZNrzzgPSuce56TaDOjGPmGcJhMgemBjP26MLSLqAk7BvBvWwvWF4hGrTrB1fHacph5cPeGrj8EndOfBcaD0DbZ2IpOvjAGi6zvWUYZWAdBPjRWS(03McNoSrMzM65gex2c2JasmUz1qQG7tFntGd)ggiPMQqRfUf6ZILKVvD(lwYfbUsfYT1SCekan4TszbRmtwaZX7(jHVS85uxeNAFj7yfceU0Z48oRPJXGuw8nvbf1ZIx50gKpIZvRiKsyr9uJ3INwTrsowAT6nLKwDLlgNi3XyiPjIc8IRza9GRH60zO0YmGdtT6HllZjQqMwK8dE6jxhyT0LsJh8X7ybDuu6oBl09jfLSsSYSPwwHPWCX0h7VLZvWZvAO1ebZ3KrPGHK75zBvD1sRow8uhHZPkzQfXCqxVzer7uZmowEp4xMnxZeWwctTSZyvJFDIvoOo2bl6xqUQdSebVllm9TxGYMSizYnpwPAKQzmSjdhzG24yDvkxrpK7rWYIuEeqZbBblrQCz1U95jGdvb)9jOxNfBWaudJVbdxOgDEy1thKpAqy2GmAMOpOBQMhHaeJASRr1VwlWsW9MQ3uEgDAvsk6lTt63dHqMtzquj2nUFnJpQkMrLqBKdN1q9K9yuVOog1gCpTHnkpw2VmyzoEZfIdkUfusDSOOWM796YbIjayYrYr)szhdE6PNCw1J5YhvsykjSaSb)7fykRr(bsxcBtsbYGSc0XeBrLiecuU3gX2upXMnBB(qTc8XXWNAW3xN1SPgZWE2XiZ3MGEIJcb4Ytvt9XM(sJitrkQTfpTIDtmO7Y0pBXVb5ImOujbEjeAY)xTGnST1Te8aFtrLK7SYn2aWOWsj3amm0uLx(7yiSaMJqy7(BfyMvfrCq4hWXHa6HKw9G)yl4qxMJC0NmNlAwR05DC2ocs)iMLizmMeIbjRNzuOeVnHXk5RES1ACvz5xp)V1lLM(x1eGwJ)xTojdCw1dZyXnb2s2Qcb5x4kaXqXOIhls0eHNXSnbc7OXRcEnUQ8ytQSkRbpSrL11(ydGkg9JppqzwIG0bH0qFVvPHGeBsQ)AndHMPVLJS0VOgcXl9AcGIx14dJfZs6eRdLGbcoyPhirVG7tIx8m3CyDjOHzFxwMThBRBtzRRP0C002TTD04XDirk2Yeyn2EH3VxGo2IQIPB63ZAdnPMNXaW2sMxLwOqsXciCaEzRXY)Vclv6GrsJ8VSm3mXvm8cJB2vyA1QI(X1A6a70nWYCxisDQShTsHunRH0m6MEylNPEIK)6oCtHhGygUZJc8Gjk54AdPPCORI6Xlyh8ZFkfKL0nvsAnQZDPt3ACfmtPZl8Wlq1EGw6qQc5I6yPC)2QqQ(wt(QOELu8RxkScyL67oWUsh5sswebwWAx)b4EICzkmdCqorn0)AMvwC18aNTVxp5TVwzyG7ubP3qgZvh2BKh2sWQQTBf34HYJc0Ja2ItzrE(edN6qDPwP0n9rMimx6DLC)hKVbRHS8bG7fEl2M1UwhylFvwuc6cE1kJBpxABkh04NW2B8Ez7nwj)FETeT)T01cUX87(R4vLaRgkA8)x3Ufvn(n8lsl(xxvmhoMllwHEwsoCrQPe3347whgzpLbzAzjiiKhO3B)LVIhdbDvLPTWp)tLx2xMri6S5uM4q)14EZDSzH(RURW3wUP8z8eosrQi0VqHLudnym8NvwtF5fs1vGYGokQXtEfiAYd)p2sZuwfkZ2BTNHQMsjqRb0CqT1cBxYvYIHynA7sYQVhuudjnojIqfaQ2eCcbpkAyzOr5XVwfxWlAvlk8EDPpYUed3V810n)R6Ap6xBzMy1fCv8RFjh4M87oZi5ZMVPTRPElztQI7r)2zONkPMUmd9Fjy1S8EEof6kZy)MsltRSieX2nxsftHs6U5QaZYPkCROjKFFrTEb6LsyIMZupAEe7SaURcqdPd65IGO)sXn2AmJ1BqIf01xq8KIBJv9fiXEIMlVvFKZxkqMxjHNmUTnjSoiG0Ro7Ok32hHSGLYkCHLxrr5ZFDVgeDBkFsppY6XQvhJq7oUoqvIhFneIgy9KOqYKy0B7Le1JtF4Eyl8dqAw(juEyIrdYefgzn2MM4xkg9Df(3CpMEgAyuTiEvMEirvzkI2Zj4ICxiUDW7jAymwlneSQ8FmSOb8YJjVQFzsXC0TM3hKSLLUOmPNWGNhYOKKG74xm2TUPsUMVeVcBGPwpWVf9A(lvSXLc8TxeIo9WJGKzcTXGV1lNfgLjxfSjs6M1glE5C1hBFRd3C57IrfRflRZ88iZsCG01WeC3dzmPQ7OW0ImbBQsB)VWUbE3Rc2aA2VhDAiDBAyMEMo(aq6pOlu)YrKdhcVGnEZV3lR8ayvXLTXXl9H7uv2AAr09jKiNsfiQU86uCn8Bdvt1VKxQZMR8VWScvT)gUnJpQYTk5SvTg(MCs1Dr15LBP2C3ro2Lhzw89JDvL9ATx1WLYYo3VBbkP2Y6TG0nUNTGe0kuUfEQkuWJ3oPHrVATa2WUU8VRnSBNrCyobz2slO422kDzf4Hmkkho)EoYJl9XHfDHdo0T7cxoTz)fSEVI1khH1ltYEhHQIEiMn8JXLI4w)sDmcFKuI5utR9Zcr6(oWFiTUhjFDW)9Iq)B8wKYURg8oVe8FQ8mTEPsoIwH(vManROE5SfXafd)rkCRMCWZnD6Bf5jUGxMvluS8QVnCt62CUVnjXICJESWXCzMDg)csPtnPXvUU)FiYe8Ikf7La2Su(0iO2tVS6TFLioJgmXeTxZcuE9CCxf3g4jKETvvGwdcOrFxA6U191SOO5K0nokc3Yl6jE3yUcT4MJQSUIkayPU9GBPlHddE1cUSOSQ)kT(DX4O21YZTxaTQ43W(TOyLv(buEyefZujBXKNbyP(XHkANeNn7Q7yP4hOdStPwxq4gCDlpyVI7qYRWcLdeYuezWVL9SI8Knmc74doOTc8XC37)okvoy3G4DjXWsrV(v6(Q9kUzwJNloMW7pC0F0Vn45SlbOb)w7MaDC9mV)zAlK7grG(kmEVHH29EleTYVg(hhv7uT9uvf5hu9rCQ)fHl2MD9lixhn0LLu67kV1LtDSkl1z2X4s3blnCULl4DBW0kgtOwS1nV8iF0lJzsaBD9SoLh9cl)P726sQnyLfBIDcKCvk0Oq2(Sm1H65Viq9ZTdvtf3AW2TM9oUcAFPHUu0P(DiQd7xV3u(0i8K)0a1XdmZVAWocvLVNqnWA9BnSJWDVq7SQmU6Rp4XPo2Hclx38uNSc2VGQTjQxcgT7MM2I44ZKPJW(zP61HC9Eh7yLIww14hh9u3w3ZvQZH(YNm8CGrF5Kl8xK94WGT5g4(IM)Hy1mCiS86o44UyxTATCNT76Y44YCBSmUhxxK4vVWXAym73gzJdGbzPcrPFTqSGJSmevO7g)0k0ToKoOfXBFjhypV5Ay5MtUEhLbQRW(R09DsV07DeIpzTwocK6fax4yLEg4I9xqGncV9Ig8gTH9cGT33wlDOr6fyN7yL23789iv1HNeVa4M9TploG3lpUrTAHAq3EPe1HSd)TEbW6owPNmw)L0tXgxHxoSULA2Qb(gQ(7RA2opLg4xTpSWVhXWoSvOwrbdmSTYn0rilYKVgm1Z(FhH2Eet4WsZEat4qZ9lhKRR0IgunlbthHOCD10GPTsU1zTNpBmWlzg429(VLeGra)58BefwmpQlodVg7NejldXk(ZFv2GQu8C00ptUdSS792grrwGxyEWMJXpBKPU)UHSp7YWgo2OPwmD8U3)jydl9phTDe7NoTWLTDkpoC50sQPROS7XlEOLMbsVYzQL6kXJLY8K99N6NzQRThp)6MnhLN6zE0Z6mJC0Fc1KZZF6T(4QTEnlib19sdowg4yloMG8FjAhWYNCXLaJRxO(lk(yQdTn1s1xMEyhks3rTuvTEU78BxmUpNiBT7qWzi)72eCDBcUtuZArzjTnUPXxW1MO2SiE4blpSNTzFAVdpOX6swckJUh8fJg13XCnRCyjqC3MGBaAYffSeo26hWieQyg)lv)UTtCvC(hl9JajUcENlE6WhEO(z8gD80Hgd7YPJ6zJjRwLZfNlnjPwz8fN(MhEOKfxgHXjF)PRjZ2j0FY2PuJggLUpWYzV3bh6OJ(E5OXa9WO9a3Zy8HXN4ae9V4CeHR3kGbi3)Hhu(QWUy04E03lMZZK(3irjJ1Ho9F(HhSD9WUC64JmCyHa9rAQBk22Vh)QND50jdjwK)hSFT6gHRFJVlr4Yi1lNk35koz0jhQ8DslCETkXnp8qf5sQq7vYKkLjVFpNu2EhYDPS(o4vQEw9Ef2Nlx)HTpU6g)A0vxlrWn51tptzVlhpuyP0sVd6Yv(lK3c69qa(wXh937tqgT9CJFT9Lwe1iVTSYdOqTZs0ki4mQkqW9NTqRqJKRKhMABwfHULlQkyuAYrkxuvtiqnIv5NR13vLFLsBwLItsebnQ4XgTQRFte1H6r)FC7rZuY9plsC6cCsswFK8zoyEUKUi1sho1040tlDFnO0XIgMEh0aEPZh59ZhOWt88B7uDOXdPf)YPgpV67tWIcyHL9X9FkiLN3hzW(ezy3lIdhD0HgjX0IleF6H2tFi(DeC0O(9v9s5IPwsIzD0fFKD5)BflFWJanBtPQSc1pD0Gj2DP7IPJmr8vovyMI5QxPNJFtXzoQ)d6103csw(lk4yXL4F6ONKMDZjPDv9fgFExv)kQYt4)UrIUVBKO1udWLmlzGfLP48Og9dIEhEGtVEE4HdAjjT9RekCMgxv9uJlfw0(TleYB8S7)N6ybExgfp8h2Y1pdofnFXX6Zv(O3)pP9Dx7MN6Bpz)Uj3xLDGhI3SNtVZVG8oVY44hL9NZ2oTLSnQ3sUEU5f7DOg(50E2uQRIfTPFxdmt6xRyAF1rn1p7AfzroqJ6uUiLeRPsPn4p5TktDuHwDQqCr1X(YPNjLnUbs9nZlgBKvxYiRkSvB8LiOv09O8Rlie)(FZoFP(EvTMP6TOssHTAor4hFZUjMEcXMoP5LYwNM8rTCy62694wt3Le2CLTVaJh3gcuV5q2vipHyfEMDesdUC5MpzJjwO3bAzT4t2zRn6)06bK6BRgtLcEVDnrA6GqQ7lw7vHABF0Up5thnzOoVAzty7tpxsh8tRXmA3AJW3hhTQXlpZa7RcfEBtSQa4Y9MrRmtNksPML2ULXgu05fnEtvZwu)nv9xrd39uAPIUKuYoMAzGtfn0W6ZLnXC33dDhsOd746oUBRR51p396YJ04RRsWEnZ0h(FZIxJv4I(efw9ClhYBvoVlZMIRF5uFXzMEERp2Qry(D82V0nC7)kOOjLqFm9Rc8oIBDGAT2h6e(z4eT33YIw)BlhRVSylOfeSUZKVeovVx87HfbB8v6A0kvrPSoTKSAamp)F)7yBh4ohcwsT8E(x0o22p2i3UT1AYiWLcu(fUdeHqLnb6x2o9TTWcQw7eIpM)nLJvsS1mEwJZCNxYQywTKc4Zf6ZKCGxl1aJkL9SQtYkrOt5PsvQslFup5Ed6FD65TgiEpU5D(kiH8TFj(7vD5beiptXqxPMQHKbCqlDgUETQI3rte9ItlFVANSftHCBDX2lgnXQpkVU)ZJxB)1hA3)0st)wCrmp0zBRSonJMYV93hKAhDu22yemjBFq6nSTt0oOtuTAsuZgSEehy2hB961NnUYKF2DLDnk7JdRFxy84Q6F2ZDBy(rrkoE3F3Fw7y)z9fGfXT6RAVLK)yUe(D6O5Nw6QK7UU6LtNuQ7YD3wfZSTXGuxM2uSAZS1ETFP(FxsXb2PfLp1Y3dxPaU9(FQR9EDSeTK3phDavQG7)y8SR(XI8iSr5LTnWF2pm(8Hu)oB2))p]] ) \ No newline at end of file +spec:RegisterPack( "Outlaw", 20241025, [[Hekili:T3Z6snUrw)SqLQ8GdGJTbtMzlmvLzsYMmBU9fs29Fw0ww2wbzjhDbcvr5N9VZ50QL6RscWSZKn5hZmmsDF6Up3V06WSrZ(LzxTGLhm7hgpC8zJgoEYGrdp78jZUk)(TbZUAlZ)g2k4hIzBG)(hlYJy3Hp((Oe2cC2zjfP(WRwNNVn7F8zF2QW81fZh4NS5ZYc3ueXYdtI9tzlZX)V)Nn7Q5fHr5FB8S52w6jtgp7kwr(6K0zxDv4M3bqoCXIa(WdY8NDfo8tgn8KXN(p2D9OrdgoyYU3V790Jh(Mtg(6J3Dn8VJgw(VtGHHqA31fBXfuzWim(PKWSK4S6N)6tgpHp5HJQMCA(CV0G0KOODxNFxa7gLXpgg3phKTnWpF31F3xU76FCBqCq6URZcYZdJxjpyAh99SFlbEDAWTHzH4QF9Y0KnLlM0Gh(gyW)kFJF9YW4WS1iy9tIxeM34epxEl9Vz4m3D97GT2DRdIjiKfUiif3Cx)28VcEoq6GrKc08S1j51a7Zpz8RbG9lRHTW)HbR()bgzy8SRIcZYZqUa(gd(PFGyPcIzZJcwm7TaT0h3LavpaqAbXE5Rd8cUpiJtntd3YF9VMbW(T8Xa4xCL(kyuWpMS76Bcc2w(qygWPzEXYLi58y8hH)FcDEsIwKCh8tHW7(2nBttUnyXN9ptbiMDtyCgmyw8c4VUnje(h4TPPHlOJF9GMDfUcawHn7QdG1KffeNpWxGtguEY2DDVDxFiFJmq)OninydlePmxS76Z2D9dpubOWYTLNXCQaS0OxvTT8Ul0)MGuPH1N2chuUfSmYITZYbzRNg5OMj4AuCDbCwkCrHskYrgj4ha8(v5bSiKncPBPbltdqUoA02MRm5efhic5cbRinWFgugefKbd(Nsd8jHf(mKjvDIoLwcjVTcabijocVt0X(ic9ueHkWI(alN38OKKfYizyuNjpQfHzBz5(R1gZK2htoswwYkIYTjAPqXajDbQh5)3MKLfcdeo9XaL42IiqBeJEaOxAtiI8djPMnZz59R3iLqXgVJY69TXaQpTyRH0hs4zrrj3b6(c3SHKVcXbZxHSAIllVEzVb4ARqVsRzYwylfinWBzabhEl(trfW)G6LrYhY5hf5fLG8PtjQULx5XP0fPHGqyEAalRifg)rnm4vPGAdVnbrbbe7eOrfEFolDvqE2G5rSfbElJkstVNyugJmkQ4Q)D5EoJFQ3DnqudJdkzWfgvslOrSeLd(zUzgsSjjgF8UR)soNaFG)J65HKBAKjXr3leM4RdEsGNGlcmuuCGDhdgtiaW3s4aqREjs4yUe4)mLus(98JlYIKbKqKVHFI5KVeuRBXwG7HOVSflYisJh3pHABLvcdDLMAbeMY5OZha9BrOFGqsxN9eWbFhnkaXbdJFM5tpyXXeglwyzHfd4Krcuh3CQjfGS0uIYZjE6eIAtmncRQMRjEiVnyWUR)IOSKAQM0ejXHOYjUGMiQxcPRZtHhJAxpgj7cfHBRveseR80IaKmZ4gZzihndxKnHzz8hHdtDjW9gyJOrXOlMwQAugHROZu)f9SkircgNkugFqtsMIdSSEzXZuuipAKWiylG0uTVeSTyt4jTiijWRIcubE5hBc4kRaDv4GOuIhmq2Juf8Eus8k0jrG6nKVzQFxCs6gwK4DwN2LtjPHEUjXY6wPJZ5AGAd7p8KpUN(gfhBYk2gK6VgvOKk5sJfzyInMlczxMK2bCo(1bSfCVqcZZihCZHnaEI4c2KqWAgcPI4f4ZpBygkrI7tIUHka5IJY7ql6neOD2kgQIKphvzFXMoKKsH)KNhSbnxIQnifPb3IGAtcU5PdIBvONBHlbCT6PPe9GwOdC)krAmlCHhUlZhGA4RzGVeyqgxYzPngjoeT3GiItAaO9fCsCgf0yZG8WnbE5jaZxq1Q2NpILHRwNRWKHVezAbxF04K(buMxLKkCRf8wSiQoQao2QsD(DbcJOXOVWCMhCtPY2iCQL2tC2i4SbtLpEsTVFsHiiMKTBtsZlIdZVhztZY5CT07wfLmNr08p)rRz4WkclpMzpPfsnad0TVeVTjGrSSbO3i(OjnuWFm5mKE4kSnZlYwxdJJmunJhoUMsmU3v3ZH2KHYSJCO4vf7kEkF9J(ukV35RI)wsHd4ygkHFcP96eIhS0B2GfdyLAjDhPaIxKWGOtFjl9wcbEBn4SLrS7ilhGdBB0JlRdKbPatyfly(4lvmTkpRsSRUgskQzrsbY4UmG(9DYiHBmaEPKAJXeGOSs)8ozmx1uvaBAr)pGhLFjxja(e0pJGaC(FdDSWCCiXhleOyKBo8nv5UzmFN9fLht(gqzY1okjZVWbIk)YBE08lT7VEp7kRa9nJhk7hI0uv0fUYFXaarRrC4OVnGl7HBR9FoJSHGNxXgLF69xhaXTVGRTyb4lc6ceOekNs3twcQY5DFPKcl0R(S7J9dQcx(T4(B31FnTbLXJYBCpCoiIC0qhPgWhev84)hpmbp808uckFWrFCYngl63aQbrVudtsjQBvKPiGowOrDjJBnpnPyvzuRyOQYz2ISRVrM6AU5YYtd9XTKSjof5ELdGu8TJ0dWTE(v(yzWckVEDcJvMAmCg6b32P5tYv001JJQE7Yv5oyodChvrB(OjKU6Y3NgSkiUEzzP(Sy08AAkW3tlHsojkF)2IOSaTCxm6C5bgHM9Y8(TIfR2GqsBSFU8yNZwHQvrK4nzgz7a9cNYirv(oQ2mB3gDpQ1pd)FklGozKJ3aBxbPld8Z9yz(GHbwSpW8hKwSPgOnmgl5Iqpfj17wyoihcCEgBlG3QZWcarZIaFs9sbdHoaGz4U1MHvbGIXeULeTbWtjtTbjmExVqWTjWjhmKeza05yRFBPMEUwN)ffcnYW9ZCGsXNcmnGW9xuTDW84H2dMhSK8310v(CUSFwbQPtlm6nBcwecgIX8BakDZRC0VYZR4G)a2bBbJ2bBc95XPBl8kbPaFpLOV54QlJZ5HfQ8Acn6MCR7CUtY9EMWADhnIlij4rTK2WoPLRs1uDgoBiBYBtsIaxXf1csHB5RI5PytkLYu1gqJEKt1z3eUDBazrZNrzzgPSuce56TaDOjGPmGcJhMgemBjP26MLSLqAk7BvBvWwvWF4hGrTrB1fHacph5cPeGrj8EndOfBcaD0DbZ2IpOvjAGi6zvWUYZWAdBPjRWS(03McNoSrMzM65gex2c2JasmUz1qQG7tFntGd)ggiPMQqRfUf6ZILKVvD(lwYfbUsfYT1SCekan4TszbRmtwaZX7(jHVS85uxeNAFj7yfceU0Z48oRPJXGuw8nvbf1ZIx50gKpIZvRiKsyr9uJ3INwTrsowAT6nLKwDLlgNi3XyiPjIc8IRza9GRH60zO0YmGdtT6HllZjQqMwK8dE6jxhyT0LsJh8X7ybDuu6oBl09jfLSsSYSPwwHPWCX0h7VLZvWZvAO1ebZ3KrPGHK75zBvD1sRow8uhHZPkzQfXCqxVzer7uZmowEp4xMnxZeWwctTSZyvJFDIvoOo2bl6xqUQdSebVllm9TxGYMSizYnpwPAKQzmSjdhzG24yDvkxrpK7rWYIuEeqZbBblrQCz1U95jGdvb)9jOxNfBWaudJVbdxOgDEy1thKpAqy2GmAMOpOBQMhHaeJASRr1VwlWsW9MQ3uEgDAvsk6lTt63dHqMtzquj2nUFnJpQkMrLqBKdN1q9K9yuVOog1gCpTHnkpw2VmyzoEZfIdkUfusDSOOWM796YbIjayYrYr)szhdE6PNCw1J5YhvsykjSaSb)7fykRr(bsxcBtsbYGSc0XeBrLiecuU3gX2upXMnBB(qTc8XXWNAW3xN1SPgZWE2XiZ3MGEIJcb4Ytvt9XM(sJitrkQTfpTIDtmO7Y0pBXVb5ImOujbEjeAY)xTGnST1Te8aFtrLK7SYn2aWOWsj3amm0uLx(7yiSaMJqy7(BfyMvfrCq4hWXHa6HKw9G)yl4qxMJC0NmNlAwR05DC2ocs)iMLizmMeIbjRNzuOeVnHXk5RES1ACvz5xp)V1lLM(x1eGwJ)xTojdCw1dZyXnb2s2Qcb5x4kaXqXOIhls0eHNXSnbc7OXRcEnUQ8ytQSkRbpSrL11(ydGkg9JppqzwIG0bH0qFVvPHGeBsQ)AndHMPVLJS0VOgcXl9AcGIx14dJfZs6eRdLGbcoyPhirVG7tIx8m3CyDjOHzFxwMThBRBtzRRP0C002TTD04XDirk2Yeyn2EH3VxGo2IQIPB63ZAdnPMNXaW2sMxLwOqsXciCaEzRXY)Vclv6GrsJ8VSm3mXvm8cJB2vyA1QI(X1A6a70nWYCxisDQShTsHunRH0m6MEylNPEIK)6oCtHhGygUZJc8Gjk54AdPPCORI6Xlyh8ZFkfKL0nvsAnQZDPt3ACfmtPZl8Wlq1EGw6qQc5I6yPC)2QqQ(wt(QOELu8RxkScyL67oWUsh5sswebwWAx)b4EICzkmdCqorn0)AMvwC18aNTVxp5TVwzyG7ubP3qgZvh2BKh2sWQQTBf34HYJc0Ja2ItzrE(edN6qDPwP0n9rMimx6DLC)hKVbRHS8bG7fEl2M1UwhylFvwuc6cE1kJBpxABkh04NW2B8Ez7nwj)FETeT)T01cUX87(R4vLaRgkA8)x3Ufvn(n8lsl(xxvmhoMllwHEwsoCrQPe3347whgzpLbzAzjiiKhO3B)LVIhdbDvLPTWp)tLx2xMri6S5uM4q)14EZDSzH(RURW3wUP8z8eosrQi0VqHLudnym8NvwtF5fs1vGYGokQXtEfiAYd)p2sZuwfkZ2BTNHQMsjqRb0CqT1cBxYvYIHynA7sYQVhuudjnojIqfaQ2eCcbpkAyzOr5XVwfxWlAvlk8EDPpYUed3V810n)R6Ap6xBzMy1fCv8RFjh4M87oZi5ZMVPTRPElztQI7r)2zONkPMUmd9Fjy1S8EEof6kZy)MsltRSieX2nxsftHs6U5QaZYPkCROjKFFrTEb6LsyIMZupAEe7SaURcqdPd65IGO)sXn2AmJ1BqIf01xq8KIBJv9fiXEIMlVvFKZxkqMxjHNmUTnjSoiG0Ro7Ok32hHSGLYkCHLxrr5ZFDVgeDBkFsppY6XQvhJq7oUoqvIhFneIgy9KOqYKy0B7Le1JtF4Eyl8dqAw(juEyIrdYefgzn2MM4xkg9Df(3CpMEgAyuTiEvMEirvzkI2Zj4ICxiUDW7jAymwlneSQ8FmSOb8YJjVQFzsXC0TM3hKSLLUOmPNWGNhYOKKG74xm2TUPsUMVeVcBGPwpWVf9A(lvSXLc8TxeIo9WJGKzcTXGV1lNfgLjxfSjs6M1glE5C1hBFRd3C57IrfRflRZ88iZsCG01WeC3dzmPQ7OW0ImbBQsB)VWUbE3Rc2aA2VhDAiDBAyMEMo(aq6pOlu)YrKdhcVGnEZV3lR8ayvXLTXXl9H7uv2AAr09jKiNsfiQU86uCn8Bdvt1VKxQZMR8VWScvT)gUnJpQYTk5SvTg(MCs1Dr15LBP2C3ro2Lhzw89JDvL9ATx1WLYYo3VBbkP2Y6TG0nUNTGe0kuUfEQkuWJ3oPHrVATa2WUU8VRnSBNrCyobz2slO422kDzf4Hmkkho)EoYJl9XHfDHdo0T7cxoTz)fSEVI1khH1ltYEhHQIEiMn8JXLI4w)sDmcFKuI5utR9Zcr6(oWFiTUhjFDW)9Iq)B8wKYURg8oVe8FQ8mTEPsoIwH(vManROE5SfXafd)rkCRMCWZnD6Bf5jUGxMvluS8QVnCt62CUVnjXICJESWXCzMDg)csPtnPXvUU)FiYe8Ikf7La2Su(0iO2tVS6TFLioJgmXeTxZcuE9CCxf3g4jKETvvGwdcOrFxA6U191SOO5K0nokc3Yl6jE3yUcT4MJQSUIkayPU9GBPlHddE1cUSOSQ)kT(DX4O21YZTxaTQ43W(TOyLv(buEyefZujBXKNbyP(XHkANeNn7Q7yP4hOdStPwxq4gCDlpyVI7qYRWcLdeYuezWVL9SI8Knmc74doOTc8XC37)okvoy3G4DjXWsrV(v6(Q9kUzwJNloMW7pC0F0Vn45SlbOb)w7MaDC9mV)zAlK7grG(kmEVHH29EleTYVg(hhv7uT9uvf5hu9rCQ)fHl2MD9lixhn0LLu67kV1LtDSkl1z2X4s3blnCULl4DBW0kgtOwS1nV8iF0lJzsaBD9SoLh9cl)P726sQnyLfBIDcKCvk0Oq2(Sm1H65Viq9ZTdvtf3AW2TM9oUcAFPHUu0P(DiQd7xV3u(0i8K)0a1XdmZVAWocvLVNqnWA9BnSJWDVq7SQmU6Rp4XPo2Hclx38uNSc2VGQTjQxcgT7MM2I44ZKPJW(zP61HC9Eh7yLIww14hh9u3w3ZvQZH(YNm8CGrF5Kl8xK94WGT5g4(IM)Hy1mCiS86o44UyxTATCNT76Y44YCBSmUhxxK4vVWXAym73gzJdGbzPcrPFTqSGJSmevO7g)0k0ToKoOfXBFjhypV5Ay5MtUEhLbQRW(R09DsV07DeIpzTwocK6fax4yLEg4I9xqGncV9Ig8gTH9cGT33wlDOr6fyN7yL23789iv1HNeVa4M9TploG3lpUrTAHAq3EPe1HSd)TEbW6owPNmw)L0tXgxHxoSULA2Qb(gQ(7RA2opLg4xTpSWVhXWoSvOwrbdmSTYn0rilYKVgm1Z(FhH2Eet4WsZEat4qZ9lhKRR0IgunlbthHOCD10GPTsU1zTNpBmWlzg429(VLeGra)58BefwmpQlodVg7NejldXk(ZFv2GQu8C00ptUdSS792grrwGxyEWMJXpBKPU)UHSp7YWgo2OPwmD8U3)jydl9phTDe7NoTWLTDkpoC50sQPROS7XlEOLMbsVYzQL6kXJLY8K99N6NzQRThp)6MnhLN6zE0Z6mJC0Fc1KZZF6T(4QTEnlib19sdowg4yloMG8FjAhWYNCXLaJRxO(lk(yQdTn1s1xMEyhks3rTuvTEU78BxmUpNiBT7qWzi)72eCDBcUtuZArzjTnUPXxW1MO2SiE4blpSNTzFAVdpOX6swckJUh8fJg13XCnRCyjqC3MGBaAYffSeo26hWieQyg)lv)UTtCvC(hl9JajUcENlE6WhEO(z8gD80Hgd7YPJ6zJjRwLZfNlnjPwz8fN(MhEOKfxgHXjF)PRjZ2j0FY2PuJggLUpWYzV3bh6OJ(E5OXa9WO9a3Zy8HXN4ae9V4CeHR3kGbi3)Hhu(QWUy04E03lMZZK(3irjJ1Ho9F(HhSD9WUC64JmCyHa9rAQBk22Vh)QND50jdjwK)hSFT6gHRFJVlr4Yi1lNk35koz0jhQ8DslCETkXnp8qf5sQq7vYKkLjVFpNu2EhYDPS(o4vQEw9Ef2Nlx)HTpU6g)A0vxlrWn51tptzVlhpuyP0sVd6Yv(lK3c69qa(wXh937tqgT9CJFT9Lwe1iVTSYdOqTZs0ki4mQkqW9NTqRqJKRKhMABwfHULlQkyuAYrkxuvtiqnIv5NR13vLFLsBwLItsebnQ4XgTQRFte1H6r)FC7rZuY9plsC6cCsswFK8zoyEUKUi1sho1040tlDFnO0XIgMEh0aEPZh59ZhOWt88B7uDOXdPf)YPgpV67tWIcyHL9X9FkiLN3hzW(ezy3lIdhD0HgjX0IleF6H2tFi(DeC0O(9v9s5IPwsIzD0fFKD5)BflFWJanBtPQSc1pD0Gj2DP7IPJmr8vovyMI5QxPNJFtXzoQ)d6103csw(lk4yXL4F6ONKMDZjPDv9fgFExv)kQYt4)UrIUVBKO1udWLmlzGfLP48Og9dIEhEGtVEE4HdAjjT9RekCMgxv9uJlfw0(TleYB8S7)N6ybExgfp8h2Y1pdofnFXX6Zv(O3)pP9Dx7MN6Bpz)Uj3xLDGhI3SNtVZVG8oVY44hL9NZ2oTLSnQ3sUEU5f7DOg(50E2uQRIfTPFxdmt6xRyAF1rn1p7AfzroqJ6uUiLeRPsPn4p5TktDuHwDQqCr1X(YPNjLnUbs9nZlgBKvxYiRkSvB8LiOv09O8Rlie)(FZoFP(EvTMP6TOssHTAor4hFZUjMEcXMoP5LYwNM8rTCy62694wt3Le2CLTVaJh3gcuV5q2vipHyfEMDesdUC5MpzJjwO3bAzT4t2zRn6)06bK6BRgtLcEVDnrA6GqQ7lw7vHABF0Up5thnzOoVAzty7tpxsh8tRXmA3AJW3hhTQXlpZa7RcfEBtSQa4Y9MrRmtNksPML2ULXgu05fnEtvZwu)nv9xrd39uAPIUKuYoMAzGtfn0W6ZLnXC33dDhsOd746oUBRR51p396YJ04RRsWEnZ0h(FZIxJv4I(efw9ClhYBvoVlZMIRF5uFXzMEERp2Qry(D82V0nC7)kOOjLqFm9Rc8oIBDGAT2h6e(z4eT33YIw)BlhRVSylOfeSUZKVeovVx87HfbB8v6A0kvrPSoTKSAamp)F)7yBh4ohcwsT8E(x0o22p2i3UT1AYiWLcu(fUdeHqLnb6x2o9TTWcQw7eIpM)nLJvsS1mEwJZCNxYQywTKc4Zf6ZKCGxl1aJkL9SQtYkrOt5PsvQslFup5Ed6FD65TgiEpU5D(kiH8TFj(7vD5beiptXqxPMQHKbCqlDgUETQI3rte9ItlFVANSftHCBDX2lgnXQpkVU)ZJxB)1hA3)0st)wCrmp0zBRSonJMYV93hKAhDu22yemjBFq6nSTt0oOtuTAsuZgSEehy2hB961NnUYKF2DLDnk7JdRFxy84Q6F2ZDBy(rrkoE3F3Fw7y)z9fGfXT6RAVLK)yUe(D6O5Nw6QK7UU6LtNuQ7YD3wfZSTXGuxM2uSAZS1ETFP(FxsXb2PfLp1Y3dxPaU9(FQR9EDSeTK3phDavQG7)y8SR(XI8iSr5LTnWF2pm(8Hu)oB2))p]] ) diff --git a/TheWarWithin/RogueSubtlety.lua b/TheWarWithin/RogueSubtlety.lua index adfd0f757..d6e44e7e7 100644 --- a/TheWarWithin/RogueSubtlety.lua +++ b/TheWarWithin/RogueSubtlety.lua @@ -283,15 +283,14 @@ spec:RegisterAuras( { duration = 3, max_stack = 1, }, - perforated_veins_stack = { + perforated_veins = { id = 394254, duration = 3600, max_stack = 4 }, - -- At $394254u stacks, your next attack that generates combo points deals $w1% increased damage. - perforated_veins = { - id = 426602, - duration = 3600, + poised_shadows = { + id = 455573, + duration = 30, max_stack = 1, }, premeditation = { @@ -370,14 +369,23 @@ spec:RegisterAuras( { max_stack = function() return combo_points.max end, copy = { "supercharge", "supercharged", "supercharger" } }, - symbols_of_death_crit = { - id = 227151, + symbols_of_death = { + id = 212283, duration = 10, max_stack = 1, - copy = "symbols_of_death_autocrit" }, -- Talent: Your next Shadowstrike or $?s200758[Gloomblade][Backstab] deals $s3% increased damage, generates $s1 additional combo points, and is guaranteed to critically strike. -- https://wowhead.com/beta/spell=394203 + the_first_dance_prep = { + id = 470678, + duration = 3600, + max_stack = 1, + }, + the_first_dance_prep = { + id = 470677, + duration = 6, + max_stack = 1, + }, the_rotten = { id = 394203, duration = 30, @@ -406,11 +414,6 @@ spec:RegisterAuras( { duration = 1, max_stack = 50 }, - the_first_dance = { - id = 278981, - duration = function () return buff.shadow_dance.duration end, - max_stack = 1, - }, -- Conduit perforated_veins_conduit = { @@ -587,7 +590,7 @@ spec:RegisterStateExpr( "effective_combo_points", function () if c > 0 and buff.supercharged_combo_points.up then c = c + ( talent.forced_induction.enabled and 3 or 2 ) - end -- todo: Find out if these stack like this or not? coup de gace and supercharge + end if talent.coup_de_grace.enabled and this_action == "coup_de_grace" and buff.coup_de_grace.up then c = c + 5 end return c @@ -598,29 +601,31 @@ end ) spec:RegisterGear( "cinidaria_the_symbiote", 133976 ) spec:RegisterGear( "denial_of_the_halfgiants", 137100 ) -local function comboSpender( amt, resource ) - if resource == "combo_points" then - if amt > 0 then - gain( 6 * amt, "energy" ) +spec:RegisterHook( "spend", function( amt, resource ) + if amt > 0 and resource == "combo_points" then + if talent.relentless_strikes.enabled and amt > 0 then + gain( 5 * effective_combo_points, "energy" ) end - if talent.alacrity.enabled and amt >= 10 then - addStack( "alacrity" ) - end - - if talent.secret_technique.enabled then - reduceCooldown( "secret_technique", amt ) + if effective_combo_points > 4 and debuff.deathstalkers_mark.up then + removeDebuffStack( "target", "deathstalkers_mark" ) + if debuff.deathstalkers_mark.down and talent.darkest_night.enabled then + gain( 40, "energy" ) + applyBuff( "darkest_night" ) + end + applyBuff( "deathstalkers_mark_buff" ) end - if talent.deepening_shadows.enabled then reduceCooldown( "shadow_dance", amt * 0.5 ) end + if talent.alacrity.enabled and ( 5 * talent.alacrity.rank ) + ( 20 * effective_combo_points ) >= 100 then addStack( "alacrity" ) end + if talent.secret_technique.enabled then reduceCooldown( "secret_technique", amt ) end + if talent.deepening_shadows.enabled then reduceCooldown( "shadow_dance", amt * effective_combo_points ) end + if talent.supercharger.enabled and buff.supercharged_combo_points.up then removeStack( "supercharged_combo_points" ) end - if legendary.obedience.enabled and buff.flagellation_buff.up then - reduceCooldown( "flagellation", amt ) - end + -- Legacy + if legendary.obedience.enabled and buff.flagellation_buff.up then reduceCooldown( "flagellation", amt ) end end -end +end ) -spec:RegisterHook( "spend", comboSpender ) local function st_gain( token ) local amount = action[ token ].cp_gain @@ -699,6 +704,10 @@ local TriggerLingeringDarkness = setfenv( function () applyBuff( "lingering_darkness" ) end, state ) +local TriggerLingeringShadow = setfenv( function () + applyBuff( "lingering_shadow" ) +end, state ) + spec:RegisterStateTable( "danse_macabre_tracker", setmetatable( {}, { __index = function( t, k ) @@ -761,9 +770,14 @@ spec:RegisterHook( "reset_precast", function( amt, resource ) if buff.cold_blood.up then setCooldown( "cold_blood", action.cold_blood.cooldown ) end - if talent.lingering_darkness.enabled and buff.shadow_dance.up then - state:QueueAuraEvent( "lingering_darkness", TriggerLingeringDarkness, buff.shadow_dance.expires, "AURA_EXPIRATION" ) + if talent.lingering_darkness.enabled and buff.shadow_blades.up then + state:QueueAuraEvent( "lingering_darkness", TriggerLingeringDarkness, buff.shadow_blades.expires, "AURA_EXPIRATION" ) + end + + if talent.lingering_shadow.enabled and buff.shadow_dance.up then + state:QueueAuraEvent( "lingering_shadow", TriggerLingeringShadow, buff.shadow_dance.expires, "AURA_EXPIRATION" ) end + end ) spec:RegisterHook( "step", function() @@ -830,19 +844,13 @@ spec:RegisterGear( "will_of_valeera", 137069 ) } ) --- Tier Sets -spec:RegisterGear( "tier21", 152163, 152165, 152161, 152160, 152162, 152164 ) -spec:RegisterGear( "tier20", 147172, 147174, 147170, 147169, 147171, 147173 ) -spec:RegisterGear( "tier19", 138332, 138338, 138371, 138326, 138329, 138335 ) --- Tier 31 -spec:RegisterGear( "tier31", 207234, 207235, 207236, 207237, 207239, 217208, 217210, 217206, 217207, 217209 ) - --- Tier 30 -spec:RegisterGear( "tier30", 202500, 202498, 202497, 202496, 202495 ) --- Shadow Dance is in RogueAssassination.lua, so the 2pc bonus is handled there. +--- The War Within +spec:RegisterGear( "tww1", 212039, 212037, 212041, 212038, 212036 ) -- DF Tier Set +spec:RegisterGear( "tier31", 207234, 207235, 207236, 207237, 207239, 217208, 217210, 217206, 217207, 217209 ) +spec:RegisterGear( "tier30", 202500, 202498, 202497, 202496, 202495 ) spec:RegisterGear( "tier29", 200369, 200371, 200372, 200373, 200374 ) spec:RegisterAuras( { honed_blades = { @@ -857,6 +865,10 @@ spec:RegisterAuras( { } }) +-- Old Tier Sets +spec:RegisterGear( "tier21", 152163, 152165, 152161, 152160, 152162, 152164 ) +spec:RegisterGear( "tier20", 147172, 147174, 147170, 147169, 147171, 147173 ) +spec:RegisterGear( "tier19", 138332, 138338, 138371, 138326, 138329, 138335 ) -- Abilities @@ -876,9 +888,8 @@ spec:RegisterAbilities( { notalent = "gloomblade", cp_gain = function () - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 1 + ( buff.broadside.up and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return 1 end, used_for_danse = function() @@ -887,21 +898,34 @@ spec:RegisterAbilities( { end, handler = function () - removeBuff( "honed_blades" ) - applyDebuff( "target", "shadows_grasp", 8 ) - if azerite.perforate.enabled and buff.perforate.up then - -- We'll assume we're attacking from behind if we've already put up Perforate once. - addStack( "perforate" ) - gainChargeTime( "shadow_blades", 0.5 ) + if talent.perforated_veins.enabled then + if buff.perforated_veins.stack < 4 then + addStack( "perforated_veins" ) + else removeBuff( "perforated_veins" ) + end + end + + if buff.the_rotten.up and talent.improved_backstab.enabled then + removeStack( "the_rotten" ) + applyDebuff( "target", "find_weakness" ) + end + + if talent.inevitability.enabled and buff.symbols_of_death.up then + buff.symbols_of_death.expires = buff.symbols_of_death.expires + 0.5 end st_gain( "backstab" ) - removeBuff( "perforated_veins" ) removeBuff( "premeditation" ) - removeBuff( "symbols_of_death_crit" ) removeBuff( "the_rotten" ) + removeBuff( "honed_blades" ) + + if azerite.perforate.enabled and buff.perforate.up then + -- We'll assume we're attacking from behind if we've already put up Perforate once. + addStack( "perforate" ) + gainChargeTime( "shadow_blades", 0.5 ) + end end, bind = "gloomblade" @@ -933,7 +957,7 @@ spec:RegisterAbilities( { handler = function () removeBuff( "masterful_finish" ) - if talent.alacrity.enabled and effective_combo_points > 4 then addStack( "alacrity" ) end + if talent.symbolic_victory.enabled and buff.symbolic_victory.up then removeBuff( "symbolic_victory" ) end if buff.finality_black_powder.up then removeBuff( "finality_black_powder" ) elseif talent.finality.enabled then applyBuff( "finality_black_powder" ) end @@ -941,7 +965,7 @@ spec:RegisterAbilities( { if set_bonus.tier29_2pc > 0 then applyBuff( "honed_blades", nil, effective_combo_points ) end spend( combo_points.current, "combo_points" ) - removeStack( "supercharged_combo_points" ) + if talent.deeper_daggers.enabled or conduit.deeper_daggers.enabled then applyBuff( "deeper_daggers" ) end end, }, @@ -969,9 +993,8 @@ spec:RegisterAbilities( { end, cp_gain = function() - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 1 + ( talent.seal_fate.enabled and ( buff.cold_blood.up or buff.the_rotten.up ) and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return 1 end, handler = function () @@ -982,43 +1005,8 @@ spec:RegisterAbilities( { st_gain( "cheap_shot" ) removeBuff( "premeditation" ) - if buff.cold_blood.up then removeBuff( "cold_blood" ) - elseif buff.the_rotten.up then removeStack( "the_rotten" ) end - end, - }, - - -- Talent: Deal $s1 Arcane damage to an enemy, extracting their anima to Animacharge a combo point for $323558d. Damaging finishing moves that consume the same number of combo points as your Animacharge function as if they consumed $s2 combo points. |cFFFFFFFFAwards $s3 combo $lpoint:points;.|r - echoing_reprimand = { - id = 323547, - cast = 0, - cooldown = 45, - gcd = "totem", - school = "arcane", - - spend = 10, - spendType = "energy", - - startsCombat = true, - toggle = "cooldowns", - - usable = function() return covenant.kyrian end, - - cp_gain = function () - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 2 + ( buff.broadside.up and 1 or 0 ) + ( talent.seal_fate.enabled and ( buff.cold_blood.up or buff.the_rotten.up ) and 1 or 0 ) - end, - - handler = function () - -- Can't predict the Animacharge, unless you have the talent/legendary. - - st_gain( "echoing_reprimand" ) - removeBuff( "premeditation" ) - if buff.the_rotten.up then removeStack( "the_rotten" ) end end, - - copy = { 385616, 323547 }, }, -- Finishing move that disembowels the target, causing damage per combo point. Targets with Find Weakness suffer an additional 20% damage as Shadow. 1 point : 273 damage 2 points: 546 damage 3 points: 818 damage 4 points: 1,091 damage 5 points: 1,363 damage 6 points: 1,636 damage @@ -1052,9 +1040,6 @@ spec:RegisterAbilities( { removeBuff( "coup_de_grace" ) end - if talent.alacrity.enabled and combo_points.current > 4 then - addStack( "alacrity" ) - end removeBuff( "nights_vengeance" ) if buff.finality_eviscerate.up then removeBuff( "finality_eviscerate" ) @@ -1064,10 +1049,15 @@ spec:RegisterAbilities( { applyDebuff( "target", "deathstalkers_mark", nil, debuff.deathstalkers_mark.stack + 3 ) end + if talent.symbolic_victory.enabled and buff.symbolic_victory.up then removeBuff( "symbolic_victory" ) end + if set_bonus.tier29_2pc > 0 then applyBuff( "honed_blades", nil, effective_combo_points ) end + if buff.slice_and_dice.up then + buff.slice_and_dice.expires = buff.slice_and_dice.expires + effective_combo_points * 3 + else applyBuff( "slice_and_dice", effective_combo_points * 3 ) end + spend( combo_points.current, "combo_points" ) - removeStack( "supercharged_combo_points" ) if talent.deeper_daggers.enabled or conduit.deeper_daggers.enabled then applyBuff( "deeper_daggers" ) end end, @@ -1113,7 +1103,6 @@ spec:RegisterAbilities( { school = "shadow", spend = function () - if buff.goremaws_bite.up then return 0 end return 40 * ( ( talent.shadow_focus.enabled and ( buff.shadow_dance.up or buff.stealth.up ) ) and 0.95 or 1 ) end, spendType = "energy", @@ -1122,19 +1111,15 @@ spec:RegisterAbilities( { startsCombat = true, cp_gain = function() - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 1 + ( talent.seal_fate.enabled and ( buff.cold_blood.up or buff.the_rotten.up ) and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max + else return 1 end end, handler = function () - applyDebuff( "target", "shadows_grasp", 8 ) - st_gain( "gloomblade" ) removeBuff( "premeditation" ) - if buff.the_rotten.up then removeStack( "the_rotten" ) - else removeBuff( "symbols_of_death_crit" ) end + if buff.the_rotten.up then removeStack( "the_rotten" ) end end, bind = "backstab" @@ -1155,9 +1140,8 @@ spec:RegisterAbilities( { startsCombat = true, cp_gain = function() - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 3 + ( talent.seal_fate.enabled and ( buff.cold_blood.up or buff.the_rotten.up ) and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return 3 end, handler = function() @@ -1201,9 +1185,8 @@ spec:RegisterAbilities( { usable = function () return combo_points.current > 0, "requires combo_points" end, handler = function () applyBuff( "secret_technique" ) -- fake buff for APL logic. - removeStack( "goremaws_bite" ) - if talent.alacrity.enabled and combo_points.current > 4 then addStack( "alacrity" ) end - spend( min( talent.deeper_stratagem.enabled and 6 or 5, combo_points.current ), "combo_points" ) + if talent.goremaws_bite.enabled and buff.goremaws_bite.up then removeStack( "goremaws_bite" ) end + spend( combo_points.current, "combo_points" ) end, }, @@ -1211,7 +1194,7 @@ spec:RegisterAbilities( { shadow_blades = { id = 121471, cast = 0, - cooldown = function () return ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * 90 * ( pvptalent.thiefs_bargain.enabled and 0.8 or 1 ) end, + cooldown = function () return 90 * ( essence.vision_of_perfection.enabled and 0.87 or 1 ) * ( pvptalent.thiefs_bargain.enabled and 0.8 or 1 ) end, gcd = "off", school = "physical", @@ -1222,6 +1205,7 @@ spec:RegisterAbilities( { handler = function () applyBuff( "shadow_blades" ) + end, }, @@ -1229,9 +1213,9 @@ spec:RegisterAbilities( { shadow_dance = { id = 185313, cast = 0, - charges = function () return 1 + talent.double_dance.rank end, + charges = function () if talent.double_dance.enabled then return 2 or nil end end, cooldown = 60, - recharge = 6, + recharge = function () if talent.double_dance.enabled then return 60 or nil end end, gcd = "off", startsCombat = false, @@ -1277,7 +1261,6 @@ spec:RegisterAbilities( { school = "physical", spend = function () - if buff.goremaws_bite.up then return 0 end return ( 45 - ( azerite.blade_in_the_shadows.enabled and 2 or 0 ) ) * ( ( talent.shadow_focus.enabled and ( buff.shadow_dance.up or buff.stealth.up ) ) and 0.95 or 1 ) end, spendType = "energy", @@ -1286,9 +1269,8 @@ spec:RegisterAbilities( { cycle = function () return talent.find_weakness.enabled and "find_weakness" or nil end, cp_gain = function () - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 2 + ( talent.improved_ambush.enabled and 1 or 0 ) + ( buff.broadside.up and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return 2 + ( talent.improved_ambush.enabled and 1 or 0 ) end, usable = function () return stealthed.all or buff.sepsis_buff.up, "requires stealth or sepsis_buff" end, @@ -1301,32 +1283,30 @@ spec:RegisterAbilities( { handler = function () st_gain( "shadowstrike" ) - removeBuff( "honed_blades" ) - removeBuff( "premeditation" ) - removeBuff( "symbols_of_death_crit" ) - removeBuff( "the_rotten" ) + if buff.the_rotten.up then + removeStack( "the_rotten" ) + if talent.improved_backstab.enabled then + applyDebuff( "target", "find_weakness" ) + end + end + - if azerite.blade_in_the_shadows.enabled then addStack( "blade_in_the_shadows" ) end if buff.premeditation.up then - if buff.slice_and_dice.up then - if buff.slice_and_dice.remains < 10 then buff.slice_and_dice.expires = query_time + 10 end - else - applyBuff( "slice_and_dice", 10 ) - end removeBuff( "premeditation" ) end if talent.deathstalkers_mark.enabled and stealthed.all then applyDebuff( "target", "deathstalkers_mark", nil, 3 ) + if talent.clear_the_witnesses.enabled then applyBuff( "clear_the_witnesses" ) end end + if buff.sepsis_buff.up then removeBuff( "sepsis_buff" ) end if conduit.perforated_veins.enabled then addStack( "perforated_veins" ) end + if azerite.blade_in_the_shadows.enabled then addStack( "blade_in_the_shadows" ) end - removeBuff( "sepsis_buff" ) - applyDebuff( "target", "find_weakness" ) end, bind = "ambush" @@ -1356,9 +1336,8 @@ spec:RegisterAbilities( { startsCombat = true, cp_gain = function () - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return 1 + ( buff.broadside.up and 1 or 0 ) + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return 1 end, handler = function () @@ -1378,8 +1357,7 @@ spec:RegisterAbilities( { school = "physical", spend = function () - if buff.goremaws_bite.up then return 0 end - return 35 * ( ( talent.shadow_focus.enabled and ( buff.shadow_dance.up or buff.stealth.up ) ) and 0.95 or 1 ) + return 45 * ( ( talent.shadow_focus.enabled and ( buff.shadow_dance.up or buff.stealth.up ) ) and 0.95 or 1 ) end, spendType = "energy", @@ -1387,9 +1365,8 @@ spec:RegisterAbilities( { startsCombat = true, cp_gain = function() - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end - return active_enemies + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end + return active_enemies + ( buff.clear_the_witnesses and 1 or 0 ) end, used_for_danse = function() @@ -1400,10 +1377,15 @@ spec:RegisterAbilities( { handler = function () st_gain( "shuriken_storm" ) - removeBuff( "honed_blades" ) - removeBuff( "premeditation" ) - removeBuff( "symbols_of_death_crit" ) - removeStack( "the_rotten" ) + if talent.clear_the_witnesses.enabled then removeBuff( "clear_the_witnesses" ) end + if talent.premeditation.enabled then removeBuff( "premeditation" ) end + + if buff.the_rotten.up then + removeStack( "the_rotten" ) + if talent.improved_shuriken_storm.enabled then + applyDebuff( "target", "find_weakness" ) + end + end if buff.silent_storm.up then applyDebuff( "target", "find_weakness" ) @@ -1457,8 +1439,7 @@ spec:RegisterAbilities( { startsCombat = true, cp_gain = function() - if buff.shadow_blades.up then return 7 end - if buff.premeditation.up then return combo_points.max end + if buff.shadow_blades.up or buff.premeditation.up then return combo_points.max end return 1 end, @@ -1466,7 +1447,6 @@ spec:RegisterAbilities( { st_gain( "shuriken_toss" ) removeBuff( "premeditation" ) - removeBuff( "symbols_of_death_crit" ) removeStack( "the_rotten" ) end, }, @@ -1475,19 +1455,29 @@ spec:RegisterAbilities( { symbols_of_death = { id = 212283, cast = 0, - charges = function() if talent.death_perception.enabled then return 1 end end, - cooldown = 30, - recharge = function() if talent.death_perception.enabled then return 30 end end, + charges = function() if talent.death_perception.enabled then return talent.death_perception.rank + 1 end end, + cooldown = function() return 30 - ( 5 * talent.swift_death.rank ) end, + recharge = function() if talent.death_perception.enabled then return 30 - ( 5 * talent.swift_death.rank ) end end, gcd = "off", school = "physical", + spend = -40, + spendType = "energy", + startsCombat = false, handler = function () applyBuff( "symbols_of_death" ) - -- applyBuff( "symbols_of_death_crit" ) - if legendary.the_rotten.enabled then applyBuff( "the_rotten" ) end + if talent.symbolic_victory.enabled then + applyBuff( "symbolic_victory" ) + end + + if set_bonus.tww1 >= 2 then + applyBuff( "poised_shadows" ) + end + + if talent.the_rotten.enabled or legendary.the_rotten.enabled then applyBuff( "the_rotten" ) end if talent.supercharger.enabled then addStack( "supercharged_combo_points", nil, talent.supercharger.rank ) end end, } @@ -1588,4 +1578,4 @@ spec:RegisterSetting( "allow_shadowmeld", nil, { } ) -spec:RegisterPack( "Subtlety", 20241026, [[Hekili:nZXAtUTTXFl34zOLS9PQh3RKAPpKK2oXtBMorEA)MOGOGKypksfcqFrDUr)27UGVaaxqkD2xM(f3CKl3xyFJvDXOfFEX81mjFXVmE44BgnC8DdgD7KBgD)I5YJh4lMFGf8iBl8FeZ2d)78SvYiU8i(IJrjS1icejzPbWlxmFvwyK8NJxSIcRtMCha7bEa847gTy(UW1R55WYfblMJWE9OHxp8UV)0Y5H7)XtlZoGOr8b4VJ)PtltYKxNS56GK9Rys4pJJoEAz4Mtlt5Bs5IDSvr8)8PL)nol9A21)klER6BG)bGri5Si5UtF60NuuA43D94XaL(lB2egeYJdowrpDygobOo8)oAKnxvd1dxp6wakf6CaY9xp(b4TFEh)0Y)nlf(Nq5UW4fZJcfsbQfrDhQo)f1HcpgfM1l(HfZzbYWeasq(wN8KqMg(iOSdogeX9LS0TC47HpAEqAOKNgYq95QSnBgSjmET)tC2JXCHyqkFplmwCA5hNcS6PLENw(fgaoqMbfO50YQxjzr8y5GSybNh7VkITMpOGNoT85NpT8kqif81(Bss9xZaW0)m1d83ZcyRsR(U8Z50Wd5IZpcNIjNw(ptcJHtOFaLEE6cjyCyj)1Yvj25m5ob8hpYtfavsFSM18uCMs8pasmFDOKH0Bq2bhI8mqM7Pe73FA5KtlFxXNNRUrzlGR(6(5cU6LGUNL6l3X9FkuIQxUOKcLKxCeKViHFYgFfdREFfc2eXEkc(ou)TVDMBsjAREDHPSUPrgAve7lKa6qL4eNkrf5JcJ3c)z8wq(sZTpkzVZtjhKKebQN4s1KYcrZitX4USYMLBMPrnA7mV2uLoX8ne6fqTed8jQzUb1m0(u16laUBDQbX4pj(hqdxbONWWhYcjUgZBtqDXtc)vWNH47oD6UnkbqckTwu9EDOwbbFHJGvMWirhPnSSizv0IkXP0WWaNJ1b5XWGhTEVTTsYbatCz93uQNX)ROmEHnudhKkJ7c2W8HFHfhkWNPWNFE(KsgU8C5I4cixsuuziWbw(aAePmijXHA3eXTOw5OhfgW9zqS21H2Ac07IlK(XHB3jREfTD7dL(5f(eP8daMHOxGxAHDQHRrlUogQ4hdp4NMDqMLwBhErQai646eGFYXXajybfIPwnefDYOIv65s9OZCy0cjWmGETY6)I4n3hp90csbrB3c2k5zcQtecXkgAgnJgWzq4QHg53WOq(h4qzpQSz1Nl9nu98Guo6W(lpCXcwV6efvCKV6jfb)AnjvTvKz85Zl0QY8nriuGTbnD91vAJhQlKPSGqwKV4yCakPF3flP6HtZRozuREqQZl9pbDEUp)t4B2Wb68fUFtqU7I8A2T2p4akqJgAjrwvXKB5iQfWagevk)p8XQ7YRXRaVbRvXHg5QiVvqIbOOQS0Jwe6xvQzHEEOkFpRJGrURGI8tQjoKQNNIo3k04Ugck040OSg)Bct5kbuHE7a(NlxIOfYydph10kuzhw3qZ9Zs(EWeO3NH6DEeI22VSzgzkNfSJNMKj8b8fl2hkboWmvF7rqQlKXP)cApFBn37IOOyyhAU8Bc3dHAqdBFMiGhJk2J(WjvgKMdkchCE34VnyTQlGCrRTVqRpbQO6ETe4rXL2bPl5Y9S1()wg4vHLlgR6)tJw90dkru(zvKPkp)wQrL)BzHhoWxpWH2Smbuor7gAeNvh1oGQr6G(N3bFzIUgkhuxANxO2krzRoYsdwx4q(7vEg(IOePQ1TrLcTUByrK)oJRp1qQ6MyJ10WfqmqoEqLAe0IRpA2rudg6CAKOITQtT1gNbE34)HqthIkA70swk6XxMIE8FKk6ruk6r))NIESQxJZlBjOvsa)U52nY2m3z9XczhWAPwlEMFrk2X2Pyn4K)Ai2nIkG3VMbnIF2SG7Is6O2JlPIg4lcoabk(DFOhN41gI5gfNRKq788NX8voVQuYNffsc7AaSuIrr8uC6CyNyI8jcLprUJjzGmWIvp70Y4ezUYMhj4doBLDRN3Bcvz)HV5qkpFMGnAiMD4q0ruTkW)QzxXxuHQYKTBbEztwCmpYsvm)jgCqkbf(H0WeqgapY0K8zpLRrK4O)kXj8iqDru3z5x7x(XVSg0nsCOf0yhta9hZKdyXh9xFqqhdVjuQr1qe7zDwAHiIw5uPbQHWO1OgbuEzJaymPCsjbuHq7qojLIzDPi6wmV8Hq464mu4QALozIlFmaU01FfmX9Do8kzvapIjJt0Xqrl31iv93(sEWU4qOamkp)sylhsIPN9)OEefNwMN2WShHRCofKkBoNJpr7IlkRznFMqay75(Ye)1HWBUgHSop9DubfAifNjhQ)YgrFCYr1tn)D2jVYfddjZZ5uGx08Imiceu3Dml4rGqpPsLzCm9tqVLbqIUFITh6BP7tkArT6171p1DZ(gLDrotFxLmqfiiOXn4W(VqBl6TqVouCGjd2v5cx(c(xcHo9svDDz5aHfe1Y9kfaHW8ZBl35Sni6i22ZQ95sro0M7mvT1JlZ9amuyxXSrzcz3fBFA5KHMx7sZMAR0ehsCLX1O5a6bNzuG)K2TMAF4EMdWZyYdgDj31ulNMl8xJ9HQ8tV6mgGPrNc2hXgY4d2CAltfT7wIqwSVwCBl1lvubIW)oDBZNNx7gOUU4qnUsV1P29GBsfJoTmiiuBSqIbb5mdYP9CQu2bK3iv(b)TDRXhRnvkDlO8Gg6Dt15LsNlH2LeREfgrgEh0KW)sDbqy3cQxSNdTyqMcV(OY556zAIo(gd3n3(S29Oz4ycw0c4GOb02w1TAEpS94A8yE62JfxG5qdRdr2kaOnzB5D1P5hnVcY8BCR9Wze09SUEtr9zyrrAqZyTyNWsHMbXYhstHqfwwkFEh2ne2Ah2Uyg0t4rKnIL56pTPg8uOCh0njh6dlqMxBr4(dmmXVChUtibmOFtaWTrjRyr1gkIMcTPSHXFEp2sM6vP8T84QtmlH4qg0eRv3Kt0Hlcp)f()NS1B3RKwdqnUa6vSTO5iuDCWJc7m3Wx(f02daSCtAGcMEILgdfqkq9wU8NKklgOYBlUz43IfG9Bzqnrq0xrYEaowMmzpuEa8GGDS4TCXGtF6VhgdV62VhvYXaTuV(TUVaY3M3JBlqug0hGS3OFVFx0q)EySqo1v0yJ17PXQDMilm7krLn2FGg7gzbSqn51TzJ3V7vrxmYHYO5C0TqU7PX3njkBd0XmZ1gsPkyyjLp3HT)2As34WOG02JCUs4Cnt6gc13omxJZghXfFJ9CBBGtcam52VDyEaUEAeXqQgN2LffzItgZEoleSgbigITlK3CupeNsVuKtmFN20QAW8QI(ormXGRAZ29s57xk6Rq8nVMhMUq(3eZq3C(ltL8kJ(or8l1e8m57xk6Dx1qfIDp1rck0kWgsYDopbUac2bWfeKm2l0U1xzu3Mtn4TMP7PgOqNU(FtRR61c7KAu1DzDz60rVo1N5qQ13vABrMApQTX74w0MglWlL(KCdFVKZRxvk8I14N(0pRmcqKDpCwR62kVft8ygVNTeOLvEzJyIbvf98(P)j9Bn80NEZPLFn3U3PprrIsq)aE7itBmm6pOUZLPg3445GOIqq13YsbIg9HWntDNj0R3vUZb)8ZTeoF20wYr1)RHLhRZYn5knwUP8uZYeC1SweNVko2sj7ohWxdrSulxkr0(vWubG(JRFeUO46)Tj7v8bfmf1ivF(58NwTl4fpOApWDJ8I7yPa5TTM3TWGA3ZvRC5v5p2ElLl4w7RT55NTVjOztFW7k3ZdXJiELBUwBoNfmDpI7ouJj0fZ(E0Islkj10tBv90RYhH6wg(4nd9AfGzJh65i)DF38L2EFwQgCEFjEu8DF4CLAImE0ZbwDCNieEgtU9JJh2IQtnL6cUtFKPFC6ih2oE6GnB69p)m9GCNn9oARM3GjjZv2cDoZElAY5qOus1NuS5W6Fq9wgJrtQmM03MxDORwl4Zb6QL81fWKhy6yWCbFDtZ38MYm74xfg)LKh5(8FhI9fdWGuPi7AYt8u)W4nz4Our8rZba6ASRW68fUQTHaaLbOjd7IOVDxMPJjn2Mo6wBrADIVdQaHdfp6ssCJExYI71f(dA7xCEcoI4rEUVmtNKS5cXIiV3voNjzHtf5wbdEsDSJV9H6f6cM6Qgo3Xzcr36FjABXhuRmzz(BL(SxDcf7u(th51t)aUAHoPPPIzAdDJnQZZCAGExrsP6O7KRnkQaWyTUjkPhKLEyCx6HXFB1dJmkE8pm9GvaCJvGT7W5AxilQUQjvvTBVPCRxQxR1UrB(2vPWiDslN5OoNSCt1xJ1c5NyTu7MnvDXxiIVSLoTBAG3HPdv7zW6duSiwlDEHFsSm1pySDtfbqB5xNny86zxGj8iIQbaJnZF)1EuZmGI70RFw1mHRM1lCfSxhIgm4SP9g)(jVZrDyQht)7LU0xJSCSIukgBufbPN4rCC5uOl(DaxL50r2e3QKocdmDsZZVzycFItqN1IsGHBA3mR5Bn(5hNxtsZB1hyxIVS6NMCZ3v(dsUrSSkiHOtO)vs5kLzuoeXkJrwmOND1W1NWkmytU892Q6qvF9WiZqmzyT9L7swkqU9bKkxf9rxLt8KAowRJop3nXu3UI(BF(527TA6KHxp623DLJgS8CR4R40hQPCJ(ZCvzt)gQiDFbJ611L(6drvRt0N80HCSjO2IrrxeCvA5ceAUHv2Otx5A7RmB6ToQY42cVG)i2ELAogtsH9izSpnitBUulZGZP3RVmlUWGAzwA8sRnyPX7nwBfTrjniVCc0MWYKZWSO0ng0EKRxnb(khLJz(zTPFa10roQeTfrUVxZvz(6stL7AHOezXDWe1pUXmD9iOoM68D6MB9904xQujkLMRLDMqe0xzAt(Ujd2UBBnpu4u1i7mDfKemvqs2biMP)wOFEUEnrf77mXNuVFZfUDNX6fwJgTINRJxPcvyAxMhzIupCgbthFJx7zgQRAUTfmeGQm2lza4HUKR8rRwhmaQByyznw6lrOJA6)OE5auAmuNAHDhLvSyoltUljDXC8))qsTkBl(F]] ) +spec:RegisterPack( "Subtlety", 20241101, [[Hekili:nZ16tUTTr8)wUXZqFY2NQECVsQ19HK02jEAZ0jYt73efefKe7rrYqa6lQZn6V9Ul4laWfKsNpNPF5IfjWID)Hf7lSmlgV4ZlMVMj5l(LjJMC94XJgpC80j3n97wmxEiLVyEkl4r2w4FeZ2d)DE(kzexEaFXHOe2AKaIK8Sa4LlMVkpms(ZXlwrt17HXMYdGhF74fZ3fUEnVySCrWI54yVA8ORgD73FC58W9)4XL5PizeFa(D8pDCzsU8QKnxfKSFftc)mo6WXLHBoUmJVjJl2XwfX)Zhx(34SSRyx9RS4TQ5a)bgJqYzrYDh)0XpPwPrF3vtMaR0FzZMWGqECWH61tFmJMcRo8Fhp2MRAg19xn(gyukY5yi3D1K7H3(5D8Jl)3Sm4pHYDHXlMhfkKcefrSdHZFrTPWJrHz9IFyXCwGmmbgjiFRtEsiZcFea7GdbrCFjlBlhMpmP5bzHsEwidXZv5B2mCty8A)N4ShJ5cXWm(EwyS44Ypody1Jl9oUeP8x4(8y((qGzxw)cjlIhlhMhl48y)vrS18HLC0XLp)8XLxaIOGV2FtsM)Agmm10UOEMPWQXxhkziRxn1In6SW0c55hHTXKJl)NjHXWw0pGIppBHe0oSaGgbRK6R5m5ob8Jh5zc)9SShB4Uc2qj)MmrEkPm)ai0xQK73FC50JlFx5KlqBu4c4Q5oOqYvVeGEwMVCh3)PqjIUCrf9RwCXbq6Ie(jB8vSR691eyte7PiyEiaUVlwBAfr)cdqaqehwQhRRxKJQeX(cjqmeaN6eavlEuy8w4NXBbPlRq5OI5onaoijjcaN4kqsPGOPHPyCAvShk0X0wlALmVUGrh09AcmbGKyGhru5AevOpm1GvW4UXj6HgEs8trfwbGrODdzP02q5Tjio8KWFfmnKE3QVUBJsaIGYQ1QEN(OwbwDb4FL5yK4bOnS8izTzIAXPsPWGMt0hYJHbpA9EB9KKuGsCzZCQu6W)vuoVu)P1rJA16s2W8HFHfhkWNPONFHJKkgUAF5vIlQp9ffgW9zG9V1H2mjQ0Zfs)4WT7K1VIsH6ElRAz8uGUG5e4OtPcKHgBhA0gY(JHP(z5PY8moLcx)aayWADcWpf0yOe2AdrNDOG0yOqBzuMV8Cbo6mhEewcmdGQ1kVNfV5EZ5snlhGbWT8OOctZnUMGdXJmnXqpWhaRiJ0XCLXb)uoeisQUphqWnGEEqgxwFE7SeSlBSDxZr(QNuAtQt)gnArMgnpnlEkL3eHqnSnOIRVoOnzKUqMXcczr(IdXbOKE)zlP625kIxyCNNFu7x6tbp8CxXu4B2WloA1Ei3EwNA2T2piffOVZsGSIQOqXr0iFbSOi)IF4JHBve0vjzdwlqAoEKJOUwbgSH4CYZoyTq)QcLf6(hQp6zTdm2oKUEMsZIdUF5z4zBfzChyefzCQt2q)nHzCLaQiV7Wg6MlrYcEsHNJiTIu220nqUFwY3dAax(zigKhHOxhuLDHmJZc2XZsYf(a9If7dLahy6cUBdinHx484cQoFtd37ArrXW2YC1Cc3dwAq9AFMiGhJa7bFyNkF)I5qCXWz3n(BdwRclVq06AgAbUtzu3Rd7okU02gDfxUNT2)3YHdvyiCXQeY0wRl1TjresixpE)(IBK)B5HPP81dDGMv(Fkw0(hnsZ6TAhJQL3GbN2gFLFUwGdIL2UfA0su6QJTqW6dgLVxDYWxeLivztnUsO1pgwA4VxZ6ZmKQ(xSjAiC5igkNmSggbuC9bZCuAXqNsW91SvJNTU4m40n(peAyic02ELSa6jNhqp5psGEmfqp())a6jkG(08wcOscCUBUDYLT9D2STqMvQMR1YN5x6IDITlwdo5VgIzjOm49R5qQXNml4oMKEc94CcObMrqkyO439fPG1BdXCJIZvsOTF(tOEhNwukffhcxc7yaSaXOiEgwUSuWtHOOinfLi7qsoidSy1ZoUmorwa28ibF4jd2DUFVju59hMtAgVOiDTsuLLMgDaHvb(R2zREwXPkt2Uf4Ln5XX8ilOy(tmyJucaEAwycidWjYSKIAbvGisSwCv0eEeaxeHDwnB)Qj)YsC2WXHMrJDmHpKPVCil(G)6ubTn82JsvafcBpRZZkfrulNYnqZimYmQLbLxwQ5tiLtkjGYeApYjPu8qFar)I55NaURTZqHROv6Ljo)mTDH1FfmXD9wujzTbpIsvtKXqzg3nev9BFjpyxCieag1j)QXwvJeZt2)JMkuCCzHBdZCeUWzrqQ15Cw9eTBsOkM1IASddBp3xM4VoeEZv4iB8tFlLrHwsXjYH6VSL1hNCutDSFNTZRcXWqY8Cuz2fTVxbcZan5gZcEewMNuoYm2K(jiZYaWn3pX2dzT0)(eTGw)69675UyEJqUiRWURWfOmce066uy)xiLf90N5FjesMlJruNxTxzF8bdhQJR5jamG5xKuUZkBqKpS95QUlkfzfBU1eZBQvM76oOOUIzJYfY(d1(4YPJmVgK2P0wJePjU83AKAaDvZmcVFA3At9wzp3OSUODVDL(mQrr78PnwUuEMiuuh(zV3axFfiDwbuFfMZRYMWfNqTsF5IAh1FT)SVqoCGMlcR9sktqeEAS3vBuKvvoS7tdUUZqnUsplTUny0EvmsQZybHWWfs0IlNzSCApNk6GaYlLQyF)M(r8jAfatxbQWcLEIB9EH0fsOD03QxHM)H3b5J8Vu3beMyI6f75q2mKrl0Sv5CF9u0qrr8AJZ2UnqyNoi5Xs7rFkA1J622j48kB7HYRUCKHsHiFfmOn5B59Ll7hnV8XI7ARBtMeR7jDXMIMTUYWaH096q9GLbPBIbOKLbwiSuq(8omFlm5rmH0CiRZdiBellWpT6s8uOChKVkhY0lqwe9s4(uggCHCh2gibmiJwyGBJswXIA0peTfAtzdn78EmPp1RY4B5X17ywcrAoKMSv(Qt1hxeU)l8)p5R3UxjTgd14QNxX2IAHq83bpkSJoaM5xqvoyGfnpZOj3UaYLnlgcrvG4wH8NKjllzZBlVt43IH49B5qCxGrxrYEyCSCzYEiee4bb7yXB5IHh)0FpmgE11FpcYXWAPE9BDFdNVTil6ogrLTEyKxo(3h03AO7tZI4uU7SP6T0u12bKfLD5FYM63rtDdJ)wKM8(8SP79FtWIXoaJ2vQ3I4UR3F)lrvIMoQkVwzqvgdRw5tTC(VTzPBTzuU02f1Uw4Cv17wc1RhLBOzRT4Y5yxz4w0KyaMC7RhLhIDKgHnK6c2DEwrM6KXSRKdbRrmedX2fXBxmjIDPxkXjQGuxOQ2y(Ms(EjmrPX6s39C57xk5D7l41CZ0fXFvudDZ5Vmi5Bm57LWVuvWtKVFPKVMW34KWURRjXk05G7oGI6DGZyb7zWLliPTxilRVsRUTR2WBnD3tviIEp6)QeHIdQ(kfT23kQtUpPUdUZBNA83em1bvnkDHfzj7hBB6oPd00OzGPWtYUf(C2V(MUcVye)4N(zLsasS7kQ7mwBAvx7dVgVFWeiryEv6DIH1Hs9(z)j9B784NEZXLFn3k5XprTevd9d4T6mRvz0)G6UIMzCtPNcHknS1C7qLeA8hc3mZT)vVlVWTN9NFUdNepmRdpFd(Ay5j6SCBUsJLBlpnSmbx9qhIZxfhBbYU9S81SiwWY5UiAFon1dq)XnpcB8C9FBYELtOKPOQp7Zpx806ElV8b19vEhex7U16CfUO4X2ngD5kzFDrp)S59p9WS79Uq6S(iEewACZZAL7SKLVK42kF(zYlqCGhTG0bePkIANGZL1A3u31WhVEKxNd4HjJ8C45DGB(sRttRGbN3rJhfFpa2vPQqJhD5GvB2jcHNrLC)4KrDaDQIvxYD6Lq9JZg7qZXtFypm7UNFMUWUpm7wATM3GU3kaBHoNz33ofCieAPAkL9QS(eA6Rz0oqTYKE)dRp66gr(ugDDBf7AWKBy6uWSLIDVMV5nv(KXzfg)LKhHtL)oy1kggdUkL(ftEIN5hgVjhlTkspAoaixRUtwNVWM7negqLPvsdMi57(iZSjKkBZgFJTiToX3XQ4lzIhDjjUjVlzXDdk)bToAUW1eH9ip3xGQZLSDl4Ie)YlCwJYYdvK9HmCsQNUkEa4PVVX04V)ulVjyDBW5G2IpOAsZkpVk88YAL7woRNn27s9n46wiLEnvmtxKBIreAMvh07cYvQX6ozJQIaaAR19IsEcYchM0hom51fhgBe23Fy4GLbCJMUTFZ5A3llcxnlvDuxVPQtBAAK2(jBr)CPOiTtlN(OofVCZ0BC2s5NOry7Nnv5FxkIVS2CT)1aVtthq7jW6dvSigfCrGFs8Rl9dgDuvPb0o(aTbLxpZWlHhqelaOQz(jyxhcQrY(umN(3lSklaxzzxEsWUPi8Sd)9YjVF67CeeM6X0FW0vh0iJfR0FIrtC1AHN6rSt5uGl)yGRDA6WrIB4OhlaZMAV19a6PNyZZzqOTM)1DRD1(TgF)XfHI0(Y9bwLyM1FBYTFx1xKClty1JemkHhRsQ6EnJOGi6onYya9Sdc2QB0SxUIweREdvVt0iDmmDuJML7ivkjU92JYff9gx9z3PEu9TIxh5U4gJQi69nzYOtbkjPPlYOnz0DIAZMo6QX38UlCKT25XQTY1ZvusdAH76hUmI9xhsT6ziA1jA7x2lOwVwrhqDTl(scA20w2KthBTpa(WSBCeXYnLhT(JOZyA4y0HhMVLrV6GmTzdZ8aSp9E9gLXffunktRxA1DmTEVrlXOvqPHfHMG6ewACgQfv2ga0JS5WjOxvrHm91Rvjfi(qYYUO1g1d8A3i2xvPQCBhlkreboyIMh3QYUelo6i(D6ABd80y32UMuiMRo1MG)173BtMUn3rEMTfhuEEQLFE6arjyPGK8uWgS)2mwaxp0QYM1MyknTMD5jUtOzfBiJwm4nMQuwjmvjlmkrIc9BgD2KR962tttW3D1UIWOCz2DKlrQOSQnMaGqqgvfOMEBj6iRGpQhzbfyHWPf1DeHYI5SC5UKSfZX)NQKQ54w8)c]] )