Skip to main content

wowlab_engine_content/generated/specs/
assassination_rogue.rs

1//! @generated by codegen-cli from manifests/specs/rogue/assassination/manifest.toml -- do not edit by hand.
2// Generated code: naming follows game data conventions
3#![allow(non_snake_case, dead_code)]
4use wowlab_types::{combat::ResourceType, game::SpecId};
5use wowlab_engine_combat::{
6    CombatSystemBuilder, CombatSystemDraft, AuraDefinitionDraft, LocalAuraIdx,
7    LocalSpellIdx, SpellDefinitionDraft,
8};
9use wowlab_engine_ports::{
10    DeclaredSpecMetadata, SpecDescriptor, SpecHandler, HeroTalentTreeDesc,
11};
12use wowlab_engine_gamedata::ResolvedGameData;
13pub(crate) mod SPELL {
14    ///<https://wowlab.gg/inspect/spell/1329>
15    pub(crate) const MUTILATE: u32 = 1329;
16    ///<https://wowlab.gg/inspect/spell/8676>
17    pub(crate) const AMBUSH: u32 = 8676;
18    ///<https://wowlab.gg/inspect/spell/32645>
19    pub(crate) const ENVENOM: u32 = 32645;
20    ///<https://wowlab.gg/inspect/spell/315496>
21    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
22    ///<https://wowlab.gg/inspect/spell/51723>
23    pub(crate) const FAN_OF_KNIVES: u32 = 51723;
24    ///<https://wowlab.gg/inspect/spell/1247227>
25    pub(crate) const CRIMSON_TEMPEST: u32 = 1_247_227;
26    ///<https://wowlab.gg/inspect/spell/185565>
27    pub(crate) const POISONED_KNIFE: u32 = 185_565;
28    ///<https://wowlab.gg/inspect/spell/2823>
29    pub(crate) const DEADLY_POISON: u32 = 2823;
30    ///<https://wowlab.gg/inspect/spell/381664>
31    pub(crate) const AMPLIFYING_POISON: u32 = 381_664;
32    ///<https://wowlab.gg/inspect/spell/315584>
33    pub(crate) const INSTANT_POISON: u32 = 315_584;
34    ///<https://wowlab.gg/inspect/spell/8679>
35    pub(crate) const WOUND_POISON: u32 = 8679;
36    ///<https://wowlab.gg/inspect/spell/381637>
37    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
38    ///<https://wowlab.gg/inspect/spell/5761>
39    pub(crate) const NUMBING_POISON: u32 = 5761;
40    ///<https://wowlab.gg/inspect/spell/3408>
41    pub(crate) const CRIPPLING_POISON: u32 = 3408;
42    ///<https://wowlab.gg/inspect/spell/5374>
43    pub(crate) const MUTILATE_MH: u32 = 5374;
44    ///<https://wowlab.gg/inspect/spell/27576>
45    pub(crate) const MUTILATE_OH: u32 = 27576;
46    ///<https://wowlab.gg/inspect/spell/113780>
47    pub(crate) const DEADLY_POISON_INSTANT: u32 = 113_780;
48    ///<https://wowlab.gg/inspect/spell/394021>
49    pub(crate) const MUTILATED_FLESH: u32 = 394_021;
50    ///<https://wowlab.gg/inspect/spell/703>
51    pub(crate) const GARROTE: u32 = 703;
52    ///<https://wowlab.gg/inspect/spell/1943>
53    pub(crate) const RUPTURE: u32 = 1943;
54    ///<https://wowlab.gg/inspect/spell/381628>
55    pub(crate) const INTERNAL_BLEEDING_DRIVER: u32 = 381_628;
56    ///<https://wowlab.gg/inspect/spell/360194>
57    pub(crate) const DEATHMARK: u32 = 360_194;
58    ///<https://wowlab.gg/inspect/spell/385627>
59    pub(crate) const KINGSBANE: u32 = 385_627;
60    ///<https://wowlab.gg/inspect/spell/1265794>
61    pub(crate) const IMPLACABLE_STRIKES_NATURE: u32 = 1_265_794;
62    ///<https://wowlab.gg/inspect/spell/1265795>
63    pub(crate) const IMPLACABLE_STRIKES_PHYSICAL: u32 = 1_265_795;
64    ///<https://wowlab.gg/inspect/spell/381623>
65    pub(crate) const THISTLE_TEA: u32 = 381_623;
66    ///<https://wowlab.gg/inspect/spell/1856>
67    pub(crate) const VANISH: u32 = 1856;
68}
69pub(crate) mod AURA {
70    ///<https://wowlab.gg/inspect/spell/1784>
71    pub(crate) const STEALTH: u32 = 1784;
72    ///<https://wowlab.gg/inspect/spell/1856>
73    pub(crate) const VANISH: u32 = 1856;
74    ///<https://wowlab.gg/inspect/spell/2823>
75    pub(crate) const DEADLY_POISON: u32 = 2823;
76    ///<https://wowlab.gg/inspect/spell/381664>
77    pub(crate) const AMPLIFYING_POISON: u32 = 381_664;
78    ///<https://wowlab.gg/inspect/spell/315584>
79    pub(crate) const INSTANT_POISON: u32 = 315_584;
80    ///<https://wowlab.gg/inspect/spell/8679>
81    pub(crate) const WOUND_POISON: u32 = 8679;
82    ///<https://wowlab.gg/inspect/spell/381637>
83    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
84    ///<https://wowlab.gg/inspect/spell/5761>
85    pub(crate) const NUMBING_POISON: u32 = 5761;
86    ///<https://wowlab.gg/inspect/spell/3408>
87    pub(crate) const CRIPPLING_POISON: u32 = 3408;
88    ///<https://wowlab.gg/inspect/spell/2818>
89    pub(crate) const DEADLY_POISON_DOT: u32 = 2818;
90    ///<https://wowlab.gg/inspect/spell/383414>
91    pub(crate) const AMPLIFYING_POISON_DEBUFF: u32 = 383_414;
92    ///<https://wowlab.gg/inspect/spell/32645>
93    pub(crate) const ENVENOM: u32 = 32645;
94    ///<https://wowlab.gg/inspect/spell/315496>
95    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
96    ///<https://wowlab.gg/inspect/spell/121153>
97    pub(crate) const BLINDSIDE: u32 = 121_153;
98    ///<https://wowlab.gg/inspect/spell/193538>
99    pub(crate) const ALACRITY: u32 = 193_538;
100    ///<https://wowlab.gg/inspect/spell/457280>
101    pub(crate) const DARKEST_NIGHT: u32 = 457_280;
102    ///<https://wowlab.gg/inspect/spell/193531>
103    pub(crate) const DEEPER_STRATAGEM: u32 = 193_531;
104    ///<https://wowlab.gg/inspect/spell/457512>
105    pub(crate) const SANGUINE_STRATAGEM: u32 = 457_512;
106    ///<https://wowlab.gg/inspect/spell/381801>
107    pub(crate) const DRAGON_TEMPERED_BLADES: u32 = 381_801;
108    ///<https://wowlab.gg/inspect/spell/1250036>
109    pub(crate) const INSPIRING_STRIKE: u32 = 1_250_036;
110    ///<https://wowlab.gg/inspect/spell/1250331>
111    pub(crate) const REGICIDES_REWARD: u32 = 1_250_331;
112    ///<https://wowlab.gg/inspect/spell/703>
113    pub(crate) const GARROTE: u32 = 703;
114    ///<https://wowlab.gg/inspect/spell/1943>
115    pub(crate) const RUPTURE: u32 = 1943;
116    ///<https://wowlab.gg/inspect/spell/381628>
117    pub(crate) const INTERNAL_BLEEDING: u32 = 381_628;
118    ///<https://wowlab.gg/inspect/spell/381632>
119    pub(crate) const IMPROVED_GARROTE: u32 = 381_632;
120    ///<https://wowlab.gg/inspect/spell/392401>
121    pub(crate) const IMPROVED_GARROTE_WINDOW: u32 = 392_401;
122    ///<https://wowlab.gg/inspect/spell/360194>
123    pub(crate) const DEATHMARK: u32 = 360_194;
124    ///<https://wowlab.gg/inspect/spell/385627>
125    pub(crate) const KINGSBANE: u32 = 385_627;
126    ///<https://wowlab.gg/inspect/spell/394095>
127    pub(crate) const KINGSBANE_RAMP: u32 = 394_095;
128    ///<https://wowlab.gg/inspect/spell/1249810>
129    pub(crate) const FINISH_THE_JOB: u32 = 1_249_810;
130    ///<https://wowlab.gg/inspect/spell/1265386>
131    pub(crate) const IMPLACABLE_TRACKER: u32 = 1_265_386;
132    ///<https://wowlab.gg/inspect/spell/1265387>
133    pub(crate) const IMPLACABLE_REGEN: u32 = 1_265_387;
134    ///<https://wowlab.gg/inspect/spell/1265385>
135    pub(crate) const IMPLACABLE_BONUS: u32 = 1_265_385;
136    ///<https://wowlab.gg/inspect/spell/134735>
137    pub(crate) const PVP_RULES_ENABLED_HARDCODED: u32 = 134_735;
138    ///<https://wowlab.gg/inspect/spell/452923>
139    pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
140    ///<https://wowlab.gg/inspect/spell/452917>
141    pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
142    ///<https://wowlab.gg/inspect/spell/1248971>
143    pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
144    ///<https://wowlab.gg/inspect/spell/1249093>
145    pub(crate) const LUCKY_COIN_COUNTER: u32 = 1_249_093;
146}
147pub(crate) mod TALENT {
148    ///<https://wowlab.gg/inspect/spell/193539>
149    pub(crate) const ALACRITY: u32 = 193_539;
150    ///<https://wowlab.gg/inspect/spell/381664>
151    pub(crate) const AMPLIFYING_POISON: u32 = 381_664;
152    ///<https://wowlab.gg/inspect/spell/328085>
153    pub(crate) const BLINDSIDE: u32 = 328_085;
154    ///<https://wowlab.gg/inspect/spell/1247227>
155    pub(crate) const CRIMSON_TEMPEST: u32 = 1_247_227;
156    ///<https://wowlab.gg/inspect/spell/381797>
157    pub(crate) const DASHING_SCOUNDREL: u32 = 381_797;
158    ///<https://wowlab.gg/inspect/spell/2823>
159    pub(crate) const DEADLY_POISON: u32 = 2823;
160    ///<https://wowlab.gg/inspect/spell/360194>
161    pub(crate) const DEATHMARK: u32 = 360_194;
162    ///<https://wowlab.gg/inspect/spell/193531>
163    pub(crate) const DEEPER_STRATAGEM: u32 = 193_531;
164    ///<https://wowlab.gg/inspect/spell/381673>
165    pub(crate) const DOOMBLADE: u32 = 381_673;
166    ///<https://wowlab.gg/inspect/spell/381801>
167    pub(crate) const DRAGON_TEMPERED_BLADES: u32 = 381_801;
168    ///<https://wowlab.gg/inspect/spell/1249809>
169    pub(crate) const FINISH_THE_JOB: u32 = 1_249_809;
170    ///<https://wowlab.gg/inspect/spell/1265385>
171    pub(crate) const IMPLACABLE_1: u32 = 1_265_385;
172    ///<https://wowlab.gg/inspect/spell/1265386>
173    pub(crate) const IMPLACABLE_2: u32 = 1_265_386;
174    ///<https://wowlab.gg/inspect/spell/1265387>
175    pub(crate) const IMPLACABLE_3: u32 = 1_265_387;
176    ///<https://wowlab.gg/inspect/spell/381632>
177    pub(crate) const IMPROVED_GARROTE: u32 = 381_632;
178    ///<https://wowlab.gg/inspect/spell/381624>
179    pub(crate) const IMPROVED_POISONS: u32 = 381_624;
180    ///<https://wowlab.gg/inspect/spell/1250036>
181    pub(crate) const INSPIRING_STRIKE: u32 = 1_250_036;
182    ///<https://wowlab.gg/inspect/spell/381627>
183    pub(crate) const INTERNAL_BLEEDING: u32 = 381_627;
184    ///<https://wowlab.gg/inspect/spell/385627>
185    pub(crate) const KINGSBANE: u32 = 385_627;
186    ///<https://wowlab.gg/inspect/spell/382238>
187    pub(crate) const LETHALITY: u32 = 382_238;
188    ///<https://wowlab.gg/inspect/spell/381640>
189    pub(crate) const LETHAL_DOSE: u32 = 381_640;
190    ///<https://wowlab.gg/inspect/spell/455072>
191    pub(crate) const RAPID_INJECTION: u32 = 455_072;
192    ///<https://wowlab.gg/inspect/spell/1250325>
193    pub(crate) const REGICIDES_REWARD: u32 = 1_250_325;
194    ///<https://wowlab.gg/inspect/spell/457512>
195    pub(crate) const SANGUINE_STRATAGEM: u32 = 457_512;
196    ///<https://wowlab.gg/inspect/spell/14190>
197    pub(crate) const SEAL_FATE: u32 = 14190;
198    ///<https://wowlab.gg/inspect/spell/381652>
199    pub(crate) const SYSTEMIC_FAILURE: u32 = 381_652;
200    ///<https://wowlab.gg/inspect/spell/469779>
201    pub(crate) const THISTLE_TEA: u32 = 469_779;
202    ///<https://wowlab.gg/inspect/spell/79134>
203    pub(crate) const VENOMOUS_WOUNDS: u32 = 79134;
204    ///<https://wowlab.gg/inspect/spell/381798>
205    pub(crate) const ZOLDYCK_RECIPE: u32 = 381_798;
206}
207pub(crate) mod SET_BONUS {
208    ///<https://wowlab.gg/inspect/spell/1296590>
209    pub(crate) const MID2_ASSASSINATION_2PC: u32 = 1_296_590;
210    ///<https://wowlab.gg/inspect/spell/1296591>
211    pub(crate) const MID2_ASSASSINATION_4PC: u32 = 1_296_591;
212}
213pub(crate) mod REPORTED_SPELL {
214    ///<https://wowlab.gg/inspect/spell/383414>
215    pub(crate) const AMPLIFYING_POISON: u32 = 383_414;
216    ///<https://wowlab.gg/inspect/spell/2818>
217    pub(crate) const DEADLY_POISON_DOT: u32 = 2818;
218    ///<https://wowlab.gg/inspect/spell/8680>
219    pub(crate) const WOUND_POISON_DAMAGE: u32 = 8680;
220}
221pub(crate) mod HERO {
222    pub(crate) mod FATEBOUND {
223        pub(crate) mod SPELL {
224            ///<https://wowlab.gg/inspect/spell/1276816>
225            pub(crate) const CONTROLLED_CHAOS: u32 = 1_276_816;
226            ///<https://wowlab.gg/inspect/spell/454419>
227            pub(crate) const DEAL_FATE: u32 = 454_419;
228            ///<https://wowlab.gg/inspect/spell/1249194>
229            pub(crate) const DELIVERED_DOOM_TALENT: u32 = 1_249_194;
230            ///<https://wowlab.gg/inspect/spell/453457>
231            pub(crate) const EDGE_CASE: u32 = 453_457;
232            ///<https://wowlab.gg/inspect/spell/452538>
233            pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_538;
234            ///<https://wowlab.gg/inspect/spell/452536>
235            pub(crate) const HAND_OF_FATE: u32 = 452_536;
236            ///<https://wowlab.gg/inspect/spell/1248970>
237            pub(crate) const LUCKY_COIN: u32 = 1_248_970;
238            ///<https://wowlab.gg/inspect/spell/453428>
239            pub(crate) const MEAN_STREAK: u32 = 453_428;
240            ///<https://wowlab.gg/inspect/spell/1249190>
241            pub(crate) const OVERFLOWING_PURSE: u32 = 1_249_190;
242            ///<https://wowlab.gg/inspect/spell/1276809>
243            pub(crate) const RAVENHOLDT_MINT: u32 = 1_276_809;
244            ///<https://wowlab.gg/inspect/spell/1249204>
245            pub(crate) const RUSH_TO_THE_INEVITABLE: u32 = 1_249_204;
246        }
247        pub(crate) mod AURA {
248            ///<https://wowlab.gg/inspect/spell/452923>
249            pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
250            ///<https://wowlab.gg/inspect/spell/452917>
251            pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
252            ///<https://wowlab.gg/inspect/spell/1248971>
253            pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
254        }
255    }
256}
257static HERO_TREE_FATEBOUND_SPELLS: &[(&str, u32)] = &[
258    ("CONTROLLED_CHAOS", 1_276_816),
259    ("DEAL_FATE", 454_419),
260    ("DELIVERED_DOOM_TALENT", 1_249_194),
261    ("EDGE_CASE", 453_457),
262    ("FATEBOUND_COIN_TAILS", 452_538),
263    ("HAND_OF_FATE", 452_536),
264    ("LUCKY_COIN", 1_248_970),
265    ("MEAN_STREAK", 453_428),
266    ("OVERFLOWING_PURSE", 1_249_190),
267    ("RAVENHOLDT_MINT", 1_276_809),
268    ("RUSH_TO_THE_INEVITABLE", 1_249_204),
269];
270static HERO_TREE_FATEBOUND_AURAS: &[(&str, u32)] = &[
271    ("FATEBOUND_COIN_HEADS", 452_923),
272    ("FATEBOUND_COIN_TAILS", 452_917),
273    ("FATEBOUND_LUCKY_COIN", 1_248_971),
274];
275pub(crate) mod DAMAGE_SPELL {
276    pub(crate) const MUTILATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1329;
277    pub(crate) const AMBUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_8676;
278    pub(crate) const ENVENOM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_32645;
279    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_315496;
280    pub(crate) const FAN_OF_KNIVES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_51723;
281    pub(crate) const CRIMSON_TEMPEST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1247227;
282    pub(crate) const POISONED_KNIFE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_185565;
283    pub(crate) const DEADLY_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_2823;
284    pub(crate) const AMPLIFYING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381664;
285    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_315584;
286    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_8679;
287    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381637;
288    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_5761;
289    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_3408;
290    pub(crate) const MUTILATE_MH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_5374;
291    pub(crate) const MUTILATE_OH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_27576;
292    pub(crate) const DEADLY_POISON_INSTANT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_113780;
293    pub(crate) const MUTILATED_FLESH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_394021;
294    pub(crate) const GARROTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_703;
295    pub(crate) const RUPTURE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1943;
296    pub(crate) const INTERNAL_BLEEDING_DRIVER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381628;
297    pub(crate) const DEATHMARK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_360194;
298    pub(crate) const KINGSBANE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_385627;
299    pub(crate) const IMPLACABLE_STRIKES_NATURE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265794;
300    pub(crate) const IMPLACABLE_STRIKES_PHYSICAL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265795;
301    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381623;
302    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1856;
303    pub(crate) const CONTROLLED_CHAOS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1276816;
304    pub(crate) const DEAL_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_454419;
305    pub(crate) const DELIVERED_DOOM_TALENT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249194;
306    pub(crate) const EDGE_CASE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_453457;
307    pub(crate) const FATEBOUND_COIN_TAILS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_452538;
308    pub(crate) const HAND_OF_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_452536;
309    pub(crate) const LUCKY_COIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1248970;
310    pub(crate) const MEAN_STREAK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_453428;
311    pub(crate) const OVERFLOWING_PURSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249190;
312    pub(crate) const RAVENHOLDT_MINT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1276809;
313    pub(crate) const RUSH_TO_THE_INEVITABLE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249204;
314}
315pub(crate) mod DAMAGE_AURA {
316    pub(crate) const STEALTH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1784;
317    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1856;
318    pub(crate) const DEADLY_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_2823;
319    pub(crate) const AMPLIFYING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381664;
320    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_315584;
321    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_8679;
322    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381637;
323    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_5761;
324    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_3408;
325    pub(crate) const DEADLY_POISON_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_2818;
326    pub(crate) const AMPLIFYING_POISON_DEBUFF: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_383414;
327    pub(crate) const ENVENOM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_32645;
328    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_315496;
329    pub(crate) const BLINDSIDE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_121153;
330    pub(crate) const ALACRITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_193538;
331    pub(crate) const DARKEST_NIGHT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_457280;
332    pub(crate) const DEEPER_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_193531;
333    pub(crate) const SANGUINE_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_457512;
334    pub(crate) const DRAGON_TEMPERED_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381801;
335    pub(crate) const INSPIRING_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1250036;
336    pub(crate) const REGICIDES_REWARD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1250331;
337    pub(crate) const GARROTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_703;
338    pub(crate) const RUPTURE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1943;
339    pub(crate) const INTERNAL_BLEEDING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381628;
340    pub(crate) const IMPROVED_GARROTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381632;
341    pub(crate) const IMPROVED_GARROTE_WINDOW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_392401;
342    pub(crate) const DEATHMARK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_360194;
343    pub(crate) const KINGSBANE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_385627;
344    pub(crate) const KINGSBANE_RAMP: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_394095;
345    pub(crate) const FINISH_THE_JOB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249810;
346    pub(crate) const IMPLACABLE_TRACKER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265386;
347    pub(crate) const IMPLACABLE_REGEN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265387;
348    pub(crate) const IMPLACABLE_BONUS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265385;
349    pub(crate) const PVP_RULES_ENABLED_HARDCODED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_134735;
350    pub(crate) const FATEBOUND_COIN_HEADS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_452923;
351    pub(crate) const FATEBOUND_COIN_TAILS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_452917;
352    pub(crate) const FATEBOUND_LUCKY_COIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1248971;
353    pub(crate) const LUCKY_COIN_COUNTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249093;
354}
355pub(crate) mod DAMAGE_TALENT {
356    pub(crate) const ALACRITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_193539;
357    pub(crate) const AMPLIFYING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381664;
358    pub(crate) const BLINDSIDE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_328085;
359    pub(crate) const CRIMSON_TEMPEST: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1247227;
360    pub(crate) const DASHING_SCOUNDREL: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381797;
361    pub(crate) const DEADLY_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_2823;
362    pub(crate) const DEATHMARK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_360194;
363    pub(crate) const DEEPER_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_193531;
364    pub(crate) const DOOMBLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381673;
365    pub(crate) const DRAGON_TEMPERED_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381801;
366    pub(crate) const FINISH_THE_JOB: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1249809;
367    pub(crate) const IMPLACABLE_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265385;
368    pub(crate) const IMPLACABLE_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265386;
369    pub(crate) const IMPLACABLE_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1265387;
370    pub(crate) const IMPROVED_GARROTE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381632;
371    pub(crate) const IMPROVED_POISONS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381624;
372    pub(crate) const INSPIRING_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1250036;
373    pub(crate) const INTERNAL_BLEEDING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381627;
374    pub(crate) const KINGSBANE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_385627;
375    pub(crate) const LETHALITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_382238;
376    pub(crate) const LETHAL_DOSE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381640;
377    pub(crate) const RAPID_INJECTION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_455072;
378    pub(crate) const REGICIDES_REWARD: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_1250325;
379    pub(crate) const SANGUINE_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_457512;
380    pub(crate) const SEAL_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_14190;
381    pub(crate) const SYSTEMIC_FAILURE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381652;
382    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_469779;
383    pub(crate) const VENOMOUS_WOUNDS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_79134;
384    pub(crate) const ZOLDYCK_RECIPE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_381798;
385}
386pub(crate) mod DAMAGE_REPORTED {
387    pub(crate) const AMPLIFYING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_383414;
388    pub(crate) const DEADLY_POISON_DOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_2818;
389    pub(crate) const WOUND_POISON_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ACTION::SPELL_8680;
390}
391pub(crate) mod DAMAGE_EFFECT {
392    pub(crate) const ALACRITY_CHANCE_PER_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_193539_EFFECT_2;
393    pub(crate) const AMBUSH_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_8676_EFFECT_1;
394    pub(crate) const AMPLIFYING_CONSUME_STACKS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381664_EFFECT_2;
395    pub(crate) const AMPLIFYING_ENVENOM_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381664_EFFECT_1;
396    pub(crate) const DEATHMARK_ENERGY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_360194_EFFECT_3;
397    pub(crate) const DEATHMARK_PERIOD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_360194_EFFECT_1;
398    pub(crate) const AMPLIFYING_POISON_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_383414_EFFECT_1;
399    pub(crate) const BLINDSIDE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_328085_EFFECT_1;
400    pub(crate) const BLINDSIDE_EXECUTE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_328085_EFFECT_2;
401    pub(crate) const BLINDSIDE_EXECUTE_THRESHOLD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_328085_EFFECT_3;
402    pub(crate) const COIN_HEADS_INITIAL: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_452923_EFFECT_4;
403    pub(crate) const COIN_HEADS_PER_STACK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_452923_EFFECT_1;
404    pub(crate) const COIN_HEADS_PER_STACK_PERIODIC: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_452923_EFFECT_2;
405    pub(crate) const CONTROLLED_CHAOS_STREAK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1276816_EFFECT_1;
406    pub(crate) const DASHING_SCOUNDREL_ENERGY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381797_EFFECT_2;
407    pub(crate) const DEADLY_POISON_INSTANT_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_113780_EFFECT_1;
408    pub(crate) const DEAL_FATE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_454419_EFFECT_1;
409    pub(crate) const DELIVERED_DOOM_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249194_EFFECT_2;
410    pub(crate) const DELIVERED_DOOM_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249194_EFFECT_1;
411    pub(crate) const DOOMBLADE_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381673_EFFECT_1;
412    pub(crate) const ENVENOM_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_32645_EFFECT_1;
413    pub(crate) const ENVENOM_POISON_BONUS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_32645_EFFECT_2;
414    pub(crate) const FATEBOUND_COIN_TAILS_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_452538_EFFECT_1;
415    pub(crate) const HAND_OF_FATE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_452536_EFFECT_1;
416    pub(crate) const IMPLACABLE_STRIKE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1265795_EFFECT_2;
417    pub(crate) const IMPLACABLE_STRIKE_NATURE_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1265794_EFFECT_1;
418    pub(crate) const IMPLACABLE_STRIKE_PHYSICAL_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1265795_EFFECT_1;
419    pub(crate) const IMPROVED_GARROTE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_392401_EFFECT_2;
420    pub(crate) const INSPIRING_STRIKE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1250036_EFFECT_1;
421    pub(crate) const LETHAL_DOSE_PER_EFFECT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381640_EFFECT_1;
422    pub(crate) const LUCKY_COIN_FLIPS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1248970_EFFECT_1;
423    pub(crate) const LUCKY_COIN_ODDS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1248971_EFFECT_5;
424    pub(crate) const MEAN_STREAK_ODDS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_453428_EFFECT_1;
425    pub(crate) const MID2_ASSASSINATION_2PC_ENVENOM: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1296590_EFFECT_1;
426    pub(crate) const MID2_ASSASSINATION_2PC_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1296590_EFFECT_2;
427    pub(crate) const MID2_ASSASSINATION_4PC_BLEED: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1296591_EFFECT_1;
428    pub(crate) const MID2_ASSASSINATION_4PC_AUTO_ATTACK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1296591_EFFECT_2;
429    pub(crate) const WOUND_POISON_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_8680_EFFECT_1;
430    pub(crate) const MUTILATE_MH_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_5374_EFFECT_2;
431    pub(crate) const MUTILATE_OH_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_27576_EFFECT_2;
432    pub(crate) const OVERFLOWING_PURSE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249190_EFFECT_3;
433    pub(crate) const OVERFLOWING_PURSE_COINS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249190_EFFECT_1;
434    pub(crate) const POTENT_ASSASSIN_DIRECT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_76803_EFFECT_1;
435    pub(crate) const POTENT_ASSASSIN_DIRECT_LABEL: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_76803_EFFECT_3;
436    pub(crate) const POTENT_ASSASSIN_PERIODIC: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_76803_EFFECT_2;
437    pub(crate) const POTENT_ASSASSIN_SECONDARY_DIRECT_LABEL: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_76803_EFFECT_4;
438    pub(crate) const RAPID_INJECTION_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_455072_EFFECT_1;
439    pub(crate) const RAVENHOLDT_MINT_HEADS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1276809_EFFECT_1;
440    pub(crate) const REGICIDES_REWARD_DIVISOR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1250325_EFFECT_1;
441    pub(crate) const RUSH_ENERGY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249204_EFFECT_1;
442    pub(crate) const RUSH_ENERGY_EDGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_1249204_EFFECT_3;
443    pub(crate) const SEAL_FATE_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_14190_EFFECT_1;
444    pub(crate) const SEAL_FATE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_14189_EFFECT_1;
445    pub(crate) const SYSTEMIC_FAILURE_PCT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381652_EFFECT_1;
446    pub(crate) const ZOLDYCK_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381798_EFFECT_1;
447    pub(crate) const ZOLDYCK_THRESHOLD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::EFFECT::SPELL_381798_EFFECT_2;
448}
449pub(crate) const AURA_STEALTH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_STEALTH
450    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
451pub(crate) const AURA_VANISH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_VANISH
452    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
453pub(crate) const AURA_DEADLY_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DEADLY_POISON
454    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
455pub(crate) const AURA_AMPLIFYING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_AMPLIFYING_POISON
456    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
457pub(crate) const AURA_INSTANT_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_INSTANT_POISON
458    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
459pub(crate) const AURA_WOUND_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_WOUND_POISON
460    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
461pub(crate) const AURA_ATROPHIC_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_ATROPHIC_POISON
462    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
463pub(crate) const AURA_NUMBING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_NUMBING_POISON
464    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
465pub(crate) const AURA_CRIPPLING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_CRIPPLING_POISON
466    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
467pub(crate) const AURA_DEADLY_POISON_DOT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DEADLY_POISON_DOT
468    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
469pub(crate) const AURA_AMPLIFYING_POISON_DEBUFF: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_AMPLIFYING_POISON_DEBUFF
470    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
471pub(crate) const AURA_ENVENOM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_ENVENOM
472    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
473pub(crate) const AURA_SLICE_AND_DICE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_SLICE_AND_DICE
474    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
475pub(crate) const AURA_BLINDSIDE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_BLINDSIDE
476    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
477pub(crate) const AURA_ALACRITY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_ALACRITY
478    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
479pub(crate) const AURA_DARKEST_NIGHT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DARKEST_NIGHT
480    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
481pub(crate) const AURA_DEEPER_STRATAGEM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DEEPER_STRATAGEM
482    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
483pub(crate) const AURA_SANGUINE_STRATAGEM: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_SANGUINE_STRATAGEM
484    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
485pub(crate) const AURA_DRAGON_TEMPERED_BLADES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DRAGON_TEMPERED_BLADES
486    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
487pub(crate) const AURA_INSPIRING_STRIKE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_INSPIRING_STRIKE
488    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
489pub(crate) const AURA_REGICIDES_REWARD: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_REGICIDES_REWARD
490    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
491pub(crate) const AURA_GARROTE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_GARROTE
492    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
493pub(crate) const AURA_RUPTURE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_RUPTURE
494    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
495pub(crate) const AURA_INTERNAL_BLEEDING: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_INTERNAL_BLEEDING
496    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
497pub(crate) const AURA_IMPROVED_GARROTE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_IMPROVED_GARROTE
498    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
499pub(crate) const AURA_IMPROVED_GARROTE_WINDOW: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_IMPROVED_GARROTE_WINDOW
500    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
501pub(crate) const AURA_DEATHMARK: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_DEATHMARK
502    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
503pub(crate) const AURA_KINGSBANE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_KINGSBANE
504    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
505pub(crate) const AURA_KINGSBANE_RAMP: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_KINGSBANE_RAMP
506    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
507pub(crate) const AURA_FINISH_THE_JOB: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_FINISH_THE_JOB
508    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
509pub(crate) const AURA_IMPLACABLE_TRACKER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_IMPLACABLE_TRACKER
510    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
511pub(crate) const AURA_IMPLACABLE_REGEN: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_IMPLACABLE_REGEN
512    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
513pub(crate) const AURA_IMPLACABLE_BONUS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_IMPLACABLE_BONUS
514    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
515pub(crate) const AURA_PVP_RULES_ENABLED_HARDCODED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_PVP_RULES_ENABLED_HARDCODED
516    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
517pub(crate) const AURA_FATEBOUND_COIN_HEADS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_FATEBOUND_COIN_HEADS
518    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
519pub(crate) const AURA_FATEBOUND_COIN_TAILS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_FATEBOUND_COIN_TAILS
520    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
521pub(crate) const AURA_FATEBOUND_LUCKY_COIN: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_FATEBOUND_LUCKY_COIN
522    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
523pub(crate) const AURA_LUCKY_COIN_COUNTER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::AURA_LUCKY_COIN_COUNTER
524    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
525pub(crate) const AURA_COUNT: usize = 38;
526const _: () = assert!(
527    AURA_COUNT == 38, "AURA index ABI: count changed -- update positional hook consumers"
528);
529pub(crate) const SPELL_MUTILATE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_MUTILATE
530    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
531pub(crate) const SPELL_AMBUSH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_AMBUSH
532    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
533pub(crate) const SPELL_ENVENOM: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_ENVENOM
534    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
535pub(crate) const SPELL_SLICE_AND_DICE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_SLICE_AND_DICE
536    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
537pub(crate) const SPELL_FAN_OF_KNIVES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_FAN_OF_KNIVES
538    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
539pub(crate) const SPELL_CRIMSON_TEMPEST: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_CRIMSON_TEMPEST
540    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
541pub(crate) const SPELL_POISONED_KNIFE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_POISONED_KNIFE
542    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
543pub(crate) const SPELL_DEADLY_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_DEADLY_POISON
544    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
545pub(crate) const SPELL_AMPLIFYING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_AMPLIFYING_POISON
546    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
547pub(crate) const SPELL_INSTANT_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_INSTANT_POISON
548    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
549pub(crate) const SPELL_WOUND_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_WOUND_POISON
550    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
551pub(crate) const SPELL_ATROPHIC_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_ATROPHIC_POISON
552    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
553pub(crate) const SPELL_NUMBING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_NUMBING_POISON
554    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
555pub(crate) const SPELL_CRIPPLING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_CRIPPLING_POISON
556    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
557pub(crate) const SPELL_MUTILATE_MH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_MUTILATE_MH
558    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
559pub(crate) const SPELL_MUTILATE_OH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_MUTILATE_OH
560    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
561pub(crate) const SPELL_DEADLY_POISON_INSTANT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_DEADLY_POISON_INSTANT
562    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
563pub(crate) const SPELL_MUTILATED_FLESH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_MUTILATED_FLESH
564    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
565pub(crate) const SPELL_GARROTE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_GARROTE
566    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
567pub(crate) const SPELL_RUPTURE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_RUPTURE
568    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
569pub(crate) const SPELL_INTERNAL_BLEEDING_DRIVER: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_INTERNAL_BLEEDING_DRIVER
570    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
571pub(crate) const SPELL_DEATHMARK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_DEATHMARK
572    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
573pub(crate) const SPELL_KINGSBANE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_KINGSBANE
574    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
575pub(crate) const SPELL_IMPLACABLE_STRIKES_NATURE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_IMPLACABLE_STRIKES_NATURE
576    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
577pub(crate) const SPELL_IMPLACABLE_STRIKES_PHYSICAL: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_IMPLACABLE_STRIKES_PHYSICAL
578    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
579pub(crate) const SPELL_THISTLE_TEA: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_THISTLE_TEA
580    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
581pub(crate) const SPELL_VANISH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::assassination_rogue::SPELL_VANISH
582    .bind(wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF);
583pub(crate) const SPELL_COUNT: usize = 27;
584const _: () = assert!(
585    SPELL_COUNT == 27,
586    "SPELL index ABI: count changed -- update positional hook consumers"
587);
588pub(crate) mod EFFECT {
589    ///<https://wowlab.gg/inspect/spell/193539>
590    pub(crate) const ALACRITY_CHANCE_PER_CP: (u32, u8) = (193_539, 2);
591    ///<https://wowlab.gg/inspect/spell/8676>
592    pub(crate) const AMBUSH_DMG: (u32, u8) = (8676, 1);
593    ///<https://wowlab.gg/inspect/spell/381664>
594    pub(crate) const AMPLIFYING_CONSUME_STACKS: (u32, u8) = (381_664, 2);
595    ///<https://wowlab.gg/inspect/spell/381664>
596    pub(crate) const AMPLIFYING_ENVENOM_BONUS: (u32, u8) = (381_664, 1);
597    ///<https://wowlab.gg/inspect/spell/360194>
598    pub(crate) const DEATHMARK_ENERGY: (u32, u8) = (360_194, 3);
599    ///<https://wowlab.gg/inspect/spell/360194>
600    pub(crate) const DEATHMARK_PERIOD: (u32, u8) = (360_194, 1);
601    ///<https://wowlab.gg/inspect/spell/383414>
602    pub(crate) const AMPLIFYING_POISON_DMG: (u32, u8) = (383_414, 1);
603    ///<https://wowlab.gg/inspect/spell/328085>
604    pub(crate) const BLINDSIDE_CHANCE: (u32, u8) = (328_085, 1);
605    ///<https://wowlab.gg/inspect/spell/328085>
606    pub(crate) const BLINDSIDE_EXECUTE_CHANCE: (u32, u8) = (328_085, 2);
607    ///<https://wowlab.gg/inspect/spell/328085>
608    pub(crate) const BLINDSIDE_EXECUTE_THRESHOLD: (u32, u8) = (328_085, 3);
609    ///<https://wowlab.gg/inspect/spell/452923>
610    pub(crate) const COIN_HEADS_INITIAL: (u32, u8) = (452_923, 4);
611    ///<https://wowlab.gg/inspect/spell/452923>
612    pub(crate) const COIN_HEADS_PER_STACK: (u32, u8) = (452_923, 1);
613    ///<https://wowlab.gg/inspect/spell/452923>
614    pub(crate) const COIN_HEADS_PER_STACK_PERIODIC: (u32, u8) = (452_923, 2);
615    ///<https://wowlab.gg/inspect/spell/1276816>
616    pub(crate) const CONTROLLED_CHAOS_STREAK: (u32, u8) = (1_276_816, 1);
617    ///<https://wowlab.gg/inspect/spell/381797>
618    pub(crate) const DASHING_SCOUNDREL_ENERGY: (u32, u8) = (381_797, 2);
619    ///<https://wowlab.gg/inspect/spell/113780>
620    pub(crate) const DEADLY_POISON_INSTANT_DMG: (u32, u8) = (113_780, 1);
621    ///<https://wowlab.gg/inspect/spell/454419>
622    pub(crate) const DEAL_FATE_CP: (u32, u8) = (454_419, 1);
623    ///<https://wowlab.gg/inspect/spell/1249194>
624    pub(crate) const DELIVERED_DOOM_CP: (u32, u8) = (1_249_194, 2);
625    ///<https://wowlab.gg/inspect/spell/1249194>
626    pub(crate) const DELIVERED_DOOM_DMG: (u32, u8) = (1_249_194, 1);
627    ///<https://wowlab.gg/inspect/spell/381673>
628    pub(crate) const DOOMBLADE_PCT: (u32, u8) = (381_673, 1);
629    ///<https://wowlab.gg/inspect/spell/32645>
630    pub(crate) const ENVENOM_DMG: (u32, u8) = (32645, 1);
631    ///<https://wowlab.gg/inspect/spell/32645>
632    pub(crate) const ENVENOM_POISON_BONUS: (u32, u8) = (32645, 2);
633    ///<https://wowlab.gg/inspect/spell/452538>
634    pub(crate) const FATEBOUND_COIN_TAILS_DMG: (u32, u8) = (452_538, 1);
635    ///<https://wowlab.gg/inspect/spell/452536>
636    pub(crate) const HAND_OF_FATE_CP: (u32, u8) = (452_536, 1);
637    ///<https://wowlab.gg/inspect/spell/1265795>
638    pub(crate) const IMPLACABLE_STRIKE_CP: (u32, u8) = (1_265_795, 2);
639    ///<https://wowlab.gg/inspect/spell/1265794>
640    pub(crate) const IMPLACABLE_STRIKE_NATURE_DMG: (u32, u8) = (1_265_794, 1);
641    ///<https://wowlab.gg/inspect/spell/1265795>
642    pub(crate) const IMPLACABLE_STRIKE_PHYSICAL_DMG: (u32, u8) = (1_265_795, 1);
643    ///<https://wowlab.gg/inspect/spell/392401>
644    pub(crate) const IMPROVED_GARROTE_DAMAGE: (u32, u8) = (392_401, 2);
645    ///<https://wowlab.gg/inspect/spell/1250036>
646    pub(crate) const INSPIRING_STRIKE_DAMAGE: (u32, u8) = (1_250_036, 1);
647    ///<https://wowlab.gg/inspect/spell/381640>
648    pub(crate) const LETHAL_DOSE_PER_EFFECT: (u32, u8) = (381_640, 1);
649    ///<https://wowlab.gg/inspect/spell/1248970>
650    pub(crate) const LUCKY_COIN_FLIPS: (u32, u8) = (1_248_970, 1);
651    ///<https://wowlab.gg/inspect/spell/1248971>
652    pub(crate) const LUCKY_COIN_ODDS: (u32, u8) = (1_248_971, 5);
653    ///<https://wowlab.gg/inspect/spell/453428>
654    pub(crate) const MEAN_STREAK_ODDS: (u32, u8) = (453_428, 1);
655    ///<https://wowlab.gg/inspect/spell/1296590>
656    pub(crate) const MID2_ASSASSINATION_2PC_ENVENOM: (u32, u8) = (1_296_590, 1);
657    ///<https://wowlab.gg/inspect/spell/1296590>
658    pub(crate) const MID2_ASSASSINATION_2PC_DAMAGE: (u32, u8) = (1_296_590, 2);
659    ///<https://wowlab.gg/inspect/spell/1296591>
660    pub(crate) const MID2_ASSASSINATION_4PC_BLEED: (u32, u8) = (1_296_591, 1);
661    ///<https://wowlab.gg/inspect/spell/1296591>
662    pub(crate) const MID2_ASSASSINATION_4PC_AUTO_ATTACK: (u32, u8) = (1_296_591, 2);
663    ///<https://wowlab.gg/inspect/spell/8680>
664    pub(crate) const WOUND_POISON_DAMAGE: (u32, u8) = (8680, 1);
665    ///<https://wowlab.gg/inspect/spell/5374>
666    pub(crate) const MUTILATE_MH_DMG: (u32, u8) = (5374, 2);
667    ///<https://wowlab.gg/inspect/spell/27576>
668    pub(crate) const MUTILATE_OH_DMG: (u32, u8) = (27576, 2);
669    ///<https://wowlab.gg/inspect/spell/1249190>
670    pub(crate) const OVERFLOWING_PURSE_CHANCE: (u32, u8) = (1_249_190, 3);
671    ///<https://wowlab.gg/inspect/spell/1249190>
672    pub(crate) const OVERFLOWING_PURSE_COINS: (u32, u8) = (1_249_190, 1);
673    ///<https://wowlab.gg/inspect/spell/76803>
674    pub(crate) const POTENT_ASSASSIN_DIRECT: (u32, u8) = (76803, 1);
675    ///<https://wowlab.gg/inspect/spell/76803>
676    pub(crate) const POTENT_ASSASSIN_DIRECT_LABEL: (u32, u8) = (76803, 3);
677    ///<https://wowlab.gg/inspect/spell/76803>
678    pub(crate) const POTENT_ASSASSIN_PERIODIC: (u32, u8) = (76803, 2);
679    ///<https://wowlab.gg/inspect/spell/76803>
680    pub(crate) const POTENT_ASSASSIN_SECONDARY_DIRECT_LABEL: (u32, u8) = (76803, 4);
681    ///<https://wowlab.gg/inspect/spell/455072>
682    pub(crate) const RAPID_INJECTION_PCT: (u32, u8) = (455_072, 1);
683    ///<https://wowlab.gg/inspect/spell/1276809>
684    pub(crate) const RAVENHOLDT_MINT_HEADS: (u32, u8) = (1_276_809, 1);
685    ///<https://wowlab.gg/inspect/spell/1250325>
686    pub(crate) const REGICIDES_REWARD_DIVISOR: (u32, u8) = (1_250_325, 1);
687    ///<https://wowlab.gg/inspect/spell/1249204>
688    pub(crate) const RUSH_ENERGY: (u32, u8) = (1_249_204, 1);
689    ///<https://wowlab.gg/inspect/spell/1249204>
690    pub(crate) const RUSH_ENERGY_EDGE: (u32, u8) = (1_249_204, 3);
691    ///<https://wowlab.gg/inspect/spell/14190>
692    pub(crate) const SEAL_FATE_CHANCE: (u32, u8) = (14190, 1);
693    ///<https://wowlab.gg/inspect/spell/14189>
694    pub(crate) const SEAL_FATE_CP: (u32, u8) = (14189, 1);
695    ///<https://wowlab.gg/inspect/spell/381652>
696    pub(crate) const SYSTEMIC_FAILURE_PCT: (u32, u8) = (381_652, 1);
697    ///<https://wowlab.gg/inspect/spell/381798>
698    pub(crate) const ZOLDYCK_DAMAGE: (u32, u8) = (381_798, 1);
699    ///<https://wowlab.gg/inspect/spell/381798>
700    pub(crate) const ZOLDYCK_THRESHOLD: (u32, u8) = (381_798, 2);
701}
702static REPORTED_SPELLS: &[(&str, u32)] = &[
703    ("amplifying_poison", 383_414),
704    ("deadly_poison_dot", 2818),
705    ("wound_poison_damage", 8680),
706];
707static DECLARED_SPELL_IDS: &[u32] = &[
708    1329, 8676, 32645, 315_496, 51723, 1_247_227, 185_565, 2823, 381_664, 315_584, 8679,
709    381_637, 5761, 3408, 5374, 27576, 113_780, 394_021, 703, 1943, 381_628, 360_194,
710    385_627, 1_265_794, 1_265_795, 381_623, 1856, 1784, 2818, 383_414, 121_153, 193_538,
711    457_280, 193_531, 457_512, 381_801, 1_250_036, 1_250_331, 381_632, 392_401, 394_095,
712    1_249_810, 1_265_386, 1_265_387, 1_265_385, 134_735, 452_923, 452_917, 1_248_971,
713    1_249_093, 193_539, 328_085, 381_797, 381_673, 1_249_809, 381_624, 381_627, 382_238,
714    381_640, 455_072, 1_250_325, 14190, 381_652, 469_779, 79134, 381_798, 6603, 8680,
715    14189, 76803, 452_536, 452_538, 453_428, 454_419, 1_248_970, 1_249_190, 1_249_194,
716    1_249_204, 1_276_809, 1_276_816, 1_296_590, 1_296_591, 453_457,
717];
718static DECLARED_AURA_IDS: &[u32] = &[
719    1784, 1856, 2823, 381_664, 315_584, 8679, 381_637, 5761, 3408, 2818, 383_414, 32645,
720    315_496, 121_153, 193_538, 457_280, 193_531, 457_512, 381_801, 1_250_036, 1_250_331,
721    703, 1943, 381_628, 381_632, 392_401, 360_194, 385_627, 394_095, 1_249_810,
722    1_265_386, 1_265_387, 1_265_385, 134_735, 452_923, 452_917, 1_248_971, 1_249_093,
723    452_923, 452_917, 1_248_971,
724];
725static TALENTS: &[(&str, u32)] = &[
726    ("ALACRITY", TALENT::ALACRITY),
727    ("AMPLIFYING_POISON", TALENT::AMPLIFYING_POISON),
728    ("BLINDSIDE", TALENT::BLINDSIDE),
729    ("CRIMSON_TEMPEST", TALENT::CRIMSON_TEMPEST),
730    ("DASHING_SCOUNDREL", TALENT::DASHING_SCOUNDREL),
731    ("DEADLY_POISON", TALENT::DEADLY_POISON),
732    ("DEATHMARK", TALENT::DEATHMARK),
733    ("DEEPER_STRATAGEM", TALENT::DEEPER_STRATAGEM),
734    ("DOOMBLADE", TALENT::DOOMBLADE),
735    ("DRAGON_TEMPERED_BLADES", TALENT::DRAGON_TEMPERED_BLADES),
736    ("FINISH_THE_JOB", TALENT::FINISH_THE_JOB),
737    ("IMPLACABLE_1", TALENT::IMPLACABLE_1),
738    ("IMPLACABLE_2", TALENT::IMPLACABLE_2),
739    ("IMPLACABLE_3", TALENT::IMPLACABLE_3),
740    ("IMPROVED_GARROTE", TALENT::IMPROVED_GARROTE),
741    ("IMPROVED_POISONS", TALENT::IMPROVED_POISONS),
742    ("INSPIRING_STRIKE", TALENT::INSPIRING_STRIKE),
743    ("INTERNAL_BLEEDING", TALENT::INTERNAL_BLEEDING),
744    ("KINGSBANE", TALENT::KINGSBANE),
745    ("LETHALITY", TALENT::LETHALITY),
746    ("LETHAL_DOSE", TALENT::LETHAL_DOSE),
747    ("RAPID_INJECTION", TALENT::RAPID_INJECTION),
748    ("REGICIDES_REWARD", TALENT::REGICIDES_REWARD),
749    ("SANGUINE_STRATAGEM", TALENT::SANGUINE_STRATAGEM),
750    ("SEAL_FATE", TALENT::SEAL_FATE),
751    ("SYSTEMIC_FAILURE", TALENT::SYSTEMIC_FAILURE),
752    ("THISTLE_TEA", TALENT::THISTLE_TEA),
753    ("VENOMOUS_WOUNDS", TALENT::VENOMOUS_WOUNDS),
754    ("ZOLDYCK_RECIPE", TALENT::ZOLDYCK_RECIPE),
755];
756pub(crate) mod ASSASSINATION_ROGUE {
757    pub(crate) const MUTILATE_CASTS: u32 = 0;
758    pub(crate) const AMBUSH_CASTS: u32 = 1;
759    pub(crate) const GARROTE_CASTS: u32 = 2;
760    pub(crate) const RUPTURE_CASTS: u32 = 3;
761    pub(crate) const ENVENOM_CASTS: u32 = 4;
762    pub(crate) const DEATHMARK_CASTS: u32 = 5;
763    pub(crate) const KINGSBANE_CASTS: u32 = 6;
764    pub(crate) const FAN_OF_KNIVES_CASTS: u32 = 7;
765    pub(crate) const GARROTE_UPTIME_MS: u32 = 8;
766    pub(crate) const RUPTURE_UPTIME_MS: u32 = 9;
767    pub(crate) const ENVENOM_UPTIME_MS: u32 = 10;
768    pub(crate) const DEATHMARK_UPTIME_MS: u32 = 11;
769}
770fn aura_stealth(
771    a: AuraDefinitionDraft,
772    data: &ResolvedGameData,
773) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
774    Ok(
775        a
776            .on_player()
777            .apply_base_from_data(data, 1784)?
778            .max_stacks(
779                data
780                    .require_aura_max_stacks(
781                        wowlab_types::sim::SpellIdx::from_raw(1784),
782                    )?,
783            ),
784    )
785}
786fn aura_vanish(
787    a: AuraDefinitionDraft,
788    data: &ResolvedGameData,
789) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
790    Ok(
791        a
792            .on_player()
793            .apply_base_from_data(data, 1856)?
794            .max_stacks(
795                data
796                    .require_aura_max_stacks(
797                        wowlab_types::sim::SpellIdx::from_raw(1856),
798                    )?,
799            ),
800    )
801}
802fn aura_deadly_poison(
803    a: AuraDefinitionDraft,
804    data: &ResolvedGameData,
805) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
806    Ok(
807        a
808            .on_player()
809            .apply_base_from_data(data, 2823)?
810            .max_stacks(
811                data
812                    .require_aura_max_stacks(
813                        wowlab_types::sim::SpellIdx::from_raw(2823),
814                    )?,
815            ),
816    )
817}
818fn aura_amplifying_poison(
819    a: AuraDefinitionDraft,
820    data: &ResolvedGameData,
821) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
822    Ok(
823        a
824            .on_player()
825            .apply_base_from_data(data, 381_664)?
826            .max_stacks(
827                data
828                    .require_aura_max_stacks(
829                        wowlab_types::sim::SpellIdx::from_raw(381_664),
830                    )?,
831            ),
832    )
833}
834fn aura_instant_poison(
835    a: AuraDefinitionDraft,
836    data: &ResolvedGameData,
837) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
838    Ok(
839        a
840            .on_player()
841            .apply_base_from_data(data, 315_584)?
842            .max_stacks(
843                data
844                    .require_aura_max_stacks(
845                        wowlab_types::sim::SpellIdx::from_raw(315_584),
846                    )?,
847            ),
848    )
849}
850fn aura_wound_poison(
851    a: AuraDefinitionDraft,
852    data: &ResolvedGameData,
853) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
854    Ok(
855        a
856            .on_player()
857            .apply_base_from_data(data, 8679)?
858            .max_stacks(
859                data
860                    .require_aura_max_stacks(
861                        wowlab_types::sim::SpellIdx::from_raw(8679),
862                    )?,
863            ),
864    )
865}
866fn aura_atrophic_poison(
867    a: AuraDefinitionDraft,
868    data: &ResolvedGameData,
869) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
870    Ok(
871        a
872            .on_player()
873            .apply_base_from_data(data, 381_637)?
874            .max_stacks(
875                data
876                    .require_aura_max_stacks(
877                        wowlab_types::sim::SpellIdx::from_raw(381_637),
878                    )?,
879            )
880            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
881    )
882}
883fn aura_numbing_poison(
884    a: AuraDefinitionDraft,
885    data: &ResolvedGameData,
886) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
887    Ok(
888        a
889            .on_player()
890            .apply_base_from_data(data, 5761)?
891            .max_stacks(
892                data
893                    .require_aura_max_stacks(
894                        wowlab_types::sim::SpellIdx::from_raw(5761),
895                    )?,
896            )
897            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
898    )
899}
900fn aura_crippling_poison(
901    a: AuraDefinitionDraft,
902    data: &ResolvedGameData,
903) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
904    Ok(
905        a
906            .on_player()
907            .apply_base_from_data(data, 3408)?
908            .max_stacks(
909                data
910                    .require_aura_max_stacks(
911                        wowlab_types::sim::SpellIdx::from_raw(3408),
912                    )?,
913            ),
914    )
915}
916fn aura_deadly_poison_dot(
917    a: AuraDefinitionDraft,
918    data: &ResolvedGameData,
919) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
920    Ok(
921        a
922            .on_target()
923            .apply_base_from_data(data, 2818)?
924            .max_stacks(
925                data
926                    .require_aura_max_stacks(
927                        wowlab_types::sim::SpellIdx::from_raw(2818),
928                    )?,
929            ),
930    )
931}
932fn aura_amplifying_poison_debuff(
933    a: AuraDefinitionDraft,
934    data: &ResolvedGameData,
935) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
936    Ok(
937        a
938            .on_target()
939            .apply_base_from_data(data, 383_414)?
940            .max_stacks(
941                data
942                    .require_aura_max_stacks(
943                        wowlab_types::sim::SpellIdx::from_raw(383_414),
944                    )?,
945            ),
946    )
947}
948fn aura_envenom(
949    a: AuraDefinitionDraft,
950    data: &ResolvedGameData,
951) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
952    Ok(
953        a
954            .on_player()
955            .duration_ms(
956                wowlab_engine_combat::validated_milliseconds(
957                    1000.0,
958                    32645,
959                    "aura.duration_ms",
960                )?,
961            )
962            .apply_periodic_effect_from_data(data, 32645)?
963            .max_stacks(
964                data
965                    .require_aura_max_stacks(
966                        wowlab_types::sim::SpellIdx::from_raw(32645),
967                    )?,
968            )
969            .no_pandemic()
970            .on_expire(crate::hooks::assassination_rogue::envenom_expire_hook),
971    )
972}
973fn aura_slice_and_dice(
974    a: AuraDefinitionDraft,
975    data: &ResolvedGameData,
976) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
977    Ok(
978        a
979            .on_player()
980            .apply_base_from_data(data, 315_496)?
981            .max_stacks(
982                data
983                    .require_aura_max_stacks(
984                        wowlab_types::sim::SpellIdx::from_raw(315_496),
985                    )?,
986            ),
987    )
988}
989fn aura_blindside(
990    a: AuraDefinitionDraft,
991    data: &ResolvedGameData,
992) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
993    Ok(
994        a
995            .on_player()
996            .apply_base_from_data(data, 121_153)?
997            .max_stacks(
998                data
999                    .require_aura_max_stacks(
1000                        wowlab_types::sim::SpellIdx::from_raw(121_153),
1001                    )?,
1002            ),
1003    )
1004}
1005fn aura_alacrity(
1006    a: AuraDefinitionDraft,
1007    data: &ResolvedGameData,
1008) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1009    a.on_player()
1010        .apply_base_from_data(data, 193_538)?
1011        .max_stacks(
1012            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(193_538))?,
1013        )
1014        .haste_per_stack(
1015            data.base_points(wowlab_types::sim::SpellIdx::from_raw(193_538), 1),
1016        )
1017}
1018fn aura_darkest_night(
1019    a: AuraDefinitionDraft,
1020    data: &ResolvedGameData,
1021) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1022    Ok(
1023        a
1024            .on_player()
1025            .apply_base_from_data(data, 457_280)?
1026            .max_stacks(
1027                data
1028                    .require_aura_max_stacks(
1029                        wowlab_types::sim::SpellIdx::from_raw(457_280),
1030                    )?,
1031            ),
1032    )
1033}
1034fn aura_deeper_stratagem(
1035    a: AuraDefinitionDraft,
1036    data: &ResolvedGameData,
1037) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1038    Ok(
1039        a
1040            .on_player()
1041            .apply_base_from_data(data, 193_531)?
1042            .max_stacks(
1043                data
1044                    .require_aura_max_stacks(
1045                        wowlab_types::sim::SpellIdx::from_raw(193_531),
1046                    )?,
1047            ),
1048    )
1049}
1050fn aura_sanguine_stratagem(
1051    a: AuraDefinitionDraft,
1052    data: &ResolvedGameData,
1053) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1054    Ok(
1055        a
1056            .on_player()
1057            .apply_base_from_data(data, 457_512)?
1058            .max_stacks(
1059                data
1060                    .require_aura_max_stacks(
1061                        wowlab_types::sim::SpellIdx::from_raw(457_512),
1062                    )?,
1063            ),
1064    )
1065}
1066fn aura_dragon_tempered_blades(
1067    a: AuraDefinitionDraft,
1068    data: &ResolvedGameData,
1069) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1070    Ok(
1071        a
1072            .on_player()
1073            .apply_base_from_data(data, 381_801)?
1074            .max_stacks(
1075                data
1076                    .require_aura_max_stacks(
1077                        wowlab_types::sim::SpellIdx::from_raw(381_801),
1078                    )?,
1079            ),
1080    )
1081}
1082fn aura_inspiring_strike(
1083    a: AuraDefinitionDraft,
1084    data: &ResolvedGameData,
1085) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1086    a.on_player()
1087        .duration_ms(
1088            wowlab_engine_combat::validated_milliseconds(
1089                1000.0,
1090                1_250_036,
1091                "aura.duration_ms",
1092            )?,
1093        )
1094        .apply_periodic_effect_from_data(data, 1_250_036)?
1095        .max_stacks(
1096            data
1097                .require_aura_max_stacks(
1098                    wowlab_types::sim::SpellIdx::from_raw(1_250_036),
1099                )?,
1100        )
1101        .damage_multiplier(
1102            ((data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_250_036), 1))
1103                * 0.01) + 1.0,
1104        )
1105}
1106fn aura_regicides_reward(
1107    a: AuraDefinitionDraft,
1108    data: &ResolvedGameData,
1109) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1110    Ok(
1111        a
1112            .on_player()
1113            .apply_base_from_data(data, 1_250_331)?
1114            .max_stacks(
1115                wowlab_engine_combat::validated_max_stacks(
1116                    10.0,
1117                    1_250_331,
1118                    "aura.max_stacks",
1119                )?,
1120            )
1121            .periodic_remove_stack(
1122                wowlab_engine_combat::validated_milliseconds(
1123                    data.period(wowlab_types::sim::SpellIdx::from_raw(1_250_331), 2),
1124                    1_250_331,
1125                    "periodic_remove_stack.tick_ms",
1126                )?,
1127            ),
1128    )
1129}
1130fn aura_garrote(
1131    a: AuraDefinitionDraft,
1132    data: &ResolvedGameData,
1133) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1134    Ok(
1135        a
1136            .on_target()
1137            .apply_base_from_data(data, 703)?
1138            .max_stacks(
1139                data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(703))?,
1140            ),
1141    )
1142}
1143fn aura_rupture(
1144    a: AuraDefinitionDraft,
1145    data: &ResolvedGameData,
1146) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1147    Ok(
1148        a
1149            .on_target()
1150            .apply_base_from_data(data, 1943)?
1151            .max_stacks(
1152                data
1153                    .require_aura_max_stacks(
1154                        wowlab_types::sim::SpellIdx::from_raw(1943),
1155                    )?,
1156            ),
1157    )
1158}
1159fn aura_internal_bleeding(
1160    a: AuraDefinitionDraft,
1161    data: &ResolvedGameData,
1162) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1163    Ok(
1164        a
1165            .on_target()
1166            .apply_base_from_data(data, 381_628)?
1167            .max_stacks(
1168                data
1169                    .require_aura_max_stacks(
1170                        wowlab_types::sim::SpellIdx::from_raw(381_628),
1171                    )?,
1172            ),
1173    )
1174}
1175fn aura_improved_garrote(
1176    a: AuraDefinitionDraft,
1177    data: &ResolvedGameData,
1178) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1179    Ok(
1180        a
1181            .on_player()
1182            .apply_base_from_data(data, 381_632)?
1183            .max_stacks(
1184                data
1185                    .require_aura_max_stacks(
1186                        wowlab_types::sim::SpellIdx::from_raw(381_632),
1187                    )?,
1188            ),
1189    )
1190}
1191fn aura_improved_garrote_window(
1192    a: AuraDefinitionDraft,
1193    data: &ResolvedGameData,
1194) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1195    Ok(
1196        a
1197            .on_player()
1198            .apply_base_from_data(data, 392_401)?
1199            .max_stacks(
1200                data
1201                    .require_aura_max_stacks(
1202                        wowlab_types::sim::SpellIdx::from_raw(392_401),
1203                    )?,
1204            ),
1205    )
1206}
1207fn aura_deathmark(
1208    a: AuraDefinitionDraft,
1209    data: &ResolvedGameData,
1210) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1211    Ok(
1212        a
1213            .on_target()
1214            .apply_base_from_data(data, 360_194)?
1215            .max_stacks(
1216                data
1217                    .require_aura_max_stacks(
1218                        wowlab_types::sim::SpellIdx::from_raw(360_194),
1219                    )?,
1220            ),
1221    )
1222}
1223fn aura_kingsbane(
1224    a: AuraDefinitionDraft,
1225    data: &ResolvedGameData,
1226) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1227    Ok(
1228        a
1229            .on_target()
1230            .apply_base_from_data(data, 385_627)?
1231            .max_stacks(
1232                data
1233                    .require_aura_max_stacks(
1234                        wowlab_types::sim::SpellIdx::from_raw(385_627),
1235                    )?,
1236            )
1237            .on_expire(crate::hooks::assassination_rogue::kingsbane_expire_hook),
1238    )
1239}
1240fn aura_kingsbane_ramp(
1241    a: AuraDefinitionDraft,
1242    data: &ResolvedGameData,
1243) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1244    a.on_player()
1245        .duration_ms(
1246            wowlab_engine_combat::validated_milliseconds(
1247                0.0,
1248                394_095,
1249                "aura.duration_ms",
1250            )?,
1251        )
1252        .apply_periodic_effect_from_data(data, 394_095)?
1253        .max_stacks(
1254            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(394_095))?,
1255        )
1256        .damage_percent_spells_linear(
1257            data.base_points(wowlab_types::sim::SpellIdx::from_raw(394_095), 1),
1258            &[385_627],
1259        )
1260}
1261fn aura_finish_the_job(
1262    a: AuraDefinitionDraft,
1263    data: &ResolvedGameData,
1264) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1265    Ok(
1266        a
1267            .on_player()
1268            .apply_base_from_data(data, 1_249_810)?
1269            .max_stacks(
1270                data
1271                    .require_aura_max_stacks(
1272                        wowlab_types::sim::SpellIdx::from_raw(1_249_810),
1273                    )?,
1274            ),
1275    )
1276}
1277fn aura_implacable_tracker(
1278    a: AuraDefinitionDraft,
1279    data: &ResolvedGameData,
1280) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1281    Ok(
1282        a
1283            .on_player()
1284            .duration_ms(
1285                wowlab_engine_combat::validated_milliseconds(
1286                    15000.0,
1287                    1_265_386,
1288                    "aura.duration_ms",
1289                )?,
1290            )
1291            .apply_periodic_effect_from_data(data, 1_265_386)?
1292            .max_stacks(
1293                wowlab_engine_combat::validated_max_stacks(
1294                    100.0,
1295                    1_265_386,
1296                    "aura.max_stacks",
1297                )?,
1298            ),
1299    )
1300}
1301fn aura_implacable_regen(
1302    a: AuraDefinitionDraft,
1303    data: &ResolvedGameData,
1304) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1305    a.on_player()
1306        .duration_ms(
1307            wowlab_engine_combat::validated_milliseconds(
1308                5000.0,
1309                1_265_387,
1310                "aura.duration_ms",
1311            )?,
1312        )
1313        .apply_periodic_effect_from_data(data, 1_265_387)?
1314        .max_stacks(
1315            data
1316                .require_aura_max_stacks(
1317                    wowlab_types::sim::SpellIdx::from_raw(1_265_387),
1318                )?,
1319        )
1320        .regen_percent_per_stack(
1321            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_265_385), 1),
1322        )
1323}
1324fn aura_implacable_bonus(
1325    a: AuraDefinitionDraft,
1326    data: &ResolvedGameData,
1327) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1328    a.on_player()
1329        .duration_ms(
1330            wowlab_engine_combat::validated_milliseconds(
1331                5000.0,
1332                1_265_385,
1333                "aura.duration_ms",
1334            )?,
1335        )
1336        .apply_periodic_effect_from_data(data, 1_265_385)?
1337        .max_stacks(
1338            wowlab_engine_combat::validated_max_stacks(
1339                4.0,
1340                1_265_385,
1341                "aura.max_stacks",
1342            )?,
1343        )
1344        .regen_percent_per_stack(
1345            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_265_385), 2),
1346        )
1347}
1348fn aura_pvp_rules_enabled_hardcoded(
1349    a: AuraDefinitionDraft,
1350    data: &ResolvedGameData,
1351) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1352    Ok(
1353        a
1354            .on_player()
1355            .apply_base_from_data(data, 134_735)?
1356            .max_stacks(
1357                data
1358                    .require_aura_max_stacks(
1359                        wowlab_types::sim::SpellIdx::from_raw(134_735),
1360                    )?,
1361            ),
1362    )
1363}
1364fn aura_fatebound_coin_heads(
1365    a: AuraDefinitionDraft,
1366    data: &ResolvedGameData,
1367) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1368    Ok(
1369        a
1370            .on_player()
1371            .apply_base_from_data(data, 452_923)?
1372            .max_stacks(
1373                data
1374                    .require_aura_max_stacks(
1375                        wowlab_types::sim::SpellIdx::from_raw(452_923),
1376                    )?,
1377            ),
1378    )
1379}
1380fn aura_fatebound_coin_tails(
1381    a: AuraDefinitionDraft,
1382    data: &ResolvedGameData,
1383) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1384    Ok(
1385        a
1386            .on_player()
1387            .apply_base_from_data(data, 452_917)?
1388            .max_stacks(
1389                data
1390                    .require_aura_max_stacks(
1391                        wowlab_types::sim::SpellIdx::from_raw(452_917),
1392                    )?,
1393            ),
1394    )
1395}
1396fn aura_fatebound_lucky_coin(
1397    a: AuraDefinitionDraft,
1398    data: &ResolvedGameData,
1399) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1400    a.on_player()
1401        .apply_base_from_data(data, 1_248_971)?
1402        .max_stacks(
1403            data
1404                .require_aura_max_stacks(
1405                    wowlab_types::sim::SpellIdx::from_raw(1_248_971),
1406                )?,
1407        )
1408        .primary_pct_per_stack(
1409            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_248_971), 1),
1410        )
1411}
1412fn aura_lucky_coin_counter(
1413    a: AuraDefinitionDraft,
1414    data: &ResolvedGameData,
1415) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1416    Ok(
1417        a
1418            .on_player()
1419            .apply_base_from_data(data, 1_249_093)?
1420            .max_stacks(
1421                data
1422                    .require_aura_max_stacks(
1423                        wowlab_types::sim::SpellIdx::from_raw(1_249_093),
1424                    )?,
1425            ),
1426    )
1427}
1428fn spell_mutilate(
1429    s: SpellDefinitionDraft,
1430    data: &ResolvedGameData,
1431) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1432    Ok(
1433        s
1434            .apply_base_from_data(data, 1329)?
1435            .without_primary_data_damage()
1436            .trigger_program_predicate(
1437                3,
1438                crate::hooks::assassination_rogue::hook_owned_damage_trigger_disabled,
1439            )
1440            .trigger_program_predicate(
1441                4,
1442                crate::hooks::assassination_rogue::hook_owned_damage_trigger_disabled,
1443            )
1444            .apply_aoe_from_data(data)
1445            .on_cast(crate::hooks::assassination_rogue::mutilate_hook),
1446    )
1447}
1448fn spell_ambush(
1449    s: SpellDefinitionDraft,
1450    data: &ResolvedGameData,
1451) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1452    Ok(
1453        s
1454            .apply_base_from_data(data, 8676)?
1455            .apply_aoe_from_data(data)
1456            .on_cast(crate::hooks::assassination_rogue::ambush_hook)
1457            .cost_free_when_aura(121_153),
1458    )
1459}
1460fn spell_envenom(
1461    s: SpellDefinitionDraft,
1462    data: &ResolvedGameData,
1463) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1464    Ok(
1465        s
1466            .apply_base_from_data(data, 32645)?
1467            .applies_inferred_aura(AURA_ENVENOM, 32645)
1468            .apply_aoe_from_data(data)
1469            .on_cast(crate::hooks::assassination_rogue::envenom_hook),
1470    )
1471}
1472fn spell_slice_and_dice(
1473    s: SpellDefinitionDraft,
1474    data: &ResolvedGameData,
1475) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1476    Ok(
1477        s
1478            .apply_base_from_data(data, 315_496)?
1479            .applies_inferred_aura(AURA_SLICE_AND_DICE, 315_496)
1480            .apply_aoe_from_data(data),
1481    )
1482}
1483fn spell_fan_of_knives(
1484    s: SpellDefinitionDraft,
1485    data: &ResolvedGameData,
1486) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1487    Ok(s.apply_base_from_data(data, 51723)?.apply_aoe_from_data(data))
1488}
1489fn spell_crimson_tempest(
1490    s: SpellDefinitionDraft,
1491    data: &ResolvedGameData,
1492) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1493    Ok(s.apply_base_from_data(data, 1_247_227)?.apply_aoe_from_data(data))
1494}
1495fn spell_poisoned_knife(
1496    s: SpellDefinitionDraft,
1497    data: &ResolvedGameData,
1498) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1499    Ok(s.apply_base_from_data(data, 185_565)?.apply_aoe_from_data(data))
1500}
1501fn spell_deadly_poison(
1502    s: SpellDefinitionDraft,
1503    data: &ResolvedGameData,
1504) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1505    Ok(
1506        s
1507            .apply_base_from_data(data, 2823)?
1508            .applies_inferred_aura(AURA_DEADLY_POISON, 2823)
1509            .no_stealth_break()
1510            .apply_aoe_from_data(data),
1511    )
1512}
1513fn spell_amplifying_poison(
1514    s: SpellDefinitionDraft,
1515    data: &ResolvedGameData,
1516) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1517    Ok(
1518        s
1519            .apply_base_from_data(data, 381_664)?
1520            .applies_inferred_aura(AURA_AMPLIFYING_POISON, 381_664)
1521            .no_stealth_break()
1522            .apply_aoe_from_data(data),
1523    )
1524}
1525fn spell_instant_poison(
1526    s: SpellDefinitionDraft,
1527    data: &ResolvedGameData,
1528) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1529    Ok(
1530        s
1531            .apply_base_from_data(data, 315_584)?
1532            .applies_inferred_aura(AURA_INSTANT_POISON, 315_584)
1533            .no_stealth_break()
1534            .apply_aoe_from_data(data),
1535    )
1536}
1537fn spell_wound_poison(
1538    s: SpellDefinitionDraft,
1539    data: &ResolvedGameData,
1540) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1541    Ok(
1542        s
1543            .apply_base_from_data(data, 8679)?
1544            .applies_inferred_aura(AURA_WOUND_POISON, 8679)
1545            .no_stealth_break()
1546            .apply_aoe_from_data(data),
1547    )
1548}
1549fn spell_atrophic_poison(
1550    s: SpellDefinitionDraft,
1551    data: &ResolvedGameData,
1552) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1553    Ok(
1554        s
1555            .apply_base_from_data(data, 381_637)?
1556            .applies_inferred_aura(AURA_ATROPHIC_POISON, 381_637)
1557            .no_stealth_break()
1558            .apply_aoe_from_data(data),
1559    )
1560}
1561fn spell_numbing_poison(
1562    s: SpellDefinitionDraft,
1563    data: &ResolvedGameData,
1564) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1565    Ok(
1566        s
1567            .apply_base_from_data(data, 5761)?
1568            .applies_inferred_aura(AURA_NUMBING_POISON, 5761)
1569            .no_stealth_break()
1570            .apply_aoe_from_data(data),
1571    )
1572}
1573fn spell_crippling_poison(
1574    s: SpellDefinitionDraft,
1575    data: &ResolvedGameData,
1576) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1577    Ok(
1578        s
1579            .apply_base_from_data(data, 3408)?
1580            .applies_inferred_aura(AURA_CRIPPLING_POISON, 3408)
1581            .no_stealth_break()
1582            .apply_aoe_from_data(data),
1583    )
1584}
1585fn spell_mutilate_mh(
1586    s: SpellDefinitionDraft,
1587    data: &ResolvedGameData,
1588) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1589    Ok(s.apply_base_from_data(data, 5374)?.apply_aoe_from_data(data))
1590}
1591fn spell_mutilate_oh(
1592    s: SpellDefinitionDraft,
1593    data: &ResolvedGameData,
1594) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1595    Ok(s.apply_base_from_data(data, 27576)?.apply_aoe_from_data(data))
1596}
1597fn spell_deadly_poison_instant(
1598    s: SpellDefinitionDraft,
1599    data: &ResolvedGameData,
1600) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1601    Ok(s.apply_base_from_data(data, 113_780)?.apply_aoe_from_data(data))
1602}
1603fn spell_mutilated_flesh(
1604    s: SpellDefinitionDraft,
1605    data: &ResolvedGameData,
1606) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1607    Ok(s.apply_base_from_data(data, 394_021)?.apply_aoe_from_data(data))
1608}
1609fn spell_garrote(
1610    s: SpellDefinitionDraft,
1611    data: &ResolvedGameData,
1612) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1613    Ok(
1614        s
1615            .apply_base_from_data(data, 703)?
1616            .applies_inferred_aura(AURA_GARROTE, 703)
1617            .apply_aoe_from_data(data)
1618            .on_cast(crate::hooks::assassination_rogue::garrote_hook),
1619    )
1620}
1621fn spell_rupture(
1622    s: SpellDefinitionDraft,
1623    data: &ResolvedGameData,
1624) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1625    Ok(
1626        s
1627            .apply_base_from_data(data, 1943)?
1628            .applies_inferred_aura(AURA_RUPTURE, 1943)
1629            .apply_aoe_from_data(data)
1630            .on_cast(crate::hooks::assassination_rogue::rupture_hook),
1631    )
1632}
1633fn spell_internal_bleeding_driver(
1634    s: SpellDefinitionDraft,
1635    data: &ResolvedGameData,
1636) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1637    Ok(
1638        s
1639            .apply_base_from_data(data, 381_628)?
1640            .applies_inferred_aura(AURA_INTERNAL_BLEEDING, 381_628)
1641            .apply_aoe_from_data(data),
1642    )
1643}
1644fn spell_deathmark(
1645    s: SpellDefinitionDraft,
1646    data: &ResolvedGameData,
1647) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1648    Ok(
1649        s
1650            .apply_base_from_data(data, 360_194)?
1651            .applies_inferred_aura(AURA_DEATHMARK, 360_194)
1652            .apply_aoe_from_data(data)
1653            .on_cast(crate::hooks::assassination_rogue::deathmark_hook),
1654    )
1655}
1656fn spell_kingsbane(
1657    s: SpellDefinitionDraft,
1658    data: &ResolvedGameData,
1659) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1660    Ok(
1661        s
1662            .apply_base_from_data(data, 385_627)?
1663            .applies_inferred_aura(AURA_KINGSBANE, 385_627)
1664            .apply_aoe_from_data(data)
1665            .on_cast(crate::hooks::assassination_rogue::kingsbane_hook),
1666    )
1667}
1668fn spell_implacable_strikes_nature(
1669    s: SpellDefinitionDraft,
1670    data: &ResolvedGameData,
1671) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1672    Ok(s.apply_base_from_data(data, 1_265_794)?.apply_aoe_from_data(data))
1673}
1674fn spell_implacable_strikes_physical(
1675    s: SpellDefinitionDraft,
1676    data: &ResolvedGameData,
1677) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1678    Ok(s.apply_base_from_data(data, 1_265_795)?.apply_aoe_from_data(data))
1679}
1680fn spell_thistle_tea(
1681    s: SpellDefinitionDraft,
1682    data: &ResolvedGameData,
1683) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1684    Ok(
1685        s
1686            .apply_base_from_data(data, 381_623)?
1687            .no_stealth_break()
1688            .apply_aoe_from_data(data),
1689    )
1690}
1691fn spell_vanish(
1692    s: SpellDefinitionDraft,
1693    data: &ResolvedGameData,
1694) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1695    Ok(
1696        s
1697            .apply_base_from_data(data, 1856)?
1698            .applies_aura(AURA_STEALTH)
1699            .no_stealth_break()
1700            .apply_aoe_from_data(data)
1701            .on_cast(crate::hooks::assassination_rogue::vanish_hook),
1702    )
1703}
1704pub(crate) fn build_combat_system_draft(
1705    params: &wowlab_engine_ports::HandlerParams<'_>,
1706) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1707    let builder = CombatSystemBuilder::new(params.stats.clone())
1708        .spec_id(SpecId::Assassination)
1709        .spec_identity(
1710            wowlab_engine_combat::generated_identities::specs::assassination_rogue::PROOF,
1711        )
1712        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1713        .effect_identities(
1714            wowlab_engine_combat::generated_identities::specs::assassination_rogue::damage::ALL,
1715        )
1716        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1717        .mastery_spell(76803)
1718        .mastery_hook(crate::hooks::assassination_rogue::mastery)
1719        .resource(
1720            "energy",
1721            params
1722                .game_data
1723                .power_max(3)
1724                .ok_or_else(|| {
1725                    wowlab_engine_ports::EngineError::spec_construction(
1726                        "missing power-type power_max for type_id 3",
1727                    )
1728                })?,
1729            params
1730                .game_data
1731                .power_regen_for_max(
1732                    3,
1733                    params
1734                        .game_data
1735                        .power_max(3)
1736                        .ok_or_else(|| {
1737                            wowlab_engine_ports::EngineError::spec_construction(
1738                                "missing power-type power_max for type_id 3",
1739                            )
1740                        })?,
1741                )
1742                .ok_or_else(|| {
1743                    wowlab_engine_ports::EngineError::spec_construction(
1744                        "missing power-type power_regen_for_max for type_id 3",
1745                    )
1746                })?,
1747        )
1748        .resource_type_id(3)
1749        .resource_start(
1750            params
1751                .game_data
1752                .power_default(3)
1753                .ok_or_else(|| {
1754                    wowlab_engine_ports::EngineError::spec_construction(
1755                        "missing power-type power_default for type_id 3",
1756                    )
1757                })?,
1758        )
1759        .secondary_resource(
1760            "combo_points",
1761            params
1762                .game_data
1763                .power_max(4)
1764                .ok_or_else(|| {
1765                    wowlab_engine_ports::EngineError::spec_construction(
1766                        "missing power-type power_max for type_id 4",
1767                    )
1768                })?,
1769        )
1770        .secondary_resource_type_id(4)
1771        .precombat_aura(AURA_STEALTH)
1772        .precombat_aura(AURA_DEADLY_POISON)
1773        .precombat_aura(AURA_AMPLIFYING_POISON)
1774        .precombat_aura(AURA_ATROPHIC_POISON)
1775        .precombat_aura(AURA_CRIPPLING_POISON)
1776        .stealth_aura(AURA::STEALTH)
1777        .aura("stealth", AURA::STEALTH, |a| aura_stealth(a, &params.game_data))
1778        .aura("vanish", AURA::VANISH, |a| aura_vanish(a, &params.game_data))
1779        .aura(
1780            "deadly_poison",
1781            AURA::DEADLY_POISON,
1782            |a| aura_deadly_poison(a, &params.game_data),
1783        )
1784        .aura(
1785            "amplifying_poison",
1786            AURA::AMPLIFYING_POISON,
1787            |a| aura_amplifying_poison(a, &params.game_data),
1788        )
1789        .aura(
1790            "instant_poison",
1791            AURA::INSTANT_POISON,
1792            |a| aura_instant_poison(a, &params.game_data),
1793        )
1794        .aura(
1795            "wound_poison",
1796            AURA::WOUND_POISON,
1797            |a| aura_wound_poison(a, &params.game_data),
1798        )
1799        .aura(
1800            "atrophic_poison",
1801            AURA::ATROPHIC_POISON,
1802            |a| aura_atrophic_poison(a, &params.game_data),
1803        )
1804        .aura(
1805            "numbing_poison",
1806            AURA::NUMBING_POISON,
1807            |a| aura_numbing_poison(a, &params.game_data),
1808        )
1809        .aura(
1810            "crippling_poison",
1811            AURA::CRIPPLING_POISON,
1812            |a| aura_crippling_poison(a, &params.game_data),
1813        )
1814        .aura(
1815            "deadly_poison_dot",
1816            AURA::DEADLY_POISON_DOT,
1817            |a| aura_deadly_poison_dot(a, &params.game_data),
1818        )
1819        .aura(
1820            "amplifying_poison_debuff",
1821            AURA::AMPLIFYING_POISON_DEBUFF,
1822            |a| aura_amplifying_poison_debuff(a, &params.game_data),
1823        )
1824        .aura("envenom", AURA::ENVENOM, |a| aura_envenom(a, &params.game_data))
1825        .aura(
1826            "slice_and_dice",
1827            AURA::SLICE_AND_DICE,
1828            |a| aura_slice_and_dice(a, &params.game_data),
1829        )
1830        .aura("blindside", AURA::BLINDSIDE, |a| aura_blindside(a, &params.game_data))
1831        .aura("alacrity", AURA::ALACRITY, |a| aura_alacrity(a, &params.game_data))
1832        .aura(
1833            "darkest_night",
1834            AURA::DARKEST_NIGHT,
1835            |a| aura_darkest_night(a, &params.game_data),
1836        )
1837        .aura(
1838            "deeper_stratagem",
1839            AURA::DEEPER_STRATAGEM,
1840            |a| aura_deeper_stratagem(a, &params.game_data),
1841        )
1842        .aura(
1843            "sanguine_stratagem",
1844            AURA::SANGUINE_STRATAGEM,
1845            |a| aura_sanguine_stratagem(a, &params.game_data),
1846        )
1847        .aura(
1848            "dragon_tempered_blades",
1849            AURA::DRAGON_TEMPERED_BLADES,
1850            |a| aura_dragon_tempered_blades(a, &params.game_data),
1851        )
1852        .aura(
1853            "inspiring_strike",
1854            AURA::INSPIRING_STRIKE,
1855            |a| aura_inspiring_strike(a, &params.game_data),
1856        )
1857        .aura(
1858            "regicides_reward",
1859            AURA::REGICIDES_REWARD,
1860            |a| aura_regicides_reward(a, &params.game_data),
1861        )
1862        .aura("garrote", AURA::GARROTE, |a| aura_garrote(a, &params.game_data))
1863        .aura("rupture", AURA::RUPTURE, |a| aura_rupture(a, &params.game_data))
1864        .aura(
1865            "internal_bleeding",
1866            AURA::INTERNAL_BLEEDING,
1867            |a| aura_internal_bleeding(a, &params.game_data),
1868        )
1869        .aura(
1870            "improved_garrote",
1871            AURA::IMPROVED_GARROTE,
1872            |a| aura_improved_garrote(a, &params.game_data),
1873        )
1874        .aura(
1875            "improved_garrote_window",
1876            AURA::IMPROVED_GARROTE_WINDOW,
1877            |a| aura_improved_garrote_window(a, &params.game_data),
1878        )
1879        .aura("deathmark", AURA::DEATHMARK, |a| aura_deathmark(a, &params.game_data))
1880        .aura("kingsbane", AURA::KINGSBANE, |a| aura_kingsbane(a, &params.game_data))
1881        .aura(
1882            "kingsbane_ramp",
1883            AURA::KINGSBANE_RAMP,
1884            |a| aura_kingsbane_ramp(a, &params.game_data),
1885        )
1886        .aura(
1887            "finish_the_job",
1888            AURA::FINISH_THE_JOB,
1889            |a| aura_finish_the_job(a, &params.game_data),
1890        )
1891        .aura(
1892            "implacable_tracker",
1893            AURA::IMPLACABLE_TRACKER,
1894            |a| aura_implacable_tracker(a, &params.game_data),
1895        )
1896        .aura(
1897            "implacable_regen",
1898            AURA::IMPLACABLE_REGEN,
1899            |a| aura_implacable_regen(a, &params.game_data),
1900        )
1901        .aura(
1902            "implacable_bonus",
1903            AURA::IMPLACABLE_BONUS,
1904            |a| aura_implacable_bonus(a, &params.game_data),
1905        )
1906        .aura(
1907            "pvp_rules_enabled_hardcoded",
1908            AURA::PVP_RULES_ENABLED_HARDCODED,
1909            |a| aura_pvp_rules_enabled_hardcoded(a, &params.game_data),
1910        )
1911        .aura(
1912            "fatebound_coin_heads",
1913            AURA::FATEBOUND_COIN_HEADS,
1914            |a| aura_fatebound_coin_heads(a, &params.game_data),
1915        )
1916        .aura(
1917            "fatebound_coin_tails",
1918            AURA::FATEBOUND_COIN_TAILS,
1919            |a| aura_fatebound_coin_tails(a, &params.game_data),
1920        )
1921        .aura(
1922            "fatebound_lucky_coin",
1923            AURA::FATEBOUND_LUCKY_COIN,
1924            |a| aura_fatebound_lucky_coin(a, &params.game_data),
1925        )
1926        .aura(
1927            "lucky_coin_counter",
1928            AURA::LUCKY_COIN_COUNTER,
1929            |a| aura_lucky_coin_counter(a, &params.game_data),
1930        )
1931        .spell("mutilate", SPELL::MUTILATE, |s| spell_mutilate(s, &params.game_data))
1932        .spell("ambush", SPELL::AMBUSH, |s| spell_ambush(s, &params.game_data))
1933        .spell("envenom", SPELL::ENVENOM, |s| spell_envenom(s, &params.game_data))
1934        .spell(
1935            "slice_and_dice",
1936            SPELL::SLICE_AND_DICE,
1937            |s| spell_slice_and_dice(s, &params.game_data),
1938        )
1939        .spell(
1940            "fan_of_knives",
1941            SPELL::FAN_OF_KNIVES,
1942            |s| spell_fan_of_knives(s, &params.game_data),
1943        )
1944        .spell(
1945            "crimson_tempest",
1946            SPELL::CRIMSON_TEMPEST,
1947            |s| spell_crimson_tempest(s, &params.game_data),
1948        )
1949        .spell(
1950            "poisoned_knife",
1951            SPELL::POISONED_KNIFE,
1952            |s| spell_poisoned_knife(s, &params.game_data),
1953        )
1954        .spell(
1955            "deadly_poison",
1956            SPELL::DEADLY_POISON,
1957            |s| spell_deadly_poison(s, &params.game_data),
1958        )
1959        .spell(
1960            "amplifying_poison",
1961            SPELL::AMPLIFYING_POISON,
1962            |s| spell_amplifying_poison(s, &params.game_data),
1963        )
1964        .spell(
1965            "instant_poison",
1966            SPELL::INSTANT_POISON,
1967            |s| spell_instant_poison(s, &params.game_data),
1968        )
1969        .spell(
1970            "wound_poison",
1971            SPELL::WOUND_POISON,
1972            |s| spell_wound_poison(s, &params.game_data),
1973        )
1974        .spell(
1975            "atrophic_poison",
1976            SPELL::ATROPHIC_POISON,
1977            |s| spell_atrophic_poison(s, &params.game_data),
1978        )
1979        .spell(
1980            "numbing_poison",
1981            SPELL::NUMBING_POISON,
1982            |s| spell_numbing_poison(s, &params.game_data),
1983        )
1984        .spell(
1985            "crippling_poison",
1986            SPELL::CRIPPLING_POISON,
1987            |s| spell_crippling_poison(s, &params.game_data),
1988        )
1989        .spell(
1990            "mutilate_mh",
1991            SPELL::MUTILATE_MH,
1992            |s| spell_mutilate_mh(s, &params.game_data),
1993        )
1994        .spell(
1995            "mutilate_oh",
1996            SPELL::MUTILATE_OH,
1997            |s| spell_mutilate_oh(s, &params.game_data),
1998        )
1999        .spell(
2000            "deadly_poison_instant",
2001            SPELL::DEADLY_POISON_INSTANT,
2002            |s| spell_deadly_poison_instant(s, &params.game_data),
2003        )
2004        .spell(
2005            "mutilated_flesh",
2006            SPELL::MUTILATED_FLESH,
2007            |s| spell_mutilated_flesh(s, &params.game_data),
2008        )
2009        .spell("garrote", SPELL::GARROTE, |s| spell_garrote(s, &params.game_data))
2010        .spell("rupture", SPELL::RUPTURE, |s| spell_rupture(s, &params.game_data))
2011        .spell(
2012            "internal_bleeding_driver",
2013            SPELL::INTERNAL_BLEEDING_DRIVER,
2014            |s| spell_internal_bleeding_driver(s, &params.game_data),
2015        )
2016        .spell("deathmark", SPELL::DEATHMARK, |s| spell_deathmark(s, &params.game_data))
2017        .spell("kingsbane", SPELL::KINGSBANE, |s| spell_kingsbane(s, &params.game_data))
2018        .spell(
2019            "implacable_strikes_nature",
2020            SPELL::IMPLACABLE_STRIKES_NATURE,
2021            |s| spell_implacable_strikes_nature(s, &params.game_data),
2022        )
2023        .spell(
2024            "implacable_strikes_physical",
2025            SPELL::IMPLACABLE_STRIKES_PHYSICAL,
2026            |s| spell_implacable_strikes_physical(s, &params.game_data),
2027        )
2028        .spell(
2029            "thistle_tea",
2030            SPELL::THISTLE_TEA,
2031            |s| spell_thistle_tea(s, &params.game_data),
2032        )
2033        .spell("vanish", SPELL::VANISH, |s| spell_vanish(s, &params.game_data))
2034        .auto_attack(|a| {
2035            a
2036                .spell_id(6603)
2037                .swing_ms(1800)
2038                .apply_base_from_data(&params.game_data)
2039                .on_swing(crate::hooks::assassination_rogue::swing_hook)
2040        })
2041        .game_data(params.game_data.clone())
2042        .talent_spell_ids(TALENTS)
2043        .talent_selections(params.talent_selections)
2044        .talent_companion_aura(TALENT::IMPROVED_GARROTE, AURA_IMPROVED_GARROTE_WINDOW)
2045        .register_impact_effect_proc_if_talent(
2046            TALENT::VENOMOUS_WOUNDS,
2047            wowlab_engine_combat::ImpactEffectProcDefinition::new(
2048                    wowlab_engine_combat::ImpactSource::Spell(SPELL::GARROTE),
2049                )
2050                .chance(1.0)
2051                .periodic_only()
2052                .gain(
2053                    params
2054                        .game_data
2055                        .base_points(wowlab_types::sim::SpellIdx::from_raw(79134), 1),
2056                ),
2057        )
2058        .register_impact_effect_proc_if_talent(
2059            TALENT::VENOMOUS_WOUNDS,
2060            wowlab_engine_combat::ImpactEffectProcDefinition::new(
2061                    wowlab_engine_combat::ImpactSource::Spell(SPELL::RUPTURE),
2062                )
2063                .chance(1.0)
2064                .periodic_only()
2065                .gain(
2066                    params
2067                        .game_data
2068                        .base_points(wowlab_types::sim::SpellIdx::from_raw(79134), 1),
2069                ),
2070        )
2071        .set_bonus_auras(params.set_bonus_auras)
2072        .encounter(params.encounter.clone());
2073    let builder = crate::generated::items::register_equipped(
2074        builder,
2075        &params.game_data,
2076        params.equipped_items,
2077    )?;
2078
2079    builder.into_draft()
2080}
2081fn new_handler(
2082    params: wowlab_engine_ports::HandlerParams<'_>,
2083) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
2084    let handler = crate::composition::compose_handler(
2085        build_combat_system_draft,
2086        &params,
2087        crate::hooks::assassination_rogue::AssassinationHandler::try_new,
2088    )?;
2089
2090    Ok(Box::new(handler))
2091}
2092static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
2093    primary_resource: ResourceType::Energy,
2094    secondary_resource: Some(ResourceType::ComboPoints),
2095    spell_ids: DECLARED_SPELL_IDS,
2096    aura_ids: DECLARED_AURA_IDS,
2097    server_proc_entries: &[],
2098    talents: TALENTS,
2099    rotation_field_schema: &[],
2100    metrics_plugin_id: None,
2101    hero_talent_trees: &[
2102        HeroTalentTreeDesc {
2103            name: "Fatebound",
2104            spells: HERO_TREE_FATEBOUND_SPELLS,
2105            auras: HERO_TREE_FATEBOUND_AURAS,
2106        },
2107    ],
2108    reported_spells: REPORTED_SPELLS,
2109    masked_passive_effects: &[],
2110    passive_effect_overrides: &[],
2111};
2112pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
2113    spec_id: SpecId::Assassination,
2114    display_name: "Assassination Rogue",
2115    metadata: DECLARED_METADATA,
2116    handler_factory: new_handler,
2117};
2118wowlab_engine_combat::smoke_test!(build_combat_system_draft);