azeroth-shell 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +26 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +126 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,577 @@
1
+ // Naxxramas Arachnid + Plague Quarters — the ScriptDevAI IR port of Anub'Rekhan, Faerlina, Maexxna,
2
+ // Noth, Heigan and Loatheb. Cadence is creature_spell_list rows; the C++ is cited per timer.
3
+
4
+ import type { ScriptDevIR, ScriptDevTimer } from './types.ts';
5
+ import { INSTANCE_DATA } from './types.ts';
6
+
7
+ // naxxramas.h:53-59
8
+ const TYPE = {
9
+ ANUB_REKHAN: 0, FAERLINA: 1, MAEXXNA: 2, NOTH: 3, HEIGAN: 4, LOATHEB: 5,
10
+ } as const;
11
+
12
+ // naxxramas.h:73-74 for the two named bosses; the rest are creature_template.entry rows whose
13
+ // ScriptName is the cpp's registered name (live3310 creature_template).
14
+ const NPC = {
15
+ ANUB_REKHAN: 15956, FAERLINA: 15953, MAEXXNA: 15952,
16
+ NOTH: 15954, HEIGAN: 15936, LOATHEB: 16011,
17
+ WEB_WRAP: 16486, INVISIBLE_MAN: 17286,
18
+ DISEASED_MAGGOT: 16056, ROTTING_MAGGOT: 16057,
19
+ CRYPT_GUARD: 16573, CORPSE_SCARAB: 16698,
20
+ } as const;
21
+
22
+ // naxxramas.h:122
23
+ const GO_ARAC_ANUB_DOOR = 181126;
24
+
25
+ /** BossAI::SetDataType — Aggro IN_PROGRESS, JustDied DONE, evade/home FAIL. Cite: BossAI.cpp:41-98. */
26
+ function lifecycleFor(field: number, file: string) {
27
+ return {
28
+ onAggro: [{ kind: 'set_instance_data' as const, field, value: INSTANCE_DATA.IN_PROGRESS, cite: `${file} SetDataType; BossAI.cpp:75 Aggro SetData(IN_PROGRESS)` }],
29
+ onDeath: [{ kind: 'set_instance_data' as const, field, value: INSTANCE_DATA.DONE, cite: `${file} SetDataType; BossAI.cpp:49 JustDied SetData(DONE)` }],
30
+ onEvade: [{ kind: 'set_instance_data' as const, field, value: INSTANCE_DATA.FAIL, cite: `${file} SetDataType; BossAI.cpp:59,94 SetData(FAIL)` }],
31
+ };
32
+ }
33
+
34
+ // `creature_spell_list.TargetId` → IR target mode: 0 NONE (self-cast), 1 CURRENT (victim), 2 SELF,
35
+ // 100 attack-random-player. Cite: CreatureSpellList.h:34-43; creature_spell_targeting rows.
36
+ const t = (
37
+ id: string, spellId: number, iMin: number, iMax: number, rMin: number, rMax: number,
38
+ target: ScriptDevTimer['target'], cite: string, extra: Partial<ScriptDevTimer> = {},
39
+ ): ScriptDevTimer => ({
40
+ id, spellId, initialMinMs: iMin, initialMaxMs: iMax, repeatMinMs: rMin, repeatMaxMs: rMax,
41
+ target, cite, ...extra,
42
+ });
43
+
44
+ // boss_anubrekhan
45
+ export const BOSS_ANUBREKHAN: ScriptDevIR = {
46
+ name: 'boss_anubrekhan',
47
+ boundCreatures: [NPC.ANUB_REKHAN],
48
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_anubrekhan.cpp',
49
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
50
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
51
+ spellIds: [18943, 28783, 28785, 29103, 29508, 28961, 29379, 18941, 28786, 29104],
52
+ timers: [
53
+ t('double_attack', 18943, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:93 Reset DoCastSpellIfCan(SPELL_DOUBLE_ATTACK, TRIGGERED|AURA_NOT_PRESENT)', { onReset: true }),
54
+ t('anub_aura', 29103, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:99 Aggro DoCastSpellIfCan(m_creature, SPELL_ANUB_AURA, TRIGGERED|AURA_NOT_PRESENT)', { onReset: true }),
55
+ t('impale', 28783, 15_000, 15_000, 12_000, 18_000, 'hostile_random_player', "creature_spell_list 1595601:1 Anub'Rekhan - Impale, TargetId 100 = Attack - random player"),
56
+ t('locust_swarm', 28785, 80_000, 120_000, 90_000, 90_000, 'self', "creature_spell_list 1595601:2 Anub'Rekhan - Locust Swarm, TargetId 2 = Self", {
57
+ actions: [{
58
+ kind: 'arm_timer',
59
+ timerId: 'summon_guard',
60
+ delayMs: 3000,
61
+ cite: 'boss_anubrekhan.cpp:124-128 OnSpellCast(SPELL_LOCUSTSWARM) ResetTimer(ANUBREKHAN_SUMMON, 3000)',
62
+ }],
63
+ }),
64
+ {
65
+ id: 'summon_guard',
66
+ spellId: 29508,
67
+ initialMinMs: 0,
68
+ initialMaxMs: 0,
69
+ repeatMinMs: 0,
70
+ repeatMaxMs: 0,
71
+ target: 'self',
72
+ startDisabled: true,
73
+ oneShot: true,
74
+ cite: 'boss_anubrekhan.cpp:78-81 AddCustomAction(ANUBREKHAN_SUMMON, true) DoCastSpellIfCan(SPELL_SUMMON_GUARD 29508)',
75
+ },
76
+ // 1595601:3 (28961) is NOT here: Availability 0 erases the row on spawn — see header.
77
+ t('greet2', 13006, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:54-61 SAY_GREET2 13006 delay 7000', {
78
+ pollOnly: true, oneShot: true, startDisabled: true,
79
+ actions: [
80
+ { kind: 'yell', textId: 13006, cite: 'boss_anubrekhan.cpp:56 SAY_GREET2' },
81
+ { kind: 'arm_timer', timerId: 'greet3', delayMs: 13000, cite: 'boss_anubrekhan.cpp:57 SAY_GREET3 delay 13000' },
82
+ ],
83
+ }),
84
+ t('greet3', 13007, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:57 SAY_GREET3 13007 delay 13000', {
85
+ pollOnly: true, oneShot: true, startDisabled: true,
86
+ actions: [
87
+ { kind: 'yell', textId: 13007, cite: 'boss_anubrekhan.cpp:57 SAY_GREET3' },
88
+ { kind: 'arm_timer', timerId: 'greet4', delayMs: 11000, cite: 'boss_anubrekhan.cpp:58 SAY_GREET4 delay 11000' },
89
+ ],
90
+ }),
91
+ t('greet4', 13008, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:58 SAY_GREET4 13008 delay 11000', {
92
+ pollOnly: true, oneShot: true, startDisabled: true,
93
+ actions: [
94
+ { kind: 'yell', textId: 13008, cite: 'boss_anubrekhan.cpp:58 SAY_GREET4' },
95
+ { kind: 'arm_timer', timerId: 'greet5', delayMs: 10000, cite: 'boss_anubrekhan.cpp:59 SAY_GREET5 delay 10000' },
96
+ ],
97
+ }),
98
+ t('greet5', 13009, 0, 0, 0, 0, 'self', 'boss_anubrekhan.cpp:59 SAY_GREET5 13009 delay 10000', {
99
+ pollOnly: true, oneShot: true, startDisabled: true,
100
+ actions: [
101
+ { kind: 'yell', textId: 13009, cite: 'boss_anubrekhan.cpp:59 SAY_GREET5' },
102
+ ],
103
+ }),
104
+ ],
105
+ lifecycle: lifecycleFor(TYPE.ANUB_REKHAN, 'boss_anubrekhan.cpp:74'),
106
+ receiveAiEvents: [
107
+ {
108
+ eventType: 1000,
109
+ actions: [
110
+ { kind: 'arm_timer', timerId: 'greet2', delayMs: 7000, cite: 'boss_anubrekhan.cpp:54-61 StartIntro() arms SAY_GREET2 at 7000' }
111
+ ],
112
+ cite: 'boss_anubrekhan.cpp:142-143 GOUse_go_anub_door triggers StartIntro()',
113
+ }
114
+ ],
115
+ addDeaths: [{
116
+ creatureEntries: [NPC.CRYPT_GUARD],
117
+ atKilled: 'every',
118
+ total: 99,
119
+ actions: [{
120
+ kind: 'summon_count',
121
+ creatureEntry: NPC.CORPSE_SCARAB,
122
+ count: 10,
123
+ cite: 'boss_anubrekhan.cpp:164 28864 Summon 10 Corpse Scarabs; raw basePoints 9+1',
124
+ }],
125
+ cite: 'boss_anubrekhan.cpp:155-168 SummonCorpseScarabs 28961 on dead Crypt Guard 16573',
126
+ }],
127
+ cites: [
128
+ 'boss_anubrekhan.cpp:30-195 whole file',
129
+ "creature_spell_list_entry 1595601 \"Naxxramas - Anub'Rekhan\"",
130
+ 'creature_spell_list 1595601:3 Availability 0; Creature.cpp:2397-2401 urand(0,100) > Availability erases the row',
131
+ 'boss_anubrekhan.cpp:78-81,124-128 OnSpellCast(28785) ResetTimer(SUMMON, 3000) → 29508',
132
+ 'boss_anubrekhan.cpp:155-168 28961 on dead 16573 -> 28864 x10 NPC 16698',
133
+ ],
134
+ };
135
+
136
+ // go_anub_door (same cpp) — the door that starts his greet dialogue
137
+ export const GO_ANUB_DOOR: ScriptDevIR = {
138
+ name: 'go_anub_door',
139
+ boundCreatures: [],
140
+ boundGos: [GO_ARAC_ANUB_DOOR],
141
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_anubrekhan.cpp',
142
+ spellIds: [],
143
+ timers: [],
144
+ goUse: {
145
+ goEntries: [GO_ARAC_ANUB_DOOR],
146
+ gates: [
147
+ { field: TYPE.ANUB_REKHAN, notEquals: INSTANCE_DATA.IN_PROGRESS, cite: 'boss_anubrekhan.cpp:141 GetData(TYPE_ANUB_REKHAN) == IN_PROGRESS -> no intro' },
148
+ { field: TYPE.ANUB_REKHAN, notEquals: INSTANCE_DATA.DONE, cite: 'boss_anubrekhan.cpp:141 GetData(TYPE_ANUB_REKHAN) == DONE -> no intro' },
149
+ ],
150
+ // The 7/13/11/10 s dialogue runs on pollOnly timers triggered by send_ai_event 1000 (CUSTOM_A).
151
+ actions: [
152
+ { kind: 'yell', textId: 13004, cite: 'boss_anubrekhan.cpp:32,56,106 StartNextDialogueText(SAY_GREET1)' },
153
+ { kind: 'send_ai_event', eventType: 1000, receiver: 'creature_entry', creatureEntry: NPC.ANUB_REKHAN, cite: 'boss_anubrekhan.cpp:142-143 pAI->StartIntro() triggers SAY_GREET2..5' },
154
+ ],
155
+ cite: 'boss_anubrekhan.cpp:137-153 GOUse_go_anub_door',
156
+ },
157
+ cites: [
158
+ 'boss_anubrekhan.cpp:137-153,188-191 GOUse_go_anub_door + RegisterSelf',
159
+ 'naxxramas.h:122 GO_ARAC_ANUB_DOOR 181126; gameobject_template 181126 ScriptName go_anub_door',
160
+ 'boss_anubrekhan.cpp:54-61 introDialogue SAY_GREET2..5 (13006/13007/13008/13009)',
161
+ ],
162
+ };
163
+
164
+ // boss_faerlina
165
+ export const BOSS_FAERLINA: ScriptDevIR = {
166
+ name: 'boss_faerlina',
167
+ boundCreatures: [NPC.FAERLINA],
168
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_faerlina.cpp',
169
+ spellIds: [28796, 28794, 28798, 28732, 28797, 28748],
170
+ timers: [
171
+ t('poison_bolt_volley', 28796, 8000, 8000, 11_000, 11_000, 'victim', 'creature_spell_list 1595301:1 Faerlina - Poison Bolt, TargetId 1 = Current'),
172
+ t('rain_of_fire', 28794, 16_000, 16_000, 16_000, 16_000, 'hostile_random_player', 'creature_spell_list 1595301:2 Faerlina - Rain of Fire, TargetId 100 = Attack - random player'),
173
+ t('enrage', 28798, 60_000, 60_000, 60_000, 60_000, 'self', 'creature_spell_list 1595301:3 Faerlina - Enrage, TargetId 2 = Self (ScriptId 23010 has no dbscripts_on_relay row)', {
174
+ actions: [{ kind: 'yell', textIds: [12857, 12858, 12859], cite: 'boss_faerlina.cpp:33-35,75-86 OnSpellCast(SPELL_ENRAGE 28798) urand(0,2) over SAY_ENRAGE_1/2/3 12857/12858/12859' }],
175
+ }),
176
+ ],
177
+ lifecycle: lifecycleFor(TYPE.FAERLINA, 'boss_faerlina.cpp:63'),
178
+ leashZGt: 266,
179
+ cites: [
180
+ 'boss_faerlina.cpp:30-119 whole file',
181
+ 'creature_spell_list_entry 1595301 "Naxxramas - Faerlina"',
182
+ 'boss_faerlina.cpp:33-35,75-86 OnSpellCast(28798) urand(0,2) over SAY_ENRAGE_1/2/3 12857/12858/12859',
183
+ 'boss_faerlina.cpp:89-109 WidowEmbrace 28732 SpellScript is ported (applySpell.ts); raid_resp_mc_16506 now beats recovery (evaluate.ts chooseCombatAction)',
184
+ 'boss_faerlina.cpp:52,67-71 SetLeashingCheck z > 266',
185
+ ],
186
+ };
187
+
188
+ // boss_maexxna (+ npc_web_wrap / npc_invible_man, registered by the same cpp)
189
+ export const BOSS_MAEXXNA: ScriptDevIR = {
190
+ name: 'boss_maexxna',
191
+ boundCreatures: [NPC.MAEXXNA],
192
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_maexxna.cpp',
193
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
194
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
195
+ spellIds: [19818, 28673, 29484, 28741, 28776, 29434, 28747, 28622, 28618, 28619, 28620, 28621, 29280, 29281, 29282, 29283, 29285, 29287, 18941],
196
+ timers: [
197
+ t('double_attack', 19818, 0, 0, 0, 0, 'self', 'boss_maexxna.cpp:136 Reset DoCastSpellIfCan(SPELL_DOUBLE_ATTACK, TRIGGERED|AURA_NOT_PRESENT)', { onReset: true }),
198
+ // 28673 is a bare SCRIPT effect (raw 77), so nothing landed. Its whole output is 28622 on three
199
+ // shuffled non-tank players — a 60 s stun and a 657/2 s dot — so the row delivers that directly.
200
+ t('web_wrap', 28673, 20_000, 20_000, 40_000, 40_000, 'self', 'creature_spell_list 1595201:0 Maexxna - Web Wrap, TargetId 0 = None; boss_maexxna.cpp:207-224 WebWrapMaexxna', {
201
+ actions: [{
202
+ kind: 'cast_on_random_players',
203
+ spellId: 28622,
204
+ count: 3,
205
+ skipTopThreat: true,
206
+ cite: 'boss_maexxna.cpp:62 MAX_PLAYERS_WEB_WRAP 3; :212-223 SelectAttackingTargets(ALL_SUITABLE, 1, PLAYER | SKIP_TANK) shuffled and resized; :51 SPELL_WEBWRAP_STUN 28622 is what 28618-28621 trigger',
207
+ }],
208
+ }),
209
+ t('web_spray', 29484, 40_000, 40_000, 40_000, 40_000, 'self', 'creature_spell_list 1595201:1 Maexxna - Web Spray'),
210
+ t('poison_shock', 28741, 10_000, 20_000, 10_000, 20_000, 'self', 'creature_spell_list 1595201:2 Maexxna - Poison Shock'),
211
+ t('necrotic_poison', 28776, 20_000, 30_000, 10_000, 30_000, 'victim', 'creature_spell_list 1595201:3 Maexxna - Necrotic Poison, TargetId 1 = Current'),
212
+ t('summon_spiderlings', 29434, 30_000, 30_000, 40_000, 40_000, 'self', 'creature_spell_list 1595201:4 Maexxna - Summon Spiderlings (10 per cast)'),
213
+ // Band, not a phase: 1595201:5 gates on CombatCondition 1128 -> unit_condition 888 (self
214
+ // HEALTH_PERCENT < 30), so the 10 min repeat means it lands once at the enrage.
215
+ t('frenzy', 28747, 0, 0, 600_000, 600_000, 'self', 'creature_spell_list 1595201:5 Maexxna - Enrage below 30% (CombatCondition 1128 -> unit_condition 888 Op 3 Value 30)', { hpPctMax: 30 }),
216
+ ],
217
+ lifecycle: {
218
+ ...lifecycleFor(TYPE.MAEXXNA, 'boss_maexxna.cpp:126'),
219
+ summonedReachedHome: [{
220
+ kind: 'force_despawn',
221
+ cite: 'boss_maexxna.cpp:145-148 SummonedJustReachedHome summoned->ForcedDespawn',
222
+ }],
223
+ },
224
+ cites: [
225
+ 'boss_maexxna.cpp:30-301 whole file',
226
+ 'creature_spell_list_entry 1595201 "Naxxramas - Maexxna"',
227
+ 'boss_maexxna.cpp:207-246 WebWrapMaexxna 3 skip-tank players -> 28622 via cast_on_random_players',
228
+ 'boss_maexxna.cpp:66-111,151-205 the Web Wrap NPC 16486 that the raid kills to free a wrapped raider EARLY is a residual: it needs a summon owned by the victim whose death strips the aura from its spawner, and no verb here carries that link. The 60 s duration is what frees them instead',
229
+ 'boss_maexxna.cpp:145-148 SummonedJustReachedHome ForcedDespawn',
230
+ ],
231
+ };
232
+
233
+ export const NPC_WEB_WRAP: ScriptDevIR = {
234
+ name: 'npc_web_wrap',
235
+ boundCreatures: [NPC.WEB_WRAP],
236
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_maexxna.cpp',
237
+ spellIds: [29826, 28628, 28629, 29108],
238
+ timers: [
239
+ t('self_stun', 29826, 0, 0, 0, 0, 'self', 'boss_maexxna.cpp:82 Reset DoCastSpellIfCan(m_creature, SPELL_SELF_STUN, CAST_TRIGGERED)', { onReset: true }),
240
+ ],
241
+ // No unusedBindings row: 16486 and 29826/28628/28629/29108 are ALL in the bake, so the row that
242
+ // called them absent was wrong. The missing LINK is named in the cites instead.
243
+ cites: [
244
+ 'boss_maexxna.cpp:66-111 npc_web_wrapAI; :288-291 RegisterSelf',
245
+ 'boss_maexxna.cpp:79 SetCombatMovement(false)',
246
+ 'boss_maexxna.cpp:85-94 JustDied -> 28628 on spawner + ForcedDespawn(5000); :96-110 the 1 s victim-alive poll -> 28629. Both need a summon-to-spawner link no verb here carries, so they stay unported and the wrap frees the raider on its own 60 s timer instead',
247
+ ],
248
+ };
249
+
250
+ export const NPC_INVISIBLE_MAN: ScriptDevIR = {
251
+ name: 'npc_invible_man',
252
+ boundCreatures: [NPC.INVISIBLE_MAN],
253
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_maexxna.cpp',
254
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
255
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
256
+ spellIds: [28618, 28619, 28620, 28621, 28627, 28622],
257
+ // No timers by design: the script is a SpellHitTarget relay, not a combat AI.
258
+ timers: [],
259
+ cites: [
260
+ 'boss_maexxna.cpp:151-205 npc_invisible_manAI; :293-296 RegisterSelf',
261
+ 'boss_maexxna.cpp:161 SetReactState(REACT_PASSIVE)',
262
+ 'boss_maexxna.cpp:188-204 SpellHitTarget 28618-28621 stores the victim, timer 5 s (28618) else 6 s',
263
+ 'boss_maexxna.cpp:172-185 HandleVictimCheck -> victim casts 28627 - GAP (no cast-as-player verb)',
264
+ ],
265
+ };
266
+
267
+ // boss_noth
268
+ export const BOSS_NOTH: ScriptDevIR = {
269
+ name: 'boss_noth',
270
+ boundCreatures: [NPC.NOTH],
271
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_noth.cpp',
272
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
273
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
274
+ spellIds: [29213, 29208, 29209, 29210, 29211, 29252, 29247, 29248, 29249, 29216, 29231, 29230, 29212, 30228, 29217, 29227, 29224, 29225, 29258, 29262, 29255, 29257, 29267, 29238, 29214],
275
+ timers: [
276
+ t('curse_of_the_plaguebringer', 29213, 4000, 4000, 28_000, 28_000, 'self', 'creature_spell_list 1595401:0 Noth - Curse of the Plaguebringer, TargetId 0 = None'),
277
+ // Four rows, one shared spell category (Flags 4) — the server fires at most one per 25 s.
278
+ t('blink_1', 29208, 25_000, 25_000, 25_000, 25_000, 'self', 'creature_spell_list 1595401:1 Noth - Blink - Category CD', { actions: [{ kind: 'reset_threat', cite: 'boss_noth.cpp:218-219 OnSpellCast blink set → DoResetThreat' }] }),
279
+ t('blink_2', 29209, 25_000, 25_000, 25_000, 25_000, 'self', 'creature_spell_list 1595401:2 Noth - Blink - Category CD', { actions: [{ kind: 'reset_threat', cite: 'boss_noth.cpp:218-219 OnSpellCast blink set → DoResetThreat' }] }),
280
+ t('blink_3', 29210, 25_000, 25_000, 25_000, 25_000, 'self', 'creature_spell_list 1595401:3 Noth - Blink - Category CD', { actions: [{ kind: 'reset_threat', cite: 'boss_noth.cpp:218-219 OnSpellCast blink set → DoResetThreat' }] }),
281
+ t('blink_4', 29211, 25_000, 25_000, 25_000, 25_000, 'self', 'creature_spell_list 1595401:4 Noth - Blink - Category CD', { actions: [{ kind: 'reset_threat', cite: 'boss_noth.cpp:218-219 OnSpellCast blink set → DoResetThreat' }] }),
282
+ t('summon_skeletons', 29252, 12_000, 12_000, 30_000, 30_000, 'self', 'boss_noth.cpp:127,281-285 AddCombatAction(NOTH_SUMMON, 12s); ground branch casts SPELL_SUMMON_SKELETONS then re-arms 30s', { phase: 0 }),
283
+ t('champ_sw', 29217, 0, 0, 0, 0, 'self', 'boss_noth.cpp:185 SW urand 29217/29227 NPC 16983', {
284
+ startDisabled: true, oneShot: true, rotateSpellIds: [29217, 29227],
285
+ }),
286
+ t('champ_nw', 29224, 0, 0, 0, 0, 'self', 'boss_noth.cpp:187 NW urand 29224/29225 NPC 16983', {
287
+ startDisabled: true, oneShot: true, rotateSpellIds: [29224, 29225],
288
+ }),
289
+ t('champ_ne', 29258, 0, 0, 0, 0, 'self', 'boss_noth.cpp:189 NE urand 29258/29262 NPC 16983', {
290
+ startDisabled: true, oneShot: true, rotateSpellIds: [29258, 29262],
291
+ }),
292
+ t('champ_west', 29255, 0, 0, 0, 0, 'self', 'boss_noth.cpp:191 West urand 29255/29257/29267/29238 NPC 16983', {
293
+ startDisabled: true, oneShot: true, rotateSpellIds: [29255, 29257, 29267, 29238],
294
+ }),
295
+ ],
296
+ // ONE balcony trip, not three: boss_noth.cpp:274 disables NOTH_PHASE_GROUND right after the
297
+ // :269-270 re-arm, and BALCONY is never re-enabled, so sub-phases 2 and 3 are unreachable.
298
+ timedPhases: [
299
+ { id: 'balcony_1', phase: 1, afterMs: 90_000, next: 'ground_1', actions: [
300
+ { kind: 'set_unattackable', cite: 'boss_noth.cpp:234-239 SetAIImmobilizedState + UNINTERACTIBLE|IMMUNE_TO_PLAYER' },
301
+ { kind: 'set_melee_enabled', enabled: false, cite: 'boss_noth.cpp:237 SetMeleeEnabled(false)' },
302
+ { kind: 'flavor', text: 'teleports up to the balcony!', cite: 'boss_noth.cpp:228 DoCastSpellIfCan(SPELL_TELEPORT 29216)' },
303
+ { kind: 'arm_timer', timerId: 'champ_sw', delayMs: 0, cite: 'boss_noth.cpp:182-193 DoSummonPlaguedChampions SW' },
304
+ { kind: 'arm_timer', timerId: 'champ_nw', delayMs: 0, cite: 'boss_noth.cpp:182-193 DoSummonPlaguedChampions NW' },
305
+ { kind: 'arm_timer', timerId: 'champ_ne', delayMs: 0, cite: 'boss_noth.cpp:182-193 DoSummonPlaguedChampions NE' },
306
+ { kind: 'arm_timer', timerId: 'champ_west', delayMs: 0, cite: 'boss_noth.cpp:182-193 DoSummonPlaguedChampions West' },
307
+ ], cite: 'boss_noth.cpp:128 AddCombatAction(NOTH_PHASE_BALCONY, 90s)' },
308
+ { id: 'ground_1', phase: 0, afterMs: 70_000, actions: [
309
+ { kind: 'clear_unattackable', cite: 'boss_noth.cpp:260-262 SetAIImmobilizedState(false) + RemoveFlag(UNINTERACTIBLE|IMMUNE_TO_PLAYER)' },
310
+ { kind: 'set_melee_enabled', enabled: true, cite: 'boss_noth.cpp:264 SetMeleeEnabled(true)' },
311
+ { kind: 'flavor', text: 'returns to the floor!', cite: 'boss_noth.cpp:258 DoCastSpellIfCan(SPELL_TELEPORT_RETURN 29231)' },
312
+ ], cite: 'boss_noth.cpp:244 PHASE_SKELETON_1 ResetCombatAction(NOTH_PHASE_GROUND, 70s)' },
313
+ ],
314
+ lifecycle: lifecycleFor(TYPE.NOTH, 'boss_noth.cpp:124'),
315
+ cites: [
316
+ 'boss_noth.cpp:28-353 whole file',
317
+ 'creature_spell_list_entry 1595401 "Naxxramas - Noth"',
318
+ 'boss_noth.cpp:226-255 NOTH_PHASE_BALCONY; :256-278 NOTH_PHASE_GROUND',
319
+ 'boss_noth.cpp:181-193 DoSummonPlaguedChampions first balcony 4 corners NPC 16983 (waves 2-3 unreachable)',
320
+ 'boss_noth.cpp:321-331 SummonSkeletonsNoth 29252 tick -> 29247/29248/29249',
321
+ ],
322
+ };
323
+
324
+ // The plague wave order, verbatim. Six steps, not four: 30117 and 30118 each come round twice. Cite:
325
+ // boss_heigan.cpp:280-290 PlagueWaveController.
326
+ const WAVE_CYCLE = [
327
+ { step: 0, spellId: 30116 },
328
+ { step: 1, spellId: 30117 },
329
+ { step: 2, spellId: 30118 },
330
+ { step: 3, spellId: 30119 },
331
+ { step: 4, spellId: 30118 },
332
+ { step: 5, spellId: 30117 },
333
+ ];
334
+
335
+ // boss_heigan (+ npc_diseased_maggot, registered by the same cpp)
336
+ // ---------------------------------------------------------------------------
337
+ export const BOSS_HEIGAN: ScriptDevIR = {
338
+ name: 'boss_heigan',
339
+ boundCreatures: [NPC.HEIGAN],
340
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_heigan.cpp',
341
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
342
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
343
+ spellIds: [29310, 29998, 29499, 30211, 29273, 29350, 29351, 30114, 30122, 30116, 30117, 30118, 30119],
344
+ timers: [
345
+ // phase 0 only: the platform phase channels 29350, and a channel makes CanCastSpell()
346
+ // false — see the header. All three rows are TargetId 0 (the spell picks its targets).
347
+ t('mana_burn', 29310, 5000, 5000, 10_000, 10_000, 'self', 'creature_spell_list 1593601:0 Heigan - Mana Burn, TargetId 0 = None', { phase: 0 }),
348
+ t('decrepit_fever', 29998, 4000, 4000, 21_000, 21_000, 'self', 'creature_spell_list 1593601:1 Heigan - Decrepit Fever', { phase: 0 }),
349
+ t('teleport_trigger', 29499, 35_000, 45_000, 35_000, 45_000, 'self', 'creature_spell_list 1593601:2 Heigan - Teleport Trigger (3 targets -> 29273; both bake holes)', { phase: 0 }),
350
+ t('heigan_taunt', 0, 25_000, 90_000, 25_000, 90_000, 'self', 'boss_heigan.cpp:91 AddCombatAction(HEIGAN_TAUNT, 25u * IN_MILLISECONDS, 90u * IN_MILLISECONDS); :213-221 case HEIGAN_TAUNT: switch (urand(0, 3)) DoBroadcastText', {
351
+ phase: 0,
352
+ pollOnly: true,
353
+ actions: [{ kind: 'yell', textIds: [13046, 13047, 13048, 13050], cite: 'boss_heigan.cpp:213-221 case HEIGAN_TAUNT: switch (urand(0, 3)) DoBroadcastText' }],
354
+ }),
355
+ // THE DANCE. The controller aura walks six steps {30116,30117,30118,30119,30118,30117}, so a
356
+ // four-timer cycle would be a 40 s invention. Ground amplitude is 10 s, the platform's 3 s.
357
+ ...WAVE_CYCLE.flatMap(({ step, spellId }) => [
358
+ t(
359
+ `wave_ground_${step}`, spellId, step * 10_000, step * 10_000, 60_000, 60_000, 'self',
360
+ 'boss_heigan.cpp:280-290 PlagueWaveController step '
361
+ + `${step} of 6; 29351 amplitude 10000 on the ground`,
362
+ { phase: 0 },
363
+ ),
364
+ t(
365
+ `wave_platform_${step}`, spellId, step * 3000, step * 3000, 18_000, 18_000, 'self',
366
+ 'boss_heigan.cpp:280-290 PlagueWaveController step '
367
+ + `${step} of 6; 30114 amplitude 3000 while he channels`,
368
+ { phase: 1 },
369
+ ),
370
+ ]),
371
+ t('close_entrance', 29350, 15_000, 15_000, 0, 0, 'self', 'boss_heigan.cpp:124 ResetTimer(HEIGAN_DOOR, 15s) -> CloseEntrance GO 181202', {
372
+ pollOnly: true,
373
+ oneShot: true,
374
+ actions: [{
375
+ kind: 'close_door',
376
+ goEntry: 181202,
377
+ cite: 'boss_heigan.cpp:190-197 CloseEntrance SetGoState(GO_STATE_READY); naxxramas.h:134 GO_PLAG_HEIG_ENTRY_DOOR 181202',
378
+ }],
379
+ }),
380
+ ],
381
+ // A clock, not a health bar: 90 s on the ground, 45 s on the platform, forever.
382
+ timedPhases: [
383
+ {
384
+ id: 'platform',
385
+ phase: 1,
386
+ afterMs: 90_000,
387
+ next: 'ground',
388
+ actions: [
389
+ { kind: 'set_melee_enabled', enabled: false, cite: 'boss_heigan.cpp:162 SetMeleeEnabled(false)' },
390
+ { kind: 'yell', textId: 13049, cite: 'boss_heigan.cpp:201 HandleChanneling DoBroadcastText(SAY_CHANNELING)' },
391
+ // THE CHANNEL. 29350 Plague Cloud is a 45 s proc host firing 30122 every 5 s — nine 4k
392
+ // nature pulses. The tree resolves it as an AURA, so it does not gate his other casts.
393
+ { kind: 'cast_self', spellId: 29350, cite: 'boss_heigan.cpp:203 DoCastSpellIfCan(nullptr, SPELL_PLAGUE_CLOUD)' },
394
+ { kind: 'flavor', text: 'leaps to his platform and starts channeling - run the dance!', cite: 'boss_heigan.cpp:157-171 HandlePlatformPhase 30211 + :202 SPELL_PLAGUE_CLOUD 29350' },
395
+ ],
396
+ cite: 'boss_heigan.cpp:90 AddCombatAction(HEIGAN_PHASE_PLATFORM, 90s); :225-230 ExecuteAction -> HandlePlatformPhase',
397
+ },
398
+ {
399
+ id: 'ground',
400
+ phase: 0,
401
+ afterMs: 45_000,
402
+ next: 'platform',
403
+ actions: [
404
+ { kind: 'arm_timer', timerId: 'heigan_taunt', delayMs: 5000, cite: 'boss_heigan.cpp:145-146 for (uint32 action : {HEIGAN_TAUNT}) ResetCombatAction(action, 5000)' },
405
+ { kind: 'set_melee_enabled', enabled: true, cite: 'boss_heigan.cpp:150 SetMeleeEnabled(true)' },
406
+ { kind: 'flavor', text: 'drops back to the floor.', cite: 'boss_heigan.cpp:143-155 HandleGroundPhase' },
407
+ ],
408
+ cite: 'boss_heigan.cpp:170 ResetTimer(HEIGAN_PHASE_GROUND, 45s); :154 back to 90s platform',
409
+ },
410
+ ],
411
+ lifecycle: lifecycleFor(TYPE.HEIGAN, 'boss_heigan.cpp:86'),
412
+ leashXGt: 2825,
413
+ leashHomeYd: 90,
414
+ cites: [
415
+ 'boss_heigan.cpp:30-323 whole file',
416
+ 'creature_spell_list_entry 1593601 "Naxxramas - Heigan"',
417
+ 'boss_heigan.cpp:92,173-188 StartEruptions -> NPC 17293 casts 29351 (slow) / 30114 (fast); the cycle runs off Heigan own timers here, so the CASTER of record is the only difference (src/dev/smoke/heiganDance.mjs)',
418
+ 'boss_heigan.cpp:280-290 PlagueWaveController {30116,30117,30118,30119,30118,30117} per tick - the six wave_ground_/wave_platform_ rows above; the fissures are type-6 traps casting 29371 Eruption',
419
+ 'boss_heigan.cpp:62,80-85 leash x > 2825 or >90 yd from spawn',
420
+ 'boss_heigan.cpp:124,190-197 entrance door GO 181202 closes 15 s after aggro',
421
+ ],
422
+ };
423
+
424
+ export const NPC_DISEASED_MAGGOT: ScriptDevIR = {
425
+ name: 'npc_diseased_maggot',
426
+ boundCreatures: [NPC.DISEASED_MAGGOT, NPC.ROTTING_MAGGOT],
427
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_heigan.cpp',
428
+ spellIds: [],
429
+ // No timers by design: the whole script is a 3 s proximity force-evade.
430
+ timers: [],
431
+ cites: [
432
+ 'boss_heigan.cpp:237-276 npc_diseased_maggotAI; :316-319 RegisterSelf',
433
+ 'boss_heigan.cpp:264-272 3 s poll: NPC_WORLD_TRIGGER 15384 within 45 yd -> EnterEvadeMode - GAP',
434
+ 'creature_template 16056 Diseased Maggot / 16057 Rotting Maggot ScriptName npc_diseased_maggot',
435
+ ],
436
+ };
437
+
438
+ // boss_loatheb — the only creature in this wing with a second spell list
439
+ export const BOSS_LOATHEB: ScriptDevIR = {
440
+ name: 'boss_loatheb',
441
+ boundCreatures: [NPC.LOATHEB],
442
+ sourceFile: 'eastern_kingdoms/naxxramas/boss_loatheb.cpp',
443
+ // Trigger payloads ride the KIT: stepSession resolves a periodic trigger off
444
+ // spec.spells, so a payload missing here delivers nothing (moltenCore.ts:88 same rule).
445
+ spellIds: [29865, 29234, 29201, 29204, 30281, 29185, 29194, 29196, 29198, 29184, 29195, 29197, 29199],
446
+ timers: [
447
+ // ---- PHASE 0, list 1601101 (SPELLSET_LOATHEB) ----
448
+ t('poison_aura', 29865, 5000, 5000, 12_000, 12_000, 'self', 'creature_spell_list 1601101:1 Loatheb - Poison Aura, TargetId 0 = None', { phase: 0 }),
449
+ t('summon_spore', 29234, 12_000, 12_000, 12_000, 12_000, 'self', 'creature_spell_list 1601101:2 Loatheb - Summon Spore', { phase: 0 }),
450
+ t('corrupted_mind', 29201, 4000, 4000, 60_000, 60_000, 'self', 'creature_spell_list 1601101:3 Loatheb - Corrupted Mind', { phase: 0 }),
451
+ t('inevitable_doom', 29204, 120_000, 120_000, 30_000, 30_000, 'self', 'creature_spell_list 1601101:4 Loatheb - Inevitable Doom (P1)', { phase: 0 }),
452
+ t('decurse', 30281, 30_000, 30_000, 30_000, 30_000, 'self', 'creature_spell_list 1601101:5 Loatheb - Decurse', { phase: 0 }),
453
+ // ---- PHASE 1, list 1601102 (SPELLSET_LOATHEB_P2): Doom doubles, the rest re-arm at 0 ----
454
+ t('poison_aura_p2', 29865, 0, 0, 12_000, 12_000, 'self', 'creature_spell_list 1601102:1 Loatheb - Poison Aura (P2)', { phase: 1 }),
455
+ t('summon_spore_p2', 29234, 0, 0, 12_000, 12_000, 'self', 'creature_spell_list 1601102:2 Loatheb - Summon Spore (P2)', { phase: 1 }),
456
+ t('corrupted_mind_p2', 29201, 0, 0, 60_000, 60_000, 'self', 'creature_spell_list 1601102:3 Loatheb - Corrupted Mind (P2)', { phase: 1 }),
457
+ t('inevitable_doom_p2', 29204, 0, 0, 15_000, 15_000, 'self', 'creature_spell_list 1601102:4 Loatheb - Inevitable Doom(P2) - 30s -> 15s', { phase: 1 }),
458
+ t('decurse_p2', 30281, 30_000, 30_000, 30_000, 30_000, 'self', 'creature_spell_list 1601102:5 Loatheb - Decurse (P2, unchanged)', { phase: 1 }),
459
+ ],
460
+ timedPhases: [
461
+ {
462
+ id: 'soft_enrage',
463
+ phase: 1,
464
+ afterMs: 300_000,
465
+ actions: [{ kind: 'flavor', text: "'s doom quickens!", cite: 'boss_loatheb.cpp:80 SetSpellList(SPELLSET_LOATHEB_P2)' }],
466
+ cite: 'boss_loatheb.cpp:55,78-82 AddCombatAction(LOATHEB_SOFT_ENRAGE, 5min) -> SetSpellList(1601102)',
467
+ },
468
+ ],
469
+ lifecycle: {
470
+ ...lifecycleFor(TYPE.LOATHEB, 'boss_loatheb.cpp:54'),
471
+ justSummoned: [{
472
+ kind: 'attack_summoner',
473
+ creatureEntry: 16286,
474
+ cite: 'boss_loatheb.cpp:66-72 JustSummoned NPC_SPORE 16286 AttackStart(m_creature)',
475
+ }],
476
+ },
477
+ cites: [
478
+ 'boss_loatheb.cpp:30-127 whole file',
479
+ 'creature_spell_list_entry 1601101 "Naxxramas - Loatheb", 1601102 "Naxxramas - Loatheb(P2)"',
480
+ 'boss_loatheb.cpp:89-117 CorruptedMind 29201 -> 29196/29185/29198/29194 -> 29197/29184/29199/29195 aura 112 script 4327',
481
+ 'boss_loatheb.cpp:66-72 JustSummoned NPC_SPORE 16286 AttackStart(Loatheb)',
482
+ ],
483
+ };
484
+
485
+ export const NPC_STONESKIN_GARGOYLE_ENTRY = 16168;
486
+
487
+ /** TryStoneForm: IDLE_MOTION_TYPE only; missing MovementType is a GAP. Cite: naxxramas.cpp:995 */
488
+ export function allowStoneskinGargoyleStoneForm(
489
+ entry: number,
490
+ movementType: number | undefined,
491
+ ): boolean {
492
+ if ((entry | 0) !== NPC_STONESKIN_GARGOYLE_ENTRY) return true;
493
+ return movementType === 0;
494
+ }
495
+
496
+ export const NPC_STONESKIN_GARGOYLE: ScriptDevIR = {
497
+ name: 'npc_stoneskin_gargoyle',
498
+ boundCreatures: [NPC_STONESKIN_GARGOYLE_ENTRY],
499
+ sourceFile: 'eastern_kingdoms/naxxramas/naxxramas.cpp',
500
+ spellIds: [28995, 29325, 29154, 18950],
501
+ timers: [
502
+ t('acid_volley', 29325, 4000, 4000, 8000, 8000, 'self', 'naxxramas.cpp:986 acidVolleyTimer=4000; :1057-1060 CAST_OK re-arm 8000 (only idle-spawn / low-Z gargoyles)'),
503
+ t('stoneskin', 28995, 0, 0, 0, 0, 'self', 'naxxramas.cpp:1048-1051 Stoneskin at <30% HP', { hpPctMax: 30 }),
504
+ ],
505
+ lifecycle: {
506
+ onReset: [
507
+ { kind: 'cast_self', spellId: 29154, cite: 'naxxramas.cpp:994-1002 TryStoneForm SPELL_STONEFORM 29154 OOC' },
508
+ { kind: 'set_unattackable', cite: 'naxxramas.cpp:994-1002 TryStoneForm SPELL_STONEFORM 29154 OOC' },
509
+ ],
510
+ onAggro: [
511
+ { kind: 'clear_unattackable', cite: 'naxxramas.cpp:1027-1032 Aggro clear UNIT_FLAG_UNINTERACTIBLE' },
512
+ ],
513
+ },
514
+ cites: [
515
+ 'naxxramas.cpp:960-1068 npc_stoneskin_gargoyleAI',
516
+ 'naxxramas.cpp:994-1002 TryStoneForm SPELL_STONEFORM 29154 OOC — IDLE_MOTION_TYPE only; missing spawn MovementType is a GAP',
517
+ 'naxxramas.cpp:1010-1022 MoveInLineOfSight player <17.0f while UNINTERACTIBLE → AttackStart',
518
+ ],
519
+ };
520
+
521
+ // Melee off, no AttackStart: PRESENCE is the only thing it can react to, and standing on one is how
522
+ // a raider dies to it. Without the proximity answer it was a harmless prop on the floor.
523
+ export const NPC_LIVING_POISON: ScriptDevIR = {
524
+ name: 'npc_living_poison',
525
+ boundCreatures: [16027],
526
+ sourceFile: 'eastern_kingdoms/naxxramas/naxxramas.cpp',
527
+ spellIds: [28433],
528
+ timers: [],
529
+ lifecycle: {
530
+ onReset: [
531
+ { kind: 'set_melee_enabled', enabled: false, cite: 'naxxramas.cpp:1078-1081 Reset SetMeleeEnabled(false)' },
532
+ ],
533
+ },
534
+ proximityTriggers: [{
535
+ withinYd: 4,
536
+ once: true,
537
+ actions: [
538
+ // The C++ self-casts it, and 28433's own pbaoe radius is what hurts the raider standing on it —
539
+ // `cast_self` would hand the whole 28-31 k to the poison and to nobody else.
540
+ { kind: 'damage_in_radius', spellId: 28433, cite: 'naxxramas.cpp:1089 DoCastSpellIfCan(m_creature, SPELL_EXPLODE 28433, CAST_TRIGGERED); spell_template 28433 direct_damage nature 28125-31875 radiusYd 5 pbaoe' },
541
+ { kind: 'force_despawn', cite: 'naxxramas.cpp:1084-1090 the explode kills it - "explode and kill itself while doing heavy AoE damage to the player"' },
542
+ ],
543
+ cite: 'naxxramas.cpp:1084-1089 MoveInLineOfSight GetDistance2d(who, DIST_CALC_BOUNDING_RADIUS) > 4.0f -> return',
544
+ }],
545
+ cites: [
546
+ 'naxxramas.cpp:1074-1093 npc_living_poisonAI; naxxramas.h:208 SPELL_EXPLODE 28433',
547
+ 'naxxramas.cpp:1084-1089 MoveInLineOfSight player <4 yd -> explode CAST_TRIGGERED via proximityTriggers',
548
+ 'naxxramas.cpp:1092 AttackStart is an empty override, so it never picks a victim of its own',
549
+ ],
550
+ };
551
+
552
+ export const AT_NAXXRAMAS: ScriptDevIR = {
553
+ name: 'at_naxxramas',
554
+ boundCreatures: [],
555
+ sourceFile: 'eastern_kingdoms/naxxramas/naxxramas.cpp',
556
+ spellIds: [],
557
+ timers: [],
558
+ cites: [
559
+ 'naxxramas.cpp:1095-1143 AreaTrigger_at_naxxramas — Kel\'Thuzad / Faerlina intro / Thaddius door / frostwyrm tele',
560
+ ],
561
+ };
562
+
563
+ export const EVENT_NAXXRAMAS: ScriptDevIR = {
564
+ name: 'event_naxxramas',
565
+ boundCreatures: [],
566
+ sourceFile: 'eastern_kingdoms/naxxramas/naxxramas.cpp',
567
+ spellIds: [],
568
+ timers: [],
569
+ cites: [
570
+ 'naxxramas.cpp:1145-1151 ProcessEventId_naxxramas → instance DoHandleEvent',
571
+ ],
572
+ };
573
+
574
+ export const NAXXRAMAS_ARACHNID_PLAGUE_IRS: readonly ScriptDevIR[] = [
575
+ BOSS_ANUBREKHAN, GO_ANUB_DOOR, BOSS_FAERLINA, BOSS_MAEXXNA, NPC_WEB_WRAP, NPC_INVISIBLE_MAN,
576
+ BOSS_NOTH, BOSS_HEIGAN, NPC_DISEASED_MAGGOT, BOSS_LOATHEB,
577
+ ];