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,1501 @@
1
+ // Side intents from CMaNGOS specials that are not represented as bake SpellEffect kinds. Live combat (SI5+)
2
+ // can consume these; oracle ignores them (diff compares effects only).
3
+ export type InterpretIntent =
4
+ | {
5
+ kind: 'consume_aura';
6
+ /** Prefer matching this spell id when set (Swiftmend picked aura). */
7
+ spellId?: number;
8
+ spellFamilyName: number;
9
+ spellFamilyFlags: number;
10
+ auraType: number;
11
+ casterOnly?: boolean;
12
+ /** 1 → RemoveAuraHolderFromStack; unset → RemoveAurasDueToSpell. */
13
+ stacks?: number;
14
+ }
15
+ | { kind: 'zero_energy' }
16
+ | { kind: 'threat_percent'; percent: number; target: 'unit' }
17
+ | { kind: 'skip_effect'; reason: string }
18
+ | {
19
+ kind: 'max_stack_trigger';
20
+ /** Spell id to cast for max-stack apply (Brittle Armor 24575, Mercurial 26464). */
21
+ spellId: number;
22
+ }
23
+ | {
24
+ // SPELL_AURA_MOD_DAMAGE_DONE_CREATURE (59): flat damage vs a creature-type mask.
25
+ // Cite: Unit.cpp:7061 SpellDamageBonusDone; :7465 MeleeDamageBonusDone.
26
+ kind: 'mod_damage_done_creature';
27
+ amount: number;
28
+ /** SharedDefines.h CREATURE_TYPE_MASK_*. */
29
+ creatureTypeMask: number;
30
+ durationMs: number;
31
+ }
32
+ | {
33
+ // TRIGGER_SPELL custom targeting: formal caster = unitTarget (Lash 6608). Cite:
34
+ // SpellEffects.cpp:1608–1612 EffectTriggerSpell.
35
+ kind: 'trigger_spell_as_unit_target';
36
+ spellId: number;
37
+ }
38
+ | {
39
+ // A custom cast with forced base points. Multi-effect customs pass the parent spell id or extra
40
+ // points in the later slots. Cite: SpellAuras.cpp:3468-3469; SpellEffects.cpp:4161.
41
+ kind: 'cast_custom_spell';
42
+ spellId: number;
43
+ /** Effect 0 base points override (signed). */
44
+ bp0: number;
45
+ /** Effect 1 base points override when set (HL/FoL parent spell id, etc.). */
46
+ bp1?: number;
47
+ /** Effect 2 base points override when set. */
48
+ bp2?: number;
49
+ }
50
+ | {
51
+ // A plain cast from a dummy or class script, with no custom base points — the Holy Shock branch
52
+ // and the judgement intermediates. Cite: SpellEffects.cpp:1449-1452.
53
+ kind: 'cast_spell';
54
+ spellId: number;
55
+ }
56
+ | {
57
+ // CastSpell(id, TRIGGERED_*) without custom basepoints. Cite: SpellEffects.cpp Blood Fury 23230;
58
+ // Cannibalize 20578.
59
+ kind: 'cast_triggered_spell';
60
+ spellId: number;
61
+ }
62
+ | {
63
+ // Creature::setFaction from an instance-script dummy. The creature comes from instance storage, not
64
+ // spell targeting. Cite: instance_dire_maul.cpp:670-681 GuardSlipkikTrigger.
65
+ kind: 'set_creature_faction';
66
+ creatureEntry: number;
67
+ factionId: number;
68
+ }
69
+ // ── SI3 batch 1 intents (bake empty / non-effect surfaces) ──────────────
70
+ | {
71
+ /** SPELL_EFFECT_LEARN_SPELL (36). Cite: SpellEffects.cpp:2445–2465 / EffectLearnPetSpell :3386. */
72
+ kind: 'learn_spell';
73
+ spellId: number;
74
+ /** Player unitTarget learns; non-player + player caster → pet path. */
75
+ target: 'player' | 'pet';
76
+ }
77
+ | {
78
+ /** SPELL_EFFECT_ENCHANT_ITEM (53). Bake honest-inert; misc = SpellItemEnchantment id. */
79
+ kind: 'enchant_item_perm';
80
+ enchantId: number;
81
+ }
82
+ | {
83
+ /** SPELL_EFFECT_SUMMON_WILD (41). Cite: SpellEffects.cpp:2729+. */
84
+ kind: 'summon_wild';
85
+ creature: number;
86
+ count: number;
87
+ durationMs: number;
88
+ /** Resolved level when ctx supplies casterLevel / creature level bounds. */
89
+ level?: number;
90
+ radiusIndex: number;
91
+ }
92
+ | {
93
+ // Guardian summon extras: level, engineering skill and replace. The combat surface is the summon
94
+ // effect with its creature, count and duration. Cite: SpellEffects.cpp:2820.
95
+ kind: 'summon_guardian';
96
+ creature: number;
97
+ count: number;
98
+ durationMs: number;
99
+ // Player non-triggered recast unsummons existing guardians of this entry first; if found and spell
100
+ // has no DurationIndex+Category, effect ends (no re-summon).
101
+ replaceExisting: boolean;
102
+ level?: number;
103
+ /** Engineering trinket cast: level = skill/5 when set. */
104
+ engineeringSkillLevel?: number;
105
+ }
106
+ | {
107
+ /** SPELL_EFFECT_SUMMON_OBJECT_WILD (76). Cite: SpellEffects.cpp:3620+. */
108
+ kind: 'summon_object_wild';
109
+ goEntry: number;
110
+ /** Respawn time seconds from spell duration (m_duration / IN_MILLISECONDS). */
111
+ durationMs: number;
112
+ }
113
+ | {
114
+ // SPELL_EFFECT_KNOCK_BACK (98). horizontal = EffectMiscValue/10, vertical = damage/10. Cite:
115
+ // SpellEffects.cpp:5113–5121.
116
+ kind: 'knock_back';
117
+ horizontal: number;
118
+ vertical: number;
119
+ }
120
+ | {
121
+ // Open lock, shared between the spell and item forms: the amount is the LOCK SKILL, and the item
122
+ // flag picks the path. Cite: SpellEffects.cpp:2204.
123
+ kind: 'open_lock';
124
+ skillBonus: number;
125
+ fromItem: boolean;
126
+ /** EffectMiscValue = LockType when non-zero. */
127
+ lockType?: number;
128
+ }
129
+ | {
130
+ /** SPELL_EFFECT_SEND_EVENT (61). StartEvents_Event(misc). Cite: SpellEffects.cpp:1794–1798. */
131
+ kind: 'send_event';
132
+ eventId: number;
133
+ }
134
+ // ── SI3 batch 2 intents ─────────────────────────────────────────────────
135
+ | {
136
+ // SPELL_EFFECT_SUMMON_CRITTER (97) — mini-pet / companion. Same-entry player recast despawns only
137
+ // (count 0). Cite: SpellEffects.cpp:5031–5111.
138
+ kind: 'summon_critter';
139
+ creature: number;
140
+ durationMs: number;
141
+ /** True when same entry already summoned → RemoveMiniPet only. */
142
+ despawnOnly: boolean;
143
+ }
144
+ | {
145
+ // SPELL_EFFECT_ACTIVATE_OBJECT (86). action = EffectMiscValue as GameObjectActions. Cite:
146
+ // SpellEffects.cpp:4377–4482; GameObject.h GameObjectActions.
147
+ kind: 'activate_object';
148
+ action: number;
149
+ // Twilight Council MAKE_ACTIVE/MAKE_INERT summon table (spell id → NPC entry). Random rolls
150
+ // (24734/24763/24784) need ctx.rng; fixed ids listed without roll.
151
+ summonNpcEntry?: number;
152
+ /** Onyxia Eruption 17731 OPEN/DISTURB → custom anim instead of Use. */
153
+ customAnim?: boolean;
154
+ }
155
+ | {
156
+ // SPELL_EFFECT_TRANS_DOOR (50) EffectTransmitted — summon GameObject by entry. Cite:
157
+ // SpellEffects.cpp:5271–5420.
158
+ kind: 'transmitted_object';
159
+ goEntry: number;
160
+ durationMs: number;
161
+ // When ctx.gameObjectType is set, mirror type specials (fishing bobber duration offset, summoning
162
+ // ritual at caster, …). Omit type → generic Create path.
163
+ goType?: number;
164
+ /** Fishing bobber: duration reduced by lastSec then + FISHING_BOBBER_READY_TIME*1000. */
165
+ fishingBobberLastSec?: number;
166
+ }
167
+ | {
168
+ // Devour Magic on successful dispel — CastSpell(heal). Cite: SpellEffects.cpp:2596–2612. Fires only
169
+ // after at least one aura is removed (runtime EvaluateResultLists).
170
+ kind: 'devour_magic_heal';
171
+ healSpellId: number;
172
+ }
173
+ // ── SI3 batch 3 intents ─────────────────────────────────────────────────
174
+ | {
175
+ // SPELL_EFFECT_INSTAKILL (1). DealDamage(target health, INSTAKILL). Cite: SpellEffects.cpp:205–221.
176
+ kind: 'instakill';
177
+ /** Caster == unitTarget → finish() before damage (interrupt message suppress). */
178
+ selfCast?: boolean;
179
+ }
180
+ | {
181
+ // SPELL_EFFECT_SUMMON_PET (56) full body beyond bake `{ kind: 'summon_pet' }`. Cite:
182
+ // SpellEffects.cpp:3227–3384.
183
+ kind: 'summon_class_pet';
184
+ creature: number;
185
+ // hunter → LoadPetFromDB only; warlock → remove Demonic Sacrifice 2228 then load/create;
186
+ // player_default → unsummon + load/create SUMMON_PET; npc → GUARDIAN_PET + level offset.
187
+ path: 'hunter' | 'warlock' | 'player_default' | 'npc_guardian';
188
+ /** Non-player: level = casterLevel + max(multipleValue, 1) when in range. */
189
+ level?: number;
190
+ }
191
+ | {
192
+ // SPELL_EFFECT_PROFICIENCY (60). Add weapon/armor proficiency mask for player. Cite:
193
+ // SpellEffects.cpp:2314–2331; ItemPrototype.h ITEM_CLASS_WEAPON=2, ARMOR=4.
194
+ kind: 'proficiency';
195
+ itemClass: number;
196
+ subClassMask: number;
197
+ }
198
+ | {
199
+ // SPELL_EFFECT_DISPEL_MECHANIC (108). Remove auras with mechanic == misc. count from effect amount (0
200
+ // → 1 via ProcessDispelList). Cite: SpellEffects.cpp:2499–2519 / ProcessDispelList :2521–2575.
201
+ kind: 'dispel_mechanic';
202
+ mechanic: number;
203
+ count: number;
204
+ }
205
+ | {
206
+ // SPELL_EFFECT_QUEST_COMPLETE (16). AreaExploredOrEventHappens(quest_id). Cite:
207
+ // SpellEffects.cpp:4928–4935.
208
+ kind: 'quest_complete';
209
+ questId: number;
210
+ }
211
+ | {
212
+ // SPELL_EFFECT_TELEPORT_GRAVEYARD (120). Nearest graveyard the target's team owns. Cite:
213
+ // SpellEffects.cpp EffectTeleportGraveyard; BattleGround.h:85.
214
+ kind: 'teleport_graveyard';
215
+ }
216
+ | {
217
+ // SPELL_EFFECT_CHARGE (96). MoveCharge(target, speed); optional auto-attack. speed = SpellEntry.speed
218
+ // != 0 ? speed : BASE_CHARGE_SPEED (27). Cite: SpellEffects.cpp:5009–5028; Unit.h BASE_CHARGE_SPEED.
219
+ kind: 'charge';
220
+ speed: number;
221
+ /** Client-controlled caster + CanAttack → Attack(target). */
222
+ initiateAutoAttack: boolean;
223
+ }
224
+ | {
225
+ // SPELL_EFFECT_RESURRECT_NEW (113) via EffectResurrect. health = damage (flat), mana =
226
+ // EffectMiscValue. Cite: SpellEffects.cpp:4797–4871.
227
+ kind: 'resurrect_new';
228
+ health: number;
229
+ mana: number;
230
+ }
231
+ | {
232
+ // SPELL_EFFECT_TELEPORT_UNITS (5). NearTeleport / TeleportTo dest. Requires TARGET_FLAG_DEST_LOCATION
233
+ // at cast time. Cite: SpellEffects.cpp:1683–1728; SpellTargetDefines TARGET_LOCATION_DATABASE=17.
234
+ kind: 'teleport_units';
235
+ targetA: number;
236
+ targetB: number;
237
+ /** When set and differs from unit map → cross-map player TeleportTo. */
238
+ mapId?: number;
239
+ /** unitTarget taxi flying → early return. */
240
+ skippedTaxiFlying?: boolean;
241
+ }
242
+ // ── SI3 batch 4 intents ─────────────────────────────────────────────────
243
+ | {
244
+ // SPELL_EFFECT_SPAWN (46). Clear UNIT_FLAG_SPAWNING for spell ids 15750 / 26262. Other spawn spells
245
+ // are empty (client animation markers). Cite: SpellEffects.cpp:3037–3046.
246
+ kind: 'spawn';
247
+ /** True when this spell id removes UNIT_FLAG_SPAWNING on the caster. */
248
+ clearSpawningFlag: boolean;
249
+ }
250
+ | {
251
+ // SPELL_EFFECT_WEAPON (25) EffectEmpty — proficiency / usability marker only. Cite:
252
+ // SpellEffects.cpp:190–193 EffectEmpty; dispatch table :83.
253
+ kind: 'weapon_marker';
254
+ }
255
+ | {
256
+ // SPELL_EFFECT_SUMMON_OBJECT_SLOT1–4 (104–107) EffectSummonObject. Replaces prior GO in
257
+ // m_ObjectSlotGuid[slot]; SLOT1→0 SLOT2→1. Cite: SpellEffects.cpp:4734–4790; Unit.h:1979.
258
+ kind: 'summon_object_slot';
259
+ goEntry: number;
260
+ /** 0..3 object slot index. */
261
+ slot: number;
262
+ durationMs: number;
263
+ }
264
+ | {
265
+ // SPELL_EFFECT_ENCHANT_HELD_ITEM (92). Temp enchant on target player main-hand. duration cascade:
266
+ // m_duration → base points → 10s; stored as seconds×1000. Cite: SpellEffects.cpp:4585–4635.
267
+ kind: 'enchant_held_item';
268
+ enchantId: number;
269
+ durationMs: number;
270
+ // Improved Weapon Totems (family mask 0x4000000): Windfury/Flametongue dummy modifier from owner
271
+ // auras 29192/29193 when supplied on ctx.
272
+ enchantmentModifier?: number;
273
+ }
274
+ | {
275
+ // SPELL_EFFECT_INEBRIATE (100). drunk += damage×256, clamp 0xFFFF. Cite: SpellEffects.cpp:4666–4678.
276
+ kind: 'inebriate';
277
+ /** damage * 256 added to current drunk value. */
278
+ drunkMod: number;
279
+ /** Resulting drunk value when ctx.currentDrunk provided; else omit. */
280
+ newDrunk?: number;
281
+ /** Cast-item entry passed to SetDrunkValue when available. */
282
+ castItemEntry?: number;
283
+ }
284
+ // ── SI3 batch 5 intents ─────────────────────────────────────────────────
285
+ | {
286
+ // SPELL_EFFECT_SUMMON (28) full body beyond bake `{ kind: 'summon_pet' }`. Creates GUARDIAN_PET;
287
+ // early out if caster already has pet guid. Cite: SpellEffects.cpp:2343–2443.
288
+ kind: 'summon_guardian_pet';
289
+ creature: number;
290
+ durationMs: number;
291
+ /** Non-player: level = casterLevel + max(multipleValue, 1) when in range. */
292
+ level?: number;
293
+ /** True when GetPetGuid early-out (no summon). Cite: :2348–2349. */
294
+ skippedExistingPet?: boolean;
295
+ }
296
+ | {
297
+ // SPELL_EFFECT_LANGUAGE (39) EffectEmpty — misc stores language id. Cite: SpellEffects.cpp:97
298
+ // dispatch → EffectEmpty :190–193.
299
+ kind: 'language_marker';
300
+ /** EffectMiscValue language id (chat). */
301
+ languageId: number;
302
+ }
303
+ | {
304
+ // SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER (43). NearTeleportTo(dest, -caster orientation). Requires
305
+ // TARGET_FLAG_DEST_LOCATION. Cite: SpellEffects.cpp:2994–3006.
306
+ kind: 'teleport_face_caster';
307
+ targetA: number;
308
+ targetB: number;
309
+ /** unitTarget taxi flying → early return. Cite: :2996. */
310
+ skippedTaxiFlying?: boolean;
311
+ /** Missing dest location mask → no teleport. Cite: :3000–3003. */
312
+ requiresDestLocation: true;
313
+ }
314
+ | {
315
+ // SPELL_EFFECT_SKILL_STEP (44) EffectLearnSkill. SetSkillStep(skillId, step) where step = damage.
316
+ // Cite: SpellEffects.cpp:3008–3024.
317
+ kind: 'skill_step';
318
+ skillId: number;
319
+ /** uint16(damage) from effect amount. */
320
+ step: number;
321
+ }
322
+ | {
323
+ // SPELL_EFFECT_SUMMON_CHANGE_ITEM (34). Convert cast item → EffectItemType. Cite:
324
+ // SpellEffects.cpp:2276–2312.
325
+ kind: 'summon_change_item';
326
+ newItemId: number;
327
+ }
328
+ | {
329
+ // SPELL_EFFECT_RESURRECT (18) via EffectResurrect percent path. health = maxHealth * damage / 100;
330
+ // mana = maxMana * damage / 100. Cite: SpellEffects.cpp:4797–4871 (computator :4819–4824).
331
+ kind: 'resurrect';
332
+ /** Effect amount used as percent (and as numerator with target max). */
333
+ percent: number;
334
+ /** Resolved when ctx.targetMaxHealth set. */
335
+ health?: number;
336
+ /** Resolved when ctx.targetMaxMana set. */
337
+ mana?: number;
338
+ }
339
+ | {
340
+ // SPELL_EFFECT_LEAP (29) EffectLeapForward. NearTeleportTo(dest, unit orientation). Cite:
341
+ // SpellEffects.cpp:4895–4906.
342
+ kind: 'leap';
343
+ targetA: number;
344
+ targetB: number;
345
+ }
346
+ | {
347
+ // SPELL_EFFECT_TRADE_SKILL (47). Player unitTarget gate; body commented out. Cite:
348
+ // SpellEffects.cpp:3048–3055.
349
+ kind: 'trade_skill';
350
+ /** EffectMiscValue skill id when non-zero (commented C++ referenced it). */
351
+ skillId?: number;
352
+ }
353
+ | {
354
+ // SPELL_EFFECT_SKILL (118). DEBUG_LOG only — marker for skill-line spells. Cite:
355
+ // SpellEffects.cpp:5425–5428.
356
+ kind: 'skill_marker';
357
+ }
358
+ // ── SI3 batch 6 intents ─────────────────────────────────────────────────
359
+ | {
360
+ // SPELL_EFFECT_ADD_FARSIGHT (72). Player caster creates DynamicObject FARSIGHT_FOCUS (radius 0) +
361
+ // SetView. Cite: SpellEffects.cpp:2708–2727; DynamicObject.h DYNAMIC_OBJECT_FARSIGHT_FOCUS=0x2.
362
+ kind: 'add_farsight';
363
+ durationMs: number;
364
+ /** Always 0 in C++ Create call — not a persistent aura radius. Cite: :2715–2717. */
365
+ radius: 0;
366
+ /** DynamicObjectType.DYNAMIC_OBJECT_FARSIGHT_FOCUS. */
367
+ dynObjectType: 2;
368
+ }
369
+ | {
370
+ // SPELL_EFFECT_SANCTUARY (79). InterruptSpellsCastedOnMe + CombatStop; Vanish family clears root +
371
+ // detect timer. Cite: SpellEffects.cpp:4194–4211.
372
+ kind: 'sanctuary';
373
+ /** True when spell IsFitToFamily(SPELLFAMILY_ROGUE, 0x800) — Vanish path. Cite: :4203–4209. */
374
+ vanishRogueSpecial: boolean;
375
+ /** Vanish: SetCannotBeDetectedTimer(1000). Cite: :4208. */
376
+ cannotBeDetectedMs?: number;
377
+ }
378
+ | {
379
+ // Reputation: the simple value is the change and the misc value the faction, then the spell-source
380
+ // gain and the modify. Cite: SpellEffects.cpp:4908-4926; Player.cpp:6293-6369.
381
+ kind: 'reputation';
382
+ factionId: number;
383
+ /** m_currentBasePoints = EffectBasePoints + EffectBaseDice. */
384
+ repChange: number;
385
+ // After CalculateReputationGain when ctx supplies rate/aura mods; omit on bake-thin (world rate +
386
+ // auras are runtime).
387
+ finalRepChange?: number;
388
+ }
389
+ | {
390
+ // SPELL_EFFECT_SUMMON_POSSESSED (73). TakePossessOf creature from EffectMiscValue at dest. Cite:
391
+ // SpellEffects.cpp:4563–4583.
392
+ kind: 'summon_possessed';
393
+ creature: number;
394
+ durationMs: number;
395
+ }
396
+ | {
397
+ // SPELL_EFFECT_BIND_SIGHT (82) EffectNULL — DEBUG_LOG only, no server body. Cite:
398
+ // SpellEffects.cpp:140 dispatch → EffectNULL :195–198.
399
+ kind: 'bind_sight_null';
400
+ }
401
+ | {
402
+ // SPELL_EFFECT_SUMMON_DEMON (112). Count = CalculateSimpleValue; creature = EffectMiscValue; level =
403
+ // caster level; despawn 3_600_000 ms TIMED_OR_DEAD. Cite: SpellEffects.cpp:5430–5460.
404
+ kind: 'summon_demon';
405
+ creature: number;
406
+ count: number;
407
+ /** TEMPSPAWN_TIMED_OR_DEAD_DESPAWN 3600000. Cite: :5447. */
408
+ durationMs: number;
409
+ /** SetLevel(caster level) when ctx.casterLevel set. Cite: :5454. */
410
+ level?: number;
411
+ }
412
+ | {
413
+ // SPELL_EFFECT_PULL_TOWARDS (124). speedXY = max(1, EffectMiscValue) * 0.1; projectile motion toward
414
+ // caster. Cite: SpellEffects.cpp:5132–5162; Movement::gravity util.cpp:24.
415
+ kind: 'pull_towards';
416
+ speedXY: number;
417
+ // When ctx.pullDistance (+ optional pullHeightDelta) set: time = dist/speedXY; speedZ = (dz +
418
+ // 0.5*t²*g)/t. Cite: :5156–5158.
419
+ speedZ?: number;
420
+ /** Distance used when computing speedZ. */
421
+ distance?: number;
422
+ }
423
+ | {
424
+ // SPELL_EFFECT_DODGE (20) EffectEmpty — client/marker only. Cite: SpellEffects.cpp:78 dispatch →
425
+ // EffectEmpty :190–193.
426
+ kind: 'dodge_marker';
427
+ }
428
+ | {
429
+ /** SPELL_EFFECT_PARRY (22). SetCanParry(true) on caster. Cite: SpellEffects.cpp:4885–4888. */
430
+ kind: 'can_parry';
431
+ }
432
+ | {
433
+ /** SPELL_EFFECT_BLOCK (23). SetCanBlock(true) on caster. Cite: SpellEffects.cpp:4890–4893. */
434
+ kind: 'can_block';
435
+ }
436
+ // ── SI3 batch 7 intents ─────────────────────────────────────────────────
437
+ | {
438
+ // SPELL_EFFECT_DEFENSE (26) EffectEmpty — skill-line marker only. Cite: SpellEffects.cpp:84 dispatch
439
+ // → EffectEmpty :190–193.
440
+ kind: 'defense_marker';
441
+ }
442
+ | {
443
+ // SPELL_EFFECT_SPELL_DEFENSE (37) EffectEmpty — client/marker only. Cite: SpellEffects.cpp:95
444
+ // dispatch → EffectEmpty :190–193.
445
+ kind: 'spell_defense_marker';
446
+ }
447
+ | {
448
+ // SPELL_EFFECT_DETECT (49) EffectUnused — no server body. Cite: SpellEffects.cpp:107 dispatch →
449
+ // EffectUnused :200–203.
450
+ kind: 'detect_unused';
451
+ }
452
+ | {
453
+ // SPELL_EFFECT_PORTAL (12) EffectUnused — unused from pre-1.2.1. Cite: SpellEffects.cpp:70 dispatch →
454
+ // EffectUnused :200–203.
455
+ kind: 'portal_unused';
456
+ }
457
+ | {
458
+ // SPELL_EFFECT_TAMECREATURE (55). Full pet build is OOC tame path. Cite: SpellEffects.cpp
459
+ // EffectTameCreature :3149–3225.
460
+ kind: 'tame_creature';
461
+ }
462
+ | {
463
+ /** SPELL_EFFECT_SELF_RESURRECT (94). Cite: SpellEffects.cpp EffectSelfResurrect :4937–4968. */
464
+ kind: 'self_resurrect';
465
+ percent?: number;
466
+ health?: number;
467
+ mana?: number;
468
+ }
469
+ | {
470
+ // SPELL_AURA_RETAIN_COMBO_POINTS (148). Cite: SpellAuras.cpp HandleAuraRetainComboPoints :4436–4452.
471
+ kind: 'retain_combo_points';
472
+ amount: number;
473
+ durationMs: number;
474
+ }
475
+ | {
476
+ // SPELL_AURA_PERIODIC_HEALTH_FUNNEL (62) transfer multiplier. Cite: SpellAuras.cpp PeriodicTick
477
+ // :4606–4612, :4677.
478
+ kind: 'periodic_health_funnel';
479
+ multipleValue: number;
480
+ }
481
+ | {
482
+ /** SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE (179). Cite: Unit.cpp GetCritTakenChance :3516–3536. */
483
+ kind: 'mod_attacker_spell_crit_chance';
484
+ amount: number;
485
+ schoolMask: number;
486
+ durationMs: number;
487
+ }
488
+ | {
489
+ // Distract: clear the moving state, distract the creature for the amount in seconds, and face the
490
+ // destination. Cite: SpellEffects.cpp:2640-2660.
491
+ kind: 'distract';
492
+ /** damage * 1000 — MoveDistract timer ms. */
493
+ durationMs: number;
494
+ /** unitTarget GetTypeId() == TYPEID_UNIT → MoveDistract path. */
495
+ moveDistract: boolean;
496
+ }
497
+ | {
498
+ // SPELL_EFFECT_PICKPOCKET (71). Create/refill LOOT_PICKPOCKETING and ShowContentTo player caster.
499
+ // Cite: SpellEffects.cpp:2662–2706.
500
+ kind: 'pickpocket';
501
+ // When already pickpocketed and !CanRestockPickpocketLoot → LOOT_ERROR_ALREADY_PICKPOCKETED. Cite:
502
+ // :2683–2696.
503
+ alreadyPickpocketed?: boolean;
504
+ /** Restock path when pickpocketed + CanRestockPickpocketLoot. Cite: :2685–2691. */
505
+ restock?: boolean;
506
+ }
507
+ | {
508
+ // SPELL_EFFECT_ATTACK (78) EffectUnused — no server body. Cite: SpellEffects.cpp:136 dispatch →
509
+ // EffectUnused :200–203.
510
+ kind: 'attack_unused';
511
+ }
512
+ | {
513
+ // SPELL_EFFECT_DUEL (83). Create duel-flag GO at midpoint; SMSG_DUEL_REQUESTED; DuelInfo on both
514
+ // players. Cite: SpellEffects.cpp:4227–4308.
515
+ kind: 'duel';
516
+ /** EffectMiscValue = duel flag GameObject entry. Cite: :4257. */
517
+ flagGoEntry: number;
518
+ /** Spell duration → GO respawn seconds when > 0. Cite: :4274. */
519
+ durationMs: number;
520
+ // Early-out reasons when cast-time ctx gates fail. Cite: :4229–4237 player/duel/ignore; :4240–4252
521
+ // AREA_FLAG_DUEL.
522
+ skipped?:
523
+ | 'not_players'
524
+ | 'already_dueling'
525
+ | 'ignored'
526
+ | 'area_no_duel';
527
+ }
528
+ | {
529
+ // Stuck: a ghost repops at the graveyard, else the hearth when it is ready and carried, else a
530
+ // dungeon entrance or a ten-yard nudge. Cite: SpellEffects.cpp:4310-4353.
531
+ kind: 'stuck';
532
+ path: 'graveyard' | 'hearthstone' | 'dungeon_entrance' | 'nudge';
533
+ /** Hearthstone CastSpell id when path is hearthstone. Cite: :4336. */
534
+ hearthSpellId?: number;
535
+ /** Nudge distance DEFAULT_WORLD_OBJECT_SIZE path uses 10.0f. Cite: :4350. */
536
+ nudgeDistance?: number;
537
+ }
538
+ // ── SI3 batch 8 intents ─────────────────────────────────────────────────
539
+ | {
540
+ // Durability damage in points or percent: the points path loses points and the percent path a
541
+ // fraction. Cite: SpellEffects.cpp:5209-5260.
542
+ kind: 'durability_damage';
543
+ /** EffectMiscValue — equipment slot, or −1 all equipped / −2 equipped+inventory. */
544
+ slot: number;
545
+ /** `damage` points subtracted (effect 111). Cite: :5220 / :5232. */
546
+ points?: number;
547
+ /** `damage / 100` fraction (effect 115). Cite: :5247 / :5259. */
548
+ percent?: number;
549
+ /** slot < 0 → DurabilityPointsLossAll / DurabilityLossAll. Cite: :5218 / :5245. */
550
+ allItems: boolean;
551
+ /** slot < −1 → also damage bag contents. Cite: :5220 / :5247. */
552
+ includeInventory: boolean;
553
+ }
554
+ | {
555
+ // SPELL_EFFECT_ATTACK_ME (114) AI path when unit cannot have a threat list. Cite:
556
+ // SpellEffects.cpp:3437–3440 AttackStart(m_caster).
557
+ kind: 'attack_me_ai';
558
+ }
559
+ | {
560
+ // Remove Insignia: an online owner is stripped of theirs, while a corpse alone is converted and
561
+ // its insignia loot shown. Cite: SpellEffects.cpp:5499-5542.
562
+ kind: 'skin_player_corpse';
563
+ path: 'removed_insignia' | 'corpse_bones_loot';
564
+ }
565
+ // ── SI3 aura batch intents ────────────────────────────────────────────────
566
+ | {
567
+ // Flat healing done, by school mask. The C++ body is client-field only on Classic, and the bake
568
+ // has no flat healing-done mod yet. Cite: SpellAuras.cpp:3528-3535.
569
+ kind: 'mod_healing_done';
570
+ amount: number;
571
+ schoolMask: number;
572
+ durationMs: number;
573
+ }
574
+ | {
575
+ // SPELL_AURA_MOUNTED (78). Mount creature template → display model. miscValue = creature entry;
576
+ // display resolved at runtime via ChooseDisplayId. Cite: SpellAuras.cpp:1629–1656 HandleAuraMounted.
577
+ kind: 'mounted';
578
+ creatureEntry: number;
579
+ }
580
+ | {
581
+ // SPELL_AURA_DUMMY (4) spell-id / family specials. Bake maps aura 4 to empty; specials are pure
582
+ // intents for SI5+. Cite: SpellAuras.cpp:1229–1620 HandleAuraDummy; PeriodicDummyTick :5025.
583
+ kind: 'aura_dummy';
584
+ /** Spell id that triggered this special (holder spell). */
585
+ spellId: number;
586
+ action:
587
+ | 'periodic'
588
+ | 'cast_spell'
589
+ | 'remove_aura'
590
+ | 'sleep_visual'
591
+ | 'feign_death'
592
+ | 'seal_crusader_dps'
593
+ | 'quest_tame_final'
594
+ | 'combustion_clear_stacks'
595
+ | 'predatory_strikes_ap'
596
+ | 'interrupt_channel_on_death';
597
+ /** Triggered / final spell id when action casts or removes. */
598
+ relatedSpellId?: number;
599
+ /** Periodic timer ms when action is periodic. */
600
+ periodMs?: number;
601
+ /** Per-tick / per-apply roll in percent when the C++ body gates on roll_chance_i. */
602
+ chancePct?: number;
603
+ /** Seal of the Crusader BASE_ATTACK DPS percent (40). */
604
+ dpsPct?: number;
605
+ /** When the special fires (apply / remove / both / remove modes). */
606
+ on?: 'apply' | 'remove' | 'both' | 'remove_expire' | 'remove_death' | 'remove_dispel';
607
+ }
608
+ | {
609
+ // SPELL_AURA_MOD_STUN (12) frost freeze state / Wyvern Sting aftermath. Cite:
610
+ // SpellAuras.cpp:2453–2575 HandleAuraModStun.
611
+ kind: 'mod_stun_special';
612
+ /** Frost school stun → AURA_STATE_FROZEN on apply. Cite: :2461–2462. */
613
+ frostFreeze?: boolean;
614
+ /** Wyvern Sting sleep spell cast on stun remove (family flag 0x10000 ranks). Cite: :2530–2554. */
615
+ wyvernStingSleepSpellId?: number;
616
+ // Boss Wyvern Sting 26180 → CastCustomSpell 26233 nature damage on remove. Cite: :2558–2565 (500
617
+ // expire / 3000 dispel).
618
+ wyvernBossNatureDamage?: { expire: number; dispel: number };
619
+ }
620
+ | {
621
+ // SPELL_AURA_PERIODIC_TRIGGER_SPELL (23) remove-time specials. Cite: SpellAuras.cpp:3092–3111
622
+ // HandlePeriodicTriggerSpell.
623
+ kind: 'periodic_trigger_remove';
624
+ /** Spells cast on aura remove (Burning Adrenaline 18173/23620 → 23478+23644). */
625
+ castSpellIds: number[];
626
+ }
627
+ | {
628
+ // The full proc metadata for the fire path. The bake surface is also emitted as a proc trigger or
629
+ // damage shield. Cite: UnitAuraProcHandler.cpp:515-650, :1242; Unit.cpp:7717.
630
+ kind: 'proc_trigger_spell';
631
+ /** Holder aura spell id. */
632
+ holderSpellId: number;
633
+ // Spell cast on successful proc (after LShield / family id rewrites). Cite:
634
+ // UnitAuraProcHandler.cpp:1255 EffectTriggerSpell path.
635
+ triggerSpellId: number;
636
+ // Effective EventProcFlag (spell_proc_event.procFlags || spell_template.procFlags). Cite:
637
+ // UnitAuraProcHandler.cpp:523–526.
638
+ procFlags: number;
639
+ /** spell_proc_event.procEx when non-zero. */
640
+ procEx?: number;
641
+ // Flat chance as percent 0..100 (ProcChance / CustomChance). Cite: UnitAuraProcHandler.cpp:590–595.
642
+ chancePct: number;
643
+ // spell_proc_event.ppmRate — when set, replaces flat chance via GetPPMProcChance. Cite:
644
+ // UnitAuraProcHandler.cpp:596–600; Unit.cpp:7717.
645
+ ppmRate?: number;
646
+ // Internal cooldown ms (spell_proc_event.Cooldown baked as cooldownMs). Cite:
647
+ // UnitAuraProcHandler.cpp:431–435 SetProcCooldown.
648
+ cooldownMs?: number;
649
+ charges?: number;
650
+ amount?: number;
651
+ schoolMask?: number;
652
+ spellFamilyName?: number;
653
+ spellFamilyMask?: number[];
654
+ // When ctx.procEvent + rng supplied: whether this interpret rolled a fire. Absent on bake-thin (no
655
+ // event).
656
+ fired?: boolean;
657
+ /** After successful fire with cooldownMs: nowMs + cooldownMs. */
658
+ cooldownReadyAt?: number | null;
659
+ }
660
+ | {
661
+ // A successful proc: interpret the triggered spell through the dispatcher. Emitted only when the
662
+ // context resolves the trigger and the roll fired. Cite: UnitAuraProcHandler.cpp:698-725.
663
+ kind: 'proc_triggered_cast';
664
+ triggerSpellId: number;
665
+ /** Normalized effects from interpretSpell(trigger). */
666
+ effects: import('../../../data/schema.ts').SpellEffect[];
667
+ }
668
+ // ── SI3 aura batch 2 intents ──────────────────────────────────────────────
669
+ | {
670
+ // SPELL_AURA_MOD_ROOT (26) frost freeze state on apply/remove. Cite: SpellAuras.cpp:2727–2775
671
+ // HandleAuraModRoot.
672
+ kind: 'mod_root_special';
673
+ /** Frost school root → AURA_STATE_FROZEN. Cite: :2737–2739 / :2748–2765. */
674
+ frostFreeze?: boolean;
675
+ }
676
+ | {
677
+ // Modify a skill bonus, temporary for aura 30 and permanent for the talent form 98.
678
+ // Cite: SpellAuras.cpp:2055-2067 HandleAuraModSkill.
679
+ kind: 'mod_skill';
680
+ skillId: number;
681
+ amount: number;
682
+ permanent: boolean;
683
+ durationMs: number;
684
+ }
685
+ | {
686
+ // A display model change from a creature entry. The bake also maps a hostile transform as a
687
+ // breakable incapacitate. Cite: SpellAuras.cpp:1979-2052 HandleAuraTransform.
688
+ kind: 'transform';
689
+ /** EffectMiscValue creature template entry (0 → script/custom amount). Cite: :1988–2007. */
690
+ creatureEntry: number;
691
+ // Missing creature template fallback display id (pig pink). Cite: SpellAuras.cpp:2003
692
+ // m_modifier.m_amount = 16358.
693
+ missingCreatureDisplayId?: number;
694
+ }
695
+ | {
696
+ // SPELL_AURA_MECHANIC_IMMUNITY (77) apply-time purge when SPELL_ATTR_EX_IMMUNITY_PURGES_EFFECT is
697
+ // set. mechanicMask = 1 << (misc − 1). Cite: SpellAuras.cpp:2936–2948.
698
+ kind: 'mechanic_immunity_purge';
699
+ mechanic: number;
700
+ mechanicMask: number;
701
+ }
702
+ // ── SI3 aura batch 3 intents ──────────────────────────────────────────────
703
+ | {
704
+ // SPELL_AURA_MOD_SCALE (61). ApplyPercentModFloatValue(OBJECT_FIELD_SCALE_X). Cosmetic / model scale
705
+ // only — no bake SpellEffect. Cite: SpellAuras.cpp:2182–2185 HandleAuraModScale.
706
+ kind: 'mod_scale';
707
+ /** Signed percent from base points (e.g. +10 → 10% larger). Cite: :2184. */
708
+ pct: number;
709
+ durationMs: number;
710
+ }
711
+ | {
712
+ // SPELL_AURA_SCHOOL_IMMUNITY (39) apply-time specials beyond the baked school_immunity effect. Cite:
713
+ // SpellAuras.cpp:2992–3043 HandleAuraModSchoolImmunity.
714
+ kind: 'school_immunity_special';
715
+ schoolMask: number;
716
+ // Positive immunity + SPELL_ATTR_EX_IMMUNITY_PURGES_EFFECT → remove negative auras matching school
717
+ // mask. Cite: :3002–3023.
718
+ purgeNegativeSchoolAuras?: boolean;
719
+ // Spell mechanic MECHANIC_BANISH → UNIT_STAT_ISOLATED. Cite: :3025–3030; SharedDefines.h
720
+ // MECHANIC_BANISH = 18.
721
+ isolated?: boolean;
722
+ }
723
+ | {
724
+ // Dispel immunity by type, with an optional purge; the bake leaves it empty.
725
+ // Cite: SpellAuras.cpp:3053-3059; Unit.cpp:7697-7702 ApplySpellDispelImmunity.
726
+ kind: 'dispel_immunity';
727
+ /** EffectMiscValue = DispelType. Cite: :3059. */
728
+ dispelType: number;
729
+ durationMs: number;
730
+ // On apply + SPELL_ATTR_EX_IMMUNITY_PURGES_EFFECT → RemoveAurasWithDispelType. Cite:
731
+ // Unit.cpp:7701–7702. Gate: ctx.immunityPurgesEffect === true.
732
+ purgeDispelType?: boolean;
733
+ }
734
+ | {
735
+ // SPELL_AURA_ADD_FLAT_MODIFIER (107). Player AddSpellMod(SpellModifier(op, SPELLMOD_FLAT, amount,
736
+ // …)). Bake leaves empty (talent path only). Cite: SpellAuras.cpp:899–939.
737
+ kind: 'add_flat_modifier';
738
+ /** EffectMiscValue = SpellModOp. Cite: :924–925; SpellDefines.h MAX_SPELLMOD=32. */
739
+ spellModOp: number;
740
+ /** Flat modifier amount (base points). Cite: :927. */
741
+ amount: number;
742
+ durationMs: number;
743
+ /** EffectItemType family mask. Cite: SpellMgr.h GetSpellAffectMask. */
744
+ familyFlags?: number;
745
+ /** Aura charges override (Shadow Trance / Netherwind Focus → 1). Cite: :915–918 SetAuraCharges(1). */
746
+ auraCharges?: number;
747
+ /** Spell priority override (Clearcasting 16246 → 100). Cite: :919–921. */
748
+ priority?: number;
749
+ }
750
+ | {
751
+ // The health transfer of a periodic leech to the caster: the bake maps a plain dot only, and the
752
+ // heal is the damage times the multiple value. Cite: SpellAuras.cpp:4592-4682.
753
+ kind: 'periodic_leech_heal';
754
+ /** EffectMultipleValue (≤0 → 1.0). Cite: :4645. */
755
+ multipleValue: number;
756
+ }
757
+ | {
758
+ // SPELL_AURA_MOD_DAMAGE_PERCENT_DONE (79) expire special. Cite: SpellAuras.cpp:4170–4172 (id 30423 →
759
+ // cast 38639 on expire).
760
+ kind: 'mod_damage_percent_done_expire';
761
+ castSpellId: number;
762
+ }
763
+ // ── SI3 aura batch 4 intents ──────────────────────────────────────────────
764
+ | {
765
+ // Hit chance: a player recomputes all three weapon hit chances from every hit aura, an NPC adds
766
+ // the amount to each. The bake has no hit mod. Cite: SpellAuras.cpp:3850-3866.
767
+ kind: 'mod_hit_chance';
768
+ /** Signed percent points from base points (e.g. −50 hit). Cite: :3862–3864. */
769
+ amount: number;
770
+ durationMs: number;
771
+ // When true, target is non-player — flat ±amount on m_modWeaponHitChance[3]. Omit / false → player
772
+ // recompute path. Gate: ctx.unitTargetIsPlayer === false. Cite: SpellAuras.cpp:3854–3865.
773
+ nonPlayerFlat?: boolean;
774
+ }
775
+ | {
776
+ // Melee attack power against a creature type mask, added in the damage-done path. Unmapped in the
777
+ // bake. Cite: SpellAuras.cpp:163; Unit.cpp:7475-7476.
778
+ kind: 'mod_melee_attack_power_versus';
779
+ /** EffectMiscValue = creature type mask bitfield. Cite: Unit.cpp:7476. */
780
+ creatureTypeMask: number;
781
+ /** Flat melee AP bonus vs matching creature types. */
782
+ amount: number;
783
+ durationMs: number;
784
+ }
785
+ | {
786
+ // The apply-time interrupt of casts with the silence prevention type. The bake surface is the
787
+ // silence itself; this documents the interrupt loop. Cite: SpellAuras.cpp:2787-2794.
788
+ kind: 'mod_silence_interrupt';
789
+ }
790
+ | {
791
+ // SPELL_AURA_MOD_CHARM (6) side-switch / charm ownership. Bake surface is cc incapacitate+charm; this
792
+ // intent carries TakeCharmOf path. Cite: SpellAuras.cpp:2282–2329 HandleModCharm.
793
+ kind: 'mod_charm';
794
+ /** Spell id of the charm holder (GetId()). Cite: :2307 TakeCharmOf(target, GetId()). */
795
+ spellId: number;
796
+ durationMs: number;
797
+ // Player caster BreakCharmOutgoing(true) before TakeCharmOf (unique advertised charm). Gate:
798
+ // ctx.casterIsPlayer !== false. Cite: :2304–2305.
799
+ breakOutgoing?: boolean;
800
+ // TakeCharmOf advertised flag. false = HandleAoECharm private set (co-exists). Cite:
801
+ // SpellAuras.cpp:2346–2348 TakeCharmOf(target, GetId(), false); Unit.cpp:11350.
802
+ advertised?: boolean;
803
+ }
804
+ // ── SI3 aura batch 5 intents ──────────────────────────────────────────────
805
+ | {
806
+ // Ranged attack power against a creature type mask, for ranged attacks only. Unmapped in the bake.
807
+ // Cite: SpellAuras.cpp:192; Unit.cpp:7469-7471.
808
+ kind: 'mod_ranged_attack_power_versus';
809
+ /** EffectMiscValue = creature type mask bitfield. Cite: Unit.cpp:7471. */
810
+ creatureTypeMask: number;
811
+ /** Flat ranged AP bonus vs matching creature types. */
812
+ amount: number;
813
+ durationMs: number;
814
+ }
815
+ | {
816
+ // SPELL_AURA_MOD_INVISIBILITY (18). AddInvisibilityValue(misc, ±amount); mask when value > 0;
817
+ // visibility group. Bake unmapped. Cite: SpellAuras.cpp:2626–2675 HandleInvisibility.
818
+ kind: 'mod_invisibility';
819
+ /** EffectMiscValue = invisibility type / mask bit. Cite: :2630. */
820
+ invisibilityType: number;
821
+ /** Strength amount (base points). Cite: :2630. */
822
+ amount: number;
823
+ durationMs: number;
824
+ }
825
+ | {
826
+ // Block percent: a player recomputes the block chance, an NPC adds the amount. The bake has no
827
+ // block mod. Cite: SpellAuras.cpp:3789-3800.
828
+ kind: 'mod_block_percent';
829
+ /** Signed percent points from base points. */
830
+ amount: number;
831
+ durationMs: number;
832
+ // When true, target is non-player — flat ±amount on m_modBlockChance. Gate: ctx.unitTargetIsPlayer
833
+ // === false. Cite: :3793–3796.
834
+ nonPlayerFlat?: boolean;
835
+ }
836
+ | {
837
+ // Crit percent: with an equipped-item class of -1 it lands flat on all three, otherwise it takes
838
+ // the weapon-dependent path. The bake is empty. Cite: SpellAuras.cpp:3815-3848.
839
+ kind: 'mod_crit_percent';
840
+ /** Signed percent points from base points (e.g. Recklessness +100). */
841
+ amount: number;
842
+ durationMs: number;
843
+ // When true, target is non-player — flat ±amount on all m_modCritChance. Gate: ctx.unitTargetIsPlayer
844
+ // === false. Cite: :3819–3823.
845
+ nonPlayerFlat?: boolean;
846
+ // Spell EquippedItemClass. −1 / omit → apply all three crit base mods. Non−1 → weapon-dependent equip
847
+ // apply (SI5). Cite: :3838–3847.
848
+ equippedItemClass?: number;
849
+ }
850
+ | {
851
+ // The caster's power gain from a periodic mana leech, plus its expiry specials. The bake carries
852
+ // the negative restore on the victim only. Cite: SpellAuras.cpp:4740-4807.
853
+ kind: 'periodic_mana_leech';
854
+ /** Powers(misc) — 0 mana default. Cite: :4747–4750. */
855
+ powerType: number;
856
+ /** EffectMultipleValue gain multiplier (0 → no caster gain). Cite: :4791. */
857
+ multipleValue: number;
858
+ // On expire cast Sleep 24004 (Tranquilizing Poison 24002/24003 only). Cite: SpellAuras.cpp:3274–3280.
859
+ expireCastSpellId?: number;
860
+ }
861
+ | {
862
+ // Resistance percent per school bit — a percent, not flat armor, and unmapped in the bake.
863
+ // Cite: SpellAuras.cpp:3388-3408 HandleModResistancePercent.
864
+ kind: 'mod_resistance_pct';
865
+ /** EffectMiscValue = SpellSchoolMask. Cite: :3397. */
866
+ schoolMask: number;
867
+ /** Signed percent (TOTAL_PCT). Cite: :3400. */
868
+ amount: number;
869
+ durationMs: number;
870
+ }
871
+ | {
872
+ // SPELL_AURA_MOD_SHAPESHIFT (36) apply-time extras beyond bake `{ kind:'shapeshift' }`. Cite:
873
+ // SpellAuras.cpp:1709–1976 HandleAuraModShapeshift; :4223–4344 HandleShapeshiftBoosts.
874
+ kind: 'mod_shapeshift';
875
+ /** EffectMiscValue = ShapeshiftForm. Cite: :1714. */
876
+ form: number;
877
+ // Powers enum when form changes resource (1=rage, 3=energy). Omit = mana / no change. Cite:
878
+ // :1723–1794.
879
+ powerType?: number;
880
+ // Display model id when form has a fixed model (race-independent). Race-split forms use
881
+ // displayIdAlliance / displayIdHorde instead. Cite: :1727–1797.
882
+ displayId?: number;
883
+ displayIdAlliance?: number;
884
+ displayIdHorde?: number;
885
+ /** Triggered form-passive spell ids on apply (HandleShapeshiftBoosts). Cite: :4235–4273. */
886
+ boostSpellIds?: number[];
887
+ /** Heart of the Wild custom spell id when form supports it. Cite: :4237–4256 / :4315–4326. */
888
+ hotWSpellId?: number;
889
+ // Cat/Tree/Travel/Aqua/Bear/Direbear/Moonkin: strip root + slow auras (mechanic filter). Cite:
890
+ // :1805–1841.
891
+ removeRootAndSlow?: boolean;
892
+ /** Ghostwolf + above: strip WATER_WALK. Cite: :1845–1850. */
893
+ removeWaterWalk?: boolean;
894
+ /** Spirit Shade Visual 24809 uses caster native display (not moonkin model). Cite: :1767–1774. */
895
+ spiritShadeNativeDisplay?: boolean;
896
+ /** FORM_CAT: Track Humanoids 5225 if known and no other tracking. Cite: :1940–1942. */
897
+ trackHumanoidsSpellId?: number;
898
+ /** FORM_CAT furor proc spell. Cite: :1959–1963. */
899
+ furorEnergySpellId?: number;
900
+ /** FORM_BEAR / DIREBEAR furor proc spell. Cite: :1967–1969. */
901
+ furorRageSpellId?: number;
902
+ }
903
+ // ── SI3 aura batch 6 intents ──────────────────────────────────────────────
904
+ | {
905
+ // SPELL_AURA_MOD_INVISIBILITY_DETECTION (19). SetInvisibilityDetectMask/Value; on remove re-max among
906
+ // remaining auras. Bake unmapped. Cite: SpellAuras.cpp:2677–2717 HandleInvisibilityDetect.
907
+ kind: 'mod_invisibility_detection';
908
+ /** EffectMiscValue = invisibility type / mask bit. Cite: :2687. */
909
+ invisibilityType: number;
910
+ /** Detection strength amount. Cite: :2681 / :2689. */
911
+ amount: number;
912
+ durationMs: number;
913
+ }
914
+ | {
915
+ // SPELL_AURA_TRACK_CREATURES (44). Player-only: SetFlag/RemoveFlag PLAYER_TRACK_CREATURES bit
916
+ // (misc−1). Bake empty. Cite: SpellAuras.cpp:2152–2161.
917
+ kind: 'track_creatures';
918
+ /** EffectMiscValue = creature type id (1-based bit index). Cite: :2158. */
919
+ creatureType: number;
920
+ /** Bit mask = 1 << (creatureType − 1). Cite: :2158. */
921
+ trackFlag: number;
922
+ durationMs: number;
923
+ }
924
+ | {
925
+ // On a real remove by death only, store the named item for a player caster. The Soul Shard has its
926
+ // own honor, tapped and single-shard guards. Cite: SpellAuras.cpp:2070-2123.
927
+ kind: 'channel_death_item';
928
+ /** EffectItemType — item entry granted on death. Cite: :2081 / :2089. */
929
+ itemType: number;
930
+ /** m_amount item count (≤0 → no grant). Cite: :2077–2078 / :2109. */
931
+ count: number;
932
+ /** itemType === 6265 Soul Shard specials (honor/XP + tapped + de-dupe). Cite: :2092–2104. */
933
+ soulShard?: boolean;
934
+ }
935
+ | {
936
+ // SPELL_AURA_MOD_HEALTH_REGEN_PERCENT (88). NoImmediateEffect: out-of-combat spirit HP regen ×
937
+ // (100+amount)/100. Bake unmapped. Cite: SpellAuras.cpp:149; Player.cpp:2395–2398.
938
+ kind: 'mod_health_regen_percent';
939
+ /** Signed percent of out-of-combat HP regen (Rabies −50). Cite: Player.cpp:2397. */
940
+ amount: number;
941
+ durationMs: number;
942
+ }
943
+ | {
944
+ // Target resistance: the attacker's penetration is the negated modifier by mask, used in the armor
945
+ // and resist reductions. Cite: SpellAuras.cpp:184; Unit.cpp:3890-3895, :2329.
946
+ kind: 'mod_target_resistance';
947
+ /** EffectMiscValue = SpellSchoolMask. Cite: Unit.cpp:3894. */
948
+ schoolMask: number;
949
+ // Signed aura amount (typically negative, e.g. −700 armor pen). Penetration = −sum(amount) per school
950
+ // bit. Cite: Unit.cpp:3894.
951
+ amount: number;
952
+ durationMs: number;
953
+ }
954
+ | {
955
+ // Shield block value as a FLAT modifier; the percent form is aura 150. The bake is empty.
956
+ // Cite: SpellAuras.cpp:4426-4433 HandleShieldBlockValue.
957
+ kind: 'mod_shield_blockvalue';
958
+ /** Flat shield block value points. Cite: :4433. */
959
+ amount: number;
960
+ durationMs: number;
961
+ }
962
+ | {
963
+ // SPELL_AURA_MOD_SHIELD_BLOCKVALUE_PCT (150). Player HandleBaseModValue(SHIELD_BLOCK_VALUE, PCT_MOD,
964
+ // amount). Cite: SpellAuras.cpp:4426–4433 HandleShieldBlockValue.
965
+ kind: 'mod_shield_blockvalue_pct';
966
+ amount: number;
967
+ durationMs: number;
968
+ }
969
+ | {
970
+ // The stamina health rescale on a percent-stat aura flagged as an ability: current health keeps
971
+ // its fraction of the new maximum. Cite: SpellAuras.cpp:3561-3567.
972
+ kind: 'mod_total_stat_pct_stamina_hp_scale';
973
+ }
974
+ // ── SI3 aura batch 7 intents ──────────────────────────────────────────────
975
+ | {
976
+ // A percent spell modifier, sharing its handler with the flat form. The bake leaves it empty.
977
+ // Cite: SpellAuras.cpp:899-939 HandleAddModifier.
978
+ kind: 'add_pct_modifier';
979
+ /** EffectMiscValue = SpellModOp. Cite: :924–925; SpellDefines.h MAX_SPELLMOD=32. */
980
+ spellModOp: number;
981
+ /** Percent modifier amount (base points). Cite: :927. */
982
+ amount: number;
983
+ durationMs: number;
984
+ /** EffectItemType family mask. Cite: SpellMgr.h GetSpellAffectMask. */
985
+ familyFlags?: number;
986
+ /** Aura charges override (Shadow Trance / Netherwind Focus → 1). Cite: :915–918 SetAuraCharges(1). */
987
+ auraCharges?: number;
988
+ /** Spell priority override (Clearcasting 16246 → 100). Cite: :919–921. */
989
+ priority?: number;
990
+ }
991
+ | {
992
+ // The apply-time current-health specials of a flat max-health aura. The bake surface is the flat
993
+ // maximum; these flags document the C++ id branches. Cite: SpellAuras.cpp:3658-3716.
994
+ kind: 'mod_increase_health_special';
995
+ // Ids 4148 / 12976 / 16609: on apply ModifyHealth(+amount); on remove clamp current HP then drop max.
996
+ // Cite: :3671–3695.
997
+ currentHealthAdjust?: boolean;
998
+ // Bear / Dire Bear form passives 1178 / 9635: preserve health % across max change. Cite: :3698–3707.
999
+ preserveHealthPercent?: boolean;
1000
+ }
1001
+ | {
1002
+ // The main-hand attack-time reset on a disarm, skipped for a feral target with no weapon form.
1003
+ // Cite: SpellAuras.cpp:2438-2450; Unit.h:68 base attack time.
1004
+ kind: 'mod_disarm_attack_time';
1005
+ /** Apply path: SetAttackTime(BASE_ATTACK, BASE_ATTACK_TIME). Cite: :2444–2445. */
1006
+ baseAttackTimeMs: number;
1007
+ }
1008
+ | {
1009
+ // SPELL_AURA_MOD_MECHANIC_RESISTANCE (117). NoImmediateEffect: full-resist chance vs spell/effect
1010
+ // mechanic (misc). Bake unmapped. Cite: SpellAuras.cpp:178; Unit.cpp:4015–4031.
1011
+ kind: 'mod_mechanic_resistance';
1012
+ /** EffectMiscValue = mechanic id. Cite: Unit.cpp:4016. */
1013
+ mechanic: number;
1014
+ /** Signed resist chance percent points. Cite: Unit.cpp:4016 / :4026. */
1015
+ amount: number;
1016
+ durationMs: number;
1017
+ }
1018
+ // ── SI3 aura batch 8 intents ──────────────────────────────────────────────
1019
+ | {
1020
+ // SPELL_AURA_MOD_POSSESS (2) side-switch / possess ownership. Bake surface is cc incapacitate+charm;
1021
+ // this intent carries TakePossessOf. Cite: SpellAuras.cpp:2188–2256 HandleModPossess.
1022
+ kind: 'mod_possess';
1023
+ /** Spell id of the possess holder (GetId()). Cite: :2222 TakePossessOf. */
1024
+ spellId: number;
1025
+ durationMs: number;
1026
+ // Player caster BreakCharmOutgoing(true) before TakePossessOf. Gate: ctx.casterIsPlayer !== false.
1027
+ // Cite: :2200 / :2219–2220.
1028
+ breakOutgoing?: boolean;
1029
+ // Spell 24937 Using Control Console apply: creature UpdateSpell slot 5 from {25026, 25024, 27759,
1030
+ // 25027}. Needs ctx.rng for pick. Cite: :2209–2214.
1031
+ controlConsoleApplySpells?: readonly number[];
1032
+ // Spell 24937 remove: caster casts these on self. Cite: :2245–2246. 24938 Close Control Console,
1033
+ // 27880 Stun.
1034
+ controlConsoleRemoveCasterSpells?: readonly number[];
1035
+ // Spell 24937 remove on creature target: Quiet Suicide 3617 + ForcedDespawn(5000). Cite: :2249–2250.
1036
+ controlConsoleRemoveTargetSpell?: number;
1037
+ controlConsoleDespawnMs?: number;
1038
+ }
1039
+ | {
1040
+ // SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT (133) Mutate Bug apply-time ModifyHealth(+maxDelta). Cite:
1041
+ // SpellAuras.cpp:3748–3753.
1042
+ kind: 'mod_increase_health_percent_special';
1043
+ /** Spell 802: on apply ModifyHealth(GetMaxHealth() − oldMaxHealth). */
1044
+ mutateBugHealthGain?: boolean;
1045
+ }
1046
+ | {
1047
+ // The percent of spirit regen allowed while casting, clamped at 100 and unmapped in the bake.
1048
+ // Cite: SpellAuras.cpp:3803-3812; StatSystem.cpp:558-562.
1049
+ kind: 'mod_mana_regen_interrupt';
1050
+ /** Percent of spirit-based mana regen retained while casting. */
1051
+ amount: number;
1052
+ durationMs: number;
1053
+ }
1054
+ | {
1055
+ // SPELL_AURA_MOD_STALKED (68). SetFlag/RemoveFlag UNIT_DYNFLAG_TRACK_UNIT (Hunter's Mark, Mind
1056
+ // Vision). Bake unmapped. Cite: SpellAuras.cpp:3079–3086; SharedDefines.h UNIT_DYNFLAG_TRACK_UNIT.
1057
+ kind: 'mod_stalked';
1058
+ durationMs: number;
1059
+ }
1060
+ | {
1061
+ // SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN (113). NoImmediateEffect: MeleeDamageBonusTaken TakenFlat for
1062
+ // RANGED_ATTACK. Bake unmapped. Cite: SpellAuras.cpp:174; Unit.cpp:7615–7617.
1063
+ kind: 'mod_ranged_damage_taken';
1064
+ /** Flat ranged damage taken modifier (signed base points). */
1065
+ amount: number;
1066
+ durationMs: number;
1067
+ }
1068
+ | {
1069
+ // SPELL_AURA_OBS_MOD_MANA (21) remove special for Shade of Aran drink. Cite: SpellAuras.cpp:3603–3609
1070
+ // — id 30024 AURA_REMOVE_BY_DEFAULT → AI event.
1071
+ kind: 'obs_mod_mana_remove_special';
1072
+ /** Spell id that fires the AI event on default remove. */
1073
+ spellId: number;
1074
+ }
1075
+ // ── SI3 aura batch 9 intents ──────────────────────────────────────────────
1076
+ | {
1077
+ // SPELL_AURA_MOD_SPELL_CRIT_CHANCE (57). Real only. Player: UpdateAllSpellCritChances(); NPC: ±amount
1078
+ // all schools. Bake empty. Cite: SpellAuras.cpp:3873–3889; StatSystem.cpp:505–515 / :541–545.
1079
+ kind: 'mod_spell_crit_chance';
1080
+ /** Signed percent points from base points. */
1081
+ amount: number;
1082
+ durationMs: number;
1083
+ // When true, target is non-player — flat ±amount on m_modSpellCritChance[school]. Gate:
1084
+ // ctx.unitTargetIsPlayer === false. Cite: :3881–3886.
1085
+ nonPlayerFlat?: boolean;
1086
+ }
1087
+ | {
1088
+ // SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL (71). Real only. Per school bit in misc mask: NPC flat or
1089
+ // player UpdateSpellCritChance. Bake empty. Cite: SpellAuras.cpp:3891–3911; StatSystem.cpp:512–513.
1090
+ kind: 'mod_spell_crit_chance_school';
1091
+ /** EffectMiscValue = SpellSchoolMask. Cite: :3899. */
1092
+ schoolMask: number;
1093
+ /** Signed percent points from base points. */
1094
+ amount: number;
1095
+ durationMs: number;
1096
+ // When true, target is non-player — flat ±amount per matching school. Gate: ctx.unitTargetIsPlayer
1097
+ // === false. Cite: :3902–3906.
1098
+ nonPlayerFlat?: boolean;
1099
+ }
1100
+ | {
1101
+ // SPELL_AURA_MOD_LANGUAGE (75). NoImmediateEffect: chat lang overwrite from front aura misc. Bake
1102
+ // unmapped. Cite: SpellAuras.cpp:136; ChatHandler.cpp:151–155.
1103
+ kind: 'mod_language';
1104
+ /** EffectMiscValue = language id (LANG_*). Cite: ChatHandler.cpp:154–155. */
1105
+ languageId: number;
1106
+ durationMs: number;
1107
+ }
1108
+ | {
1109
+ // SPELL_AURA_WATER_BREATHING (82). Player: SetWaterBreathingIntervalMultiplier(0) while any such aura
1110
+ // present. Bake empty. Cite: SpellAuras.cpp:1688–1699.
1111
+ kind: 'water_breathing';
1112
+ // Interval multiplier while aura applies (0 = infinite breath). Cite: :1694–1695
1113
+ // SetWaterBreathingIntervalMultiplier(0).
1114
+ intervalMultiplier: number;
1115
+ durationMs: number;
1116
+ }
1117
+ | {
1118
+ // SPELL_AURA_MOD_DETECT_RANGE (91). NoImmediateEffect: attackDistance += GetTotalAuraModifier on the
1119
+ // *creature*. Bake unmapped. Cite: SpellAuras.cpp:152; Unit.cpp:11772.
1120
+ kind: 'mod_detect_range';
1121
+ /** Signed yards (Mind Soothe −10). Cite: Unit.cpp:11772. */
1122
+ amount: number;
1123
+ durationMs: number;
1124
+ }
1125
+ | {
1126
+ // SPELL_AURA_OVERRIDE_CLASS_SCRIPTS (112). RegisterOverrideScriptAura(this, miscValue, apply). Bake
1127
+ // empty. Cite: SpellAuras.cpp:5096–5099; Unit.cpp:11980–11985.
1128
+ kind: 'override_class_scripts';
1129
+ /** EffectMiscValue = script id key in m_classScripts. Cite: :5098. */
1130
+ scriptId: number;
1131
+ /** m_amount carried for script consumers (Tactical Mastery rage, etc.). */
1132
+ amount: number;
1133
+ durationMs: number;
1134
+ }
1135
+ | {
1136
+ // Force reaction: apply the forced rank for a faction, and stop attacking once the effective rank
1137
+ // is friendly. Unmapped in the bake. Cite: SpellAuras.cpp:2034-2052.
1138
+ kind: 'force_reaction';
1139
+ /** EffectMiscValue = faction template id. Cite: :2043. */
1140
+ factionId: number;
1141
+ /** m_amount cast to ReputationRank. Cite: :2044. */
1142
+ reputationRank: number;
1143
+ durationMs: number;
1144
+ /** apply && rank ≥ REP_FRIENDLY → StopAttackFaction. Cite: :2050–2051; SharedDefines.h:110. */
1145
+ stopAttackFaction?: boolean;
1146
+ }
1147
+ | {
1148
+ // The cast-time spell-power fold into a mana shield's pool for the mage family, omitted on a thin
1149
+ // bake. Cite: SpellAuras.cpp:5063-5093; Unit.cpp:2791-2794.
1150
+ kind: 'mana_shield_spd_bonus';
1151
+ /** Integer absorb points added to m_amount. Cite: :5091. */
1152
+ bonusAmount: number;
1153
+ }
1154
+ // ── SI3 aura batch 10 intents ─────────────────────────────────────────────
1155
+ | {
1156
+ // SPELL_AURA_EFFECT_IMMUNITY (37). ApplySpellImmune(IMMUNITY_EFFECT, misc); positive apply purges
1157
+ // invuln buffs. Bake empty. Cite: SpellAuras.cpp:2962–2970.
1158
+ kind: 'effect_immunity';
1159
+ /** EffectMiscValue = SpellEffects enum id. Cite: :2966. */
1160
+ effectId: number;
1161
+ durationMs: number;
1162
+ // apply + IsPositive → RemoveAurasWithInterruptFlags INVULNERABILITY. Cite: :2968–2969. Always true
1163
+ // at interpret (positive immunity buffs).
1164
+ purgeInvulnerabilityBuffs?: boolean;
1165
+ }
1166
+ | {
1167
+ // SPELL_AURA_STATE_IMMUNITY (38). ApplySpellImmune(IMMUNITY_STATE, misc); optional purge of that
1168
+ // AuraType. Bake empty. Cite: SpellAuras.cpp:2972–2989.
1169
+ kind: 'state_immunity';
1170
+ /** EffectMiscValue = AuraType id to be immune to. Cite: :2989. */
1171
+ auraType: number;
1172
+ durationMs: number;
1173
+ // apply + Real + SPELL_ATTR_EX_IMMUNITY_PURGES_EFFECT → remove auras of type. Gate:
1174
+ // ctx.immunityPurgesEffect === true. Cite: :2974–2987.
1175
+ purgeAuraType?: boolean;
1176
+ }
1177
+ | {
1178
+ // SPELL_AURA_TRACK_RESOURCES (45). Player-only: SetFlag/RemoveFlag PLAYER_TRACK_RESOURCES bit
1179
+ // (misc−1). Bake empty. Cite: SpellAuras.cpp:2163–2171.
1180
+ kind: 'track_resources';
1181
+ /** EffectMiscValue = resource type id (1-based bit index). Cite: :2169. */
1182
+ resourceType: number;
1183
+ /** Bit mask = 1 << (resourceType − 1). Cite: :2169. */
1184
+ trackFlag: number;
1185
+ durationMs: number;
1186
+ }
1187
+ | {
1188
+ // SPELL_AURA_PREVENTS_FLEEING (92). Real: if fear auras present, SetFleeing(false) on apply / restore
1189
+ // on remove. Bake empty. Cite: SpellAuras.cpp:5047–5060 HandlePreventFleeing.
1190
+ kind: 'prevents_fleeing';
1191
+ durationMs: number;
1192
+ }
1193
+ | {
1194
+ // SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS (180). NoImmediateEffect: SpellDamageBonusDone DoneTotal +=
1195
+ // GetTotalAuraModifierByMiscMask. Bake empty. Cite: SpellAuras.cpp:241; Unit.cpp:7055.
1196
+ kind: 'mod_flat_spell_damage_versus';
1197
+ /** EffectMiscValue = creature type mask bitfield. Cite: Unit.cpp:7055. */
1198
+ creatureTypeMask: number;
1199
+ /** Flat spell damage bonus vs matching creature types. */
1200
+ amount: number;
1201
+ durationMs: number;
1202
+ }
1203
+ | {
1204
+ // SPELL_AURA_MOD_RANGED_AMMO_HASTE (141) highest-only stacking note. Only the highest positive amount
1205
+ // applies to ranged attack time. Cite: SpellAuras.cpp:3945–3980 HandleRangedAmmoHaste.
1206
+ kind: 'ranged_ammo_haste_highest';
1207
+ /** This aura's amount (candidate highest). Cite: :3967. */
1208
+ amount: number;
1209
+ }
1210
+ // ── SI3 aura batch 11 intents ─────────────────────────────────────────────
1211
+ | {
1212
+ // Spell hit chance across all schools. The bake is empty, since both hit auras return early.
1213
+ // Cite: SpellAuras.cpp:3868-3870; StatSystem.cpp:538.
1214
+ kind: 'mod_spell_hit_chance';
1215
+ /** Signed percent points (e.g. +10 hit). Cite: :3870. */
1216
+ amount: number;
1217
+ durationMs: number;
1218
+ }
1219
+ | {
1220
+ // SPELL_AURA_WATER_WALK (104). Real: SetWaterWalk(apply) movement flag / packet. Bake empty. Cite:
1221
+ // SpellAuras.cpp:1661–1667; Unit.cpp:12486.
1222
+ kind: 'water_walk';
1223
+ durationMs: number;
1224
+ }
1225
+ | {
1226
+ // On a caster's spell hit, chance-cast the named trigger. The bake is empty.
1227
+ // Cite: SpellAuras.cpp:170; Spell.cpp:7433-7468 ProcSpellAuraTriggers.
1228
+ kind: 'add_target_trigger';
1229
+ /** EffectTriggerSpell id cast on successful hit. Cite: Spell.cpp:7454. */
1230
+ triggerSpellId: number;
1231
+ // Proc chance % = CalculateSpellEffectValue (base points + dice). Cite: Spell.cpp:7457–7458
1232
+ // roll_chance_i(chance).
1233
+ chancePct: number;
1234
+ durationMs: number;
1235
+ }
1236
+ | {
1237
+ // Power regen percent at its use site: spirit mana regen is multiplied by it, and rage or energy
1238
+ // scale per matching power. Cite: SpellAuras.cpp:3644-3655; StatSystem.cpp:551-552.
1239
+ kind: 'mod_power_regen_percent';
1240
+ /** EffectMiscValue = Powers enum (0 mana, 1 rage, 3 energy). Cite: :3654. */
1241
+ powerType: number;
1242
+ /** Signed percent (e.g. 100 → ×2). Cite: Player.cpp:2343 (amount+100)/100. */
1243
+ amount: number;
1244
+ durationMs: number;
1245
+ /** Real + player + POWER_MANA → UpdateManaRegen on apply/remove. Cite: SpellAuras.cpp:3650–3655. */
1246
+ updateManaRegen?: boolean;
1247
+ }
1248
+ | {
1249
+ // SPELL_AURA_SAFE_FALL (144). Handler body empty; fall damage reduces z_diff by
1250
+ // GetTotalAuraModifier(144). Bake empty. Cite: SpellAuras.cpp:5649–5651; Player.cpp:19535–19537.
1251
+ kind: 'safe_fall';
1252
+ /** Height reduction yards (e.g. 10). Cite: Player.cpp:19535. */
1253
+ amount: number;
1254
+ durationMs: number;
1255
+ }
1256
+ | {
1257
+ // SPELL_AURA_BIND_SIGHT (1). Player caster: camera.SetView(target) / ResetView on remove. Bake empty.
1258
+ // Cite: SpellAuras.cpp:2126–2136.
1259
+ kind: 'bind_sight';
1260
+ durationMs: number;
1261
+ }
1262
+ | {
1263
+ // Power cost school: a flat cost modifier per school bit in the mask, and the bake is empty.
1264
+ // Cite: SpellAuras.cpp:4208-4216.
1265
+ kind: 'mod_power_cost_school';
1266
+ /** EffectMiscValue = school mask. Cite: :4214–4215. */
1267
+ schoolMask: number;
1268
+ /** Flat power cost modifier (negative = cheaper). Cite: :4216. */
1269
+ amount: number;
1270
+ durationMs: number;
1271
+ }
1272
+ | {
1273
+ // SPELL_AURA_FAR_SIGHT (76). Same body as BIND_SIGHT: player caster camera.SetView(target). Bake
1274
+ // empty. Cite: SpellAuras.cpp:2139–2149.
1275
+ kind: 'far_sight';
1276
+ durationMs: number;
1277
+ }
1278
+ // ── SI3 aura batch 12 intents ─────────────────────────────────────────────
1279
+ | {
1280
+ // Unattackable: a real apply stops combat, and the untargetable flag is always set. The bake is
1281
+ // empty. Cite: SpellAuras.cpp:4454-4459 HandleModUnattackable.
1282
+ kind: 'mod_unattackable';
1283
+ durationMs: number;
1284
+ // Real && Apply → CombatStop(). Cite: :4456–4457. Interpret apply snapshot always true when real path
1285
+ // is taken.
1286
+ combatStopOnApply: true;
1287
+ }
1288
+ | {
1289
+ // Interrupt regen: while held, out-of-combat rage regen is skipped, and two ids also set the
1290
+ // dummy combat state. Cite: SpellAuras.cpp:5109-5117; Player.cpp:2301.
1291
+ kind: 'interrupt_regen';
1292
+ durationMs: number;
1293
+ /** Spell id 5229 or 29131 → SetInDummyCombatState. Cite: :5114–5117. */
1294
+ setInDummyCombatState?: boolean;
1295
+ }
1296
+ | {
1297
+ // Resist pushback: the modifier is added to the resist chance in the cast and channel delays.
1298
+ // The bake is empty. Cite: SpellAuras.cpp:210; Spell.cpp:6817-6820, :6849-6852.
1299
+ kind: 'resist_pushback';
1300
+ // Signed aura amount (e.g. Concentration 35, Barkskin 100). Formula: resistChance = 100 + amount −
1301
+ // 100 = amount (before spellmod). Cite: Spell.cpp:6817–6819.
1302
+ amount: number;
1303
+ durationMs: number;
1304
+ }
1305
+ | {
1306
+ // Split damage flat: up to the amount goes to a living linked caster when the school matches.
1307
+ // Cite: SpellAuras.cpp:214; Unit.cpp:2501-2537.
1308
+ kind: 'split_damage_flat';
1309
+ /** Flat damage redirected per hit (cap). Cite: Unit.cpp:2516–2519. */
1310
+ amount: number;
1311
+ /** EffectMiscValue school mask. Cite: Unit.cpp:2507. */
1312
+ schoolMask: number;
1313
+ durationMs: number;
1314
+ }
1315
+ | {
1316
+ // Power burn: the tick burns power and deals the burned amount times the multiple value as school
1317
+ // damage. Cite: SpellAuras.cpp:3124-3126, :4892-4946.
1318
+ kind: 'power_burn_mana';
1319
+ /** Powers enum (misc). Cite: :4915. */
1320
+ powerType: number;
1321
+ /** Mana/power burned per tick (m_amount). Cite: :4902. */
1322
+ amountPerTick: number;
1323
+ /** EffectAmplitude ms. Cite: aura amplitude. */
1324
+ tickMs: number;
1325
+ // EffectMultipleValue — damage = burned × mult. Cite: :4922. Classic DB float (Ignite Mana / Soul Tap
1326
+ // = 1).
1327
+ multiplier: number;
1328
+ durationMs: number;
1329
+ }
1330
+ | {
1331
+ // Damage done versus a creature type mask, multiplied into both the spell and melee done paths.
1332
+ // The bake is empty. Cite: SpellAuras.cpp:229; Unit.cpp:7058, :7503.
1333
+ kind: 'mod_damage_done_versus';
1334
+ /** EffectMiscValue = creature type mask. Cite: Unit.cpp:7058. */
1335
+ creatureTypeMask: number;
1336
+ /** Percent points (e.g. Murder R2 +2). Cite: amount as aura modifier. */
1337
+ amount: number;
1338
+ durationMs: number;
1339
+ }
1340
+ | {
1341
+ // SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT (132). HandleStatModifier(UNIT_MOD_POWER_START+power,
1342
+ // TOTAL_PCT, ±amount). Cite: SpellAuras.cpp:3734-3743.
1343
+ kind: 'mod_increase_energy_percent';
1344
+ powerType: number;
1345
+ amount: number;
1346
+ durationMs: number;
1347
+ }
1348
+ | {
1349
+ // SPELL_AURA_MOD_INCREASE_ENERGY (35). HandleStatModifier(UNIT_MOD_POWER_START+power, TOTAL_VALUE,
1350
+ // ±amount). Bake empty. Cite: SpellAuras.cpp:3719–3726.
1351
+ kind: 'mod_increase_energy';
1352
+ /** Powers enum (misc: 0 mana, 1 rage, 3 energy). Cite: :3722. */
1353
+ powerType: number;
1354
+ /** Flat max-power TOTAL_VALUE. Cite: :3726. */
1355
+ amount: number;
1356
+ durationMs: number;
1357
+ }
1358
+ // ── SI3 aura batch 13 intents ─────────────────────────────────────────────
1359
+ | {
1360
+ // SPELL_AURA_PERIODIC_MANA_FUNNEL (63). HandleUnused — empty body; obsolete (zzOLDMana Funnel only).
1361
+ // Cite: SpellAuras.h:279–282; SpellAuras.cpp:124.
1362
+ kind: 'periodic_mana_funnel_unused';
1363
+ }
1364
+ | {
1365
+ // Feign Death: a player-controlled target may fail a resist roll against the attackers' miss
1366
+ // chance, and a success interrupts the casts aimed at them. Cite: Unit.cpp:10083-10140.
1367
+ kind: 'feign_death';
1368
+ durationMs: number;
1369
+ // When true, apply path runs resist roll before success side-effects. Gate:
1370
+ // ctx.unitTargetPlayerControlled === true. Cite: :2390–2410.
1371
+ playerControlledResistRoll?: boolean;
1372
+ }
1373
+ | {
1374
+ // Power cost school percent: a cost multiplier per school bit in the mask.
1375
+ // Cite: SpellAuras.cpp:4190-4204; Spell.cpp:6368.
1376
+ kind: 'mod_power_cost_school_pct';
1377
+ /** EffectMiscValue = school mask. Cite: :4199–4200. */
1378
+ schoolMask: number;
1379
+ /** Percent points (e.g. −15 → −0.15 field delta). Cite: :4197 amount/100. */
1380
+ amount: number;
1381
+ durationMs: number;
1382
+ // Spell 30422 expire → CastSpell(38638). Cite: :4202–4204. Not present in Classic 1.12 DB; branch
1383
+ // ported for handler completeness.
1384
+ expireCastSpellId?: number;
1385
+ }
1386
+ | {
1387
+ // SPELL_AURA_GHOST (95). SetVisFlags(GHOST); player: PLAYER_FLAGS_GHOST + water-walk if no
1388
+ // WATER_WALK. Cite: SpellAuras.cpp:4396–4420.
1389
+ kind: 'ghost';
1390
+ durationMs: number;
1391
+ // Apply water-walk unless target already has SPELL_AURA_WATER_WALK. Gate: player target. Cite:
1392
+ // :4406–4408 / :4416–4418.
1393
+ setWaterWalkUnlessWaterWalkAura: true;
1394
+ }
1395
+ | {
1396
+ // Spell magnet: one harmful single-target magic spell is redirected to the magnet and its charge
1397
+ // consumed. Cite: SpellAuras.cpp:157; Unit.cpp:6894-6919 SelectMagnetTarget.
1398
+ kind: 'spell_magnet';
1399
+ durationMs: number;
1400
+ }
1401
+ | {
1402
+ // SPELL_AURA_AURAS_VISIBLE (100). ApplyModFlag(UNIT_FLAG_AURAS_VISIBLE). Cite:
1403
+ // SpellAuras.cpp:3383–3385.
1404
+ kind: 'auras_visible';
1405
+ durationMs: number;
1406
+ }
1407
+ | {
1408
+ // SPELL_AURA_HOVER (106). Real: SetHover(apply) movement flag / packet. Cite:
1409
+ // SpellAuras.cpp:1679–1686; Unit.cpp:12428.
1410
+ kind: 'hover';
1411
+ durationMs: number;
1412
+ }
1413
+ | {
1414
+ // Regen during combat: spirit health regen keeps running in combat, scaled by the modifier.
1415
+ // Cite: SpellAuras.cpp:177; Player.cpp:2297-2299, :2390-2400.
1416
+ kind: 'mod_regen_during_combat';
1417
+ // Percent of OOC spirit HP regen while in combat (e.g. troll racial 10). Cite: Player.cpp:2400
1418
+ // addvalue *= amount/100.
1419
+ amount: number;
1420
+ durationMs: number;
1421
+ }
1422
+ | {
1423
+ // SPELL_AURA_UNTRACKABLE (120). Set/Remove UNIT_VIS_FLAG_UNTRACKABLE. Cite: SpellAuras.cpp:4374–4379.
1424
+ kind: 'untrackable';
1425
+ durationMs: number;
1426
+ }
1427
+ // ── SI3 aura batch 14 intents ─────────────────────────────────────────────
1428
+ | {
1429
+ // Empathy, the Beast Lore info flag on a player or a beast. The bake is empty.
1430
+ // Cite: SpellAuras.cpp:4351-4371.
1431
+ kind: 'empathy';
1432
+ durationMs: number;
1433
+ // Target eligible for UNIT_DYNFLAG_SPECIALINFO (player or beast). Cite: :4355–4357. Gate:
1434
+ // unitTargetIsPlayer / unitTargetCreatureType.
1435
+ applySpecialInfo: boolean;
1436
+ // apply path sends BuildValuesUpdateBlockForPlayerWithFlags to player caster. Cite: :4359–4369. Gate:
1437
+ // casterIsPlayer !== false.
1438
+ sendSpecialInfoUpdate?: boolean;
1439
+ }
1440
+ | {
1441
+ // Possess pet, Eyes of the Beast: a player caster takes their own pet's vision. Own-pet only, so
1442
+ // there is no control surface. Cite: SpellAuras.cpp:2258-2279; Spell.cpp:5717-5735.
1443
+ kind: 'mod_possess_pet';
1444
+ /** Holder spell id (GetId()). Cite: TakePossessOf path :2273. */
1445
+ spellId: number;
1446
+ durationMs: number;
1447
+ /** BreakCharmOutgoing(true) before TakePossessOf on apply. Cite: :2270–2273. Player casters only. */
1448
+ breakOutgoing: true;
1449
+ }
1450
+ | {
1451
+ // Water breathing multiplier, a product per stack — distinct from aura 82, which forces zero.
1452
+ // Cite: SpellAuras.cpp:1701-1706; Unit.cpp:4492-4500 GetTotalAuraMultiplier.
1453
+ kind: 'mod_water_breathing';
1454
+ /** Signed percent points added inside (100+amount)/100. Cite: Unit.cpp:4498. */
1455
+ amount: number;
1456
+ // This aura's contribution = (100+amount)/100 (stack product is SI5 runtime). Cite: Unit.cpp:4498.
1457
+ intervalMultiplier: number;
1458
+ durationMs: number;
1459
+ }
1460
+ | {
1461
+ // SPELL_AURA_MOD_REPUTATION_GAIN (156). NoImmediateEffect: Player::CalculateReputationGain adds
1462
+ // GetTotalAuraModifier. Bake empty. Cite: SpellAuras.cpp:217; Player.cpp:6297–6302.
1463
+ kind: 'mod_reputation_gain';
1464
+ // Signed percent points (Diplomacy +10). Applied as percent += ±repMod. Cite: Player.cpp:6297, :6302.
1465
+ amount: number;
1466
+ durationMs: number;
1467
+ }
1468
+ | {
1469
+ // No PvP credit, the Honorless Target aura: the honor reward returns false while the victim holds
1470
+ // it, and only that one spell uses it. Cite: Player.cpp:6626-6627.
1471
+ kind: 'no_pvp_credit';
1472
+ durationMs: number;
1473
+ }
1474
+ | {
1475
+ // Track Hidden, a player tracking flag. The bake is empty.
1476
+ // Cite: SpellAuras.cpp:2174-2179 HandleAuraTrackStealthed.
1477
+ kind: 'track_stealthed';
1478
+ durationMs: number;
1479
+ }
1480
+ // ── SI4 registry intents (dummy / script proof cases) ─────────────────────
1481
+ | {
1482
+ // Life Tap converts health to mana: the health cost is the script value with its modifiers, and
1483
+ // the mana is that base scaled by Improved Life Tap. Cite: Warlock.cpp:52-103.
1484
+ kind: 'life_tap';
1485
+ healthCost: number;
1486
+ manaGain: number;
1487
+ /** Life Tap mana energize custom spell. Cite: Warlock.cpp:102 (31818). */
1488
+ manaSpellId: number;
1489
+ // OnCheckCast: script value > caster health → SPELL_FAILED_FIZZLE. Set when ctx.casterHealth is
1490
+ // provided and check fails. Cite: Warlock.cpp:69–70.
1491
+ fizzled?: boolean;
1492
+ }
1493
+ | {
1494
+ // Judgement 20271 SCRIPT_EFFECT: remove seal + cast judgement spell from seal. Cite: Paladin.cpp
1495
+ // spell_judgement OnEffectExecute ~78–116.
1496
+ kind: 'judgement_cast';
1497
+ /** Seal aura spell id removed. Cite: RemoveAurasDueToSpell(sealId). */
1498
+ sealSpellId: number;
1499
+ /** Judgement spell from seal CalculateSimpleValue(EFFECT_INDEX_2). */
1500
+ judgementSpellId: number;
1501
+ };