azeroth-shell 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +35 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +144 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,170 @@
1
+ {
2
+ "raid": "scholomance",
3
+ "note": "Reviewed for E5.4 against boss_jandice_barov.cpp, boss_darkmaster_gandling.cpp, scholomance.cpp, eventai/scholomance.ts and acid_classic.sql:16061-16243. Eleven of the thirteen come back kinds: [] - most of this wing is a disc at or inside melee reach, which the melee have to stand in to fight at all, and the three abilities that ARE wider are 30 and 45 yd, which is past the ranged stand, so there is no ground left to step onto. Two earn a row: Vectus drops a real Flamestrike pool under a random raider, and Ras Frostwhisper carries the 20 yd disc that is the Archaedas shape.",
4
+ "bosses": [
5
+ {
6
+ "entry": 10506,
7
+ "name": "Kirtonos the Herald",
8
+ "kinds": [
9
+ "position"
10
+ ],
11
+ "cite": "eventai/scholomance.ts:347-469 scripts 1050601-1050611, acid_classic.sql:16175-16185 creature_id=10506. Phase 1 is melee only: Swoop 18144 and Wing Flap 12882 are both src_spell_cone ConeDegrees 71 at radiusYd 5 and 10, and the product already answers them - sessionChase.ts:440 meleeFlankSlot reads coneArcsOfKit (combatGeometry.ts:451) and slides every non-tank melee out of each kit cone, while coneCovers (:475) refuses an arc past its own radiusYd, so a raider at the 20-25 yd stand is never inside one. That is the Hurley Blackbreath wedge, not the Lady Sarevess one. Pierce Armor 6016 (armor -50% for 20 s) and Disarm 8379 (mechanic 3, 10 s) are targetA 6 rangeMax 5 single target. Kirtonos Transform 16467 flips him to phase 2, where Curse of Tongues 12889 is pbaoe radiusYd 20 for haste -50% with dispel 2 curse - a decurse, which is a class row - and Dominate Mind 14515 is a single-target 15 s charm a dispel answers. Shadow Bolt Volley 17228 is the one ability that asks for something and no verb reaches it.",
12
+ "blockedBy": {
13
+ "position": "Shadow Bolt Volley 17228 bakes aoeShape pbaoe radiusYd 30, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, castTimeMs 0, 128-172 shadow, fired every 4-7 s once he is transformed (script 1050607, acid_classic.sql:16181). isWithinRadiusYd hits at <=, so the first clear yard is 31, which is past RANGED_STAND_MAX_YD 30 (stand.ts:19) and past the 30 yd rangeMax the caster nukes sit on. That is the Doom'rel refusal in blackrock-depths.json spell for spell: a 30 yd disc means the whole party is inside it, so a park at 31 buys the volley and costs every cast."
14
+ }
15
+ },
16
+ {
17
+ "entry": 10503,
18
+ "name": "Jandice Barov",
19
+ "kinds": [],
20
+ "cite": "boss_jandice_barov.cpp:28-112, ported at scriptdev/scholomance.ts:302-402; there are no ACID rows for 10503 and creatures.json 10503 has no spells array, so the schedule is the IR. Curse of Blood 16098 is pbaoe radiusYd 10 with a 2000 ms cast, physical damage taken +2 for 600 s and dispel 2 curse - a decurse at melee reach. Banish 8994 is targetA 6, mechanic 18, a 15 s banish on a random not-top raider every 17-21 s (cpp:73-82), answered by a trinket or a dispel. The illusions are ADDS, not a kill-order, and that is the finding: Summon Illusions 17773 is Effect 42 basePoints 14 dieSides 1 miscValue 11439, so all 15 bodies are ONE entry (scriptdev/scholomance.ts:115-124) - there is no order to impose among them and nothing in the cpp says they precede her. They are not a gate either: Spread Jandice 17774 hides her for 8000 ms only (DurationIndex 31, scriptdev/scholomance.ts:121-130) while 17773 runs 30000 ms, so she is attackable again long before they expire. creatures.json 11439 carries only Spread 17772 on spells, a self confuse plus speed aura, with Cleave 15584 sitting on charmSpells, which combatEnemySpec.ts:136-138 never turns into a cast row - they land nothing. A kill_order on 11439 would hold the party on 15 bodies of 3144 HP each (src_creature_template 11439) against a boss with 30180, re-summoned every 25 s, and firstLivingKillOrderEntry (evaluate.ts:578) would never fall through to her. The cpp's own note at :20 says the illusions should be immune to AoE and vulnerable only to direct damage, which is a statement that they are meant to die fast."
21
+ },
22
+ {
23
+ "entry": 11622,
24
+ "name": "Rattlegore",
25
+ "kinds": [],
26
+ "cite": "eventai/scholomance.ts:628-661 scripts 1162201-1162203, acid_classic.sql:16241-16243 creature_id=11622. War Stomp 16727 every 13.1-26.4 s is aoeShape pbaoe radiusYd 5, targetA 22 and targetB 15, castTimeMs 0, mechanic 12, a 5 s stun plus a weapon hit - five yards is melee reach exactly, the Magmus and 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. Knock Away 10101 is targetA 6 rangeMax 10 single target and Strike 18368 bakes effects: [] because its Effect 17 has no mapper. Nothing in the kit is wider than melee."
27
+ },
28
+ {
29
+ "entry": 10433,
30
+ "name": "Marduk Blackpool",
31
+ "kinds": [
32
+ "position"
33
+ ],
34
+ "cite": "eventai/scholomance.ts:142-186 scripts 1043301-1043305, acid_classic.sql:16065-16069 creature_id=10433. Cleave 15754 is targetA 6 rangeMax 5 and Shadow Shield 12040 is targetA 1, a 200 absorb plus a 10 damage shield on himself - a purge, which is a class row. Defiling Aura 17695 on aggro is targetA 1, aura 23 amplitude 2000, triggering Defiling Aura 17697, and 17697 is pbaoe radiusYd 30 for shadow resistance -100 with NO damage, so even at full width a step-out saves nothing; it also pays nothing here, because stepSession.ts:1732 resolves the payload with spellFromKit(src.spec.spells, 17697) and 17697 is on none of the three lists combatEnemySpec.ts:87-96 builds that array from. Shadow Bolt Volley 17228 is the ability that asks for something.",
35
+ "blockedBy": {
36
+ "position": "Shadow Bolt Volley 17228 is the same 30 yd disc Kirtonos casts and the same refusal - aoeShape pbaoe radiusYd 30, targetA 22 and targetB 15, castTimeMs 0, 128-172 shadow, here every 6.2-14.9 s at TARGET_T 1 (script 1043303, acid_classic.sql:16067). isWithinRadiusYd hits at <=, so the first clear yard is 31 and RANGED_STAND_MAX_YD is 30 (stand.ts:19): there is no stand a keep_range could name that is not already outside the party's own casting band."
37
+ }
38
+ },
39
+ {
40
+ "entry": 10432,
41
+ "name": "Vectus",
42
+ "kinds": [
43
+ "position"
44
+ ],
45
+ "note": "Flamestrike drops a burning patch under one party member and it keeps ticking for 8 seconds. Step off it.",
46
+ "cite": "eventai/scholomance.ts:108-136 scripts 1043201-1043203, acid_classic.sql:16061-16063 creature_id=10432. Fire Shield 13377 on spawn bakes effects: [] and its trigger 13376 is not on his kit, so it lands nothing. Blast Wave 16046 every 12-14 s is aoeShape pbaoe radiusYd 10, targetA 22 and targetB 15, castTimeMs 0, 161-187 fire - ten yards sits inside the melee band and inside RANGED_STAND_MIN_YD 20 (stand.ts:18), so the melee are in it because that is where melee happens and the ranged are already out. Flamestrike 18399 is the row.",
47
+ "encounterRows": [
48
+ {
49
+ "kind": "position",
50
+ "label": "Get out of Flamestrike",
51
+ "cite": "spell 18399 Flamestrike bakes aoe true, aoeShape ground, radiusYd 5, castTimeMs 3000, rangeMax 30: 152-176 fire on impact from rawEffects effect 2 targetA 16 AT_DEST_LOC, plus effect 27 targetA 28 AT_DYNOBJ_LOC, auraName 3, amplitude 2000, durationIndex 31 for 8000 ms. aoe true plus a dot effect is exactly what dynamicObject.ts:220-224 isPersistentAreaEffect accepts, so applySpell.ts:1204-1206 creates a real GroundPool stamped with spellId 18399, hazards.ts:94-112 listHazards publishes every live pool, and hazardMatches (:134) matches a row id against String(spellId) - so avoid_zone \"18399\" names this pool and nothing else. It is Jammal'an's Flamestrike 12468 field for field, and the row is the app's own avoid verb copied from raidCustomRows.ts:411-422: avoid_zone on the spell id gated on hazardProximityYd <= 0, with no notTanking clause because the pool is where the pool is and the tank is standing in it too. combatGeometry.ts:317-319 aoeFanFromCaster returns false for a ground shape, so applySpell.ts:1261 sites the pool on the TARGET side, and script 1043203 casts it at EventAI TARGET_T 4 HOSTILE_RANDOM (aiTargeting.ts:29) after a 2-4 s opener then every 20-25 s - the patch lands under a random raider, not under Vectus. His body is not published as a second hazard beside it: hazards.ts:75-84 groundAoeOf requires spellAoeFromCaster and targetA 16 is not in CASTER_LOCATION_TARGET_A (combatGeometry.ts:321-329). Unlike a pbaoe the patch does not follow anybody - it is static for 8 s - and pickAction.ts:770 moveOwnsPastDeadline exempts avoid_zone from the 4000 ms give-up while the pool is alive, so the walk finishes. Not driven on the floor per CLAUDE.md section 3, so this ships shipped-unverified.",
52
+ "rule": {
53
+ "id": "raid_enc_10432_avoid_18399",
54
+ "action": {
55
+ "kind": "move",
56
+ "move": {
57
+ "kind": "avoid_zone",
58
+ "id": "18399"
59
+ }
60
+ },
61
+ "conditions": [
62
+ {
63
+ "subject": "self",
64
+ "metric": "hazardProximityYd",
65
+ "op": "<=",
66
+ "value": 0
67
+ }
68
+ ],
69
+ "enabled": true
70
+ }
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "entry": 10508,
76
+ "name": "Ras Frostwhisper",
77
+ "kinds": [
78
+ "position"
79
+ ],
80
+ "note": "Frostbolt Volley hits everything within 20 yd of Ras for about 230 frost every 10 to 20 seconds. The ranged only need one more yard.",
81
+ "cite": "eventai/scholomance.ts:476-542 scripts 1050801-1050808, acid_classic.sql:16192-16199 creature_id=10508. Chill Nova 18099 is pbaoe radiusYd 10 for 139-161 frost and Knock Away 11130 is pbaoe radiusYd 10 with effects: [] - both sit inside the melee band and inside RANGED_STAND_MIN_YD 20 (stand.ts:18). Freeze 18763 is targetA 6, mechanic 12, a 15 s stun with a 3500 ms cast and interruptFlags 15, which a kick or an Earth Shock answers from the class rotation, and Fear 12096 is targetA 6 rangeMax 20 on whoever he is hitting. Frost Armor 18100 is targetA 1 on himself. There is no SET_RANGED_MODE script on him, so he closes to the tank and every disc rides with him. Frostbolt Volley 8398 is the row.",
82
+ "encounterRows": [
83
+ {
84
+ "kind": "position",
85
+ "label": "Casters step out of Frostbolt Volley",
86
+ "cite": "spell 8398 Frostbolt Volley bakes aoeShape pbaoe radiusYd 20, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, castTimeMs 2000, 226-240 frost plus effectMechanic 11 snare for 8 s. Script 1050807 fires it after a 0-10 s opener then every 10-20 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. Same 20 yd radius and the same target ids as Archaedas's Ground Tremor, so this is that row: isWithinRadiusYd hits at <=, 21 is the first clear yard, and the 24 yd 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 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: 21 yd is four times MIN_AGGRO_DISTANCE 5 (creatureAiConstants.ts:76) and a permanent park there would end melee. The 2000 ms cast bar is not what the row is gated on - like the Archaedas and Phalanx rows this is a standing position rule and not a reaction, and 21 yd also clears both 10 yd discs above. Rows are keyed on the focus entry (raidEncounterTactics.ts:158-183). Not driven on the floor per CLAUDE.md section 3, so this ships shipped-unverified.",
87
+ "rule": {
88
+ "id": "raid_enc_10508_range_8398",
89
+ "action": {
90
+ "kind": "move",
91
+ "move": {
92
+ "kind": "keep_range",
93
+ "minYd": 21,
94
+ "entry": 10508
95
+ }
96
+ },
97
+ "conditions": [
98
+ {
99
+ "subject": "self",
100
+ "metric": "isCaster",
101
+ "op": "==",
102
+ "value": 1
103
+ },
104
+ {
105
+ "subject": "self",
106
+ "metric": "creatureDistanceYd",
107
+ "op": "<=",
108
+ "value": 24,
109
+ "ref": 10508
110
+ }
111
+ ],
112
+ "enabled": true
113
+ }
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "entry": 10505,
119
+ "name": "Instructor Malicia",
120
+ "kinds": [],
121
+ "cite": "eventai/scholomance.ts:278-340 scripts 1050501-1050506, acid_classic.sql:16168-16173 creature_id=10505. Heal 15586 at <=50% HP (879-1021, castTimeMs 3500), Flash Heal 17843 on a friendly under 40% and Renew 8362 are self-rescue a kick or a purge answers, and those are class rows. Slow 13747 is the only ability wider than melee: pbaoe radiusYd 20, targetA 22 and targetB 15, castTimeMs 0, haste -54% for 10 s, dispel 1 magic, every 12-18 s at TARGET_T 5 HOSTILE_RANDOM_NOT_TOP. It carries no damage, so a step-out saves nothing a Dispel Magic does not already answer - the Houndmaster Grebmar refusal in blackrock-depths.json. Corruption 18376 (pbaoe radiusYd 10, 60 per 3 s for 24 s) and Call of the Grave 17831 (pbaoe radiusYd 5, one 35 tick over 60 s) DO make real ground pools, because aoe true plus a dot is what dynamicObject.ts:222 accepts, but a pbaoe pool is sited on the CASTER - applySpell.ts:1261 aoeFanFromCaster is true for pbaoe, so the origin is posOf of Malicia's own side - and an avoid_zone on either would push the melee off the boss for the whole fight. That is the Faerlina 28794 row hazards.ts:66-73 names as the one not to write."
122
+ },
123
+ {
124
+ "entry": 11261,
125
+ "name": "Doctor Theolen Krastinov",
126
+ "kinds": [],
127
+ "cite": "eventai/scholomance.ts:587-622 scripts 1126101-1126103, acid_classic.sql:16212-16214 creature_id=11261. Three abilities and not one carries a radiusYd. Enrage 8269 once at <=50% HP is targetA 1, haste +60% for 120 s on himself, a tank-and-healer problem with no ground to stand out of. Rend 16509 is targetA 6 rangeMax 5, mechanic 15, 27 per 3 s for 15 s, and Backhand 18103 is targetA 6 rangeMax 5, mechanic 12, a 2 s stun on whoever he is hitting. Pure tank-and-spank."
128
+ },
129
+ {
130
+ "entry": 10901,
131
+ "name": "Lorekeeper Polkelt",
132
+ "kinds": [],
133
+ "cite": "eventai/scholomance.ts:548-581 scripts 1090101-1090103, acid_classic.sql:16203-16205 creature_id=10901. Noxious Catalyst 18151 is targetA 6 rangeMax 5, nature resistance -6 for 120 s, dispel 3 disease. Volatile Infection 18149 is also targetA 6 rangeMax 5 with a 2000 ms cast: aura 23 amplitude 15000 triggering Volatile Infection 18150, which is pbaoe radiusYd 10 for 9 nature - nine damage every 15 s is not a spacing problem at level 60, and it fires nothing here anyway, because 18150 is on none of the lists combatEnemySpec.ts:87-96 builds spec.spells from and stepSession.ts:1732 resolves the payload against exactly that array. Corrosive Acid 8245 is pbaoe radiusYd 5 for armor -16, a disc at melee reach. An Abolish Disease answers the whole kit and that is a class row."
134
+ },
135
+ {
136
+ "entry": 10507,
137
+ "name": "The Ravenian",
138
+ "kinds": [],
139
+ "cite": "eventai/scholomance.ts:28-102 overlay scripts 1050701-1050707 (sourced from creature_ai_scripts creature_id=10507); acid_classic.sql:16187-16190 carries the same four casts. Sundering Cleave 17963 is targetA 6 rangeMax 5, a stacking armor -24 debuff, and Cleave 15584 and Knock Away 18670 are targetA 6 with effects: [] because Effect 58 has no mapper in the bake. Trample 15550 is the only shaped one - aoeShape pbaoe radiusYd 10, targetA 22 and targetB 15, every 3-21 s at TARGET_T 17 NEAREST_AOE_TARGET - and it bakes effects: [] for the same reason, the hole the Ring of Law row records for 15589, so it lands nothing on this floor and ten yards would be inside the melee band regardless. The 17963 stack phase machine (script 1050703, EVENT_T 24 TARGET_AURA) is recorded as unported at eventai/scholomance.ts:47-58 and changes nothing positional."
140
+ },
141
+ {
142
+ "entry": 10504,
143
+ "name": "Lord Alexei Barov",
144
+ "kinds": [
145
+ "position"
146
+ ],
147
+ "cite": "eventai/scholomance.ts:251-272 scripts 1050401-1050402, acid_classic.sql:16165-16166 creature_id=10504. Two rows. Veil of Shadow 17820 every 15-21 s is aoeShape pbaoe radiusYd 8, targetA 22 and targetB 15, castTimeMs 1500, healing taken -75% for 15 s with dispel 2 curse - eight yards is the Dextren Ward disc, the melee are inside it because that is where melee happens, the 20-25 yd stand is already outside it, and a decurse is the named answer. Immolate 15506 bakes effects: [] (aura 42 proc, customChance 25, and its trigger 15570 is not on his kit). Unholy Aura 17467 is the mechanic and it is in blockedBy.",
148
+ "blockedBy": {
149
+ "position": "Unholy Aura 17467 is a permanent self aura - targetA 1, DurationIndex 21, the 4294967295 sentinel the bake reads as durationMs 0 and applySpell.ts:1873 turns into an infinite expiresAt - cast out of combat by script 1050401 and never re-armed. Its aura 23 fires Unholy Aura 17466 every 2000 ms, and 17466 is pbaoe radiusYd 30 for a flat 150 shadow. stepSession.ts:1745-1770 fans an aoe payload to every living hostile inside radiusYd of the SOURCE, so as sourced this is a 30 yd disc pulsing on the whole party for the entire fight, and no keep_range reaches it: isWithinRadiusYd hits at <=, so the first clear yard is 31, past RANGED_STAND_MAX_YD 30 (stand.ts:19). That is the Doom'rel refusal - a 30 yd disc means the whole party is inside it. THAT SECOND CLAUSE IS DEAD as of 2026-08-26 and the row is blocked on the disc alone. It used to add that 17466 pays nothing because no supplier listed it. That is settled and the mechanism changed again on 2026-08-26: af65a57ec put the payload in the kit, E6.2 took it back out, and the aura-23 tick resolves it through the session spell store instead (stepSession.ts:1746, ctx.spellOf; combatSession.ts:1012 injects it). Measured through the spec builder today: 17467 in kit, 17466 NOT in kit and resolved by id, and spawnOocSelfAuraRows returns both 17467 and Immolate 15506 for him off 84955233d TIMER_OOC spawn state. The mechanic became real; it did not become answerable."
150
+ }
151
+ },
152
+ {
153
+ "entry": 10502,
154
+ "name": "Lady Illucia Barov",
155
+ "kinds": [
156
+ "position"
157
+ ],
158
+ "cite": "eventai/scholomance.ts:192-245 scripts 1050201-1050205, acid_classic.sql:16158-16162 creature_id=10502. Silence 12528 is pbaoe radiusYd 5 with a 1500 ms cast, mechanic 9, a 10 s silence - five yards is melee reach and the 20-25 yd stand is already outside it. Shadow Shock 17289 is targetA 6 rangeMax 20 for 314-364, a single-target nuke with no radius. Fear 12542 (mechanic 5, 4 s) and Dominate Mind 14515 (mechanic 1, a 15 s charm every 21-26 s) are both targetA 6 single target, answered by a trinket, Fear Ward or a dispel, which are class rows. Curse of Agony 18671 is the wide one and it is in blockedBy.",
159
+ "blockedBy": {
160
+ "position": "Curse of Agony 18671 bakes aoeShape pbaoe radiusYd 45, rawEffects targetA 22 TARGET_LOCATION_CASTER_SRC and targetB 15, castTimeMs 0, aura 3 amplitude 3000 for 51 shadow a tick over 30 s, cast at TARGET_T 0 SELF every 30-36 s (script 1050203, acid_classic.sql:16160). Forty-five yards is the whole room: the first clear yard is 46, which is past RANGED_STAND_MAX_YD 30 (stand.ts:19), so there is no stand a keep_range could name. That is the same refusal Lord Incendius's Curse of the Elemental Lord 26977 gets in blackrock-depths.json at the same 45 yd. avoid_zone does not reach it either: 18671 DOES make a pool, because aoe true plus a dot is what dynamicObject.ts:222 accepts, but a pbaoe pool is sited on the caster (applySpell.ts:1262 spellAoeFromCaster short-circuits true for pbaoe at combatGeometry.ts:362) with radius 45, so the pool covers the room the disc already did. dispel 2 curse names the real answer and a decurse is a class row."
161
+ }
162
+ },
163
+ {
164
+ "entry": 1853,
165
+ "name": "Darkmaster Gandling",
166
+ "kinds": [],
167
+ "cite": "boss_darkmaster_gandling.cpp:28-129, ported at scriptdev/scholomance.ts:179-281; there are no ACID rows for 1853 and creatures.json 1853 has no spells array, so the schedule is the IR. Arcane Missiles 15790 on the victim every 8 s is a targetA 1 channel, aura 23 amplitude 1000 for 5 s, ticking 15791 for 112 arcane at the same single target - the IR carries 15791 on spellIds (scriptdev/scholomance.ts:184-189) so it does pay, and nothing about it has a radiusYd. Shadow Shield 12040 is targetA 1, a 200 absorb plus a 10 damage shield on himself, and Curse of the Darkmaster 18702 is targetA 6 rangeMax 30 with a 2000 ms cast for strength -50 and stamina -50, dispel 2 curse - a purge and a decurse, both class rows. Shadow Portal 17950 is the teleport and it is NOT a move verb, read off the cpp rather than assumed: cpp:92-112 draws ATTACKING_TARGET_RANDOM off the THREAT LIST with SELECT_FLAG_PLAYER, casts 17950 on that player and then wipes 100% of their threat, so nothing about where anybody stands changes who is picked or where they land, and the spell carries no radiusYd and no ground to step off. It does even less here - 17950 is Effect 3 SPELL_EFFECT_DUMMY only and bakes effects: [], which is why the IR marks it CAST_FLAG.FORCE_CAST so the schedule survives canCast (scriptdev/scholomance.ts:237-245). The six classroom rooms are paced as InstanceDef waves of Risen Guardian 11598 that run BEFORE the boss wave (scholomance.ts:203-213 SCHOLO_GANDLING_WAVES), so the guardians and Gandling never coexist and there is no kill-order to impose; the def's own [gandling-portal-isolation] residual at scholomance.ts:7-9 records the missing player isolation."
168
+ }
169
+ ]
170
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "raid": "shadowfang-keep",
3
+ "note": "Reviewed for E5.4 against shadowfang_keep.cpp, eventai/shadowfang-keep.ts and acid_classic.sql:16346-16385. Eight of the nine bosses come back kinds: [] and that is the finding - the only two spells in the wing with a radius are Arugal's Thundershock, a 5 yd disc the melee are standing in because that is where melee happens, and Odo's Howling Rage, which buffs his own side and never touches a player. Everything else is a single-target root, curse, stun, snare or poison that a dispel or a trinket answers, and those are class rows. The one row this wing earns is Wolf Master Nandos: his third Call Worg puts a body on the floor that summons two more.",
4
+ "bosses": [
5
+ {
6
+ "entry": 3914,
7
+ "name": "Rethilgore",
8
+ "kinds": [],
9
+ "cite": "eventai/shadowfang-keep.ts:57-66 script 391402, acid_classic.sql:16360-16364 creature_id=3914. Soul Drain 7295 is his only ACTION_T_CAST: targetA 6 at rangeMax 40, Effect 9 health leech 34 plus aura 26 root for 10 s on whoever he is hitting, dispel 1. One target and no radius - the root is answered by a dispel, a free-action potion or a shapeshift, all class rows. The other three scripts are SET_INST_DATA on aggro, death and evade."
10
+ },
11
+ {
12
+ "entry": 3886,
13
+ "name": "Razorclaw the Butcher",
14
+ "kinds": [],
15
+ "cite": "eventai/shadowfang-keep.ts:19-23 script 388601, acid_classic.sql:16356-16357 creature_id=3886. Butcher Drain 7486 is the whole kit and it fires on SPAWNED with targetA 1 - aura 42 proc-trigger on himself, firing 7485 (Effect 8 power drain, 350 mana, targetA 6). A self proc plus a single-target mana drain, radiusYd 0 on both, so there is nothing on the floor to stand out of."
16
+ },
17
+ {
18
+ "entry": 3887,
19
+ "name": "Baron Silverlaine",
20
+ "kinds": [],
21
+ "cite": "eventai/shadowfang-keep.ts:33-43 script 388701, acid_classic.sql:16358-16359 creature_id=3887. Veil of Shadow 7068 is targetA 6 at rangeMax 20, aura 118 for -75% healing taken over 15 s, dispel 2, recast every 22.3-35.1 s. One target, and a curse: Remove Curse answers it and the healer eats it when nobody can, which is a class row either way."
22
+ },
23
+ {
24
+ "entry": 4278,
25
+ "name": "Commander Springvale",
26
+ "kinds": [],
27
+ "cite": "eventai/shadowfang-keep.ts:178-197 scripts 427801-427802, acid_classic.sql:16378-16380 creature_id=4278. Hammer of Justice 5588 is targetA 6, mechanic 12, a 4 s stun on one player at rangeMax 10, every 61.1-63.5 s. Holy Light 1026 is targetA 21 TARGET_UNIT_FRIEND, a 310-356 heal thrown at an ally 800 HP down within 40 yd on EVENT_T_FRIENDLY_HP. A trinket answers the stun and a kick answers the heal - two class rows, and neither is a place to stand."
28
+ },
29
+ {
30
+ "entry": 4279,
31
+ "name": "Odo the Blindwatcher",
32
+ "kinds": [],
33
+ "cite": "eventai/shadowfang-keep.ts:207-232 scripts 427901-427904, acid_classic.sql:16381-16385 creature_id=4279. Howling Rage 7481/7483/7484 at 75/50/25% HP is aoeShape pbaoe radiusYd 10, targetA 22 with tgtB 30 TARGET_AREAEFFECT_PARTY, so the disc buffs HIM and his own side inside 10 yd (aura 13, +9/19/34 damage done, 300 s) and never lands on a player. There is no ground for a raider to leave, and dispel 0 means it cannot be purged either. CALL_FOR_HELP 30 on aggro brings the chapel bats, which the tank picks up."
34
+ },
35
+ {
36
+ "entry": 3872,
37
+ "name": "Deathsworn Captain",
38
+ "kinds": [],
39
+ "cite": "acid_classic.sql:16346-16349 creature_id=3872 - no eventai overlay and no ScriptDev cpp, so ACID is the whole kit. Battle Stance 7165 is targetA 1 on spawn; Cleave 15584 is rangeMax 5 targetA 6, a single-target melee hit with no arc, the same shape Herod's 15496 was reviewed as; Hamstring 9080 is rangeMax 5, mechanic 11, -60% speed for 10 s on one player. A rare elite with one static body on map 33 and no radius anywhere: pure tank-and-spank."
40
+ },
41
+ {
42
+ "entry": 4274,
43
+ "name": "Fenrus the Devourer",
44
+ "kinds": [
45
+ "kill-order"
46
+ ],
47
+ "cite": "eventai/shadowfang-keep.ts:150-158 script 427402, acid_classic.sql:16372-16376 creature_id=4274. Toxic Saliva 7125 is his only cast: targetA 6 at rangeMax 5, 17 nature damage every 6 s for 120 s, dispel 4. One target, radiusYd 0 - Cure Poison and Abolish Poison answer it and both are class rows. The other three scripts are SET_INST_DATA plus a sound on aggro.",
48
+ "blockedBy": {
49
+ "kill-order": "instance_shadowfang_keep.cpp:184-189 puts the temp Arugal in the room on TYPE_FENRUS DONE and shadowfang_keep.cpp:441-461 is what summons the four 4627 voidwalkers - all of it AFTER Fenrus dies, so his own fight has no add to order. The four are one entry (dungeonSpawns map 33 carries 0 static 4627), so a kill_order list has nothing to sort; their Dark Offering 7154 heals a friendly within 10 yd (shadowfang_keep.cpp:324-327) and an interrupt is the class answer."
50
+ }
51
+ },
52
+ {
53
+ "entry": 3927,
54
+ "name": "Wolf Master Nandos",
55
+ "kinds": [
56
+ "kill-order"
57
+ ],
58
+ "note": "Nandos calls one worg roughly every 30 to 70 seconds. The Lupine Horror is the one that summons more, so it dies first.",
59
+ "cite": "eventai/shadowfang-keep.ts:92-120 scripts 392702-392704, acid_classic.sql:16365-16371 creature_id=3927. All three of his casts are Effect 42 summons at targetA 18, his own feet: Call Bleak Worg 7487 miscValue 3861 at 30-45 s, Call Slavering Worg 7488 miscValue 3862 at 45-50 s, Call Lupine Horror 7489 miscValue 3863 at 60-70 s. He has no AoE and nothing with a radius, so the only thing this fight asks the party is which body dies first.",
60
+ "encounterRows": [
61
+ {
62
+ "kind": "kill-order",
63
+ "label": "Kill the Lupine Horror before Nandos",
64
+ "cite": "Of the three worgs Nandos summons only 3863 Lupine Horror multiplies: creatures.json 3863 carries spells [7132], and 7132 Summon Lupine Delusions is Effect 42 miscValue 5097 with basePoints 1, which summonCast.ts:103 reads as count = basePoints + 1, so two Lupine Delusions per cast. 3861 Bleak Worg carries only Wavering Will 7127 (one target, -25% haste, 60 s) and 3862 Slavering Worg carries no template spell at all, so neither is on the list - nothing in the DB says a plain worg outranks the boss. firstLivingKillOrderEntry (evaluate.ts:578) returns null while no 3863 is up, so the row no-ops on a kill that lands before the 60-70 s cast. 3863 is also 7 static bodies on the top floor (dungeonSpawns map 33), so the row can fire on a trash pull, where killing the Lupine Horror first is the same correct call.",
65
+ "rule": {
66
+ "id": "raid_enc_3927_kill",
67
+ "action": {
68
+ "kind": "kill_order",
69
+ "entries": [
70
+ 3863
71
+ ]
72
+ },
73
+ "conditions": [],
74
+ "enabled": true
75
+ }
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "entry": 4275,
81
+ "name": "Archmage Arugal",
82
+ "kinds": [],
83
+ "note": "Arugal ports between three perches and roots himself for 10 seconds each time. There is nothing on the floor to leave: the melee stun is a stun break, the curse is Remove Curse.",
84
+ "cite": "shadowfang_keep.cpp:388-557 boss_arugalAI, ported at src/domain/scriptdev/shadowfangKeep.ts:103-140 - acid_classic.sql:16377 is a comment with no rows and there is no eventai overlay, and creatures.json 4275 holds 22709/7803 under charmSpells only (combatEnemySpec.ts:138 never schedules a charm slot), so the IR timers are what makes this kit fire. Thundershock 7803 is the only spell in the fight with a radius and it is the Bazil Thredd shape: aoeShape pbaoe radiusYd 5, mechanic 12 for a 5 s stun plus 64-86 nature, and cpp:477-481 fires it only when a target is IN MELEE RANGE, every 30-38 s. Standing outside 5 yd of Arugal means not meleeing Arugal and the ranged stand is already clear of it, so the answer is a trinket or a stun break in the class rotation. Void Bolt (cpp 7588, bake 22709) is a single-target nuke every 2.9-4.8 s; Arugal's Curse 7621 is targetA 6 on a random non-tank (cpp:486), a 10 s incapacitate with dispel 2; and the three Shadow Ports 7586/7587/7136 are Effect 5 teleport_units targetA 1 tgtB 17, so he moves HIMSELF to one of three logged points on map 33 and roots himself for 10 s - no ground for the party to give up, and move_to cannot name a destination cpp:496 rolls at random from three."
85
+ }
86
+ ]
87
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "raid": "sm-armory",
3
+ "note": "First five-man plan pack (E5.4). Herod is the whole wing, and KI-973 is 'auto-run 3-wipes on Herod (0/1 bosses)' - the party never kills the only boss here.",
4
+ "bosses": [
5
+ {
6
+ "entry": 3975,
7
+ "name": "Herod",
8
+ "kinds": [
9
+ "position",
10
+ "kill-order"
11
+ ],
12
+ "cite": "boss_herod.cpp:50-52 RUSHINGCHARGE 8260 on aggro, CLEAVE 15496 and WHIRLWIND 8989 on timers, FRENZY 8269 once at <=30% (scarletMonastery.ts:85-93 ports all four). Cleave 15496 is rangeMax 5 targetA 6, a single-target melee hit with no arc, and Frenzy 8269 is a self buff - neither is a raid verb. Whirlwind is, and it is the only one.",
13
+ "encounterRows": [
14
+ {
15
+ "kind": "position",
16
+ "label": "Everyone off Herod while Whirlwind spins",
17
+ "cite": "spell 8989 Whirlwind is targetA 1 TARGET_UNIT_CASTER: aura 23 periodic-trigger, amplitude 2000, duration 10000, triggering 15578. 15578 is aoeShape pbaoe radiusYd 8 targetA 22 TARGET_LOCATION_CASTER_SRC, so it is a disc centred on Herod that pulses every 2 s for 10 s - five pulses on everyone within 8 yd. isWithinRadiusYd hits at <=, so 9 is the first clear yard. Capability herodWhirl measures the cost of standing in it: 40 hits over 4 casts. The trigger is deliberately wider than the park (12 vs 9) for the same reason the Jeklik row gives - a row released on the yard it parks on re-arms on the boss's next step and cancels the cast in flight. NOT gated on isCaster, unlike every other keep_range row shipped: this disc is 8 yd and it is the MELEE who are standing in it, which is the whole point of the row.",
18
+ "rule": {
19
+ "id": "raid_enc_3975_range_8989",
20
+ "action": {
21
+ "kind": "move",
22
+ "move": {
23
+ "kind": "keep_range",
24
+ "minYd": 9,
25
+ "entry": 3975
26
+ }
27
+ },
28
+ "conditions": [
29
+ {
30
+ "subject": "target",
31
+ "metric": "buffPresent",
32
+ "op": "==",
33
+ "value": 1,
34
+ "ref": 8989
35
+ },
36
+ {
37
+ "subject": "self",
38
+ "metric": "creatureDistanceYd",
39
+ "op": "<=",
40
+ "value": 12,
41
+ "ref": 3975
42
+ }
43
+ ],
44
+ "enabled": true
45
+ }
46
+ }
47
+ ],
48
+ "blockedBy": {
49
+ "kill-order": "boss_herod.cpp:89 JustDied summons 20x Scarlet Trainee 6575 - AFTER he dies, so there is no kill-order for the fight itself. sm-armory.ts names the escort path and the spawn stagger as GAPs; the bodies arrive via ScriptDev summon_count and the default rotation picks them up unordered."
50
+ }
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "raid": "sm-cathedral",
3
+ "note": "Reviewed for E5.4 against boss_mograine_and_whitemane.cpp, eventai/sm-cathedral.ts and acid_classic.sql. Fairbanks is single-target plus a 5 yd sleep the melee are standing in. The pair is the one ordering fight in Scarlet Monastery: the resurrection puts a full-health Mograine back on the floor while Whitemane is still up at half, and the kill-order row names her first.",
4
+ "bosses": [
5
+ {
6
+ "entry": 4542,
7
+ "name": "High Inquisitor Fairbanks",
8
+ "kinds": [],
9
+ "cite": "eventai/sm-cathedral.ts:454201-454206, acid_classic.sql:16009-16014 creature_id=4542 - and the file's own header at :16008 marks the Sleep and Fear rows as reconstruction, 'NEED MORE DATA (No Official Sleep or Fear Data)'. Sleep 8399 is the only area effect he has: targetA 22 then 15, radiusYd 5.0, aura 12 mechanic 10 for 10 s on a flat 30 s timer - a disc inside melee reach, so clearing it means not meleeing him, and the ranged stand at DEFAULT_OPEN_YD 18 (combatGeometry.ts:66) is already outside it. Curse of Blood 8282 (aura 14, dispel 2), Dispel Magic 15090 and Fear 12096 (aura 7, mechanic 5, 8 s) are all single-target, and Heal 12039 at <=30% with Power Word: Shield 11647 at <=25% are self-rescue an interrupt or a purge answers from the class rotation."
10
+ },
11
+ {
12
+ "entry": 3976,
13
+ "name": "Scarlet Commander Mograine & High Inquisitor Whitemane",
14
+ "kinds": [
15
+ "kill-order",
16
+ "halt-dps"
17
+ ],
18
+ "cite": "boss_mograine_and_whitemane.cpp:44-56 both kits; acid_classic.sql:15902-15903 hands 3976 and 3977 to the two cpp scripts. Deep Sleep 9256 is targetA 22 then 15 with radiusYd 100.0, aura 12 for 10 s - a hundred-yard disc is the whole cathedral, so no position verb touches it, and Dominate Mind 14515 (aura 6, mechanic 1, 15 s on a random player) is a dispel. What the fight really asks is an order, because the resurrection leaves two bodies up at once.",
19
+ "encounterRows": [
20
+ {
21
+ "kind": "kill-order",
22
+ "label": "Whitemane first once Mograine is back up",
23
+ "cite": "The resurrection is degraded to three waves in this tree: 3976 alone, then 3977 alone, then a fresh 3976 injected while Whitemane is STILL ALIVE (sm-cathedral.ts:154-158 SM_MOGRAINE_WHITEMANE.waves, liveGauntletEscort.ts:608-656, :651 'final wave - Mograine inject; Whitemane stays in spawned'). The inject is gated on Whitemane at or below 50% HP with Mograine already down (canScarletResurrect, sm-cathedral.ts:167-176; cpp:477 GetHealthPercent() <= 50.0f), so the both-up phase always opens with Mograine at full and Whitemane at half. She is the body to finish: Heal 12039 for 589 every 13 s, Power Word: Shield 22187 for 205 absorb every 22-45 s, Holy Smite 9481 for 134 every 2-3 s, and Dominate Mind 14515 charming a raider for 15 s every 20-30 s once the res phase is armed (scarletMonastery.ts:658-672). kill_order is a filter and does not win the GCD (types.ts:366-375), and raidEncounterTactics.ts:174-180 registers the rule under 3977 as well as 3976, so it keeps holding while the focus is Whitemane. In wave 0 there is no 3977 alive and the row falls straight through to Mograine.",
24
+ "rule": {
25
+ "id": "raid_enc_3976_kill",
26
+ "action": {
27
+ "kind": "kill_order",
28
+ "entries": [
29
+ 3977,
30
+ 3976
31
+ ]
32
+ },
33
+ "conditions": [],
34
+ "enabled": true
35
+ }
36
+ },
37
+ {
38
+ "kind": "halt-dps",
39
+ "label": "Casters hold while the Divine Shield is up",
40
+ "cite": "Divine Shield 1020, mechanic 25 invulnerability for 12 s in his baked kit (creature_template_spells 3976 spell3; 642 for 10 s in boss_mograine_and_whitemane.cpp), fired once at <=50% HP and then disabled (cpp:301-307 DisableCombatAction; scarletMonastery.ts:525-545 MOGRAINE_PHASE_SHIELD). Wave 0 is Mograine ALONE (sm-cathedral.ts:154-158 waves), so the shield eats the whole party's damage and mana for its full duration with nothing else to hit. This row was blocked until 2026-08-27 because halt_dps was scoped by SCHOOL only, so arming it in the both-up wave stopped damage on Whitemane too - the body the kill-order row above just named. `entries` closes that: the halt refuses a cast only when the unit's current target is 3976 (rotation/types.ts halt_dps `entries`; haltDpsCoversEntry in rotation/evaluate.ts). PHYSICAL is deliberately NOT in the school list. A halt that also stops white swings takes the tank's threat and the combat flag off the boss for twelve seconds, which is the Mandokir shape stepSession.ts:2278 records as a 1,800,100 ms stalemate. Melee keep swinging and holding him; the casters stop paying mana into an invulnerable body, which is what the window actually costs.",
41
+ "rule": {
42
+ "id": "raid_enc_3976_halt_1020",
43
+ "action": {
44
+ "kind": "halt_dps",
45
+ "school": [
46
+ "holy",
47
+ "fire",
48
+ "nature",
49
+ "frost",
50
+ "shadow",
51
+ "arcane"
52
+ ],
53
+ "entries": [
54
+ 3976
55
+ ]
56
+ },
57
+ "conditions": [
58
+ {
59
+ "subject": "target",
60
+ "metric": "buffPresent",
61
+ "op": "==",
62
+ "value": 1,
63
+ "ref": 1020
64
+ }
65
+ ],
66
+ "enabled": true
67
+ }
68
+ }
69
+ ]
70
+ }
71
+ ]
72
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "raid": "sm-graveyard",
3
+ "note": "Reviewed for E5.4 against eventai/sm-graveyard.ts, acid_classic.sql and the frozen src_creature_spell_list. Eight baked encounters, three distinct entries, and one earned row: Bloodmage Thalnos drops Flame Spike 8814, a 5 yd ground patch the engine centres on his TARGET rather than on him, and that is the one shape in this wing that spacing answers. Vishas and the rare graves come back kinds: [] - single-target melee, a dispel and a decurse, which are class rows.",
4
+ "bosses": [
5
+ {
6
+ "entry": 3983,
7
+ "name": "Interrogator Vishas",
8
+ "kinds": [],
9
+ "cite": "eventai/sm-graveyard.ts:398301-398305, acid_classic.sql:15908-15912 creature_id=3983 - four yells and one spawn cast, and there is no boss_ cpp for this wing (instance_scarlet_monastery.cpp:69-77 adds only Vorrel's death yell). Immolate 8981 is targetA 1 TARGET_UNIT_CASTER, aura 42 proc-trigger on 9034 with no radius and no duration, so the bake gives it no effects at all. Shadow Word: Pain 2767 (src_creature_spell_list 398301 Position 5, TargetId 121 random player aura not present) is targetA 6 at 30 yd, an 18 s shadow dot with dispel 1 - a dispel is a class row, and nothing here puts a shape on the floor."
10
+ },
11
+ {
12
+ "entry": 4543,
13
+ "name": "Bloodmage Thalnos",
14
+ "kinds": [
15
+ "spread",
16
+ "position"
17
+ ],
18
+ "cite": "src_creature_spell_list 454301 is the whole kit and there is no boss_ cpp: Flame Spike 8814, Fire Nova 12470, Flame Shock 8053, Shadow Bolt 9613, with ChanceRangedAttack 75 and acid_classic.sql:16019-16022 creature_id=4543 supplying only four yells plus action 57 range mode on spawn. There is NO Shadow Bolt Volley on him in the dump - 9613 is plain Shadow Bolt, targetA 6, radiusYd 0, rangeMax 40, castTimeMs 3000 - so the spacing this fight earns comes off Flame Spike's ground patch, not off a volley. Flame Shock 8053 is targetA 6 at 20 yd with dispel 1, a class dispel row.",
19
+ "encounterRows": [
20
+ {
21
+ "kind": "spread",
22
+ "label": "Stand 6 yd apart so one Flame Spike cannot catch two",
23
+ "cite": "Flame Spike 8814 bakes aoe ground radiusYd 5 castTimeMs 3000: 93-107 fire on impact plus Effect 27 persistent area, which dynamicObject.ts:220-223 isPersistentAreaEffect turns into a real 9 s pool ticking 50 every 3 s. src_creature_spell_list 454301 Position 0 fires it 10-35 s in and every 30-60 s after. Its rawEffects targetA is 16 TARGET_ENUM_UNITS_ENEMY_AOE_AT_DEST_LOC, which is NOT in combatGeometry.ts:329 CASTER_LOCATION_TARGET_A, so spellAoeFromCaster (combatGeometry.ts:351-366) is false and aoeCast.ts:80 centres the 5 yd fan on Thalnos's PRIMARY TARGET rather than on Thalnos - a distance between raiders, which is the one thing spacing can answer. minYd 6 is radiusYd 5 plus one, the same first-clear-yard rule the Herod row uses, and deliberately NOT radius plus FLEE_CLEAR_MARGIN_YD 5: clampAimToOwnReach (sessionMechanicMove.ts:114-131) pins a melee onto its MELEE_REACH_YD 5 ring (combatGeometry.ts:37, creatureAiConstants.ts:76), three melee cannot be 10 yd apart on a 5 yd ring, and spread owns motion past the give-up (pickAction.ts:775), so a 10 yd row would shuffle all fight and never settle. The tank sits it out on targetAttackingMe for the reason the Jeklik row gives - walking the aggro holder drags the boss - and the patch lands on the tank anyway.",
24
+ "rule": {
25
+ "id": "raid_enc_4543_spread_8814",
26
+ "action": {
27
+ "kind": "move",
28
+ "move": {
29
+ "kind": "spread",
30
+ "minYd": 6
31
+ }
32
+ },
33
+ "conditions": [
34
+ {
35
+ "subject": "self",
36
+ "metric": "targetAttackingMe",
37
+ "op": "==",
38
+ "value": 0
39
+ },
40
+ {
41
+ "subject": "self",
42
+ "metric": "alliesWithinYd",
43
+ "op": ">",
44
+ "value": 0,
45
+ "ref": 6
46
+ }
47
+ ],
48
+ "enabled": true
49
+ }
50
+ }
51
+ ],
52
+ "blockedBy": {
53
+ "position": "Fire Nova 12470 is the other half of the kit and no verb reaches it. It bakes aoeShape pbaoe radiusYd 10 targetA 22 TARGET_LOCATION_CASTER_SRC tgtB 15, so it is a 10 yd disc centred on Thalnos for 148-170 fire, and src_creature_spell_list 454301 Position 1 fires it every 10-20 s. castTimeMs is 0 with no aura and no trigger spell, so there is nothing for buffPresent or castingPresent to gate on the way Herod's Whirlwind 8989 channel is gated, and an ungated keep_range 11 would park the melee outside 10 yd for the entire fight. avoid_zone is not the way in either, though the reason changed on 2026-08-26: groundAoeOf now gates a body hazard on spellAoeFromCaster, and 8814 is rangeMax 30 targetA 16 AT_DEST_LOC, so Thalnos is no longer published as a body and the old permanent-park trap is gone. What remains is that the pool lands on the RAIDER it was aimed at (applySpell.ts:1261 sites a ground pool on the primary target), so the distance that matters is raider-to-raider and spread is the verb that answers it. An avoid_zone 8814 row would also match the pool now, but it only moves whoever is already standing in it."
54
+ }
55
+ },
56
+ {
57
+ "entry": 6488,
58
+ "name": "Graveyard rare 1",
59
+ "kinds": [],
60
+ "cite": "src_creature_template Entry 6488 is Fallen Champion, a rank 2 rare undead at level 33, and it is the ONE entry behind all six Graveyard rare encounters: sm-graveyard.ts:439-458 builds one boss row per grave guid (:59, 1890342-1890347) with creatureEntry = candidates[0] = 6488 and poolCandidates [6488, 6489, 6490], so the swap to another candidate happens at fight start and the entry the gate matches on stays 6488. Its kit is melee only - acid_classic.sql:16030-16032 creature_id=6488 gives Berserker Stance 7366 (self shapeshift, no radius), Cleave 15496 and Execute 7160 at 20% target HP, and src_creature_template_spells 6488 adds Strike 19644, Rend 21949 and Cleave 19642, every one rangeMax 5 targetA 6 radiusYd 0, both Cleaves Effect 58 weapon-percent with no cone and no radius. The two candidates it can roll into are empty for the Stockade reason: Ironspine 6489 (acid_classic.sql:16034-16035) casts Curse of Weakness 21007, a 30 yd pbaoe decurse, and Poison Cloud 3815, a pbaoe radiusYd 8 nature dot centred on its own body that the melee are standing in because that is where melee happens; Azshir the Sleepless 6490 (acid_classic.sql:16037-16039) casts Call of the Grave 5137, Terrify 7399 (mechanic 5 fear, 4 s, targetA 6 at 5 yd, answered by a trinket or Tremor Totem) and Soul Siphon 9373, all targetA 6 at 5-10 yd."
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "raid": "sm-library",
3
+ "note": "Reviewed for E5.4 against boss_arcanist_doan.cpp, eventai/sm-library.ts and acid_classic.sql. Loksey is two friendly buffs a purge already answers. Doan is the one five-man fight so far whose mechanic really is a run-out, and the run-out cannot be walked: Detonation is a 30 yd disc and the whole party stands inside it from pull to kill.",
4
+ "bosses": [
5
+ {
6
+ "entry": 3974,
7
+ "name": "Houndmaster Loksey",
8
+ "kinds": [],
9
+ "cite": "eventai/sm-library.ts:397402-397404, acid_classic.sql:15897-15900 creature_id=3974. Battle Shout 6192 is targetA 20 with radiusYd 20.0, aura 99 attack power +54 for 120 s, and Bloodlust 6742 is targetA 21 friendly, aura 138 melee haste +29% for 30 s - ACID 397403 casts it on himself and 397404 re-casts it on any friendly within 15 yd that is missing it. The friendly in range is a kennel Scarlet Tracking Hound 4304 standing inside the 5 yd CallForHelp radius (sm-library.ts:160-175), so the answer is a purge or a dispel, which is a class row. Neither spell has a hostile radius and there is nothing on the floor to stand out of."
10
+ },
11
+ {
12
+ "entry": 6487,
13
+ "name": "Arcanist Doan",
14
+ "kinds": [
15
+ "position"
16
+ ],
17
+ "cite": "boss_arcanist_doan.cpp:33-37 the whole kit; acid_classic.sql:16028 defers 6487 to the cpp and there is no creature_template_spells row for him. Polymorph 13323 is targetA 6 on a random non-top-threat unit, mechanic 17 for 20 s - a dispel, so a class row. Silence 8988 is targetA 22 then 15, radiusYd 20.0, aura 27 mechanic 9 for 10 s, and Arcane Explosion 9433 is targetA 22 then 15, radiusYd 10.0, Effect 2 for 185, every 2.5-8.5 s - both are instant with no observable cast, so there is no edge a row could fire on, and the 10 yd disc is the one the melee have to be inside to fight at all. Detonation 9435 is the real mechanic and it goes in blockedBy.",
18
+ "blockedBy": {
19
+ "position": "Detonation 9435 is Effect 2 SCHOOL_DAMAGE basePoints 637, targetA 22 TARGET_LOCATION_CASTER_SRC then targetB 15, radiusYd 30.0 - a 30 yd disc centred on Doan, fired once when Arcane Bubble 9438 goes up at <=50% HP (boss_arcanist_doan.cpp:88-95 the bubble, :92 m_uiDetonationTimer = 1000, :73 the cast). isWithinRadiusYd hits at <=, so the first clear yard is 31, and that is farther out than the game's own outermost stand: CASTER_RING_OUTER_YD is 30 and the party opens at DEFAULT_OPEN_YD 18 (combatGeometry.ts:152,66). Every raider from tank to back line is inside the disc for the whole fight, so keep_range would be asking the party to walk off the ring the placement code builds. The clock refuses it as well: the C++ gives 1000 ms between bubble and payload, and this tree's port collapses that arm into the same phase tick as the bubble (scarletMonastery.ts:255-260, named as the doan-detonation-delay GAP at sm-library.ts:6-9), so a row gated on buffPresent 9438 or on the cast fires after the damage has already landed. CORRECTED 2026-08-27 - this used to say RUNOUT_YIELD_AFTER_MS abandons the move after 4000 ms \"which is less than the 13+ yard walk a raider at the open band would need\", and the arithmetic is simply wrong: 13 yd at BASE_RUN_SPEED 7.0 (speed.ts:44) is 1.86 s, well inside the 4 s, and the cite had drifted from pickAction.ts:774 to :774. It is false for every seat, not just the open band. What actually blocks this row."
20
+ }
21
+ }
22
+ ]
23
+ }