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,892 @@
1
+ // Azshara ScriptDev IR ports. Source: scripts/kalimdor/azshara.cpp — mobs_spitelashes,
2
+ // npc_felhound_tracker, event_arcanite_buoy, go_lightning, boss_maws. Every value cites file:line.
3
+
4
+ import type { ScriptDevIR, ScriptDevTimer } from './types.ts';
5
+ import { CAST_FLAG } from '../creature/creatureAi.ts';
6
+
7
+ // Constants — azshara.cpp shared / mobs_spitelashes
8
+
9
+ // azshara.cpp:41–64
10
+ /** Cite: azshara.cpp:42 SPELL_POLYMORPH_BACKFIRE = 28406 */
11
+ export const SPELL_POLYMORPH_BACKFIRE = 28406;
12
+ /** Cite: azshara.cpp:43 QUEST_FRAGMENTED_MAGIC = 9364 */
13
+ export const QUEST_FRAGMENTED_MAGIC = 9364;
14
+
15
+ /** Cite: azshara.cpp:46 SPELL_DISARM = 6713 */
16
+ export const SPELL_DISARM = 6713;
17
+ /** Cite: azshara.cpp:47 SPELL_SCREECH = 3589 */
18
+ export const SPELL_SCREECH = 3589;
19
+ /** Cite: azshara.cpp:48 SPELL_FROST_SHOCK = 12548 */
20
+ export const SPELL_FROST_SHOCK = 12548;
21
+ /** Cite: azshara.cpp:49 SPELL_RENEW = 11640 */
22
+ export const SPELL_RENEW = 11640;
23
+ /** Cite: azshara.cpp:50 SPELL_SHOOT = 6660 */
24
+ export const SPELL_SHOOT = 6660;
25
+ /** Cite: azshara.cpp:51 SPELL_FROST_SHOT = 12551 */
26
+ export const SPELL_FROST_SHOT = 12551;
27
+ /** Cite: azshara.cpp:52 SPELL_FROST_NOVA = 11831 */
28
+ export const SPELL_FROST_NOVA = 11831;
29
+ /** Cite: azshara.cpp:53 SPELL_STRIKE = 11976 */
30
+ export const SPELL_STRIKE = 11976;
31
+
32
+ /** Cite: azshara.cpp:55 NPC_SPITELASH_WARRIOR = 6190 */
33
+ export const NPC_SPITELASH_WARRIOR = 6190;
34
+ /** Cite: azshara.cpp:56 NPC_SPITELASH_SCREAMER = 6193 */
35
+ export const NPC_SPITELASH_SCREAMER = 6193;
36
+ /** Cite: azshara.cpp:57 NPC_SPITELASH_GUARD = 6194 */
37
+ export const NPC_SPITELASH_GUARD = 6194;
38
+ /** Cite: azshara.cpp:58 NPC_SPITELASH_SIREN = 6195 */
39
+ export const NPC_SPITELASH_SIREN = 6195;
40
+ /** Cite: azshara.cpp:59 NPC_SPITELASH_MYRMIDON = 6196 */
41
+ export const NPC_SPITELASH_MYRMIDON = 6196;
42
+
43
+ // Polymorph ranks that arm the morph timer (SpellHit gate). Cite: azshara.cpp:119 pSpell->Id == 118 ||
44
+ // 12824 || 12825 || 12826
45
+ export const SPELL_POLYMORPH_RANKS = [118, 12824, 12825, 12826] as const;
46
+
47
+ // Morph timer after valid polymorph hit, then backfire + despawn. Cite: azshara.cpp:120 m_uiMorphTimer =
48
+ // 5000
49
+ export const SPITELASH_MORPH_TIMER_MS = 5000;
50
+
51
+ // Spitelash ability table — entry → spell / target / init / cooldown. Target types are 0 RANDOM,
52
+ // 1 VICTIM, 2 SELF, 3 FRIENDLY. Cite: azshara.cpp:74–84 m_aSpitelashAbility[8]; :61–64.
53
+ export const SPITELASH_ABILITIES = [
54
+ {
55
+ creatureEntry: NPC_SPITELASH_WARRIOR,
56
+ spellId: SPELL_DISARM,
57
+ target: 'victim' as const,
58
+ initialMs: 4000,
59
+ cooldownMs: 10_000,
60
+ id: 'disarm',
61
+ cite: 'azshara.cpp:76 Warrior Disarm 6713 victim init 4000 cd 10000',
62
+ },
63
+ {
64
+ creatureEntry: NPC_SPITELASH_SCREAMER,
65
+ spellId: SPELL_SCREECH,
66
+ target: 'self' as const,
67
+ initialMs: 7000,
68
+ cooldownMs: 15_000,
69
+ id: 'screech',
70
+ cite: 'azshara.cpp:77 Screamer Screech 3589 self init 7000 cd 15000',
71
+ },
72
+ {
73
+ creatureEntry: NPC_SPITELASH_GUARD,
74
+ spellId: SPELL_FROST_SHOCK,
75
+ target: 'victim' as const,
76
+ initialMs: 7000,
77
+ cooldownMs: 13_000,
78
+ id: 'frost_shock',
79
+ cite: 'azshara.cpp:78 Guard Frost Shock 12548 victim init 7000 cd 13000',
80
+ },
81
+ {
82
+ creatureEntry: NPC_SPITELASH_SIREN,
83
+ spellId: SPELL_RENEW,
84
+ target: 'self' as const,
85
+ // DoSelectLowestHpFriendly(10.0f): the Siren renews whichever Spitelash is worst off.
86
+ friendlyLowestHpYd: 10,
87
+ initialMs: 4000,
88
+ cooldownMs: 7000,
89
+ id: 'renew',
90
+ cite: 'azshara.cpp:79,131-140 Siren Renew 11640 on DoSelectLowestHpFriendly(10.0f), init 4000 cd 7000',
91
+ },
92
+ {
93
+ creatureEntry: NPC_SPITELASH_SIREN,
94
+ spellId: SPELL_SHOOT,
95
+ target: 'hostile_random' as const,
96
+ initialMs: 3000,
97
+ cooldownMs: 9000,
98
+ id: 'shoot',
99
+ cite: 'azshara.cpp:80 Siren Shoot 6660 random init 3000 cd 9000',
100
+ },
101
+ {
102
+ creatureEntry: NPC_SPITELASH_SIREN,
103
+ spellId: SPELL_FROST_SHOT,
104
+ target: 'hostile_random' as const,
105
+ initialMs: 7000,
106
+ cooldownMs: 10_000,
107
+ id: 'frost_shot',
108
+ cite: 'azshara.cpp:81 Siren Frost Shot 12551 random init 7000 cd 10000',
109
+ },
110
+ {
111
+ creatureEntry: NPC_SPITELASH_SIREN,
112
+ spellId: SPELL_FROST_NOVA,
113
+ target: 'self' as const,
114
+ initialMs: 10_000,
115
+ cooldownMs: 15_000,
116
+ id: 'frost_nova',
117
+ cite: 'azshara.cpp:82 Siren Frost Nova 11831 self init 10000 cd 15000',
118
+ },
119
+ {
120
+ creatureEntry: NPC_SPITELASH_MYRMIDON,
121
+ spellId: SPELL_STRIKE,
122
+ target: 'victim' as const,
123
+ initialMs: 3000,
124
+ cooldownMs: 7000,
125
+ id: 'strike',
126
+ cite: 'azshara.cpp:83 Myrmidon Strike 11976 victim init 3000 cd 7000',
127
+ },
128
+ ] as const;
129
+
130
+ /** All Spitelash entries bound to mobs_spitelashes. Cite: scriptdev2.sql:188 */
131
+ export const SPITELASH_ENTRIES = [
132
+ NPC_SPITELASH_WARRIOR,
133
+ NPC_SPITELASH_SCREAMER,
134
+ NPC_SPITELASH_GUARD,
135
+ NPC_SPITELASH_SIREN,
136
+ NPC_SPITELASH_MYRMIDON,
137
+ ] as const;
138
+
139
+ // Constants — npc_felhound_tracker
140
+
141
+ // azshara.cpp:198–208
142
+ /** Cite: azshara.cpp:200 QUEST_AZSHARITE = 3602 */
143
+ export const QUEST_AZSHARITE = 3602;
144
+ /** Cite: azshara.cpp:202 GO_AZSHARITE_1 = 152620 */
145
+ export const GO_AZSHARITE_1 = 152620;
146
+ /** Cite: azshara.cpp:203 GO_AZSHARITE_2 = 152621 */
147
+ export const GO_AZSHARITE_2 = 152621;
148
+ /** Cite: azshara.cpp:204 GO_AZSHARITE_3 = 152622 */
149
+ export const GO_AZSHARITE_3 = 152622;
150
+ /** Cite: azshara.cpp:205 GO_AZSHARITE_4 = 152631 */
151
+ export const GO_AZSHARITE_4 = 152631;
152
+ /** Cite: azshara.cpp:207 SOUND_GROWL = 1249 */
153
+ export const SOUND_GROWL = 1249;
154
+ /** Cite: azshara.cpp:210 aGOList */
155
+ export const AZSHARITE_GO_LIST = [
156
+ GO_AZSHARITE_1,
157
+ GO_AZSHARITE_2,
158
+ GO_AZSHARITE_3,
159
+ GO_AZSHARITE_4,
160
+ ] as const;
161
+
162
+ // Felhound Tracker creature entry (DB ScriptName bind). Cite: scriptdev2.sql:189 entry=8668; absent from
163
+ // product bake.
164
+ export const NPC_FELHOUND_TRACKER = 8668;
165
+
166
+ /** Cite: SharedDefines.h:647 TEXTEMOTE_ROAR = 75; azshara.cpp:241 */
167
+ export const TEXTEMOTE_ROAR = 75;
168
+
169
+ /** Cite: SharedDefines.h:556 GO_FLAG_INTERACT_COND = 0x00000004; azshara.cpp:272 */
170
+ export const GO_FLAG_INTERACT_COND = 0x00000004;
171
+
172
+ /** Crystal search radius. Cite: azshara.cpp:255 40.0f */
173
+ export const AZSHARITE_SEARCH_RADIUS_YD = 40;
174
+
175
+ /** Contact point distance. Cite: azshara.cpp:285 3.0f */
176
+ export const AZSHARITE_CONTACT_DIST_YD = 3;
177
+
178
+ /** Wait after MovementInform before next pet AI tick. Cite: azshara.cpp:232 m_uiWaitTimer = 20000 */
179
+ export const FELHOUND_WAIT_TIMER_MS = 20_000;
180
+
181
+ // Constants — event_arcanite_buoy + go_lightning + boss_maws
182
+
183
+ // azshara.cpp:322–327
184
+ /** Cite: azshara.cpp:324 EVENT_ARCANITE_BUOY = 9542 */
185
+ export const EVENT_ID_ARCANITE_BUOY = 9542;
186
+ /** Cite: azshara.cpp:325 NPC_MAWS = 15571 */
187
+ export const NPC_MAWS = 15571;
188
+ /** Cite: azshara.cpp:326 GO_THEATRIC_LIGHTNING = 183356 */
189
+ export const GO_THEATRIC_LIGHTNING = 183356;
190
+
191
+ /** Maws summon location. Cite: azshara.cpp:334 aMawsSpawn */
192
+ export const MAWS_SPAWN = {
193
+ x: 3561.73,
194
+ y: -6647.2,
195
+ z: -7.5,
196
+ o: 1.6,
197
+ cite: 'azshara.cpp:334,347 aMawsSpawn + SummonCreature o=1.6',
198
+ } as const;
199
+
200
+ // Skip summon if Maws already within this range of player. Cite: azshara.cpp:343
201
+ // GetClosestCreatureWithEntry(..., 200.0f)
202
+ export const MAWS_EXISTING_RANGE_YD = 200;
203
+
204
+ // Lightning refresh search radius on buoy event. Cite: azshara.cpp:353 GetClosestGameObjectWithEntry(...,
205
+ // 20.0f)
206
+ export const LIGHTNING_EVENT_RANGE_YD = 20;
207
+
208
+ /** Lightning respawn time when refreshed by buoy event. Cite: azshara.cpp:357 SetRespawnTime(9000) */
209
+ export const LIGHTNING_RESPAWN_MS = 9000;
210
+
211
+ // Lightning custom-anim re-arm urand(2,5) seconds. Cite: azshara.cpp:374,387 urand(2, 5) * IN_MILLISECONDS
212
+ export const LIGHTNING_ANIM_MIN_MS = 2000;
213
+ export const LIGHTNING_ANIM_MAX_MS = 5000;
214
+
215
+ // azshara.cpp:403–412
216
+ /** Cite: azshara.cpp:405 SPELL_THRASH = 8876 */
217
+ export const SPELL_THRASH = 8876;
218
+ /** Cite: azshara.cpp:406 SPELL_FRENZY = 19812 */
219
+ export const SPELL_FRENZY = 19812;
220
+ /** Cite: azshara.cpp:407 SPELL_DARK_WATER = 25743 */
221
+ export const SPELL_DARK_WATER = 25743;
222
+ /** Cite: azshara.cpp:408 SPELL_RAMPAGE = 25744 */
223
+ export const SPELL_RAMPAGE = 25744;
224
+ /** Cite: azshara.cpp:410 EMOTE_GENERIC_FRENZY_KILL = -1000001 */
225
+ export const EMOTE_GENERIC_FRENZY_KILL = -1_000_001;
226
+ /** Cite: azshara.cpp:411 EMOTE_MAWS_KILL = -1010000 */
227
+ export const EMOTE_MAWS_KILL = -1_010_000;
228
+
229
+ // Maws HP threshold for Frenzy/Rampage re-arm + Dark Water enable. Cite: azshara.cpp:466,474,479
230
+ // GetHealthPercent() < 20.0f
231
+ export const MAWS_HP_ENRAGE_PCT = 20;
232
+
233
+ /** Cite: azshara.cpp:428 uiFrenzyTimer = 25 * IN_MILLISECONDS */
234
+ export const MAWS_FRENZY_INIT_MS = 25_000;
235
+ /** Cite: azshara.cpp:466 re-arm 25s when HP ≥ 20% */
236
+ export const MAWS_FRENZY_REPEAT_HIGH_MS = 25_000;
237
+ /** Cite: azshara.cpp:466 re-arm 15s when HP < 20% */
238
+ export const MAWS_FRENZY_REPEAT_LOW_MS = 15_000;
239
+
240
+ /** Cite: azshara.cpp:429 uiDarkWaterTimer = 15 * IN_MILLISECONDS */
241
+ export const MAWS_DARK_WATER_MS = 15_000;
242
+
243
+ /** Cite: azshara.cpp:430 uiRampageTimer = urand(20, 120) * IN_MILLISECONDS */
244
+ export const MAWS_RAMPAGE_INIT_MIN_MS = 20_000;
245
+ export const MAWS_RAMPAGE_INIT_MAX_MS = 120_000;
246
+ /** Cite: azshara.cpp:474 re-arm 12s when HP < 20% */
247
+ export const MAWS_RAMPAGE_REPEAT_LOW_MS = 12_000;
248
+
249
+ // Despawn timer 150 minutes (always ticks, combat or not). Cite: azshara.cpp:431 uiDespawnTimer = 150 *
250
+ // MINUTE * IN_MILLISECONDS
251
+ export const MAWS_DESPAWN_MS = 150 * 60 * 1000;
252
+
253
+ // Lightning deactivate search on Maws death/despawn. Cite: azshara.cpp:439,450
254
+ // GetClosestGameObjectWithEntry(..., 200.0f)
255
+ export const LIGHTNING_MAWS_RANGE_YD = 200;
256
+
257
+ // Pure helpers — mobs_spitelashes
258
+
259
+ // Timers for one Spitelash entry (cpp ctor filters ability table by entry). Cite: azshara.cpp:90-94,107-108
260
+ // Reset re-arms initial
261
+ export function spitelashTimersForEntry(entry: number): ScriptDevTimer[] {
262
+ return SPITELASH_ABILITIES.filter((a) => a.creatureEntry === (entry | 0)).map(
263
+ (a) => ({
264
+ id: a.id,
265
+ spellId: a.spellId,
266
+ initialMinMs: a.initialMs,
267
+ initialMaxMs: a.initialMs,
268
+ repeatMinMs: a.cooldownMs,
269
+ repeatMaxMs: a.cooldownMs,
270
+ target: a.target,
271
+ creatureEntry: a.creatureEntry,
272
+ ...('friendlyLowestHpYd' in a ? { friendlyLowestHpYd: a.friendlyLowestHpYd, friendlyHpDeficit: 1 } : {}),
273
+ cite: a.cite,
274
+ }),
275
+ );
276
+ }
277
+
278
+ export interface SpitelashSpellHitResult {
279
+ handled: boolean;
280
+ /** Arm m_uiMorphTimer when handled. */
281
+ morphTimerMs: number | null;
282
+ cite: string;
283
+ }
284
+
285
+ // Port of mobs_spitelashesAI::SpellHit morph arm, gated on quest 9364 INCOMPLETE and a player
286
+ // caster with no morph timer already running. Cite: azshara.cpp:111–121.
287
+ export function spitelashSpellHit(
288
+ morphTimerActive: boolean,
289
+ isPlayerCaster: boolean,
290
+ questIncomplete: boolean,
291
+ spellId: number,
292
+ ): SpitelashSpellHitResult {
293
+ if (morphTimerActive) {
294
+ return {
295
+ handled: false,
296
+ morphTimerMs: null,
297
+ cite: 'azshara.cpp:114-115 m_uiMorphTimer already set → return',
298
+ };
299
+ }
300
+ if (!isPlayerCaster || !questIncomplete) {
301
+ return {
302
+ handled: false,
303
+ morphTimerMs: null,
304
+ cite: 'azshara.cpp:118 player + incomplete 9364 gate failed',
305
+ };
306
+ }
307
+ if (!(SPELL_POLYMORPH_RANKS as readonly number[]).includes(spellId | 0)) {
308
+ return {
309
+ handled: false,
310
+ morphTimerMs: null,
311
+ cite: 'azshara.cpp:119 spell not polymorph rank 118/12824/12825/12826',
312
+ };
313
+ }
314
+ return {
315
+ handled: true,
316
+ morphTimerMs: SPITELASH_MORPH_TIMER_MS,
317
+ cite: 'azshara.cpp:120 m_uiMorphTimer = 5000',
318
+ };
319
+ }
320
+
321
+ export interface SpitelashMorphTimerResult {
322
+ /** Timer remaining after this tick (0 when fired or idle). */
323
+ nextTimerMs: number;
324
+ /** True when backfire cast + ForcedDespawn should run. */
325
+ fire: boolean;
326
+ backfireSpellId: number | null;
327
+ castFlags: number | null;
328
+ forceDespawn: boolean;
329
+ cite: string;
330
+ }
331
+
332
+ // Port of the UpdateAI morph-timer branch; `morphTimerMs` 0 is idle.
333
+ // Cite: azshara.cpp:157–169.
334
+ export function spitelashMorphTimerTick(
335
+ morphTimerMs: number,
336
+ diffMs: number,
337
+ ): SpitelashMorphTimerResult {
338
+ if (morphTimerMs <= 0) {
339
+ return {
340
+ nextTimerMs: 0,
341
+ fire: false,
342
+ backfireSpellId: null,
343
+ castFlags: null,
344
+ forceDespawn: false,
345
+ cite: 'azshara.cpp:157 !m_uiMorphTimer → skip',
346
+ };
347
+ }
348
+ if (morphTimerMs <= diffMs) {
349
+ return {
350
+ nextTimerMs: 0,
351
+ fire: true,
352
+ backfireSpellId: SPELL_POLYMORPH_BACKFIRE,
353
+ castFlags: CAST_FLAG.TRIGGERED,
354
+ forceDespawn: true,
355
+ cite:
356
+ 'azshara.cpp:161-164 DoCastSpellIfCan(SPELL_POLYMORPH_BACKFIRE, CAST_TRIGGERED) + ForcedDespawn',
357
+ };
358
+ }
359
+ return {
360
+ nextTimerMs: morphTimerMs - diffMs,
361
+ fire: false,
362
+ backfireSpellId: null,
363
+ castFlags: null,
364
+ forceDespawn: false,
365
+ cite: 'azshara.cpp:167-168 m_uiMorphTimer -= uiDiff',
366
+ };
367
+ }
368
+
369
+ // Pure helpers — npc_felhound_tracker
370
+
371
+ export interface FelhoundReceiveEmoteResult {
372
+ handled: boolean;
373
+ /** Clear wait + movement and start crystal search. */
374
+ findCrystal: boolean;
375
+ cite: string;
376
+ }
377
+
378
+ /** Port of npc_felhound_trackerAI::ReceiveEmote. Cite: azshara.cpp:235–247 */
379
+ export function felhoundReceiveEmote(
380
+ questIncomplete: boolean,
381
+ textEmote: number,
382
+ ): FelhoundReceiveEmoteResult {
383
+ if (!questIncomplete) {
384
+ return {
385
+ handled: false,
386
+ findCrystal: false,
387
+ cite: 'azshara.cpp:238-239 quest 3602 not incomplete → return',
388
+ };
389
+ }
390
+ if ((textEmote | 0) !== TEXTEMOTE_ROAR) {
391
+ return {
392
+ handled: false,
393
+ findCrystal: false,
394
+ cite: 'azshara.cpp:241 textEmote != TEXTEMOTE_ROAR → no-op',
395
+ };
396
+ }
397
+ return {
398
+ handled: true,
399
+ findCrystal: true,
400
+ cite: 'azshara.cpp:241-245 ROAR → clear wait + DoFindNewCrystal',
401
+ };
402
+ }
403
+
404
+ export interface FelhoundCrystalCandidate {
405
+ entry: number;
406
+ /** Distance from pet (yards). */
407
+ distYd: number;
408
+ /** GAMEOBJECT_FLAGS bitfield. */
409
+ flags: number;
410
+ }
411
+
412
+ export interface FelhoundFindCrystalResult {
413
+ /** Nearest interactable crystal entry, or null → growl. */
414
+ crystalEntry: number | null;
415
+ playGrowl: boolean;
416
+ soundId: number | null;
417
+ /** MovePoint contact distance when crystal found. */
418
+ contactDistYd: number | null;
419
+ movementActive: boolean;
420
+ cite: string;
421
+ }
422
+
423
+ // Port of DoFindNewCrystal: the first GO list with any in-range object wins, then the nearest
424
+ // with GO_FLAG_INTERACT_COND among it. Candidates are the caller's 40 yd query. Cite: :250–289.
425
+ export function felhoundFindCrystal(
426
+ candidates: readonly FelhoundCrystalCandidate[],
427
+ ): FelhoundFindCrystalResult {
428
+ // Group by aGOList order — first entry family with any hit wins (cpp:255-258).
429
+ for (const goEntry of AZSHARITE_GO_LIST) {
430
+ const inFamily = candidates
431
+ .filter((c) => c.entry === goEntry)
432
+ .slice()
433
+ .sort((a, b) => a.distYd - b.distYd);
434
+ if (inFamily.length === 0) continue;
435
+ // cpp iterates full merged list after first non-empty family break — once
436
+ // a family had hits the loop broke, then sorted that family list only.
437
+ const usable = inFamily.find(
438
+ (c) => (c.flags & GO_FLAG_INTERACT_COND) !== 0,
439
+ );
440
+ if (!usable) {
441
+ return {
442
+ crystalEntry: null,
443
+ playGrowl: true,
444
+ soundId: SOUND_GROWL,
445
+ contactDistYd: null,
446
+ movementActive: false,
447
+ cite: 'azshara.cpp:279-282 no GO with GO_FLAG_INTERACT_COND → growl',
448
+ };
449
+ }
450
+ return {
451
+ crystalEntry: usable.entry,
452
+ playGrowl: false,
453
+ soundId: null,
454
+ contactDistYd: AZSHARITE_CONTACT_DIST_YD,
455
+ movementActive: true,
456
+ cite: 'azshara.cpp:284-288 GetContactPoint 3.0f + MovePoint(1) walk=false',
457
+ };
458
+ }
459
+ return {
460
+ crystalEntry: null,
461
+ playGrowl: true,
462
+ soundId: SOUND_GROWL,
463
+ contactDistYd: null,
464
+ movementActive: false,
465
+ cite: 'azshara.cpp:261-264 empty grid → PlayDirectSound SOUND_GROWL',
466
+ };
467
+ }
468
+
469
+ export interface FelhoundMovementInformResult {
470
+ handled: boolean;
471
+ waitTimerMs: number;
472
+ movementActive: boolean;
473
+ cite: string;
474
+ }
475
+
476
+ /** Port of MovementInform POINT_MOTION_TYPE point 1. Cite: azshara.cpp:225–233 */
477
+ export function felhoundMovementInform(
478
+ moveTypeIsPoint: boolean,
479
+ pointId: number,
480
+ ): FelhoundMovementInformResult {
481
+ if (!moveTypeIsPoint || !pointId) {
482
+ return {
483
+ handled: false,
484
+ waitTimerMs: 0,
485
+ movementActive: false,
486
+ cite: 'azshara.cpp:227 !POINT || !pointId → return',
487
+ };
488
+ }
489
+ return {
490
+ handled: true,
491
+ waitTimerMs: FELHOUND_WAIT_TIMER_MS,
492
+ movementActive: false,
493
+ cite: 'azshara.cpp:230-232 MoveIdle + wait 20000',
494
+ };
495
+ }
496
+
497
+ // Pure helpers — event_arcanite_buoy / go_lightning / boss_maws
498
+
499
+ export interface ArcaniteBuoyEventResult {
500
+ handled: boolean;
501
+ /** Summon Maws when true. */
502
+ summonMaws: boolean;
503
+ spawn: typeof MAWS_SPAWN | null;
504
+ /** Refresh lightning GO when found unspawned. */
505
+ refreshLightning: boolean;
506
+ lightningRespawnMs: number | null;
507
+ cite: string;
508
+ }
509
+
510
+ // Port of ProcessEventId_arcanite_buoy — summons Maws only when none is already within 200 yd.
511
+ // Cite: azshara.cpp:336–366.
512
+ export function arcaniteBuoyProcessEvent(
513
+ eventId: number,
514
+ isPlayerSource: boolean,
515
+ mawsAlreadyNear: boolean,
516
+ ): ArcaniteBuoyEventResult {
517
+ if ((eventId | 0) !== EVENT_ID_ARCANITE_BUOY) {
518
+ return {
519
+ handled: false,
520
+ summonMaws: false,
521
+ spawn: null,
522
+ refreshLightning: false,
523
+ lightningRespawnMs: null,
524
+ cite: 'azshara.cpp:338 eventId != EVENT_ARCANITE_BUOY → false',
525
+ };
526
+ }
527
+ if (!isPlayerSource) {
528
+ return {
529
+ handled: true,
530
+ summonMaws: false,
531
+ spawn: null,
532
+ refreshLightning: false,
533
+ lightningRespawnMs: null,
534
+ cite: 'azshara.cpp:340-341 !player source → return true without summon',
535
+ };
536
+ }
537
+ if (mawsAlreadyNear) {
538
+ return {
539
+ handled: false,
540
+ summonMaws: false,
541
+ spawn: null,
542
+ refreshLightning: false,
543
+ lightningRespawnMs: null,
544
+ cite: 'azshara.cpp:343-344 Maws already within 200yd → return false (no second summon)',
545
+ };
546
+ }
547
+ return {
548
+ handled: true,
549
+ summonMaws: true,
550
+ spawn: MAWS_SPAWN,
551
+ refreshLightning: true,
552
+ lightningRespawnMs: LIGHTNING_RESPAWN_MS,
553
+ cite:
554
+ 'azshara.cpp:347-360 SummonCreature Maws + MoveWaypoint + lightning SetRespawnTime(9000)+Refresh if !spawned',
555
+ };
556
+ }
557
+
558
+ // go_ai_lightning custom-anim re-arm; `roll25` in [0,3] maps to urand(2,5) seconds.
559
+ // Cite: azshara.cpp:374, :384-388.
560
+ export function lightningAnimRearmMs(roll25: number): number {
561
+ const sec = 2 + (((roll25 | 0) % 4) + 4) % 4; // 2..5
562
+ return sec * 1000;
563
+ }
564
+
565
+ // Frenzy re-arm after CAST_OK. Cite: azshara.cpp:466 (m_creature->GetHealthPercent() < 20.0f ? 15 : 25) *
566
+ // IN_MILLISECONDS
567
+ export function mawsFrenzyRearmMs(hpPct: number): number {
568
+ return hpPct < MAWS_HP_ENRAGE_PCT
569
+ ? MAWS_FRENZY_REPEAT_LOW_MS
570
+ : MAWS_FRENZY_REPEAT_HIGH_MS;
571
+ }
572
+
573
+ // Rampage re-arm after CAST_OK: 12 s below 20% HP, else the pre-rolled urand(20,120)s.
574
+ // Cite: azshara.cpp:474.
575
+ export function mawsRampageRearmMs(hpPct: number, rampageHighRollMs: number): number {
576
+ return hpPct < MAWS_HP_ENRAGE_PCT
577
+ ? MAWS_RAMPAGE_REPEAT_LOW_MS
578
+ : rampageHighRollMs;
579
+ }
580
+
581
+ /** Whether Dark Water branch is active (timer only ticks below 20%). Cite: azshara.cpp:479-488 */
582
+ export function mawsDarkWaterActive(hpPct: number): boolean {
583
+ return hpPct < MAWS_HP_ENRAGE_PCT;
584
+ }
585
+
586
+ // ScriptDev IR — mobs_spitelashes
587
+
588
+ // mobs_spitelashesAI — 6190 Warrior, 6193 Screamer, 6194 Guard, 6195 Siren, 6196 Myrmidon, all in
589
+ // bake, filtered per entry by timer.creatureEntry. SpellHit polymorph → 5s die timer → 28406.
590
+ export const MOBS_SPITELASHES: ScriptDevIR = {
591
+ name: 'mobs_spitelashes',
592
+ boundCreatures: [...SPITELASH_ENTRIES],
593
+ sourceFile: 'kalimdor/azshara.cpp',
594
+ spellIds: [
595
+ SPELL_POLYMORPH_BACKFIRE,
596
+ SPELL_DISARM,
597
+ SPELL_SCREECH,
598
+ SPELL_FROST_SHOCK,
599
+ SPELL_RENEW,
600
+ SPELL_SHOOT,
601
+ SPELL_FROST_SHOT,
602
+ SPELL_FROST_NOVA,
603
+ SPELL_STRIKE,
604
+ ],
605
+ timers: SPITELASH_ABILITIES.map((a) => ({
606
+ id: a.id,
607
+ spellId: a.spellId,
608
+ initialMinMs: a.initialMs,
609
+ initialMaxMs: a.initialMs,
610
+ repeatMinMs: a.cooldownMs,
611
+ repeatMaxMs: a.cooldownMs,
612
+ target: a.target,
613
+ creatureEntry: a.creatureEntry,
614
+ ...('friendlyLowestHpYd' in a ? { friendlyLowestHpYd: a.friendlyLowestHpYd, friendlyHpDeficit: 1 } : {}),
615
+ cite: a.cite,
616
+ })),
617
+ lifecycle: {
618
+ onReset: [
619
+ {
620
+ kind: 'flavor',
621
+ text: 'm_uiMorphTimer=0; ability timers re-arm to m_uiInitialTimer per entry',
622
+ cite: 'azshara.cpp:103-109 Reset',
623
+ },
624
+ ],
625
+ },
626
+ spellHits: SPELL_POLYMORPH_RANKS.map((spellId) => ({
627
+ spellId,
628
+ playerCaster: true,
629
+ requireQuestIncomplete: QUEST_FRAGMENTED_MAGIC,
630
+ once: true,
631
+ dieTimerMs: SPITELASH_MORPH_TIMER_MS,
632
+ onDieTimer: [
633
+ {
634
+ kind: 'cast_self' as const,
635
+ spellId: SPELL_POLYMORPH_BACKFIRE,
636
+ castFlags: CAST_FLAG.TRIGGERED,
637
+ cite: 'azshara.cpp:161 DoCastSpellIfCan(SPELL_POLYMORPH_BACKFIRE, CAST_TRIGGERED)',
638
+ },
639
+ {
640
+ kind: 'force_despawn' as const,
641
+ delayMs: 0,
642
+ cite: 'azshara.cpp:164 ForcedDespawn()',
643
+ },
644
+ ],
645
+ cite: `azshara.cpp:111-121 SpellHit rank ${spellId} + :120 morph 5000 + :157-169 backfire`,
646
+ })),
647
+ cites: [
648
+ 'azshara.cpp:36-192 mobs_spitelashes',
649
+ 'azshara.cpp:74-84 m_aSpitelashAbility table',
650
+ 'azshara.cpp:90-94 ctor filters by entry',
651
+ 'azshara.cpp:103-109 Reset morph=0 + re-arm initials',
652
+ 'azshara.cpp:111-121 SpellHit polymorph + quest 9364',
653
+ 'azshara.cpp:157-169 morph timer → 28406 TRIGGERED + ForcedDespawn',
654
+ 'azshara.cpp:171-183 combat ability timers (one cast per tick)',
655
+ 'scriptdev2.sql:188 ScriptName mobs_spitelashes',
656
+ ],
657
+ };
658
+
659
+ // ScriptDev IR — npc_felhound_tracker
660
+
661
+ // npc_felhound_trackerAI (ScriptedPetAI), creature 8668 — ABSENT from bake, so an unused binding.
662
+ // No combat cast timers; the ReceiveEmote ROAR and crystal search are pure helpers.
663
+ export const NPC_FELHOUND_TRACKER_SCRIPT: ScriptDevIR = {
664
+ name: 'npc_felhound_tracker',
665
+ boundCreatures: [NPC_FELHOUND_TRACKER],
666
+ sourceFile: 'kalimdor/azshara.cpp',
667
+ spellIds: [],
668
+ timers: [],
669
+ receiveEmotes: [
670
+ {
671
+ emote: TEXTEMOTE_ROAR,
672
+ actions: [
673
+ {
674
+ kind: 'flavor',
675
+ text: `quest ${QUEST_AZSHARITE} incomplete → clear wait + DoFindNewCrystal (GOs ${AZSHARITE_GO_LIST.join('/')}, r${AZSHARITE_SEARCH_RADIUS_YD}, flag 0x${GO_FLAG_INTERACT_COND.toString(16)}, contact ${AZSHARITE_CONTACT_DIST_YD}yd; growl ${SOUND_GROWL} if none)`,
676
+ cite: 'azshara.cpp:235-289 ReceiveEmote ROAR + DoFindNewCrystal',
677
+ },
678
+ ],
679
+ cite: 'azshara.cpp:235-247 ReceiveEmote TEXTEMOTE_ROAR=75 quest 3602',
680
+ },
681
+ ],
682
+ lifecycle: {
683
+ onReset: [
684
+ {
685
+ kind: 'flavor',
686
+ text: 'm_bIsMovementActive=false m_uiWaitTimer=0',
687
+ cite: 'azshara.cpp:219-223 Reset',
688
+ },
689
+ ],
690
+ },
691
+ unusedBindings: [
692
+ {
693
+ entry: NPC_FELHOUND_TRACKER,
694
+ kind: 'creature',
695
+ reason:
696
+ 'Creature 8668 Felhound Tracker is DB-bound ScriptName npc_felhound_tracker but absent from product bake - IR + pure helpers ported; product cannot spawn pet until rebake. Quest 3602 Azsharite frame residual lives in QI4 registryAzshara.',
697
+ cite: 'scriptdev2.sql:189; azshara.cpp:194-316; loadRealBundle missing 8668',
698
+ },
699
+ ],
700
+ cites: [
701
+ 'azshara.cpp:194-316 npc_felhound_tracker',
702
+ 'azshara.cpp:200 QUEST_AZSHARITE=3602',
703
+ 'azshara.cpp:202-210 GO crystals + aGOList',
704
+ 'azshara.cpp:219-223 Reset',
705
+ 'azshara.cpp:225-233 MovementInform wait 20000',
706
+ 'azshara.cpp:235-247 ReceiveEmote ROAR',
707
+ 'azshara.cpp:250-289 DoFindNewCrystal',
708
+ 'azshara.cpp:291-310 UpdateAI movement/wait gates',
709
+ 'scriptdev2.sql:189 entry 8668',
710
+ ],
711
+ };
712
+
713
+ // ScriptDev IR — event_arcanite_buoy
714
+
715
+ // ProcessEventId_arcanite_buoy, scriptdev2.sql event 9542 with no creature ScriptName. The host
716
+ // models it as a goUse-shaped event with no GO. Cite: azshara.cpp:336–366.
717
+ export const EVENT_ARCANITE_BUOY: ScriptDevIR = {
718
+ name: 'event_arcanite_buoy',
719
+ boundCreatures: [],
720
+ sourceFile: 'kalimdor/azshara.cpp',
721
+ spellIds: [],
722
+ timers: [],
723
+ goUse: {
724
+ goEntries: [],
725
+ actions: [
726
+ {
727
+ kind: 'summon',
728
+ creatureEntry: NPC_MAWS,
729
+ cite: 'azshara.cpp:347 SummonCreature(NPC_MAWS) TEMPSPAWN_MANUAL_DESPAWN at aMawsSpawn',
730
+ },
731
+ {
732
+ kind: 'flavor',
733
+ text: `MoveWaypoint walk=false; refresh GO_THEATRIC_LIGHTNING ${GO_THEATRIC_LIGHTNING} ≤${LIGHTNING_EVENT_RANGE_YD}yd SetRespawnTime(${LIGHTNING_RESPAWN_MS})+Refresh if !spawned; skip if Maws already ≤${MAWS_EXISTING_RANGE_YD}yd`,
734
+ cite: 'azshara.cpp:343-360',
735
+ },
736
+ ],
737
+ cite: 'azshara.cpp:336-366 ProcessEventId_arcanite_buoy; scriptdev2.sql:193 event 9542',
738
+ },
739
+ unusedBindings: [
740
+ {
741
+ entry: GO_THEATRIC_LIGHTNING,
742
+ kind: 'go',
743
+ reason:
744
+ 'event_arcanite_buoy is ProcessEventId (9542) with no creature ScriptName - corpus boundCreatures []. GO 183356 Theatric Lightning is visual-only lookup on summon (GetClosestGameObjectWithEntry ≤20yd); product tables/gameObjects lacks spawn row (present in gameobject-data.json only).',
745
+ cite: 'azshara.cpp:353-359; scriptdev2.sql:193; tables/gameObjects missing 183356',
746
+ },
747
+ ],
748
+ cites: [
749
+ 'azshara.cpp:318-366 event_arcanite_buoy',
750
+ 'azshara.cpp:324 EVENT_ARCANITE_BUOY=9542',
751
+ 'azshara.cpp:325 NPC_MAWS=15571',
752
+ 'azshara.cpp:326 GO_THEATRIC_LIGHTNING=183356',
753
+ 'azshara.cpp:334 aMawsSpawn',
754
+ 'azshara.cpp:514-516 RegisterSelf pProcessEventId',
755
+ 'scriptdev2.sql:193 event 9542',
756
+ ],
757
+ };
758
+
759
+ // ScriptDev IR — go_lightning
760
+
761
+ // go_ai_lightning, gameobject_template 183356. Custom anim urand(2,5)s while spawned; the GO is
762
+ // not on the tables/gameObjects product path, so the binding is unused. Cite: azshara.cpp:372–397.
763
+ export const GO_LIGHTNING: ScriptDevIR = {
764
+ name: 'go_lightning',
765
+ boundCreatures: [],
766
+ boundGos: [GO_THEATRIC_LIGHTNING],
767
+ sourceFile: 'kalimdor/azshara.cpp',
768
+ spellIds: [],
769
+ timers: [],
770
+ lifecycle: {
771
+ onReset: [
772
+ {
773
+ kind: 'flavor',
774
+ text: `m_uilightningTimer = urand(2,5)*IN_MILLISECONDS [${LIGHTNING_ANIM_MIN_MS},${LIGHTNING_ANIM_MAX_MS}]`,
775
+ cite: 'azshara.cpp:374 ctor urand(2,5)*IN_MILLISECONDS',
776
+ },
777
+ ],
778
+ },
779
+ unusedBindings: [
780
+ {
781
+ entry: GO_THEATRIC_LIGHTNING,
782
+ kind: 'go',
783
+ reason:
784
+ 'GO 183356 Theatric Lightning is DB-bound ScriptName go_lightning but absent from product tables/gameObjects.json (present in gameobject-data.json) - IR + pure helper ported; product GO AI tick not spawnable until tables row.',
785
+ cite: 'scriptdev2.sql:191; azshara.cpp:372-397; tables/gameObjects missing 183356',
786
+ },
787
+ ],
788
+ cites: [
789
+ 'azshara.cpp:368-397 go_lightning',
790
+ 'azshara.cpp:374,384-388 custom anim urand(2,5)s while spawned',
791
+ 'azshara.cpp:518-521 RegisterSelf GetGameObjectAI',
792
+ 'scriptdev2.sql:191 entry 183356',
793
+ ],
794
+ };
795
+
796
+ // ScriptDev IR — boss_maws
797
+
798
+ // boss_mawsAI, creature 15571 — an outdoor world elite with no InstanceDef. Thrash on reset, then
799
+ // Frenzy / Rampage / Dark Water in combat; the low-HP re-arms live in the pure helpers.
800
+ export const BOSS_MAWS: ScriptDevIR = {
801
+ name: 'boss_maws',
802
+ boundCreatures: [NPC_MAWS],
803
+ sourceFile: 'kalimdor/azshara.cpp',
804
+ spellIds: [SPELL_THRASH, SPELL_FRENZY, SPELL_DARK_WATER, SPELL_RAMPAGE],
805
+ timers: [
806
+ {
807
+ id: 'thrash',
808
+ spellId: SPELL_THRASH,
809
+ initialMinMs: 0,
810
+ initialMaxMs: 0,
811
+ repeatMinMs: 0,
812
+ repeatMaxMs: 0,
813
+ target: 'self',
814
+ onReset: true,
815
+ castFlags: CAST_FLAG.TRIGGERED | CAST_FLAG.AURA_NOT_PRESENT,
816
+ cite: 'azshara.cpp:433 DoCastSpellIfCan(nullptr, SPELL_THRASH, CAST_TRIGGERED|CAST_AURA_NOT_PRESENT)',
817
+ },
818
+ {
819
+ id: 'frenzy',
820
+ spellId: SPELL_FRENZY,
821
+ initialMinMs: MAWS_FRENZY_INIT_MS,
822
+ initialMaxMs: MAWS_FRENZY_INIT_MS,
823
+ // Host high-HP re-arm; low-HP 15s via mawsFrenzyRearmMs pure helper.
824
+ repeatMinMs: MAWS_FRENZY_REPEAT_HIGH_MS,
825
+ repeatMaxMs: MAWS_FRENZY_REPEAT_HIGH_MS,
826
+ target: 'self',
827
+ cite: 'azshara.cpp:428,462-467 Frenzy init 25s re-arm 25s (15s if HP<20%) self + EMOTE_GENERIC_FRENZY_KILL',
828
+ },
829
+ {
830
+ id: 'rampage',
831
+ spellId: SPELL_RAMPAGE,
832
+ initialMinMs: MAWS_RAMPAGE_INIT_MIN_MS,
833
+ initialMaxMs: MAWS_RAMPAGE_INIT_MAX_MS,
834
+ // Host high-HP re-arm urand(20,120)s; low-HP 12s via mawsRampageRearmMs.
835
+ repeatMinMs: MAWS_RAMPAGE_INIT_MIN_MS,
836
+ repeatMaxMs: MAWS_RAMPAGE_INIT_MAX_MS,
837
+ target: 'victim',
838
+ cite: 'azshara.cpp:430,471-475 Rampage init urand(20,120)s re-arm same (12s if HP<20%) victim',
839
+ },
840
+ {
841
+ id: 'dark_water',
842
+ spellId: SPELL_DARK_WATER,
843
+ // cpp: timer only decrements while HP<20%; first cast ~15s after crossing band.
844
+ initialMinMs: MAWS_DARK_WATER_MS,
845
+ initialMaxMs: MAWS_DARK_WATER_MS,
846
+ repeatMinMs: MAWS_DARK_WATER_MS,
847
+ repeatMaxMs: MAWS_DARK_WATER_MS,
848
+ target: 'self',
849
+ hpPctMax: MAWS_HP_ENRAGE_PCT,
850
+ hpPctMin: 0,
851
+ cite: 'azshara.cpp:429,479-487 Dark Water only HP<20% init/re-arm 15s self',
852
+ },
853
+ ],
854
+ lifecycle: {
855
+ onReset: [
856
+ {
857
+ kind: 'flavor',
858
+ text: `uiFrenzyTimer=25000 uiDarkWaterTimer=15000 uiRampageTimer=urand(20,120)s uiDespawnTimer=${MAWS_DESPAWN_MS} + Thrash 8876 TRIGGERED|AURA_NOT_PRESENT`,
859
+ cite: 'azshara.cpp:426-434 Reset',
860
+ },
861
+ ],
862
+ onDeath: [
863
+ {
864
+ kind: 'flavor',
865
+ text: `deactivate GO_THEATRIC_LIGHTNING ≤${LIGHTNING_MAWS_RANGE_YD}yd GO_JUST_DEACTIVATED`,
866
+ cite: 'azshara.cpp:438-440 JustDied lightning deactivate',
867
+ },
868
+ {
869
+ kind: 'yell',
870
+ textId: EMOTE_MAWS_KILL,
871
+ cite: 'azshara.cpp:441 DoScriptText(EMOTE_MAWS_KILL)',
872
+ },
873
+ ],
874
+ onEvade: [
875
+ {
876
+ kind: 'flavor',
877
+ text: `despawn path (uiDespawnTimer ${MAWS_DESPAWN_MS}ms): lightning deactivate + EMOTE_MAWS_KILL + ForcedDespawn - ticks OOC in UpdateAI`,
878
+ cite: 'azshara.cpp:447-454 despawn timer',
879
+ },
880
+ ],
881
+ },
882
+ cites: [
883
+ 'azshara.cpp:399-497 boss_maws',
884
+ 'azshara.cpp:405-408 SPELL_THRASH=8876 FRENZY=19812 DARK_WATER=25743 RAMPAGE=25744',
885
+ 'azshara.cpp:410-411 EMOTE_GENERIC_FRENZY_KILL=-1000001 EMOTE_MAWS_KILL=-1010000',
886
+ 'azshara.cpp:426-434 Reset timers + Thrash',
887
+ 'azshara.cpp:436-442 JustDied lightning + emote',
888
+ 'azshara.cpp:447-454 150min despawn',
889
+ 'azshara.cpp:462-488 Frenzy / Rampage / Dark Water <20%',
890
+ 'scriptdev2.sql:190 entry 15571',
891
+ ],
892
+ };