Skip to main content

wowlab_engine_content/generated/specs/
outlaw_rogue.rs

1//! @generated by codegen-cli from manifests/specs/rogue/outlaw/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/381623>
15    pub(crate) const THISTLE_TEA: u32 = 381_623;
16    ///<https://wowlab.gg/inspect/spell/1856>
17    pub(crate) const VANISH: u32 = 1856;
18    ///<https://wowlab.gg/inspect/spell/193315>
19    pub(crate) const SINISTER_STRIKE: u32 = 193_315;
20    ///<https://wowlab.gg/inspect/spell/197834>
21    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK: u32 = 197_834;
22    ///<https://wowlab.gg/inspect/spell/185763>
23    pub(crate) const PISTOL_SHOT: u32 = 185_763;
24    ///<https://wowlab.gg/inspect/spell/8676>
25    pub(crate) const AMBUSH: u32 = 8676;
26    ///<https://wowlab.gg/inspect/spell/2098>
27    pub(crate) const DISPATCH: u32 = 2098;
28    ///<https://wowlab.gg/inspect/spell/315341>
29    pub(crate) const BETWEEN_THE_EYES: u32 = 315_341;
30    ///<https://wowlab.gg/inspect/spell/196819>
31    pub(crate) const EVISCERATE: u32 = 196_819;
32    ///<https://wowlab.gg/inspect/spell/315496>
33    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
34    ///<https://wowlab.gg/inspect/spell/315584>
35    pub(crate) const INSTANT_POISON: u32 = 315_584;
36    ///<https://wowlab.gg/inspect/spell/8679>
37    pub(crate) const WOUND_POISON: u32 = 8679;
38    ///<https://wowlab.gg/inspect/spell/381637>
39    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
40    ///<https://wowlab.gg/inspect/spell/5761>
41    pub(crate) const NUMBING_POISON: u32 = 5761;
42    ///<https://wowlab.gg/inspect/spell/3408>
43    pub(crate) const CRIPPLING_POISON: u32 = 3408;
44    ///<https://wowlab.gg/inspect/spell/86392>
45    pub(crate) const MAIN_GAUCHE: u32 = 86392;
46    ///<https://wowlab.gg/inspect/spell/1265918>
47    pub(crate) const SCOUNDREL_STRIKE: u32 = 1_265_918;
48    ///<https://wowlab.gg/inspect/spell/315585>
49    pub(crate) const INSTANT_POISON_DAMAGE: u32 = 315_585;
50    ///<https://wowlab.gg/inspect/spell/1766>
51    pub(crate) const KICK: u32 = 1766;
52    ///<https://wowlab.gg/inspect/spell/315508>
53    pub(crate) const ROLL_THE_BONES: u32 = 315_508;
54    ///<https://wowlab.gg/inspect/spell/13750>
55    pub(crate) const ADRENALINE_RUSH: u32 = 13750;
56    ///<https://wowlab.gg/inspect/spell/13877>
57    pub(crate) const BLADE_FLURRY: u32 = 13877;
58    ///<https://wowlab.gg/inspect/spell/429951>
59    pub(crate) const BLADE_FLURRY_INSTANT_ATTACK: u32 = 429_951;
60    ///<https://wowlab.gg/inspect/spell/271877>
61    pub(crate) const BLADE_RUSH: u32 = 271_877;
62    ///<https://wowlab.gg/inspect/spell/51690>
63    pub(crate) const KILLING_SPREE: u32 = 51690;
64    ///<https://wowlab.gg/inspect/spell/381989>
65    pub(crate) const KEEP_IT_ROLLING: u32 = 381_989;
66    ///<https://wowlab.gg/inspect/spell/1277933>
67    pub(crate) const PREPARATION: u32 = 1_277_933;
68    ///<https://wowlab.gg/inspect/spell/271881>
69    pub(crate) const BLADE_RUSH_ATTACK: u32 = 271_881;
70}
71pub(crate) mod AURA {
72    ///<https://wowlab.gg/inspect/spell/315496>
73    pub(crate) const SLICE_AND_DICE: u32 = 315_496;
74    ///<https://wowlab.gg/inspect/spell/195627>
75    pub(crate) const OPPORTUNITY: u32 = 195_627;
76    ///<https://wowlab.gg/inspect/spell/386270>
77    pub(crate) const AUDACITY: u32 = 386_270;
78    ///<https://wowlab.gg/inspect/spell/315341>
79    pub(crate) const BETWEEN_THE_EYES: u32 = 315_341;
80    ///<https://wowlab.gg/inspect/spell/1784>
81    pub(crate) const STEALTH: u32 = 1784;
82    ///<https://wowlab.gg/inspect/spell/1856>
83    pub(crate) const VANISH: u32 = 1856;
84    ///<https://wowlab.gg/inspect/spell/115192>
85    pub(crate) const SUBTERFUGE: u32 = 115_192;
86    ///<https://wowlab.gg/inspect/spell/383281>
87    pub(crate) const HIDDEN_OPPORTUNITY: u32 = 383_281;
88    ///<https://wowlab.gg/inspect/spell/381878>
89    pub(crate) const DEFT_MANEUVERS: u32 = 381_878;
90    ///<https://wowlab.gg/inspect/spell/14983>
91    pub(crate) const VIGOR: u32 = 14983;
92    ///<https://wowlab.gg/inspect/spell/1301405>
93    pub(crate) const FANG_STRIKE: u32 = 1_301_405;
94    ///<https://wowlab.gg/inspect/spell/1214933>
95    pub(crate) const ONE_OF_A_KIND: u32 = 1_214_933;
96    ///<https://wowlab.gg/inspect/spell/1214934>
97    pub(crate) const DOUBLE_TROUBLE: u32 = 1_214_934;
98    ///<https://wowlab.gg/inspect/spell/1214935>
99    pub(crate) const TRIPLE_THREAT: u32 = 1_214_935;
100    ///<https://wowlab.gg/inspect/spell/1214937>
101    pub(crate) const JACKPOT: u32 = 1_214_937;
102    ///<https://wowlab.gg/inspect/spell/256171>
103    pub(crate) const LOADED_DICE: u32 = 256_171;
104    ///<https://wowlab.gg/inspect/spell/13750>
105    pub(crate) const ADRENALINE_RUSH: u32 = 13750;
106    ///<https://wowlab.gg/inspect/spell/13877>
107    pub(crate) const BLADE_FLURRY: u32 = 13877;
108    ///<https://wowlab.gg/inspect/spell/315584>
109    pub(crate) const INSTANT_POISON: u32 = 315_584;
110    ///<https://wowlab.gg/inspect/spell/8679>
111    pub(crate) const WOUND_POISON: u32 = 8679;
112    ///<https://wowlab.gg/inspect/spell/381637>
113    pub(crate) const ATROPHIC_POISON: u32 = 381_637;
114    ///<https://wowlab.gg/inspect/spell/5761>
115    pub(crate) const NUMBING_POISON: u32 = 5761;
116    ///<https://wowlab.gg/inspect/spell/3408>
117    pub(crate) const CRIPPLING_POISON: u32 = 3408;
118    ///<https://wowlab.gg/inspect/spell/395422>
119    pub(crate) const IMPROVED_ADRENALINE_RUSH: u32 = 395_422;
120    ///<https://wowlab.gg/inspect/spell/271896>
121    pub(crate) const BLADE_RUSH_ENERGIZE: u32 = 271_896;
122    ///<https://wowlab.gg/inspect/spell/1265931>
123    pub(crate) const PALMED_BULLETS: u32 = 1_265_931;
124    ///<https://wowlab.gg/inspect/spell/1265935>
125    pub(crate) const GRAVEDIGGER: u32 = 1_265_935;
126    ///<https://wowlab.gg/inspect/spell/1259613>
127    pub(crate) const DEADLY_PURSUIT_WAIT: u32 = 1_259_613;
128    ///<https://wowlab.gg/inspect/spell/1259614>
129    pub(crate) const DEADLY_PURSUIT_CDR: u32 = 1_259_614;
130    ///<https://wowlab.gg/inspect/spell/134735>
131    pub(crate) const PVP_RULES_ENABLED_HARDCODED: u32 = 134_735;
132    ///<https://wowlab.gg/inspect/spell/452923>
133    pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
134    ///<https://wowlab.gg/inspect/spell/452917>
135    pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
136    ///<https://wowlab.gg/inspect/spell/1248971>
137    pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
138    ///<https://wowlab.gg/inspect/spell/1249093>
139    pub(crate) const LUCKY_COIN_COUNTER: u32 = 1_249_093;
140}
141pub(crate) mod TALENT {
142    ///<https://wowlab.gg/inspect/spell/381828>
143    pub(crate) const ACE_UP_YOUR_SLEEVE: u32 = 381_828;
144    ///<https://wowlab.gg/inspect/spell/13750>
145    pub(crate) const ADRENALINE_RUSH: u32 = 13750;
146    ///<https://wowlab.gg/inspect/spell/386270>
147    pub(crate) const AUDACITY: u32 = 386_270;
148    ///<https://wowlab.gg/inspect/spell/13877>
149    pub(crate) const BLADE_FLURRY: u32 = 13877;
150    ///<https://wowlab.gg/inspect/spell/271877>
151    pub(crate) const BLADE_RUSH: u32 = 271_877;
152    ///<https://wowlab.gg/inspect/spell/1259612>
153    pub(crate) const DEADLY_PURSUIT: u32 = 1_259_612;
154    ///<https://wowlab.gg/inspect/spell/381878>
155    pub(crate) const DEFT_MANEUVERS: u32 = 381_878;
156    ///<https://wowlab.gg/inspect/spell/394321>
157    pub(crate) const DEVIOUS_STRATAGEM: u32 = 394_321;
158    ///<https://wowlab.gg/inspect/spell/381846>
159    pub(crate) const FAN_THE_HAMMER: u32 = 381_846;
160    ///<https://wowlab.gg/inspect/spell/35551>
161    pub(crate) const FATAL_FLOURISH: u32 = 35551;
162    ///<https://wowlab.gg/inspect/spell/1265861>
163    pub(crate) const GRAVEDIGGER_1: u32 = 1_265_861;
164    ///<https://wowlab.gg/inspect/spell/1265862>
165    pub(crate) const GRAVEDIGGER_2: u32 = 1_265_862;
166    ///<https://wowlab.gg/inspect/spell/1265863>
167    pub(crate) const GRAVEDIGGER_3: u32 = 1_265_863;
168    ///<https://wowlab.gg/inspect/spell/383281>
169    pub(crate) const HIDDEN_OPPORTUNITY: u32 = 383_281;
170    ///<https://wowlab.gg/inspect/spell/395422>
171    pub(crate) const IMPROVED_ADRENALINE_RUSH: u32 = 395_422;
172    ///<https://wowlab.gg/inspect/spell/381989>
173    pub(crate) const KEEP_IT_ROLLING: u32 = 381_989;
174    ///<https://wowlab.gg/inspect/spell/51690>
175    pub(crate) const KILLING_SPREE: u32 = 51690;
176    ///<https://wowlab.gg/inspect/spell/256170>
177    pub(crate) const LOADED_DICE: u32 = 256_170;
178    ///<https://wowlab.gg/inspect/spell/1256630>
179    pub(crate) const MENACING_RUSH: u32 = 1_256_630;
180    ///<https://wowlab.gg/inspect/spell/279876>
181    pub(crate) const OPPORTUNITY: u32 = 279_876;
182    ///<https://wowlab.gg/inspect/spell/1277933>
183    pub(crate) const PREPARATION: u32 = 1_277_933;
184    ///<https://wowlab.gg/inspect/spell/196938>
185    pub(crate) const QUICK_DRAW: u32 = 196_938;
186    ///<https://wowlab.gg/inspect/spell/79096>
187    pub(crate) const RESTLESS_BLADES: u32 = 79096;
188    ///<https://wowlab.gg/inspect/spell/14161>
189    pub(crate) const RUTHLESSNESS: u32 = 14161;
190    ///<https://wowlab.gg/inspect/spell/381839>
191    pub(crate) const SLEIGHT_OF_HAND: u32 = 381_839;
192    ///<https://wowlab.gg/inspect/spell/381990>
193    pub(crate) const SUMMARILY_DISPATCHED: u32 = 381_990;
194    ///<https://wowlab.gg/inspect/spell/469779>
195    pub(crate) const THISTLE_TEA: u32 = 469_779;
196    ///<https://wowlab.gg/inspect/spell/1259485>
197    pub(crate) const ZERO_IN: u32 = 1_259_485;
198}
199pub(crate) mod SET_BONUS {
200    ///<https://wowlab.gg/inspect/spell/1296588>
201    pub(crate) const MID2_OUTLAW_2PC: u32 = 1_296_588;
202    ///<https://wowlab.gg/inspect/spell/1296589>
203    pub(crate) const MID2_OUTLAW_4PC: u32 = 1_296_589;
204}
205pub(crate) mod REPORTED_SPELL {
206    ///<https://wowlab.gg/inspect/spell/271881>
207    pub(crate) const BLADE_RUSH_ATTACK: u32 = 271_881;
208    ///<https://wowlab.gg/inspect/spell/452538>
209    pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_538;
210    ///<https://wowlab.gg/inspect/spell/315585>
211    pub(crate) const INSTANT_POISON_DAMAGE: u32 = 315_585;
212    ///<https://wowlab.gg/inspect/spell/57841>
213    pub(crate) const KILLING_SPREE_MH: u32 = 57841;
214    ///<https://wowlab.gg/inspect/spell/57842>
215    pub(crate) const KILLING_SPREE_OH: u32 = 57842;
216    ///<https://wowlab.gg/inspect/spell/86392>
217    pub(crate) const MAIN_GAUCHE: u32 = 86392;
218    ///<https://wowlab.gg/inspect/spell/1265918>
219    pub(crate) const SCOUNDREL_STRIKE: u32 = 1_265_918;
220    ///<https://wowlab.gg/inspect/spell/197834>
221    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK: u32 = 197_834;
222}
223pub(crate) mod HERO {
224    pub(crate) mod FATEBOUND {
225        pub(crate) mod SPELL {
226            ///<https://wowlab.gg/inspect/spell/1276816>
227            pub(crate) const CONTROLLED_CHAOS: u32 = 1_276_816;
228            ///<https://wowlab.gg/inspect/spell/454419>
229            pub(crate) const DEAL_FATE: u32 = 454_419;
230            ///<https://wowlab.gg/inspect/spell/1249194>
231            pub(crate) const DELIVERED_DOOM: u32 = 1_249_194;
232            ///<https://wowlab.gg/inspect/spell/454435>
233            pub(crate) const DESTINY_DEFINED: u32 = 454_435;
234            ///<https://wowlab.gg/inspect/spell/453457>
235            pub(crate) const EDGE_CASE: u32 = 453_457;
236            ///<https://wowlab.gg/inspect/spell/452538>
237            pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_538;
238            ///<https://wowlab.gg/inspect/spell/452536>
239            pub(crate) const HAND_OF_FATE: u32 = 452_536;
240            ///<https://wowlab.gg/inspect/spell/1248970>
241            pub(crate) const LUCKY_COIN: u32 = 1_248_970;
242            ///<https://wowlab.gg/inspect/spell/453428>
243            pub(crate) const MEAN_STREAK: u32 = 453_428;
244            ///<https://wowlab.gg/inspect/spell/1276809>
245            pub(crate) const RAVENHOLDT_MINT: u32 = 1_276_809;
246            ///<https://wowlab.gg/inspect/spell/1249204>
247            pub(crate) const RUSH_TO_THE_INEVITABLE: u32 = 1_249_204;
248        }
249        pub(crate) mod AURA {
250            ///<https://wowlab.gg/inspect/spell/452923>
251            pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
252            ///<https://wowlab.gg/inspect/spell/452917>
253            pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
254            ///<https://wowlab.gg/inspect/spell/1248971>
255            pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
256        }
257    }
258    pub(crate) mod TRICKSTER {
259        pub(crate) mod SPELL {
260            ///<https://wowlab.gg/inspect/spell/441519>
261            pub(crate) const COUP_DE_GRACE: u32 = 441_519;
262            ///<https://wowlab.gg/inspect/spell/462127>
263            pub(crate) const COUP_DE_GRACE_DAMAGE_1: u32 = 462_127;
264            ///<https://wowlab.gg/inspect/spell/462128>
265            pub(crate) const COUP_DE_GRACE_DAMAGE_2: u32 = 462_128;
266            ///<https://wowlab.gg/inspect/spell/462129>
267            pub(crate) const COUP_DE_GRACE_DAMAGE_3: u32 = 462_129;
268            ///<https://wowlab.gg/inspect/spell/459485>
269            pub(crate) const UNSEEN_BLADE: u32 = 459_485;
270        }
271        pub(crate) mod AURA {
272            ///<https://wowlab.gg/inspect/spell/441274>
273            pub(crate) const DISORIENTING_STRIKES: u32 = 441_274;
274            ///<https://wowlab.gg/inspect/spell/441786>
275            pub(crate) const ESCALATING_BLADE: u32 = 441_786;
276            ///<https://wowlab.gg/inspect/spell/441224>
277            pub(crate) const FAZED: u32 = 441_224;
278            ///<https://wowlab.gg/inspect/spell/441326>
279            pub(crate) const FLAWLESS_FORM: u32 = 441_326;
280            ///<https://wowlab.gg/inspect/spell/459485>
281            pub(crate) const UNSEEN_BLADE_CD: u32 = 459_485;
282        }
283    }
284}
285static HERO_TREE_FATEBOUND_SPELLS: &[(&str, u32)] = &[
286    ("CONTROLLED_CHAOS", 1_276_816),
287    ("DEAL_FATE", 454_419),
288    ("DELIVERED_DOOM", 1_249_194),
289    ("DESTINY_DEFINED", 454_435),
290    ("EDGE_CASE", 453_457),
291    ("FATEBOUND_COIN_TAILS", 452_538),
292    ("HAND_OF_FATE", 452_536),
293    ("LUCKY_COIN", 1_248_970),
294    ("MEAN_STREAK", 453_428),
295    ("RAVENHOLDT_MINT", 1_276_809),
296    ("RUSH_TO_THE_INEVITABLE", 1_249_204),
297];
298static HERO_TREE_FATEBOUND_AURAS: &[(&str, u32)] = &[
299    ("FATEBOUND_COIN_HEADS", 452_923),
300    ("FATEBOUND_COIN_TAILS", 452_917),
301    ("FATEBOUND_LUCKY_COIN", 1_248_971),
302];
303static HERO_TREE_TRICKSTER_SPELLS: &[(&str, u32)] = &[
304    ("COUP_DE_GRACE", 441_519),
305    ("COUP_DE_GRACE_DAMAGE_1", 462_127),
306    ("COUP_DE_GRACE_DAMAGE_2", 462_128),
307    ("COUP_DE_GRACE_DAMAGE_3", 462_129),
308    ("UNSEEN_BLADE", 459_485),
309];
310static HERO_TREE_TRICKSTER_AURAS: &[(&str, u32)] = &[
311    ("DISORIENTING_STRIKES", 441_274),
312    ("ESCALATING_BLADE", 441_786),
313    ("FAZED", 441_224),
314    ("FLAWLESS_FORM", 441_326),
315    ("UNSEEN_BLADE_CD", 459_485),
316];
317pub(crate) mod DAMAGE_SPELL {
318    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381623;
319    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1856;
320    pub(crate) const SINISTER_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_193315;
321    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_197834;
322    pub(crate) const PISTOL_SHOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_185763;
323    pub(crate) const AMBUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_8676;
324    pub(crate) const DISPATCH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_2098;
325    pub(crate) const BETWEEN_THE_EYES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315341;
326    pub(crate) const EVISCERATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_196819;
327    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315496;
328    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315584;
329    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_8679;
330    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381637;
331    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_5761;
332    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_3408;
333    pub(crate) const MAIN_GAUCHE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_86392;
334    pub(crate) const SCOUNDREL_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265918;
335    pub(crate) const INSTANT_POISON_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315585;
336    pub(crate) const KICK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1766;
337    pub(crate) const ROLL_THE_BONES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315508;
338    pub(crate) const ADRENALINE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13750;
339    pub(crate) const BLADE_FLURRY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13877;
340    pub(crate) const BLADE_FLURRY_INSTANT_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_429951;
341    pub(crate) const BLADE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_271877;
342    pub(crate) const KILLING_SPREE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_51690;
343    pub(crate) const KEEP_IT_ROLLING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381989;
344    pub(crate) const PREPARATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1277933;
345    pub(crate) const BLADE_RUSH_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_271881;
346    pub(crate) const CONTROLLED_CHAOS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1276816;
347    pub(crate) const DEAL_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_454419;
348    pub(crate) const DELIVERED_DOOM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1249194;
349    pub(crate) const DESTINY_DEFINED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_454435;
350    pub(crate) const EDGE_CASE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_453457;
351    pub(crate) const FATEBOUND_COIN_TAILS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_452538;
352    pub(crate) const HAND_OF_FATE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_452536;
353    pub(crate) const LUCKY_COIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1248970;
354    pub(crate) const MEAN_STREAK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_453428;
355    pub(crate) const RAVENHOLDT_MINT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1276809;
356    pub(crate) const RUSH_TO_THE_INEVITABLE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1249204;
357    pub(crate) const COUP_DE_GRACE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_441519;
358    pub(crate) const COUP_DE_GRACE_DAMAGE_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_462127;
359    pub(crate) const COUP_DE_GRACE_DAMAGE_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_462128;
360    pub(crate) const COUP_DE_GRACE_DAMAGE_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_462129;
361    pub(crate) const UNSEEN_BLADE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_459485;
362}
363pub(crate) mod DAMAGE_AURA {
364    pub(crate) const SLICE_AND_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315496;
365    pub(crate) const OPPORTUNITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_195627;
366    pub(crate) const AUDACITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_386270;
367    pub(crate) const BETWEEN_THE_EYES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315341;
368    pub(crate) const STEALTH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1784;
369    pub(crate) const VANISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1856;
370    pub(crate) const SUBTERFUGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_115192;
371    pub(crate) const HIDDEN_OPPORTUNITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_383281;
372    pub(crate) const DEFT_MANEUVERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381878;
373    pub(crate) const VIGOR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_14983;
374    pub(crate) const FANG_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1301405;
375    pub(crate) const ONE_OF_A_KIND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1214933;
376    pub(crate) const DOUBLE_TROUBLE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1214934;
377    pub(crate) const TRIPLE_THREAT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1214935;
378    pub(crate) const JACKPOT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1214937;
379    pub(crate) const LOADED_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_256171;
380    pub(crate) const ADRENALINE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13750;
381    pub(crate) const BLADE_FLURRY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13877;
382    pub(crate) const INSTANT_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315584;
383    pub(crate) const WOUND_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_8679;
384    pub(crate) const ATROPHIC_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381637;
385    pub(crate) const NUMBING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_5761;
386    pub(crate) const CRIPPLING_POISON: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_3408;
387    pub(crate) const IMPROVED_ADRENALINE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_395422;
388    pub(crate) const BLADE_RUSH_ENERGIZE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_271896;
389    pub(crate) const PALMED_BULLETS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265931;
390    pub(crate) const GRAVEDIGGER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265935;
391    pub(crate) const DEADLY_PURSUIT_WAIT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1259613;
392    pub(crate) const DEADLY_PURSUIT_CDR: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1259614;
393    pub(crate) const PVP_RULES_ENABLED_HARDCODED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_134735;
394    pub(crate) const FATEBOUND_COIN_HEADS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_452923;
395    pub(crate) const FATEBOUND_COIN_TAILS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_452917;
396    pub(crate) const FATEBOUND_LUCKY_COIN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1248971;
397    pub(crate) const LUCKY_COIN_COUNTER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1249093;
398}
399pub(crate) mod DAMAGE_TALENT {
400    pub(crate) const ACE_UP_YOUR_SLEEVE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381828;
401    pub(crate) const ADRENALINE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13750;
402    pub(crate) const AUDACITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_386270;
403    pub(crate) const BLADE_FLURRY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_13877;
404    pub(crate) const BLADE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_271877;
405    pub(crate) const DEADLY_PURSUIT: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1259612;
406    pub(crate) const DEFT_MANEUVERS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381878;
407    pub(crate) const DEVIOUS_STRATAGEM: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_394321;
408    pub(crate) const FAN_THE_HAMMER: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381846;
409    pub(crate) const FATAL_FLOURISH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_35551;
410    pub(crate) const GRAVEDIGGER_1: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265861;
411    pub(crate) const GRAVEDIGGER_2: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265862;
412    pub(crate) const GRAVEDIGGER_3: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265863;
413    pub(crate) const HIDDEN_OPPORTUNITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_383281;
414    pub(crate) const IMPROVED_ADRENALINE_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_395422;
415    pub(crate) const KEEP_IT_ROLLING: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381989;
416    pub(crate) const KILLING_SPREE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_51690;
417    pub(crate) const LOADED_DICE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_256170;
418    pub(crate) const MENACING_RUSH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1256630;
419    pub(crate) const OPPORTUNITY: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_279876;
420    pub(crate) const PREPARATION: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1277933;
421    pub(crate) const QUICK_DRAW: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_196938;
422    pub(crate) const RESTLESS_BLADES: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_79096;
423    pub(crate) const RUTHLESSNESS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_14161;
424    pub(crate) const SLEIGHT_OF_HAND: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381839;
425    pub(crate) const SUMMARILY_DISPATCHED: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_381990;
426    pub(crate) const THISTLE_TEA: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_469779;
427    pub(crate) const ZERO_IN: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1259485;
428}
429pub(crate) mod DAMAGE_REPORTED {
430    pub(crate) const BLADE_RUSH_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_271881;
431    pub(crate) const FATEBOUND_COIN_TAILS: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_452538;
432    pub(crate) const INSTANT_POISON_DAMAGE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_315585;
433    pub(crate) const KILLING_SPREE_MH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_57841;
434    pub(crate) const KILLING_SPREE_OH: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_57842;
435    pub(crate) const MAIN_GAUCHE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_86392;
436    pub(crate) const SCOUNDREL_STRIKE: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_1265918;
437    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK: wowlab_engine_combat::DamageActionId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ACTION::SPELL_197834;
438}
439pub(crate) mod DAMAGE_EFFECT {
440    pub(crate) const ACE_UP_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_381828_EFFECT_1;
441    pub(crate) const ACE_UP_ENERGIZE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_394120_EFFECT_1;
442    pub(crate) const BLADE_FLURRY_CLEAVE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_13877_EFFECT_2;
443    pub(crate) const BLADE_FLURRY_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_22482_EFFECT_1;
444    pub(crate) const BLADE_FLURRY_TARGETS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_13877_EFFECT_3;
445    pub(crate) const BLADE_RUSH_ATTACK_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_271881_EFFECT_1;
446    pub(crate) const COIN_HEADS_INITIAL: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_452923_EFFECT_4;
447    pub(crate) const BETWEEN_THE_EYES_SUMMARILY_DISPATCHED: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_315341_EFFECT_4;
448    pub(crate) const COIN_HEADS_PER_STACK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_452923_EFFECT_1;
449    pub(crate) const COIN_HEADS_PER_STACK_PERIODIC: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_452923_EFFECT_2;
450    pub(crate) const DEAL_FATE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_454419_EFFECT_1;
451    pub(crate) const DELIVERED_DOOM_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1249194_EFFECT_1;
452    pub(crate) const DELIVERED_DOOM_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1249194_EFFECT_2;
453    pub(crate) const DESTINY_DEFINED_ODDS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_454435_EFFECT_3;
454    pub(crate) const DISPATCH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_2098_EFFECT_1;
455    pub(crate) const FAN_THE_HAMMER_EXTRA: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_381846_EFFECT_1;
456    pub(crate) const FAN_THE_HAMMER_REDUCTION: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_381846_EFFECT_3;
457    pub(crate) const FATEBOUND_COIN_TAILS_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_452538_EFFECT_1;
458    pub(crate) const GRAVEDIGGER_ENERGIZE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1279356_EFFECT_1;
459    pub(crate) const HAND_OF_FATE_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_452536_EFFECT_1;
460    pub(crate) const HIDDEN_OPPORTUNITY_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_383281_EFFECT_1;
461    pub(crate) const INSTANT_POISON_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_315585_EFFECT_1;
462    pub(crate) const JACKPOT_RB: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1214937_EFFECT_4;
463    pub(crate) const KILLING_SPREE_MH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_57841_EFFECT_1;
464    pub(crate) const KILLING_SPREE_OH_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_57842_EFFECT_1;
465    pub(crate) const KILLING_SPREE_EXCESS_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_51690_EFFECT_4;
466    pub(crate) const MID2_OUTLAW_2PC_DISPATCH: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1296588_EFFECT_1;
467    pub(crate) const MID2_OUTLAW_4PC_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1296589_EFFECT_1;
468    pub(crate) const LUCKY_COIN_FLIPS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1248970_EFFECT_1;
469    pub(crate) const LUCKY_COIN_ODDS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1248971_EFFECT_5;
470    pub(crate) const MAIN_GAUCHE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_86392_EFFECT_1;
471    pub(crate) const MAIN_GAUCHE_MASTERY_COEF: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_76806_EFFECT_2;
472    pub(crate) const MEAN_STREAK_ODDS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_453428_EFFECT_1;
473    pub(crate) const PALMED_BULLETS_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1265863_EFFECT_1;
474    pub(crate) const PISTOL_SHOT_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_185763_EFFECT_1;
475    pub(crate) const QUICK_DRAW_ENERGIZE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1254567_EFFECT_1;
476    pub(crate) const RAVENHOLDT_MINT_HEADS: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1276809_EFFECT_1;
477    pub(crate) const RESTLESS_BLADES_CDR: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_79096_EFFECT_1;
478    pub(crate) const RUTHLESSNESS_CP: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_14161_EFFECT_1;
479    pub(crate) const SUMMARILY_DISPATCHED_DMG: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_381990_EFFECT_2;
480    pub(crate) const SCOUNDREL_CP_THRESHOLD: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1265862_EFFECT_1;
481    pub(crate) const SCOUNDREL_STRIKE_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1265918_EFFECT_1;
482    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_197834_EFFECT_1;
483    pub(crate) const SLEIGHT_OF_HAND_CHANCE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_381839_EFFECT_1;
484    pub(crate) const BLADE_RUSH_PRIMARY_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_271881_EFFECT_2;
485    pub(crate) const BLADE_RUSH_SECONDARY_MULT: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_271877_EFFECT_1;
486    pub(crate) const CONTROLLED_CHAOS_STREAK: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1276816_EFFECT_1;
487    pub(crate) const RUSH_ENERGY: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1249204_EFFECT_2;
488    pub(crate) const RUSH_ENERGY_EDGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_1249204_EFFECT_4;
489    pub(crate) const BLADE_FLURRY_INSTANT_ATTACK_DAMAGE: wowlab_engine_combat::DamageEffectId = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::EFFECT::SPELL_429951_EFFECT_1;
490}
491pub(crate) const AURA_SLICE_AND_DICE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_SLICE_AND_DICE
492    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
493pub(crate) const AURA_OPPORTUNITY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_OPPORTUNITY
494    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
495pub(crate) const AURA_AUDACITY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_AUDACITY
496    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
497pub(crate) const AURA_BETWEEN_THE_EYES: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_BETWEEN_THE_EYES
498    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
499pub(crate) const AURA_STEALTH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_STEALTH
500    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
501pub(crate) const AURA_VANISH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_VANISH
502    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
503pub(crate) const AURA_SUBTERFUGE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_SUBTERFUGE
504    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
505pub(crate) const AURA_HIDDEN_OPPORTUNITY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_HIDDEN_OPPORTUNITY
506    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
507pub(crate) const AURA_DEFT_MANEUVERS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_DEFT_MANEUVERS
508    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
509pub(crate) const AURA_VIGOR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_VIGOR
510    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
511pub(crate) const AURA_FANG_STRIKE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_FANG_STRIKE
512    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
513pub(crate) const AURA_ONE_OF_A_KIND: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_ONE_OF_A_KIND
514    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
515pub(crate) const AURA_DOUBLE_TROUBLE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_DOUBLE_TROUBLE
516    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
517pub(crate) const AURA_TRIPLE_THREAT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_TRIPLE_THREAT
518    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
519pub(crate) const AURA_JACKPOT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_JACKPOT
520    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
521pub(crate) const AURA_LOADED_DICE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_LOADED_DICE
522    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
523pub(crate) const AURA_ADRENALINE_RUSH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_ADRENALINE_RUSH
524    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
525pub(crate) const AURA_BLADE_FLURRY: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_BLADE_FLURRY
526    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
527pub(crate) const AURA_INSTANT_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_INSTANT_POISON
528    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
529pub(crate) const AURA_WOUND_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_WOUND_POISON
530    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
531pub(crate) const AURA_ATROPHIC_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_ATROPHIC_POISON
532    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
533pub(crate) const AURA_NUMBING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_NUMBING_POISON
534    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
535pub(crate) const AURA_CRIPPLING_POISON: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_CRIPPLING_POISON
536    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
537pub(crate) const AURA_IMPROVED_ADRENALINE_RUSH: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_IMPROVED_ADRENALINE_RUSH
538    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
539pub(crate) const AURA_BLADE_RUSH_ENERGIZE: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_BLADE_RUSH_ENERGIZE
540    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
541pub(crate) const AURA_PALMED_BULLETS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_PALMED_BULLETS
542    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
543pub(crate) const AURA_GRAVEDIGGER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_GRAVEDIGGER
544    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
545pub(crate) const AURA_DEADLY_PURSUIT_WAIT: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_DEADLY_PURSUIT_WAIT
546    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
547pub(crate) const AURA_DEADLY_PURSUIT_CDR: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_DEADLY_PURSUIT_CDR
548    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
549pub(crate) const AURA_PVP_RULES_ENABLED_HARDCODED: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_PVP_RULES_ENABLED_HARDCODED
550    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
551pub(crate) const AURA_FATEBOUND_COIN_HEADS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_FATEBOUND_COIN_HEADS
552    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
553pub(crate) const AURA_FATEBOUND_COIN_TAILS: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_FATEBOUND_COIN_TAILS
554    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
555pub(crate) const AURA_FATEBOUND_LUCKY_COIN: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_FATEBOUND_LUCKY_COIN
556    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
557pub(crate) const AURA_LUCKY_COIN_COUNTER: LocalAuraIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::AURA_LUCKY_COIN_COUNTER
558    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
559pub(crate) const AURA_COUNT: usize = 34;
560const _: () = assert!(
561    AURA_COUNT == 34, "AURA index ABI: count changed -- update positional hook consumers"
562);
563pub(crate) const SPELL_THISTLE_TEA: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_THISTLE_TEA
564    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
565pub(crate) const SPELL_VANISH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_VANISH
566    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
567pub(crate) const SPELL_SINISTER_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_SINISTER_STRIKE
568    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
569pub(crate) const SPELL_SINISTER_STRIKE_EXTRA_ATTACK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_SINISTER_STRIKE_EXTRA_ATTACK
570    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
571pub(crate) const SPELL_PISTOL_SHOT: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_PISTOL_SHOT
572    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
573pub(crate) const SPELL_AMBUSH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_AMBUSH
574    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
575pub(crate) const SPELL_DISPATCH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_DISPATCH
576    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
577pub(crate) const SPELL_BETWEEN_THE_EYES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_BETWEEN_THE_EYES
578    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
579pub(crate) const SPELL_EVISCERATE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_EVISCERATE
580    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
581pub(crate) const SPELL_SLICE_AND_DICE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_SLICE_AND_DICE
582    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
583pub(crate) const SPELL_INSTANT_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_INSTANT_POISON
584    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
585pub(crate) const SPELL_WOUND_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_WOUND_POISON
586    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
587pub(crate) const SPELL_ATROPHIC_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_ATROPHIC_POISON
588    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
589pub(crate) const SPELL_NUMBING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_NUMBING_POISON
590    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
591pub(crate) const SPELL_CRIPPLING_POISON: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_CRIPPLING_POISON
592    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
593pub(crate) const SPELL_MAIN_GAUCHE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_MAIN_GAUCHE
594    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
595pub(crate) const SPELL_SCOUNDREL_STRIKE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_SCOUNDREL_STRIKE
596    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
597pub(crate) const SPELL_INSTANT_POISON_DAMAGE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_INSTANT_POISON_DAMAGE
598    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
599pub(crate) const SPELL_KICK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_KICK
600    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
601pub(crate) const SPELL_ROLL_THE_BONES: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_ROLL_THE_BONES
602    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
603pub(crate) const SPELL_ADRENALINE_RUSH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_ADRENALINE_RUSH
604    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
605pub(crate) const SPELL_BLADE_FLURRY: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_BLADE_FLURRY
606    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
607pub(crate) const SPELL_BLADE_FLURRY_INSTANT_ATTACK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_BLADE_FLURRY_INSTANT_ATTACK
608    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
609pub(crate) const SPELL_BLADE_RUSH: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_BLADE_RUSH
610    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
611pub(crate) const SPELL_KILLING_SPREE: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_KILLING_SPREE
612    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
613pub(crate) const SPELL_KEEP_IT_ROLLING: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_KEEP_IT_ROLLING
614    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
615pub(crate) const SPELL_PREPARATION: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_PREPARATION
616    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
617pub(crate) const SPELL_BLADE_RUSH_ATTACK: LocalSpellIdx = wowlab_engine_combat::generated_identities::specs::outlaw_rogue::SPELL_BLADE_RUSH_ATTACK
618    .bind(wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF);
619pub(crate) const SPELL_COUNT: usize = 28;
620const _: () = assert!(
621    SPELL_COUNT == 28,
622    "SPELL index ABI: count changed -- update positional hook consumers"
623);
624pub(crate) mod EFFECT {
625    ///<https://wowlab.gg/inspect/spell/381828>
626    pub(crate) const ACE_UP_CHANCE: (u32, u8) = (381_828, 1);
627    ///<https://wowlab.gg/inspect/spell/394120>
628    pub(crate) const ACE_UP_ENERGIZE: (u32, u8) = (394_120, 1);
629    ///<https://wowlab.gg/inspect/spell/13877>
630    pub(crate) const BLADE_FLURRY_CLEAVE: (u32, u8) = (13877, 2);
631    ///<https://wowlab.gg/inspect/spell/22482>
632    pub(crate) const BLADE_FLURRY_DAMAGE: (u32, u8) = (22482, 1);
633    ///<https://wowlab.gg/inspect/spell/13877>
634    pub(crate) const BLADE_FLURRY_TARGETS: (u32, u8) = (13877, 3);
635    ///<https://wowlab.gg/inspect/spell/271881>
636    pub(crate) const BLADE_RUSH_ATTACK_DAMAGE: (u32, u8) = (271_881, 1);
637    ///<https://wowlab.gg/inspect/spell/452923>
638    pub(crate) const COIN_HEADS_INITIAL: (u32, u8) = (452_923, 4);
639    ///<https://wowlab.gg/inspect/spell/315341>
640    pub(crate) const BETWEEN_THE_EYES_SUMMARILY_DISPATCHED: (u32, u8) = (315_341, 4);
641    ///<https://wowlab.gg/inspect/spell/452923>
642    pub(crate) const COIN_HEADS_PER_STACK: (u32, u8) = (452_923, 1);
643    ///<https://wowlab.gg/inspect/spell/452923>
644    pub(crate) const COIN_HEADS_PER_STACK_PERIODIC: (u32, u8) = (452_923, 2);
645    ///<https://wowlab.gg/inspect/spell/454419>
646    pub(crate) const DEAL_FATE_CP: (u32, u8) = (454_419, 1);
647    ///<https://wowlab.gg/inspect/spell/1249194>
648    pub(crate) const DELIVERED_DOOM_DMG: (u32, u8) = (1_249_194, 1);
649    ///<https://wowlab.gg/inspect/spell/1249194>
650    pub(crate) const DELIVERED_DOOM_CP: (u32, u8) = (1_249_194, 2);
651    ///<https://wowlab.gg/inspect/spell/454435>
652    pub(crate) const DESTINY_DEFINED_ODDS: (u32, u8) = (454_435, 3);
653    ///<https://wowlab.gg/inspect/spell/2098>
654    pub(crate) const DISPATCH_DAMAGE: (u32, u8) = (2098, 1);
655    ///<https://wowlab.gg/inspect/spell/381846>
656    pub(crate) const FAN_THE_HAMMER_EXTRA: (u32, u8) = (381_846, 1);
657    ///<https://wowlab.gg/inspect/spell/381846>
658    pub(crate) const FAN_THE_HAMMER_REDUCTION: (u32, u8) = (381_846, 3);
659    ///<https://wowlab.gg/inspect/spell/452538>
660    pub(crate) const FATEBOUND_COIN_TAILS_DAMAGE: (u32, u8) = (452_538, 1);
661    ///<https://wowlab.gg/inspect/spell/1279356>
662    pub(crate) const GRAVEDIGGER_ENERGIZE: (u32, u8) = (1_279_356, 1);
663    ///<https://wowlab.gg/inspect/spell/452536>
664    pub(crate) const HAND_OF_FATE_CP: (u32, u8) = (452_536, 1);
665    ///<https://wowlab.gg/inspect/spell/383281>
666    pub(crate) const HIDDEN_OPPORTUNITY_DAMAGE: (u32, u8) = (383_281, 1);
667    ///<https://wowlab.gg/inspect/spell/315585>
668    pub(crate) const INSTANT_POISON_DAMAGE: (u32, u8) = (315_585, 1);
669    ///<https://wowlab.gg/inspect/spell/1214937>
670    pub(crate) const JACKPOT_RB: (u32, u8) = (1_214_937, 4);
671    ///<https://wowlab.gg/inspect/spell/57841>
672    pub(crate) const KILLING_SPREE_MH_DAMAGE: (u32, u8) = (57841, 1);
673    ///<https://wowlab.gg/inspect/spell/57842>
674    pub(crate) const KILLING_SPREE_OH_DAMAGE: (u32, u8) = (57842, 1);
675    ///<https://wowlab.gg/inspect/spell/51690>
676    pub(crate) const KILLING_SPREE_EXCESS_DAMAGE: (u32, u8) = (51690, 4);
677    ///<https://wowlab.gg/inspect/spell/1296588>
678    pub(crate) const MID2_OUTLAW_2PC_DISPATCH: (u32, u8) = (1_296_588, 1);
679    ///<https://wowlab.gg/inspect/spell/1296589>
680    pub(crate) const MID2_OUTLAW_4PC_CHANCE: (u32, u8) = (1_296_589, 1);
681    ///<https://wowlab.gg/inspect/spell/1248970>
682    pub(crate) const LUCKY_COIN_FLIPS: (u32, u8) = (1_248_970, 1);
683    ///<https://wowlab.gg/inspect/spell/1248971>
684    pub(crate) const LUCKY_COIN_ODDS: (u32, u8) = (1_248_971, 5);
685    ///<https://wowlab.gg/inspect/spell/86392>
686    pub(crate) const MAIN_GAUCHE_DAMAGE: (u32, u8) = (86392, 1);
687    ///<https://wowlab.gg/inspect/spell/76806>
688    pub(crate) const MAIN_GAUCHE_MASTERY_COEF: (u32, u8) = (76806, 2);
689    ///<https://wowlab.gg/inspect/spell/453428>
690    pub(crate) const MEAN_STREAK_ODDS: (u32, u8) = (453_428, 1);
691    ///<https://wowlab.gg/inspect/spell/1265863>
692    pub(crate) const PALMED_BULLETS_CHANCE: (u32, u8) = (1_265_863, 1);
693    ///<https://wowlab.gg/inspect/spell/185763>
694    pub(crate) const PISTOL_SHOT_DAMAGE: (u32, u8) = (185_763, 1);
695    ///<https://wowlab.gg/inspect/spell/1254567>
696    pub(crate) const QUICK_DRAW_ENERGIZE: (u32, u8) = (1_254_567, 1);
697    ///<https://wowlab.gg/inspect/spell/1276809>
698    pub(crate) const RAVENHOLDT_MINT_HEADS: (u32, u8) = (1_276_809, 1);
699    ///<https://wowlab.gg/inspect/spell/79096>
700    pub(crate) const RESTLESS_BLADES_CDR: (u32, u8) = (79096, 1);
701    ///<https://wowlab.gg/inspect/spell/14161>
702    pub(crate) const RUTHLESSNESS_CP: (u32, u8) = (14161, 1);
703    ///<https://wowlab.gg/inspect/spell/381990>
704    pub(crate) const SUMMARILY_DISPATCHED_DMG: (u32, u8) = (381_990, 2);
705    ///<https://wowlab.gg/inspect/spell/1265862>
706    pub(crate) const SCOUNDREL_CP_THRESHOLD: (u32, u8) = (1_265_862, 1);
707    ///<https://wowlab.gg/inspect/spell/1265918>
708    pub(crate) const SCOUNDREL_STRIKE_DAMAGE: (u32, u8) = (1_265_918, 1);
709    ///<https://wowlab.gg/inspect/spell/197834>
710    pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK_DAMAGE: (u32, u8) = (197_834, 1);
711    ///<https://wowlab.gg/inspect/spell/381839>
712    pub(crate) const SLEIGHT_OF_HAND_CHANCE: (u32, u8) = (381_839, 1);
713    ///<https://wowlab.gg/inspect/spell/271881>
714    pub(crate) const BLADE_RUSH_PRIMARY_MULT: (u32, u8) = (271_881, 2);
715    ///<https://wowlab.gg/inspect/spell/271877>
716    pub(crate) const BLADE_RUSH_SECONDARY_MULT: (u32, u8) = (271_877, 1);
717    ///<https://wowlab.gg/inspect/spell/1276816>
718    pub(crate) const CONTROLLED_CHAOS_STREAK: (u32, u8) = (1_276_816, 1);
719    ///<https://wowlab.gg/inspect/spell/1249204>
720    pub(crate) const RUSH_ENERGY: (u32, u8) = (1_249_204, 2);
721    ///<https://wowlab.gg/inspect/spell/1249204>
722    pub(crate) const RUSH_ENERGY_EDGE: (u32, u8) = (1_249_204, 4);
723    ///<https://wowlab.gg/inspect/spell/429951>
724    pub(crate) const BLADE_FLURRY_INSTANT_ATTACK_DAMAGE: (u32, u8) = (429_951, 1);
725}
726static REPORTED_SPELLS: &[(&str, u32)] = &[
727    ("blade_rush_attack", 271_881),
728    ("fatebound_coin_tails", 452_538),
729    ("instant_poison_damage", 315_585),
730    ("killing_spree_mh", 57841),
731    ("killing_spree_oh", 57842),
732    ("main_gauche", 86392),
733    ("scoundrel_strike", 1_265_918),
734    ("sinister_strike_extra_attack", 197_834),
735];
736static DECLARED_SPELL_IDS: &[u32] = &[
737    381_623, 1856, 193_315, 197_834, 185_763, 8676, 2098, 315_341, 196_819, 315_496,
738    315_584, 8679, 381_637, 5761, 3408, 86392, 1_265_918, 315_585, 1766, 315_508, 13750,
739    13877, 429_951, 271_877, 51690, 381_989, 1_277_933, 271_881, 195_627, 386_270, 1784,
740    115_192, 383_281, 381_878, 14983, 1_301_405, 1_214_933, 1_214_934, 1_214_935,
741    1_214_937, 256_171, 395_422, 271_896, 1_265_931, 1_265_935, 1_259_613, 1_259_614,
742    134_735, 452_923, 452_917, 1_248_971, 1_249_093, 381_828, 1_259_612, 394_321,
743    381_846, 35551, 1_265_861, 1_265_862, 1_265_863, 256_170, 1_256_630, 279_876,
744    196_938, 79096, 14161, 381_839, 381_990, 469_779, 1_259_485, 6603, 22482, 35546,
745    57841, 57842, 76806, 394_120, 452_536, 452_538, 453_428, 454_419, 454_435, 1_248_970,
746    1_249_194, 1_249_204, 1_254_567, 1_276_809, 1_276_816, 1_279_356, 1_296_588,
747    1_296_589, 453_457, 441_519, 462_127, 462_128, 462_129, 459_485, 441_274, 441_786,
748    441_224, 441_326,
749];
750static DECLARED_AURA_IDS: &[u32] = &[
751    315_496, 195_627, 386_270, 315_341, 1784, 1856, 115_192, 383_281, 381_878, 14983,
752    1_301_405, 1_214_933, 1_214_934, 1_214_935, 1_214_937, 256_171, 13750, 13877,
753    315_584, 8679, 381_637, 5761, 3408, 395_422, 271_896, 1_265_931, 1_265_935,
754    1_259_613, 1_259_614, 134_735, 452_923, 452_917, 1_248_971, 1_249_093, 452_923,
755    452_917, 1_248_971, 441_274, 441_786, 441_224, 441_326, 459_485,
756];
757static TALENTS: &[(&str, u32)] = &[
758    ("ACE_UP_YOUR_SLEEVE", TALENT::ACE_UP_YOUR_SLEEVE),
759    ("ADRENALINE_RUSH", TALENT::ADRENALINE_RUSH),
760    ("AUDACITY", TALENT::AUDACITY),
761    ("BLADE_FLURRY", TALENT::BLADE_FLURRY),
762    ("BLADE_RUSH", TALENT::BLADE_RUSH),
763    ("DEADLY_PURSUIT", TALENT::DEADLY_PURSUIT),
764    ("DEFT_MANEUVERS", TALENT::DEFT_MANEUVERS),
765    ("DEVIOUS_STRATAGEM", TALENT::DEVIOUS_STRATAGEM),
766    ("FAN_THE_HAMMER", TALENT::FAN_THE_HAMMER),
767    ("FATAL_FLOURISH", TALENT::FATAL_FLOURISH),
768    ("GRAVEDIGGER_1", TALENT::GRAVEDIGGER_1),
769    ("GRAVEDIGGER_2", TALENT::GRAVEDIGGER_2),
770    ("GRAVEDIGGER_3", TALENT::GRAVEDIGGER_3),
771    ("HIDDEN_OPPORTUNITY", TALENT::HIDDEN_OPPORTUNITY),
772    ("IMPROVED_ADRENALINE_RUSH", TALENT::IMPROVED_ADRENALINE_RUSH),
773    ("KEEP_IT_ROLLING", TALENT::KEEP_IT_ROLLING),
774    ("KILLING_SPREE", TALENT::KILLING_SPREE),
775    ("LOADED_DICE", TALENT::LOADED_DICE),
776    ("MENACING_RUSH", TALENT::MENACING_RUSH),
777    ("OPPORTUNITY", TALENT::OPPORTUNITY),
778    ("PREPARATION", TALENT::PREPARATION),
779    ("QUICK_DRAW", TALENT::QUICK_DRAW),
780    ("RESTLESS_BLADES", TALENT::RESTLESS_BLADES),
781    ("RUTHLESSNESS", TALENT::RUTHLESSNESS),
782    ("SLEIGHT_OF_HAND", TALENT::SLEIGHT_OF_HAND),
783    ("SUMMARILY_DISPATCHED", TALENT::SUMMARILY_DISPATCHED),
784    ("THISTLE_TEA", TALENT::THISTLE_TEA),
785    ("ZERO_IN", TALENT::ZERO_IN),
786];
787pub(crate) mod OUTLAW_ROGUE {
788    pub(crate) const SINISTER_STRIKE_CASTS: u32 = 0;
789    pub(crate) const PISTOL_SHOT_CASTS: u32 = 1;
790    pub(crate) const AMBUSH_CASTS: u32 = 2;
791    pub(crate) const DISPATCH_CASTS: u32 = 3;
792    pub(crate) const BETWEEN_THE_EYES_CASTS: u32 = 4;
793    pub(crate) const ROLL_THE_BONES_CASTS: u32 = 5;
794    pub(crate) const ADRENALINE_RUSH_CASTS: u32 = 6;
795    pub(crate) const BLADE_FLURRY_CASTS: u32 = 7;
796    pub(crate) const BLADE_RUSH_CASTS: u32 = 8;
797    pub(crate) const KILLING_SPREE_CASTS: u32 = 9;
798    pub(crate) const ADRENALINE_RUSH_UPTIME_MS: u32 = 10;
799    pub(crate) const BLADE_FLURRY_UPTIME_MS: u32 = 11;
800}
801fn aura_slice_and_dice(
802    a: AuraDefinitionDraft,
803    data: &ResolvedGameData,
804) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
805    Ok(
806        a
807            .on_player()
808            .apply_base_from_data(data, 315_496)?
809            .max_stacks(
810                data
811                    .require_aura_max_stacks(
812                        wowlab_types::sim::SpellIdx::from_raw(315_496),
813                    )?,
814            ),
815    )
816}
817fn aura_opportunity(
818    a: AuraDefinitionDraft,
819    data: &ResolvedGameData,
820) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
821    Ok(
822        a
823            .on_player()
824            .apply_base_from_data(data, 195_627)?
825            .max_stacks(
826                data
827                    .require_aura_max_stacks(
828                        wowlab_types::sim::SpellIdx::from_raw(195_627),
829                    )?,
830            ),
831    )
832}
833fn aura_audacity(
834    a: AuraDefinitionDraft,
835    data: &ResolvedGameData,
836) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
837    Ok(
838        a
839            .on_player()
840            .apply_base_from_data(data, 386_270)?
841            .max_stacks(
842                data
843                    .require_aura_max_stacks(
844                        wowlab_types::sim::SpellIdx::from_raw(386_270),
845                    )?,
846            ),
847    )
848}
849fn aura_between_the_eyes(
850    a: AuraDefinitionDraft,
851    data: &ResolvedGameData,
852) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
853    Ok(
854        a
855            .on_player()
856            .apply_base_from_data(data, 315_341)?
857            .max_stacks(
858                data
859                    .require_aura_max_stacks(
860                        wowlab_types::sim::SpellIdx::from_raw(315_341),
861                    )?,
862            )
863            .async_stacks(),
864    )
865}
866fn aura_stealth(
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, 1784)?
874            .max_stacks(
875                data
876                    .require_aura_max_stacks(
877                        wowlab_types::sim::SpellIdx::from_raw(1784),
878                    )?,
879            ),
880    )
881}
882fn aura_vanish(
883    a: AuraDefinitionDraft,
884    data: &ResolvedGameData,
885) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
886    Ok(
887        a
888            .on_player()
889            .apply_base_from_data(data, 1856)?
890            .max_stacks(
891                data
892                    .require_aura_max_stacks(
893                        wowlab_types::sim::SpellIdx::from_raw(1856),
894                    )?,
895            ),
896    )
897}
898fn aura_subterfuge(
899    a: AuraDefinitionDraft,
900    data: &ResolvedGameData,
901) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
902    Ok(
903        a
904            .on_player()
905            .apply_base_from_data(data, 115_192)?
906            .max_stacks(
907                data
908                    .require_aura_max_stacks(
909                        wowlab_types::sim::SpellIdx::from_raw(115_192),
910                    )?,
911            ),
912    )
913}
914fn aura_hidden_opportunity(
915    a: AuraDefinitionDraft,
916    data: &ResolvedGameData,
917) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
918    Ok(
919        a
920            .on_player()
921            .apply_base_from_data(data, 383_281)?
922            .max_stacks(
923                data
924                    .require_aura_max_stacks(
925                        wowlab_types::sim::SpellIdx::from_raw(383_281),
926                    )?,
927            ),
928    )
929}
930fn aura_deft_maneuvers(
931    a: AuraDefinitionDraft,
932    data: &ResolvedGameData,
933) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
934    Ok(
935        a
936            .on_player()
937            .apply_base_from_data(data, 381_878)?
938            .max_stacks(
939                data
940                    .require_aura_max_stacks(
941                        wowlab_types::sim::SpellIdx::from_raw(381_878),
942                    )?,
943            ),
944    )
945}
946fn aura_vigor(
947    a: AuraDefinitionDraft,
948    data: &ResolvedGameData,
949) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
950    Ok(
951        a
952            .on_player()
953            .apply_base_from_data(data, 14983)?
954            .max_stacks(
955                data
956                    .require_aura_max_stacks(
957                        wowlab_types::sim::SpellIdx::from_raw(14983),
958                    )?,
959            ),
960    )
961}
962fn aura_fang_strike(
963    a: AuraDefinitionDraft,
964    data: &ResolvedGameData,
965) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
966    Ok(
967        a
968            .on_player()
969            .apply_base_from_data(data, 1_301_405)?
970            .max_stacks(
971                data
972                    .require_aura_max_stacks(
973                        wowlab_types::sim::SpellIdx::from_raw(1_301_405),
974                    )?,
975            ),
976    )
977}
978fn aura_one_of_a_kind(
979    a: AuraDefinitionDraft,
980    data: &ResolvedGameData,
981) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
982    Ok(
983        a
984            .on_player()
985            .apply_base_from_data(data, 1_214_933)?
986            .max_stacks(
987                data
988                    .require_aura_max_stacks(
989                        wowlab_types::sim::SpellIdx::from_raw(1_214_933),
990                    )?,
991            ),
992    )
993}
994fn aura_double_trouble(
995    a: AuraDefinitionDraft,
996    data: &ResolvedGameData,
997) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
998    Ok(
999        a
1000            .on_player()
1001            .apply_base_from_data(data, 1_214_934)?
1002            .max_stacks(
1003                data
1004                    .require_aura_max_stacks(
1005                        wowlab_types::sim::SpellIdx::from_raw(1_214_934),
1006                    )?,
1007            ),
1008    )
1009}
1010fn aura_triple_threat(
1011    a: AuraDefinitionDraft,
1012    data: &ResolvedGameData,
1013) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1014    Ok(
1015        a
1016            .on_player()
1017            .apply_base_from_data(data, 1_214_935)?
1018            .max_stacks(
1019                data
1020                    .require_aura_max_stacks(
1021                        wowlab_types::sim::SpellIdx::from_raw(1_214_935),
1022                    )?,
1023            ),
1024    )
1025}
1026fn aura_jackpot(
1027    a: AuraDefinitionDraft,
1028    data: &ResolvedGameData,
1029) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1030    Ok(
1031        a
1032            .on_player()
1033            .apply_base_from_data(data, 1_214_937)?
1034            .max_stacks(
1035                data
1036                    .require_aura_max_stacks(
1037                        wowlab_types::sim::SpellIdx::from_raw(1_214_937),
1038                    )?,
1039            ),
1040    )
1041}
1042fn aura_loaded_dice(
1043    a: AuraDefinitionDraft,
1044    data: &ResolvedGameData,
1045) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1046    Ok(
1047        a
1048            .on_player()
1049            .apply_base_from_data(data, 256_171)?
1050            .max_stacks(
1051                data
1052                    .require_aura_max_stacks(
1053                        wowlab_types::sim::SpellIdx::from_raw(256_171),
1054                    )?,
1055            ),
1056    )
1057}
1058fn aura_adrenaline_rush(
1059    a: AuraDefinitionDraft,
1060    data: &ResolvedGameData,
1061) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1062    a.on_player()
1063        .apply_base_from_data(data, 13750)?
1064        .max_stacks(
1065            data.require_aura_max_stacks(wowlab_types::sim::SpellIdx::from_raw(13750))?,
1066        )
1067        .max_resource_per_stack(
1068            data.base_points(wowlab_types::sim::SpellIdx::from_raw(13750), 6),
1069        )
1070}
1071fn aura_blade_flurry(
1072    a: AuraDefinitionDraft,
1073    data: &ResolvedGameData,
1074) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1075    Ok(
1076        a
1077            .on_player()
1078            .apply_base_from_data(data, 13877)?
1079            .max_stacks(
1080                data
1081                    .require_aura_max_stacks(
1082                        wowlab_types::sim::SpellIdx::from_raw(13877),
1083                    )?,
1084            ),
1085    )
1086}
1087fn aura_instant_poison(
1088    a: AuraDefinitionDraft,
1089    data: &ResolvedGameData,
1090) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1091    Ok(
1092        a
1093            .on_player()
1094            .apply_base_from_data(data, 315_584)?
1095            .max_stacks(
1096                data
1097                    .require_aura_max_stacks(
1098                        wowlab_types::sim::SpellIdx::from_raw(315_584),
1099                    )?,
1100            )
1101            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
1102    )
1103}
1104fn aura_wound_poison(
1105    a: AuraDefinitionDraft,
1106    data: &ResolvedGameData,
1107) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1108    Ok(
1109        a
1110            .on_player()
1111            .apply_base_from_data(data, 8679)?
1112            .max_stacks(
1113                data
1114                    .require_aura_max_stacks(
1115                        wowlab_types::sim::SpellIdx::from_raw(8679),
1116                    )?,
1117            )
1118            .spell_group(0, wowlab_types::combat::SpellGroupRule::Exclusive),
1119    )
1120}
1121fn aura_atrophic_poison(
1122    a: AuraDefinitionDraft,
1123    data: &ResolvedGameData,
1124) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1125    Ok(
1126        a
1127            .on_player()
1128            .apply_base_from_data(data, 381_637)?
1129            .max_stacks(
1130                data
1131                    .require_aura_max_stacks(
1132                        wowlab_types::sim::SpellIdx::from_raw(381_637),
1133                    )?,
1134            )
1135            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
1136    )
1137}
1138fn aura_numbing_poison(
1139    a: AuraDefinitionDraft,
1140    data: &ResolvedGameData,
1141) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1142    Ok(
1143        a
1144            .on_player()
1145            .apply_base_from_data(data, 5761)?
1146            .max_stacks(
1147                data
1148                    .require_aura_max_stacks(
1149                        wowlab_types::sim::SpellIdx::from_raw(5761),
1150                    )?,
1151            )
1152            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
1153    )
1154}
1155fn aura_crippling_poison(
1156    a: AuraDefinitionDraft,
1157    data: &ResolvedGameData,
1158) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1159    Ok(
1160        a
1161            .on_player()
1162            .apply_base_from_data(data, 3408)?
1163            .max_stacks(
1164                data
1165                    .require_aura_max_stacks(
1166                        wowlab_types::sim::SpellIdx::from_raw(3408),
1167                    )?,
1168            )
1169            .spell_group(1, wowlab_types::combat::SpellGroupRule::Exclusive),
1170    )
1171}
1172fn aura_improved_adrenaline_rush(
1173    a: AuraDefinitionDraft,
1174    data: &ResolvedGameData,
1175) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1176    Ok(
1177        a
1178            .on_player()
1179            .apply_base_from_data(data, 395_422)?
1180            .max_stacks(
1181                data
1182                    .require_aura_max_stacks(
1183                        wowlab_types::sim::SpellIdx::from_raw(395_422),
1184                    )?,
1185            ),
1186    )
1187}
1188fn aura_blade_rush_energize(
1189    a: AuraDefinitionDraft,
1190    data: &ResolvedGameData,
1191) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1192    Ok(
1193        a
1194            .on_player()
1195            .apply_base_from_data(data, 271_896)?
1196            .max_stacks(
1197                data
1198                    .require_aura_max_stacks(
1199                        wowlab_types::sim::SpellIdx::from_raw(271_896),
1200                    )?,
1201            ),
1202    )
1203}
1204fn aura_palmed_bullets(
1205    a: AuraDefinitionDraft,
1206    data: &ResolvedGameData,
1207) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1208    Ok(
1209        a
1210            .on_player()
1211            .apply_base_from_data(data, 1_265_931)?
1212            .max_stacks(
1213                data
1214                    .require_aura_max_stacks(
1215                        wowlab_types::sim::SpellIdx::from_raw(1_265_931),
1216                    )?,
1217            ),
1218    )
1219}
1220fn aura_gravedigger(
1221    a: AuraDefinitionDraft,
1222    data: &ResolvedGameData,
1223) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1224    Ok(
1225        a
1226            .on_player()
1227            .apply_base_from_data(data, 1_265_935)?
1228            .max_stacks(
1229                data
1230                    .require_aura_max_stacks(
1231                        wowlab_types::sim::SpellIdx::from_raw(1_265_935),
1232                    )?,
1233            ),
1234    )
1235}
1236fn aura_deadly_pursuit_wait(
1237    a: AuraDefinitionDraft,
1238    data: &ResolvedGameData,
1239) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1240    Ok(
1241        a
1242            .on_player()
1243            .apply_base_from_data(data, 1_259_613)?
1244            .max_stacks(
1245                data
1246                    .require_aura_max_stacks(
1247                        wowlab_types::sim::SpellIdx::from_raw(1_259_613),
1248                    )?,
1249            )
1250            .on_expire(crate::hooks::outlaw_rogue::deadly_pursuit_wait_expire_hook),
1251    )
1252}
1253fn aura_deadly_pursuit_cdr(
1254    a: AuraDefinitionDraft,
1255    data: &ResolvedGameData,
1256) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1257    Ok(
1258        a
1259            .on_player()
1260            .apply_base_from_data(data, 1_259_614)?
1261            .max_stacks(
1262                data
1263                    .require_aura_max_stacks(
1264                        wowlab_types::sim::SpellIdx::from_raw(1_259_614),
1265                    )?,
1266            ),
1267    )
1268}
1269fn aura_pvp_rules_enabled_hardcoded(
1270    a: AuraDefinitionDraft,
1271    data: &ResolvedGameData,
1272) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1273    Ok(
1274        a
1275            .on_player()
1276            .apply_base_from_data(data, 134_735)?
1277            .max_stacks(
1278                data
1279                    .require_aura_max_stacks(
1280                        wowlab_types::sim::SpellIdx::from_raw(134_735),
1281                    )?,
1282            ),
1283    )
1284}
1285fn aura_fatebound_coin_heads(
1286    a: AuraDefinitionDraft,
1287    data: &ResolvedGameData,
1288) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1289    Ok(
1290        a
1291            .on_player()
1292            .apply_base_from_data(data, 452_923)?
1293            .max_stacks(
1294                data
1295                    .require_aura_max_stacks(
1296                        wowlab_types::sim::SpellIdx::from_raw(452_923),
1297                    )?,
1298            ),
1299    )
1300}
1301fn aura_fatebound_coin_tails(
1302    a: AuraDefinitionDraft,
1303    data: &ResolvedGameData,
1304) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1305    Ok(
1306        a
1307            .on_player()
1308            .apply_base_from_data(data, 452_917)?
1309            .max_stacks(
1310                data
1311                    .require_aura_max_stacks(
1312                        wowlab_types::sim::SpellIdx::from_raw(452_917),
1313                    )?,
1314            ),
1315    )
1316}
1317fn aura_fatebound_lucky_coin(
1318    a: AuraDefinitionDraft,
1319    data: &ResolvedGameData,
1320) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1321    a.on_player()
1322        .apply_base_from_data(data, 1_248_971)?
1323        .max_stacks(
1324            data
1325                .require_aura_max_stacks(
1326                    wowlab_types::sim::SpellIdx::from_raw(1_248_971),
1327                )?,
1328        )
1329        .primary_pct_per_stack(
1330            data.base_points(wowlab_types::sim::SpellIdx::from_raw(1_248_971), 1),
1331        )
1332}
1333fn aura_lucky_coin_counter(
1334    a: AuraDefinitionDraft,
1335    data: &ResolvedGameData,
1336) -> Result<AuraDefinitionDraft, wowlab_engine_combat::BuilderError> {
1337    Ok(
1338        a
1339            .on_player()
1340            .apply_base_from_data(data, 1_249_093)?
1341            .max_stacks(
1342                data
1343                    .require_aura_max_stacks(
1344                        wowlab_types::sim::SpellIdx::from_raw(1_249_093),
1345                    )?,
1346            ),
1347    )
1348}
1349fn spell_thistle_tea(
1350    s: SpellDefinitionDraft,
1351    data: &ResolvedGameData,
1352) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1353    Ok(
1354        s
1355            .apply_base_from_data(data, 381_623)?
1356            .no_stealth_break()
1357            .apply_aoe_from_data(data),
1358    )
1359}
1360fn spell_vanish(
1361    s: SpellDefinitionDraft,
1362    data: &ResolvedGameData,
1363) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1364    Ok(
1365        s
1366            .apply_base_from_data(data, 1856)?
1367            .applies_aura(AURA_STEALTH)
1368            .no_stealth_break()
1369            .apply_aoe_from_data(data),
1370    )
1371}
1372fn spell_sinister_strike(
1373    s: SpellDefinitionDraft,
1374    data: &ResolvedGameData,
1375) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1376    Ok(
1377        s
1378            .apply_base_from_data(data, 193_315)?
1379            .apply_aoe_from_data(data)
1380            .on_cast(crate::hooks::outlaw_rogue::sinister_strike_hook),
1381    )
1382}
1383fn spell_sinister_strike_extra_attack(
1384    s: SpellDefinitionDraft,
1385    data: &ResolvedGameData,
1386) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1387    Ok(s.apply_base_from_data(data, 197_834)?.apply_aoe_from_data(data))
1388}
1389fn spell_pistol_shot(
1390    s: SpellDefinitionDraft,
1391    data: &ResolvedGameData,
1392) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1393    Ok(
1394        s
1395            .apply_base_from_data(data, 185_763)?
1396            .damage_ap_from_data_typed(
1397                wowlab_engine_domain::dbc::EffectLookup::new(
1398                    data,
1399                    wowlab_types::sim::EffectRef::new(
1400                        wowlab_types::sim::SpellIdx::from_raw(185_763),
1401                        1,
1402                    ),
1403                ),
1404                wowlab_engine_combat::WeaponApType::Both,
1405            )?
1406            .apply_aoe_from_data(data)
1407            .on_cast(crate::hooks::outlaw_rogue::pistol_shot_hook),
1408    )
1409}
1410fn spell_ambush(
1411    s: SpellDefinitionDraft,
1412    data: &ResolvedGameData,
1413) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1414    Ok(
1415        s
1416            .apply_base_from_data(data, 8676)?
1417            .no_stealth_break()
1418            .apply_aoe_from_data(data)
1419            .on_cast(crate::hooks::outlaw_rogue::ambush_hook),
1420    )
1421}
1422fn spell_dispatch(
1423    s: SpellDefinitionDraft,
1424    data: &ResolvedGameData,
1425) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1426    Ok(
1427        s
1428            .apply_base_from_data(data, 2098)?
1429            .apply_aoe_from_data(data)
1430            .on_cast(crate::hooks::outlaw_rogue::dispatch_hook),
1431    )
1432}
1433fn spell_between_the_eyes(
1434    s: SpellDefinitionDraft,
1435    data: &ResolvedGameData,
1436) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1437    Ok(
1438        s
1439            .apply_base_from_data(data, 315_341)?
1440            .damage_ap_from_data_typed(
1441                wowlab_engine_domain::dbc::EffectLookup::new(
1442                    data,
1443                    wowlab_types::sim::EffectRef::new(
1444                        wowlab_types::sim::SpellIdx::from_raw(315_341),
1445                        1,
1446                    ),
1447                ),
1448                wowlab_engine_combat::WeaponApType::Both,
1449            )?
1450            .applies_inferred_aura(AURA_BETWEEN_THE_EYES, 315_341)
1451            .apply_aoe_from_data(data)
1452            .on_cast(crate::hooks::outlaw_rogue::between_the_eyes_hook),
1453    )
1454}
1455fn spell_eviscerate(
1456    s: SpellDefinitionDraft,
1457    data: &ResolvedGameData,
1458) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1459    Ok(s.apply_base_from_data(data, 196_819)?.apply_aoe_from_data(data))
1460}
1461fn spell_slice_and_dice(
1462    s: SpellDefinitionDraft,
1463    data: &ResolvedGameData,
1464) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1465    Ok(
1466        s
1467            .apply_base_from_data(data, 315_496)?
1468            .applies_inferred_aura(AURA_SLICE_AND_DICE, 315_496)
1469            .apply_aoe_from_data(data)
1470            .on_cast(crate::hooks::outlaw_rogue::slice_and_dice_hook),
1471    )
1472}
1473fn spell_instant_poison(
1474    s: SpellDefinitionDraft,
1475    data: &ResolvedGameData,
1476) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1477    Ok(
1478        s
1479            .apply_base_from_data(data, 315_584)?
1480            .applies_inferred_aura(AURA_INSTANT_POISON, 315_584)
1481            .apply_aoe_from_data(data),
1482    )
1483}
1484fn spell_wound_poison(
1485    s: SpellDefinitionDraft,
1486    data: &ResolvedGameData,
1487) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1488    Ok(
1489        s
1490            .apply_base_from_data(data, 8679)?
1491            .applies_inferred_aura(AURA_WOUND_POISON, 8679)
1492            .apply_aoe_from_data(data),
1493    )
1494}
1495fn spell_atrophic_poison(
1496    s: SpellDefinitionDraft,
1497    data: &ResolvedGameData,
1498) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1499    Ok(
1500        s
1501            .apply_base_from_data(data, 381_637)?
1502            .applies_inferred_aura(AURA_ATROPHIC_POISON, 381_637)
1503            .apply_aoe_from_data(data),
1504    )
1505}
1506fn spell_numbing_poison(
1507    s: SpellDefinitionDraft,
1508    data: &ResolvedGameData,
1509) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1510    Ok(
1511        s
1512            .apply_base_from_data(data, 5761)?
1513            .applies_inferred_aura(AURA_NUMBING_POISON, 5761)
1514            .apply_aoe_from_data(data),
1515    )
1516}
1517fn spell_crippling_poison(
1518    s: SpellDefinitionDraft,
1519    data: &ResolvedGameData,
1520) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1521    Ok(
1522        s
1523            .apply_base_from_data(data, 3408)?
1524            .applies_inferred_aura(AURA_CRIPPLING_POISON, 3408)
1525            .apply_aoe_from_data(data),
1526    )
1527}
1528fn spell_main_gauche(
1529    s: SpellDefinitionDraft,
1530    data: &ResolvedGameData,
1531) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1532    Ok(s.apply_base_from_data(data, 86392)?.apply_aoe_from_data(data))
1533}
1534fn spell_scoundrel_strike(
1535    s: SpellDefinitionDraft,
1536    data: &ResolvedGameData,
1537) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1538    Ok(s.apply_base_from_data(data, 1_265_918)?.apply_aoe_from_data(data))
1539}
1540fn spell_instant_poison_damage(
1541    s: SpellDefinitionDraft,
1542    data: &ResolvedGameData,
1543) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1544    Ok(s.apply_base_from_data(data, 315_585)?.apply_aoe_from_data(data))
1545}
1546fn spell_kick(
1547    s: SpellDefinitionDraft,
1548    data: &ResolvedGameData,
1549) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1550    Ok(s.apply_base_from_data(data, 1766)?.apply_aoe_from_data(data))
1551}
1552fn spell_roll_the_bones(
1553    s: SpellDefinitionDraft,
1554    data: &ResolvedGameData,
1555) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1556    Ok(
1557        s
1558            .apply_base_from_data(data, 315_508)?
1559            .no_stealth_break()
1560            .apply_aoe_from_data(data)
1561            .on_cast(crate::hooks::outlaw_rogue::roll_the_bones_hook),
1562    )
1563}
1564fn spell_adrenaline_rush(
1565    s: SpellDefinitionDraft,
1566    data: &ResolvedGameData,
1567) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1568    Ok(
1569        s
1570            .apply_base_from_data(data, 13750)?
1571            .applies_inferred_aura(AURA_ADRENALINE_RUSH, 13750)
1572            .apply_aoe_from_data(data)
1573            .on_cast(crate::hooks::outlaw_rogue::adrenaline_rush_hook),
1574    )
1575}
1576fn spell_blade_flurry(
1577    s: SpellDefinitionDraft,
1578    data: &ResolvedGameData,
1579) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1580    Ok(
1581        s
1582            .apply_base_from_data(data, 13877)?
1583            .applies_inferred_aura(AURA_BLADE_FLURRY, 13877)
1584            .apply_aoe_from_data(data)
1585            .on_cast(crate::hooks::outlaw_rogue::blade_flurry_hook),
1586    )
1587}
1588fn spell_blade_flurry_instant_attack(
1589    s: SpellDefinitionDraft,
1590    data: &ResolvedGameData,
1591) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1592    Ok(s.apply_base_from_data(data, 429_951)?.apply_aoe_from_data(data))
1593}
1594fn spell_blade_rush(
1595    s: SpellDefinitionDraft,
1596    data: &ResolvedGameData,
1597) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1598    Ok(
1599        s
1600            .apply_base_from_data(data, 271_877)?
1601            .applies_aura(AURA_BLADE_RUSH_ENERGIZE)
1602            .apply_aoe_from_data(data)
1603            .on_cast(crate::hooks::outlaw_rogue::blade_rush_hook),
1604    )
1605}
1606fn spell_killing_spree(
1607    s: SpellDefinitionDraft,
1608    data: &ResolvedGameData,
1609) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1610    Ok(
1611        s
1612            .apply_base_from_data(data, 51690)?
1613            .apply_aoe_from_data(data)
1614            .on_cast(crate::hooks::outlaw_rogue::killing_spree_hook),
1615    )
1616}
1617fn spell_keep_it_rolling(
1618    s: SpellDefinitionDraft,
1619    data: &ResolvedGameData,
1620) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1621    Ok(
1622        s
1623            .apply_base_from_data(data, 381_989)?
1624            .apply_aoe_from_data(data)
1625            .on_cast(crate::hooks::outlaw_rogue::keep_it_rolling_hook),
1626    )
1627}
1628fn spell_preparation(
1629    s: SpellDefinitionDraft,
1630    data: &ResolvedGameData,
1631) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1632    Ok(
1633        s
1634            .apply_base_from_data(data, 1_277_933)?
1635            .apply_aoe_from_data(data)
1636            .on_cast(crate::hooks::outlaw_rogue::preparation_hook),
1637    )
1638}
1639fn spell_blade_rush_attack(
1640    s: SpellDefinitionDraft,
1641    data: &ResolvedGameData,
1642) -> Result<SpellDefinitionDraft, wowlab_engine_combat::BuilderError> {
1643    Ok(s.apply_base_from_data(data, 271_881)?.apply_aoe_from_data(data))
1644}
1645pub(crate) fn build_combat_system_draft(
1646    params: &wowlab_engine_ports::HandlerParams<'_>,
1647) -> Result<CombatSystemDraft, wowlab_engine_ports::EngineError> {
1648    let builder = CombatSystemBuilder::new(params.stats.clone())
1649        .spec_id(SpecId::Outlaw)
1650        .spec_identity(
1651            wowlab_engine_combat::generated_identities::specs::outlaw_rogue::PROOF,
1652        )
1653        .hero_talent_trees(DECLARED_METADATA.hero_talent_trees)
1654        .effect_identities(
1655            wowlab_engine_combat::generated_identities::specs::outlaw_rogue::damage::ALL,
1656        )
1657        .effect_identities(wowlab_engine_combat::generated_identities::shared::ALL)
1658        .mastery_spell(76806)
1659        .mastery_hook(crate::hooks::outlaw_rogue::mastery)
1660        .resource(
1661            "energy",
1662            params
1663                .game_data
1664                .power_max(3)
1665                .ok_or_else(|| {
1666                    wowlab_engine_ports::EngineError::spec_construction(
1667                        "missing power-type power_max for type_id 3",
1668                    )
1669                })?,
1670            params
1671                .game_data
1672                .power_regen_for_max(
1673                    3,
1674                    params
1675                        .game_data
1676                        .power_max(3)
1677                        .ok_or_else(|| {
1678                            wowlab_engine_ports::EngineError::spec_construction(
1679                                "missing power-type power_max for type_id 3",
1680                            )
1681                        })?,
1682                )
1683                .ok_or_else(|| {
1684                    wowlab_engine_ports::EngineError::spec_construction(
1685                        "missing power-type power_regen_for_max for type_id 3",
1686                    )
1687                })?,
1688        )
1689        .resource_type_id(3)
1690        .resource_start(
1691            params
1692                .game_data
1693                .power_default(3)
1694                .ok_or_else(|| {
1695                    wowlab_engine_ports::EngineError::spec_construction(
1696                        "missing power-type power_default for type_id 3",
1697                    )
1698                })?,
1699        )
1700        .secondary_resource(
1701            "combo_points",
1702            params
1703                .game_data
1704                .power_max(4)
1705                .ok_or_else(|| {
1706                    wowlab_engine_ports::EngineError::spec_construction(
1707                        "missing power-type power_max for type_id 4",
1708                    )
1709                })?,
1710        )
1711        .secondary_resource_type_id(4)
1712        .precombat_aura(AURA_STEALTH)
1713        .precombat_aura(AURA_INSTANT_POISON)
1714        .precombat_aura(AURA_ATROPHIC_POISON)
1715        .stealth_aura(AURA::STEALTH)
1716        .aura(
1717            "slice_and_dice",
1718            AURA::SLICE_AND_DICE,
1719            |a| aura_slice_and_dice(a, &params.game_data),
1720        )
1721        .aura(
1722            "opportunity",
1723            AURA::OPPORTUNITY,
1724            |a| aura_opportunity(a, &params.game_data),
1725        )
1726        .aura("audacity", AURA::AUDACITY, |a| aura_audacity(a, &params.game_data))
1727        .aura(
1728            "between_the_eyes",
1729            AURA::BETWEEN_THE_EYES,
1730            |a| aura_between_the_eyes(a, &params.game_data),
1731        )
1732        .aura("stealth", AURA::STEALTH, |a| aura_stealth(a, &params.game_data))
1733        .aura("vanish", AURA::VANISH, |a| aura_vanish(a, &params.game_data))
1734        .aura("subterfuge", AURA::SUBTERFUGE, |a| aura_subterfuge(a, &params.game_data))
1735        .aura(
1736            "hidden_opportunity",
1737            AURA::HIDDEN_OPPORTUNITY,
1738            |a| aura_hidden_opportunity(a, &params.game_data),
1739        )
1740        .aura(
1741            "deft_maneuvers",
1742            AURA::DEFT_MANEUVERS,
1743            |a| aura_deft_maneuvers(a, &params.game_data),
1744        )
1745        .aura("vigor", AURA::VIGOR, |a| aura_vigor(a, &params.game_data))
1746        .aura(
1747            "fang_strike",
1748            AURA::FANG_STRIKE,
1749            |a| aura_fang_strike(a, &params.game_data),
1750        )
1751        .aura(
1752            "one_of_a_kind",
1753            AURA::ONE_OF_A_KIND,
1754            |a| aura_one_of_a_kind(a, &params.game_data),
1755        )
1756        .aura(
1757            "double_trouble",
1758            AURA::DOUBLE_TROUBLE,
1759            |a| aura_double_trouble(a, &params.game_data),
1760        )
1761        .aura(
1762            "triple_threat",
1763            AURA::TRIPLE_THREAT,
1764            |a| aura_triple_threat(a, &params.game_data),
1765        )
1766        .aura("jackpot", AURA::JACKPOT, |a| aura_jackpot(a, &params.game_data))
1767        .aura(
1768            "loaded_dice",
1769            AURA::LOADED_DICE,
1770            |a| aura_loaded_dice(a, &params.game_data),
1771        )
1772        .aura(
1773            "adrenaline_rush",
1774            AURA::ADRENALINE_RUSH,
1775            |a| aura_adrenaline_rush(a, &params.game_data),
1776        )
1777        .aura(
1778            "blade_flurry",
1779            AURA::BLADE_FLURRY,
1780            |a| aura_blade_flurry(a, &params.game_data),
1781        )
1782        .aura(
1783            "instant_poison",
1784            AURA::INSTANT_POISON,
1785            |a| aura_instant_poison(a, &params.game_data),
1786        )
1787        .aura(
1788            "wound_poison",
1789            AURA::WOUND_POISON,
1790            |a| aura_wound_poison(a, &params.game_data),
1791        )
1792        .aura(
1793            "atrophic_poison",
1794            AURA::ATROPHIC_POISON,
1795            |a| aura_atrophic_poison(a, &params.game_data),
1796        )
1797        .aura(
1798            "numbing_poison",
1799            AURA::NUMBING_POISON,
1800            |a| aura_numbing_poison(a, &params.game_data),
1801        )
1802        .aura(
1803            "crippling_poison",
1804            AURA::CRIPPLING_POISON,
1805            |a| aura_crippling_poison(a, &params.game_data),
1806        )
1807        .aura(
1808            "improved_adrenaline_rush",
1809            AURA::IMPROVED_ADRENALINE_RUSH,
1810            |a| aura_improved_adrenaline_rush(a, &params.game_data),
1811        )
1812        .aura(
1813            "blade_rush_energize",
1814            AURA::BLADE_RUSH_ENERGIZE,
1815            |a| aura_blade_rush_energize(a, &params.game_data),
1816        )
1817        .aura(
1818            "palmed_bullets",
1819            AURA::PALMED_BULLETS,
1820            |a| aura_palmed_bullets(a, &params.game_data),
1821        )
1822        .aura(
1823            "gravedigger",
1824            AURA::GRAVEDIGGER,
1825            |a| aura_gravedigger(a, &params.game_data),
1826        )
1827        .aura(
1828            "deadly_pursuit_wait",
1829            AURA::DEADLY_PURSUIT_WAIT,
1830            |a| aura_deadly_pursuit_wait(a, &params.game_data),
1831        )
1832        .aura(
1833            "deadly_pursuit_cdr",
1834            AURA::DEADLY_PURSUIT_CDR,
1835            |a| aura_deadly_pursuit_cdr(a, &params.game_data),
1836        )
1837        .aura(
1838            "pvp_rules_enabled_hardcoded",
1839            AURA::PVP_RULES_ENABLED_HARDCODED,
1840            |a| aura_pvp_rules_enabled_hardcoded(a, &params.game_data),
1841        )
1842        .aura(
1843            "fatebound_coin_heads",
1844            AURA::FATEBOUND_COIN_HEADS,
1845            |a| aura_fatebound_coin_heads(a, &params.game_data),
1846        )
1847        .aura(
1848            "fatebound_coin_tails",
1849            AURA::FATEBOUND_COIN_TAILS,
1850            |a| aura_fatebound_coin_tails(a, &params.game_data),
1851        )
1852        .aura(
1853            "fatebound_lucky_coin",
1854            AURA::FATEBOUND_LUCKY_COIN,
1855            |a| aura_fatebound_lucky_coin(a, &params.game_data),
1856        )
1857        .aura(
1858            "lucky_coin_counter",
1859            AURA::LUCKY_COIN_COUNTER,
1860            |a| aura_lucky_coin_counter(a, &params.game_data),
1861        )
1862        .spell(
1863            "thistle_tea",
1864            SPELL::THISTLE_TEA,
1865            |s| spell_thistle_tea(s, &params.game_data),
1866        )
1867        .spell("vanish", SPELL::VANISH, |s| spell_vanish(s, &params.game_data))
1868        .spell(
1869            "sinister_strike",
1870            SPELL::SINISTER_STRIKE,
1871            |s| spell_sinister_strike(s, &params.game_data),
1872        )
1873        .spell(
1874            "sinister_strike_extra_attack",
1875            SPELL::SINISTER_STRIKE_EXTRA_ATTACK,
1876            |s| spell_sinister_strike_extra_attack(s, &params.game_data),
1877        )
1878        .spell(
1879            "pistol_shot",
1880            SPELL::PISTOL_SHOT,
1881            |s| spell_pistol_shot(s, &params.game_data),
1882        )
1883        .spell("ambush", SPELL::AMBUSH, |s| spell_ambush(s, &params.game_data))
1884        .spell("dispatch", SPELL::DISPATCH, |s| spell_dispatch(s, &params.game_data))
1885        .spell(
1886            "between_the_eyes",
1887            SPELL::BETWEEN_THE_EYES,
1888            |s| spell_between_the_eyes(s, &params.game_data),
1889        )
1890        .spell(
1891            "eviscerate",
1892            SPELL::EVISCERATE,
1893            |s| spell_eviscerate(s, &params.game_data),
1894        )
1895        .spell(
1896            "slice_and_dice",
1897            SPELL::SLICE_AND_DICE,
1898            |s| spell_slice_and_dice(s, &params.game_data),
1899        )
1900        .spell(
1901            "instant_poison",
1902            SPELL::INSTANT_POISON,
1903            |s| spell_instant_poison(s, &params.game_data),
1904        )
1905        .spell(
1906            "wound_poison",
1907            SPELL::WOUND_POISON,
1908            |s| spell_wound_poison(s, &params.game_data),
1909        )
1910        .spell(
1911            "atrophic_poison",
1912            SPELL::ATROPHIC_POISON,
1913            |s| spell_atrophic_poison(s, &params.game_data),
1914        )
1915        .spell(
1916            "numbing_poison",
1917            SPELL::NUMBING_POISON,
1918            |s| spell_numbing_poison(s, &params.game_data),
1919        )
1920        .spell(
1921            "crippling_poison",
1922            SPELL::CRIPPLING_POISON,
1923            |s| spell_crippling_poison(s, &params.game_data),
1924        )
1925        .spell(
1926            "main_gauche",
1927            SPELL::MAIN_GAUCHE,
1928            |s| spell_main_gauche(s, &params.game_data),
1929        )
1930        .spell(
1931            "scoundrel_strike",
1932            SPELL::SCOUNDREL_STRIKE,
1933            |s| spell_scoundrel_strike(s, &params.game_data),
1934        )
1935        .spell(
1936            "instant_poison_damage",
1937            SPELL::INSTANT_POISON_DAMAGE,
1938            |s| spell_instant_poison_damage(s, &params.game_data),
1939        )
1940        .spell("kick", SPELL::KICK, |s| spell_kick(s, &params.game_data))
1941        .spell(
1942            "roll_the_bones",
1943            SPELL::ROLL_THE_BONES,
1944            |s| spell_roll_the_bones(s, &params.game_data),
1945        )
1946        .spell(
1947            "adrenaline_rush",
1948            SPELL::ADRENALINE_RUSH,
1949            |s| spell_adrenaline_rush(s, &params.game_data),
1950        )
1951        .spell(
1952            "blade_flurry",
1953            SPELL::BLADE_FLURRY,
1954            |s| spell_blade_flurry(s, &params.game_data),
1955        )
1956        .spell(
1957            "blade_flurry_instant_attack",
1958            SPELL::BLADE_FLURRY_INSTANT_ATTACK,
1959            |s| spell_blade_flurry_instant_attack(s, &params.game_data),
1960        )
1961        .spell(
1962            "blade_rush",
1963            SPELL::BLADE_RUSH,
1964            |s| spell_blade_rush(s, &params.game_data),
1965        )
1966        .spell(
1967            "killing_spree",
1968            SPELL::KILLING_SPREE,
1969            |s| spell_killing_spree(s, &params.game_data),
1970        )
1971        .spell(
1972            "keep_it_rolling",
1973            SPELL::KEEP_IT_ROLLING,
1974            |s| spell_keep_it_rolling(s, &params.game_data),
1975        )
1976        .spell(
1977            "preparation",
1978            SPELL::PREPARATION,
1979            |s| spell_preparation(s, &params.game_data),
1980        )
1981        .spell(
1982            "blade_rush_attack",
1983            SPELL::BLADE_RUSH_ATTACK,
1984            |s| spell_blade_rush_attack(s, &params.game_data),
1985        )
1986        .auto_attack(|a| {
1987            a
1988                .spell_id(6603)
1989                .swing_ms(2600)
1990                .apply_base_from_data(&params.game_data)
1991                .on_swing(crate::hooks::outlaw_rogue::swing_hook)
1992        })
1993        .game_data(params.game_data.clone())
1994        .talent_spell_ids(TALENTS)
1995        .talent_selections(params.talent_selections)
1996        .register_impact_effect_proc_if_talent(
1997            TALENT::FATAL_FLOURISH,
1998            wowlab_engine_combat::ImpactEffectProcDefinition::new(
1999                    wowlab_engine_combat::ImpactSource::AutoAttack(
2000                        wowlab_engine_combat::SwingHand::OffHand,
2001                    ),
2002                )
2003                .chance(
2004                    (params
2005                        .game_data
2006                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35551), 1))
2007                        / 100.0,
2008                )
2009                .weapon_speed_scaled(2600)
2010                .gain(
2011                    params
2012                        .game_data
2013                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35546), 1),
2014                ),
2015        )
2016        .register_impact_effect_proc_if_talent(
2017            TALENT::FATAL_FLOURISH,
2018            wowlab_engine_combat::ImpactEffectProcDefinition::new(
2019                    wowlab_engine_combat::ImpactSource::Spell(SPELL::MAIN_GAUCHE),
2020                )
2021                .chance(
2022                    (params
2023                        .game_data
2024                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35551), 1))
2025                        / 100.0,
2026                )
2027                .gain(
2028                    params
2029                        .game_data
2030                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35546), 1),
2031                ),
2032        )
2033        .register_impact_effect_proc_if_talent(
2034            TALENT::FATAL_FLOURISH,
2035            wowlab_engine_combat::ImpactEffectProcDefinition::new(
2036                    wowlab_engine_combat::ImpactSource::Spell(SPELL::PISTOL_SHOT),
2037                )
2038                .chance(
2039                    (params
2040                        .game_data
2041                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35551), 1))
2042                        / 100.0,
2043                )
2044                .gain(
2045                    params
2046                        .game_data
2047                        .base_points(wowlab_types::sim::SpellIdx::from_raw(35546), 1),
2048                ),
2049        )
2050        .set_bonus_auras(params.set_bonus_auras)
2051        .encounter(params.encounter.clone());
2052    let builder = crate::generated::items::register_equipped(
2053        builder,
2054        &params.game_data,
2055        params.equipped_items,
2056    )?;
2057
2058    builder.into_draft()
2059}
2060fn new_handler(
2061    params: wowlab_engine_ports::HandlerParams<'_>,
2062) -> Result<Box<dyn SpecHandler>, wowlab_engine_ports::EngineError> {
2063    let handler = crate::composition::compose_handler(
2064        build_combat_system_draft,
2065        &params,
2066        crate::hooks::outlaw_rogue::OutlawHandler::try_new,
2067    )?;
2068
2069    Ok(Box::new(handler))
2070}
2071static DECLARED_METADATA: DeclaredSpecMetadata = DeclaredSpecMetadata {
2072    primary_resource: ResourceType::Energy,
2073    secondary_resource: Some(ResourceType::ComboPoints),
2074    spell_ids: DECLARED_SPELL_IDS,
2075    aura_ids: DECLARED_AURA_IDS,
2076    server_proc_entries: &[],
2077    talents: TALENTS,
2078    rotation_field_schema: &[],
2079    metrics_plugin_id: None,
2080    hero_talent_trees: &[
2081        HeroTalentTreeDesc {
2082            name: "Fatebound",
2083            spells: HERO_TREE_FATEBOUND_SPELLS,
2084            auras: HERO_TREE_FATEBOUND_AURAS,
2085        },
2086        HeroTalentTreeDesc {
2087            name: "Trickster",
2088            spells: HERO_TREE_TRICKSTER_SPELLS,
2089            auras: HERO_TREE_TRICKSTER_AURAS,
2090        },
2091    ],
2092    reported_spells: REPORTED_SPELLS,
2093    masked_passive_effects: &[(452_536, 5), (381_990, 2)],
2094    passive_effect_overrides: &[],
2095};
2096pub(super) const SPEC_DESCRIPTOR: SpecDescriptor = SpecDescriptor {
2097    spec_id: SpecId::Outlaw,
2098    display_name: "Outlaw Rogue",
2099    metadata: DECLARED_METADATA,
2100    handler_factory: new_handler,
2101};
2102wowlab_engine_combat::smoke_test!(build_combat_system_draft);