azeroth-shell 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +26 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +126 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,1149 @@
1
+ import type {
2
+ BuffMod,
3
+ ConditionDef,
4
+ ControlKind,
5
+ Mechanic,
6
+ PowerType,
7
+ School,
8
+ SealKind,
9
+ ShapeshiftFormId,
10
+ TotemSlot,
11
+ } from './primitives.ts';
12
+
13
+ // What Judgement unleashes per seal: damage seals roll min..max holy; utility and Crusader seals
14
+ // apply `debuffSpellId` instead. Cite: Paladin.cpp:78–116 spell_judgement; Spell.sql JoC ranks.
15
+ export interface JudgementBurst {
16
+ school: School;
17
+ min: number;
18
+ max: number;
19
+ halveIfNotStunned?: boolean;
20
+ // The judgement damage carrier this burst resolved from (20187 JoR r1, 20467 JoC r1), kept so the
21
+ // combat site can read its effectBonusCoefficient — the burst rolls from the tables here.
22
+ spellId?: number;
23
+ // Bonus-damage coefficient from the carrier's effectBonusCoefficient[slot], filled by
24
+ // buildCombatant; the store-free interpreter path rolls from transcribed tables and has no slot.
25
+ coeff?: number;
26
+ /** JoL/JoW/JoC aura applied to the judged target (e.g. 20185 / 20186 / 20188). */
27
+ debuffSpellId?: number;
28
+ /** Debuff display name (Judgement of Light / Wisdom / Crusader). */
29
+ debuffName?: string;
30
+ /** Debuff duration ms. Classic JoL/JoW/JoC rows bake to 10_000. */
31
+ debuffDurationMs?: number;
32
+ // Heal the striker on a landed melee hit vs the judged target. Sourced: Spell.sql Judgement of Light heal
33
+ // carriers (20267 bp24→25, …).
34
+ onHitHeal?: number;
35
+ // Restore mana to the striker on a landed melee hit vs the judged target. Sourced: Spell.sql Judgement of
36
+ // Wisdom energize carriers (20268 bp32→33, …).
37
+ onHitMana?: number;
38
+ // Flat spell/holy damage taken on the judged target (Judgement of the Crusader), from Spell.sql
39
+ // aura 14 basePoints+dice. Cite: SpellAuras.cpp SPELL_AURA_MOD_DAMAGE_TAKEN.
40
+ spellTaken?: number;
41
+ }
42
+
43
+ // One aura-removal body: `cast` fires `spellId`, `remove_aura` strips it, `heal_full` restores the
44
+ // caster. `amount` overrides the payload roll. Cite: SpellAuras.cpp HandleAuraDummy(!apply).
45
+ export interface AuraRemoveBody {
46
+ action: 'cast' | 'remove_aura' | 'heal_full';
47
+ spellId?: number;
48
+ mode: 'expire' | 'death' | 'dispel' | 'any';
49
+ amount?: number;
50
+ /** Who casts / is acted on. Defaults: caster → holder (`caster->CastSpell(target, …)`). */
51
+ from?: 'caster' | 'holder';
52
+ to?: 'caster' | 'holder';
53
+ }
54
+
55
+ type SpellEffectBody =
56
+ // `pointsPerComboPoint` (from EffectPointsPerComboPointN) is added per combo point at cast time
57
+ // when the caster has points on the target (CMaNGOS Object.cpp CalculateSpellEffectValue).
58
+ // `hostile: false` = EffectImplicitTargetA is TARGET_UNIT_CASTER (1) and the damage lands on the
59
+ // CASTER — every engineering backfire, Dark Rune, Shadow Bolt Misfire. Cite: SpellTargetDefines.h.
60
+ | { kind: 'direct_damage'; school: School; min: number; max: number; pointsPerComboPoint?: number; hostile?: boolean }
61
+ // Periodic damage. `leechMultiple` (aura 53) also heals the caster for dealt × multiplier;
62
+ // `healthFunnel` (aura 62) reverses it. Cite: SpellAuras.cpp PeriodicTick :4592–4683.
63
+ | {
64
+ kind: 'dot';
65
+ school: School;
66
+ min: number;
67
+ max: number;
68
+ durationMs: number;
69
+ tickMs: number;
70
+ pointsPerComboPoint?: number;
71
+ leechMultiple?: number;
72
+ healthFunnel?: boolean;
73
+ // EffectImplicitTargetA caster/self (TARGET_UNIT_CASTER=1): the aura sits on the caster.
74
+ // false → applySpell routes to src; true/absent → foe. Cite: SpellTargetDefines.h.
75
+ hostile?: boolean;
76
+ }
77
+ // SPELL_EFFECT_PERSISTENT_AREA_AURA (27) + PERIODIC_DAMAGE (aura 3): a session-owned ground pool,
78
+ // not a unit DoT. `radius` absent ⇒ text combat hits the whole hostile side (GAP).
79
+ | { kind: 'persistent_area'; school: School; min: number; max: number; durationMs: number; tickMs: number; radius?: number; pointsPerComboPoint?: number }
80
+ // `applyTo` routes party/friend heals like buffs: 'party' → every living friendly, 'friendly' →
81
+ // lowest-HP ally, 'pet' → pet, omit → single-target triage / self. Cite: healTargets.ts.
82
+ | { kind: 'heal'; min: number; max: number; applyTo?: 'self' | 'pet' | 'friendly' | 'party' }
83
+ // SPELL_EFFECT_INSTAKILL (1). `self` / `selfCast` when EffectImplicitTargetA is caster
84
+ // (Voidwalker Sacrifice kills the pet). Cite: SpellEffects.cpp:205–221.
85
+ | { kind: 'instakill'; self?: boolean; selfCast?: boolean }
86
+ // SPELL_EFFECT_SUMMON_CRITTER (97) mini-pet. Cite: SpellEffects.cpp:5031–5111.
87
+ | { kind: 'summon_critter'; creature: number; durationMs: number; despawnOnly?: boolean }
88
+ // SPELL_AURA_MOD_SCALE (61) cosmetic size %. Cite: SpellAuras.cpp:2182–2185.
89
+ | { kind: 'mod_scale'; pct: number; durationMs: number }
90
+ // Optional mechanic (usually 'root') so mechanic immunity / DR can key the live aura without
91
+ // inventing from kind alone. Cite: SharedDefines MECHANIC_ROOT=7; spell_template.Mechanic.
92
+ | { kind: 'root'; durationMs: number; mechanic?: Mechanic }
93
+ // Crowd control (stun / fear / incapacitate / silence / disarm / root). `mechanic` groups DR and
94
+ // gates type immunity; `breakOnDamage` drops it on the next hit. `pulseMs` is dead — no reader.
95
+ | { kind: 'cc'; control: ControlKind; mechanic: Mechanic; durationMs: number; school: School; breakOnDamage?: boolean; pulseMs?: number; onlyTypes?: number[] }
96
+ // SPELL_EFFECT_INTERRUPT_CAST (68): cancel an interruptible cast and lock out the VICTIM's cast
97
+ // school for `lockoutMs`. Not a global silence. Cite: SpellEffects.cpp EffectInterruptCast.
98
+ | { kind: 'interrupt_cast'; lockoutMs: number }
99
+ // SPELL_EFFECT_TRIGGER_SPELL (64): on a successful hit, cast the triggered spell's effects.
100
+ // Distinct from aura 42 `proc_trigger_spell`. Cite: SpellEffects.cpp EffectTriggerSpell.
101
+ | { kind: 'trigger_spell'; spellId: number }
102
+ | { kind: 'mechanic_immunity_purge'; mechanic: number; mechanicMask: number }
103
+ // SPELL_AURA_ADD_TARGET_TRIGGER (109): self-aura; a later isAffectedOnSpell hit chance-casts
104
+ // EffectTriggerSpell. Cite: SpellAuras.cpp:170; Spell.cpp:7433–7468 ProcSpellAuraTriggers.
105
+ | {
106
+ kind: 'add_target_trigger';
107
+ triggerSpellId: number;
108
+ chancePct: number;
109
+ durationMs: number;
110
+ /** Holder SpellFamilyName. Cite: SpellAuras.cpp:708. */
111
+ familyName?: number;
112
+ /** EffectItemType / spell_affect mask. Cite: SpellMgr.h:1950–1958 GetSpellAffectMask. */
113
+ familyFlags?: number;
114
+ }
115
+ // A permanent per-school magic resistance contribution, summed into `resistances`. hostile:true
116
+ // (or amount < 0) → foe debuff; false/positive → self. Cite: isHostileBuffEffect; KI-765.
117
+ // `pct` is the BASE_PCT form (aura 142 with a magic-school mask — Ossirian's Weaknesses −100).
118
+ // It resolves to a flat amount against the target's own resistance at apply. Cite: SpellAuras.cpp:3425.
119
+ | { kind: 'resist'; school: School; amount: number; hostile?: boolean; pct?: number }
120
+ // A self-cast control-breaker (Will of the Forsaken, Escape Artist): removes the listed controls
121
+ // and with `immuneMs` grants brief immunity. Usable WHILE controlled — that is the point.
122
+ | { kind: 'cleanse'; controls: ControlKind[]; immuneMs?: number }
123
+ // SPELL_EFFECT_DISPEL (38): remove up to `count` auras of `dispelType` (0 → 1 per
124
+ // ProcessDispelList). Cite: SpellEffects.cpp EffectDispel; domain/spells/dispel.ts.
125
+ | { kind: 'dispel'; dispelType: number; count: number }
126
+ // SPELL_EFFECT_DISPEL_MECHANIC (108): remove up to `count` holders with HasMechanic(mechanic),
127
+ // mechanic from EffectMiscValue. Cite: SpellEffects.cpp:2499–2519; SpellAuras.cpp:5786–5794.
128
+ | { kind: 'dispel_mechanic'; mechanic: number; count: number }
129
+ // SPELL_AURA_SPELL_MAGNET (96), Grounding Totem: redirect one MAGIC/NONE single-target spell to
130
+ // the aura caster. durationMs 0 → totem lifetime. Cite: Unit.cpp:6896–6922 SelectMagnetTarget.
131
+ | { kind: 'spell_magnet'; durationMs: number; charges?: number }
132
+ // SPELL_AURA_REFLECT_SPELLS (28) / _SCHOOL (74): reflect incoming harmful magic with `pct`
133
+ // chance; `school` omitted → all schools. Cite: Unit.cpp GetReflectChance ~3425.
134
+ | { kind: 'reflect'; pct: number; school?: School; durationMs: number }
135
+ // SPELL_AURA_FEATHER_FALL (105): Slow Fall self aura. Text game registers the aura so cast is
136
+ // not a pure mana sink; no movement simulation. durationMs from DurationIndex.
137
+ | { kind: 'feather_fall'; durationMs: number }
138
+ // SPELL_EFFECT_REPUTATION (103): grant rep to EffectMiscValue's faction on cast. An effect row,
139
+ // not an intent, because only effects[] reaches the OOC applier. Cite: SpellEffects.cpp:4908–4926.
140
+ | { kind: 'reputation'; factionId: number; amount: number }
141
+ // SPELL_AURA_WATER_BREATHING (82): unlimited breath while the aura is up (interval multiplier 0).
142
+ // Cite: SpellAuras.cpp HandleWaterBreathing :1688; domain/world/hazards.ts.
143
+ | { kind: 'water_breathing'; durationMs: number }
144
+ // SPELL_AURA_WATER_WALK (104): walk on water. Text registers the aura; no surface sim.
145
+ // Cite: SpellAuras.cpp HandleAuraWaterWalk :1661.
146
+ | { kind: 'water_walk'; durationMs: number }
147
+ // SPELL_AURA_HOVER (106): SetHover / MOVEFLAG_HOVER. Cite: SpellAuras.cpp:1681; Object.h:750.
148
+ | { kind: 'hover'; durationMs: number }
149
+ // SPELL_AURA_MOD_INVISIBILITY_DETECTION (19): Detect (Lesser/Greater) Invisibility strength.
150
+ // Text aura chip; world invis visibility residual. Cite: SpellAuras.cpp :2677–2717.
151
+ | { kind: 'mod_invisibility_detection'; amount: number; durationMs: number }
152
+ // Also an interpreter intent, but needed as an effect or the spell reads as a pure mana sink.
153
+ // SPELL_AURA_TRACK_RESOURCES (45): Find Treasure/Minerals/Herbs. Cite: SpellAuras.cpp:2163–2171.
154
+ | { kind: 'track_resources'; resourceType: number; trackFlag: number; durationMs: number }
155
+ // SPELL_AURA_SAFE_FALL (144): Slow Fall height reduction. Cite: Player.cpp:19535–19537.
156
+ | { kind: 'safe_fall'; amount: number; durationMs: number }
157
+ // SPELL_AURA_MOD_UNATTACKABLE (93): Phase Shift (Imp). Cite: SpellAuras.cpp:4454–4459.
158
+ | { kind: 'mod_unattackable'; durationMs: number; combatStopOnApply: true }
159
+ // SPELL_AURA_INTERRUPT_REGEN (94). Cite: SpellAuras.cpp:5111–5119; Player.cpp:2303–2304.
160
+ | { kind: 'interrupt_regen'; durationMs: number; setInDummyCombatState?: boolean }
161
+ // SPELL_AURA_MOD_WATER_BREATHING (155): Undead racial 5227 — multiplier, not the forced-0
162
+ // `water_breathing` above. Cite: SpellAuras.cpp:1701–1706.
163
+ | { kind: 'mod_water_breathing'; amount: number; intervalMultiplier: number; durationMs: number }
164
+ // SPELL_EFFECT_TELEPORT_UNITS (5) with a spell_target_position dest; OOC routes through
165
+ // castTeleport + reagents. Mage Portals (TRANS_DOOR 50) too. Cite: SpellEffects.cpp:1683.
166
+ | { kind: 'teleport' }
167
+ // SPELL_EFFECT_TELEPORT_UNITS with TARGET_LOCATION_CASTER_HOME_BIND (9): Astral Recall /
168
+ // Hearthstone-class homebind. Cite: SpellTargetDefines.h TARGET_LOCATION_CASTER_HOME_BIND = 9.
169
+ | { kind: 'teleport_hearth' }
170
+ // SPELL_EFFECT_BIND (11): SetHomebindToLocation at current position (hearth/home).
171
+ // Cite: SpellEffects.cpp:5544–5578. OOC writes char.hearthBind (same field bindHearth uses).
172
+ | { kind: 'bind_hearth' }
173
+ // SPELL_EFFECT_LEARN_SPELL (36) player path — learnGrantIds / ooc learn().
174
+ // Cite: SpellEffects.cpp:2445–2465 EffectLearnSpell.
175
+ | { kind: 'learn_spell'; spellId: number }
176
+ // SPELL_EFFECT_DUAL_WIELD (40). SetCanDualWield(true). Cite: SpellEffects.cpp:2628–2632.
177
+ | { kind: 'can_dual_wield' }
178
+ // SPELL_EFFECT_SEND_TAXI (123). ActivateTaxiPathTo(misc). Cite: SpellEffects.cpp:5124–5130.
179
+ | { kind: 'send_taxi'; pathId: number }
180
+ // SPELL_EFFECT_SUMMON_PLAYER (85). SetSummonPoint + summon request. Cite: SpellEffects.cpp:4356.
181
+ | { kind: 'summon_player' }
182
+ // EffectEmpty / EffectUnused / HandleUnused — client-inform marker, OOC aura chip.
183
+ // Cite: SpellEffects.cpp:190–203 EffectEmpty/EffectUnused.
184
+ | { kind: 'client_inform' }
185
+ // SPELL_EFFECT_LEARN_PET_SPELL (57): pet->learnSpell(EffectTriggerSpell).
186
+ // Cite: SpellEffects.cpp:3386–3404. OOC writes char.petSpells (same field trainPet uses).
187
+ | { kind: 'learn_pet_spell'; spellId: number }
188
+ // SPELL_EFFECT_ADD_HONOR (45): AddHonorCP(damage, HONORABLE) — amount is effect value.
189
+ // Cite: SpellEffects.cpp:3026–3035. OOC writes char.honor via addBonusHonor.
190
+ | { kind: 'add_honor'; amount: number }
191
+ // SPELL_EFFECT_DESTROY_ALL_TOTEMS (110): UnSummon every totem slot.
192
+ // Cite: SpellEffects.cpp:5202–5207. Combat calls unsummonAllTotems.
193
+ | { kind: 'destroy_all_totems' }
194
+ // SPELL_AURA_NO_PVP_CREDIT (159) — Honorless Target. Victim grants no honor.
195
+ // Cite: SpellAuras.cpp:220; Player.cpp:6626–6627 RewardHonor GetAura(2479).
196
+ | { kind: 'no_pvp_credit'; durationMs: number }
197
+ // SPELL_EFFECT_PULL_TOWARDS (124). KnockBackWithAngle toward caster.
198
+ // Cite: SpellEffects.cpp:5132–5162; combat/knockBack.ts.
199
+ | { kind: 'pull_towards'; speedXY: number; speedZ?: number; distance?: number }
200
+ // SPELL_EFFECT_TELEPORT_GRAVEYARD (120): send the target to its team's nearest graveyard — the BG
201
+ // resurrection payload (24237, spirit guides 13116/13117). Cite: BattleGround.h:85.
202
+ | { kind: 'teleport_graveyard' }
203
+ // SPELL_EFFECT_QUEST_COMPLETE (16): AreaExploredOrEventHappens(EffectMiscValue) — the BG
204
+ // objective credits 23658 / 24061 / 24064 are these. Cite: SpellEffects.cpp:4928-4935.
205
+ | { kind: 'quest_complete'; questId: number }
206
+ // SPELL_EFFECT_PICKPOCKET (71). OOC/stealth humanoid loot path. Cite: SpellEffects.cpp:2662.
207
+ | { kind: 'pickpocket' }
208
+ // SPELL_EFFECT_SKINNING (95). Corpse → game.skin. Cite: SpellEffects.cpp:4970.
209
+ | { kind: 'skinning' }
210
+ // SPELL_EFFECT_DISENCHANT (99). Item-target DE → game.disenchant. Cite: SpellEffects.cpp:4640.
211
+ | { kind: 'disenchant' }
212
+ // SPELL_EFFECT_DISTRACT (69). World attention/threat stub; durationMs = damage * 1000.
213
+ // Cite: SpellEffects.cpp:2640–2660; Common.h IN_MILLISECONDS.
214
+ | { kind: 'distract'; durationMs: number }
215
+ // SPELL_AURA_AURAS_VISIBLE (100) — Detect Magic. Text aura registers detection on target.
216
+ // Cite: SpellAuras.cpp HandleAurasVisible :3383.
217
+ | { kind: 'auras_visible'; durationMs: number }
218
+ // SPELL_AURA_MOD_DETECT_RANGE (91) — Mind Soothe yards (signed). Cite: Unit.cpp GetAttackDistance.
219
+ | { kind: 'mod_detect_range'; amount: number; durationMs: number }
220
+ // SPELL_AURA_BIND_SIGHT (1) — Mind Vision camera channel. Text: aura chip (no multi-session cam).
221
+ // Cite: SpellAuras.cpp HandleBindSight :2126.
222
+ | { kind: 'bind_sight'; durationMs: number }
223
+ // Periodic restore: food/drink OOC, Evocation per tick while channelling. `pctOfMax` (auras 20/21
224
+ // OBS_MOD_HEALTH/MANA) restores floor(max × pct/100) and ignores amountPerTick.
225
+ | {
226
+ kind: 'restore_health';
227
+ amountPerTick: number;
228
+ tickMs: number;
229
+ durationMs: number;
230
+ pctOfMax?: number;
231
+ // TARGET_PET=5 (Health Funnel / Mend Pet). Omit → lowest-HP friendly / self.
232
+ applyTo?: 'self' | 'pet' | 'friendly' | 'party';
233
+ }
234
+ // Periodic power restore/drain. A negative amountPerTick is PERIODIC_MANA_LEECH on the cast
235
+ // target unless `hostile: false` (self maintain cost). Cite: SpellAuras.cpp:1031–1042.
236
+ | {
237
+ kind: 'restore_power';
238
+ amountPerTick: number;
239
+ tickMs: number;
240
+ durationMs: number;
241
+ pctOfMax?: number;
242
+ // Powers index this fills (EffectMiscValue): 0 mana, 1 rage, 2 focus, 3 energy. Absent on an
243
+ // older bake, which the consumer reads as mana. Cite: SpellAuras.cpp:4836.
244
+ powerType?: number;
245
+ /** When false, negative ticks drain the caster (self cost), not the foe. Default: hostile leech. */
246
+ hostile?: boolean;
247
+ // SPELL_AURA_PERIODIC_MANA_LEECH EffectMultipleValue: caster gains drained × this each tick. Drain
248
+ // Mana mv=1 transfers; Viper Sting mv=0 is pure drain. Cite: SpellAuras.cpp:4747–4806.
249
+ leechMultiple?: number;
250
+ }
251
+ // SPELL_EFFECT_POWER_DRAIN (8): drain min..max power (capped at current); the caster gains
252
+ // drained × multiplier as mana. Cite: SpellEffects.cpp EffectPowerDrain.
253
+ | { kind: 'power_drain'; powerType: number; min: number; max: number; multiplier: number }
254
+ // SPELL_EFFECT_POWER_BURN (62): burn min..max power, deal burned × multiplier as school damage.
255
+ // Cite: SpellEffects.cpp EffectPowerBurn.
256
+ | { kind: 'power_burn'; powerType: number; min: number; max: number; multiplier: number; school: School }
257
+ // SPELL_EFFECT_HEALTH_LEECH (9): deal min..max school damage, heal caster damage × multiplier.
258
+ // Cite: SpellEffects.cpp EffectHealthLeech.
259
+ | { kind: 'health_leech'; school: School; min: number; max: number; multiplier: number }
260
+ // SPELL_EFFECT_ENERGIZE (30) for non-rage powers (rage stays on rageGenerated).
261
+ // Cite: SpellEffects.cpp EffectEnergize.
262
+ | { kind: 'energize'; powerType: number; min: number; max: number }
263
+ // Warlock Life Tap (DUMMY SPELLFAMILY_WARLOCK 0x40000): `healthCost` HP paid as power cost →
264
+ // `manaGain` via CastCustomSpell(31818). Cite: Warlock.cpp LifeTap :52–103.
265
+ | { kind: 'life_tap'; healthCost: number; manaGain: number }
266
+ // SPELL_EFFECT_HEAL_MAX_HEALTH (67): heal equal to the CASTER's max health (Lay on Hands).
267
+ // Cite: SpellEffects.cpp EffectHealMaxHealth.
268
+ | { kind: 'heal_max_health' }
269
+ // SPELL_EFFECT_WEAPON_PERCENT_DAMAGE (31): a weapon swing at pct% weapon damage, not flat damage.
270
+ // Cite: Unit.cpp CalculateDamage WEAPON_PERCENT_DAMAGE path.
271
+ | { kind: 'weapon_percent_damage'; pct: number }
272
+ // SPELL_AURA_SCHOOL_IMMUNITY (39): immune to the schools in `schoolMask`. Divine Protection stacks
273
+ // physical (1) + magic (126). Cite: SpellAuras.cpp HandleAuraModSchoolImmunity ~2992.
274
+ | { kind: 'school_immunity'; schoolMask: number; durationMs: number; positive?: boolean }
275
+ // SPELL_AURA_DAMAGE_IMMUNITY (40): immune to *damage* of schools in mask (not full aura block).
276
+ // Cite: SpellAuras.cpp HandleAuraModDmgImmunity ~3042.
277
+ | { kind: 'damage_immunity'; schoolMask: number; durationMs: number; positive?: boolean }
278
+ // SPELL_AURA_MECHANIC_IMMUNITY (77): immune to one mechanic id (EffectMiscValue, 1-based).
279
+ // Forbearance = MECHANIC_INVULNERABILITY (25). Cite: SpellAuras.cpp HandleModMechanicImmunity.
280
+ | { kind: 'mechanic_immunity'; mechanic: number; durationMs: number; positive?: boolean; charges?: number }
281
+ // SPELL_AURA_DISPEL_IMMUNITY (41): immune to one DispelType, and with IMMUNITY_PURGES_EFFECT it
282
+ // strips what is already held (Stoneform 20594 POISON). Cite: SpellAuras.cpp ~3053.
283
+ | { kind: 'dispel_immunity'; dispelType: number; durationMs: number; positive?: boolean }
284
+ // SPELL_AURA_STATE_IMMUNITY (38): immune to one AuraType (EffectMiscValue), purging what is held
285
+ // when IMMUNITY_PURGES_EFFECT. Cite: SpellAuras.cpp HandleAuraModStateImmunity ~2972.
286
+ | { kind: 'state_immunity'; stateAuraType: number; durationMs: number; positive?: boolean }
287
+ // SPELL_AURA_EFFECT_IMMUNITY (37): immune to one SpellEffect id. The WSG flag auras 23333/23335
288
+ // carry misc 85 SUMMON_PLAYER — a flag carrier cannot be ported away. Cite: SpellAuras.cpp:2962.
289
+ | { kind: 'effect_immunity'; effectId: number; durationMs: number; positive?: boolean }
290
+ // SPELL_AURA_MOD_PACIFY (25): cannot melee/ranged attack (can still cast). NOT silence.
291
+ // Cite: SpellAuras.cpp HandleAuraModPacify ~4382; UNIT_FLAG_PACIFIED.
292
+ | { kind: 'pacify'; durationMs: number }
293
+ // SPELL_AURA_SCHOOL_ABSORB (69): absorb pool vs `schoolMask`, rolled once at apply. `applyTo:
294
+ // 'owner'` = TARGET_UNIT_CASTER_MASTER (27), a pet's pool lands on the master (Sacrifice 7812).
295
+ | {
296
+ kind: 'school_absorb';
297
+ schoolMask: number;
298
+ min: number;
299
+ max: number;
300
+ durationMs: number;
301
+ applyTo?: 'self' | 'owner';
302
+ }
303
+ // SPELL_AURA_MANA_SHIELD (97): absorb pool paid from mana at `manaMultiplier` per point (classic
304
+ // ranks = 2); depletes on amount, not OOM. Cite: Unit.cpp ~2457–2496.
305
+ | { kind: 'mana_shield'; schoolMask: number; min: number; max: number; manaMultiplier: number; durationMs: number }
306
+ // SPELL_EFFECT_ADD_EXTRA_ATTACKS (19): grant `count` extra auto-attacks, capped at 5 by the
307
+ // engine (effects.ts resolveAddExtraAttacks). Cite: SpellEffects.cpp:4873–4882.
308
+ | { kind: 'extra_attacks'; count: number }
309
+ // SPELL_EFFECT_MODIFY_THREAT_PERCENT (125): change the target's threat toward the caster by signed
310
+ // `pct` (Cower/Feint bake negative). Cite: SpellEffects.cpp:5262–5268.
311
+ | { kind: 'modify_threat_pct'; pct: number }
312
+ // SPELL_AURA_FEIGN_DEATH (66): CombatStop so IsNonCombatSpell (hunter traps) can fire.
313
+ // Cite: Unit.cpp SetFeignDeath :10091–10103; Spell.cpp :4598 IsNonCombatSpell.
314
+ | { kind: 'feign_death'; durationMs: number; playerControlledResistRoll?: boolean }
315
+ // SPELL_AURA_MOD_TOTAL_THREAT (103): flat temporary threat reduction on every reverse-hate ref
316
+ // (Fade r1 −55), reversed on remove. Cite: SpellAuras.cpp:2841–2858; HostileRefManager.cpp:82–99.
317
+ | { kind: 'threat_temporary'; amount: number; durationMs: number }
318
+ // Temporary buff/debuff: `mod` names what it raises, `hostile` puts it on the target, `applyTo`
319
+ // routes self/pet/friendly/party, `school`/`schoolMask`/`creatureTypeMask` narrow it. All sourced.
320
+ | {
321
+ kind: 'buff';
322
+ mod: BuffMod;
323
+ amount: number;
324
+ durationMs: number;
325
+ pointsPerComboPoint?: number;
326
+ hostile?: boolean;
327
+ school?: School;
328
+ applyTo?: 'self' | 'pet' | 'friendly' | 'party';
329
+ creatureTypeMask?: number;
330
+ schoolMask?: number;
331
+ charges?: number;
332
+ }
333
+ // conjure an item into the inventory (Mage Conjure Food / Water, Create Healthstone)
334
+ // `count` is the roll's minimum (bp+baseDice); `countMax` its top (bp+dieSides) when they differ.
335
+ // Cite: SpellEffects.cpp:1971 num_to_add = damage; Object.cpp:2949 irand(baseDice, dieSides).
336
+ | { kind: 'conjure'; item: number; count: number; countMax?: number }
337
+ // summon a companion pet. `creature` is the CreatureDef to build the pet from; 0 means
338
+ // "the character's own tamed pet" (Hunter Call Pet), >0 a fixed demon (Warlock Summon Imp).
339
+ | { kind: 'summon_pet'; creature: number }
340
+ // SPELL_EFFECT_SUMMON_WILD (41): an uncontrolled temporary creature. `creature` = EffectMiscValue,
341
+ // `count` = damage>0 ? damage : 1, `durationMs` from DurationIndex. Cite: SpellEffects.cpp:2729.
342
+ | {
343
+ kind: 'summon_wild';
344
+ creature: number;
345
+ count: number;
346
+ durationMs: number;
347
+ }
348
+ // SPELL_EFFECT_SUMMON_GUARDIAN (42): a temporary GUARDIAN_PET, not a commandable companion. Keeps
349
+ // the count and duration bare `summon_pet` dropped. Cite: SpellEffects.cpp:2820–2992.
350
+ | {
351
+ kind: 'summon_guardian';
352
+ creature: number;
353
+ count: number;
354
+ durationMs: number;
355
+ }
356
+ // SPELL_EFFECT_SUMMON_OBJECT_WILD (76): a temporary ownerless world GameObject. `goEntry` =
357
+ // EffectMiscValue, `durationMs` from DurationIndex. Cite: SpellEffects.cpp:3620–3662.
358
+ | {
359
+ kind: 'summon_object_wild';
360
+ goEntry: number;
361
+ durationMs: number;
362
+ }
363
+ // SPELL_AURA_MOUNTED (78): mount creature template entry (EffectMiscValue), a travel state rather
364
+ // than a combat payload. Cite: SpellAuras.cpp:1629–1656 HandleAuraMounted; Unit.cpp:7741–7756.
365
+ | { kind: 'mounted'; creatureEntry: number }
366
+ // SPELL_EFFECT_KNOCK_BACK (98): push the target away from the caster. `horizontal` =
367
+ // EffectMiscValue/10, `vertical` = damage/10. Cite: SpellEffects.cpp:5113–5121 EffectKnockBack.
368
+ | { kind: 'knock_back'; horizontal: number; vertical: number }
369
+ // SPELL_EFFECT_SEND_EVENT (61): fire map event EffectMiscValue (dbscripts_on_event), never a
370
+ // hit/heal payload. Cite: SpellEffects.cpp:1794–1798; ScriptMgr.cpp:3410–3447 StartEvents_Event.
371
+ | { kind: 'send_event'; eventId: number }
372
+ // SPELL_EFFECT_OPEN_LOCK (33) / OPEN_LOCK_ITEM (59): unlock a GO or item then SendLoot.
373
+ // `skillBonus` is the effect amount, `fromItem` opcode 59. Cite: SpellEffects.cpp:2204–2274.
374
+ | {
375
+ kind: 'open_lock';
376
+ /** Effect amount — CanOpenLock skillValue (not a paperdoll damage bonus). */
377
+ skillBonus: number;
378
+ /** Opcode 59 / item target path vs GO-targeted OPEN_LOCK (33). */
379
+ fromItem: boolean;
380
+ /** EffectMiscValue LockType when non-zero. */
381
+ lockType?: number;
382
+ }
383
+ // SPELL_EFFECT_ACTIVATE_OBJECT (86): GameObjectActions(EffectMiscValue) on gameObjTarget; it
384
+ // early-outs without one. Cite: SpellEffects.cpp:4377–4482; GameObject.h GameObjectActions.
385
+ | {
386
+ kind: 'activate_object';
387
+ /** GameObjectActions enum (NONE=0 … CLOSE_AND_LOCK=18). */
388
+ action: number;
389
+ /** Twilight Council MAKE_ACTIVE/MAKE_INERT summon table NPC entry when applicable. */
390
+ summonNpcEntry?: number;
391
+ /** Onyxia Eruption 17731 OPEN/DISTURB → custom anim instead of Use. */
392
+ customAnim?: boolean;
393
+ }
394
+ // Summon a shaman totem into one of the four element slots (effects 74 / 87–90). `creature` =
395
+ // EffectMiscValue, `health` from base points, and the slot replaces any prior totem.
396
+ | {
397
+ kind: 'summon_totem';
398
+ slot: TotemSlot | 'none';
399
+ creature: number;
400
+ health: number;
401
+ durationMs: number;
402
+ name?: string;
403
+ abilities?: TotemAbilityDef[];
404
+ // Resolved payloads for kit `proc_trigger_spell` ids (aura 23): the kit spell is only the
405
+ // periodic holder, so without these the totem summons and does nothing. Not `abilities`.
406
+ triggerAbilities?: TotemAbilityDef[];
407
+ }
408
+ // SPELL_EFFECT_THREAT (63): flat threat pulse (Stoneclaw Totem Effect). Amount = real base points.
409
+ // Wired into ThreatManager (Unit AddThreat / EffectThreat) — not a soft-tank coin flip.
410
+ | { kind: 'threat'; amount: number }
411
+ // UnitAI::DoResetThreat — the CASTER's own list to zero, which `modify_threat_pct` cannot express.
412
+ // Cite: UnitAI.cpp:773-781 modifyAllThreatPercent(-100); boss_arlokk.cpp:50 20538.
413
+ | { kind: 'reset_own_threat' }
414
+ // SPELL_EFFECT_ATTACK_ME (114): Taunt / Growl — equalize to highest threat + force victim.
415
+ // Cite: SpellEffects.cpp EffectTaunt ~3413.
416
+ | { kind: 'taunt' }
417
+ // SPELL_AURA_MOD_TAUNT (11): hold taunt-state priority for `durationMs` (Taunt 3s, Mocking Blow
418
+ // 6s). Distinct from EffectTaunt equalize; a Taunt row carries both. Cite: SpellAuras.cpp:2860.
419
+ | { kind: 'mod_taunt'; durationMs: number }
420
+ // SPELL_EFFECT_DISMISS_PET (102): unsummon the active pet (Dismiss Pet 2641).
421
+ // Cite: SpellEffects.cpp EffectDismissPet; effect-handler-catalog.md §2.8.
422
+ | { kind: 'dismiss_pet' }
423
+ // SPELL_EFFECT_FEED_PET (101): consume diet food, start the Feed Pet Effect (1539) happiness
424
+ // course. OOC only. Cite: SpellEffects.cpp:4681–4712; Spell.cpp:5332–5355 CheckCast FEED_PET.
425
+ | { kind: 'feed_pet' }
426
+ // SPELL_EFFECT_SUMMON_DEAD_PET (109): revive the slain pet at `healthPct` of max (Revive Pet 982
427
+ // → 15%); no-op on a living pet. Cite: SpellEffects.cpp:5164 EffectSummonDeadPet.
428
+ | { kind: 'revive_pet'; healthPct: number }
429
+ // SPELL_EFFECT_RESURRECT_NEW (113): flat health (bp+dice) + mana (EffectMiscValue) on a dead
430
+ // player — Resurrection / Redemption / Ancestral Spirit / Rebirth. Cite: SpellEffects.cpp:4815.
431
+ | { kind: 'resurrect'; health: number; mana: number }
432
+ // SPELL_EFFECT_RESURRECT (18) via EffectResurrect: percent of max health and mana.
433
+ // Cite: SpellEffects.cpp:4819–4824 EffectResurrect else branch.
434
+ | { kind: 'resurrect_pct'; percent: number }
435
+ // Paladin seal: a 30s self-aura consumed by Judgement into `judge`. Which fields are set follows
436
+ // `seal` — coeff, procPpm+onSwingWeaponPct, onSwingHeal, onSwingMana. Cite: Paladin.cpp:1094.
437
+ | { kind: 'seal'; seal: SealKind; durationMs: number; coeff?: number; procPpm?: number; onSwingWeaponPct?: number; onSwingHeal?: number; onSwingMana?: number; judge?: JudgementBurst }
438
+ // The generic Judgement (spell 20271): consumes the caster's active seal and applies its `judge`
439
+ // burst on the target, then puts Judgement on its own cooldown. Inert if no seal is up.
440
+ | { kind: 'judgement' }
441
+ // SPELL_AURA_MOD_SHAPESHIFT (36): enter a form. `form` is EffectMiscValue (FORM_CAT=1, FORM_BEAR=5,
442
+ // FORM_DIREBEAR=8). Recasting the same form cancels it. Cite: Aura::HandleAuraModShapeshift.
443
+ | { kind: 'shapeshift'; form: ShapeshiftFormId }
444
+ // SPELL_AURA_TRANSFORM (56): a pure model swap — CC, if any, comes from a sibling aura slot.
445
+ // `creatureEntry` is EffectMiscValue; the display id is read off that creature at runtime.
446
+ // Cite: SpellAuras.cpp:1979 HandleAuraTransform (SetDisplayId only).
447
+ | { kind: 'transform'; creatureEntry: number; durationMs: number }
448
+ // SPELL_AURA_MOD_STEALTH (16): `strength` = bp+dice, `durationMs` 0 = until cancelled, optional
449
+ // `breakFlags` = AuraInterruptFlags. Cite: SpellAuras.cpp HandleModStealth.
450
+ | { kind: 'stealth'; strength: number; durationMs: number; breakFlags?: number; charges?: number }
451
+ // SPELL_AURA_MOD_STEALTH_LEVEL (154): passive/talent stealth *level* added to strength for detect math
452
+ // (Master of Deception, Shadowmeld Passive, Feral Instinct). Does not itself enter stealth.
453
+ | { kind: 'stealth_level'; amount: number }
454
+ /** SPELL_AURA_MOD_STEALTH_DETECT (17): Perception / Track Hidden detect strength for the formula. */
455
+ | { kind: 'stealth_detect'; amount: number; durationMs: number }
456
+ // SPELL_AURA_FORCE_REACTION (139): force the player's reaction to faction `factionId`
457
+ // (EffectMiscValue, a Faction not a FactionTemplate) up to `reputationRank`. Cite: SpellAuras.cpp:2034.
458
+ | {
459
+ kind: 'force_reaction';
460
+ factionId: number;
461
+ reputationRank: number;
462
+ durationMs: number;
463
+ stopAttackFaction?: boolean;
464
+ }
465
+ // SPELL_EFFECT_ENCHANT_ITEM (53): the permanent twin of `weapon_imbue` — kits, arcanums, scopes,
466
+ // formulas. `enchantId` indexes DataBundle.itemEnchants; the slot rule is in enchantApplicators.
467
+ | { kind: 'enchant_item_perm'; enchantId: number }
468
+ // SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY (54): weapon imbue / poison / oil / stone, exclusive per
469
+ // hand. Cite: SpellEffects.cpp EffectEnchantItemTmp; enrich-weapon-imbues.mjs fills the kit.
470
+ | {
471
+ kind: 'weapon_imbue';
472
+ enchantId: number;
473
+ durationMs: number;
474
+ /** rockbiter | windfury | flametongue | frostbrand | poison | other */
475
+ family?: string;
476
+ /** Rockbiter equip-spell MOD_ATTACK_POWER (aura 99). */
477
+ attackPower?: number;
478
+ equipSpellId?: number;
479
+ /** TYPE_COMBAT_SPELL on-hit proc. */
480
+ combatSpellId?: number;
481
+ /** Flat % chance per hit when no PPM (enchant amount). */
482
+ combatChancePct?: number;
483
+ /** PPM from spell_proc_item_enchant when present. */
484
+ combatPpm?: number;
485
+ /** TYPE_DAMAGE flat weapon damage. */
486
+ damageFlat?: number;
487
+ /** Legacy TYPE_TOTEM Rockbiter DPS-like amount (Classic DBC usually uses equip spell). */
488
+ rockbiterAmount?: number;
489
+ /** Baked combat proc payload so the engine need not re-resolve the combat spell. */
490
+ combat?: {
491
+ spellId: number;
492
+ name: string;
493
+ direct?: { school: School; min: number; max: number };
494
+ dot?: { school: School; min: number; max: number; durationMs: number; tickMs: number };
495
+ extraAttacks?: number;
496
+ apBonus?: number;
497
+ /** Frostbrand / Crippling Poison snare (kind:speed). Cite: KI-581 / KI-717. */
498
+ speed?: {
499
+ aura: number;
500
+ pct: number;
501
+ durationMs: number;
502
+ hostile?: boolean;
503
+ mechanic?: string;
504
+ };
505
+ /** Mind-numbing / Wound Poison hostile buffs. Cite: KI-717. */
506
+ buffs?: Array<{
507
+ mod: string;
508
+ amount: number;
509
+ durationMs: number;
510
+ hostile?: boolean;
511
+ }>;
512
+ };
513
+ }
514
+ // SPELL_AURA_DAMAGE_SHIELD (15) / PROC_TRIGGER_DAMAGE (43): on a taken hit, deal school damage to
515
+ // the attacker, with optional charges + internal CD. Cite: UnitAuraProcHandler.cpp ~1449–1467.
516
+ | {
517
+ kind: 'damage_shield';
518
+ school: School;
519
+ min: number;
520
+ max: number;
521
+ durationMs: number;
522
+ charges?: number;
523
+ cooldownMs?: number;
524
+ }
525
+ // SPELL_AURA_PROC_TRIGGER_SPELL (42) generic — cast `triggerSpellId` when the aura procs, from
526
+ // EffectTriggerSpell or a CMaNGOS special case where the DBC is wrong.
527
+ | {
528
+ kind: 'proc_trigger_spell';
529
+ triggerSpellId: number;
530
+ durationMs: number;
531
+ amount?: number;
532
+ charges?: number;
533
+ cooldownMs?: number;
534
+ /** PERIODIC_TRIGGER_SPELL (23) amplitude when periodic. */
535
+ tickMs?: number;
536
+ /** PERIODIC_TRIGGER_SPELL (23) per-tick roll 0..1 when the scripted body gates the cast. */
537
+ tickChance?: number;
538
+ // Proc roll in PERCENT when the scripted body rolls the aura's own amount rather than
539
+ // spell_proc_event (Improved Mend Pet). Cite: UnitAuraProcHandler.cpp:1615-1620.
540
+ procChancePct?: number;
541
+ // The aura row belongs on the cast TARGET (EffectImplicitTargetA 6/21/25), not the caster.
542
+ // Channel holders on targetA 1 CASTER leave this unset. Cite: SpellTargetDefines.h.
543
+ auraOnTarget?: boolean;
544
+ // HandleAuraDummy apply=false: the body runs when the aura GOES AWAY, so the row is a holder
545
+ // only and never procs. `mode` mirrors AuraRemoveMode. Cite: SpellAuras.cpp:1386-1436.
546
+ onRemove?: AuraRemoveBody[];
547
+ }
548
+ // Speed auras 31/32/33/58/129/130/171/172/191 — raw bake; `effectiveSpeeds` buckets by `aura` per
549
+ // Unit::UpdateSpeed. `mechanic` ('snare'/'daze') is what Blessing of Freedom gates. Cite: Unit.cpp:8325.
550
+ | { kind: 'speed'; aura: number; pct: number; durationMs: number; hostile?: boolean; mechanic?: Mechanic }
551
+ // SPELL_AURA_SPLIT_DAMAGE_PCT (81), Soul Link: redirect `pct`% of the caster's incoming damage vs
552
+ // `schoolMask` to the warlock's pet; no-op without a live pet. Cite: Unit.cpp split.
553
+ | { kind: 'split_damage'; pct: number; schoolMask: number; durationMs: number }
554
+ // SPELL_AURA_SPLIT_DAMAGE_FLAT (153), Blessing of Sacrifice: redirect up to `amount` damage per hit
555
+ // to the aura caster. Cite: Unit.cpp:2501–2537 CalculateAbsorbAndResist; SpellAuras.cpp:214.
556
+ | { kind: 'split_damage_flat'; amount: number; schoolMask: number; durationMs: number }
557
+ // SPELL_AURA_RESIST_PUSHBACK (149): chance (%) to ignore cast pushback from damage. `applyTo:
558
+ // 'party'` is APPLY_AREA_AURA_PARTY (Concentration Aura). Cite: Spell.cpp:6817–6820 Delayed.
559
+ | { kind: 'resist_pushback'; amount: number; durationMs: number; applyTo?: 'self' | 'party' }
560
+ // Peel a matching aura (Swiftmend HoT, Conflagrate Immolate, Hourglass Sand). `stacks === 1` →
561
+ // RemoveAuraHolderFromStack, else RemoveAurasDueToSpell. Cite: SpellEffects.cpp:1842–1877.
562
+ | {
563
+ kind: 'consume_aura';
564
+ spellId?: number;
565
+ spellFamilyName?: number;
566
+ spellFamilyFlags?: number;
567
+ auraType?: number;
568
+ casterOnly?: boolean;
569
+ stacks?: number;
570
+ }
571
+ /** Ferocious Bite: dump energy after a landed school hit. Cite: SpellEffects.cpp:311–320. */
572
+ | { kind: 'zero_energy' }
573
+ // Blessing of Light — a scripted DUMMY dual slot: effect 0 is flat Holy Light healing taken,
574
+ // effect 1 flat Flash of Light. Cite: Paladin.cpp:119–138; Unit.cpp:7261–7265.
575
+ | {
576
+ kind: 'blessing_of_light';
577
+ holyLight: number;
578
+ flashOfLight: number;
579
+ durationMs: number;
580
+ applyTo?: 'self' | 'friendly' | 'party';
581
+ }
582
+ // Holy Shock (20473 dummy): one button that heals a friendly or damages a hostile, branching on
583
+ // reaction into the real sub-spells 25914 / 25912. Cite: Spell::EffectDummy icon 156.
584
+ | { kind: 'holy_shock'; damage: { school: School; min: number; max: number }; heal: { min: number; max: number } }
585
+ // Sweeping Strikes (12292): the next `charges` melee attacks each strike another nearby enemy —
586
+ // 12723 copies post-mitigation damage, Whirlwind/Execute use 26654. Cite: UnitAuraProcHandler:810.
587
+ | { kind: 'sweeping_strikes'; charges: number; durationMs: number }
588
+ // Combustion (11129): every fire spell hit stacks `stackSpellId` for +`critPerStack` fire crit,
589
+ // and only a fire CRIT spends a charge. Cite: UnitAuraProcHandler.cpp:991-1003 case 11129.
590
+ | {
591
+ kind: 'combustion';
592
+ charges: number;
593
+ stackSpellId: number;
594
+ critPerStack: number;
595
+ maxStacks: number;
596
+ durationMs: number;
597
+ }
598
+ // Vampiric Embrace (15286): whenever the caster deals Shadow spell damage, heal caster and party
599
+ // for `pct`% of it via 15290. Cite: UnitAuraProcHandler.cpp SPELLFAMILY_PRIEST 15286.
600
+ | { kind: 'vampiric_embrace'; pct: number; durationMs: number }
601
+ // Eye for an Eye (9799/25988 dummy): return `pct`% of MAGIC damage taken to the attacker via
602
+ // 25997, capped at 50% of the caster's max health. Cite: UnitAuraProcHandler.cpp:795–808.
603
+ | { kind: 'eye_for_an_eye'; pct: number; durationMs: number }
604
+ // Ignite talent ranks (11119/11120/12846–12848 dummy): on fire spell damage the caster deals, arm DoT
605
+ // 12654 with basepoints = rank% × damage (4/8/12/16/20). Cite: UnitAuraProcHandler.cpp:970–985.
606
+ | { kind: 'ignite'; rankSpellId: number; durationMs: number }
607
+ // Deep Wounds talent ranks (12834/12849/12867): on melee crit, arm physical DoT 12721 with per-tick
608
+ // basepoints = weaponDamage × rank% / 6. Cite: UnitAuraProcHandler.cpp:1316–1342.
609
+ | { kind: 'deep_wounds'; rankSpellId: number; durationMs: number }
610
+ // Oracle Healing Bonus (26169 set dummy): when the caster heals, self-heal `pct`% of the heal amount via
611
+ // spell 26170. Cite: UnitAuraProcHandler.cpp:1046–1052.
612
+ | { kind: 'oracle_healing_bonus'; pct: number; durationMs: number }
613
+ // Obsidian Armor (27539 dummy): when the bearer takes non-physical spell damage, cast the school-matched
614
+ // resist buff (27533–27540). Cite: UnitAuraProcHandler.cpp:910–930.
615
+ | { kind: 'obsidian_armor'; durationMs: number }
616
+ // Adaptive Warding (28764 set dummy): when the bearer takes non-physical/non-holy spell damage WHILE Mage
617
+ // Armor is up, cast school resist buff (28765–28770). Cite: UnitAuraProcHandler.cpp:870–907.
618
+ | { kind: 'adaptive_warding'; durationMs: number }
619
+ // Holy Power (28789) / Totemic Power (28823): on a heal cast, buff the heal target by class.
620
+ // Cite: UnitAuraProcHandler.cpp:1153–1181 / 1191–1219.
621
+ | { kind: 'class_power_set'; setKind: 'holy_power' | 'totemic_power'; durationMs: number }
622
+ // Greater Heal Vestments 4pc (28809): when caster casts Greater Heal, trigger 28810. Cite:
623
+ // UnitAuraProcHandler.cpp:1055–1058.
624
+ | { kind: 'vestments_greater_heal'; durationMs: number }
625
+ // Dreamwalker Healing Touch set (28719): HT cast → refund 30% of manaCost via 28742. Cite:
626
+ // UnitAuraProcHandler.cpp:1068–1074.
627
+ | { kind: 'dreamwalker_healing_touch'; durationMs: number }
628
+ /** Idol of Longevity (28847): HT cast → trigger 28848. Cite: UnitAuraProcHandler.cpp:1077–1081. */
629
+ | { kind: 'idol_healing_touch_refund'; durationMs: number }
630
+ /** Totem of Flowing Water (28849): LHW cast → trigger 28850. Cite: UnitAuraProcHandler.cpp:1222–1226. */
631
+ | { kind: 'totem_lesser_healing_wave'; durationMs: number }
632
+ // Cheat Death set (28845): damage that crosses below 20% max HP → cast 28846. Cite:
633
+ // UnitAuraProcHandler.cpp:1378–1383.
634
+ | { kind: 'cheat_death'; durationMs: number }
635
+ // Master of Elements talent ranks: spell crit → refund `pct`% of the spell's mana cost via 29077. Cite:
636
+ // UnitAuraProcHandler.cpp:949–964.
637
+ | { kind: 'master_of_elements'; pct: number; durationMs: number }
638
+ // Magic Absorption talent ranks: full resist of a hostile spell → restore `pct`% of max mana via 29442.
639
+ // Cite: UnitAuraProcHandler.cpp:938–947.
640
+ | { kind: 'magic_absorption'; pct: number; durationMs: number }
641
+ // Improved Sprint (13743/13875): on a successful Sprint cast, `chancePct`% to cast 30918, which
642
+ // removes root and snare. Cite: Spell.cpp:7433–7468; SpellEffects.cpp:4140–4147.
643
+ | { kind: 'improved_sprint'; chancePct: number; triggerSpellId: number; durationMs: number }
644
+ // Healing Way (29206/29205/29202): ADD_TARGET_TRIGGER 109 → buff 29203 on a landed Healing Wave,
645
+ // chance bp+1 (33/66/100). Cite: Spell.cpp:7433–7468; Shaman.cpp:77–89.
646
+ | { kind: 'healing_way_talent'; chancePct: number; durationMs: number }
647
+ // Healing Way buff 29203: +amountPct Healing Wave taken, stacks to maxStacks, 15s. Cite: Shaman.cpp
648
+ // HealingWay OnDamageCalculate; spell_template 29203 StackAmount 3.
649
+ | { kind: 'healing_way'; amountPct: number; durationMs: number; maxStacks: number }
650
+ // Pyroclasm talent ranks (18096/18073): on Hellfire/Rain of Fire periodic damage the caster deals, chance
651
+ // = base/tickCount to stun the victim with 18093 (3s). Cite: UnitAuraProcHandler.cpp:1347–1375.
652
+ | { kind: 'pyroclasm'; rankSpellId: number; durationMs: number }
653
+ // SPELL_EFFECT_ADD_COMBO_POINTS (80) as a standalone grant (Premeditation 14183 +2). Stealth-gated,
654
+ // so the engine no-ops it unstealthed. Cite: SpellEffects.cpp EffectAddComboPoints.
655
+ | { kind: 'combo_points'; amount: number; requiresStealth?: boolean }
656
+ // SPELL_AURA_RETAIN_COMBO_POINTS (148), Premeditation: when this aura expires BY TIME, remove
657
+ // `amount` CP from the combo target; an early remove does not. Cite: SpellAuras.cpp:4436–4452.
658
+ | { kind: 'retain_combo_points'; amount: number; durationMs: number }
659
+ // SPELL_EFFECT_TAMECREATURE (55): the hunter pet capture finisher (13481); role `pet_tame` drives
660
+ // the OOC tame path. Cite: SpellEffects.cpp:3149–3225 EffectTameCreature.
661
+ | { kind: 'tame_creature' }
662
+ // SPELL_EFFECT_SELF_RESURRECT (94), Reincarnation: `percent` of max when effect damage ≥ 0, else
663
+ // flat `health` (−damage) and `mana` (EffectMiscValue). Cite: SpellEffects.cpp:4937–4968.
664
+ | { kind: 'self_resurrect'; percent?: number; health?: number; mana?: number }
665
+ // Demonic Sacrifice (18788): kill the pet, apply the per-entry result aura under `resultSpellId` —
666
+ // 416→18789, 1860→18790, 1863→18791, 417→18792. Cite: Warlock.cpp:225–228.
667
+ | {
668
+ kind: 'demonic_sacrifice';
669
+ byPet: Record<
670
+ number,
671
+ {
672
+ durationMs: number;
673
+ /** Result aura id 18789–18792. */
674
+ resultSpellId: number;
675
+ mod?: BuffMod;
676
+ amount?: number;
677
+ school?: School;
678
+ /** OBS_MOD_HEALTH/MANA: restore + pctOfMax + tickMs. */
679
+ restore?: 'health' | 'power';
680
+ pctOfMax?: number;
681
+ tickMs?: number;
682
+ }
683
+ >;
684
+ }
685
+ // Priest Lightwell (724): `charges` charges for `durationMs`. Modelled reactively — every
686
+ // `intervalMs` it renews the most-hurt friendly under half health for `healPerCharge`.
687
+ | { kind: 'lightwell'; charges: number; healPerCharge: number; intervalMs: number; durationMs: number }
688
+ // Scripted DUMMY that finishes cooldowns on a cluster of the caster's own spells: 'frost' = Cold
689
+ // Snap 12472, 'rogue' = Preparation 14185, 'hunter' = Readiness 23989. Cite: Spell::EffectDummy.
690
+ | { kind: 'reset_cooldowns'; scope: 'frost' | 'rogue' | 'hunter' }
691
+ // A one-shot modifier the caster's next matching cast consumes (auras 107/108): critAdd 0..1,
692
+ // instant, freeCost, costModPct (SPELLMOD_COST — not costPct), effectPct, castTimeFlat, appliesTo.
693
+ | {
694
+ kind: 'next_cast_mod';
695
+ appliesTo: 'any' | 'nature' | 'heal' | 'summon' | 'curse';
696
+ durationMs: number;
697
+ critAdd?: number;
698
+ instant?: boolean;
699
+ freeCost?: boolean;
700
+ /** SPELLMOD_COST signed % on the resolved cost (Fel Domination −50). Not ManaCostPercentage. */
701
+ costModPct?: number;
702
+ /** @deprecated Alias of costModPct for the startPendingSpellMod copy; not SpellDef.costPct. */
703
+ costPct?: number;
704
+ effectPct?: number;
705
+ /** SPELLMOD_CASTING_TIME flat ms (Nature's Grace CalculateSimpleValue −500). */
706
+ castTimeFlat?: number;
707
+ // EffectItemType / spell_affect mask: non-zero → only spells whose SpellFamilyFlags share a
708
+ // bit consume this (Improved Fireball vs Frostbolt). Cite: Player.cpp:350–357.
709
+ familyFlags?: number;
710
+ charges?: number;
711
+ }
712
+ // Lasting auras 107/108 that are NOT consume-on-next-cast — installed as owned SpellModifiers
713
+ // (Arcane Power COST +30% for 15s, Barkskin). Charged auras stay `next_cast_mod`.
714
+ | {
715
+ kind: 'owned_spell_mods';
716
+ durationMs: number;
717
+ applyTo?: 'self';
718
+ mods: Array<{
719
+ op: number;
720
+ type: 'flat' | 'pct';
721
+ amount: number;
722
+ familyFlags?: number;
723
+ }>;
724
+ }
725
+ // SI5 materializations resolveCombatSpell pushes onto `effects[]` and applySpellLate consumes.
726
+ // `auraOnTarget`: the holder belongs on the cast target, not the caster.
727
+ | { kind: 'aura_dummy_holder'; spellId?: number; durationMs: number; auraOnTarget?: boolean; hostile?: boolean }
728
+ | { kind: 'aura_dummy'; spellId?: number; durationMs?: number; auraOnTarget?: boolean; hostile?: boolean }
729
+ | { kind: 'mod_invisibility'; amount: number; durationMs: number; invisibilityType?: number }
730
+ | { kind: 'track_creatures'; durationMs: number; creatureType?: number; trackFlag?: number }
731
+ | { kind: 'channel_death_item'; itemType: number; count: number; soulShard?: boolean }
732
+ | { kind: 'leap'; targetA?: number; targetB?: number }
733
+ | { kind: 'trade_skill'; skillId?: number }
734
+ | { kind: 'inebriate'; drunkMod?: number; castItemEntry?: number }
735
+ | { kind: 'transmitted_object'; goEntry?: number; durationMs?: number }
736
+ | { kind: 'summon_object_slot'; goEntry: number; slot: number; durationMs: number }
737
+ | { kind: 'enchant_held_item'; enchantId?: number; durationMs?: number }
738
+ | { kind: 'sanctuary'; vanishRogueSpecial?: boolean; cannotBeDetectedMs?: number }
739
+ | { kind: 'mod_health_regen_percent'; amount: number; durationMs: number }
740
+ // SPELL_AURA_MOD_REGEN_DURING_COMBAT (116) — % of spirit HP regen allowed in combat.
741
+ // Cite: Player.cpp:2297–2299, :2399–2400; Troll Regeneration 20555; KI-876.
742
+ | { kind: 'mod_regen_during_combat'; amount: number; durationMs?: number }
743
+ | { kind: 'skill_step'; skillId: number; step: number }
744
+ | { kind: 'skill_marker' }
745
+ | { kind: 'mod_skill'; skillId: number; amount: number; permanent?: boolean; durationMs?: number }
746
+ // SPELL_EFFECT_PARRY (22). SetCanParry(true). Cite: SpellEffects.cpp:4885–4888; KI-818.
747
+ | { kind: 'can_parry' }
748
+ // SPELL_EFFECT_BLOCK (23). SetCanBlock(true). Cite: SpellEffects.cpp:4890–4893.
749
+ | { kind: 'can_block' }
750
+ // SPELL_AURA_MOD_REPUTATION_GAIN (156) — Diplomacy. Cite: Player.cpp:6297–6302.
751
+ | { kind: 'mod_reputation_gain'; amount: number; durationMs?: number; factionId?: number }
752
+ // SPELL_AURA_MOD_MECHANIC_RESISTANCE (117) — Hardiness. mechanic = EffectMiscValue.
753
+ // Cite: Unit.cpp:4015–4031 MagicSpellHitResult.
754
+ | { kind: 'mod_mechanic_resistance'; mechanic: number; amount: number; durationMs?: number }
755
+ | { kind: 'mod_stalked'; durationMs: number }
756
+ // SPELL_AURA_MOD_LANGUAGE (75). languageId = misc; hostile when targetA enemy (CoT, KI-765).
757
+ | { kind: 'mod_language'; amount?: number; durationMs?: number; languageId?: number; hostile?: boolean }
758
+ | { kind: 'force_reaction'; amount?: number; durationMs?: number; factionId?: number }
759
+ // SPELL_AURA_PREVENTS_FLEEING (92). hostile when targetA enemy (Curse of Recklessness).
760
+ // Cite: SpellAuras.cpp HandlePreventFleeing; SpellTargetDefines TARGET_UNIT_ENEMY=6; KI-765.
761
+ | { kind: 'prevents_fleeing'; durationMs?: number; hostile?: boolean }
762
+ | { kind: 'teleport_face_caster'; targetA?: number; targetB?: number; requiresDestLocation?: boolean }
763
+ | { kind: 'add_farsight'; durationMs: number; radius?: number; dynObjectType?: number }
764
+ | { kind: 'summon_change_item'; newItemId: number }
765
+ // SPELL_EFFECT_SUMMON_DEMON (56). Cite: SpellEffects.cpp:5430 EffectSummonDemon.
766
+ | { kind: 'summon_demon'; creature: number; count?: number; durationMs?: number; level?: number }
767
+ // SPELL_EFFECT_SUMMON_POSSESSED (73) — Eye of Kilrogg. oocCastEffects summons it as a pet
768
+ // alongside summon_demon. Cite: SpellEffects.cpp EffectSummonPossessed; KI-578.
769
+ | { kind: 'summon_possessed'; creature: number; durationMs?: number }
770
+ // SPELL_AURA_MOD_POSSESS_PET (128) — Eyes of the Beast. Own-pet vision, not enemy CC.
771
+ // Cite: SpellAuras.cpp:2258–2279; Spell.cpp:5717–5735; KI-729.
772
+ | { kind: 'mod_possess_pet'; durationMs: number; spellId?: number }
773
+ | { kind: 'script_handled_noop'; spellId?: number }
774
+ // SPELL_EFFECT_DURABILITY_DAMAGE_PCT (115). percent = damage/100. Cite: SpellEffects.cpp:5236–5260.
775
+ | { kind: 'durability_damage'; slot: number; percent: number; allItems: boolean; includeInventory: boolean };
776
+
777
+ /** `effectSlot`: the DBC EffectN slot this effect came from (index into effectBonusCoefficient*). */
778
+ export type SpellEffect = SpellEffectBody & { effectSlot?: number };
779
+
780
+ // Slim ability kit embedded on `summon_totem` effects so combat can cast/apply without DataStore. Numbers
781
+ // and effects are the same mapped values as the full SpellDef for that id.
782
+ export interface TotemAbilityDef {
783
+ id: number;
784
+ name: string;
785
+ castTimeMs: number;
786
+ cooldownMs: number;
787
+ gcdMs: number;
788
+ school: School;
789
+ effects: SpellEffect[];
790
+ // SpellRadius.dbc yards for the kit's area effect — the ABILITY spell's radius (effect 35), never
791
+ // the summon's cast range. Absent = bake gap, fail open. Cite: SpellAuras.cpp:307–309.
792
+ radiusYd?: number;
793
+ }
794
+
795
+ /** AI hint so the combat policy can pick sensible actions without guessing. */
796
+ export type SpellRole =
797
+ | 'nuke' // cast-time direct damage (Fireball, Frostbolt)
798
+ | 'instant_nuke' // instant direct damage on a cooldown (Fire Blast)
799
+ | 'control' // instant, roots the target (Frost Nova)
800
+ | 'dot' // applies a damage-over-time (Rend)
801
+ | 'buff' // self buff (Battle Shout, Frost Armor)
802
+ | 'charge' // opener that generates resource (Charge)
803
+ | 'strike' // weapon-based strike; the on-next-swing ones set onNextSwing (Heroic Strike)
804
+ | 'shoot' // ranged-weapon attack; damage comes from the equipped `ranged` item (Shoot/Auto Shot)
805
+ | 'attack' // melee auto-attack toggle (the counterpart to Shoot); flips the fighter to melee mode
806
+ | 'conjure' // creates an item
807
+ | 'pet_summon' // summon or call a pet (Summon Imp, Call Pet)
808
+ | 'pet_heal' // heal the active pet (Mend Pet)
809
+ | 'pet_tame' // tame a beast into a pet (Tame Beast)
810
+ | 'totem_summon' // shaman totem (Searing / Stoneskin / Mana Spring / …) — in-combat summon
811
+ | 'seal' // paladin seal: a self-aura kept up in combat, procs on melee swing (Seal of Righteousness)
812
+ | 'judgement' // paladin Judgement: unleash the active seal on a cooldown (Judgement)
813
+ | 'form' // shapeshift form spell (Bear/Cat/Travel/…) — enter/toggle form
814
+ | 'stealth' // enter stealth / Prowl / Shadowmeld (aura 16); OOC or Vanish mid-fight
815
+ | 'utility';
816
+
817
+ // Verbatim spell_template effect slot for the client-side interpreter (SI1), baked alongside the
818
+ // synthesized `effects[]`. Field names: docs/archive/SPELL-INTERPRETER.md §2.1.
819
+ export interface RawSpellEffect {
820
+ /** EffectN — SPELL_EFFECT_* dispatch key */
821
+ effect: number;
822
+ /** EffectApplyAuraNameN — SPELL_AURA_* when effect is apply-aura family */
823
+ auraName: number;
824
+ basePoints: number;
825
+ dieSides: number;
826
+ /** EffectBaseDiceN — used with basePoints for min formula */
827
+ baseDice: number;
828
+ /** EffectRealPointsPerLevelN */
829
+ perLevel: number;
830
+ /** EffectPointsPerComboPointN */
831
+ perCombo: number;
832
+ amplitude: number;
833
+ radiusIndex: number;
834
+ targetA: number;
835
+ targetB: number;
836
+ miscValue: number;
837
+ miscValueB: number;
838
+ triggerSpell: number;
839
+ /** Per-effect mechanic when present, else spell-level Mechanic */
840
+ mechanic: number;
841
+ /** EffectChainTargetN */
842
+ chainTargets: number;
843
+ // EffectItemTypeN — item entry for SPELL_EFFECT_CREATE_ITEM (24) and kin. Optional: SI1 omitted
844
+ // the column until SI3. Cite: spell_template.EffectItemType; SpellEffects.cpp DoCreateItem.
845
+ itemType?: number;
846
+ // EffectMultipleValueN — level offset / multiplier for summon wild/guardian paths. Cite: SpellEffects.cpp
847
+ // EffectSummonWild / EffectSummonGuardian.
848
+ multipleValue?: number;
849
+ // DmgMultiplierN — per-jump chain falloff (Chain Heal 0.5, Chain Lightning 0.7, Swipe 1). Cite:
850
+ // Spell.cpp:4459–4465 ExecuteEffects; spell_template.DmgMultiplier1.
851
+ dmgMultiplier?: number;
852
+ }
853
+
854
+ export interface SpellDef {
855
+ id: number;
856
+ name: string;
857
+ rank: number; // 0 if unranked
858
+ school: School;
859
+ powerType: PowerType; // resource this spell spends
860
+ cost: number; // mana, rage, or energy (resolved; energy = raw ManaCost, rage = ManaCost/10)
861
+ castTimeMs: number; // resolved from CastingTimeIndex (0 = instant)
862
+ cooldownMs: number; // RecoveryTime
863
+ gcdMs: number; // 1500 on-GCD, 0 off-GCD
864
+ rangeMax: number; // yards (flavor for the text log)
865
+ // SpellRange.dbc min column (yards) — the charge / gap-close floor. Omitted when the DBC min is 0
866
+ // or the range index is absent; NEVER invent. Cite: SpellRange.dbc field 1.
867
+ rangeMin?: number;
868
+ // The raw SpellRange.dbc index, not the resolved yards. Only CanParryAbility reads it: parry needs
869
+ // index 1 or 2, and yards cannot substitute (5 covers 2, 6, 12). Cite: Unit.cpp:3153-3155.
870
+ rangeIndex?: number;
871
+ reqLevel: number;
872
+ // spell_template.SpellLevel — the intended cast level for the rank (downrank penalty input),
873
+ // distinct from `reqLevel`. Omitted when SpellLevel is 0.
874
+ spellLevel?: number;
875
+ effects: SpellEffect[];
876
+ // SI1: verbatim spell_template effect rows for the client interpreter, additive alongside
877
+ // `effects[]`. Omitted when all Effect1..3 are 0. Cite: docs/archive/SPELL-INTERPRETER.md §2.1.
878
+ rawEffects?: RawSpellEffect[];
879
+ // spell_template.Reagent1..8 / ReagentCount1..8 — items consumed on cast (Soul Shard 6265×1 on
880
+ // Summon Voidwalker). Omitted when the spell has none. Cite: Spell.cpp CheckItems / TakeReagents.
881
+ reagents?: { item: number; count: number }[];
882
+ category?: number; // spell_template.Category for shared category cooldowns (potions etc); omitted if 0/unset
883
+ outOfCombatOnly?: boolean; // conjure, food/water (NOT combat armor buffs — CB4)
884
+ role?: SpellRole; // AI hint
885
+ // Area-of-effect: the spell has an enemy-area EffectImplicitTarget (15/16/22/24/28) and a fannable
886
+ // effect, so castOnTargets hits every living unit on the target's side. Absent = single-target.
887
+ aoe?: boolean;
888
+ // Area shape from EffectImplicitTargetA: 22 → 'pbaoe', 15/16/28 → 'ground', 24 → 'cone'. Only on
889
+ // aoe spells; flat `aoe` stays the fan-out flag. Baked by enrich-spell-geometry.mjs.
890
+ aoeShape?: 'pbaoe' | 'ground' | 'cone';
891
+ // `spell_cone.ConeDegrees` for rank 1 — the FULL angle. NEGATIVE is a REAR cone, not a narrow one
892
+ // (Tail Sweep 15847 = -82). Absent means 60°. Read through `coneArcOf`. Cite: Spell.cpp:7585-7591.
893
+ coneDeg?: number;
894
+ // `spell_facing.facingcasterflag & 0x1`: a PLAYER cast refuses with "must be facing" outside the
895
+ // caster's front half; creature casts are exempt. Cite: Spell.cpp:6247-6249; SpellDefines.h:391.
896
+ requiresFacing?: true;
897
+ // First non-zero EffectRadiusIndex → SpellRadius.dbc yards; omitted when all resolve to 0. Engine
898
+ // fan-out still uses `aoe`, so this is data for a future distance/cap model.
899
+ radiusYd?: number;
900
+ // spell_template.MaxAffectedTargets when > 0 (CMaNGOS SpellEntry). Omitted when 0/absent — never invent a
901
+ // default cap. Cite: docs/cmangos_mapping/spells/additional-logic.md.
902
+ maxTargets?: number;
903
+ mechanic?: Mechanic; // DB Mechanic — drives CC diminishing-returns grouping + immunity (absent => none)
904
+ rageGenerated?: number; // Charge and similar
905
+ strikeBonus?: number; // Heroic Strike: flat bonus added onto a weapon hit
906
+ onNextSwing?: boolean; // Heroic Strike / Cleave / Maul / Raptor Strike: replaces your next auto-attack (off the GCD)
907
+ passive?: boolean; // SPELL_ATTR_PASSIVE: an aura you never cast (weapon skills, Block/Dodge, racials) — hidden from the spellbook/action bars
908
+ // SPELL_ATTR_HIDDEN_CLIENTSIDE (0x80): never in the spellbook or on a bar, but several carry real
909
+ // damage/CC (Grovel, Duel, Opening), so role inference must skip them. All have SpellIconID 1.
910
+ hiddenClientside?: boolean;
911
+ // Spell.dbc AuraInterruptFlags (field 18), stamped from the client DBC because the ClassicDB dump
912
+ // zeroes it. Bit 0x02 = break-on-damage CC. Cite: SpellDefines.h:362–386.
913
+ auraInterruptFlags?: number;
914
+ // Channel duration ms from DurationIndex (channelled AttributesEx only); until-cancelled stamps
915
+ // INT32_MAX + `channelUntilCancelled`. Cite: SpellMgr IsChanneledSpell; channel.ts arms it.
916
+ channelMs?: number;
917
+ // Spell.dbc ChannelInterruptFlags (field 19), the same bit enum as AuraInterruptFlags — combat
918
+ // cancels or pushbacks the channel from these. Cite: Unit.cpp:1285–1302; Spell.cpp DelayedChannel.
919
+ channelInterruptFlags?: number;
920
+ // SpellDuration.dbc Duration = -1 (index 21). Channel ends only on interrupt / death, not a timer. Cite:
921
+ // SpellDuration.dbc record 21; enrich-channel.mjs.
922
+ channelUntilCancelled?: boolean;
923
+ // SPELLMOD_NOT_LOSE_CASTING_TIME (op 9) PCT from talents matching this spell's class mask, added
924
+ // to the Delayed / DelayedChannel resist roll. Cite: Spell.cpp:6817–6821 / 6848–6852.
925
+ notLoseCastingTimePct?: number;
926
+ // SpellEntry.Dispel — the dispel CATEGORY of the auras this spell applies (MAGIC=1, CURSE=2,
927
+ // DISEASE=3, POISON=4). Absent/0 = not dispellable. Cite: SpellAuras.cpp IsDispellableByMask.
928
+ dispel?: number;
929
+ icon?: string; // WoW icon name (e.g. "spell_fire_flamebolt"); UI-only, absent => question-mark fallback
930
+ description?: string; // from DB/CSV if available (e.g. "Use: Increases your Strength by 4 for 1 hour.")
931
+ // Spell family class mask (SpellClassOptions.csv) that talent spell_mod rows match against.
932
+ // Absent on older bakes, and a missing mask means no family match, so mods will not apply.
933
+ spellClassMask?: number[];
934
+ // LEARN_SPELL (36) / LEARN_PET_SPELL (57): this row is a stub that teaches `teaches`, and inherits
935
+ // that ability's cooldown/gcd/category at bake. Cite: SpellEffects.cpp:2445; :3386.
936
+ teaches?: number;
937
+ // ---- Combo points / energy finishers (sourced from spell_template + SpellDuration.dbc) ----
938
+ /** SPELL_EFFECT_ADD_COMBO_POINTS (80): CP granted on a successful hit (base+dice, typically 1). */
939
+ comboPointsGenerated?: number;
940
+ // Finisher: AttributesEx SPELL_ATTR_EX_FINISHING_MOVE_DAMAGE (bit 20) and/or
941
+ // SPELL_ATTR_EX_FINISHING_MOVE_DURATION (bit 22). Needs combo points on the target to cast.
942
+ requiresComboPoints?: boolean;
943
+ finishingScalesDamage?: boolean;
944
+ finishingScalesDuration?: boolean;
945
+ // SpellDuration.dbc MaxDuration (Duration[2]) when it differs from base Duration[0]. CMaNGOS: duration +=
946
+ // (max - min) * comboPoints / 5 (SpellMgr.cpp CalculateSpellDuration).
947
+ durationMaxMs?: number;
948
+ // spell_template.DurationIndex → SpellDuration.dbc row; interpretSpell uses it when ctx.durationMs
949
+ // is absent. Not stamped on every bake. Cite: SpellMgr.cpp GetSpellDuration.
950
+ durationIndex?: number;
951
+ // SpellEntry.SpellIconID (numeric). Distinct from UI `icon` string name. Used by EffectSchoolDMG family
952
+ // specials (Bloodthirst icon 38, Shield Slam 413). Optional additive — fixtures / future extract.
953
+ spellIconId?: number;
954
+ // Optional spell_threat row (multiplier / flat / ap_bonus); absent means GetSpellThreatMultiplier
955
+ // defaults to 1.0. Populated by enrich-spell-threat.mjs — never invent rows.
956
+ threatMultiplier?: number;
957
+ threatFlat?: number;
958
+ threatApBonus?: number;
959
+ // Initial-aggro suppressors from AttributesEx/Ex2: `noThreat` never aggros, `threatOnlyOnMiss`
960
+ // only on a miss, `noInitialThreat` lets damage build threat but the cast itself never pulls.
961
+ noThreat?: boolean;
962
+ threatOnlyOnMiss?: boolean;
963
+ noInitialThreat?: boolean;
964
+ // SPELLMOD_THREAT percent from talent ADD_PCT/FLAT (runtime clone via withTalentMods). Applied in
965
+ // CalcThreat before ApplyTotalThreatModifier. Cite: ThreatManager.cpp:49.
966
+ threatSpellModPct?: number;
967
+ // Eviscerate AP term from CMaNGOS SpellEffects.cpp SPELLFAMILY_ROGUE hook: damage += AP * comboPoints *
968
+ // coeff. Only set for that family/flag match (coeff = 0.03).
969
+ comboApCoeff?: number;
970
+ // ---- Shapeshift / stance gating (spell_template Stances / StancesNot / Attributes) ----
971
+ // SpellEntry.Stances: allowed only in these forms (bit = 1 << (formId - 1)). Absent/0 = no form.
972
+ stances?: number;
973
+ /** SpellEntry.StancesNot bitmask: forbidden in these forms. */
974
+ stancesNot?: number;
975
+ // SPELL_ATTR_NOT_SHAPESHIFT (0x10000): cannot cast while in a real shapeshift form. Engine: product
976
+ // leave-then-cast (docs/done/druid.md §5). CMaNGOS refuses.
977
+ notShapeshift?: boolean;
978
+ // SPELL_ATTR_EX2_ALLOW_WHILE_NOT_SHAPESHIFTED (0x80000): form-required spell that may also be used out of
979
+ // form (rare). Sourced from AttributesEx2.
980
+ allowWhileNotShapeshifted?: boolean;
981
+ // ManaCostPercentage — a share of the caster's CREATE pool: powerCost = flat `cost` + floor(create
982
+ // health-or-mana × costPct / 100). Never store the percentage in `cost`. Cite: Spell.cpp:6331.
983
+ costPct?: number;
984
+ // spell_template.ManaPerSecond — HP/mana taken every 1s while the aura/channel lives. POWER_HEALTH
985
+ // (Health Funnel) cancels the aura when HP ≤ this. Cite: SpellAuras.cpp:5686–5707.
986
+ manaPerSecond?: number;
987
+ /** spell_template.ManaPerSecondPerLevel. All Classic Health Funnel ranks are 0. */
988
+ manaPerSecondPerLevel?: number;
989
+ // SPELL_ATTR_EX2_NO_TARGET_PER_SECOND_COSTS (0x800): only the caster's own holder pays. Health Funnel has
990
+ // this so the pet HoT does not drain the pet. Cite: SpellDefines.h:113.
991
+ noTargetPerSecondCosts?: boolean;
992
+ /** SpellEntry.AttributesEx2 raw mask when a consumer needs other EX2 bits. */
993
+ attributesEx2?: number;
994
+ // SpellEntry.AttributesEx raw mask, non-zero on 3,561 of 22,374. Read for NO_REDIRECTION 0x8,
995
+ // NO_THREAT 0x400, AURA_UNIQUE 0x800, REQUIRE_ALL_TARGETS 0x4000000. Cite: SpellDefines.h:64-95.
996
+ attributesEx?: number;
997
+ // SpellEntry.AttributesEx3 raw mask, non-zero on 799 rows. Read for NO_AVOIDANCE 0x40, NOT_A_PROC
998
+ // 0x200, ALWAYS_HIT 0x40000, CAN_PROC_FROM_PROCS 0x4000000. Cite: SpellDefines.h:135-167.
999
+ attributesEx3?: number;
1000
+ // SpellEntry.AttributesEx4 raw mask (field 10). Non-zero on 72 rows. Read for NO_HELPFUL_THREAT 0x8,
1001
+ // NO_HARMFUL_THREAT 0x10. Cite: SpellDefines.h:169-182.
1002
+ attributesEx4?: number;
1003
+ // `spell_template.AttributesServerside` — CMaNGOS's own fifth word, carried by no DBC. 72 of
1004
+ // 22,374: IGNORE_EVADE 0x4 on 56, FACING_BACK 0x8 on 16. Cite: SpellDefines.h:188-194.
1005
+ attributesServerside?: number;
1006
+ // SpellEntry.RequiresSpellFocus — a GO of this SpellFocusObject.dbc id must be nearby (anvil 1 on 315
1007
+ // spells, forge 4 on 86). 695 rows. Cite: Spell.cpp:5019-5022.
1008
+ requiresSpellFocus?: number;
1009
+ // SpellEntry.CasterAuraState — an AuraState bit the caster must hold (24 rows): 1 DEFENSE on 17,
1010
+ // 2 HEALTHLESS_20, 3 BERSERKING, 5 JUDGEMENT, 7 HUNTER_PARRY. Cite: Unit.h:2163 HasAuraState.
1011
+ casterAuraState?: number;
1012
+ // SpellEntry.TargetAuraState — 2 AURA_STATE_HEALTHLESS_20_PERCENT on all 16 rows (Execute x7,
1013
+ // Hammer of Wrath x3, Fatal Bite x3). Cite: Unit.cpp:534; engine/combat/reactiveGates.ts.
1014
+ targetAuraState?: number;
1015
+ // SpellEntry.BaseLevel — the floor the caster level is clamped to before spellLevel is subtracted for
1016
+ // per-level scaling. 6,128 rows. Cite: Object.cpp:2926-2934.
1017
+ baseLevel?: number;
1018
+ /** SpellEntry.MaxLevel — the ceiling of the same clamp. 1,306 rows. Cite: Object.cpp:2926. */
1019
+ maxLevel?: number;
1020
+ // SpellEntry.ManaCostPerlevel — added to the flat cost as perLevel × (rank/5 − baseLevel), where
1021
+ // rank is the caster level capped at maxLevel×5. 72 rows. Cite: Spell.cpp:6332; Unit.cpp:11855.
1022
+ costPerLevel?: number;
1023
+ // SpellEntry.MaxTargetLevel — refuse a victim above this level (Mind Soothe 40 and 55, Soothe Animal). 25
1024
+ // rows. Cite: Spell.cpp:4922 CheckTarget.
1025
+ maxTargetLevel?: number;
1026
+ // SpellEntry.Totem1/2 — crafting TOOL item entries the caster must carry despite the column name
1027
+ // (Blacksmith Hammer 5956 on 337 spells). 684 rows. Cite: Spell.cpp:6601 CheckItems.
1028
+ requiredTools?: number[];
1029
+ // ---- Stealth / positional gates (spell_template Attributes / Ex / Ex2 / Serverside) ----
1030
+ // SPELL_ATTR_ONLY_STEALTHED (0x20000): the cast fails without MOD_STEALTH. Cite: Spell.cpp ~4623.
1031
+ requiresStealth?: boolean;
1032
+ // Must be behind the target (38 rows: Backstab, Garrote, Shred, Ambush). Either the Ex2/Ex combat
1033
+ // pair or AttributesServerside FACING_BACK 0x8 sets it; Pounce is excluded. Cite: Spell.cpp:4822.
1034
+ requiresBehind?: boolean;
1035
+ // Must face the target's front (8 rows: Gouge, Sap). `Attributes` must EQUAL 0x150010 — an
1036
+ // equality test on the whole word, not a mask. Cite: Spell.cpp:4833-4834.
1037
+ requiresFront?: boolean;
1038
+ // SPELL_ATTR_CANCELS_AUTO_ATTACK_COMBAT (0x100000): AttackStop on successful cast. Stealth / Prowl /
1039
+ // Gouge / Sap / Shadowmeld. Cite: Spell.cpp ~3691.
1040
+ cancelsAutoAttack?: boolean;
1041
+ // SPELL_ATTR_NOT_IN_COMBAT_ONLY_PEACEFUL (0x10000000): cannot cast in combat. Aliases
1042
+ // outOfCombatOnly for world-cast gating; Sap's peaceful-target rule is a separate Ex flag.
1043
+ notInCombatOnly?: boolean;
1044
+ // Pounce carries the behind Ex-flags but lost the facing limit in 2.0.1, so the core excludes it
1045
+ // and `requiresBehind` stays unset on its 3 ranks. Cite: Spell.cpp:4825-4827.
1046
+ pounceBehindCoreExcluded?: boolean;
1047
+ // SpellMgr.h IsBinarySpell (pre-WotLK), computed at ETL from Effect* / EffectApplyAuraName* /
1048
+ // EffectImplicitTarget*. Absent → the engine falls back to an effect-kind proxy.
1049
+ binary?: boolean;
1050
+ // spell_template.DmgClass (SharedDefines SPELL_DAMAGE_CLASS_*): 0 none, 1 magic, 2 melee, 3 ranged.
1051
+ // IsResistableSpell = dmgClass !== 0. Used for full-resist land rolls on magic damage.
1052
+ dmgClass?: number;
1053
+ // SpellEntry.TargetCreatureType bits (1 << (type - 1)): the spell only lands on these types
1054
+ // (Shackle → undead, Banish → demon|elemental). Absent/0 = unrestricted. Cite: Spell.cpp ~6909.
1055
+ targetCreatureTypeMask?: number;
1056
+ // ---- Spell/aura engine (System 5) — optional; missing = prior behaviour ----
1057
+ // CategoryRecoveryTime ms: with `category` set the category CD uses this, personal uses `cooldownMs`.
1058
+ categoryRecoveryMs?: number;
1059
+ // InterruptFlags — COMBAT (0x08) for IsInterruptible + swing reset on cast. Cite: Spell.cpp
1060
+ // IsInterruptible / _handle_immediate_phase; SpellDefines.h SPELL_INTERRUPT_FLAG_*.
1061
+ interruptFlags?: number;
1062
+ // spell_template.PreventionType: 0 none, 1 silence, 2 pacify. Silence plus school lockout gates
1063
+ // casts; pacify is melee and out of scope. Cite: SharedDefines SpellPreventionType.
1064
+ preventionType?: number;
1065
+ // SpellEntry.StackAmount — max stacks for this aura on a target. 0/absent = single instance (refresh
1066
+ // duration, no multi-stack). Cite: SpellEntry.StackAmount; Player.cpp stack clamp.
1067
+ stackAmount?: number;
1068
+ // SPELL_ATTR_EX3_DOT_STACKING_RULE (0x80): a SEPARATE stack per caster (each warlock's own
1069
+ // Corruption). Absent = one shared holder, so two warriors build ONE 5-stack Sunder Armor.
1070
+ stacksPerCaster?: boolean;
1071
+ // SpellEntry.procCharges — charges on the aura; decremented on successful proc fire; aura removed at 0.
1072
+ // Cite: SpellEntry.procCharges; UnitAuraProcHandler charge consume.
1073
+ procCharges?: number;
1074
+ // SpellEntry.ProcChance as PERCENT 0..100. spell_proc_event.CustomChance overrides it, and PPM
1075
+ // replaces it on the attacker melee path. Cite: UnitAuraProcHandler.cpp:590–600.
1076
+ procChance?: number;
1077
+ // SpellEntry.procFlags bitmask (SpellMgr.h ProcFlags). Used when matching combat events to aura/talent
1078
+ // procs. Absent = match any hit context (legacy talent procs).
1079
+ procFlags?: number;
1080
+ // SpellEntry.SpellFamilyName (SharedDefines SpellFamily). Used with spell_proc_event family match. Cite:
1081
+ // SpellMgr.cpp IsSpellProcEventCanTriggeredBy ~912; enrich-spell-aura.mjs.
1082
+ spellFamilyName?: number;
1083
+ // SpellEntry.SpellFamilyFlags (bitmask). Matched against spell_proc_event.SpellFamilyMask*. Cite:
1084
+ // UnitAuraProcHandler.cpp ~634 IsFitToFamilyMask; enrich-spell-aura.mjs.
1085
+ spellFamilyFlags?: number;
1086
+ // Per-effect DBC effectBonusCoefficient[3]; with caster spell power or AP the SpellBonusWithCoeffs
1087
+ // path adds bonus damage. Absent = baked min/max only. Cite: Unit.cpp ~6974.
1088
+ effectBonusCoefficient?: number[];
1089
+ /** Per-effect DBC effectBonusCoefficientFromAP[3]. Cite: Unit.cpp SpellBonusWithCoeffs ~6985. */
1090
+ effectBonusCoefficientFromAP?: number[];
1091
+ // spell_proc_event row for this spell id, driving PPM / custom chance / school+family filters /
1092
+ // hidden cooldown at proc sites. Cite: SpellMgr.h SpellProcEventEntry ~1740. Never invent rows.
1093
+ spellProcEvent?: SpellProcEventDef;
1094
+ // Optional conditions-table entry id (or inline ConditionDef for tests/fixtures). When set, cast/use is
1095
+ // gated by the pure conditions evaluator. Cite: Conditions.h ConditionEntry; conditions.md.
1096
+ conditionId?: number;
1097
+ // Inline condition for fixtures / tests (production prefers conditionId + baked table). Never invent
1098
+ // Classic content rows here — test-only or ETL-sourced.
1099
+ condition?: ConditionDef;
1100
+ // ---- Wave D engine-bridge flags (Lane 2 bake half; Wave J deletes id/name lists) ----
1101
+ // SPELL_AURA_SPELL_MAGNET (96): Grounding Totem redirects one harmful single-target spell.
1102
+ spellMagnet?: boolean;
1103
+ // mangos.spell_group_spell group Id (e.g. 10 = Hunter Aspects UNIQUE_PER_CASTER). Cite:
1104
+ // sql/updates/mangos/z2828_01_mangos_spell_groups.sql; character.ts isHunterAspectSpell.
1105
+ spellGroupId?: number;
1106
+ // Mutual-exclusion group for UNIQUE_PER_CASTER / EXCLUSIVE spell_group rules (Aspects, Mage
1107
+ // Armors). Same id as spellGroupId when Rule is 1 or 2. Cite: SpellGroupStackRule.
1108
+ exclusionGroup?: number;
1109
+ // A killing blow with this DoT active grants Soul Shard 6265 — DB-driven, any EffectItemType slot
1110
+ // equal to 6265 (Drain Soul ranks, Shadowburn). Cite: spell_template.EffectItemType*.
1111
+ grantsSoulShardOnKill?: boolean;
1112
+ // SpellEntry.EquippedItemClass — weapon (2) / armor (4), a cast gate plus proficiency. Absent when
1113
+ // −1 (any). Cite: Item.cpp:834–862; Player.cpp:18572–18628; ItemPrototype.h ITEM_CLASS_*.
1114
+ equippedItemClass?: number;
1115
+ // SpellEntry.EquippedItemSubClassMask — subclass bit mask (0/absent = any subclass). Only baked when
1116
+ // EquippedItemClass >= 0 and mask ≠ 0. Cite: Item.cpp:846–850; Player.cpp:18572–18628.
1117
+ equippedItemSubClassMask?: number;
1118
+ // SpellEntry.EquippedItemInventoryTypeMask — InventoryType bits (0/absent = any), applied only
1119
+ // when Targets includes TARGET_FLAG_ITEM. Cite: Item.cpp:856–860.
1120
+ equippedItemInventoryTypeMask?: number;
1121
+ // SPELL_ATTR_EX3_REQUIRES_MAIN_HAND_WEAPON (0x400) on 128 rows — THIS is the disarm gate, not
1122
+ // `equippedItemClass`. Cite: Player.cpp:18577-18582; Unit.h:1191-1204 CanUseEquippedWeapon.
1123
+ requiresMainHandWeapon?: boolean;
1124
+ // SpellEntry.Attributes raw first word. IS_ABILITY (0x10) + USES_RANGED_SLOT (0x2) exclude 356
1125
+ // player rows from the GCD haste branch. Absent when 0. Cite: Player.cpp:20080-20087 AddGCD.
1126
+ attributes?: number;
1127
+ // SpellEntry.StartRecoveryCategory — the GCD bucket `gcdMs` is stored under; 133 is the global one
1128
+ // and the only category the haste branch touches. Absent when 0. Cite: Object.cpp:2596-2603.
1129
+ gcdCategory?: number;
1130
+ // SpellEntry.speed — missile / charge travel speed. 0 → BASE_CHARGE_SPEED (27). Cite:
1131
+ // SpellEffects.cpp:5021 EffectCharge; Unit.h BASE_CHARGE_SPEED.
1132
+ speed?: number;
1133
+ }
1134
+
1135
+ // Baked `spell_proc_event` row (optional fields only when non-zero). Cite: SpellMgr.h SpellProcEventEntry;
1136
+ // SpellMgr.cpp LoadSpellProcEvents.
1137
+ export interface SpellProcEventDef {
1138
+ schoolMask?: number;
1139
+ spellFamilyName?: number;
1140
+ /** Per-effect family masks [0..2]; non-zero entries filter candidate spell family flags. */
1141
+ spellFamilyMask?: number[];
1142
+ procFlags?: number;
1143
+ procEx?: number;
1144
+ ppmRate?: number;
1145
+ /** Flat override chance (percent in DB CustomChance; engine may treat >1 as percent). */
1146
+ customChance?: number;
1147
+ /** Hidden CD on the triggered spell (ms). DB Cooldown column. */
1148
+ cooldownMs?: number;
1149
+ }