azeroth-shell 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +35 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +144 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,980 @@
1
+ // Dire Maul East wing (map 429) — InstanceDef graph, bosses y ≲ −198 only (Pusillin → Alzzin).
2
+ // Authority: docs/dungeons/survey/17-dire-maul.md, which carries the residual GAPS list.
3
+
4
+ import type { EncounterDef, EncounterEvent, InstanceDef } from '../schema.ts';
5
+ import { dungeonGameObjectsForMap } from '../dungeonGameObjects.ts';
6
+ import {
7
+ entranceForInstance,
8
+ buildClusterEncounters,
9
+ wingFilterByNearestBoss,
10
+ } from './pack-from-clusters.ts';
11
+ import {
12
+ ALZZIN_SPECIAL_HP_PCT,
13
+ GO_CORRUPT_VINE,
14
+ GO_CRUMBLE_WALL,
15
+ GO_FELVINE_SHARD,
16
+ } from '../../domain/scriptdev/direMaul.ts';
17
+
18
+ // ---- East wing trash (survey avg pos y ≲ −198 / East section) ----
19
+ // Census static / expected, fractional pool rows rounded. West, North and seasonal rows excluded.
20
+
21
+ const STATIC = {
22
+ phaseLasher: 10, // 13196 Phase Lasher (pool) - census 10
23
+ warpwoodTreant: 13, // 11462 Warpwood Treant (pool) - census 13
24
+ warpwoodTangler: 7, // 11464 Warpwood Tangler (pool) - census 7
25
+ felLash: 9, // 13197 Fel Lash (pool) - Math.round(8.5)
26
+ deathLash: 13, // 13285 Death Lash (pool) - Math.round(12.5)
27
+ whipLasher: 134, // 13022 Whip Lasher
28
+ warpwoodStomper: 5, // 11465 Warpwood Stomper
29
+ warpwoodGuardian: 10, // 11461 Warpwood Guardian
30
+ warpwoodCrusher: 13, // 13021 Warpwood Crusher
31
+ wildspawnSatyr: 14, // 11451 Wildspawn Satyr
32
+ wildspawnBetrayer: 7, // 11454 Wildspawn Betrayer
33
+ wildspawnFelsworn: 6, // 11455 Wildspawn Felsworn
34
+ wildspawnShadowstalker: 8, // 11456 Wildspawn Shadowstalker
35
+ wildspawnRogue: 8, // 11452 Wildspawn Rogue
36
+ wildspawnTrickster: 7, // 11453 Wildspawn Trickster
37
+ wildspawnHellcaller: 4, // 11457 Wildspawn Hellcaller
38
+ wildspawnImp: 20, // 13276 Wildspawn Imp (static; +4 event on Pusillin)
39
+ } as const;
40
+
41
+ const ENTRY = {
42
+ phaseLasher: 13196,
43
+ warpwoodTreant: 11462,
44
+ warpwoodTangler: 11464,
45
+ felLash: 13197,
46
+ deathLash: 13285,
47
+ whipLasher: 13022,
48
+ warpwoodStomper: 11465,
49
+ warpwoodGuardian: 11461,
50
+ warpwoodCrusher: 13021,
51
+ wildspawnSatyr: 11451,
52
+ wildspawnBetrayer: 11454,
53
+ wildspawnFelsworn: 11455,
54
+ wildspawnShadowstalker: 11456,
55
+ wildspawnRogue: 11452,
56
+ wildspawnTrickster: 11453,
57
+ wildspawnHellcaller: 11457,
58
+ wildspawnImp: 13276,
59
+ // Bosses (survey East order - y ≲ −198)
60
+ pusillin: 14354,
61
+ zevrim: 11490,
62
+ hydrospawn: 13280,
63
+ lehtendris: 14327,
64
+ alzzin: 11492,
65
+ // Boss-adjacent static / summon-only
66
+ pimgib: 14349, // Lethtendris companion (static ×1; pack on boss)
67
+ alzzinMinion: 11460, // summon-only at 40% (×15)
68
+ isalien: 16097, // T0.5 optional — Brazier of Beckoning at Alzzin's room
69
+ // EXCLUDED: Revanchion 14690 (D-10); West/North bosses; Old Ironbark 11491 (friendly)
70
+ } as const;
71
+
72
+ /** Instance flags (string form for DSL). */
73
+ export const DIRE_MAUL_EAST_FLAGS = {
74
+ /** TYPE_ZEVRIM DONE — morphs Old Ironbark → Redeemed (gossipable). */
75
+ zevrimDone: 'dire-maul-east-zevrim-done',
76
+ // TYPE_IRONBARK DONE — Conservatory Door 176907 open. Cite: dire_maul.h:45; instance_dire_maul.cpp
77
+ // :127-129, :227-228; classic-db dbscripts_on_creature_movement 1424101 @9s.
78
+ ironbarkDoor: 'dire-maul-east-ironbark-door',
79
+ // TYPE_ALZZIN SPECIAL — Crumble Wall GO 177220 open (exit shortcut). Cite: acid_classic.sql:15013 1149214
80
+ // HP≤40 → SET_INST_DATA(0,4); instance_dire_maul.cpp:247-250 DoUseDoorOrButton(GO_CRUMBLE_WALL).
81
+ alzzinCrumbleWall: 'dire-maul-east-alzzin-crumble-wall',
82
+ // TYPE_ALZZIN DONE → Corrupt Vine 179502 open + Felvine Shard 179559 respawn. Cite:
83
+ // instance_dire_maul.cpp:231-244; acid_classic.sql:15020 1149221.
84
+ alzzinDone: 'dire-maul-east-alzzin-done',
85
+ /** 5th gossip done: spell 22735 + faction 90 hostile. Cite: classic-db dbscripts_on_gossip 570905. */
86
+ pusillinHostile: 'dme-pusillin-hostile',
87
+ /** Isalien T0.5 summoned (Brazier of Beckoning used at focus 181047). */
88
+ isalien: 'dire-maul-east-isalien',
89
+ /** Crescent Key 18249 on lock-1562 doors (see DM_EAST_CRESCENT_DOORS). */
90
+ crescentKey: 'dme-crescent-key-doors',
91
+ } as const;
92
+
93
+ // Isalien Tier 0.5 optional summon (LBRS Mor Grayhoof / UBRS Valthalak pattern). The room is
94
+ // Alzzin's, in East. Cite: GO 181047; spawn guid 4291063 entry 16045; item 22050; boss 16097.
95
+ export const DM_EAST_ISALIEN = {
96
+ encId: 'isalien',
97
+ goEntry: 181047, // Isalien Brazier Spell Focus
98
+ requiredItem: 22050, // Brazier of Beckoning
99
+ triggerEntry: 16045,
100
+ bossEntry: 16097,
101
+ spawn: { x: 262.09, y: -445.745, z: -119.878 },
102
+ } as const;
103
+
104
+ // Crescent Key doors that spawn on map 429. Templates 177188/89/92/98 are lock 1562
105
+ // but have no gameobject row. Cite: dire_maul.h:69-70; bake map 429.
106
+ export const DM_EAST_CRESCENT_DOORS = {
107
+ lockId: 1562,
108
+ goEntry: 177221,
109
+ goEntries: [177221, 179549, 179550] as const,
110
+ requiredItem: 18249,
111
+ /** locks.json 1562 LOCKTYPE_PICKLOCK skill. */
112
+ picklockSkill: 300,
113
+ } as const;
114
+
115
+ /** Flag after gossip N completed (1..4). Cite: gossip scripts 570901–04 → next pause WP. */
116
+ export function dmEastPusillinStopFlag(n: number): string {
117
+ return `dme-pusillin-stop-${n}`;
118
+ }
119
+
120
+ // Alzzin 40% wave + Crumble Wall SPECIAL. Cite: acid_classic.sql:15012-15019 EVENT_T_HP param1=40; 1149214
121
+ // SET_INST_DATA SPECIAL; instance_dire_maul.cpp:247-250 GO_CRUMBLE_WALL 177220.
122
+ export const DIRE_MAUL_EAST_ALZZIN_MINIONS = {
123
+ creatureEntry: ENTRY.alzzinMinion,
124
+ count: 15,
125
+ pct: ALZZIN_SPECIAL_HP_PCT,
126
+ } as const;
127
+
128
+ /** Crumble Wall / Corrupt Vine / Felvine — bake entries for go-opened / reveal. */
129
+ export const DM_EAST_ALZZIN_GOS = {
130
+ crumbleWall: GO_CRUMBLE_WALL,
131
+ corruptVine: GO_CORRUPT_VINE,
132
+ felvineShard: GO_FELVINE_SHARD,
133
+ mapId: 429,
134
+ } as const;
135
+
136
+ /** Run flag `go-opened:<guid>` — same seam as livePullLifecycle / doorObjectPins. */
137
+ export function dmEastGoOpenedFlag(guid: number): string {
138
+ return `go-opened:${guid}`;
139
+ }
140
+
141
+ function dmEastAppendGoOpened(flags: readonly string[], goEntry: number): string[] {
142
+ let next = [...flags];
143
+ for (const go of dungeonGameObjectsForMap(DM_EAST_ALZZIN_GOS.mapId)) {
144
+ if (go.entry !== goEntry) continue;
145
+ const f = dmEastGoOpenedFlag(go.guid);
146
+ if (!next.includes(f)) next = [...next, f];
147
+ }
148
+ return next;
149
+ }
150
+
151
+ export function dmEastCrumbleWallOpen(flags: readonly string[]): boolean {
152
+ return flags.includes(DIRE_MAUL_EAST_FLAGS.alzzinCrumbleWall)
153
+ || flags.includes(DIRE_MAUL_EAST_FLAGS.alzzinDone);
154
+ }
155
+
156
+ // TYPE_ALZZIN SPECIAL — open Crumble Wall 177220 (DoUseDoorOrButton), idempotent. Caller:
157
+ // livePullLifecycle.tickAlzzinCrumbleWall. Cite: instance_dire_maul.cpp:247-250.
158
+ export function dmEastOpenCrumbleWall(flags: readonly string[]): string[] {
159
+ let next = [...flags];
160
+ if (!next.includes(DIRE_MAUL_EAST_FLAGS.alzzinCrumbleWall)) {
161
+ next = [...next, DIRE_MAUL_EAST_FLAGS.alzzinCrumbleWall];
162
+ }
163
+ return dmEastAppendGoOpened(next, GO_CRUMBLE_WALL);
164
+ }
165
+
166
+ // TYPE_ALZZIN DONE — wall (if still closed) + Corrupt Vine 179502 + Felvine reveal flag. Cite:
167
+ // instance_dire_maul.cpp:231-244; acid_classic.sql:15020.
168
+ export function dmEastApplyAlzzinDone(flags: readonly string[]): string[] {
169
+ let next = dmEastOpenCrumbleWall(flags);
170
+ if (!next.includes(DIRE_MAUL_EAST_FLAGS.alzzinDone)) {
171
+ next = [...next, DIRE_MAUL_EAST_FLAGS.alzzinDone];
172
+ }
173
+ return dmEastAppendGoOpened(next, GO_CORRUPT_VINE);
174
+ }
175
+
176
+ /** Survey: Pusillin 5th gossip summons 4× Wildspawn Imp 13276 (fight adds; not static). */
177
+ export const DIRE_MAUL_EAST_PUSILLIN_IMPS = {
178
+ creatureEntry: ENTRY.wildspawnImp,
179
+ count: 4,
180
+ /** Despawn ms. Cite: dbscripts_on_gossip 570905 cmd 10 datalong2=120000. */
181
+ despawnMs: 120_000,
182
+ } as const;
183
+
184
+ // Pusillin multi-stop chase. Cite: creature_movement_template 14354 (pause WPs 1/9/19/32/38);
185
+ // gossip_menu 5709 → dbscripts_on_gossip 570901–05; conditions type 33 value1=waypoint.
186
+ export type DmEastPusillinStop = {
187
+ /** 0-based gossip stage (matches gossip_menu_option id). */
188
+ stage: number;
189
+ /** Pause waypoint point id. */
190
+ wp: number;
191
+ x: number;
192
+ y: number;
193
+ z: number;
194
+ gossipScriptId: number;
195
+ optionId: number;
196
+ conditionId: number;
197
+ optionText: string;
198
+ sayBroadcastId: number;
199
+ sayText: string;
200
+ };
201
+
202
+ export const DM_EAST_PUSILLIN_CHASE = {
203
+ entry: ENTRY.pusillin,
204
+ encId: 'pusillin',
205
+ gossipMenuId: 5709,
206
+ /** Spell Spirit of Redemption-style transform stand-in. Cite: 570905 cmd 15. */
207
+ transformSpellId: 22735,
208
+ /** Demon faction after transform. Cite: 570905 cmd 22. */
209
+ hostileFaction: 90,
210
+ crescentKeyItem: 18249,
211
+ /** creature_loot_template 14354 chance 100. */
212
+ crescentKeyChance: 100,
213
+ impEntry: ENTRY.wildspawnImp,
214
+ impCount: 4,
215
+ impDespawnMs: 120_000,
216
+ /** Summon coords from 570905 cmd 10 rows. */
217
+ impSpawns: [
218
+ { x: 14.7965, y: -696.322, z: -12.6426 },
219
+ { x: 18.8891, y: -697.389, z: -12.6426 },
220
+ { x: 21.4274, y: -700.227, z: -12.6426 },
221
+ { x: 22.2017, y: -705.459, z: -12.6426 },
222
+ ] as const,
223
+ stops: [
224
+ {
225
+ stage: 0,
226
+ wp: 1,
227
+ x: 86.1935,
228
+ y: -197.888,
229
+ z: -4.05657,
230
+ gossipScriptId: 570901,
231
+ optionId: 0,
232
+ conditionId: 389,
233
+ optionText: 'Game? Are you crazy?',
234
+ sayBroadcastId: 9349,
235
+ sayText: "If you want the key, you'll have to catch me!",
236
+ },
237
+ {
238
+ stage: 1,
239
+ wp: 9,
240
+ x: -150.171,
241
+ y: -278.348,
242
+ z: -4.14787,
243
+ gossipScriptId: 570902,
244
+ optionId: 1,
245
+ conditionId: 720,
246
+ optionText: 'Why you little...',
247
+ sayBroadcastId: 9353,
248
+ sayText: 'Chase me if you dare! I run without a care!',
249
+ },
250
+ {
251
+ stage: 2,
252
+ wp: 19,
253
+ x: 107.902,
254
+ y: -355.904,
255
+ z: -4.12403,
256
+ gossipScriptId: 570903,
257
+ optionId: 2,
258
+ conditionId: 390,
259
+ optionText: 'Mark my words, I will catch you, imp. And when I do!',
260
+ sayBroadcastId: 9357,
261
+ sayText: 'Why would you ever want to harm me!? Come. Friends we can be!',
262
+ },
263
+ {
264
+ stage: 3,
265
+ wp: 32,
266
+ x: 50.4384,
267
+ y: -631.018,
268
+ z: -25.1082,
269
+ gossipScriptId: 570904,
270
+ optionId: 3,
271
+ conditionId: 722,
272
+ optionText: 'DIE!',
273
+ sayBroadcastId: 9360,
274
+ sayText: 'DIE?! You make Pusillin cry!',
275
+ },
276
+ {
277
+ stage: 4,
278
+ wp: 38,
279
+ x: 12.7601,
280
+ y: -706.167,
281
+ z: -12.6426,
282
+ gossipScriptId: 570905,
283
+ optionId: 4,
284
+ conditionId: 723,
285
+ optionText: 'Prepare to meet your maker.',
286
+ sayBroadcastId: 9363,
287
+ sayText: 'Say hello to my little friends!',
288
+ },
289
+ ] as const satisfies readonly DmEastPusillinStop[],
290
+ } as const;
291
+
292
+ /** Gossips completed (0..5). 5 = hostile at final stop. */
293
+ export function dmEastPusillinGossipDone(flags: readonly string[]): number {
294
+ if (flags.includes(DIRE_MAUL_EAST_FLAGS.pusillinHostile)) return 5;
295
+ for (let i = 4; i >= 1; i--) {
296
+ if (flags.includes(dmEastPusillinStopFlag(i))) return i;
297
+ }
298
+ return 0;
299
+ }
300
+
301
+ /** Stop index he currently occupies (0..4). */
302
+ export function dmEastPusillinCurrentStop(flags: readonly string[]): number {
303
+ return Math.min(dmEastPusillinGossipDone(flags), 4);
304
+ }
305
+
306
+ export function dmEastPusillinCanFight(flags: readonly string[]): boolean {
307
+ return flags.includes(DIRE_MAUL_EAST_FLAGS.pusillinHostile);
308
+ }
309
+
310
+ /** Crescent Key only after final gossip (fight). Negative: earlier gossips do not unlock loot. */
311
+ export function dmEastPusillinDropsCrescentKey(flags: readonly string[]): boolean {
312
+ return dmEastPusillinCanFight(flags);
313
+ }
314
+
315
+ export function dmEastPusillinPose(flags: readonly string[]): {
316
+ x: number;
317
+ y: number;
318
+ z: number;
319
+ wp: number;
320
+ } {
321
+ const stop = DM_EAST_PUSILLIN_CHASE.stops[dmEastPusillinCurrentStop(flags)]!;
322
+ return { x: stop.x, y: stop.y, z: stop.z, wp: stop.wp };
323
+ }
324
+
325
+ // Apply one gossip stage. Returns null when already hostile or out of stages. After stage 0–3: mark stop N
326
+ // complete and move to next pause WP. After stage 4: set hostile (fight + key).
327
+ export function dmEastAdvancePusillinGossip(flags: readonly string[]): {
328
+ flags: string[];
329
+ sayText: string;
330
+ optionText: string;
331
+ pose: { x: number; y: number; z: number; wp: number };
332
+ becameHostile: boolean;
333
+ stage: number;
334
+ } | null {
335
+ const done = dmEastPusillinGossipDone(flags);
336
+ if (done >= 5) return null;
337
+ const stage = done;
338
+ const stop = DM_EAST_PUSILLIN_CHASE.stops[stage]!;
339
+ const next = [...flags];
340
+ let pose: { x: number; y: number; z: number; wp: number };
341
+ let becameHostile = false;
342
+ if (stage < 4) {
343
+ const fl = dmEastPusillinStopFlag(stage + 1);
344
+ if (!next.includes(fl)) next.push(fl);
345
+ const dest = DM_EAST_PUSILLIN_CHASE.stops[stage + 1]!;
346
+ pose = { x: dest.x, y: dest.y, z: dest.z, wp: dest.wp };
347
+ } else {
348
+ if (!next.includes(DIRE_MAUL_EAST_FLAGS.pusillinHostile)) {
349
+ next.push(DIRE_MAUL_EAST_FLAGS.pusillinHostile);
350
+ }
351
+ becameHostile = true;
352
+ pose = { x: stop.x, y: stop.y, z: stop.z, wp: stop.wp };
353
+ }
354
+ return {
355
+ flags: next,
356
+ sayText: stop.sayText,
357
+ optionText: stop.optionText,
358
+ pose,
359
+ becameHostile,
360
+ stage,
361
+ };
362
+ }
363
+
364
+ // Old Ironbark / Conservatory Door. Cite: dire_maul.h:45-49; instance_dire_maul.cpp:215-228 (TYPE_ZEVRIM
365
+ // morph); classic-db gossip 5602 + movement 14241 / 1424101 (9s open GO 176907).
366
+ export const DM_EAST_IRONBARK = {
367
+ oldEntry: 11491,
368
+ redeemedEntry: 14241,
369
+ gossipMenuId: 5602,
370
+ optionText: 'Thank you, Ironbark. We are ready for you to open the door.',
371
+ sayBroadcastId: 9099,
372
+ sayText: 'As you wish...',
373
+ doorGoEntry: 176907,
374
+ door: { x: 131.286, y: -278.89, z: -56.521 },
375
+ spawn: { x: -72.1719, y: -283.252, z: -57.7497 },
376
+ /** dbscripts_on_creature_movement 1424101 delay 9000 open door. */
377
+ doorOpenDelayMs: 9000,
378
+ path: [
379
+ { point: 1, x: -46.5029, y: -268.536, z: -57.4978 },
380
+ { point: 2, x: -10.6115, y: -281.676, z: -53.7415 },
381
+ { point: 3, x: 17.2824, y: -286.947, z: -52.2818 },
382
+ { point: 4, x: 74.1724, y: -272.765, z: -54.8267 },
383
+ { point: 5, x: 117.401, y: -277.83, z: -55.8552 },
384
+ ] as const,
385
+ } as const;
386
+
387
+ export function dmEastConservatoryOpen(flags: readonly string[]): boolean {
388
+ return flags.includes(DIRE_MAUL_EAST_FLAGS.ironbarkDoor);
389
+ }
390
+
391
+ /** Ironbark talk after Zevrim: sets TYPE_IRONBARK (door open). */
392
+ export function dmEastOpenIronbarkDoor(flags: readonly string[]): string[] | null {
393
+ if (!flags.includes(DIRE_MAUL_EAST_FLAGS.zevrimDone)) return null;
394
+ if (flags.includes(DIRE_MAUL_EAST_FLAGS.ironbarkDoor)) return [...flags];
395
+ return [...flags, DIRE_MAUL_EAST_FLAGS.ironbarkDoor];
396
+ }
397
+
398
+ // Alzzin form cycle — EventAI 1149201–21. Phase 1/4 humanoid, 2 Dire Wolf 22660, 3 Tree 22688;
399
+ // 40% drops forms and minions. Wiring plan is BOSS_EVENTAI_OVERLAYS[11492], out of scope here.
400
+ export const DM_EAST_ALZZIN_FORMS = {
401
+ entry: ENTRY.alzzin,
402
+ thornsSpell: 22128,
403
+ direWolfForm: 22660,
404
+ treeForm: 22688,
405
+ witherSpell: 22662,
406
+ wildRegenSpell: 7948,
407
+ viciousBiteSpell: 19319,
408
+ mangleSpell: 22689,
409
+ disarmSpell: 22691,
410
+ enervateSpell: 22661,
411
+ knockAwaySpell: 10101,
412
+ /** EventAI initial form cast window (phase 1). */
413
+ formCastInitialMs: [12_000, 15_000] as const,
414
+ formDurationMs: [25_000, 35_000] as const,
415
+ formRecastMs: [40_000, 50_000] as const,
416
+ dropFormsPct: ALZZIN_SPECIAL_HP_PCT,
417
+ minionEntry: ENTRY.alzzinMinion,
418
+ minionCount: 15,
419
+ /** Script ids 1149201–21 from acid_classic.sql. */
420
+ eventAiScriptIds: [
421
+ 1149201, 1149202, 1149203, 1149204, 1149205, 1149206, 1149207, 1149208,
422
+ 1149209, 1149210, 1149211, 1149212, 1149213, 1149214, 1149215, 1149216,
423
+ 1149217, 1149218, 1149219, 1149220, 1149221,
424
+ ] as const,
425
+ } as const;
426
+
427
+ /** Summon-only / event-temp entries that must never appear in pure static trash packs. */
428
+ export const DIRE_MAUL_EAST_SUMMON_ONLY_ENTRIES = new Set<number>([
429
+ ENTRY.alzzinMinion, // 11460 - Alzzin 40% wave
430
+ ]);
431
+
432
+ /** West / North / D-10 / service entries that must not appear in this wing graph. */
433
+ export const DIRE_MAUL_EAST_FORBIDDEN_ENTRIES = new Set<number>([
434
+ // West bosses
435
+ 11489, // Tendris Warpwood
436
+ 11488, // Illyanna Ravenoak
437
+ 11487, // Magister Kalendris
438
+ 11467, // Tsu'zee
439
+ 11496, // Immol'thar
440
+ 11486, // Prince Tortheldrin
441
+ // North bosses
442
+ 14326, // Guard Mol'dar
443
+ 14322, // Stomper Kreeg
444
+ 14321, // Guard Fengus
445
+ 14323, // Guard Slip'kik
446
+ 14325, // Captain Kromcrush
447
+ 14324, // Cho'Rush the Observer
448
+ 11501, // King Gordok
449
+ // D-10 / seasonal
450
+ 14690, // Revanchion
451
+ // West library trash samples
452
+ 11471, // Eldreth Apparition
453
+ 11472, // Eldreth Spirit
454
+ 11475, // Eldreth Phantasm
455
+ 11469, // Eldreth Seether
456
+ 11473, // Eldreth Spectre
457
+ 11470, // Eldreth Sorcerer
458
+ 14398, // Eldreth Darter
459
+ // North ogre samples
460
+ 11441, // Gordok Brute
461
+ 11444, // Gordok Mage-Lord
462
+ 11450, // Gordok Reaver
463
+ 11445, // Gordok Captain
464
+ 11448, // Gordok Warlock
465
+ 13036, // Gordok Mastiff
466
+ ]);
467
+
468
+ /** Split a static spawn count into pack sizes in [2, 5] (prefer 4). Remainder 1 folded into prior pack. */
469
+ export function splitPackSizes(total: number, prefer = 4): number[] {
470
+ if (total <= 0) return [];
471
+ if (total === 1) return [1];
472
+ const packs: number[] = [];
473
+ let left = total;
474
+ while (left > 0) {
475
+ if (left <= 5) {
476
+ packs.push(left);
477
+ break;
478
+ }
479
+ let n = prefer;
480
+ const rem = left - n;
481
+ if (rem === 1) n = prefer - 1; // leave 2+
482
+ packs.push(n);
483
+ left -= n;
484
+ }
485
+ return packs;
486
+ }
487
+
488
+ function trashPull(
489
+ id: string,
490
+ name: string,
491
+ creatureEntry: number,
492
+ count: number,
493
+ events?: EncounterEvent[],
494
+ intro?: string,
495
+ ): EncounterDef {
496
+ const enc: EncounterDef = {
497
+ id,
498
+ name,
499
+ kind: 'trash',
500
+ creatureEntry,
501
+ };
502
+ if (count > 1) enc.pack = [{ creatureEntry, count: count - 1 }];
503
+ if (events && events.length) enc.events = events;
504
+ if (intro) enc.intro = intro;
505
+ return enc;
506
+ }
507
+
508
+ /** Expand one census entry into ordered trash pulls (ids `${prefix}-0` …). */
509
+ function trashFromCensus(
510
+ _prefix: string,
511
+ _displayName: string,
512
+ _creatureEntry: number,
513
+ _total: number,
514
+ ): EncounterDef[] {
515
+ // DP1: cluster packs supply trash; hand spine keeps bosses/events only.
516
+ return [];
517
+ }
518
+
519
+ // Boss spells: creature.spells from bake (game-data) - no invented ids.
520
+ const BOSS_SPELLS = {
521
+ pusillin: [15228, 22424, 14145, 17145, 15242],
522
+ zevrim: [22478, 22651],
523
+ hydrospawn: [22419, 22421, 22420, 22714],
524
+ lehtendris: [11668, 14887, 22709, 12742, 17228, 13338, 22710, 16247],
525
+ alzzin: [22689, 22662, 19319, 22128, 7948, 22660, 22688, 22691, 22661, 10101],
526
+ // creatures.json 16097.spells — Multi-Shot / Starfire / Net / Regrowth / etc.
527
+ isalien: [25164, 27639, 12024, 27637, 27636, 14443, 22907],
528
+ } as const;
529
+
530
+ function boss(
531
+ id: string,
532
+ name: string,
533
+ creatureEntry: number,
534
+ bossSpells: readonly number[],
535
+ events?: EncounterEvent[],
536
+ intro?: string,
537
+ pack?: { creatureEntry: number; count: number }[],
538
+ ): EncounterDef {
539
+ const enc: EncounterDef = {
540
+ id,
541
+ name,
542
+ kind: 'boss',
543
+ creatureEntry,
544
+ };
545
+ if (bossSpells.length) enc.bossSpells = [...bossSpells];
546
+ if (intro) enc.intro = intro;
547
+ if (events && events.length) enc.events = events;
548
+ if (pack && pack.length) enc.pack = pack;
549
+ return enc;
550
+ }
551
+
552
+ // Linear East encounter graph in survey boss order: entrance gardens → Pusillin → mid Warpwood →
553
+ // Wildspawn court → Zevrim → Conservatory → Hydrospawn → Lethtendris → Alzzin (40% minions).
554
+ function buildHandSpine(): EncounterDef[] {
555
+ const phaseLashers = trashFromCensus(
556
+ 'phase-lasher',
557
+ 'Phase Lasher',
558
+ ENTRY.phaseLasher,
559
+ STATIC.phaseLasher,
560
+ );
561
+ const treants = trashFromCensus(
562
+ 'warpwood-treant',
563
+ 'Warpwood Treant',
564
+ ENTRY.warpwoodTreant,
565
+ STATIC.warpwoodTreant,
566
+ );
567
+ const tanglers = trashFromCensus(
568
+ 'warpwood-tangler',
569
+ 'Warpwood Tangler',
570
+ ENTRY.warpwoodTangler,
571
+ STATIC.warpwoodTangler,
572
+ );
573
+ const felLashes = trashFromCensus('fel-lash', 'Fel Lash', ENTRY.felLash, STATIC.felLash);
574
+ const deathLashes = trashFromCensus(
575
+ 'death-lash',
576
+ 'Death Lash',
577
+ ENTRY.deathLash,
578
+ STATIC.deathLash,
579
+ );
580
+ const whipLashers = trashFromCensus(
581
+ 'whip-lasher',
582
+ 'Whip Lasher',
583
+ ENTRY.whipLasher,
584
+ STATIC.whipLasher,
585
+ );
586
+ const stompers = trashFromCensus(
587
+ 'warpwood-stomper',
588
+ 'Warpwood Stomper',
589
+ ENTRY.warpwoodStomper,
590
+ STATIC.warpwoodStomper,
591
+ );
592
+ const guardians = trashFromCensus(
593
+ 'warpwood-guardian',
594
+ 'Warpwood Guardian',
595
+ ENTRY.warpwoodGuardian,
596
+ STATIC.warpwoodGuardian,
597
+ );
598
+ const crushers = trashFromCensus(
599
+ 'warpwood-crusher',
600
+ 'Warpwood Crusher',
601
+ ENTRY.warpwoodCrusher,
602
+ STATIC.warpwoodCrusher,
603
+ );
604
+ const satyrs = trashFromCensus(
605
+ 'wildspawn-satyr',
606
+ 'Wildspawn Satyr',
607
+ ENTRY.wildspawnSatyr,
608
+ STATIC.wildspawnSatyr,
609
+ );
610
+ const betrayers = trashFromCensus(
611
+ 'wildspawn-betrayer',
612
+ 'Wildspawn Betrayer',
613
+ ENTRY.wildspawnBetrayer,
614
+ STATIC.wildspawnBetrayer,
615
+ );
616
+ const felsworns = trashFromCensus(
617
+ 'wildspawn-felsworn',
618
+ 'Wildspawn Felsworn',
619
+ ENTRY.wildspawnFelsworn,
620
+ STATIC.wildspawnFelsworn,
621
+ );
622
+ const shadowstalkers = trashFromCensus(
623
+ 'wildspawn-shadowstalker',
624
+ 'Wildspawn Shadowstalker',
625
+ ENTRY.wildspawnShadowstalker,
626
+ STATIC.wildspawnShadowstalker,
627
+ );
628
+ const rogues = trashFromCensus(
629
+ 'wildspawn-rogue',
630
+ 'Wildspawn Rogue',
631
+ ENTRY.wildspawnRogue,
632
+ STATIC.wildspawnRogue,
633
+ );
634
+ const tricksters = trashFromCensus(
635
+ 'wildspawn-trickster',
636
+ 'Wildspawn Trickster',
637
+ ENTRY.wildspawnTrickster,
638
+ STATIC.wildspawnTrickster,
639
+ );
640
+ const hellcallers = trashFromCensus(
641
+ 'wildspawn-hellcaller',
642
+ 'Wildspawn Hellcaller',
643
+ ENTRY.wildspawnHellcaller,
644
+ STATIC.wildspawnHellcaller,
645
+ );
646
+ const imps = trashFromCensus(
647
+ 'wildspawn-imp',
648
+ 'Wildspawn Imp',
649
+ ENTRY.wildspawnImp,
650
+ STATIC.wildspawnImp,
651
+ );
652
+
653
+ // Band splits for spatial-ish sequencing between bosses
654
+ const whipMid = Math.ceil(whipLashers.length / 3);
655
+ const whipPrePusillin = whipLashers.slice(0, whipMid);
656
+ const whipMidWing = whipLashers.slice(whipMid, 2 * whipMid);
657
+ const whipPost = whipLashers.slice(2 * whipMid);
658
+
659
+ const treantMid = Math.ceil(treants.length / 2);
660
+ const phaseMid = Math.ceil(phaseLashers.length / 2);
661
+ const tanglerMid = Math.ceil(tanglers.length / 2);
662
+ const deathMid = Math.ceil(deathLashes.length / 2);
663
+ const guardMid = Math.ceil(guardians.length / 2);
664
+ const crushMid = Math.ceil(crushers.length / 2);
665
+ const impMid = Math.ceil(imps.length / 2);
666
+
667
+ const satyrMid = Math.ceil(satyrs.length / 2);
668
+ const rogueMid = Math.ceil(rogues.length / 2);
669
+ const trickMid = Math.ceil(tricksters.length / 2);
670
+
671
+ const out: EncounterDef[] = [];
672
+
673
+ // --- Entrance gardens → Pusillin ---
674
+ out.push(
675
+ ...whipPrePusillin,
676
+ ...phaseLashers.slice(0, phaseMid),
677
+ ...treants.slice(0, treantMid),
678
+ ...tanglers.slice(0, tanglerMid),
679
+ );
680
+
681
+ {
682
+ const chasePath = DM_EAST_PUSILLIN_CHASE.stops.map((s) => ({
683
+ x: s.x,
684
+ y: s.y,
685
+ z: s.z,
686
+ }));
687
+ const pusillin = boss(
688
+ 'pusillin',
689
+ 'Pusillin',
690
+ ENTRY.pusillin,
691
+ BOSS_SPELLS.pusillin,
692
+ undefined,
693
+ // 5 gossip stops (WPs 1/9/19/32/38); fight only after 570905. Crescent Key 18249 on death.
694
+ "Pusillin flees through the East wing - talk him down each stop; the Crescent Key drops only at the end.",
695
+ // dbscripts_on_gossip 570905: +3s summon 4× Wildspawn Imp 13276 (120s despawn).
696
+ [{ creatureEntry: DIRE_MAUL_EAST_PUSILLIN_IMPS.creatureEntry, count: DIRE_MAUL_EAST_PUSILLIN_IMPS.count }],
697
+ );
698
+ pusillin.path = chasePath;
699
+ // Spawn pose = stop 0 (creature_movement_template WP1 / geometry).
700
+ pusillin.origin = {
701
+ x: DM_EAST_PUSILLIN_CHASE.stops[0]!.x,
702
+ y: DM_EAST_PUSILLIN_CHASE.stops[0]!.y,
703
+ z: DM_EAST_PUSILLIN_CHASE.stops[0]!.z,
704
+ };
705
+ out.push(pusillin);
706
+ }
707
+
708
+ // --- Pusillin → Zevrim (Warpwood corridor + first Wildspawn) ---
709
+ out.push(
710
+ ...whipMidWing,
711
+ ...phaseLashers.slice(phaseMid),
712
+ ...treants.slice(treantMid),
713
+ ...tanglers.slice(tanglerMid),
714
+ ...stompers,
715
+ ...guardians.slice(0, guardMid),
716
+ ...crushers.slice(0, crushMid),
717
+ ...deathLashes.slice(0, deathMid),
718
+ ...satyrs.slice(0, satyrMid),
719
+ ...betrayers.slice(0, Math.ceil(betrayers.length / 2)),
720
+ ...felsworns.slice(0, Math.ceil(felsworns.length / 2)),
721
+ ...shadowstalkers.slice(0, Math.ceil(shadowstalkers.length / 2)),
722
+ );
723
+
724
+ out.push(
725
+ boss(
726
+ 'zevrim-thornhoof',
727
+ 'Zevrim Thornhoof',
728
+ ENTRY.zevrim,
729
+ BOSS_SPELLS.zevrim,
730
+ [
731
+ // After Pusillin (Crescent Key 18249). Lock-1562 doors on map 429: Warpwood,
732
+ // Conservatory, north-before-west. Cite: dire_maul.h:69-70.
733
+ {
734
+ kind: 'objectGate',
735
+ goEntry: DM_EAST_CRESCENT_DOORS.goEntry,
736
+ goEntries: [...DM_EAST_CRESCENT_DOORS.goEntries],
737
+ requiredItem: DM_EAST_CRESCENT_DOORS.requiredItem,
738
+ setsFlag: DIRE_MAUL_EAST_FLAGS.crescentKey,
739
+ once: true,
740
+ },
741
+ // TYPE_ZEVRIM DONE → morph Ironbark; door still needs talk (TYPE_IRONBARK).
742
+ { kind: 'setsFlag', flag: DIRE_MAUL_EAST_FLAGS.zevrimDone },
743
+ ],
744
+ 'Zevrim Thornhoof rules the Wildspawn court. His death frees Old Ironbark to open the Conservatory.',
745
+ ),
746
+ );
747
+
748
+ // Old Ironbark talk-gate: requires Zevrim; sets TYPE_IRONBARK / Conservatory Door 176907.
749
+ // Cleared by floor Talk (not combat). Cite: gossip 5602 + movement 1424101.
750
+ out.push({
751
+ id: 'old-ironbark',
752
+ name: 'Old Ironbark',
753
+ kind: 'object',
754
+ creatureEntry: DM_EAST_IRONBARK.oldEntry,
755
+ origin: {
756
+ x: DM_EAST_IRONBARK.spawn.x,
757
+ y: DM_EAST_IRONBARK.spawn.y,
758
+ z: DM_EAST_IRONBARK.spawn.z,
759
+ },
760
+ intro: DM_EAST_IRONBARK.optionText,
761
+ events: [
762
+ { kind: 'requiresFlag', flag: DIRE_MAUL_EAST_FLAGS.zevrimDone },
763
+ { kind: 'setsFlag', flag: DIRE_MAUL_EAST_FLAGS.ironbarkDoor },
764
+ ],
765
+ });
766
+
767
+ // --- Conservatory (requires TYPE_IRONBARK / door open) → Hydrospawn ---
768
+ out.push(
769
+ ...imps.slice(0, impMid),
770
+ ...felLashes.slice(0, Math.ceil(felLashes.length / 2)),
771
+ ...rogues.slice(0, rogueMid),
772
+ ...tricksters.slice(0, trickMid),
773
+ ...hellcallers,
774
+ );
775
+
776
+ out.push(
777
+ boss(
778
+ 'hydrospawn',
779
+ 'Hydrospawn',
780
+ ENTRY.hydrospawn,
781
+ BOSS_SPELLS.hydrospawn,
782
+ [
783
+ // TYPE_IRONBARK DONE (Ironbark talk after Zevrim). Cite: instance_dire_maul.cpp:127-129.
784
+ { kind: 'requiresFlag', flag: DIRE_MAUL_EAST_FLAGS.ironbarkDoor },
785
+ ],
786
+ 'Conservatory Door 176907 - talk Old Ironbark after Zevrim to open the path. Hydrospawn Essence here.',
787
+ ),
788
+ );
789
+
790
+ // --- Hydrospawn → Lethtendris ---
791
+ out.push(
792
+ ...imps.slice(impMid),
793
+ ...felLashes.slice(Math.ceil(felLashes.length / 2)),
794
+ ...rogues.slice(rogueMid),
795
+ );
796
+
797
+ out.push(
798
+ boss(
799
+ 'lehtendris',
800
+ 'Lethtendris',
801
+ ENTRY.lehtendris,
802
+ BOSS_SPELLS.lehtendris,
803
+ undefined,
804
+ 'Lethtendris weaves fel magic with her imp Pimgib at her side.',
805
+ // Census: Pimgib 14349 static ×1 at Lethtendris's side.
806
+ [{ creatureEntry: ENTRY.pimgib, count: 1 }],
807
+ ),
808
+ );
809
+
810
+ // --- Lethtendris → Alzzin ---
811
+ out.push(
812
+ ...whipPost,
813
+ ...guardians.slice(guardMid),
814
+ ...crushers.slice(crushMid),
815
+ ...deathLashes.slice(deathMid),
816
+ ...satyrs.slice(satyrMid),
817
+ ...betrayers.slice(Math.ceil(betrayers.length / 2)),
818
+ ...felsworns.slice(Math.ceil(felsworns.length / 2)),
819
+ ...shadowstalkers.slice(Math.ceil(shadowstalkers.length / 2)),
820
+ ...tricksters.slice(trickMid),
821
+ );
822
+
823
+ out.push(
824
+ boss(
825
+ 'alzzin-the-wildshaper',
826
+ 'Alzzin the Wildshaper',
827
+ ENTRY.alzzin,
828
+ // EventAI form cycle: Dire Wolf 22660 / Tree 22688 listed; mid-fight SET_PHASE residual.
829
+ BOSS_SPELLS.alzzin,
830
+ [
831
+ // Acid 1149213–19 @40%: drop forms, CFH, 15×11460; 1149214 SET_INST_DATA SPECIAL.
832
+ // Caller: dmEastOpenCrumbleWall → go-opened for GO 177220 (cpp:247-250).
833
+ {
834
+ kind: 'hpThreshold',
835
+ pct: DIRE_MAUL_EAST_ALZZIN_MINIONS.pct,
836
+ once: true,
837
+ phase: 4,
838
+ spawn: [
839
+ {
840
+ creatureEntry: DIRE_MAUL_EAST_ALZZIN_MINIONS.creatureEntry,
841
+ count: DIRE_MAUL_EAST_ALZZIN_MINIONS.count,
842
+ },
843
+ ],
844
+ },
845
+ // Acid 1149221 death → TYPE_ALZZIN DONE; dmEastApplyAlzzinDone opens 179502 + reveal 179559.
846
+ { kind: 'setsFlag', flag: DIRE_MAUL_EAST_FLAGS.alzzinDone },
847
+ ],
848
+ 'Alzzin shifts Dire Wolf and Tree forms, then at 40% drops forms and calls his minions.',
849
+ ),
850
+ );
851
+
852
+ // Optional T0.5 — Brazier of Beckoning at Isalien focus (Alzzin's room).
853
+ // Cite: GO 181047; item 22050; trigger 16045; NPC 16097.
854
+ {
855
+ const isa = boss(
856
+ DM_EAST_ISALIEN.encId,
857
+ 'Isalien',
858
+ DM_EAST_ISALIEN.bossEntry,
859
+ BOSS_SPELLS.isalien,
860
+ [
861
+ {
862
+ kind: 'objectGate',
863
+ goEntry: DM_EAST_ISALIEN.goEntry,
864
+ requiredItem: DM_EAST_ISALIEN.requiredItem,
865
+ setsFlag: DIRE_MAUL_EAST_FLAGS.isalien,
866
+ once: true,
867
+ },
868
+ { kind: 'requiresFlag', flag: DIRE_MAUL_EAST_FLAGS.isalien },
869
+ ],
870
+ "The Brazier of Beckoning at Isalien's focus summons the spectral night elf (optional T0.5).",
871
+ );
872
+ isa.origin = { ...DM_EAST_ISALIEN.spawn };
873
+ isa.optional = true;
874
+ out.push(isa);
875
+ }
876
+
877
+ return out;
878
+ }
879
+
880
+ function buildEncounters(): EncounterDef[] {
881
+ // Hand spine = bosses + event-gated packs (mono trashFromCensus is empty).
882
+ const spine = buildHandSpine();
883
+ return buildClusterEncounters({
884
+ mapId: 429,
885
+ spine,
886
+ entrance: entranceForInstance('dire-maul-east'),
887
+ includePack: wingFilterByNearestBoss(429, "east"),
888
+ });
889
+ }
890
+
891
+
892
+ // East-relevant survey quests, completable inside or targeting East bosses. West/North-only and
893
+ // D-10 seasonal rows are excluded.
894
+ export const DIRE_MAUL_EAST_QUESTS = [
895
+ 7441, // Pusillin and the Elder Azj'Tordin - Book of Incantations (Pusillin)
896
+ 7488, // Lethtendris's Web (A)
897
+ 7489, // Lethtendris's Web (H)
898
+ 7463, // Arcane Refreshment - Hydrospawn Essence (Hydrospawn)
899
+ 7581, // The Prison's Bindings - Satyr Blood (Wildspawn satyrs)
900
+ ] as const;
901
+
902
+ /** Rounded static pack targets used by this graph (for tests / docs). */
903
+ export const DIRE_MAUL_EAST_STATIC = { ...STATIC } as const;
904
+
905
+ /** Entry → rounded static count (for tests). */
906
+ export const DIRE_MAUL_EAST_STATIC_BY_ENTRY: Readonly<Record<number, number>> = {
907
+ [ENTRY.phaseLasher]: STATIC.phaseLasher,
908
+ [ENTRY.warpwoodTreant]: STATIC.warpwoodTreant,
909
+ [ENTRY.warpwoodTangler]: STATIC.warpwoodTangler,
910
+ [ENTRY.felLash]: STATIC.felLash,
911
+ [ENTRY.deathLash]: STATIC.deathLash,
912
+ [ENTRY.whipLasher]: STATIC.whipLasher,
913
+ [ENTRY.warpwoodStomper]: STATIC.warpwoodStomper,
914
+ [ENTRY.warpwoodGuardian]: STATIC.warpwoodGuardian,
915
+ [ENTRY.warpwoodCrusher]: STATIC.warpwoodCrusher,
916
+ [ENTRY.wildspawnSatyr]: STATIC.wildspawnSatyr,
917
+ [ENTRY.wildspawnBetrayer]: STATIC.wildspawnBetrayer,
918
+ [ENTRY.wildspawnFelsworn]: STATIC.wildspawnFelsworn,
919
+ [ENTRY.wildspawnShadowstalker]: STATIC.wildspawnShadowstalker,
920
+ [ENTRY.wildspawnRogue]: STATIC.wildspawnRogue,
921
+ [ENTRY.wildspawnTrickster]: STATIC.wildspawnTrickster,
922
+ [ENTRY.wildspawnHellcaller]: STATIC.wildspawnHellcaller,
923
+ [ENTRY.wildspawnImp]: STATIC.wildspawnImp,
924
+ };
925
+
926
+ /** Bake-sourced boss spell lists (for tests). */
927
+ export const DIRE_MAUL_EAST_BOSS_SPELLS = { ...BOSS_SPELLS } as const;
928
+
929
+ export const DIRE_MAUL_EAST: InstanceDef = {
930
+ id: 'dire-maul-east',
931
+ mapId: 429,
932
+ wing: 'east',
933
+ name: 'Dire Maul (East)',
934
+ portalZone: 'feralas',
935
+ minLevel: 45, // entrance triggers requiredLevel 45
936
+ levelRange: [54, 58], // East trash/boss band (mission)
937
+ lockoutMs: 0,
938
+ description: '',
939
+ quests: [...DIRE_MAUL_EAST_QUESTS],
940
+ encounters: buildEncounters(),
941
+ // Alzzin death DoRespawnGameObject Felvine Shard (instance_dire_maul.cpp:241-244).
942
+ lootObjects: [
943
+ { goEntry: GO_FELVINE_SHARD, revealedByFlag: DIRE_MAUL_EAST_FLAGS.alzzinDone },
944
+ ],
945
+ };
946
+
947
+ // Counts pure static trash packs only: bosses excluded, the Pusillin imp pack rides the boss
948
+ // encounter, Alzzin minions are hpThreshold spawns, and Pimgib rides the Lethtendris pack.
949
+ export function direMaulEastPureStaticTrashCounts(): Map<number, number> {
950
+ const map = new Map<number, number>();
951
+ const add = (entry: number, n: number) => map.set(entry, (map.get(entry) ?? 0) + n);
952
+ for (const enc of DIRE_MAUL_EAST.encounters) {
953
+ if (enc.kind !== 'trash') continue;
954
+ add(enc.creatureEntry, 1);
955
+ for (const p of enc.pack ?? []) add(p.creatureEntry, p.count);
956
+ }
957
+ return map;
958
+ }
959
+
960
+ /** Sum of authored kill supply (trash + bosses + packs + event spawns). */
961
+ export function direMaulEastKillSupply(): Map<number, number> {
962
+ const map = new Map<number, number>();
963
+ const add = (entry: number, n: number) => map.set(entry, (map.get(entry) ?? 0) + n);
964
+ for (const enc of DIRE_MAUL_EAST.encounters) {
965
+ add(enc.creatureEntry, 1);
966
+ for (const p of enc.pack ?? []) add(p.creatureEntry, p.count);
967
+ for (const ev of enc.events ?? []) {
968
+ if (ev.kind === 'onDeathSummon') add(ev.creatureEntry, 1);
969
+ if (ev.kind === 'waves') {
970
+ for (const w of ev.waves) {
971
+ for (const row of w.pack) add(row.creatureEntry, row.count);
972
+ }
973
+ }
974
+ if (ev.kind === 'hpThreshold' && ev.spawn) {
975
+ for (const row of ev.spawn) add(row.creatureEntry, row.count);
976
+ }
977
+ }
978
+ }
979
+ return map;
980
+ }