1#![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 pub(crate) const THISTLE_TEA: u32 = 381_623;
16 pub(crate) const VANISH: u32 = 1856;
18 pub(crate) const SINISTER_STRIKE: u32 = 193_315;
20 pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK: u32 = 197_834;
22 pub(crate) const PISTOL_SHOT: u32 = 185_763;
24 pub(crate) const AMBUSH: u32 = 8676;
26 pub(crate) const DISPATCH: u32 = 2098;
28 pub(crate) const BETWEEN_THE_EYES: u32 = 315_341;
30 pub(crate) const EVISCERATE: u32 = 196_819;
32 pub(crate) const SLICE_AND_DICE: u32 = 315_496;
34 pub(crate) const INSTANT_POISON: u32 = 315_584;
36 pub(crate) const WOUND_POISON: u32 = 8679;
38 pub(crate) const ATROPHIC_POISON: u32 = 381_637;
40 pub(crate) const NUMBING_POISON: u32 = 5761;
42 pub(crate) const CRIPPLING_POISON: u32 = 3408;
44 pub(crate) const MAIN_GAUCHE: u32 = 86392;
46 pub(crate) const SCOUNDREL_STRIKE: u32 = 1_265_918;
48 pub(crate) const INSTANT_POISON_DAMAGE: u32 = 315_585;
50 pub(crate) const KICK: u32 = 1766;
52 pub(crate) const ROLL_THE_BONES: u32 = 315_508;
54 pub(crate) const ADRENALINE_RUSH: u32 = 13750;
56 pub(crate) const BLADE_FLURRY: u32 = 13877;
58 pub(crate) const BLADE_FLURRY_INSTANT_ATTACK: u32 = 429_951;
60 pub(crate) const BLADE_RUSH: u32 = 271_877;
62 pub(crate) const KILLING_SPREE: u32 = 51690;
64 pub(crate) const KEEP_IT_ROLLING: u32 = 381_989;
66 pub(crate) const PREPARATION: u32 = 1_277_933;
68 pub(crate) const BLADE_RUSH_ATTACK: u32 = 271_881;
70}
71pub(crate) mod AURA {
72 pub(crate) const SLICE_AND_DICE: u32 = 315_496;
74 pub(crate) const OPPORTUNITY: u32 = 195_627;
76 pub(crate) const AUDACITY: u32 = 386_270;
78 pub(crate) const BETWEEN_THE_EYES: u32 = 315_341;
80 pub(crate) const STEALTH: u32 = 1784;
82 pub(crate) const VANISH: u32 = 1856;
84 pub(crate) const SUBTERFUGE: u32 = 115_192;
86 pub(crate) const HIDDEN_OPPORTUNITY: u32 = 383_281;
88 pub(crate) const DEFT_MANEUVERS: u32 = 381_878;
90 pub(crate) const VIGOR: u32 = 14983;
92 pub(crate) const FANG_STRIKE: u32 = 1_301_405;
94 pub(crate) const ONE_OF_A_KIND: u32 = 1_214_933;
96 pub(crate) const DOUBLE_TROUBLE: u32 = 1_214_934;
98 pub(crate) const TRIPLE_THREAT: u32 = 1_214_935;
100 pub(crate) const JACKPOT: u32 = 1_214_937;
102 pub(crate) const LOADED_DICE: u32 = 256_171;
104 pub(crate) const ADRENALINE_RUSH: u32 = 13750;
106 pub(crate) const BLADE_FLURRY: u32 = 13877;
108 pub(crate) const INSTANT_POISON: u32 = 315_584;
110 pub(crate) const WOUND_POISON: u32 = 8679;
112 pub(crate) const ATROPHIC_POISON: u32 = 381_637;
114 pub(crate) const NUMBING_POISON: u32 = 5761;
116 pub(crate) const CRIPPLING_POISON: u32 = 3408;
118 pub(crate) const IMPROVED_ADRENALINE_RUSH: u32 = 395_422;
120 pub(crate) const BLADE_RUSH_ENERGIZE: u32 = 271_896;
122 pub(crate) const PALMED_BULLETS: u32 = 1_265_931;
124 pub(crate) const GRAVEDIGGER: u32 = 1_265_935;
126 pub(crate) const DEADLY_PURSUIT_WAIT: u32 = 1_259_613;
128 pub(crate) const DEADLY_PURSUIT_CDR: u32 = 1_259_614;
130 pub(crate) const PVP_RULES_ENABLED_HARDCODED: u32 = 134_735;
132 pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
134 pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
136 pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
138 pub(crate) const LUCKY_COIN_COUNTER: u32 = 1_249_093;
140}
141pub(crate) mod TALENT {
142 pub(crate) const ACE_UP_YOUR_SLEEVE: u32 = 381_828;
144 pub(crate) const ADRENALINE_RUSH: u32 = 13750;
146 pub(crate) const AUDACITY: u32 = 386_270;
148 pub(crate) const BLADE_FLURRY: u32 = 13877;
150 pub(crate) const BLADE_RUSH: u32 = 271_877;
152 pub(crate) const DEADLY_PURSUIT: u32 = 1_259_612;
154 pub(crate) const DEFT_MANEUVERS: u32 = 381_878;
156 pub(crate) const DEVIOUS_STRATAGEM: u32 = 394_321;
158 pub(crate) const FAN_THE_HAMMER: u32 = 381_846;
160 pub(crate) const FATAL_FLOURISH: u32 = 35551;
162 pub(crate) const GRAVEDIGGER_1: u32 = 1_265_861;
164 pub(crate) const GRAVEDIGGER_2: u32 = 1_265_862;
166 pub(crate) const GRAVEDIGGER_3: u32 = 1_265_863;
168 pub(crate) const HIDDEN_OPPORTUNITY: u32 = 383_281;
170 pub(crate) const IMPROVED_ADRENALINE_RUSH: u32 = 395_422;
172 pub(crate) const KEEP_IT_ROLLING: u32 = 381_989;
174 pub(crate) const KILLING_SPREE: u32 = 51690;
176 pub(crate) const LOADED_DICE: u32 = 256_170;
178 pub(crate) const MENACING_RUSH: u32 = 1_256_630;
180 pub(crate) const OPPORTUNITY: u32 = 279_876;
182 pub(crate) const PREPARATION: u32 = 1_277_933;
184 pub(crate) const QUICK_DRAW: u32 = 196_938;
186 pub(crate) const RESTLESS_BLADES: u32 = 79096;
188 pub(crate) const RUTHLESSNESS: u32 = 14161;
190 pub(crate) const SLEIGHT_OF_HAND: u32 = 381_839;
192 pub(crate) const SUMMARILY_DISPATCHED: u32 = 381_990;
194 pub(crate) const THISTLE_TEA: u32 = 469_779;
196 pub(crate) const ZERO_IN: u32 = 1_259_485;
198}
199pub(crate) mod SET_BONUS {
200 pub(crate) const MID2_OUTLAW_2PC: u32 = 1_296_588;
202 pub(crate) const MID2_OUTLAW_4PC: u32 = 1_296_589;
204}
205pub(crate) mod REPORTED_SPELL {
206 pub(crate) const BLADE_RUSH_ATTACK: u32 = 271_881;
208 pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_538;
210 pub(crate) const INSTANT_POISON_DAMAGE: u32 = 315_585;
212 pub(crate) const KILLING_SPREE_MH: u32 = 57841;
214 pub(crate) const KILLING_SPREE_OH: u32 = 57842;
216 pub(crate) const MAIN_GAUCHE: u32 = 86392;
218 pub(crate) const SCOUNDREL_STRIKE: u32 = 1_265_918;
220 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 pub(crate) const CONTROLLED_CHAOS: u32 = 1_276_816;
228 pub(crate) const DEAL_FATE: u32 = 454_419;
230 pub(crate) const DELIVERED_DOOM: u32 = 1_249_194;
232 pub(crate) const DESTINY_DEFINED: u32 = 454_435;
234 pub(crate) const EDGE_CASE: u32 = 453_457;
236 pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_538;
238 pub(crate) const HAND_OF_FATE: u32 = 452_536;
240 pub(crate) const LUCKY_COIN: u32 = 1_248_970;
242 pub(crate) const MEAN_STREAK: u32 = 453_428;
244 pub(crate) const RAVENHOLDT_MINT: u32 = 1_276_809;
246 pub(crate) const RUSH_TO_THE_INEVITABLE: u32 = 1_249_204;
248 }
249 pub(crate) mod AURA {
250 pub(crate) const FATEBOUND_COIN_HEADS: u32 = 452_923;
252 pub(crate) const FATEBOUND_COIN_TAILS: u32 = 452_917;
254 pub(crate) const FATEBOUND_LUCKY_COIN: u32 = 1_248_971;
256 }
257 }
258 pub(crate) mod TRICKSTER {
259 pub(crate) mod SPELL {
260 pub(crate) const COUP_DE_GRACE: u32 = 441_519;
262 pub(crate) const COUP_DE_GRACE_DAMAGE_1: u32 = 462_127;
264 pub(crate) const COUP_DE_GRACE_DAMAGE_2: u32 = 462_128;
266 pub(crate) const COUP_DE_GRACE_DAMAGE_3: u32 = 462_129;
268 pub(crate) const UNSEEN_BLADE: u32 = 459_485;
270 }
271 pub(crate) mod AURA {
272 pub(crate) const DISORIENTING_STRIKES: u32 = 441_274;
274 pub(crate) const ESCALATING_BLADE: u32 = 441_786;
276 pub(crate) const FAZED: u32 = 441_224;
278 pub(crate) const FLAWLESS_FORM: u32 = 441_326;
280 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 pub(crate) const ACE_UP_CHANCE: (u32, u8) = (381_828, 1);
627 pub(crate) const ACE_UP_ENERGIZE: (u32, u8) = (394_120, 1);
629 pub(crate) const BLADE_FLURRY_CLEAVE: (u32, u8) = (13877, 2);
631 pub(crate) const BLADE_FLURRY_DAMAGE: (u32, u8) = (22482, 1);
633 pub(crate) const BLADE_FLURRY_TARGETS: (u32, u8) = (13877, 3);
635 pub(crate) const BLADE_RUSH_ATTACK_DAMAGE: (u32, u8) = (271_881, 1);
637 pub(crate) const COIN_HEADS_INITIAL: (u32, u8) = (452_923, 4);
639 pub(crate) const BETWEEN_THE_EYES_SUMMARILY_DISPATCHED: (u32, u8) = (315_341, 4);
641 pub(crate) const COIN_HEADS_PER_STACK: (u32, u8) = (452_923, 1);
643 pub(crate) const COIN_HEADS_PER_STACK_PERIODIC: (u32, u8) = (452_923, 2);
645 pub(crate) const DEAL_FATE_CP: (u32, u8) = (454_419, 1);
647 pub(crate) const DELIVERED_DOOM_DMG: (u32, u8) = (1_249_194, 1);
649 pub(crate) const DELIVERED_DOOM_CP: (u32, u8) = (1_249_194, 2);
651 pub(crate) const DESTINY_DEFINED_ODDS: (u32, u8) = (454_435, 3);
653 pub(crate) const DISPATCH_DAMAGE: (u32, u8) = (2098, 1);
655 pub(crate) const FAN_THE_HAMMER_EXTRA: (u32, u8) = (381_846, 1);
657 pub(crate) const FAN_THE_HAMMER_REDUCTION: (u32, u8) = (381_846, 3);
659 pub(crate) const FATEBOUND_COIN_TAILS_DAMAGE: (u32, u8) = (452_538, 1);
661 pub(crate) const GRAVEDIGGER_ENERGIZE: (u32, u8) = (1_279_356, 1);
663 pub(crate) const HAND_OF_FATE_CP: (u32, u8) = (452_536, 1);
665 pub(crate) const HIDDEN_OPPORTUNITY_DAMAGE: (u32, u8) = (383_281, 1);
667 pub(crate) const INSTANT_POISON_DAMAGE: (u32, u8) = (315_585, 1);
669 pub(crate) const JACKPOT_RB: (u32, u8) = (1_214_937, 4);
671 pub(crate) const KILLING_SPREE_MH_DAMAGE: (u32, u8) = (57841, 1);
673 pub(crate) const KILLING_SPREE_OH_DAMAGE: (u32, u8) = (57842, 1);
675 pub(crate) const KILLING_SPREE_EXCESS_DAMAGE: (u32, u8) = (51690, 4);
677 pub(crate) const MID2_OUTLAW_2PC_DISPATCH: (u32, u8) = (1_296_588, 1);
679 pub(crate) const MID2_OUTLAW_4PC_CHANCE: (u32, u8) = (1_296_589, 1);
681 pub(crate) const LUCKY_COIN_FLIPS: (u32, u8) = (1_248_970, 1);
683 pub(crate) const LUCKY_COIN_ODDS: (u32, u8) = (1_248_971, 5);
685 pub(crate) const MAIN_GAUCHE_DAMAGE: (u32, u8) = (86392, 1);
687 pub(crate) const MAIN_GAUCHE_MASTERY_COEF: (u32, u8) = (76806, 2);
689 pub(crate) const MEAN_STREAK_ODDS: (u32, u8) = (453_428, 1);
691 pub(crate) const PALMED_BULLETS_CHANCE: (u32, u8) = (1_265_863, 1);
693 pub(crate) const PISTOL_SHOT_DAMAGE: (u32, u8) = (185_763, 1);
695 pub(crate) const QUICK_DRAW_ENERGIZE: (u32, u8) = (1_254_567, 1);
697 pub(crate) const RAVENHOLDT_MINT_HEADS: (u32, u8) = (1_276_809, 1);
699 pub(crate) const RESTLESS_BLADES_CDR: (u32, u8) = (79096, 1);
701 pub(crate) const RUTHLESSNESS_CP: (u32, u8) = (14161, 1);
703 pub(crate) const SUMMARILY_DISPATCHED_DMG: (u32, u8) = (381_990, 2);
705 pub(crate) const SCOUNDREL_CP_THRESHOLD: (u32, u8) = (1_265_862, 1);
707 pub(crate) const SCOUNDREL_STRIKE_DAMAGE: (u32, u8) = (1_265_918, 1);
709 pub(crate) const SINISTER_STRIKE_EXTRA_ATTACK_DAMAGE: (u32, u8) = (197_834, 1);
711 pub(crate) const SLEIGHT_OF_HAND_CHANCE: (u32, u8) = (381_839, 1);
713 pub(crate) const BLADE_RUSH_PRIMARY_MULT: (u32, u8) = (271_881, 2);
715 pub(crate) const BLADE_RUSH_SECONDARY_MULT: (u32, u8) = (271_877, 1);
717 pub(crate) const CONTROLLED_CHAOS_STREAK: (u32, u8) = (1_276_816, 1);
719 pub(crate) const RUSH_ENERGY: (u32, u8) = (1_249_204, 2);
721 pub(crate) const RUSH_ENERGY_EDGE: (u32, u8) = (1_249_204, 4);
723 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, ¶ms.game_data),
1720 )
1721 .aura(
1722 "opportunity",
1723 AURA::OPPORTUNITY,
1724 |a| aura_opportunity(a, ¶ms.game_data),
1725 )
1726 .aura("audacity", AURA::AUDACITY, |a| aura_audacity(a, ¶ms.game_data))
1727 .aura(
1728 "between_the_eyes",
1729 AURA::BETWEEN_THE_EYES,
1730 |a| aura_between_the_eyes(a, ¶ms.game_data),
1731 )
1732 .aura("stealth", AURA::STEALTH, |a| aura_stealth(a, ¶ms.game_data))
1733 .aura("vanish", AURA::VANISH, |a| aura_vanish(a, ¶ms.game_data))
1734 .aura("subterfuge", AURA::SUBTERFUGE, |a| aura_subterfuge(a, ¶ms.game_data))
1735 .aura(
1736 "hidden_opportunity",
1737 AURA::HIDDEN_OPPORTUNITY,
1738 |a| aura_hidden_opportunity(a, ¶ms.game_data),
1739 )
1740 .aura(
1741 "deft_maneuvers",
1742 AURA::DEFT_MANEUVERS,
1743 |a| aura_deft_maneuvers(a, ¶ms.game_data),
1744 )
1745 .aura("vigor", AURA::VIGOR, |a| aura_vigor(a, ¶ms.game_data))
1746 .aura(
1747 "fang_strike",
1748 AURA::FANG_STRIKE,
1749 |a| aura_fang_strike(a, ¶ms.game_data),
1750 )
1751 .aura(
1752 "one_of_a_kind",
1753 AURA::ONE_OF_A_KIND,
1754 |a| aura_one_of_a_kind(a, ¶ms.game_data),
1755 )
1756 .aura(
1757 "double_trouble",
1758 AURA::DOUBLE_TROUBLE,
1759 |a| aura_double_trouble(a, ¶ms.game_data),
1760 )
1761 .aura(
1762 "triple_threat",
1763 AURA::TRIPLE_THREAT,
1764 |a| aura_triple_threat(a, ¶ms.game_data),
1765 )
1766 .aura("jackpot", AURA::JACKPOT, |a| aura_jackpot(a, ¶ms.game_data))
1767 .aura(
1768 "loaded_dice",
1769 AURA::LOADED_DICE,
1770 |a| aura_loaded_dice(a, ¶ms.game_data),
1771 )
1772 .aura(
1773 "adrenaline_rush",
1774 AURA::ADRENALINE_RUSH,
1775 |a| aura_adrenaline_rush(a, ¶ms.game_data),
1776 )
1777 .aura(
1778 "blade_flurry",
1779 AURA::BLADE_FLURRY,
1780 |a| aura_blade_flurry(a, ¶ms.game_data),
1781 )
1782 .aura(
1783 "instant_poison",
1784 AURA::INSTANT_POISON,
1785 |a| aura_instant_poison(a, ¶ms.game_data),
1786 )
1787 .aura(
1788 "wound_poison",
1789 AURA::WOUND_POISON,
1790 |a| aura_wound_poison(a, ¶ms.game_data),
1791 )
1792 .aura(
1793 "atrophic_poison",
1794 AURA::ATROPHIC_POISON,
1795 |a| aura_atrophic_poison(a, ¶ms.game_data),
1796 )
1797 .aura(
1798 "numbing_poison",
1799 AURA::NUMBING_POISON,
1800 |a| aura_numbing_poison(a, ¶ms.game_data),
1801 )
1802 .aura(
1803 "crippling_poison",
1804 AURA::CRIPPLING_POISON,
1805 |a| aura_crippling_poison(a, ¶ms.game_data),
1806 )
1807 .aura(
1808 "improved_adrenaline_rush",
1809 AURA::IMPROVED_ADRENALINE_RUSH,
1810 |a| aura_improved_adrenaline_rush(a, ¶ms.game_data),
1811 )
1812 .aura(
1813 "blade_rush_energize",
1814 AURA::BLADE_RUSH_ENERGIZE,
1815 |a| aura_blade_rush_energize(a, ¶ms.game_data),
1816 )
1817 .aura(
1818 "palmed_bullets",
1819 AURA::PALMED_BULLETS,
1820 |a| aura_palmed_bullets(a, ¶ms.game_data),
1821 )
1822 .aura(
1823 "gravedigger",
1824 AURA::GRAVEDIGGER,
1825 |a| aura_gravedigger(a, ¶ms.game_data),
1826 )
1827 .aura(
1828 "deadly_pursuit_wait",
1829 AURA::DEADLY_PURSUIT_WAIT,
1830 |a| aura_deadly_pursuit_wait(a, ¶ms.game_data),
1831 )
1832 .aura(
1833 "deadly_pursuit_cdr",
1834 AURA::DEADLY_PURSUIT_CDR,
1835 |a| aura_deadly_pursuit_cdr(a, ¶ms.game_data),
1836 )
1837 .aura(
1838 "pvp_rules_enabled_hardcoded",
1839 AURA::PVP_RULES_ENABLED_HARDCODED,
1840 |a| aura_pvp_rules_enabled_hardcoded(a, ¶ms.game_data),
1841 )
1842 .aura(
1843 "fatebound_coin_heads",
1844 AURA::FATEBOUND_COIN_HEADS,
1845 |a| aura_fatebound_coin_heads(a, ¶ms.game_data),
1846 )
1847 .aura(
1848 "fatebound_coin_tails",
1849 AURA::FATEBOUND_COIN_TAILS,
1850 |a| aura_fatebound_coin_tails(a, ¶ms.game_data),
1851 )
1852 .aura(
1853 "fatebound_lucky_coin",
1854 AURA::FATEBOUND_LUCKY_COIN,
1855 |a| aura_fatebound_lucky_coin(a, ¶ms.game_data),
1856 )
1857 .aura(
1858 "lucky_coin_counter",
1859 AURA::LUCKY_COIN_COUNTER,
1860 |a| aura_lucky_coin_counter(a, ¶ms.game_data),
1861 )
1862 .spell(
1863 "thistle_tea",
1864 SPELL::THISTLE_TEA,
1865 |s| spell_thistle_tea(s, ¶ms.game_data),
1866 )
1867 .spell("vanish", SPELL::VANISH, |s| spell_vanish(s, ¶ms.game_data))
1868 .spell(
1869 "sinister_strike",
1870 SPELL::SINISTER_STRIKE,
1871 |s| spell_sinister_strike(s, ¶ms.game_data),
1872 )
1873 .spell(
1874 "sinister_strike_extra_attack",
1875 SPELL::SINISTER_STRIKE_EXTRA_ATTACK,
1876 |s| spell_sinister_strike_extra_attack(s, ¶ms.game_data),
1877 )
1878 .spell(
1879 "pistol_shot",
1880 SPELL::PISTOL_SHOT,
1881 |s| spell_pistol_shot(s, ¶ms.game_data),
1882 )
1883 .spell("ambush", SPELL::AMBUSH, |s| spell_ambush(s, ¶ms.game_data))
1884 .spell("dispatch", SPELL::DISPATCH, |s| spell_dispatch(s, ¶ms.game_data))
1885 .spell(
1886 "between_the_eyes",
1887 SPELL::BETWEEN_THE_EYES,
1888 |s| spell_between_the_eyes(s, ¶ms.game_data),
1889 )
1890 .spell(
1891 "eviscerate",
1892 SPELL::EVISCERATE,
1893 |s| spell_eviscerate(s, ¶ms.game_data),
1894 )
1895 .spell(
1896 "slice_and_dice",
1897 SPELL::SLICE_AND_DICE,
1898 |s| spell_slice_and_dice(s, ¶ms.game_data),
1899 )
1900 .spell(
1901 "instant_poison",
1902 SPELL::INSTANT_POISON,
1903 |s| spell_instant_poison(s, ¶ms.game_data),
1904 )
1905 .spell(
1906 "wound_poison",
1907 SPELL::WOUND_POISON,
1908 |s| spell_wound_poison(s, ¶ms.game_data),
1909 )
1910 .spell(
1911 "atrophic_poison",
1912 SPELL::ATROPHIC_POISON,
1913 |s| spell_atrophic_poison(s, ¶ms.game_data),
1914 )
1915 .spell(
1916 "numbing_poison",
1917 SPELL::NUMBING_POISON,
1918 |s| spell_numbing_poison(s, ¶ms.game_data),
1919 )
1920 .spell(
1921 "crippling_poison",
1922 SPELL::CRIPPLING_POISON,
1923 |s| spell_crippling_poison(s, ¶ms.game_data),
1924 )
1925 .spell(
1926 "main_gauche",
1927 SPELL::MAIN_GAUCHE,
1928 |s| spell_main_gauche(s, ¶ms.game_data),
1929 )
1930 .spell(
1931 "scoundrel_strike",
1932 SPELL::SCOUNDREL_STRIKE,
1933 |s| spell_scoundrel_strike(s, ¶ms.game_data),
1934 )
1935 .spell(
1936 "instant_poison_damage",
1937 SPELL::INSTANT_POISON_DAMAGE,
1938 |s| spell_instant_poison_damage(s, ¶ms.game_data),
1939 )
1940 .spell("kick", SPELL::KICK, |s| spell_kick(s, ¶ms.game_data))
1941 .spell(
1942 "roll_the_bones",
1943 SPELL::ROLL_THE_BONES,
1944 |s| spell_roll_the_bones(s, ¶ms.game_data),
1945 )
1946 .spell(
1947 "adrenaline_rush",
1948 SPELL::ADRENALINE_RUSH,
1949 |s| spell_adrenaline_rush(s, ¶ms.game_data),
1950 )
1951 .spell(
1952 "blade_flurry",
1953 SPELL::BLADE_FLURRY,
1954 |s| spell_blade_flurry(s, ¶ms.game_data),
1955 )
1956 .spell(
1957 "blade_flurry_instant_attack",
1958 SPELL::BLADE_FLURRY_INSTANT_ATTACK,
1959 |s| spell_blade_flurry_instant_attack(s, ¶ms.game_data),
1960 )
1961 .spell(
1962 "blade_rush",
1963 SPELL::BLADE_RUSH,
1964 |s| spell_blade_rush(s, ¶ms.game_data),
1965 )
1966 .spell(
1967 "killing_spree",
1968 SPELL::KILLING_SPREE,
1969 |s| spell_killing_spree(s, ¶ms.game_data),
1970 )
1971 .spell(
1972 "keep_it_rolling",
1973 SPELL::KEEP_IT_ROLLING,
1974 |s| spell_keep_it_rolling(s, ¶ms.game_data),
1975 )
1976 .spell(
1977 "preparation",
1978 SPELL::PREPARATION,
1979 |s| spell_preparation(s, ¶ms.game_data),
1980 )
1981 .spell(
1982 "blade_rush_attack",
1983 SPELL::BLADE_RUSH_ATTACK,
1984 |s| spell_blade_rush_attack(s, ¶ms.game_data),
1985 )
1986 .auto_attack(|a| {
1987 a
1988 .spell_id(6603)
1989 .swing_ms(2600)
1990 .apply_base_from_data(¶ms.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 ¶ms.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 ¶ms,
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);