azeroth-shell 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +26 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +126 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,86 @@
1
+ {
2
+ "raid": "blackfathom-deeps",
3
+ "note": "Reviewed for E5.4 against eventai/blackfathom-deeps.ts, acid_classic.sql:13842-13878 and instance_blackfathom_deeps.cpp. There is no per-boss cpp in this wing, so every kit is EventAI plus the creature_template spell list, and the instance script only gates the Fathom Stone summon and the four-brazier shrine event. Six of the seven come back kinds: [] - every AoE here is an instant disc at or just past melee reach, which is where the melee have to stand. Lady Sarevess is the one exception: Forked Lightning 8435 is a real 53 degree frontal cone with a 2 s cast, and that is the one shape in Blackfathom Deeps a move verb clears.",
4
+ "bosses": [
5
+ {
6
+ "entry": 4887,
7
+ "name": "Ghamoo-ra",
8
+ "kinds": [],
9
+ "cite": "eventai/blackfathom-deeps.ts:195-208, acid_classic.sql:13862 creature_id=4887. His whole kit is one script: Trample 5568 every 9-15 s. 5568 is aoeShape pbaoe radiusYd 10, targetA 22 and tgtB 15, castTimeMs 0 - an instant disc centred on him with no window to gate a walk on. The DBC effect is 58 SPELL_EFFECT_WEAPON_DAMAGE basePoints 7 perLevel 1, which the bake has no mapper for, so spell-data 5568 ships effects: [] and it lands nothing on this floor today."
10
+ },
11
+ {
12
+ "entry": 4831,
13
+ "name": "Lady Sarevess",
14
+ "kinds": [
15
+ "position"
16
+ ],
17
+ "cite": "eventai/blackfathom-deeps.ts:117-189, acid_classic.sql:13847-13854 creature_id=4831. Four spells and only one has a shape a verb can use. Frost Nova 865 is aoeShape pbaoe radiusYd 10 castTimeMs 0, an instant 33-37 frost plus an 8 s root with nothing to react to; Slow 246 is targetA 6 haste -35% for 10 s; Shoot 6660 is targetA 6 at 30 yd for 36-48. Forked Lightning 8435 is the row: src_spell_cone ConeDegrees 53, radiusYd 30, castTimeMs 2000, targetA 24.",
18
+ "encounterRows": [
19
+ {
20
+ "kind": "position",
21
+ "label": "Off Sarevess's front arc (Forked Lightning)",
22
+ "cite": "spell 8435 Forked Lightning: src_spell_cone Id=8435 ConeDegrees 53, EffectRadiusIndex 10 radiusYd 30, targetA 24, castTimeMs 2000, cast every 5-20 s in ranged mode (acid 13852, flags 1281) and every 2-8 s in melee mode (acid 13853, flags 1537). She is SET_RANGED_MODE 2 at 25 yd (acid 13847), so the whole party stands inside the 30 yd the wedge reaches. This is a cone with a bounded radius and a real cast time, which is exactly what E5.3 fixed behind_target for: sessionMechanicMove.ts:347-425 reads coneArcsOfKit off her baked kit (creatures.json 4831 spells 865/246/8435/6660, spell-data 8435 aoeShape cone coneDeg 53 radiusYd 30) and, past MELEE_REACH_YD 5 + MELEE_PARK_SLACK_YD 0.5, rotates to coneClearBandRad's nearest clear bearing at the mover's OWN radius - about 38 deg off her facing, a 16 yd arc walk at 25 yd, well inside the 4000 ms RUNOUT_YIELD_AFTER_MS in pickAction.ts:774. Melee take the far-side step, which they want anyway for parry. Gated the way blackwing-lair.json Vaelastrasz gates its arc row: not the tank (targetAttackingMe 0), and only while actually covered (inTargetCone 1, pickAction.ts:1613-1626), so it disarms itself on arrival. Honest about the payload: the DBC row is basePoints 4 dieSides 1 perLevel 5 at spellLevel 1, so CMaNGOS CalculateDamage scales it to roughly 125 at her level 25, but the bake does not apply perLevel and spell-data 8435 ships direct_damage min 5 max 5. The shape and the window are sourced; the damage this row saves today is that 5.",
23
+ "rule": {
24
+ "id": "raid_enc_4831_cone_8435",
25
+ "action": {
26
+ "kind": "move",
27
+ "move": {
28
+ "kind": "behind_target"
29
+ }
30
+ },
31
+ "conditions": [
32
+ {
33
+ "subject": "self",
34
+ "metric": "targetAttackingMe",
35
+ "op": "==",
36
+ "value": 0
37
+ },
38
+ {
39
+ "subject": "self",
40
+ "metric": "inTargetCone",
41
+ "op": "==",
42
+ "value": 1
43
+ }
44
+ ],
45
+ "enabled": true
46
+ }
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ "entry": 6243,
52
+ "name": "Gelihast",
53
+ "kinds": [],
54
+ "cite": "eventai/blackfathom-deeps.ts:214-231, acid_classic.sql:13870-13871 creature_id=6243. Battle Stance 7165 is a self shapeshift to form 17 on spawn. Net 6533 every 7-13 s is targetA 6 at rangeMax 20, mechanic 7 root, a 10 s root on whoever he is hitting, and its Effect 64 trigger 11920 Net Guard is aura 4 dummy on the same single target with no radius. Nothing area, nothing to position around - a single-target root is a trinket or a Free Action Potion, which is a class row."
55
+ },
56
+ {
57
+ "entry": 12876,
58
+ "name": "Baron Aquanis",
59
+ "kinds": [],
60
+ "cite": "eventai/blackfathom-deeps.ts:237-273, acid_classic.sql:13875-13878 creature_id=12876. He is the Fathom Stone quest summon (instance_blackfathom_deeps.cpp:275-288 GOUse_go_fathom_stone, TYPE_AQUANIS) and his kit is NOT empty: Frost Nova 15531 every 14-19 s and Frostbolt 15043, in ranged mode at 35 yd. 15531 is aoeShape pbaoe radiusYd 10, targetA 22 and tgtB 15, castTimeMs 0 - an instant 111-129 frost plus an 8 s root, so there is no cast to gate a walk on, and 10 yd is twice melee reach so a keep_range 11 parks the melee out of the fight to dodge nothing. 15043 is targetA 6 at 40 yd, castTimeMs 3000, 96-128 single target. Could not source spell 14907 to this entry: blackfathom-deeps.ts:167 lists it in his bossSpells, but creatures.json 12876 carries only 15531 and 15043 and the ACID rows name only those two."
61
+ },
62
+ {
63
+ "entry": 4832,
64
+ "name": "Twilight Lord Kelris",
65
+ "kinds": [],
66
+ "cite": "eventai/blackfathom-deeps.ts:48-96, acid_classic.sql:13856-13860 creature_id=4832. Mind Blast 15587 every 7-21 s is targetA 6 at 30 yd, castTimeMs 1500, 139-161 shadow single target - a flat nuke. Sleep 8399 every 15-30 s is aoeShape pbaoe radiusYd 5, targetA 22 and tgtB 15, mechanic 10 sleep, 10 s, dispel 1 magic, and the bake tags it breakOnDamage true. That 5 yd disc is melee reach exactly, the same shape as the Stockade's Smoke Bomb: the melee are inside it because that is where melee happens, and the ranged stand is already outside. A dispel or a trinket answers it and both are class rows. His aggro script also fires CALL_FOR_HELP at 60 yd (acid 13856), which is a pull radius, not a party verb."
67
+ },
68
+ {
69
+ "entry": 4830,
70
+ "name": "Old Serra'kis",
71
+ "kinds": [
72
+ "position"
73
+ ],
74
+ "cite": "eventai/blackfathom-deeps.ts:102-110, acid_classic.sql:13845 creature_id=4830. One script, an on-spawn self cast of Leech Pulse 8434: passive, DurationIndex 21 which is the permanent sentinel 4294967295, aura 23 periodic-trigger amplitude 4000 firing 8433. 8433 is aoeShape pbaoe radiusYd 10, targetA 22 and tgtB 15, health_leech 50 - so in CMaNGOS he drains 50 off everyone within 10 yd every 4 s for the whole fight and heals himself for it. On this floor he drains nothing: the aura-23 mapper wants a real duration and index 21 is the permanent sentinel, so spell-data 8434 ships effects: [] while 8433 is intact and never triggered.",
75
+ "blockedBy": {
76
+ "position": "even with the pulse live there is no verb for it. CORRECTED 2026-08-27: this used to claim \"every keep_range row shipped is gated on a buff or a cast that ends\", and that is FALSE - ten shipped rows are gated on isCaster plus creatureDistanceYd with no buff and no cast (Lord Roccor and Ring of Law, Phalanx, Zevrim Thornhoof, Princess Theradras, Ras Frostwhisper, Grand Crusader Dathrohan, Atal alarion, Archaedas, Gahz rilla), and Roccor s own cite says so outright. What actually blocks this row, which is what lets the party walk out and come back - Herod's Whirlwind 8989 is 10 s (sm-armory.json). 8434 never drops, so buffPresent 8434 arms on pull and stays armed, and a keep_range 11 would hold the melee 11 yd off Old Serra'kis for the entire encounter. The ranged stand is already past 10 yd, so the only units the row could move are the ones that must not be moved."
77
+ }
78
+ },
79
+ {
80
+ "entry": 4829,
81
+ "name": "Aku'mai",
82
+ "kinds": [],
83
+ "cite": "eventai/blackfathom-deeps.ts:19-42, acid_classic.sql:13842-13843 creature_id=4829. Poison Cloud 3815 every 25-30 s is aoeShape pbaoe radiusYd 8, targetA 22 and tgtB 15, castTimeMs 1000, dispel 4 poison, and the bake ships it as a dot of 50 every 5000 ms for 45000 ms. It applies once and then rides the player, so leaving the disc after it lands changes nothing, and 8 yd is the Dextren Ward radius - the melee are in it because that is where melee happens. Dispel type poison names the answer, and Cure Poison, Abolish Poison and a Poison Cleansing Totem are all class rows. Frenzied Rage 3490 every 6-30 s is targetA 1, haste +75% for 5 s on himself, which is a tank-and-healer problem with no ground to stand out of."
84
+ }
85
+ ]
86
+ }
@@ -0,0 +1,419 @@
1
+ {
2
+ "raid": "blackrock-depths",
3
+ "note": "Reviewed for E5.4 against the four boss cpps, blackrock_depths.cpp, eventai/blackrock-depths.ts and acid_classic.sql:13914-14311. Twenty-two encounters, sixteen come back kinds: [] - the wing's standard shape is a disc at or inside melee reach, which the melee have to stand in to fight at all, and the ranged stand is already outside it. Six earn a row: Lord Roccor and Phalanx each carry a 20 yd disc centred on themselves, which is the Archaedas shape; Lord Incendius and Bael'Gar each put a 5 yd area on a random raider; and General Angerforge and Ambassador Flamelash each summon a named body the fight is actually about.",
4
+ "bosses": [
5
+ {
6
+ "entry": 9025,
7
+ "name": "Lord Roccor",
8
+ "kinds": [
9
+ "position"
10
+ ],
11
+ "note": "Ground Tremor stuns everything within 20 yd of Roccor every 9 to 14 seconds. The melee have to eat it. The ranged only need to stand a yard further back.",
12
+ "cite": "eventai/blackrock-depths.ts:329-362 scripts 902501-902503, acid_classic.sql:14139-14141 creature_id=9025. Flame Shock 13729 is targetA 6 rangeMax 20, a single-target dot; Earth Shock 13728 is targetA 6 rangeMax 20 with Effect 68 INTERRUPT_CAST. Ground Tremor 6524 is the raid-side one, and it is the SAME spell id Archaedas casts in Uldaman.",
13
+ "encounterRows": [
14
+ {
15
+ "kind": "position",
16
+ "label": "Casters step out of Ground Tremor",
17
+ "cite": "spell 6524 Ground Tremor bakes aoeShape pbaoe radiusYd 20, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, mechanic 12, a 2000 ms stun, castTimeMs 0, cooldownMs 5000. Script 902501-902503 fires it on a 5-15 s opener then every 9-14 s at TARGET_T 17 NEAREST_AOE_TARGET (aiTargeting.ts:42), which picks who it centres on but not where the disc sits - a pbaoe is always on the caster. That makes this the uldaman.json Archaedas row spell for spell: isWithinRadiusYd hits at <=, so 21 is the first clear yard, and the trigger is deliberately wider than the park because a row released on the yard it parks on re-arms on the boss's next step and cancels its own walk. 24 in / 21 out leaves 2.5 yd to stand and cast in, and the 25 yd ranged stand (stand.ts:20 RANGED_STAND_DEFAULT_YD) sits outside the trigger so the camp is not armed all fight. isCaster keeps the melee out of it: 21 yd is four times MIN_AGGRO_DISTANCE 5 (creatureAiConstants.ts:76) and a permanent park there would end melee for a 2 s stun. A hunter on the 20 yd floor (stand.ts:18 RANGED_STAND_MIN_YD, which the disc reaches at <=) takes the same one-yard step. He leaves no aura and has no cast bar, so this is a standing position rule and not a reaction.",
18
+ "rule": {
19
+ "id": "raid_enc_9025_range_6524",
20
+ "action": {
21
+ "kind": "move",
22
+ "move": {
23
+ "kind": "keep_range",
24
+ "minYd": 21,
25
+ "entry": 9025
26
+ }
27
+ },
28
+ "conditions": [
29
+ {
30
+ "subject": "self",
31
+ "metric": "isCaster",
32
+ "op": "==",
33
+ "value": 1
34
+ },
35
+ {
36
+ "subject": "self",
37
+ "metric": "creatureDistanceYd",
38
+ "op": "<=",
39
+ "value": 24,
40
+ "ref": 9025
41
+ }
42
+ ],
43
+ "enabled": true
44
+ }
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "entry": 9018,
50
+ "name": "High Interrogator Gerstahn",
51
+ "kinds": [],
52
+ "cite": "boss_high_interrogator_gerstahn.cpp:28-116; there are no ACID rows for 9018 (acid_classic.sql:14127 names the cpp instead) and creatures.json 9018 carries the kit on charmSpells only, so the schedule is the port at scriptdev/blackrockDepths.ts:287-345. Shadow Word: Pain 14032 is targetA 6 rangeMax 30, a single-target dot; Mana Burn 14033 is targetA 6 Effect 62 on a mana holder; Shadow Shield 12040 is targetA 1, a 199 absorb on herself. Psychic Scream 13704 is the only shaped one: pbaoe radiusYd 8, targetA 22 and tgtB 15, mechanic 5 fear, 6 s, castTimeMs 0, every 30 s. That is the Dextren Ward disc - the melee are inside 8 yd because that is where melee happens, the 20-25 yd stand is already outside it, and what answers a repeated melee fear is Fear Ward, Tremor Totem, Berserker Rage or a trinket, which are class rows."
53
+ },
54
+ {
55
+ "entry": 9398,
56
+ "name": "Commander Gor'shak - Jail Defense",
57
+ "kinds": [],
58
+ "cite": "blackrock-depths.ts:498-524 BRD_GORSHAK_JAIL and :942-973. This encounter is a quest-3982 timed gauntlet, not a creature fight: wave 1 at 3 s is 3x Anvilrage Guardsman 8891, wave 2 at 45 s is 1x Twilight's Hammer Executioner 9398 plus 2x 8891, and 9398 is the primary only because floorGauntletWaves wants the final wave's entry. Its kit is acid_classic.sql:14245-14246 creature_id=9398: Battle Fury 3631 is Effect 35 APPLY_AREA_AURA_PARTY targetA 1 radiusYd 10, a +24% melee haste aura on his own side that a purge answers, and Decimate 13459 is targetA 25 aura 51 with no radius. Neither is area damage and neither has ground to stand out of."
59
+ },
60
+ {
61
+ "entry": 9319,
62
+ "name": "Houndmaster Grebmar",
63
+ "kinds": [],
64
+ "cite": "eventai/blackrock-depths.ts:657-700 scripts 931901-931904, acid_classic.sql:14240-14243 creature_id=9319. Demoralizing Shout 13730 is aoeShape pbaoe radiusYd 10, targetA 22 and tgtB 15, castTimeMs 0, aura 99 attack power -11 for 30 s - a debuff disc with no damage, so there is nothing a step-out saves. Pummel 15615 is targetA 6 rangeMax 5 with Effect 68 INTERRUPT_CAST on whoever he is hitting. Bloodlust 21049 is targetA 21 TARGET_UNIT_FRIEND at 30 yd, fired on EVENT_T 16 FRIENDLY_MISSING_BUFF, so it is a haste buff he puts on a bloodhound - dispel 1 magic names the answer and a purge is a class row. Flees for assist at 15%."
65
+ },
66
+ {
67
+ "entry": 9027,
68
+ "name": "Ring of Law",
69
+ "kinds": [
70
+ "position"
71
+ ],
72
+ "note": "The arena rolls one of six champions per attempt, so a plan row written here reaches the roll one time in six.",
73
+ "cite": "blackrock-depths.ts:993-1031 builds this encounter on ENTRY.gorosh 9027 as a PLACEHOLDER, and :302-325 materializeRingOfLawEncounter replaces both the trash type and the final wave at fight start from BRD_RING_OF_LAW.bossPool (:257-264): 9027 Gorosh the Dervish, 9028 Grizzle, 9029 Eviscerator, 9030 Ok'thor the Breaker, 9031 Anub'shiah, 9032 Hedrum the Creeper, one urand roll each run (blackrock_depths.cpp aRingBoss[] :202). Judged on the entry the row would actually key to: creatures.json 9027 is Mortal Strike 15708 (targetA 6 rangeMax 5), Bloodlust 21049 (friendly buff) and Whirlwind 13736, and 13736 is the only shape. It is targetA 1 aura 23 periodic-trigger amplitude 2000 with duration 2000, firing 15589 - aoeShape pbaoe radiusYd 8. That is the Herod disc at a TWENTIETH of the window: 8989 runs 10 s and sm-armory.json gates keep_range 9 on buffPresent 8989, while 13736 is gone in 2 s, which is less than the walk out and back. 15589 is also Effect 17 SPELL_EFFECT_WEAPON_DAMAGE, which the bake has no mapper for, so spell-data 15589 ships effects: [] and it lands nothing on this floor today. acid_classic.sql:14143-14145 creature_id=9027, eventai/blackrock-depths.ts:368-401 scripts 902701-902703.",
74
+ "encounterRows": [
75
+ {
76
+ "kind": "position",
77
+ "label": "Casters step out of Grizzle's Ground Tremor",
78
+ "cite": "Grizzle 9028 is one of the six the arena rolls (blackrock-depths.ts:257-264 bossPool, blackrock_depths.cpp:202 aRingBoss[]) and the only one of the six carrying a row-worthy disc. acid_classic.sql:14147-14149 creature_id=9028, eventai/blackrock-depths.ts:407-442 script 902801 fires Ground Tremor 6524 every 7-14 s. That is the SAME spell id Lord Roccor casts above and Archaedas casts in Uldaman, so this row is his spell for spell: 6524 bakes aoeShape pbaoe radiusYd 20, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, mechanic 12, a 2000 ms stun, castTimeMs 0. isWithinRadiusYd hits at <=, so 21 is the first clear yard, and the 24 yd trigger is deliberately wider than the park so a row released on the yard it parks on cannot re-arm on the boss's next step and cancel its own walk. isCaster keeps the melee out of it - a permanent park at 21 yd would end melee for a 2 s stun. What made this unauthorable until 2026-08-27 was not the spell but the FILING: buildEncounterRowIndex keyed a boss's rows on its own entry plus whatever a kill-order named, and 9027 is a placeholder the fight overwrites at materialize (:302-325), so a row filed under it was off five runs in six. A row now also files under the body its keep_range NAMES, and all 13 move rows in the shipped packs name their own boss, so nothing else moved.",
79
+ "rule": {
80
+ "id": "raid_enc_9027_range_6524_grizzle",
81
+ "action": {
82
+ "kind": "move",
83
+ "move": {
84
+ "kind": "keep_range",
85
+ "minYd": 21,
86
+ "entry": 9028
87
+ }
88
+ },
89
+ "conditions": [
90
+ {
91
+ "subject": "self",
92
+ "metric": "isCaster",
93
+ "op": "==",
94
+ "value": 1
95
+ },
96
+ {
97
+ "subject": "self",
98
+ "metric": "creatureDistanceYd",
99
+ "op": "<=",
100
+ "value": 24,
101
+ "ref": 9028
102
+ }
103
+ ],
104
+ "enabled": true
105
+ }
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "entry": 9024,
111
+ "name": "Pyromancer Loregrain",
112
+ "kinds": [],
113
+ "cite": "eventai/blackrock-depths.ts:280-323 scripts 902401-902404, acid_classic.sql:14134-14137 creature_id=9024. Molten Blast 15095 is targetA 6 rangeMax 30 castTimeMs 2000, and Flame Shock 15616 is targetA 6 rangeMax 20 - both single target with no radiusYd. Fire Ward 15041 is targetA 1, a 119 fire absorb on himself. Scorching Totem 15038 is Effect 87 summon_totem of creature 9637 with 5 HP for 35 s, which is a body and not a party verb, and the body is inert anyway: creatures.json 9637 carries its Attack 15037 on charmSpells with an empty spells array, so the totem swings nothing on this floor."
114
+ },
115
+ {
116
+ "entry": 9017,
117
+ "name": "Lord Incendius",
118
+ "kinds": [
119
+ "spread",
120
+ "position"
121
+ ],
122
+ "note": "Fire Storm drops a burning 5 yd patch under a random party member and it keeps ticking for 30 seconds. Step off it.",
123
+ "cite": "eventai/blackrock-depths.ts:226-274 scripts 901701-901705, acid_classic.sql:14122-14126 creature_id=9017. Curse of the Elemental Lord 26977 is pbaoe radiusYd 45 - the whole room - and it is aura 22 fire resistance -101, dispel 2 curse, so a decurse answers it and that is a class row. Mighty Blow 14099 is targetA 6 rangeMax 10 single target. Fiery Burst 13900 is the second ground spell and is handled in blockedBy. Fire Storm 13899 is the row.",
124
+ "encounterRows": [
125
+ {
126
+ "kind": "spread",
127
+ "label": "Step out of Fire Storm (5 yd pool)",
128
+ "cite": "spell 13899 Fire Storm bakes aoe ground radiusYd 5 castTimeMs 2000: 324-376 fire on impact plus Effect 27 persistent area (aura 3, amplitude 3000) that dynamicObject.ts:220-223 isPersistentAreaEffect turns into a real pool ticking 185 every 3 s for 30 s. Script 901704 fires it at TARGET_T 4 HOSTILE_RANDOM every 11-14 s, so the patch lands on a random raider, and applySpell.ts:1261 sites the pool on the TARGET for a ground shape (aoeFanFromCaster is false for 'ground', combatGeometry.ts:317-319) rather than on Incendius. Incendius's own body is not published as a hazard beside it: hazards.ts:81 requires spellAoeFromCaster, and 13899 is targetA 16 AT_DEST_LOC with rangeMax 30, which combatGeometry.ts:328 CASTER_LOCATION_TARGET_A does not contain, so the only thing avoid_zone \"13899\" can match is the pool itself. That is the Faerlina / Huhuran / Venoxis row shape exactly, gated the same way on hazardProximityYd, so it disarms the moment the raider is clear and never becomes a standing park.",
129
+ "rule": {
130
+ "id": "raid_enc_9017_avoid_13899",
131
+ "action": {
132
+ "kind": "move",
133
+ "move": {
134
+ "kind": "avoid_zone",
135
+ "id": "13899"
136
+ }
137
+ },
138
+ "conditions": [
139
+ {
140
+ "subject": "self",
141
+ "metric": "hazardProximityYd",
142
+ "op": "<=",
143
+ "value": 0
144
+ }
145
+ ],
146
+ "enabled": true
147
+ }
148
+ }
149
+ ],
150
+ "blockedBy": {
151
+ "position": "Fiery Burst 13900 is the other half of the kit and no verb reaches it. It bakes aoe ground radiusYd 10 castTimeMs 1500 for 509 base fire with NO dot, so isPersistentAreaEffect is false and no pool is created for avoid_zone to match. Script 901702 fires it at TARGET_T 1 HOSTILE, i.e. centred on whoever he is tanking, every 9-16 s - so every melee is inside the 10 yd fan by construction. spread cannot answer that either: minYd would be 11, and CORRECTED 2026-08-27, and this clause is now DEAD twice over: clampAimToOwnReach no longer pins a melee onto a flat ring at all - sessionMechanicMove.ts:130 floors it at meleeContactYd(false, f.spec.combatReachYd, focus.spec.combatReachYd), so entry 9017 at combat_reach 3.00 gives a 6.38 ring, not (combatGeometry.ts:37, creatureAiConstants.ts:76), where three melee cannot be 11 yd apart, so the row would shuffle all fight and never settle. That is the same refusal sm-graveyard.json records for a 10 yd fan. STALE AS OF 2026-08-26, and only this clause: 1a2b3512d floored clampAimToOwnReach at the PAIR contact ring instead of the flat 5. Lord Incendius carries combat_reach 3.00, so the ring is 6.38 and two melee on opposite sides of him stand 12.76 yd apart - outside the radiusYd 10 fan, where at the old flat 5 they were 10.00 apart and inside it. So a spread minYd 11 is now geometrically satisfiable without leaving melee reach, and the walk fits the cast: each mover covers about half the 9 yd of separation, ~640 ms against a 1500 ms cast. The OTHER clause still stands and is what keeps this blocked: the burst bakes no dot, so isPersistentAreaEffect is false, no pool exists and avoid_zone has nothing to match. NO row is authored on arithmetic alone - the tank eats the fan by construction and whether the other melee actually end up on opposite arcs is a placement question that wants a floor measurement."
152
+ }
153
+ },
154
+ {
155
+ "entry": 9041,
156
+ "name": "Warder Stilgiss",
157
+ "kinds": [],
158
+ "cite": "eventai/blackrock-depths.ts:706-770 scripts 904101-904107, acid_classic.sql:14220-14226 creature_id=9041. 904101 puts him in SET_RANGED_MODE 2 at 35 yd; Frostbolt 12675 is targetA 6 rangeMax 40 castTimeMs 3000 single target, and Frost Armor 12544 / 12556 and Frost Ward 15044 are all targetA 1 self buffs. Frost Nova 12674 is the only shaped one: aoeShape pbaoe radiusYd 10, targetA 22 and tgtB 15, castTimeMs 0, mechanic 7 root, 97 frost plus an 8 s root, every 14-18 s. Ten yards on a mob that stands at 35 lands on whoever chased him, which is the melee, and there is no cast bar and no aura on him to gate a walk on. A trinket or a Free Action Potion answers a root and both are class rows."
159
+ },
160
+ {
161
+ "entry": 9056,
162
+ "name": "Fineous Darkvire",
163
+ "kinds": [],
164
+ "cite": "eventai/blackrock-depths.ts:595-651 scripts 905601-905606, acid_classic.sql:14231-14236 creature_id=9056. Holy Strike 13953 is Effect 58 targetA 6 rangeMax 5, Kick 11978 is targetA 6 with Effect 68 INTERRUPT_CAST on EVENT_T TARGET_CASTING, and Seal of Reckoning 15346 is targetA 21 aura 42 on himself. Devotion Aura 8258 is Effect 35 APPLY_AREA_AURA_PARTY radiusYd 30 for +20 armor - a friendly buff, so a purge is the answer and that is a class row. Holy Light 15493 at 60% and 40% HP is a 467-541 self-heal with castTimeMs 2500 and interruptFlags 15, which is a kick or an Earth Shock - also a class row. Nothing in the kit carries an enemy radiusYd."
165
+ },
166
+ {
167
+ "entry": 9016,
168
+ "name": "Bael'Gar",
169
+ "kinds": [
170
+ "spread"
171
+ ],
172
+ "note": "Bael'Gar drops a 5 yd fire blast on one party member at 80, 60, 40 and 20 percent health. Standing apart means it only ever catches one.",
173
+ "cite": "eventai/blackrock-depths.ts:172-220 scripts 901601-901605, acid_classic.sql:14116-14120 creature_id=9016. Magma Splash 23378 is targetA 1 aura 42 proc-trigger of 23379, and it does nothing here twice over: spell-data 23378 ships effects: [] and spell_proc_event gives it customChance 25 with a 3,000,000 ms cooldown. Summon Spawn of Bael'Gar 13895 is the whole fight and it is the row.",
174
+ "encounterRows": [
175
+ {
176
+ "kind": "spread",
177
+ "label": "Stand 6 yd apart so one Spawn blast cannot catch two",
178
+ "cite": "spell 13895 bakes aoe ground radiusYd 5 castTimeMs 4000 rangeMax 30 for 1388-1612 fire. Its rawEffects targetA is 16 AT_DEST_LOC, which combatGeometry.ts:328 CASTER_LOCATION_TARGET_A does not contain, so spellAoeFromCaster is false and aoeCast.ts:80 centres the 5 yd fan on the CAST'S target rather than on Bael'Gar - a distance between raiders, which is the one thing spacing can answer. Scripts 901602-901605 fire it at TARGET_T 4 HOSTILE_RANDOM on the 80 / 60 / 40 / 20% HP thresholds, so it is a random raider four times a fight at roughly a level-55 party member's whole health bar. minYd 6 is radiusYd 5 plus one, the same first-clear-yard rule the Thalnos row uses, and deliberately not radius plus FLEE_CLEAR_MARGIN_YD 5: clampAimToOwnReach pins a melee onto its MELEE_REACH_YD 5 ring (combatGeometry.ts:37), and three melee cannot be 10 yd apart on a 5 yd ring. The tank sits it out on targetAttackingMe, because walking the aggro holder drags the boss across the camp. Honest about the second half: rawEffects also carries Effect 42 SUMMON miscValue 9436 Spawn of Bael'Gar, and the bake does not map it - spell-data 13895 ships direct_damage only, so no Spawn body reaches this floor and the row is spacing against the nuke alone.",
179
+ "rule": {
180
+ "id": "raid_enc_9016_spread_13895",
181
+ "action": {
182
+ "kind": "move",
183
+ "move": {
184
+ "kind": "spread",
185
+ "minYd": 6
186
+ }
187
+ },
188
+ "conditions": [
189
+ {
190
+ "subject": "self",
191
+ "metric": "targetAttackingMe",
192
+ "op": "==",
193
+ "value": 0
194
+ },
195
+ {
196
+ "subject": "self",
197
+ "metric": "alliesWithinYd",
198
+ "op": ">",
199
+ "value": 0,
200
+ "ref": 6
201
+ }
202
+ ],
203
+ "enabled": true
204
+ }
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ "entry": 9033,
210
+ "name": "General Angerforge",
211
+ "kinds": [
212
+ "kill-order"
213
+ ],
214
+ "note": "Below 30 percent Angerforge sounds the alarm and two Anvilrage Medics arrive with him. They heal him for 878 a cast. Kill the medics.",
215
+ "cite": "boss_general_angerforge.cpp:28-125; acid_classic.sql:14167 names the cpp and creatures.json 9033 has no spells array, so the kit is the port at scriptdev/blackrockDepths.ts:369-491. His own three are Flurry 15088 (targetA 1, proc-trigger 17687), Enrage 15097 (targetA 1, proc-trigger 15061) and Sunder Armor 15572 (targetA 6 rangeMax 5) - all self or single target, nothing with a radiusYd. The fight is the alarm.",
216
+ "encounterRows": [
217
+ {
218
+ "kind": "kill-order",
219
+ "label": "Kill the Anvilrage Medics before Angerforge",
220
+ "cite": "boss_general_angerforge.cpp:92-108 Alarm at GetHealthPercent() < 30.0f summons 8x Anvilrage Reservist 8901 and 2x NPC_ANVILRAGE_MEDIC 8894, re-arming every 3 minutes (:104), and scriptdev/blackrockDepths.ts:415-465 arms both as real summonWaves so the bodies land on the floor. Only one of the two is a healer: creatures.json 8894 Anvilrage Medic carries spells [13864, 15586, 15585, 15587] off acid_classic.sql:13914-13919, so it casts Heal 15586 for 878 on EVENT_T 14 FRIENDLY_MISSING_HP and Prayer of Healing 15585 for 373 to everything within 30 yd, on a boss the party has already taken to 30%. The reservists are not on the list: creatures.json 8901 is Battle Shout 9128, Hamstring 9080, Strike 11976 and Shoot 6660, 760 HP, and nothing in the DB says a plain add outranks the boss. kill_order is a filter and spends no GCD (evaluate.ts:578 firstLivingKillOrderEntry returns null while no 8894 is in hostileCreatureEntries), so it no-ops for the whole first 70% of the fight and only bites once the medics exist.",
221
+ "rule": {
222
+ "id": "raid_enc_9033_kill",
223
+ "action": {
224
+ "kind": "kill_order",
225
+ "entries": [
226
+ 8894
227
+ ]
228
+ },
229
+ "conditions": [],
230
+ "enabled": true
231
+ }
232
+ }
233
+ ]
234
+ },
235
+ {
236
+ "entry": 8983,
237
+ "name": "Golem Lord Argelmach",
238
+ "kinds": [],
239
+ "cite": "eventai/blackrock-depths.ts:118-166 scripts 898301-898305, acid_classic.sql:14110-14114 creature_id=8983. Chain Lightning 15305 is targetA 6 rangeMax 30 castTimeMs 3000 and Shock 15605 is targetA 6 rangeMax 20, both single-target nukes with no radiusYd. Lightning Shield 15507 is targetA 1 aura 43, a damage shield he re-applies on EVENT_T MISSING_AURA - it hits whoever melees him, which makes it a purge or a decision about swinging, and both are class rows. Nothing here has an area shape."
240
+ },
241
+ {
242
+ "entry": 9537,
243
+ "name": "Hurley Blackbreath",
244
+ "kinds": [],
245
+ "cite": "blackrock_depths.cpp:1441-1573 npc_hurley_blackbreathAI, ported at scriptdev/blackrockDepths.ts:960-1010; acid_classic.sql:14284 names the cpp and creatures.json 9537 has no spells array. Two abilities. Drunken Rage 14872 at <31% HP is targetA 1, +50% haste and +50% damage on himself for 15 s, a tank-and-healer problem with no ground to stand out of. Flame Breath 9573 is a genuine frontal cone - src_spell_cone Id=9573 ConeDegrees 53, radiusYd 8, castTimeMs 2000, targetA 24, on the victim every 10 s - but it is the Ironaya wedge and not the Sarevess one: 8 yd reaches melee only, and the product already answers it. sessionChase.ts:440-461 meleeFlankSlot reads coneArcsOfKit off the baked kit and slides every non-tank melee out of the front half plus each kit cone (combatGeometry.ts:567-586), while coneCovers refuses an arc past its own radiusYd, so a raider at the 20-25 yd stand is never inside this one. The 53 degree cone that DID earn a behind_target, Lady Sarevess's Forked Lightning 8435, has radiusYd 30 and reaches the ranged; this one cannot."
246
+ },
247
+ {
248
+ "entry": 9502,
249
+ "name": "Phalanx",
250
+ "kinds": [
251
+ "position"
252
+ ],
253
+ "note": "Under half health Phalanx starts throwing a fireball volley 20 yd around himself every 15 seconds. The ranged only need one more yard.",
254
+ "cite": "blackrock_depths.cpp:545-685 npc_phalanxAI, ported at scriptdev/blackrockDepths.ts:787-844; acid_classic.sql:14282 names the cpp and creatures.json 9502 carries the kit on charmSpells, so the schedule is the IR plus the encounter's own bossSpells (blackrock-depths.ts:663). Thunderclap 15588 is aoeShape pbaoe radiusYd 10 for 70 physical and a slow - a disc at melee reach, the Stockade shape. Mighty Blow 14099 is targetA 6 rangeMax 10 single target with a knockback. Fireball Volley 15285 is the row.",
255
+ "encounterRows": [
256
+ {
257
+ "kind": "position",
258
+ "label": "Casters step out of Fireball Volley",
259
+ "cite": "spell 15285 Fireball Volley bakes aoeShape pbaoe radiusYd 20, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, castTimeMs 0, 128-172 fire. blackrock_depths.cpp:594,666-671 arms it at GetHealthPercent() < 51.0f and re-arms every 15 s, which scriptdev/blackrockDepths.ts:817-831 ports as hpPctMax 51 - so the row carries the same HP gate and is not armed for the top half of the fight. Same 20 yd disc and the same target ids as Archaedas's Ground Tremor, so it is that row: isWithinRadiusYd hits at <=, 21 is the first clear yard, and the 24 yd trigger is deliberately wider than the park so the row does not re-arm on the boss's next step and cancel its own walk. The 25 yd ranged stand (stand.ts:20) sits outside the trigger, so this only ever moves a caster who has drifted in or a hunter sitting on the 20 yd floor (stand.ts:18), which the disc reaches at <=. isCaster keeps the melee out of it - a permanent 21 yd park is four times MELEE_REACH_YD and would end melee to dodge 128 fire. Instant with no aura, so like the Archaedas row this is a standing position rule and not a reaction.",
260
+ "rule": {
261
+ "id": "raid_enc_9502_range_15285",
262
+ "action": {
263
+ "kind": "move",
264
+ "move": {
265
+ "kind": "keep_range",
266
+ "minYd": 21,
267
+ "entry": 9502
268
+ }
269
+ },
270
+ "conditions": [
271
+ {
272
+ "subject": "target",
273
+ "metric": "healthPct",
274
+ "op": "<",
275
+ "value": 51
276
+ },
277
+ {
278
+ "subject": "self",
279
+ "metric": "isCaster",
280
+ "op": "==",
281
+ "value": 1
282
+ },
283
+ {
284
+ "subject": "self",
285
+ "metric": "creatureDistanceYd",
286
+ "op": "<=",
287
+ "value": 24,
288
+ "ref": 9502
289
+ }
290
+ ],
291
+ "enabled": true
292
+ }
293
+ }
294
+ ]
295
+ },
296
+ {
297
+ "entry": 9543,
298
+ "name": "Ribbly Screwspigot",
299
+ "kinds": [],
300
+ "cite": "eventai/blackrock-depths.ts:806-837 scripts 954301-954303, acid_classic.sql:14289-14291 creature_id=9543. Gouge 12540 on EVENT_T 33 FACING_TARGET is targetA 6 rangeMax 5, mechanic 14, a 4 s incapacitate on whoever he is facing; Hamstring 9080 is targetA 6 rangeMax 5, mechanic 11, a 10 s snare. Both are single target with no radiusYd, and both are answered by a trinket, which is a class row. Flees for assist at 15%, and instance_blackrock_depths.cpp:546-555 turns his DEATH into the bar patrol (1x 8911 + 2x 8895, blackrock-depths.ts:347-354) - a spawn, not a party verb."
301
+ },
302
+ {
303
+ "entry": 9499,
304
+ "name": "Plugger Spazzring",
305
+ "kinds": [],
306
+ "cite": "blackrock_depths.cpp:1614-1808 boss_plugger_spazzringAI, ported at scriptdev/blackrockDepths.ts:855-950; acid_classic.sql:14280 names the cpp and creatures.json 9499 carries the kit on charmSpells. Every one is single target or self: Shadow Bolt 12739 targetA 6 rangeMax 40 castTimeMs 3000, Immolate 12742 targetA 6 rangeMax 30, Curse of Tongues 13338 targetA 6 dispel 2 curse on a mana holder, Demon Armor 13787 targetA 1. Banish 8994 is the only one that costs the party a body - targetA 6, mechanic 18, 15 s, dispel 1 magic, on a random raider every 26-28 s - and a trinket or a dispel answers it, which are class rows. None of the five has a radiusYd."
307
+ },
308
+ {
309
+ "entry": 9156,
310
+ "name": "Ambassador Flamelash",
311
+ "kinds": [
312
+ "kill-order"
313
+ ],
314
+ "note": "Burning Spirits walk out of the seven runes and feed themselves to Flamelash, and each one that reaches him leaves a damage buff for three minutes. Kill them on the way in.",
315
+ "cite": "boss_ambassador_flamelash.cpp:29-154, ported at scriptdev/blackrockDepths.ts:513-615; acid_classic.sql:14237 names the cpp and creatures.json 9156 has no spells array. His only own cast is Fire Blast 15573 on aggro, targetA 1 aura 42 proc-trigger of 15574, and spell-data 15573 ships effects: [] so it pays nothing here. Everything else is bodies: 4x Fireguard Destroyer 8911 at :88-91, and one Burning Spirit 9178 per rune every 15-30 s at :60-66,127-137.",
316
+ "encounterRows": [
317
+ {
318
+ "kind": "kill-order",
319
+ "label": "Kill the Burning Spirits before they reach him",
320
+ "cite": "boss_ambassador_flamelash.cpp:69-78 MoveInLineOfSight: a tracked NPC_BURNING_SPIRIT 9178 that gets within 2*CONTACT_DISTANCE casts SPELL_BURNING_SPIRIT 13489 on Flamelash, and SpellEffects.cpp:497-502 turns that dummy into 14744 on him - spell-data 14744 bakes it as spell_power +30 for 180 s with stackAmount 50 - from a spirit that instakills itself doing it. Both halves are live in this tree, which is what makes the row real: eventAi.ts:1227-1265 runScriptDevReachCasts fires the reach-cast at FLAMELASH_SPIRIT_REACH_YD 2, and dummy-script-tail.ts:334-340 pushes 14744 as the trigger. The spirits are cheap and they do not fight back - creatures.json 9178 is level 30 with 1003 HP against a level 57 boss, and eventAi.ts:1218-1222 sets them REACT_PASSIVE with threat cleared per cpp:112 MoveFollow - so ordering them first costs the party a swing each and no GCD (kill_order is a filter, evaluate.ts:578). The Fireguard Destroyers 8911 are NOT on the list: nothing in the cpp says they precede the boss, they are 7599 HP elites that would swallow the fight, and their Fireball Volley 15285 is a 20 yd disc a kill-order cannot answer anyway.",
321
+ "rule": {
322
+ "id": "raid_enc_9156_kill",
323
+ "action": {
324
+ "kind": "kill_order",
325
+ "entries": [
326
+ 9178
327
+ ]
328
+ },
329
+ "conditions": [],
330
+ "enabled": true
331
+ }
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "entry": 8923,
337
+ "name": "Panzor the Invincible",
338
+ "kinds": [],
339
+ "cite": "eventai/blackrock-depths.ts:104-112 script 892301, acid_classic.sql:14082 creature_id=8923 - one row, and it is his whole kit. Spell Reflection 9941 on spawn is targetA 1, aura 28, DurationIndex 21 which is the permanent 4294967295 sentinel, so it is a passive and not a window, and spell-data 9941 ships effects: [] so it reflects nothing on this floor. There is no ACTION_T_CAST at all beyond that, no ScriptDev cpp for 8923, and creatures.json 8923 carries only [9941]. Pure creature_template melee - tank and spank."
340
+ },
341
+ {
342
+ "entry": 9039,
343
+ "name": "Doom'rel",
344
+ "kinds": [
345
+ "position"
346
+ ],
347
+ "cite": "eventai/blackrock-depths.ts:1148-1198 scripts 903901-903905, acid_classic.sql:14205-14209 creature_id=9039. Immolate 12742 and Curse of Weakness 12493 are targetA 6 single-target, Demon Armor 13787 is targetA 1, and Summon Voidwalkers 15092 on aggro is Effect 42 miscValue 8996 plus triggers 15093 / 15094 - bodies with no kit of their own (creatures.json 8996 has no spells array) and nothing in the cpp or the DB says they must die before him. Shadow Bolt Volley 15245 is the only shaped ability and it is handled in blockedBy.",
348
+ "encounterRows": [
349
+ {
350
+ "kind": "position",
351
+ "label": "Casters step out of Shadow Bolt Volley",
352
+ "cite": "spell 15245 Shadow Bolt Volley bakes aoeShape pbaoe radiusYd 30, castTimeMs 3000, and entry 9039's spell list repeats it every 8-12 s. The refusal this replaces imported the Old Serra'kis argument, and that argument does not transfer: Serra'kis is refused because aura 8434 NEVER DROPS, so a keep_range gated on it arms on pull and camps all fight. 15245 has a 3000 ms CAST BAR, so the row is a reaction and not a camp - which is exactly the difference blackrock-depths.json Lord Roccor records from the other side (\"He leaves no aura and has no cast bar, so this is a standing position rule and not a reaction\"). The shipped precedent for this shape is wailing-caverns.json Verdan: keep_range gated on target.castingSpellId for a 1000 ms cast. isWithinRadiusYd hits at <=, so 31 is the first clear yard past radiusYd 30. keep_range is NOT clamped onto the mover's own reach - clampAimToOwnReach runs only in the flee_raid and spread branches of sessionMechanicMove.ts, never the keep_range one - so the park is mechanically reachable even though RANGED_STAND_MAX_YD 30 caps the STAND. The walk fits the cast with room: a caster stands 20-30 yd (stand.ts:18,20), so 1.5-11.5 yd at BASE_RUN_SPEED 7.0 is 0.21-1.64 s against a 3000 ms cast and RUNOUT_YIELD_AFTER_MS 4000. isCaster keeps the melee out: 5 to 31.5 is 3.8 s and would miss the cast. The boss's current victim is exempt (sessionMechanicMove.ts:563-566), so the tank is not walked. FLOOR MEASURED 2026-08-27 off the committed blackrock-depths navmesh rather than asserted: at Doom'rel's spawn (1281.1, -282.2, -78.1), 51 of 72 bearings hold walkable floor at r=31.5 - the SAME 71% as at r=25, the caster stand, so there is no cliff between the stand and the park. Cite: evaluate.ts:56 castingSpellId; :159 creatureDistanceYd; :200 isCaster.",
353
+ "note": "NOT MEASURED: whether the trade pays. Each volley is 128-172 shadow avoided against roughly a second of walk each way inside an 8-12 s cycle, and the cost depends on where the caster was standing - 1.5 yd from the 30 yd outer stand, 6.5 yd from the 25 yd default. Verdan's row is justified by a 10 s ROOT; this one only by chip damage, which is the weaker case. Authored because it is recoverable and the player owns it: raidEncounterTactics.ts:8 says a row is the default the Raid tab opens with and the player switches it off or writes their own on top. A floor session is what settles it.",
354
+ "rule": {
355
+ "id": "raid_enc_9039_keep_range_15245",
356
+ "action": {
357
+ "kind": "move",
358
+ "move": {
359
+ "kind": "keep_range",
360
+ "minYd": 31,
361
+ "entry": 9039
362
+ }
363
+ },
364
+ "conditions": [
365
+ {
366
+ "subject": "self",
367
+ "metric": "isCaster",
368
+ "op": "==",
369
+ "value": 1
370
+ },
371
+ {
372
+ "subject": "target",
373
+ "metric": "castingSpellId",
374
+ "op": "==",
375
+ "value": 15245
376
+ },
377
+ {
378
+ "subject": "self",
379
+ "metric": "creatureDistanceYd",
380
+ "op": "<=",
381
+ "value": 34,
382
+ "ref": 9039
383
+ }
384
+ ],
385
+ "enabled": true
386
+ }
387
+ }
388
+ ]
389
+ },
390
+ {
391
+ "entry": 9938,
392
+ "name": "Magmus",
393
+ "kinds": [
394
+ "spread"
395
+ ],
396
+ "cite": "src_creature_spell_list Id=993801 (acid_classic.sql:14311 points at it; creatures.json 9938 spells [15593, 15668]). Two abilities. War Stomp 15593 every 30-60 s is aoeShape pbaoe radiusYd 5, targetA 22 and tgtB 15, castTimeMs 0, mechanic 12, an 8 s stun plus a weapon hit - five yards is melee reach exactly, the Smoke Bomb shape, and the 20-25 yd stand is already outside it. A repeated melee stun is answered by a trinket, Tremor Totem or Berserker Rage, which are class rows. Fiery Burst 15668 is handled in blockedBy.",
397
+ "blockedBy": {
398
+ "spread": "Fiery Burst 15668 bakes aoe ground radiusYd 10 castTimeMs 2000 for 254 base fire and no dot, so isPersistentAreaEffect is false and no pool exists for avoid_zone to match. src_creature_spell_list 993801 Position 2 casts it at TargetId 1 CURRENT (aiTargeting.ts:55 SPELL_LIST_TARGET.CURRENT) every 6-12 s, i.e. centred on whoever he is tanking, so every melee is inside the fan by construction. spread would need minYd 11, and CORRECTED 2026-08-27, and this clause is now DEAD twice over: clampAimToOwnReach no longer pins a melee onto a flat ring at all - sessionMechanicMove.ts:130 floors it at meleeContactYd(false, f.spec.combatReachYd, focus.spec.combatReachYd), so entry 9938 at combat_reach 3.50 gives a 6.88 ring, not (combatGeometry.ts:37), where three melee cannot be 11 yd apart - the row would shuffle all fight and never settle. Same refusal as Lord Incendius's Fiery Burst 13900, which is the same shape at the same radius. STALE AS OF 2026-08-26, and only this clause: 1a2b3512d floored clampAimToOwnReach at the PAIR contact ring instead of the flat 5. Magmus carries combat_reach 3.50, so the ring is 6.88 and two melee on opposite sides of him stand 13.76 yd apart - outside the radiusYd 10 fan, where at the old flat 5 they were 10.00 apart and inside it. So a spread minYd 11 is now geometrically satisfiable without leaving melee reach, and the walk fits the cast: each mover covers about half the 9 yd of separation, ~640 ms against a 1500 ms cast. The OTHER clause still stands and is what keeps this blocked: the burst bakes no dot, so isPersistentAreaEffect is false, no pool exists and avoid_zone has nothing to match. NO row is authored on arithmetic alone - the tank eats the fan by construction and whether the other melee actually end up on opposite arcs is a placement question that wants a floor measurement."
399
+ }
400
+ },
401
+ {
402
+ "entry": 8929,
403
+ "name": "Princess Moira Bronzebeard",
404
+ "kinds": [],
405
+ "cite": "boss_emperor_dagran_thaurissan.cpp:145-234 boss_moira_bronzebeardAI, ported at scriptdev/blackrockDepths.ts:709-777; creatures.json 8929 carries [15586, 8362, 15587] on charmSpells and the schedule is the IR. She is a pure caster - cpp:167-168 sets m_attackDistance 25 and m_meleeEnabled false - and every cast is single target or friendly: Mind Blast 15587 targetA 6 rangeMax 30 castTimeMs 1500, Shadow Word: Pain 15654 and Smite 10934 on the victim, Heal 15586 targetA 21 and Renew 8362 targetA 21 aura 8. Not one carries a radiusYd, so there is no shape to stand out of; what answers a 3500 ms Heal is a kick, and that is a class row."
406
+ },
407
+ {
408
+ "entry": 9019,
409
+ "name": "Emperor Dagran Thaurissan",
410
+ "kinds": [
411
+ "kill-order"
412
+ ],
413
+ "cite": "boss_emperor_dagran_thaurissan.cpp:41-127, ported at scriptdev/blackrockDepths.ts:633-706; creatures.json 9019 carries [15636, 17492] on charmSpells. Hand of Thaurissan 17492 is targetA 6 rangeMax 30, 239 fire plus mechanic 12, a 5 s stun on a random raider every 5-10 s - single target, no radius, a trinket answers it. Avatar of Flame 15636 reads like a ground effect and is not one: its implicit target is 1 TARGET_UNIT_CASTER, it is a 10 s self buff, and its aura 42 proc-trigger pays through Flames 15643, which is targetA 6 rangeMax 5 for 169 on whoever he hits. Nothing in the fight has a radiusYd.",
414
+ "blockedBy": {
415
+ "kill-order": "the Moira interaction is a PHASE GATE and it points the other way. boss_emperor_dagran_thaurissan.cpp:68 CallForHelp(VISIBLE_RANGE 166) pulls her into his fight, and liveAggroStream.ts:952-966 expandThroneCallForHelp puts that on the floor here, so she really is a second body. But cpp:71-88 JustDied then sets the Princess to FACTION_NEUTRAL 734 and EnterEvadeMode, so killing the Emperor ENDS her participation for free - the focus is already the body a kill-order would have to name first, and there is no order left to impose. The one thing that would justify a healer-first row is Heal 15586 for 878 on him every 10 s (cpp:218-226), and it is not on this floor: scriptdev/blackrockDepths.ts:754-757 deliberately omits that timer from her schedule, naming the concurrent ally cast as a product GAP, so a kill-order on 8929 would order a kill against a healer that never heals. She is also her own encounter here (blackrock-depths.ts:1327-1336 princess-moira), so the party can already take her first by hand."
416
+ }
417
+ }
418
+ ]
419
+ }