azeroth-shell 0.0.0-stage → 0.1.1

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 +35 -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 +144 -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,217 @@
1
+ // School lockout and cast interrupt helpers. Pure: no DOM, no Math.random, no I/O.
2
+ // Cite: Spell.cpp IsInterruptible ~7471; SpellEffects.cpp EffectInterruptCast ~3591.
3
+
4
+ import type { School } from '../../data/schema.ts';
5
+
6
+ /** SpellDefines.h SPELL_INTERRUPT_FLAG_COMBAT — required bit for IsInterruptible. */
7
+ export const SPELL_INTERRUPT_FLAG_COMBAT = 0x08;
8
+ /** SpellDefines.h:354 — damage delays the cast (player only; Spell::Delayed). */
9
+ export const SPELL_INTERRUPT_FLAG_DAMAGE_PUSHBACK = 0x02;
10
+ /** SpellDefines.h:357 — damage cancels the cast outright (player only). */
11
+ export const SPELL_INTERRUPT_FLAG_DAMAGE_CANCELS = 0x10;
12
+
13
+ /** SharedDefines SpellPreventionType. */
14
+ export const SPELL_PREVENTION_TYPE = {
15
+ NONE: 0,
16
+ SILENCE: 1,
17
+ PACIFY: 2,
18
+ } as const;
19
+
20
+ // SpellSchools index order (SharedDefines). Index i → mask bit (1 << i). Document next to
21
+ // Fighter.schoolLockoutUntil (length 7).
22
+ export const SPELL_SCHOOL_INDEX: readonly School[] = [
23
+ 'physical', // 0 SPELL_SCHOOL_NORMAL
24
+ 'holy', // 1
25
+ 'fire', // 2
26
+ 'nature', // 3
27
+ 'frost', // 4
28
+ 'shadow', // 5
29
+ 'arcane', // 6
30
+ ] as const;
31
+
32
+ export const SPELL_SCHOOL_COUNT = SPELL_SCHOOL_INDEX.length;
33
+
34
+ const SCHOOL_TO_INDEX: Record<School, number> = {
35
+ physical: 0,
36
+ holy: 1,
37
+ fire: 2,
38
+ nature: 3,
39
+ frost: 4,
40
+ shadow: 5,
41
+ arcane: 6,
42
+ };
43
+
44
+ /** Map Phonecraft School string → SpellSchools index (0..6). Unknown → -1. */
45
+ export function schoolIndexFromSchool(school: School | string | undefined | null): number {
46
+ if (!school) return -1;
47
+ const idx = SCHOOL_TO_INDEX[school as School];
48
+ return idx === undefined ? -1 : idx;
49
+ }
50
+
51
+ /** Zero-filled school lockout array (index → readyAt ms; 0 = free). */
52
+ export function emptySchoolLockoutUntil(): number[] {
53
+ return new Array(SPELL_SCHOOL_COUNT).fill(0);
54
+ }
55
+
56
+ // IsInterruptible: the combat interrupt flag, the silence prevention type, and a cast that can be
57
+ // interrupted. Missing flags on an old bake fail CLOSED — never assume every cast time is interruptible.
58
+ export function isCastInterruptible(
59
+ castingSpell: {
60
+ interruptFlags?: number;
61
+ preventionType?: number;
62
+ } | null | undefined,
63
+ currentlyCasting: boolean,
64
+ ): boolean {
65
+ if (!castingSpell || !currentlyCasting) return false;
66
+ const flags = (castingSpell.interruptFlags ?? 0) | 0;
67
+ const prev = (castingSpell.preventionType ?? 0) | 0;
68
+ return (flags & SPELL_INTERRUPT_FLAG_COMBAT) !== 0
69
+ && prev === SPELL_PREVENTION_TYPE.SILENCE;
70
+ }
71
+
72
+ /** SharedDefines.h SpellEffects — SPELL_EFFECT_INTERRUPT_CAST. */
73
+ export const SPELL_EFFECT_INTERRUPT_CAST = 68;
74
+
75
+ // The interrupt effect's own mechanic, read off the DBC row because the baked effect carries none: 49
76
+ // of the 72 rows name it, and 0 means the row carries none, so nothing is immune to it.
77
+ export function interruptEffectMechanicId(
78
+ spell: { rawEffects?: readonly { effect?: number; mechanic?: number }[] } | null | undefined,
79
+ ): number {
80
+ for (const re of spell?.rawEffects ?? []) {
81
+ if (((re?.effect ?? 0) | 0) === SPELL_EFFECT_INTERRUPT_CAST) return (re?.mechanic ?? 0) | 0;
82
+ }
83
+ return 0;
84
+ }
85
+
86
+ // The silenced flag refuses a cast only at the SILENCE prevention type: Kick and Shield Bash are the
87
+ // pacify type and fire through it. An absent field IS type 0, since the bake omits a zero.
88
+ export function isSilencePrevented(
89
+ spell: { preventionType?: number } | null | undefined,
90
+ ): boolean {
91
+ return ((spell?.preventionType ?? 0) | 0) === SPELL_PREVENTION_TYPE.SILENCE;
92
+ }
93
+
94
+ // The pacified flag refuses a cast only at the PACIFY prevention type — the physical abilities, not
95
+ // the casts. Cite: Spell.cpp:6051-6052 CheckCast SPELL_FAILED_PACIFIED.
96
+ export function isPacifyPrevented(
97
+ spell: { preventionType?: number } | null | undefined,
98
+ ): boolean {
99
+ return ((spell?.preventionType ?? 0) | 0) === SPELL_PREVENTION_TYPE.PACIFY;
100
+ }
101
+
102
+ // Object.cpp CheckLockout — true when any school bit in the cast's school is locked past `nowMs`.
103
+ // Single-school Classic spells: pass school string; multi-school rare → report if encountered.
104
+ export function checkSchoolLockout(
105
+ schoolLockoutUntil: readonly number[] | undefined | null,
106
+ school: School | string | undefined | null,
107
+ nowMs: number,
108
+ ): boolean {
109
+ if (!schoolLockoutUntil || schoolLockoutUntil.length === 0) return false;
110
+ const idx = schoolIndexFromSchool(school);
111
+ if (idx < 0 || idx >= schoolLockoutUntil.length) return false;
112
+ return (schoolLockoutUntil[idx] ?? 0) > nowMs;
113
+ }
114
+
115
+ // The lockout branch of IsSpellReady: a silence-type spell whose school is locked out is not ready.
116
+ // Prefer the baked prevention type; absent, do not invent one.
117
+ export function isSpellSchoolLocked(
118
+ spell: { preventionType?: number; school?: School | string },
119
+ schoolLockoutUntil: readonly number[] | undefined | null,
120
+ nowMs: number,
121
+ ): boolean {
122
+ if (((spell.preventionType ?? 0) | 0) !== SPELL_PREVENTION_TYPE.SILENCE) return false;
123
+ return checkSchoolLockout(schoolLockoutUntil, spell.school, nowMs);
124
+ }
125
+
126
+ // Lock out one school. It takes the later of the existing and new expiry, so a longer lockout is not
127
+ // clobbered by a shorter re-apply — the C++ keeps the first entry instead.
128
+ export function applySchoolLockout(
129
+ schoolLockoutUntil: number[],
130
+ school: School | string | undefined | null,
131
+ untilMs: number,
132
+ ): boolean {
133
+ const idx = schoolIndexFromSchool(school);
134
+ if (idx < 0 || idx >= schoolLockoutUntil.length) return false;
135
+ const cur = schoolLockoutUntil[idx] ?? 0;
136
+ if (untilMs > cur) schoolLockoutUntil[idx] = untilMs;
137
+ return true;
138
+ }
139
+
140
+ // Apply lockout from a school mask (1 << i bits), matching LockOutSpells loop. Prefer
141
+ // applySchoolLockout(school string) for Classic single-school casts.
142
+ function applySchoolLockoutMask(
143
+ schoolLockoutUntil: number[],
144
+ schoolMask: number,
145
+ untilMs: number,
146
+ ): void {
147
+ const mask = schoolMask | 0;
148
+ for (let i = 0; i < SPELL_SCHOOL_COUNT; i++) {
149
+ if (mask & (1 << i)) {
150
+ const cur = schoolLockoutUntil[i] ?? 0;
151
+ if (untilMs > cur) schoolLockoutUntil[i] = untilMs;
152
+ }
153
+ }
154
+ }
155
+
156
+ /** Remaining lockout ms for a school (0 if free). */
157
+ function schoolLockoutRemainingMs(
158
+ schoolLockoutUntil: readonly number[] | undefined | null,
159
+ school: School | string | undefined | null,
160
+ nowMs: number,
161
+ ): number {
162
+ if (!schoolLockoutUntil) return 0;
163
+ const idx = schoolIndexFromSchool(school);
164
+ if (idx < 0 || idx >= schoolLockoutUntil.length) return 0;
165
+ return Math.max(0, (schoolLockoutUntil[idx] ?? 0) - nowMs);
166
+ }
167
+
168
+ /** True when the spell carries SPELL_EFFECT_INTERRUPT_CAST (Kick / CS / Spell Lock…). */
169
+ export function spellHasInterruptCast(
170
+ spell: { effects?: ReadonlyArray<{ kind: string }> } | null | undefined,
171
+ ): boolean {
172
+ return !!spell?.effects?.some((e) => e.kind === 'interrupt_cast');
173
+ }
174
+
175
+ // Drop stale party interrupt claims when the claimer or target dies, or the target stops casting. The
176
+ // claim is taken at the cast, never at the pick, so a GCD-blocked pick cannot lock out a free kicker.
177
+ export function unitIsCastingOrChanneling(
178
+ u: { castingSpell?: unknown; channeling?: { endsAt: number } | null } | null | undefined,
179
+ now: number,
180
+ ): boolean {
181
+ if (!u) return false;
182
+ if (u.castingSpell != null) return true;
183
+ return !!u.channeling && now < u.channeling.endsAt;
184
+ }
185
+
186
+ type InterruptibleCast = {
187
+ interruptFlags?: number;
188
+ preventionType?: number;
189
+ };
190
+
191
+ /** The in-flight hardcast or channel, only when IsInterruptible. */
192
+ export function unitInterruptibleCast(
193
+ u: {
194
+ castingSpell?: InterruptibleCast | null;
195
+ channeling?: { endsAt: number; spell: InterruptibleCast } | null;
196
+ } | null | undefined,
197
+ now: number,
198
+ ): InterruptibleCast | null {
199
+ if (!u) return null;
200
+ if (u.castingSpell && isCastInterruptible(u.castingSpell, true)) return u.castingSpell;
201
+ if (u.channeling && now < u.channeling.endsAt && isCastInterruptible(u.channeling.spell, true)) {
202
+ return u.channeling.spell;
203
+ }
204
+ return null;
205
+ }
206
+
207
+ export function pruneInterruptClaims(
208
+ claim: Map<string, string>,
209
+ isAlive: (id: string) => boolean,
210
+ isCasting: (id: string) => boolean,
211
+ ): void {
212
+ for (const [targetId, claimerId] of [...claim.entries()]) {
213
+ if (!isAlive(claimerId) || !isAlive(targetId) || !isCasting(targetId)) {
214
+ claim.delete(targetId);
215
+ }
216
+ }
217
+ }
@@ -0,0 +1,60 @@
1
+ // The melee swing-timer reset on cast: a non-triggered spell with the combat interrupt flag resets the
2
+ // timers unless it carries the do-not-reset attribute. Free swings after every cast were the weave.
3
+
4
+ import type { SpellDef } from '../../data/schema.ts';
5
+ import type { Fighter } from '../combat/types.ts';
6
+ import { scaleTime } from '../combat/formulas.ts';
7
+ import { SPELL_INTERRUPT_FLAG_COMBAT } from './interrupt.ts';
8
+ import { hasAttrEx2, SPELL_ATTR_EX2 } from './spellAttributes.ts';
9
+
10
+ // Spell.dbc AttributesEx2 & DO_NOT_RESET_COMBAT_TIMERS — 61 ids (1.12.1). Bake now stamps attributesEx2;
11
+ // the id set is the fallback for rows that omit it. Measured: datadump/DBFilesClient/Spell.dbc field 8.
12
+ const DO_NOT_RESET_COMBAT_TIMER_IDS: ReadonlySet<number> = new Set([
13
+ 1510, 1978, 2643, 3034, 3043, 3044, 5116, 13549, 13550, 13551, 13552, 13553,
14
+ 13554, 13555, 14274, 14275, 14276, 14277, 14279, 14280, 14281, 14282, 14283,
15
+ 14284, 14285, 14286, 14287, 14288, 14289, 14290, 14294, 14295, 15629, 15630,
16
+ 15631, 15632, 16791, 17171, 17174, 18545, 18649, 19386, 19434, 19501, 19503,
17
+ 19801, 20736, 20900, 20901, 20902, 20903, 20904, 22908, 22914, 23601, 24132,
18
+ 24133, 25294, 25295, 27632, 27634,
19
+ ]);
20
+
21
+ export function spellHasDoNotResetCombatTimers(
22
+ spell: { id: number; attributesEx2?: number },
23
+ ): boolean {
24
+ if (hasAttrEx2(spell, SPELL_ATTR_EX2.DO_NOT_RESET_COMBAT_TIMERS)) return true;
25
+ return DO_NOT_RESET_COMBAT_TIMER_IDS.has(spell.id);
26
+ }
27
+
28
+ /** Spell.h IsMeleeAttackResetSpell — gate only; caller applies timers. */
29
+ export function isMeleeAttackResetSpell(
30
+ spell: Pick<SpellDef, 'id' | 'interruptFlags' | 'attributesEx2'>,
31
+ triggered: boolean,
32
+ ): boolean {
33
+ if (triggered) return false;
34
+ if (spellHasDoNotResetCombatTimers(spell)) return false;
35
+ return ((spell.interruptFlags ?? 0) & SPELL_INTERRUPT_FLAG_COMBAT) !== 0;
36
+ }
37
+
38
+ // Reset the melee attack timers after a successful cast. The shared swing clock is the main hand in
39
+ // melee mode and the ranged weapon in ranged mode, so this is skipped there.
40
+ export function resetMeleeAttackTimersOnCast(f: Fighter, t: number): void {
41
+ if (f.mode !== 'ranged') {
42
+ const spd = f.spec.weapon?.speedMs ?? 2000;
43
+ f.swingReadyAt = t + scaleTime(spd, f.haste, 0);
44
+ }
45
+ const oh = f.spec.offhand;
46
+ if (oh && (oh.dmgMax ?? 0) > 0) {
47
+ f.ohSwingReadyAt = t + scaleTime(oh.speedMs, f.haste, 0);
48
+ }
49
+ }
50
+
51
+ /** Cast() immediate-phase helper: reset when IsMeleeAttackResetSpell. */
52
+ export function maybeResetMeleeAttackTimersOnCast(
53
+ f: Fighter,
54
+ spell: Pick<SpellDef, 'id' | 'interruptFlags' | 'attributesEx2'>,
55
+ t: number,
56
+ triggered: boolean,
57
+ ): void {
58
+ if (!isMeleeAttackResetSpell(spell, triggered)) return;
59
+ resetMeleeAttackTimersOnCast(f, t);
60
+ }
@@ -0,0 +1,49 @@
1
+ // The out-of-combat trigger-spell payload: combat applies the triggered spell as a proc, while out of
2
+ // combat the beneficial restore and buff effects are expanded onto the caster.
3
+ import type { DataStore } from '../../data/dataStore.ts';
4
+ import type { Character } from '../../domain/character/character.ts';
5
+ import { applyAura } from '../../domain/character/character.ts';
6
+ import { resolveCombatSpell } from './interpreter/index.ts';
7
+
8
+ function isHostileBuffOrSnare(eff: {
9
+ kind: string;
10
+ hostile?: boolean;
11
+ amount?: number;
12
+ pct?: number;
13
+ }): boolean {
14
+ if (eff.kind === 'buff') {
15
+ if (eff.hostile === true) return true;
16
+ if (eff.hostile === false) return false;
17
+ return (eff.amount ?? 0) < 0;
18
+ }
19
+ if (eff.kind === 'speed') {
20
+ return !!eff.hostile || (eff.pct ?? 0) < 0;
21
+ }
22
+ return false;
23
+ }
24
+
25
+ // Apply a trigger_spell payload's OOC-safe effects onto `char`. Returns the same character when the trigger
26
+ // id is missing or has nothing beneficial.
27
+ export function applyOocTriggerSpell(
28
+ char: Character,
29
+ triggerSpellId: number,
30
+ now: number,
31
+ ds: DataStore,
32
+ casterLevel: number,
33
+ ): Character {
34
+ const trigRaw = ds.spell(triggerSpellId);
35
+ if (!trigRaw) return char;
36
+ const trig = resolveCombatSpell(trigRaw, { casterLevel });
37
+ let next = char;
38
+ for (const te of trig.effects) {
39
+ if (te.kind === 'restore_health' || te.kind === 'restore_power') {
40
+ const dur = te.durationMs > 0 ? te.durationMs : 0;
41
+ if (dur > 0) {
42
+ next = applyAura(next, trig.id, dur, now, ds);
43
+ }
44
+ } else if (te.kind === 'buff' && !isHostileBuffOrSnare(te)) {
45
+ next = applyAura(next, trig.id, te.durationMs, now, ds);
46
+ }
47
+ }
48
+ return next;
49
+ }
@@ -0,0 +1,319 @@
1
+ // The override-class-scripts remainder, a per-id switch. The handler only registers the script id; the
2
+ // consumers are the per-id switches. Never invent a payload the C++ does not name.
3
+
4
+ import type { SpellDef, SpellEffect } from '../../data/schema.ts';
5
+ import { CLASS } from '../../data/schema.ts';
6
+ import {
7
+ SPELL_AURA_MOD_SHAPESHIFT,
8
+ SPELL_AURA_PERIODIC_HEAL,
9
+ SPELL_EFFECT_DISPEL,
10
+ SPELL_EFFECT_HEAL,
11
+ } from './interpreter/opcodes.ts';
12
+ import {
13
+ SPELLFAMILY_DRUID,
14
+ SPELLFAMILY_PALADIN,
15
+ SPELLFAMILY_PRIEST,
16
+ SPELLFAMILY_WARRIOR,
17
+ } from './interpreter/handlers/shared.ts';
18
+
19
+ /** SpellFamily Shaman. Cite: DBCEnums.h:171 SPELLFAMILY_SHAMAN = 11; Spell.cpp:4667. */
20
+ export const SPELLFAMILY_SHAMAN = 11;
21
+
22
+ /** Intent kind the handler emits. Census D reader lives in this file (outside interpreter/). */
23
+ export const OVERRIDE_CLASS_SCRIPTS_INTENT = 'override_class_scripts' as const;
24
+
25
+ /** Demonic Sacrifice marker. Cite: SpellEffects.cpp:3254–3255 GetOverrideScript(2228). */
26
+ export const DEMONIC_SACRIFICE_OVERRIDE_SCRIPT = 2228;
27
+ export const DEMONIC_SACRIFICE_RESULT_SPELL_IDS = [18789, 18790, 18791, 18792] as const;
28
+
29
+ /** Nefarian warrior call — fail stance shapeshift. Cite: Spell.cpp:4678–4684 case 3654. */
30
+ export const NEFARIAN_BERSERK_SCRIPT = 3654;
31
+ export const NEFARIAN_BERSERK_SPELL_ID = 23397;
32
+
33
+ /** Nefarian druid call — fail form shapeshift. Cite: Spell.cpp:4658–4662 case 3655. */
34
+ export const NEFARIAN_INVOLUNTARY_SCRIPT = 3655;
35
+ export const NEFARIAN_INVOLUNTARY_SPELL_ID = 23398;
36
+
37
+ /** Loatheb / Corrupted Mind — fizzle heal/HoT/dispel. Cite: Spell.cpp:4669–4674 case 4327. */
38
+ export const CORRUPTED_MIND_SCRIPT = 4327;
39
+ export const CORRUPTED_MIND_SPELL_IDS = [29184, 29195, 29197, 29199] as const;
40
+ /** Dummy PBAoE primer. Cite: boss_loatheb.cpp:32 SPELL_CORRUPTED_MIND 29201. */
41
+ export const CORRUPTED_MIND_PRIMER_SPELL_ID = 29201;
42
+
43
+ // Class-branch lockout aura 112 holders. Cite: boss_loatheb.cpp:104-114 then 29185/29194/29196/29198
44
+ // proc-trigger 29184/29195/29197/29199.
45
+ export function corruptedMindLockoutSpellId(classId: number): number | null {
46
+ switch (classId | 0) {
47
+ case CLASS.PALADIN: return 29197;
48
+ case CLASS.PRIEST: return 29184;
49
+ case CLASS.SHAMAN: return 29199;
50
+ case CLASS.DRUID: return 29195;
51
+ default: return null;
52
+ }
53
+ }
54
+
55
+ // Tactical Mastery rage kept across a stance change, in POWER_RAGE tenths. Cite: SpellAuras.cpp:1892-1896
56
+ // case 831..835 rageVal = 50/100/150/200/250.
57
+ export const TACTICAL_MASTERY_RAGE_BY_SCRIPT: Readonly<Record<number, number>> = {
58
+ 831: 50, 832: 100, 833: 150, 834: 200, 835: 250,
59
+ };
60
+
61
+ /** spell_template aura 112 misc 831..835 - Tactical Mastery ranks 1-5. */
62
+ export const TACTICAL_MASTERY_SPELL_IDS = [12295, 12676, 12677, 12678, 12679] as const;
63
+
64
+ // scriptId → spells that carry that OVERRIDE_CLASS_SCRIPTS misc. Sourced from spell_template
65
+ // EffectMiscValue on aura 112 (measured bake).
66
+ const SPELLS_FOR_SCRIPT: Readonly<Record<number, readonly number[]>> = {
67
+ [DEMONIC_SACRIFICE_OVERRIDE_SCRIPT]: DEMONIC_SACRIFICE_RESULT_SPELL_IDS,
68
+ [NEFARIAN_BERSERK_SCRIPT]: [NEFARIAN_BERSERK_SPELL_ID],
69
+ [NEFARIAN_INVOLUNTARY_SCRIPT]: [NEFARIAN_INVOLUNTARY_SPELL_ID],
70
+ [CORRUPTED_MIND_SCRIPT]: CORRUPTED_MIND_SPELL_IDS,
71
+ // Improved Blizzard — Mage.cpp Blizzard::OnPeriodicTickEnd HasOverrideScript.
72
+ // Cite: Mage.cpp:117–122; spell_template 11185/12487/12488 misc 836/988/989.
73
+ 836: [11185],
74
+ 988: [12487],
75
+ 989: [12488],
76
+ // Tactical Mastery ranks 1-5. Cite: SpellAuras.cpp:1885-1904 stance rage cap.
77
+ 831: [TACTICAL_MASTERY_SPELL_IDS[0]],
78
+ 832: [TACTICAL_MASTERY_SPELL_IDS[1]],
79
+ 833: [TACTICAL_MASTERY_SPELL_IDS[2]],
80
+ 834: [TACTICAL_MASTERY_SPELL_IDS[3]],
81
+ 835: [TACTICAL_MASTERY_SPELL_IDS[4]],
82
+ // Improved Scorpid Sting ranks 1-3. Cite: SpellAuras.cpp:3461-3463 staminaToRemove.
83
+ 2388: [19491],
84
+ 2389: [19493],
85
+ 2390: [19494],
86
+ };
87
+
88
+ // Proc-side Classic switch. Cite: UnitAuraProcHandler.cpp:1604–1648. 4533 is handled inside
89
+ // procsDamage.ts because its trigger is chosen from victim power type at proc time.
90
+ export const OVERRIDE_SCRIPT_PROC_TRIGGERS: Readonly<Record<number, number>> = {
91
+ 3656: 23402, // Corrupted Healing — :1606–1612
92
+ 4086: 24406, // Improved Mend Pet r1 — :1615–1621
93
+ 4087: 24406, // Improved Mend Pet r2 — :1616–1621
94
+ 4309: 17941, // Nightfall → Shadow Trance — :1624–1627
95
+ 4533: -1, // Dreamwalker 2pc — power-type pick at proc time (procsDamage.ts).
96
+ 4537: 28750, // Dreamwalker 6pc Regrowth — :1645–1646
97
+ };
98
+
99
+ /** roll_chance_i(triggerAmount). Cite: UnitAuraProcHandler.cpp:1618–1619. */
100
+ export const OVERRIDE_SCRIPT_ROLLS_OWN_AMOUNT: ReadonlySet<number> = new Set([4086, 4087]);
101
+
102
+ export type OverrideClassScriptDisposition =
103
+ | 'proc_trigger'
104
+ | 'existing_talent_path'
105
+ | 'check_cast'
106
+ | 'not_implemented';
107
+
108
+ // Per-id switch. Quote is the C++ site that consumes the id — or the reason it does not. Census-B remainder
109
+ // (12 live slots): 728, 2228, 3654, 3655, 4081, 4327.
110
+ export function overrideClassScriptDisposition(scriptId: number): OverrideClassScriptDisposition {
111
+ switch (scriptId) {
112
+ case 3656: // UnitAuraProcHandler.cpp:1606 "Corrupted Healing" → triggered_spell_id = 23402
113
+ case 4086: // UnitAuraProcHandler.cpp:1615 "Improved Mend Pet (Rank 1)" → 24406
114
+ case 4087: // UnitAuraProcHandler.cpp:1616 "Improved Mend Pet (Rank 2)" → 24406
115
+ case 4309: // UnitAuraProcHandler.cpp:1624–1627 triggered_spell_id = 17941
116
+ case 4537: // UnitAuraProcHandler.cpp:1645–1646 "Dreamwalker Raiment 6 pieces" → 28750
117
+ return 'proc_trigger';
118
+ case 836: // Mage.cpp:117 Improved Blizzard r1 → Chilled 12484
119
+ case 988: // Mage.cpp:119 Improved Blizzard r2 → Chilled 12485
120
+ case 989: // Mage.cpp:121 Improved Blizzard r3 → Chilled 12486
121
+ return 'existing_talent_path';
122
+ case 2228: // SpellEffects.cpp:3254–3255 GetOverrideScript(2228) RemoveAurasDueToSpell
123
+ return 'existing_talent_path';
124
+ case 2388: // SpellAuras.cpp:3461 staminaToRemove = m_amount * 10 / 100; CastCustomSpell 19486
125
+ case 2389: // SpellAuras.cpp:3462 staminaToRemove = m_amount * 20 / 100
126
+ case 2390: // SpellAuras.cpp:3463 staminaToRemove = m_amount * 30 / 100
127
+ return 'existing_talent_path';
128
+ case 3654: // Spell.cpp:4682 HasOverrideScript(3654) → SPELL_FAILED_TARGET_AURASTATE
129
+ case 3655: // Spell.cpp:4661 HasOverrideScript(3655) → SPELL_FAILED_TARGET_AURASTATE
130
+ case 4327: // Spell.cpp:4673 HasOverrideScript(4327) → SPELL_FAILED_FIZZLE
131
+ return 'check_cast';
132
+ case 831: // SpellAuras.cpp:1892 Tactical Mastery rageVal=50 — powerForm.ts enterForm cap
133
+ case 832: // SpellAuras.cpp:1893 rageVal=100
134
+ case 833: // SpellAuras.cpp:1894 rageVal=150
135
+ case 834: // SpellAuras.cpp:1895 rageVal=200
136
+ case 835: // SpellAuras.cpp:1896 rageVal=250
137
+ return 'existing_talent_path';
138
+ case 2028: // Improved Drain Mana r1 17864 — no case anywhere in the Classic core
139
+ case 2029: // Improved Drain Mana r2 18393 — same
140
+ case 4533: // UnitAuraProcHandler.cpp:1629–1643 power-type pick 28722/28723/28724 (procsDamage.ts)
141
+ return 'proc_trigger';
142
+ case 728: // Scorch Talent Test (PT) 12379 — no case in :1604–1648 / Spell.cpp:4655–4686
143
+ case 4081: // Netherwind Focus 22008 — no GetOverrideScript/HasOverrideScript/proc case
144
+ default:
145
+ // No case in UnitAuraProcHandler.cpp:1604–1648, Spell.cpp:4655–4686,
146
+ // SpellEffects.cpp:3254, or SpellAuras.cpp:1890–1897 / :3459–3463.
147
+ return 'not_implemented';
148
+ }
149
+ }
150
+
151
+ /** C++ cite for the disposition. Never a synthesized payload. */
152
+ export function overrideClassScriptCite(scriptId: number): string {
153
+ switch (scriptId) {
154
+ case 3656:
155
+ return 'UnitAuraProcHandler.cpp:1606–1612 case 3656 triggered_spell_id = 23402';
156
+ case 4086:
157
+ return 'UnitAuraProcHandler.cpp:1615–1621 case 4086 roll_chance_i → 24406';
158
+ case 4087:
159
+ return 'UnitAuraProcHandler.cpp:1616–1621 case 4087 roll_chance_i → 24406';
160
+ case 4309:
161
+ return 'UnitAuraProcHandler.cpp:1624–1627 case 4309 triggered_spell_id = 17941';
162
+ case 4537:
163
+ return 'UnitAuraProcHandler.cpp:1645–1646 case 4537 triggered_spell_id = 28750';
164
+ case 2228:
165
+ return 'SpellEffects.cpp:3254–3255 if (Aura* aura = m_caster->GetOverrideScript(2228))';
166
+ case 2388:
167
+ return 'SpellAuras.cpp:3461 case 2388: staminaToRemove = m_amount * 10 / 100';
168
+ case 2389:
169
+ return 'SpellAuras.cpp:3462 case 2389: staminaToRemove = m_amount * 20 / 100';
170
+ case 2390:
171
+ return 'SpellAuras.cpp:3463 case 2390: staminaToRemove = m_amount * 30 / 100';
172
+ case 3654:
173
+ return 'Spell.cpp:4682 if (m_caster->HasOverrideScript(3654)) return SPELL_FAILED_TARGET_AURASTATE';
174
+ case 3655:
175
+ return 'Spell.cpp:4661 if (m_caster->HasOverrideScript(3655)) return SPELL_FAILED_TARGET_AURASTATE';
176
+ case 4327:
177
+ return 'Spell.cpp:4673 if (m_caster->HasOverrideScript(4327)) return SPELL_FAILED_FIZZLE';
178
+ case 4533:
179
+ return 'UnitAuraProcHandler.cpp:1629–1643 case 4533 roll_chance_i(50) → victim power-type pick';
180
+ case 728:
181
+ return 'NOT IMPLEMENTED no case in :1604–1648 / Spell.cpp:4655–4686 / SpellEffects.cpp:3254';
182
+ case 4081:
183
+ return 'NOT IMPLEMENTED no GetOverrideScript/HasOverrideScript/proc case (22008 aura 107 is the live slot)';
184
+ case 2028:
185
+ case 2029:
186
+ return 'NOT IMPLEMENTED Improved Drain Mana — the Classic core has no case 2028/2029 either'
187
+ + ' (17864/18393 have zero hits core-wide; the ids the core does consume are'
188
+ + ' 831–836, 988, 989, 2228, 2388–2390, 3654–3656, 4086, 4087, 4309, 4327, 4533, 4537).';
189
+ case 831:
190
+ case 832:
191
+ case 833:
192
+ case 834:
193
+ case 835:
194
+ return `SpellAuras.cpp:1892–1896 case ${scriptId} rageVal ${TACTICAL_MASTERY_RAGE_BY_SCRIPT[scriptId]} — stance rage cap`;
195
+ default:
196
+ return 'NOT IMPLEMENTED no case in UnitAuraProcHandler.cpp:1604–1648 / Spell.cpp:4655–4686 / SpellEffects.cpp:3254 / SpellAuras.cpp:1890–1897 / :3459–3463';
197
+ }
198
+ }
199
+
200
+ export function hasOverrideScript(
201
+ buffActive: ReadonlySet<number> | undefined,
202
+ scriptId: number,
203
+ ): boolean {
204
+ if (!buffActive) return false;
205
+ const ids = SPELLS_FOR_SCRIPT[scriptId];
206
+ if (!ids) return false;
207
+ for (const id of ids) {
208
+ if (buffActive.has(id)) return true;
209
+ }
210
+ return false;
211
+ }
212
+
213
+ // The unit-level test: a live aura OR a sheet script id. A spent talent is an aura in the C++ but
214
+ // neither a buff nor a spellbook row here, so the buff set alone always answered no.
215
+ export function unitHasOverrideScript(
216
+ unit: { buffActive?: ReadonlySet<number>; overrideScriptIds?: ReadonlySet<number> },
217
+ scriptId: number,
218
+ ): boolean {
219
+ if (unit.overrideScriptIds?.has(scriptId)) return true;
220
+ return hasOverrideScript(unit.buffActive, scriptId);
221
+ }
222
+
223
+ // The rage a warrior keeps when entering a stance, in display units. The C++ takes the FIRST script
224
+ // naming a rage value, and only one Tactical Mastery rank can be talented.
225
+ export function stanceRetainedRage(hasScript: (scriptId: number) => boolean): number {
226
+ for (const scriptId of [831, 832, 833, 834, 835]) {
227
+ if (hasScript(scriptId)) return TACTICAL_MASTERY_RAGE_BY_SCRIPT[scriptId]! / 10;
228
+ }
229
+ return 0;
230
+ }
231
+
232
+ function rawSlots(spell: { rawEffects?: readonly { effect?: number; auraName?: number }[] }) {
233
+ return spell.rawEffects ?? [];
234
+ }
235
+
236
+ function spellHasAura(spell: { rawEffects?: readonly { effect?: number; auraName?: number }[] }, aura: number): boolean {
237
+ return rawSlots(spell).some((r) => ((r.auraName ?? 0) | 0) === aura);
238
+ }
239
+
240
+ function spellHasEffect(spell: { rawEffects?: readonly { effect?: number; auraName?: number }[] }, effect: number): boolean {
241
+ return rawSlots(spell).some((r) => ((r.effect ?? 0) | 0) === effect);
242
+ }
243
+
244
+ // The two check-cast refusals from a class script. The heal test is the DBC heal effect only — Holy
245
+ // Light and Flash of Light are script effects. Cite: Spell.cpp:4655-4686.
246
+ export function refuseOverrideClassScriptCheckCast(
247
+ spell: { spellFamilyName?: number; rawEffects?: readonly { effect?: number; auraName?: number }[] },
248
+ casterBuffActive: ReadonlySet<number> | undefined,
249
+ ): boolean {
250
+ if (!casterBuffActive || casterBuffActive.size === 0) return false;
251
+ const family = (spell.spellFamilyName ?? 0) | 0;
252
+ // Druid shapeshift first, then fall through to the heal/dispel set. Cite: Spell.cpp:4658–4676.
253
+ if (
254
+ family === SPELLFAMILY_DRUID
255
+ && spellHasAura(spell, SPELL_AURA_MOD_SHAPESHIFT)
256
+ && hasOverrideScript(casterBuffActive, NEFARIAN_INVOLUNTARY_SCRIPT)
257
+ ) {
258
+ return true;
259
+ }
260
+ if (
261
+ (family === SPELLFAMILY_DRUID
262
+ || family === SPELLFAMILY_PRIEST
263
+ || family === SPELLFAMILY_SHAMAN
264
+ || family === SPELLFAMILY_PALADIN)
265
+ && (spellHasEffect(spell, SPELL_EFFECT_HEAL)
266
+ || spellHasAura(spell, SPELL_AURA_PERIODIC_HEAL)
267
+ || spellHasEffect(spell, SPELL_EFFECT_DISPEL))
268
+ && hasOverrideScript(casterBuffActive, CORRUPTED_MIND_SCRIPT)
269
+ ) {
270
+ return true;
271
+ }
272
+ if (family === SPELLFAMILY_WARRIOR) {
273
+ return spellHasAura(spell, SPELL_AURA_MOD_SHAPESHIFT)
274
+ && hasOverrideScript(casterBuffActive, NEFARIAN_BERSERK_SCRIPT);
275
+ }
276
+ return false;
277
+ }
278
+
279
+ /** TARGET_UNIT_CASTER. Cite: SpellTargetDefines.h:26; 29184/18789 EffectImplicitTargetA. */
280
+ const TARGET_UNIT_CASTER = 1;
281
+
282
+ export function overrideScriptAuraTargetIsCaster(spell: SpellDef): boolean {
283
+ for (const raw of spell.rawEffects ?? []) {
284
+ if ((raw.auraName | 0) !== 112) continue;
285
+ return (raw.targetA | 0) === TARGET_UNIT_CASTER;
286
+ }
287
+ return true;
288
+ }
289
+
290
+ export function overrideScriptsOnSpell(spell: SpellDef): number[] {
291
+ const out: number[] = [];
292
+ for (const raw of spell.rawEffects ?? []) {
293
+ if ((raw.auraName | 0) !== 112) continue;
294
+ out.push(raw.miscValue | 0);
295
+ }
296
+ return out;
297
+ }
298
+
299
+ // The talent-path consumer of the override-class-script intents. Proc ids already emit their trigger,
300
+ // two register on apply, and the unimplemented ids stay register-only with no invented payload.
301
+ export function materializeOverrideClassScriptIntents(
302
+ intents: readonly { kind: string; scriptId?: number }[] | undefined,
303
+ effects: SpellEffect[],
304
+ _spell: SpellDef,
305
+ ): SpellEffect[] {
306
+ if (!intents?.length) return effects;
307
+ for (const intent of intents) {
308
+ if (intent.kind !== OVERRIDE_CLASS_SCRIPTS_INTENT) continue;
309
+ const scriptId = (intent.scriptId ?? 0) | 0;
310
+ const disp = overrideClassScriptDisposition(scriptId);
311
+ overrideClassScriptCite(scriptId);
312
+ // CheckCast fizzle/aurastate holders — surface so the aura is not empty-effects inert.
313
+ // Cite: Spell.cpp:4655–4686 HasOverrideScript.
314
+ if (disp === 'check_cast' && !effects.some((e) => e.kind === 'client_inform')) {
315
+ effects = [...effects, { kind: 'client_inform' }];
316
+ }
317
+ }
318
+ return effects;
319
+ }
@@ -0,0 +1,20 @@
1
+ // Parry haste — shorten the defender's remaining melee swing timer. Cite: Unit.cpp:2158–2195
2
+ // DealMeleeDamage VICTIMSTATE_PARRY.
3
+
4
+ import { CREATURE_EXTRA_FLAG } from '../../domain/creature/creatureAiConstants.ts';
5
+
6
+ /** Creature.h CREATURE_EXTRA_FLAG_NO_PARRY_HASTEN. ExtraFlags is the raw bake. */
7
+ export function creatureSkipsParryHaste(extraFlags: number | undefined): boolean {
8
+ return ((extraFlags ?? 0) & CREATURE_EXTRA_FLAG.NO_PARRY_HASTEN) !== 0;
9
+ }
10
+
11
+ // New remaining ms after a parry. `attackTimeMs` is GetAttackTime for that hand (hasted period). Remaining
12
+ // > 60% of period: subtract 40%. (20%, 60%]: snap to 20%. ≤20%: unchanged.
13
+ export function parryHasteRemaining(remainingMs: number, attackTimeMs: number): number {
14
+ if (!(remainingMs > 0) || !(attackTimeMs > 0)) return remainingMs;
15
+ const percent20 = attackTimeMs * 0.20;
16
+ const percent60 = 3.0 * percent20;
17
+ if (remainingMs > percent20 && remainingMs <= percent60) return percent20;
18
+ if (remainingMs > percent60) return remainingMs - 2.0 * percent20;
19
+ return remainingMs;
20
+ }