azeroth-shell 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1163) hide show
  1. package/README.md +138 -2
  2. package/bin/azsh.mjs +19 -0
  3. package/docs/aifid/eventai-texts.json +4414 -0
  4. package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
  5. package/docs/dungeons/survey/pack-id-migration.json +2418 -0
  6. package/package.json +26 -4
  7. package/src/autopilot/bossSkip.ts +26 -0
  8. package/src/autopilot/combatRotation.ts +824 -0
  9. package/src/autopilot/config.ts +533 -0
  10. package/src/autopilot/consumables.ts +58 -0
  11. package/src/autopilot/encounterStand.ts +121 -0
  12. package/src/autopilot/objectGatePlan.ts +53 -0
  13. package/src/autopilot/pathEngage.ts +229 -0
  14. package/src/autopilot/plan.ts +1643 -0
  15. package/src/autopilot/questPolicy.ts +274 -0
  16. package/src/autopilot/routeStep.ts +69 -0
  17. package/src/autopilot/sessionReport.ts +88 -0
  18. package/src/autopilot/topOffPower.ts +26 -0
  19. package/src/autopilot/view.ts +476 -0
  20. package/src/cli/bootCheck.mjs +34 -0
  21. package/src/cli/bootData.mjs +57 -0
  22. package/src/cli/combatLogFilter.ts +153 -0
  23. package/src/cli/combatLogFormat.ts +613 -0
  24. package/src/cli/fileRepository.mjs +105 -0
  25. package/src/cli/gzLoader.mjs +31 -0
  26. package/src/cli/liveGauntletEscort.ts +978 -0
  27. package/src/cli/liveStratUndead.ts +305 -0
  28. package/src/cli/macroHostCombat.ts +545 -0
  29. package/src/cli/macroHostWorld.ts +330 -0
  30. package/src/cli/prefs.mjs +31 -0
  31. package/src/cli/register.mjs +4 -0
  32. package/src/cli/repl.mjs +693 -0
  33. package/src/cli/rotationText.mjs +226 -0
  34. package/src/cli/squad.mjs +105 -0
  35. package/src/cli/term.mjs +126 -0
  36. package/src/cli/text.mjs +122 -0
  37. package/src/cli/tui.mjs +626 -0
  38. package/src/cli/tuiArena.mjs +109 -0
  39. package/src/cli/tuiAutopilotSettings.mjs +93 -0
  40. package/src/cli/tuiBags.mjs +180 -0
  41. package/src/cli/tuiBars.mjs +133 -0
  42. package/src/cli/tuiBg.mjs +243 -0
  43. package/src/cli/tuiBulk.mjs +162 -0
  44. package/src/cli/tuiCheck.mjs +1882 -0
  45. package/src/cli/tuiCity.mjs +396 -0
  46. package/src/cli/tuiCompanionKit.mjs +300 -0
  47. package/src/cli/tuiCompanions.mjs +471 -0
  48. package/src/cli/tuiDev.mjs +62 -0
  49. package/src/cli/tuiDungeon.mjs +606 -0
  50. package/src/cli/tuiEnchantTarget.mjs +120 -0
  51. package/src/cli/tuiFight.mjs +577 -0
  52. package/src/cli/tuiFightPanes.mjs +228 -0
  53. package/src/cli/tuiFloor.mjs +506 -0
  54. package/src/cli/tuiGear.mjs +158 -0
  55. package/src/cli/tuiHonor.mjs +74 -0
  56. package/src/cli/tuiLoot.mjs +97 -0
  57. package/src/cli/tuiMacros.mjs +144 -0
  58. package/src/cli/tuiOutfitter.mjs +115 -0
  59. package/src/cli/tuiPet.mjs +116 -0
  60. package/src/cli/tuiProfessions.mjs +800 -0
  61. package/src/cli/tuiRaid.mjs +127 -0
  62. package/src/cli/tuiRep.mjs +65 -0
  63. package/src/cli/tuiSaves.mjs +69 -0
  64. package/src/cli/tuiSearch.mjs +363 -0
  65. package/src/cli/tuiSettings.mjs +151 -0
  66. package/src/cli/tuiSimLab.mjs +80 -0
  67. package/src/cli/tuiTalents.mjs +60 -0
  68. package/src/cli/tuiViews.mjs +1178 -0
  69. package/src/cli/tuiWiki.mjs +181 -0
  70. package/src/cli/tuiWorld.mjs +361 -0
  71. package/src/cli/wikiIndex.ts +259 -0
  72. package/src/cli/wikiSources.ts +355 -0
  73. package/src/data/alteracValley.ts +176 -0
  74. package/src/data/appearanceOptions.ts +534 -0
  75. package/src/data/applyLootChanceSanity.ts +21 -0
  76. package/src/data/createFlavor.ts +96 -0
  77. package/src/data/customItems.ts +33 -0
  78. package/src/data/dataStore.ts +1904 -0
  79. package/src/data/dungeonGameObjects.ts +84 -0
  80. package/src/data/dungeonPlateCover.ts +66 -0
  81. package/src/data/dungeonSpawns.ts +294 -0
  82. package/src/data/dungeons/alterac-valley.ts +135 -0
  83. package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
  84. package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
  85. package/src/data/dungeons/apply-instance-geometry.ts +65 -0
  86. package/src/data/dungeons/apply-spawn-placement.ts +171 -0
  87. package/src/data/dungeons/blackfathom-deeps.ts +539 -0
  88. package/src/data/dungeons/blackrock-depths.ts +1410 -0
  89. package/src/data/dungeons/blackwing-lair.ts +129 -0
  90. package/src/data/dungeons/boss-eventai.ts +8 -0
  91. package/src/data/dungeons/deadmines.ts +410 -0
  92. package/src/data/dungeons/dire-maul-east.ts +980 -0
  93. package/src/data/dungeons/dire-maul-north.ts +661 -0
  94. package/src/data/dungeons/dire-maul-west.ts +785 -0
  95. package/src/data/dungeons/dungeon-rooms.json +5479 -0
  96. package/src/data/dungeons/encounter-outdoors.json +359 -0
  97. package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
  98. package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
  99. package/src/data/dungeons/eventai/deadmines.ts +264 -0
  100. package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
  101. package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
  102. package/src/data/dungeons/eventai/helpers.ts +79 -0
  103. package/src/data/dungeons/eventai/index.ts +133 -0
  104. package/src/data/dungeons/eventai/lbrs.ts +372 -0
  105. package/src/data/dungeons/eventai/maraudon.ts +323 -0
  106. package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
  107. package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
  108. package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
  109. package/src/data/dungeons/eventai/scholomance.ts +680 -0
  110. package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
  111. package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
  112. package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
  113. package/src/data/dungeons/eventai/sm-library.ts +55 -0
  114. package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
  115. package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
  116. package/src/data/dungeons/eventai/the-stockade.ts +228 -0
  117. package/src/data/dungeons/eventai/ubrs.ts +225 -0
  118. package/src/data/dungeons/eventai/uldaman.ts +355 -0
  119. package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
  120. package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
  121. package/src/data/dungeons/gnomeregan.ts +909 -0
  122. package/src/data/dungeons/index.ts +126 -0
  123. package/src/data/dungeons/instance-geometry.json +5233 -0
  124. package/src/data/dungeons/key-sources.json +169 -0
  125. package/src/data/dungeons/lbrs.ts +996 -0
  126. package/src/data/dungeons/maraudon.ts +786 -0
  127. package/src/data/dungeons/molten-core.ts +194 -0
  128. package/src/data/dungeons/naxxramas.ts +173 -0
  129. package/src/data/dungeons/onyxias-lair.ts +71 -0
  130. package/src/data/dungeons/pack-from-clusters.ts +1256 -0
  131. package/src/data/dungeons/ragefire-chasm.ts +238 -0
  132. package/src/data/dungeons/razorfen-downs.ts +698 -0
  133. package/src/data/dungeons/razorfen-kraul.ts +766 -0
  134. package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
  135. package/src/data/dungeons/scholomance.ts +1076 -0
  136. package/src/data/dungeons/shadowfang-keep.ts +740 -0
  137. package/src/data/dungeons/sm-armory.ts +266 -0
  138. package/src/data/dungeons/sm-cathedral.ts +430 -0
  139. package/src/data/dungeons/sm-graveyard.ts +482 -0
  140. package/src/data/dungeons/sm-library.ts +337 -0
  141. package/src/data/dungeons/stratholme-live.ts +808 -0
  142. package/src/data/dungeons/stratholme-undead.ts +1164 -0
  143. package/src/data/dungeons/sunken-temple.ts +931 -0
  144. package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
  145. package/src/data/dungeons/the-stockade.ts +282 -0
  146. package/src/data/dungeons/ubrs.ts +1286 -0
  147. package/src/data/dungeons/uldaman.ts +685 -0
  148. package/src/data/dungeons/wailing-caverns.ts +356 -0
  149. package/src/data/dungeons/zul-farrak.ts +686 -0
  150. package/src/data/dungeons/zul-gurub.ts +142 -0
  151. package/src/data/dungeons.ts +42 -0
  152. package/src/data/fixtures.ts +446 -0
  153. package/src/data/gameobject-data.json.gz +0 -0
  154. package/src/data/item-data.json.gz +0 -0
  155. package/src/data/loot-data.json.gz +0 -0
  156. package/src/data/maps/atlas-approach-maps.json +1425 -0
  157. package/src/data/maps/atlas-landmarks.json +1711 -0
  158. package/src/data/maps/dungeon-viewports.json +392 -0
  159. package/src/data/materializeModDamagePercentTaken.ts +70 -0
  160. package/src/data/materializeModHealthRegen.ts +89 -0
  161. package/src/data/materializeSpellReputation.ts +26 -0
  162. package/src/data/pageTexts.ts +19 -0
  163. package/src/data/profession-data.json.gz +0 -0
  164. package/src/data/raid-plans/blackfathom-deeps.json +86 -0
  165. package/src/data/raid-plans/blackrock-depths.json +419 -0
  166. package/src/data/raid-plans/blackwing-lair.json +328 -0
  167. package/src/data/raid-plans/deadmines.json +55 -0
  168. package/src/data/raid-plans/dire-maul-east.json +94 -0
  169. package/src/data/raid-plans/dire-maul-north.json +70 -0
  170. package/src/data/raid-plans/dire-maul-west.json +75 -0
  171. package/src/data/raid-plans/gnomeregan.json +131 -0
  172. package/src/data/raid-plans/lbrs.json +176 -0
  173. package/src/data/raid-plans/maraudon.json +102 -0
  174. package/src/data/raid-plans/molten-core.json +169 -0
  175. package/src/data/raid-plans/naxxramas.json +354 -0
  176. package/src/data/raid-plans/onyxias-lair.json +18 -0
  177. package/src/data/raid-plans/ragefire-chasm.json +30 -0
  178. package/src/data/raid-plans/razorfen-downs.json +75 -0
  179. package/src/data/raid-plans/razorfen-kraul.json +53 -0
  180. package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
  181. package/src/data/raid-plans/scholomance.json +170 -0
  182. package/src/data/raid-plans/shadowfang-keep.json +87 -0
  183. package/src/data/raid-plans/sm-armory.json +53 -0
  184. package/src/data/raid-plans/sm-cathedral.json +72 -0
  185. package/src/data/raid-plans/sm-graveyard.json +63 -0
  186. package/src/data/raid-plans/sm-library.json +23 -0
  187. package/src/data/raid-plans/stratholme-live.json +129 -0
  188. package/src/data/raid-plans/stratholme-undead.json +73 -0
  189. package/src/data/raid-plans/sunken-temple.json +159 -0
  190. package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
  191. package/src/data/raid-plans/the-stockade.json +42 -0
  192. package/src/data/raid-plans/ubrs.json +53 -0
  193. package/src/data/raid-plans/uldaman.json +131 -0
  194. package/src/data/raid-plans/wailing-caverns.json +90 -0
  195. package/src/data/raid-plans/zul-farrak.json +156 -0
  196. package/src/data/raid-plans/zul-gurub.json +307 -0
  197. package/src/data/raidInstanceCreatures.mjs +473 -0
  198. package/src/data/rotations/index.ts +152 -0
  199. package/src/data/rotations/layout.mjs +72 -0
  200. package/src/data/rotations/pve/druid/balance.json +754 -0
  201. package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
  202. package/src/data/rotations/pve/druid/feral.json +2660 -0
  203. package/src/data/rotations/pve/druid/restoration.json +424 -0
  204. package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
  205. package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
  206. package/src/data/rotations/pve/hunter/survival.json +1373 -0
  207. package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
  208. package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
  209. package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
  210. package/src/data/rotations/pve/paladin/holy.json +755 -0
  211. package/src/data/rotations/pve/paladin/protection.json +962 -0
  212. package/src/data/rotations/pve/paladin/retribution.json +924 -0
  213. package/src/data/rotations/pve/priest/discipline.json +772 -0
  214. package/src/data/rotations/pve/priest/holy.json +707 -0
  215. package/src/data/rotations/pve/priest/shadow.json +787 -0
  216. package/src/data/rotations/pve/rogue/assassination.json +2477 -0
  217. package/src/data/rotations/pve/rogue/combat.json +2483 -0
  218. package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
  219. package/src/data/rotations/pve/shaman/elemental.json +1157 -0
  220. package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
  221. package/src/data/rotations/pve/shaman/restoration.json +592 -0
  222. package/src/data/rotations/pve/warlock/affliction.json +1185 -0
  223. package/src/data/rotations/pve/warlock/demonology.json +1165 -0
  224. package/src/data/rotations/pve/warlock/destruction.json +1177 -0
  225. package/src/data/rotations/pve/warrior/arms.json +3020 -0
  226. package/src/data/rotations/pve/warrior/fury.json +2996 -0
  227. package/src/data/rotations/pve/warrior/protection.json +2509 -0
  228. package/src/data/rotations/pvp/druid/balance.json +593 -0
  229. package/src/data/rotations/pvp/druid/feral.json +3276 -0
  230. package/src/data/rotations/pvp/druid/restoration.json +662 -0
  231. package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
  232. package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
  233. package/src/data/rotations/pvp/hunter/survival.json +635 -0
  234. package/src/data/rotations/pvp/mage/arcane.json +574 -0
  235. package/src/data/rotations/pvp/mage/fire.json +570 -0
  236. package/src/data/rotations/pvp/mage/frost.json +4048 -0
  237. package/src/data/rotations/pvp/paladin/holy.json +1498 -0
  238. package/src/data/rotations/pvp/paladin/protection.json +567 -0
  239. package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
  240. package/src/data/rotations/pvp/priest/discipline.json +1848 -0
  241. package/src/data/rotations/pvp/priest/holy.json +6340 -0
  242. package/src/data/rotations/pvp/priest/shadow.json +2329 -0
  243. package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
  244. package/src/data/rotations/pvp/rogue/combat.json +5258 -0
  245. package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
  246. package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
  247. package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
  248. package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
  249. package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
  250. package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
  251. package/src/data/rotations/pvp/warlock/destruction.json +638 -0
  252. package/src/data/rotations/pvp/warrior/arms.json +5665 -0
  253. package/src/data/rotations/pvp/warrior/fury.json +850 -0
  254. package/src/data/rotations/pvp/warrior/protection.json +777 -0
  255. package/src/data/schema/bundle.ts +511 -0
  256. package/src/data/schema/constants.ts +49 -0
  257. package/src/data/schema/creature.ts +454 -0
  258. package/src/data/schema/encounter.ts +155 -0
  259. package/src/data/schema/faction.ts +48 -0
  260. package/src/data/schema/item.ts +297 -0
  261. package/src/data/schema/itemEnchant.ts +105 -0
  262. package/src/data/schema/npc.ts +44 -0
  263. package/src/data/schema/primitives.ts +295 -0
  264. package/src/data/schema/profession.ts +226 -0
  265. package/src/data/schema/quest.ts +154 -0
  266. package/src/data/schema/spell.ts +1149 -0
  267. package/src/data/schema/talent.ts +74 -0
  268. package/src/data/schema/world.ts +124 -0
  269. package/src/data/schema.ts +19 -0
  270. package/src/data/skinNodeGapFill.ts +68 -0
  271. package/src/data/spell-data.json.gz +0 -0
  272. package/src/data/spell-script-targets.json +1 -0
  273. package/src/data/tables/ahItemValues.json.gz +0 -0
  274. package/src/data/tables/alteracValley.json.gz +0 -0
  275. package/src/data/tables/areatriggerTeleports.json.gz +0 -0
  276. package/src/data/tables/botNames.json.gz +0 -0
  277. package/src/data/tables/botPopulation.json.gz +0 -0
  278. package/src/data/tables/botSpecs.json.gz +0 -0
  279. package/src/data/tables/classLevelStats.json.gz +0 -0
  280. package/src/data/tables/combatConditions.json.gz +0 -0
  281. package/src/data/tables/combatSkillMeta.json.gz +0 -0
  282. package/src/data/tables/conditions.json.gz +0 -0
  283. package/src/data/tables/createInfo.json.gz +0 -0
  284. package/src/data/tables/creatureAggroGroups.json.gz +0 -0
  285. package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
  286. package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
  287. package/src/data/tables/creatureWeapons.json.gz +0 -0
  288. package/src/data/tables/creatures.json.gz +0 -0
  289. package/src/data/tables/dbScripts.json.gz +0 -0
  290. package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
  291. package/src/data/tables/dungeonCensus.json.gz +0 -0
  292. package/src/data/tables/dungeonGameObjects.json.gz +0 -0
  293. package/src/data/tables/dungeonPacks.json.gz +0 -0
  294. package/src/data/tables/dungeonPlateCover.json.gz +0 -0
  295. package/src/data/tables/dungeonSpawns.json.gz +0 -0
  296. package/src/data/tables/dungeonSurvey.json.gz +0 -0
  297. package/src/data/tables/durabilityCosts.json.gz +0 -0
  298. package/src/data/tables/durabilityQuality.json.gz +0 -0
  299. package/src/data/tables/enchantApplicators.json.gz +0 -0
  300. package/src/data/tables/entranceYards.json.gz +0 -0
  301. package/src/data/tables/explorationBasexp.json.gz +0 -0
  302. package/src/data/tables/factionTemplates.json.gz +0 -0
  303. package/src/data/tables/factions.json.gz +0 -0
  304. package/src/data/tables/gameEvents.json.gz +0 -0
  305. package/src/data/tables/gameObjects.json.gz +0 -0
  306. package/src/data/tables/gossipMenus.json.gz +0 -0
  307. package/src/data/tables/graveyards.json.gz +0 -0
  308. package/src/data/tables/instanceMaps.json.gz +0 -0
  309. package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
  310. package/src/data/tables/itemEnchants.json.gz +0 -0
  311. package/src/data/tables/itemRandomProperties.json.gz +0 -0
  312. package/src/data/tables/itemSets.json.gz +0 -0
  313. package/src/data/tables/items.json.gz +0 -0
  314. package/src/data/tables/levelStats.json.gz +0 -0
  315. package/src/data/tables/locks.json.gz +0 -0
  316. package/src/data/tables/map-pin-overrides.json.gz +0 -0
  317. package/src/data/tables/nonCombatTrash.json.gz +0 -0
  318. package/src/data/tables/npcTexts.json.gz +0 -0
  319. package/src/data/tables/pageTexts.json.gz +0 -0
  320. package/src/data/tables/petAbilityTP.json.gz +0 -0
  321. package/src/data/tables/petGenericSpells.json.gz +0 -0
  322. package/src/data/tables/petLevelStats.json.gz +0 -0
  323. package/src/data/tables/playerbot-weightscales.json.gz +0 -0
  324. package/src/data/tables/pools.json.gz +0 -0
  325. package/src/data/tables/quests.json.gz +0 -0
  326. package/src/data/tables/races.json.gz +0 -0
  327. package/src/data/tables/reputationRanks.json.gz +0 -0
  328. package/src/data/tables/reputationRates.json.gz +0 -0
  329. package/src/data/tables/reputationSpillover.json.gz +0 -0
  330. package/src/data/tables/ridingSpells.json.gz +0 -0
  331. package/src/data/tables/scriptTexts.json.gz +0 -0
  332. package/src/data/tables/soundClipVolume.json.gz +0 -0
  333. package/src/data/tables/spellChain.json.gz +0 -0
  334. package/src/data/tables/spellTeleports.json.gz +0 -0
  335. package/src/data/tables/spells.json.gz +0 -0
  336. package/src/data/tables/talents.json.gz +0 -0
  337. package/src/data/tables/tavernTriggers.json.gz +0 -0
  338. package/src/data/tables/taxiNodes.json.gz +0 -0
  339. package/src/data/tables/taxiRoutes.json.gz +0 -0
  340. package/src/data/tables/trainers.json.gz +0 -0
  341. package/src/data/tables/transports.json.gz +0 -0
  342. package/src/data/tables/travelAnchors.json.gz +0 -0
  343. package/src/data/tables/travelEdges.json.gz +0 -0
  344. package/src/data/tables/unitConditions.json.gz +0 -0
  345. package/src/data/tables/vendors.json.gz +0 -0
  346. package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
  347. package/src/data/tables/xp.json.gz +0 -0
  348. package/src/data/tables/zoneWeather.json.gz +0 -0
  349. package/src/data/tables/zones.json.gz +0 -0
  350. package/src/data/world-data.ts +56 -0
  351. package/src/data/zone-music-sets.json +2751 -0
  352. package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
  353. package/src/domain/audioQuality.mjs +145 -0
  354. package/src/domain/bg/ab.ts +433 -0
  355. package/src/domain/bg/arenaComps.ts +644 -0
  356. package/src/domain/bg/arenaLab.ts +695 -0
  357. package/src/domain/bg/arenaPace.ts +31 -0
  358. package/src/domain/bg/arenaRating.ts +110 -0
  359. package/src/domain/bg/av.ts +758 -0
  360. package/src/domain/bg/avEnemyPush.ts +219 -0
  361. package/src/domain/bg/avField.ts +283 -0
  362. package/src/domain/bg/avInstanceNodes.ts +197 -0
  363. package/src/domain/bg/avInstanceScore.ts +123 -0
  364. package/src/domain/bg/avQuestItems.ts +55 -0
  365. package/src/domain/bg/avQuests.ts +210 -0
  366. package/src/domain/bg/avSession.ts +196 -0
  367. package/src/domain/bg/bgConsumes.ts +269 -0
  368. package/src/domain/bg/bgPrebuff.ts +153 -0
  369. package/src/domain/bg/bgRest.ts +91 -0
  370. package/src/domain/bg/bgRoster.ts +305 -0
  371. package/src/domain/bg/bgTier.ts +61 -0
  372. package/src/domain/bg/bgWorld.ts +862 -0
  373. package/src/domain/bg/match.ts +215 -0
  374. package/src/domain/bg/strategies.ts +552 -0
  375. package/src/domain/bg/types.ts +291 -0
  376. package/src/domain/bg/wsg.ts +264 -0
  377. package/src/domain/bots/actionProviderSpec.ts +38 -0
  378. package/src/domain/bots/autoConsumables.ts +285 -0
  379. package/src/domain/bots/betweenPullRest.ts +239 -0
  380. package/src/domain/bots/botGear.ts +248 -0
  381. package/src/domain/bots/botInventory.ts +486 -0
  382. package/src/domain/bots/botPet.ts +535 -0
  383. package/src/domain/bots/botPool.ts +291 -0
  384. package/src/domain/bots/botProfessions.ts +334 -0
  385. package/src/domain/bots/companionActionBar.ts +209 -0
  386. package/src/domain/bots/companionHireCost.ts +236 -0
  387. package/src/domain/bots/companionMissions.ts +582 -0
  388. package/src/domain/bots/companionPrep.ts +254 -0
  389. package/src/domain/bots/companionQuests.ts +270 -0
  390. package/src/domain/bots/companionRep.ts +75 -0
  391. package/src/domain/bots/companionRotation.ts +708 -0
  392. package/src/domain/bots/companionXp.ts +66 -0
  393. package/src/domain/bots/consumableShare.ts +811 -0
  394. package/src/domain/bots/dpsMate.ts +1072 -0
  395. package/src/domain/bots/groupCompReport.ts +132 -0
  396. package/src/domain/bots/healthstoneSupply.ts +198 -0
  397. package/src/domain/bots/outfitter.ts +1056 -0
  398. package/src/domain/bots/paladinPrePull.ts +231 -0
  399. package/src/domain/bots/partyRole.ts +40 -0
  400. package/src/domain/bots/playerbotEquipCache.ts +412 -0
  401. package/src/domain/bots/playerbotItemEligibility.ts +60 -0
  402. package/src/domain/bots/playerbotStatWeight.ts +853 -0
  403. package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
  404. package/src/domain/bots/prePullBuffs.ts +219 -0
  405. package/src/domain/bots/prePullStealth.ts +82 -0
  406. package/src/domain/bots/runSupply.ts +251 -0
  407. package/src/domain/bots/runSupplyPrefs.ts +28 -0
  408. package/src/domain/bots/sendTradeGoods.ts +394 -0
  409. package/src/domain/bots/soulShardCap.ts +35 -0
  410. package/src/domain/bots/squad.ts +842 -0
  411. package/src/domain/bots/squadRun.ts +81 -0
  412. package/src/domain/character/actionbar.ts +346 -0
  413. package/src/domain/character/appearance.ts +165 -0
  414. package/src/domain/character/buildCombatant.ts +1726 -0
  415. package/src/domain/character/character.ts +356 -0
  416. package/src/domain/character/characterName.ts +43 -0
  417. package/src/domain/character/characterRatings.ts +424 -0
  418. package/src/domain/character/characterSpells.ts +282 -0
  419. package/src/domain/character/characterStats.ts +1559 -0
  420. package/src/domain/character/characterTalents.ts +398 -0
  421. package/src/domain/character/combatSkills.ts +994 -0
  422. package/src/domain/character/displayForm.ts +72 -0
  423. package/src/domain/character/formTalentAuras.ts +171 -0
  424. package/src/domain/character/forms.ts +499 -0
  425. package/src/domain/character/races.ts +40 -0
  426. package/src/domain/character/resurrectionSickness.ts +49 -0
  427. package/src/domain/character/spellbook.ts +169 -0
  428. package/src/domain/character/stanceBar.ts +354 -0
  429. package/src/domain/character/stancePrereq.ts +70 -0
  430. package/src/domain/character/talentBuilds.ts +63 -0
  431. package/src/domain/character/talentImport.ts +130 -0
  432. package/src/domain/character/talentLink.ts +123 -0
  433. package/src/domain/character/talents.ts +201 -0
  434. package/src/domain/core/conditionSnapshot.ts +92 -0
  435. package/src/domain/core/hover.ts +14 -0
  436. package/src/domain/core/ids.ts +58 -0
  437. package/src/domain/core/internalNameTags.ts +5 -0
  438. package/src/domain/core/runtimeDataPatches.ts +357 -0
  439. package/src/domain/creature/aiTargeting.ts +588 -0
  440. package/src/domain/creature/combatCondition.ts +157 -0
  441. package/src/domain/creature/creatureAggro.ts +804 -0
  442. package/src/domain/creature/creatureAi.ts +206 -0
  443. package/src/domain/creature/creatureAiConstants.ts +661 -0
  444. package/src/domain/creature/creatureCastList.ts +1007 -0
  445. package/src/domain/creature/creatureEventAi.ts +1409 -0
  446. package/src/domain/creature/creatureGroups.ts +144 -0
  447. package/src/domain/creature/creatureLinking.ts +333 -0
  448. package/src/domain/creature/creatureScaling.ts +320 -0
  449. package/src/domain/creature/creatureTrigger.ts +53 -0
  450. package/src/domain/creature/creatureWander.ts +74 -0
  451. package/src/domain/creature/eventAiTexts.ts +145 -0
  452. package/src/domain/creature/faction.ts +287 -0
  453. package/src/domain/creature/forcedReaction.ts +48 -0
  454. package/src/domain/creature/outdoorHuntable.ts +74 -0
  455. package/src/domain/creature/patrolPacks.ts +210 -0
  456. package/src/domain/creature/reputation.ts +967 -0
  457. package/src/domain/creature/unitFlags.ts +74 -0
  458. package/src/domain/creature/worldBosses.ts +393 -0
  459. package/src/domain/dungeonMusic.mjs +48 -0
  460. package/src/domain/economy/auction.ts +282 -0
  461. package/src/domain/economy/auctionBot.ts +1060 -0
  462. package/src/domain/economy/honorPrice.ts +100 -0
  463. package/src/domain/economy/mail.ts +958 -0
  464. package/src/domain/economy/money.ts +42 -0
  465. package/src/domain/economy/syntheticClassTrainers.ts +62 -0
  466. package/src/domain/economy/trading.ts +296 -0
  467. package/src/domain/economy/vendorSellAll.ts +252 -0
  468. package/src/domain/economy/vendorStock.ts +146 -0
  469. package/src/domain/items/ammo.ts +817 -0
  470. package/src/domain/items/bank.ts +162 -0
  471. package/src/domain/items/consumableFamily.ts +205 -0
  472. package/src/domain/items/craftUpgrades.ts +83 -0
  473. package/src/domain/items/createItem.ts +93 -0
  474. package/src/domain/items/durability.ts +581 -0
  475. package/src/domain/items/equipment.ts +441 -0
  476. package/src/domain/items/equipmentHelper.ts +767 -0
  477. package/src/domain/items/inventory.ts +561 -0
  478. package/src/domain/items/itemBonding.ts +93 -0
  479. package/src/domain/items/itemContainer.ts +245 -0
  480. package/src/domain/items/itemDisplayName.ts +33 -0
  481. package/src/domain/items/itemInstance.ts +181 -0
  482. package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
  483. package/src/domain/items/itemRandomProps.ts +77 -0
  484. package/src/domain/items/itemRestrictions.ts +329 -0
  485. package/src/domain/items/itemTeaches.ts +82 -0
  486. package/src/domain/items/itemUseCooldown.ts +52 -0
  487. package/src/domain/items/itemUseTarget.ts +90 -0
  488. package/src/domain/items/junkCategories.ts +174 -0
  489. package/src/domain/items/junkFilter.ts +368 -0
  490. package/src/domain/items/keyring.ts +131 -0
  491. package/src/domain/items/loot.ts +221 -0
  492. package/src/domain/items/mounts.ts +190 -0
  493. package/src/domain/items/onUsePayload.ts +102 -0
  494. package/src/domain/items/pendingLoot.ts +107 -0
  495. package/src/domain/items/relic.ts +105 -0
  496. package/src/domain/items/rocketBoots.ts +36 -0
  497. package/src/domain/items/sortContainer.ts +139 -0
  498. package/src/domain/items/spareContainers.ts +71 -0
  499. package/src/domain/items/spellReagentIndex.ts +131 -0
  500. package/src/domain/items/staleConsumables.ts +66 -0
  501. package/src/domain/items/weaponSpender.ts +110 -0
  502. package/src/domain/listDungeonIds.mjs +28 -0
  503. package/src/domain/macro/compose.ts +239 -0
  504. package/src/domain/macro/conditions.ts +260 -0
  505. package/src/domain/macro/creatureTypes.ts +40 -0
  506. package/src/domain/macro/describe.ts +169 -0
  507. package/src/domain/macro/icon.ts +60 -0
  508. package/src/domain/macro/index.ts +20 -0
  509. package/src/domain/macro/normalize.ts +112 -0
  510. package/src/domain/macro/parse.ts +316 -0
  511. package/src/domain/macro/plan.ts +288 -0
  512. package/src/domain/macro/rotation.ts +590 -0
  513. package/src/domain/macro/rotationEnv.ts +173 -0
  514. package/src/domain/macro/slots.ts +101 -0
  515. package/src/domain/macro/snapshot.ts +114 -0
  516. package/src/domain/macro/templates.ts +446 -0
  517. package/src/domain/macro/types.ts +70 -0
  518. package/src/domain/macro/units.ts +93 -0
  519. package/src/domain/macro/weaponTypes.ts +83 -0
  520. package/src/domain/nav/cityTeleports.ts +10 -0
  521. package/src/domain/nav/mounting.ts +113 -0
  522. package/src/domain/nav/nav.ts +43 -0
  523. package/src/domain/nav/navCollision.ts +606 -0
  524. package/src/domain/nav/navOutdoors.ts +91 -0
  525. package/src/domain/nav/navRegistry.ts +179 -0
  526. package/src/domain/nav/navRoomGraph.ts +302 -0
  527. package/src/domain/nav/navTypes.ts +43 -0
  528. package/src/domain/nav/navmesh.ts +1715 -0
  529. package/src/domain/nav/speed.ts +200 -0
  530. package/src/domain/nav/storey.ts +10 -0
  531. package/src/domain/nav/travel.ts +725 -0
  532. package/src/domain/nav/travelTypes.ts +75 -0
  533. package/src/domain/pet/pet.ts +1150 -0
  534. package/src/domain/pet/petActionBar.ts +180 -0
  535. package/src/domain/pet/petSpellbook.ts +39 -0
  536. package/src/domain/pet/petStable.ts +81 -0
  537. package/src/domain/professions/autoDisenchant.ts +236 -0
  538. package/src/domain/professions/characterEnchants.ts +176 -0
  539. package/src/domain/professions/craftCooldown.ts +52 -0
  540. package/src/domain/professions/enchantApply.ts +62 -0
  541. package/src/domain/professions/enchantTargets.ts +114 -0
  542. package/src/domain/professions/enchanting.ts +236 -0
  543. package/src/domain/professions/gatherFilter.ts +149 -0
  544. package/src/domain/professions/gearEnchant.ts +137 -0
  545. package/src/domain/professions/heldTools.ts +29 -0
  546. package/src/domain/professions/learnAllRecipes.ts +146 -0
  547. package/src/domain/professions/miningHarvest.ts +69 -0
  548. package/src/domain/professions/partyDisenchant.ts +294 -0
  549. package/src/domain/professions/partyWork.ts +83 -0
  550. package/src/domain/professions/pickpocket.ts +172 -0
  551. package/src/domain/professions/poisons.ts +240 -0
  552. package/src/domain/professions/professions.ts +677 -0
  553. package/src/domain/professions/rareNodes.ts +45 -0
  554. package/src/domain/professions/skinLoot.ts +27 -0
  555. package/src/domain/professions/vendorReagents.ts +152 -0
  556. package/src/domain/professions/weaponImbueHand.ts +171 -0
  557. package/src/domain/questFarmFilter.mjs +42 -0
  558. package/src/domain/quests/doQuest.ts +1204 -0
  559. package/src/domain/quests/gossip.ts +308 -0
  560. package/src/domain/quests/gossipTalk.ts +298 -0
  561. package/src/domain/quests/interpreter/canComplete.ts +150 -0
  562. package/src/domain/quests/interpreter/claim.ts +137 -0
  563. package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
  564. package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
  565. package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
  566. package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
  567. package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
  568. package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
  569. package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
  570. package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
  571. package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
  572. package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
  573. package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
  574. package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
  575. package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
  576. package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
  577. package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
  578. package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
  579. package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
  580. package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
  581. package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
  582. package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
  583. package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
  584. package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
  585. package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
  586. package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
  587. package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
  588. package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
  589. package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
  590. package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
  591. package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
  592. package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
  593. package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
  594. package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
  595. package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
  596. package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
  597. package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
  598. package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
  599. package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
  600. package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
  601. package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
  602. package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
  603. package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
  604. package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
  605. package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
  606. package/src/domain/quests/interpreter/diff.ts +349 -0
  607. package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
  608. package/src/domain/quests/interpreter/flags.ts +101 -0
  609. package/src/domain/quests/interpreter/index.ts +113 -0
  610. package/src/domain/quests/interpreter/live.ts +178 -0
  611. package/src/domain/quests/interpreter/types.ts +81 -0
  612. package/src/domain/quests/interpreter/updaters.ts +412 -0
  613. package/src/domain/quests/questCorpseUse.ts +155 -0
  614. package/src/domain/quests/questDialog.ts +43 -0
  615. package/src/domain/quests/questFight.ts +34 -0
  616. package/src/domain/quests/questObjectiveLabel.ts +39 -0
  617. package/src/domain/quests/questRewardChoice.ts +85 -0
  618. package/src/domain/quests/questScriptCredit.ts +26 -0
  619. package/src/domain/quests/questScriptItemUse.ts +74 -0
  620. package/src/domain/quests/questTameRods.ts +79 -0
  621. package/src/domain/quests/questlog.ts +1545 -0
  622. package/src/domain/quests/talkDeliver.ts +170 -0
  623. package/src/domain/raid/globalActionBar.ts +195 -0
  624. package/src/domain/raid/instanceRoster.ts +194 -0
  625. package/src/domain/raid/partySummon.ts +198 -0
  626. package/src/domain/raid/partyVault.ts +320 -0
  627. package/src/domain/raid/raidBossAbilities.ts +268 -0
  628. package/src/domain/raid/raidComp.ts +335 -0
  629. package/src/domain/raid/raidCustomRows.ts +453 -0
  630. package/src/domain/raid/raidEncounterGear.ts +298 -0
  631. package/src/domain/raid/raidEncounterTactics.ts +412 -0
  632. package/src/domain/raid/raidPlan.ts +509 -0
  633. package/src/domain/raid/raidPlanEdits.ts +98 -0
  634. package/src/domain/raid/raidPlanPacks.ts +480 -0
  635. package/src/domain/raid/raidRecovery.ts +183 -0
  636. package/src/domain/raid/raidRosterTemplate.ts +138 -0
  637. package/src/domain/rotation/auraSide.ts +68 -0
  638. package/src/domain/rotation/build.ts +3031 -0
  639. package/src/domain/rotation/classes/druid.ts +58 -0
  640. package/src/domain/rotation/classes/hooks.ts +59 -0
  641. package/src/domain/rotation/classes/hunter.ts +156 -0
  642. package/src/domain/rotation/classes/index.ts +104 -0
  643. package/src/domain/rotation/classes/mage.ts +99 -0
  644. package/src/domain/rotation/classes/paladin.ts +296 -0
  645. package/src/domain/rotation/classes/priest.ts +94 -0
  646. package/src/domain/rotation/classes/pullOpener.ts +92 -0
  647. package/src/domain/rotation/classes/rogue.ts +69 -0
  648. package/src/domain/rotation/classes/shaman.ts +29 -0
  649. package/src/domain/rotation/classes/supportSpec.ts +94 -0
  650. package/src/domain/rotation/classes/warlock.ts +81 -0
  651. package/src/domain/rotation/classes/warrior.ts +402 -0
  652. package/src/domain/rotation/classify.ts +1381 -0
  653. package/src/domain/rotation/condMetricPicker.ts +379 -0
  654. package/src/domain/rotation/consumables.ts +242 -0
  655. package/src/domain/rotation/evaluate.ts +1115 -0
  656. package/src/domain/rotation/finisherLadder.ts +145 -0
  657. package/src/domain/rotation/invent.ts +938 -0
  658. package/src/domain/rotation/killOrder.ts +30 -0
  659. package/src/domain/rotation/openerForm.ts +22 -0
  660. package/src/domain/rotation/paladinBuffs.ts +568 -0
  661. package/src/domain/rotation/prebuff.ts +283 -0
  662. package/src/domain/rotation/raidRowTuning.ts +34 -0
  663. package/src/domain/rotation/rotation.ts +11 -0
  664. package/src/domain/rotation/rotationProfiles.ts +180 -0
  665. package/src/domain/rotation/rotationSuggestions.ts +851 -0
  666. package/src/domain/rotation/ruleAfterChain.ts +49 -0
  667. package/src/domain/rotation/spec.ts +70 -0
  668. package/src/domain/rotation/spellPicker.ts +140 -0
  669. package/src/domain/rotation/stand.ts +143 -0
  670. package/src/domain/rotation/types.ts +718 -0
  671. package/src/domain/run/battlegroundRun.ts +111 -0
  672. package/src/domain/run/canEnterContext.ts +32 -0
  673. package/src/domain/run/death.ts +561 -0
  674. package/src/domain/run/deathRecovery.ts +289 -0
  675. package/src/domain/run/duel.ts +141 -0
  676. package/src/domain/run/dungeonRun.ts +344 -0
  677. package/src/domain/run/floorRest.ts +159 -0
  678. package/src/domain/run/honor.ts +557 -0
  679. package/src/domain/run/honorWeek.ts +180 -0
  680. package/src/domain/run/whenMap.ts +977 -0
  681. package/src/domain/scriptdev/arathiHighlands.ts +445 -0
  682. package/src/domain/scriptdev/ashenvale.ts +635 -0
  683. package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
  684. package/src/domain/scriptdev/azshara.ts +892 -0
  685. package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
  686. package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
  687. package/src/domain/scriptdev/blackrockSpire.ts +730 -0
  688. package/src/domain/scriptdev/blackwingLair.ts +521 -0
  689. package/src/domain/scriptdev/burningSteppes.ts +62 -0
  690. package/src/domain/scriptdev/classFilter.ts +43 -0
  691. package/src/domain/scriptdev/darkshore.ts +817 -0
  692. package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
  693. package/src/domain/scriptdev/deadmines.ts +331 -0
  694. package/src/domain/scriptdev/desolace.ts +1239 -0
  695. package/src/domain/scriptdev/direMaul.ts +859 -0
  696. package/src/domain/scriptdev/durotar.ts +532 -0
  697. package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
  698. package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
  699. package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
  700. package/src/domain/scriptdev/felwood.ts +1055 -0
  701. package/src/domain/scriptdev/feralas.ts +571 -0
  702. package/src/domain/scriptdev/feralasHelpers.ts +838 -0
  703. package/src/domain/scriptdev/gnomeregan.ts +466 -0
  704. package/src/domain/scriptdev/guards.ts +616 -0
  705. package/src/domain/scriptdev/hinterlands.ts +693 -0
  706. package/src/domain/scriptdev/host.ts +1134 -0
  707. package/src/domain/scriptdev/index.ts +123 -0
  708. package/src/domain/scriptdev/instanceRaids.ts +136 -0
  709. package/src/domain/scriptdev/itemScripts.ts +37 -0
  710. package/src/domain/scriptdev/lochModan.ts +283 -0
  711. package/src/domain/scriptdev/maraudon.ts +232 -0
  712. package/src/domain/scriptdev/moltenCore.ts +831 -0
  713. package/src/domain/scriptdev/moonglade.ts +659 -0
  714. package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
  715. package/src/domain/scriptdev/naxxramas.ts +577 -0
  716. package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
  717. package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
  718. package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
  719. package/src/domain/scriptdev/npcProfessions.ts +1025 -0
  720. package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
  721. package/src/domain/scriptdev/onyxiasLair.ts +313 -0
  722. package/src/domain/scriptdev/orgrimmar.ts +147 -0
  723. package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
  724. package/src/domain/scriptdev/razorfenDowns.ts +468 -0
  725. package/src/domain/scriptdev/razorfenKraul.ts +410 -0
  726. package/src/domain/scriptdev/redridgeMountains.ts +163 -0
  727. package/src/domain/scriptdev/registry.ts +945 -0
  728. package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
  729. package/src/domain/scriptdev/scarletMonastery.ts +713 -0
  730. package/src/domain/scriptdev/scholomance.ts +682 -0
  731. package/src/domain/scriptdev/searingGorge.ts +295 -0
  732. package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
  733. package/src/domain/scriptdev/silithus.ts +71 -0
  734. package/src/domain/scriptdev/silverpineForest.ts +662 -0
  735. package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
  736. package/src/domain/scriptdev/stormwindCity.ts +1192 -0
  737. package/src/domain/scriptdev/stranglethornVale.ts +402 -0
  738. package/src/domain/scriptdev/stratholme.ts +650 -0
  739. package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
  740. package/src/domain/scriptdev/sunkenTemple.ts +736 -0
  741. package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
  742. package/src/domain/scriptdev/tanaris.ts +391 -0
  743. package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
  744. package/src/domain/scriptdev/teldrassil.ts +143 -0
  745. package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
  746. package/src/domain/scriptdev/theBarrens.ts +709 -0
  747. package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
  748. package/src/domain/scriptdev/thousandNeedles.ts +426 -0
  749. package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
  750. package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
  751. package/src/domain/scriptdev/types.ts +1026 -0
  752. package/src/domain/scriptdev/uldaman.ts +437 -0
  753. package/src/domain/scriptdev/ungoroCrater.ts +549 -0
  754. package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
  755. package/src/domain/scriptdev/wailingCaverns.ts +700 -0
  756. package/src/domain/scriptdev/warEffort.ts +371 -0
  757. package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
  758. package/src/domain/scriptdev/westfall.ts +767 -0
  759. package/src/domain/scriptdev/wetlands.ts +660 -0
  760. package/src/domain/scriptdev/winterspring.ts +482 -0
  761. package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
  762. package/src/domain/scriptdev/worldBosses.ts +605 -0
  763. package/src/domain/scriptdev/zulfarrak.ts +478 -0
  764. package/src/domain/scriptdev/zulgurub.ts +1152 -0
  765. package/src/domain/sim/dummySim.ts +408 -0
  766. package/src/domain/sim/targetDummy.ts +29 -0
  767. package/src/domain/social/guild.ts +148 -0
  768. package/src/domain/spells/areaAuraMembership.ts +93 -0
  769. package/src/domain/spells/breakableStunCc.ts +166 -0
  770. package/src/domain/spells/cancelAura.ts +80 -0
  771. package/src/domain/spells/diminishing.ts +167 -0
  772. package/src/domain/spells/dispel.ts +149 -0
  773. package/src/domain/spells/dispelMechanic.ts +105 -0
  774. package/src/domain/spells/equipSpells.ts +247 -0
  775. package/src/domain/spells/learnOnTargets.ts +260 -0
  776. package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
  777. package/src/domain/spells/resurrectSpell.ts +124 -0
  778. package/src/domain/spells/spellPushback.ts +39 -0
  779. package/src/domain/spells/spellReflect.ts +43 -0
  780. package/src/domain/spells/stealth.ts +183 -0
  781. package/src/domain/spells/totem.ts +394 -0
  782. package/src/domain/spells/worldCast.ts +187 -0
  783. package/src/domain/world/areaTriggerLocks.ts +177 -0
  784. package/src/domain/world/dungeonMusic.ts +108 -0
  785. package/src/domain/world/gameEvents.ts +119 -0
  786. package/src/domain/world/gameObjects.ts +1030 -0
  787. package/src/domain/world/goEventFire.ts +234 -0
  788. package/src/domain/world/goMoTransport.ts +74 -0
  789. package/src/domain/world/goTransport.ts +81 -0
  790. package/src/domain/world/hazards.ts +459 -0
  791. package/src/domain/world/openLock.ts +398 -0
  792. package/src/domain/world/pools.ts +470 -0
  793. package/src/domain/world/restArea.ts +37 -0
  794. package/src/domain/world/weather.ts +201 -0
  795. package/src/domain/zoneAmbience.mjs +87 -0
  796. package/src/domain/zoneMusic.mjs +62 -0
  797. package/src/domain/zoneMusicQueue.mjs +7 -0
  798. package/src/engine/combat/activeSeal.ts +39 -0
  799. package/src/engine/combat/aiTargetResolve.ts +64 -0
  800. package/src/engine/combat/aoeCast.ts +289 -0
  801. package/src/engine/combat/applyConsumeAura.ts +74 -0
  802. package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
  803. package/src/engine/combat/applyDispelMechanic.ts +30 -0
  804. package/src/engine/combat/applyHealEffect.ts +301 -0
  805. package/src/engine/combat/applySchoolAbsorb.ts +114 -0
  806. package/src/engine/combat/applySpell.ts +3169 -0
  807. package/src/engine/combat/applySpellLate.ts +2026 -0
  808. package/src/engine/combat/applySpellLateBag.ts +144 -0
  809. package/src/engine/combat/areaAura.ts +283 -0
  810. package/src/engine/combat/attackTable.ts +508 -0
  811. package/src/engine/combat/battleRez.ts +87 -0
  812. package/src/engine/combat/castAction.ts +36 -0
  813. package/src/engine/combat/castTargetGates.ts +75 -0
  814. package/src/engine/combat/castableKit.ts +68 -0
  815. package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
  816. package/src/engine/combat/chainFan.ts +210 -0
  817. package/src/engine/combat/channel.ts +423 -0
  818. package/src/engine/combat/chaseCloseness.ts +95 -0
  819. package/src/engine/combat/cmangosCastGates.ts +129 -0
  820. package/src/engine/combat/combatFlag.ts +77 -0
  821. package/src/engine/combat/combatGeometry.ts +1329 -0
  822. package/src/engine/combat/combustion.ts +68 -0
  823. package/src/engine/combat/context.ts +730 -0
  824. package/src/engine/combat/createSession.ts +1165 -0
  825. package/src/engine/combat/creatureLeash.ts +38 -0
  826. package/src/engine/combat/crowdControl.ts +1259 -0
  827. package/src/engine/combat/dispelDuty.ts +54 -0
  828. package/src/engine/combat/dispelReflect.ts +609 -0
  829. package/src/engine/combat/displaceFloor.ts +113 -0
  830. package/src/engine/combat/duelBounds.ts +47 -0
  831. package/src/engine/combat/equippedItemGate.ts +297 -0
  832. package/src/engine/combat/evadeLifecycle.ts +63 -0
  833. package/src/engine/combat/eventAi.ts +2220 -0
  834. package/src/engine/combat/facing.ts +74 -0
  835. package/src/engine/combat/fearFlee.ts +137 -0
  836. package/src/engine/combat/fighterFactory.ts +1144 -0
  837. package/src/engine/combat/forceDespawnAction.ts +51 -0
  838. package/src/engine/combat/formulas.ts +807 -0
  839. package/src/engine/combat/friendlyFan.ts +55 -0
  840. package/src/engine/combat/groundPoolTick.ts +210 -0
  841. package/src/engine/combat/hazards.ts +114 -0
  842. package/src/engine/combat/healTargets.ts +226 -0
  843. package/src/engine/combat/heartbeatResist.ts +49 -0
  844. package/src/engine/combat/hostileItemUse.ts +75 -0
  845. package/src/engine/combat/interruptAuras.ts +66 -0
  846. package/src/engine/combat/itemRescue.ts +49 -0
  847. package/src/engine/combat/itemUse.ts +260 -0
  848. package/src/engine/combat/kitById.ts +23 -0
  849. package/src/engine/combat/knockBack.ts +201 -0
  850. package/src/engine/combat/leap.ts +89 -0
  851. package/src/engine/combat/mitigation.ts +587 -0
  852. package/src/engine/combat/modTaunt.ts +43 -0
  853. package/src/engine/combat/motionClaim.ts +268 -0
  854. package/src/engine/combat/motionGate.ts +150 -0
  855. package/src/engine/combat/motionGenerator.ts +27 -0
  856. package/src/engine/combat/navSight.ts +138 -0
  857. package/src/engine/combat/perfSink.ts +28 -0
  858. package/src/engine/combat/periodicDue.ts +55 -0
  859. package/src/engine/combat/petAuras.ts +86 -0
  860. package/src/engine/combat/pickAction.ts +3449 -0
  861. package/src/engine/combat/powerForm.ts +735 -0
  862. package/src/engine/combat/powerPools.ts +49 -0
  863. package/src/engine/combat/predicates.ts +538 -0
  864. package/src/engine/combat/procsDamage.ts +1823 -0
  865. package/src/engine/combat/reactiveGates.ts +135 -0
  866. package/src/engine/combat/roles.ts +389 -0
  867. package/src/engine/combat/rotationSubject.ts +78 -0
  868. package/src/engine/combat/ruleAfter.ts +106 -0
  869. package/src/engine/combat/seedDisplayAuras.ts +203 -0
  870. package/src/engine/combat/seedOocEffects.ts +317 -0
  871. package/src/engine/combat/seedSchoolImmunities.ts +45 -0
  872. package/src/engine/combat/session-types.ts +458 -0
  873. package/src/engine/combat/sessionApi.ts +1785 -0
  874. package/src/engine/combat/sessionCharge.ts +124 -0
  875. package/src/engine/combat/sessionChase.ts +869 -0
  876. package/src/engine/combat/sessionDeaths.ts +469 -0
  877. package/src/engine/combat/sessionFocus.ts +506 -0
  878. package/src/engine/combat/sessionFollow.ts +167 -0
  879. package/src/engine/combat/sessionGeometry.ts +188 -0
  880. package/src/engine/combat/sessionHome.ts +75 -0
  881. package/src/engine/combat/sessionInject.ts +719 -0
  882. package/src/engine/combat/sessionMechanicMove.ts +555 -0
  883. package/src/engine/combat/sessionMotion.ts +1553 -0
  884. package/src/engine/combat/sessionMotionKit.ts +247 -0
  885. package/src/engine/combat/sessionMoveIntent.ts +49 -0
  886. package/src/engine/combat/sessionMoveOrder.ts +200 -0
  887. package/src/engine/combat/sessionPathTo.ts +657 -0
  888. package/src/engine/combat/sessionPools.ts +688 -0
  889. package/src/engine/combat/sessionSteer.ts +144 -0
  890. package/src/engine/combat/sessionStepBack.ts +151 -0
  891. package/src/engine/combat/sessionStepWrap.ts +116 -0
  892. package/src/engine/combat/sessionView.ts +442 -0
  893. package/src/engine/combat/simEffects.ts +32 -0
  894. package/src/engine/combat/simFacade.ts +620 -0
  895. package/src/engine/combat/simPump.ts +264 -0
  896. package/src/engine/combat/simSnapshot.ts +165 -0
  897. package/src/engine/combat/simThreadPool.ts +35 -0
  898. package/src/engine/combat/skeramImages.ts +57 -0
  899. package/src/engine/combat/slowUpdate.ts +178 -0
  900. package/src/engine/combat/snapToFloor.ts +42 -0
  901. package/src/engine/combat/speedAura.ts +29 -0
  902. package/src/engine/combat/spellReagents.ts +71 -0
  903. package/src/engine/combat/stealthDetect.ts +93 -0
  904. package/src/engine/combat/stepBackMotion.ts +171 -0
  905. package/src/engine/combat/stepSession.ts +3102 -0
  906. package/src/engine/combat/summonCast.ts +243 -0
  907. package/src/engine/combat/thaddiusPolarity.ts +97 -0
  908. package/src/engine/combat/threat.ts +388 -0
  909. package/src/engine/combat/threatOps.ts +272 -0
  910. package/src/engine/combat/tickWorkerBody.ts +211 -0
  911. package/src/engine/combat/totemAuras.ts +122 -0
  912. package/src/engine/combat/triggerPayload.ts +42 -0
  913. package/src/engine/combat/triggeredCompanion.ts +63 -0
  914. package/src/engine/combat/types.ts +1897 -0
  915. package/src/engine/combat/useObjectTrap.ts +140 -0
  916. package/src/engine/combat/walkSurface.ts +54 -0
  917. package/src/engine/combat/weapon.ts +1248 -0
  918. package/src/engine/combat/worldFrame.ts +43 -0
  919. package/src/engine/combat.solo-golden.json +2242 -0
  920. package/src/engine/combat.ts +84 -0
  921. package/src/engine/core/detMath.ts +289 -0
  922. package/src/engine/core/events.ts +357 -0
  923. package/src/engine/core/rng.ts +36 -0
  924. package/src/engine/game/actionBars.ts +124 -0
  925. package/src/engine/game/activateObjectFromSpell.ts +320 -0
  926. package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
  927. package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
  928. package/src/engine/game/applyDoorFromDbScript.ts +388 -0
  929. package/src/engine/game/applyEscortFromDbScript.ts +290 -0
  930. package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
  931. package/src/engine/game/applyHoverFromDbScript.ts +110 -0
  932. package/src/engine/game/applyOocResurrect.ts +71 -0
  933. package/src/engine/game/applySpellDurability.ts +115 -0
  934. package/src/engine/game/applyTailFromDbScript.ts +478 -0
  935. package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
  936. package/src/engine/game/auctionMail.ts +269 -0
  937. package/src/engine/game/bagOverflow.ts +130 -0
  938. package/src/engine/game/bank.ts +110 -0
  939. package/src/engine/game/barAutofill.ts +26 -0
  940. package/src/engine/game/battleground.ts +369 -0
  941. package/src/engine/game/combatEnemySpec.ts +216 -0
  942. package/src/engine/game/combatObjectTraps.ts +167 -0
  943. package/src/engine/game/combatSeed.ts +320 -0
  944. package/src/engine/game/combatSession.ts +3241 -0
  945. package/src/engine/game/combatSessionClock.ts +62 -0
  946. package/src/engine/game/companionQuestActions.ts +242 -0
  947. package/src/engine/game/companionTraining.ts +40 -0
  948. package/src/engine/game/consumables.ts +624 -0
  949. package/src/engine/game/context.ts +53 -0
  950. package/src/engine/game/createHealthstone.ts +45 -0
  951. package/src/engine/game/deathFlow.ts +127 -0
  952. package/src/engine/game/devGrant.ts +117 -0
  953. package/src/engine/game/dynamicObject.ts +365 -0
  954. package/src/engine/game/enchantItem.ts +177 -0
  955. package/src/engine/game/equipmentHelper.ts +806 -0
  956. package/src/engine/game/factionState.ts +108 -0
  957. package/src/engine/game/garmentsOoc.ts +69 -0
  958. package/src/engine/game/globalActionBar.ts +179 -0
  959. package/src/engine/game/goInteractQuestCredit.ts +51 -0
  960. package/src/engine/game/goMoTransportUse.ts +61 -0
  961. package/src/engine/game/goTransportUse.ts +60 -0
  962. package/src/engine/game/healthstoneUpkeep.ts +59 -0
  963. package/src/engine/game/killSkin.ts +124 -0
  964. package/src/engine/game/learnFromItem.ts +118 -0
  965. package/src/engine/game/loadReconcile.ts +551 -0
  966. package/src/engine/game/loot.ts +294 -0
  967. package/src/engine/game/macros.ts +125 -0
  968. package/src/engine/game/mail.ts +293 -0
  969. package/src/engine/game/meetingStoneQueue.ts +75 -0
  970. package/src/engine/game/meetingStoneUse.ts +54 -0
  971. package/src/engine/game/newGameState.ts +363 -0
  972. package/src/engine/game/oocAuraInterrupt.ts +92 -0
  973. package/src/engine/game/oocCast.ts +241 -0
  974. package/src/engine/game/oocCastEffects.ts +803 -0
  975. package/src/engine/game/oocCastMethods.ts +1077 -0
  976. package/src/engine/game/openLockFromSpell.ts +174 -0
  977. package/src/engine/game/outdoorPvp.ts +187 -0
  978. package/src/engine/game/outfitter.ts +644 -0
  979. package/src/engine/game/paladinBoard.ts +393 -0
  980. package/src/engine/game/partyAuras.ts +121 -0
  981. package/src/engine/game/persistCombatAuras.ts +91 -0
  982. package/src/engine/game/pets.ts +459 -0
  983. package/src/engine/game/prePullHealthstones.ts +154 -0
  984. package/src/engine/game/professions.ts +2227 -0
  985. package/src/engine/game/pruneStaleRuntime.ts +39 -0
  986. package/src/engine/game/questFightCredit.ts +36 -0
  987. package/src/engine/game/questItemOnCorpse.ts +166 -0
  988. package/src/engine/game/questItemOnCreature.ts +103 -0
  989. package/src/engine/game/questLog.ts +879 -0
  990. package/src/engine/game/questSpellComplete.ts +21 -0
  991. package/src/engine/game/questTurnIn.ts +598 -0
  992. package/src/engine/game/raidParty.ts +32 -0
  993. package/src/engine/game/reagentBuyIn.ts +39 -0
  994. package/src/engine/game/regenRest.ts +186 -0
  995. package/src/engine/game/rotation.ts +425 -0
  996. package/src/engine/game/runFullDungeon.ts +611 -0
  997. package/src/engine/game/runSupply.ts +80 -0
  998. package/src/engine/game/sanitizeDriftedItems.ts +135 -0
  999. package/src/engine/game/scriptDevGoUse.ts +397 -0
  1000. package/src/engine/game/scriptDevInnkeeper.ts +150 -0
  1001. package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
  1002. package/src/engine/game/sendEventFromSpell.ts +87 -0
  1003. package/src/engine/game/sortContainers.ts +85 -0
  1004. package/src/engine/game/spellReputation.ts +69 -0
  1005. package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
  1006. package/src/engine/game/squadDungeon.ts +4222 -0
  1007. package/src/engine/game/squadQuestShare.ts +260 -0
  1008. package/src/engine/game/summonObjectSlot.ts +69 -0
  1009. package/src/engine/game/summonObjectWild.ts +73 -0
  1010. package/src/engine/game/summoningRitualUse.ts +141 -0
  1011. package/src/engine/game/talents.ts +356 -0
  1012. package/src/engine/game/tamingRodUse.ts +66 -0
  1013. package/src/engine/game/tempSpawnCreature.ts +136 -0
  1014. package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
  1015. package/src/engine/game/tickTimedQuests.ts +28 -0
  1016. package/src/engine/game/trade.ts +586 -0
  1017. package/src/engine/game/travel.ts +1155 -0
  1018. package/src/engine/game/types.ts +1855 -0
  1019. package/src/engine/game/vendorOffers.ts +244 -0
  1020. package/src/engine/game/weaponImbueItem.ts +281 -0
  1021. package/src/engine/game/worldSession.ts +183 -0
  1022. package/src/engine/game/worldState.ts +166 -0
  1023. package/src/engine/game.ts +968 -0
  1024. package/src/engine/spells/GAP.md +67 -0
  1025. package/src/engine/spells/absorbs.ts +376 -0
  1026. package/src/engine/spells/addTargetTrigger.ts +53 -0
  1027. package/src/engine/spells/auraPerSecondCost.ts +50 -0
  1028. package/src/engine/spells/auraStacking.ts +497 -0
  1029. package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
  1030. package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
  1031. package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
  1032. package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
  1033. package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
  1034. package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
  1035. package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
  1036. package/src/engine/spells/cmangos-special-cases.ts +1570 -0
  1037. package/src/engine/spells/conditions.ts +718 -0
  1038. package/src/engine/spells/effects.ts +203 -0
  1039. package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
  1040. package/src/engine/spells/immunity.ts +942 -0
  1041. package/src/engine/spells/intentEffects.ts +351 -0
  1042. package/src/engine/spells/interpreter/GAPS.md +21 -0
  1043. package/src/engine/spells/interpreter/amount.ts +109 -0
  1044. package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
  1045. package/src/engine/spells/interpreter/diff.ts +246 -0
  1046. package/src/engine/spells/interpreter/duration.ts +90 -0
  1047. package/src/engine/spells/interpreter/form-attrs.json +1 -0
  1048. package/src/engine/spells/interpreter/form-attrs.ts +95 -0
  1049. package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
  1050. package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
  1051. package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
  1052. package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
  1053. package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
  1054. package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
  1055. package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
  1056. package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
  1057. package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
  1058. package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
  1059. package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
  1060. package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
  1061. package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
  1062. package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
  1063. package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
  1064. package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
  1065. package/src/engine/spells/interpreter/handlers.ts +9 -0
  1066. package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
  1067. package/src/engine/spells/interpreter/index.ts +525 -0
  1068. package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
  1069. package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
  1070. package/src/engine/spells/interpreter/mage-portals.ts +37 -0
  1071. package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
  1072. package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
  1073. package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
  1074. package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
  1075. package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
  1076. package/src/engine/spells/interpreter/opcodes.ts +789 -0
  1077. package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
  1078. package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
  1079. package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
  1080. package/src/engine/spells/interpreter/proc.ts +443 -0
  1081. package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
  1082. package/src/engine/spells/interpreter/registry/index.ts +216 -0
  1083. package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
  1084. package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
  1085. package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
  1086. package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
  1087. package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
  1088. package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
  1089. package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
  1090. package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
  1091. package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
  1092. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
  1093. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
  1094. package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
  1095. package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
  1096. package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
  1097. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
  1098. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
  1099. package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
  1100. package/src/engine/spells/interpreter/registry/types.ts +48 -0
  1101. package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
  1102. package/src/engine/spells/interpreter/targeting.ts +90 -0
  1103. package/src/engine/spells/interpreter/types-intent.ts +1501 -0
  1104. package/src/engine/spells/interpreter/types.ts +419 -0
  1105. package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
  1106. package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
  1107. package/src/engine/spells/interrupt.ts +217 -0
  1108. package/src/engine/spells/meleeAttackReset.ts +60 -0
  1109. package/src/engine/spells/oocTriggerSpell.ts +49 -0
  1110. package/src/engine/spells/overrideClassScripts.ts +319 -0
  1111. package/src/engine/spells/parryHaste.ts +20 -0
  1112. package/src/engine/spells/procs.ts +300 -0
  1113. package/src/engine/spells/recovery.ts +203 -0
  1114. package/src/engine/spells/scriptTargetDest.ts +76 -0
  1115. package/src/engine/spells/scriptTargets.ts +85 -0
  1116. package/src/engine/spells/singleTargetAura.ts +82 -0
  1117. package/src/engine/spells/specialCasePayloads.ts +57 -0
  1118. package/src/engine/spells/spellAttributes.ts +249 -0
  1119. package/src/engine/spells/spellBonus.ts +143 -0
  1120. package/src/engine/spells/spellModIntents.ts +419 -0
  1121. package/src/engine/spells/spellMods.ts +283 -0
  1122. package/src/engine/spells/spellRadius.ts +15 -0
  1123. package/src/engine/spells/trapObjects.ts +26 -0
  1124. package/src/json.d.ts +7 -0
  1125. package/src/persistence/memoryRepository.ts +23 -0
  1126. package/src/persistence/saveBackups.ts +162 -0
  1127. package/src/persistence/saveFile.ts +68 -0
  1128. package/src/persistence/saveRepository.ts +11 -0
  1129. package/src/persistence/saveShape.ts +668 -0
  1130. package/src/progression/leveling.ts +89 -0
  1131. package/src/progression/rest.ts +1434 -0
  1132. package/src/progression/training.ts +226 -0
  1133. package/src/progression/xpGain.ts +369 -0
  1134. package/src/quests/quests.ts +1580 -0
  1135. package/src/world/aoePull.ts +198 -0
  1136. package/src/world/areaTableDbc.ts +39 -0
  1137. package/src/world/areaTableMapIdPairs.ts +141 -0
  1138. package/src/world/bakeSlug.ts +43 -0
  1139. package/src/world/continuousDungeon.ts +1250 -0
  1140. package/src/world/dungeonBakeProjection.ts +190 -0
  1141. package/src/world/dungeonMapDensity.ts +342 -0
  1142. package/src/world/dungeonMapProjection.ts +135 -0
  1143. package/src/world/dungeonNav.ts +904 -0
  1144. package/src/world/dungeonNpcSim.ts +147 -0
  1145. package/src/world/dungeonObjectives.ts +234 -0
  1146. package/src/world/dungeonPreset.ts +35 -0
  1147. package/src/world/dungeonRoute.ts +311 -0
  1148. package/src/world/dungeonRouteGeometry.ts +732 -0
  1149. package/src/world/dungeonRouteOrder.ts +1037 -0
  1150. package/src/world/dungeonWingRooms.ts +426 -0
  1151. package/src/world/escort.ts +296 -0
  1152. package/src/world/goPoolRoll.ts +75 -0
  1153. package/src/world/instanceObjects.ts +785 -0
  1154. package/src/world/instances.ts +1572 -0
  1155. package/src/world/meetingStones.ts +56 -0
  1156. package/src/world/navmeshFloors.ts +145 -0
  1157. package/src/world/nearGrid.ts +167 -0
  1158. package/src/world/packBudget.ts +613 -0
  1159. package/src/world/rareRoll.ts +335 -0
  1160. package/src/world/routeAuthoring.ts +132 -0
  1161. package/src/world/routeEdit.ts +209 -0
  1162. package/src/world/world.ts +812 -0
  1163. package/src/world/zoneHazards.ts +47 -0
@@ -0,0 +1,1239 @@
1
+ // Desolace ScriptDev IR ports. Source: scripts/kalimdor/desolace.cpp — the dying kodo, Dalinda,
2
+ // Melizza, the Gizelton caravan pair and the Magrami spectre. Every value cites file:line below.
3
+
4
+ import type { ScriptDevIR } from './types.ts';
5
+ import { CAST_FLAG } from '../creature/creatureAi.ts';
6
+
7
+ // Shared factions / stand states / tempfaction
8
+
9
+ /** FACTION_ESCORT_A_NEUTRAL_PASSIVE. Cite: ScriptDevAIMgr.h:44 = 10; desolace.cpp:225 Dalinda */
10
+ export const FACTION_ESCORT_A_NEUTRAL_PASSIVE = 10;
11
+
12
+ /** FACTION_ESCORT_N_NEUTRAL_PASSIVE. Cite: ScriptDevAIMgr.h:50 = 250; desolace.cpp:328 Melizza */
13
+ export const FACTION_ESCORT_N_NEUTRAL_PASSIVE = 250;
14
+
15
+ /** FACTION_HOSTILE (Magrami after MovementInform). Cite: desolace.cpp:600 FACTION_HOSTILE = 16 */
16
+ export const FACTION_HOSTILE = 16;
17
+
18
+ /** TEMPFACTION_RESTORE_RESPAWN. Cite: Creature.h TEMPFACTION_RESTORE_RESPAWN=0x01; desolace.cpp:225,328 */
19
+ export const TEMPFACTION_RESTORE_RESPAWN = 0x01;
20
+
21
+ /** TEMPFACTION_TOGGLE_IMMUNE_TO_NPC. Cite: Creature.h:582 = 0x20; desolace.cpp:225 */
22
+ export const TEMPFACTION_TOGGLE_IMMUNE_TO_NPC = 0x20;
23
+
24
+ /** TEMPFACTION_NONE (Magrami SetFactionTemporary). Cite: desolace.cpp:645 TEMPFACTION_NONE */
25
+ export const TEMPFACTION_NONE = 0;
26
+
27
+ /** UNIT_STAND_STATE_KNEEL / STAND. Cite: Unit.h; desolace.cpp:192 kneel ctor, :200 stand escort start */
28
+ export const UNIT_STAND_STATE_KNEEL = 8;
29
+ export const UNIT_STAND_STATE_STAND = 0;
30
+
31
+ // Constants — npc_aged_dying_ancient_kodo
32
+
33
+ // desolace.cpp:42–59
34
+ /** Cite: desolace.cpp:42 SAY_SMEED_HOME_1 = -1000348 */
35
+ export const SAY_SMEED_HOME_1 = -1_000_348;
36
+ /** Cite: desolace.cpp:43 SAY_SMEED_HOME_2 = -1000349 */
37
+ export const SAY_SMEED_HOME_2 = -1_000_349;
38
+ /** Cite: desolace.cpp:44 SAY_SMEED_HOME_3 = -1000350 */
39
+ export const SAY_SMEED_HOME_3 = -1_000_350;
40
+
41
+ /** Cite: desolace.cpp:46 QUEST_KODO = 5561 */
42
+ export const QUEST_KODO = 5561;
43
+
44
+ /** Cite: desolace.cpp:48 NPC_SMEED = 11596 */
45
+ export const NPC_SMEED = 11596;
46
+ /** Cite: desolace.cpp:49 NPC_AGED_KODO = 4700 */
47
+ export const NPC_AGED_KODO = 4700;
48
+ /** Cite: desolace.cpp:50 NPC_DYING_KODO = 4701 */
49
+ export const NPC_DYING_KODO = 4701;
50
+ /** Cite: desolace.cpp:51 NPC_ANCIENT_KODO = 4702 */
51
+ export const NPC_ANCIENT_KODO = 4702;
52
+ /** Cite: desolace.cpp:52 NPC_TAMED_KODO = 11627 */
53
+ export const NPC_TAMED_KODO = 11627;
54
+
55
+ /** Cite: desolace.cpp:54 SPELL_KODO_KOMBO_ITEM = 18153 */
56
+ export const SPELL_KODO_KOMBO_ITEM = 18153;
57
+ /** Cite: desolace.cpp:55 SPELL_KODO_KOMBO_PLAYER_BUFF = 18172 */
58
+ export const SPELL_KODO_KOMBO_PLAYER_BUFF = 18172;
59
+ /** Cite: desolace.cpp:56 SPELL_KODO_KOMBO_DESPAWN_BUFF = 18377 */
60
+ export const SPELL_KODO_KOMBO_DESPAWN_BUFF = 18377;
61
+ /** Cite: desolace.cpp:57 SPELL_KODO_KOMBO_GOSSIP = 18362 */
62
+ export const SPELL_KODO_KOMBO_GOSSIP = 18362;
63
+ /** Cite: desolace.cpp:58 SPELL_KODO_KOMBOBULATOR = 18793 */
64
+ export const SPELL_KODO_KOMBOBULATOR = 18793;
65
+ /** Cite: desolace.cpp:59 SPELL_KODO_DESPAWN = 22970 */
66
+ export const SPELL_KODO_DESPAWN = 22970;
67
+
68
+ /** Smeed home LOS distance. Cite: desolace.cpp:80 IsWithinDistInMap(pWho, 10.0f) */
69
+ export const SMEED_HOME_LOS_YD = 10;
70
+
71
+ // Despawn timer after gossip flag armed by SpellHit 18362. Cite: desolace.cpp:101 m_uiDespawnTimer = 60000
72
+ export const KODO_DESPAWN_TIMER_MS = 60_000;
73
+
74
+ /** ForcedDespawn after successful gossip quest credit. Cite: desolace.cpp:171 ForcedDespawn(10000) */
75
+ export const KODO_GOSSIP_DESPAWN_MS = 10_000;
76
+
77
+ /** Valid Kodo Kombobulator targets. Cite: desolace.cpp:138 */
78
+ export const KODO_KOMBO_TARGET_ENTRIES = [
79
+ NPC_AGED_KODO,
80
+ NPC_DYING_KODO,
81
+ NPC_ANCIENT_KODO,
82
+ ] as const;
83
+
84
+ // Constants — npc_dalinda_malem
85
+
86
+ // desolace.cpp:185–186
87
+ /** Cite: desolace.cpp:185 QUEST_RETURN_TO_VAHLARRIEL = 1440 */
88
+ export const QUEST_RETURN_TO_VAHLARRIEL = 1440;
89
+ /** Cite: scriptdev2.sql / bound creature Dalinda */
90
+ export const NPC_DALINDA_MALEM = 5644;
91
+
92
+ /** Explore credit waypoint. Cite: desolace.cpp:205–209 uiPointId == 18 */
93
+ export const DALINDA_CREDIT_WP = 18;
94
+
95
+ // QuestAccept temp faction flags. Cite: desolace.cpp:225 TEMPFACTION_RESTORE_RESPAWN |
96
+ // TEMPFACTION_TOGGLE_IMMUNE_TO_NPC
97
+ export const DALINDA_TEMP_FACTION_FLAGS =
98
+ TEMPFACTION_RESTORE_RESPAWN | TEMPFACTION_TOGGLE_IMMUNE_TO_NPC;
99
+
100
+ // Constants — npc_melizza_brimbuzzle
101
+
102
+ // desolace.cpp:238–262
103
+ /** Cite: desolace.cpp:238 QUEST_GET_ME_OUT_OF_HERE = 6132 */
104
+ export const QUEST_GET_ME_OUT_OF_HERE = 6132;
105
+ /** Cite: desolace.cpp:240 GO_MELIZZAS_CAGE = 177706 */
106
+ export const GO_MELIZZAS_CAGE = 177706;
107
+
108
+ /** Cite: desolace.cpp:242 SAY_MELIZZA_START = -1000784 */
109
+ export const SAY_MELIZZA_START = -1_000_784;
110
+ /** Cite: desolace.cpp:243 SAY_MELIZZA_FINISH = -1000785 */
111
+ export const SAY_MELIZZA_FINISH = -1_000_785;
112
+ /** Cite: desolace.cpp:244 SAY_MELIZZA_1 = -1000786 */
113
+ export const SAY_MELIZZA_1 = -1_000_786;
114
+ /** Cite: desolace.cpp:245 SAY_MELIZZA_2 = -1000787 */
115
+ export const SAY_MELIZZA_2 = -1_000_787;
116
+ /** Cite: desolace.cpp:246 SAY_MELIZZA_3 = -1000788 */
117
+ export const SAY_MELIZZA_3 = -1_000_788;
118
+ /** Cite: desolace.cpp:248 SAY_HORNIZZ_1 = -1010030 */
119
+ export const SAY_HORNIZZ_1 = -1_010_030;
120
+ /** Cite: desolace.cpp:249 SAY_HORNIZZ_2 = -1010031 */
121
+ export const SAY_HORNIZZ_2 = -1_010_031;
122
+
123
+ /** Cite: desolace.cpp:251 NPC_MARAUDINE_MARAUDER = 4659 */
124
+ export const NPC_MARAUDINE_MARAUDER = 4659;
125
+ /** Cite: desolace.cpp:252 NPC_MARAUDINE_BONEPAW = 4660 */
126
+ export const NPC_MARAUDINE_BONEPAW = 4660;
127
+ /** Cite: desolace.cpp:253 NPC_MARAUDINE_WRANGLER = 4655 */
128
+ export const NPC_MARAUDINE_WRANGLER = 4655;
129
+ /** Cite: desolace.cpp:255 NPC_MELIZZA = 12277 */
130
+ export const NPC_MELIZZA = 12277;
131
+ /** Cite: world_kalimdor.h:30 NPC_HORNIZZ = 6019 */
132
+ export const NPC_HORNIZZ = 6019;
133
+
134
+ /** Cite: desolace.cpp:258 POINT_ID_QUEST_COMPLETE = 1 */
135
+ export const POINT_ID_QUEST_COMPLETE = 1;
136
+ /** Cite: desolace.cpp:259 POINT_ID_EVENT_COMPLETE = 2 */
137
+ export const POINT_ID_EVENT_COMPLETE = 2;
138
+ /** Cite: desolace.cpp:261 MAX_MARAUDERS = 2 */
139
+ export const MAX_MARAUDERS = 2;
140
+ /** Cite: desolace.cpp:262 MAX_WRANGLERS = 3 */
141
+ export const MAX_WRANGLERS = 3;
142
+
143
+ /** Marauder spawn anchors + 7yd random. Cite: desolace.cpp:284–288,336–338 */
144
+ export const MELIZZA_MARAUDER_SPAWNS = [
145
+ { x: -1291.492, y: 2644.65, z: 111.556 },
146
+ { x: -1306.73, y: 2675.163, z: 111.561 },
147
+ ] as const;
148
+ export const MELIZZA_MARAUDER_RADIUS_YD = 7;
149
+
150
+ /** Wrangler/Bonepaw spawn + 10yd random. Cite: desolace.cpp:290,346–347 */
151
+ export const MELIZZA_WRANGLER_SPAWN = {
152
+ x: -1393.194,
153
+ y: 2429.465,
154
+ z: 88.689,
155
+ } as const;
156
+ export const MELIZZA_WRANGLER_RADIUS_YD = 10;
157
+
158
+ /** Dialogue delays (aIntroDialogue). Cite: desolace.cpp:265–276 */
159
+ export const MELIZZA_DIALOGUE = [
160
+ { entry: POINT_ID_QUEST_COMPLETE, speaker: 0, delayMs: 1000 },
161
+ { entry: QUEST_GET_ME_OUT_OF_HERE, speaker: NPC_MELIZZA, delayMs: 0 },
162
+ { entry: POINT_ID_EVENT_COMPLETE, speaker: 0, delayMs: 2000 },
163
+ { entry: SAY_MELIZZA_1, speaker: NPC_MELIZZA, delayMs: 4000 },
164
+ { entry: SAY_MELIZZA_2, speaker: NPC_MELIZZA, delayMs: 5000 },
165
+ { entry: SAY_MELIZZA_3, speaker: NPC_MELIZZA, delayMs: 4000 },
166
+ { entry: NPC_MELIZZA, speaker: 0, delayMs: 6000 },
167
+ { entry: SAY_HORNIZZ_1, speaker: NPC_HORNIZZ, delayMs: 10_000 },
168
+ { entry: SAY_HORNIZZ_2, speaker: NPC_HORNIZZ, delayMs: 0 },
169
+ ] as const;
170
+
171
+ /** Face heading at event-complete pause. Cite: desolace.cpp:382 SetFacingTo(4.71f) */
172
+ export const MELIZZA_EVENT_COMPLETE_FACING = 4.71;
173
+
174
+ // Constants — npc_cork_gizelton / npc_rigger_gizelton
175
+
176
+ // desolace.cpp:423–438
177
+ /** Cite: desolace.cpp:423 NPC_CORK_GIZELTON = 11625 */
178
+ export const NPC_CORK_GIZELTON = 11625;
179
+ /** Cite: desolace.cpp:424 NPC_RIGGER_GIZELTON = 11626 */
180
+ export const NPC_RIGGER_GIZELTON = 11626;
181
+ /** Cite: desolace.cpp:425 NPC_VENDOR_TRON = 12245 */
182
+ export const NPC_VENDOR_TRON = 12245;
183
+ /** Cite: desolace.cpp:426 NPC_SUPER_SELLER = 12246 */
184
+ export const NPC_SUPER_SELLER = 12246;
185
+
186
+ /** Cite: desolace.cpp:428 QUEST_BODYGUARD_TO_HIRE = 5821 */
187
+ export const QUEST_BODYGUARD_TO_HIRE = 5821;
188
+ /** Cite: desolace.cpp:429 QUEST_GIZELTON_CARAVAN = 5943 */
189
+ export const QUEST_GIZELTON_CARAVAN = 5943;
190
+
191
+ /** Cite: desolace.cpp:431 WAYPOINT_PATH_ID = 19019 */
192
+ export const WAYPOINT_PATH_ID = 19019;
193
+ /** Cite: desolace.cpp:432 PATH_ID_CORK_GIZELTON = 11625 */
194
+ export const PATH_ID_CORK_GIZELTON = 11625;
195
+ /** Cite: desolace.cpp:433 PATH_ID_RIGGER_GIZELTON = 11626 */
196
+ export const PATH_ID_RIGGER_GIZELTON = 11626;
197
+ /** Cite: desolace.cpp:434 WAYPOINT_PATH_POINT_AFTER_ESCORT_1 = 33 */
198
+ export const WAYPOINT_PATH_POINT_AFTER_ESCORT_1 = 33;
199
+ /** Cite: desolace.cpp:435 WAYPOINT_PATH_POINT_AFTER_ESCORT_2 = 100 */
200
+ export const WAYPOINT_PATH_POINT_AFTER_ESCORT_2 = 100;
201
+
202
+ // Forced fail/despawn after caravan member death. Cite: desolace.cpp:437 GIZELTON_TIMER_AFTER_FAIL = 60 *
203
+ // IN_MILLISECONDS
204
+ export const GIZELTON_TIMER_AFTER_FAIL_MS = 60_000;
205
+
206
+ /** Rigger → Cork hand-off search radius. Cite: desolace.cpp:585 GetClosestCreatureWithEntry(..., 100.0f) */
207
+ export const RIGGER_CORK_SEARCH_YD = 100;
208
+
209
+ // Constants — npc_magrami_spectre
210
+
211
+ // desolace.cpp:594–604
212
+ /** Cite: desolace.cpp:594 SPELL_CURSE_OF_MAGRAMI = 18159 */
213
+ export const SPELL_CURSE_OF_MAGRAMI = 18159;
214
+ /** Cite: desolace.cpp:595 SPELL_GHOST_SPAWN_IN = 17321 */
215
+ export const SPELL_GHOST_SPAWN_IN = 17321;
216
+ /** Cite: desolace.cpp:596 SPELL_BLUE_AURA = 17327 */
217
+ export const SPELL_BLUE_AURA = 17327;
218
+ /** Cite: desolace.cpp:597 SPELL_GREEN_AURA = 18951 */
219
+ export const SPELL_GREEN_AURA = 18951;
220
+ /** Cite: desolace.cpp:598 SPELL_CHILLING_TOUCH = 18146 */
221
+ export const SPELL_CHILLING_TOUCH = 18146;
222
+
223
+ /** Cite: desolace.cpp:602 SAY_EMOTE_1 = -1001226 */
224
+ export const SAY_MAGRAMI_EMOTE_1 = -1_001_226;
225
+ /** Cite: desolace.cpp:603 SAY_EMOTE_2 = -1001227 */
226
+ export const SAY_MAGRAMI_EMOTE_2 = -1_001_227;
227
+
228
+ /** Cite: scriptdev2.sql / bound creature */
229
+ export const NPC_MAGRAMI_SPECTRE = 11560;
230
+
231
+ // Curse timer initial (one-shot — set to 0 after cast). Cite: desolace.cpp:614 m_uiCurseTimer = 4000; :659
232
+ // m_uiCurseTimer = 0
233
+ export const MAGRAMI_CURSE_INIT_MS = 4000;
234
+
235
+ // Spell 18159's aura duration from bake. The host forces EFLAG_REPEATABLE, so re-arming at the
236
+ // aura duration approximates the cpp one-shot without inventing a timer. Cite: desolace.cpp:659.
237
+ export const MAGRAMI_CURSE_AURA_DURATION_MS = 900_000;
238
+
239
+ /** MovementInform point that arms green aura + hostile faction. Cite: desolace.cpp:638 uiData == 1 */
240
+ export const MAGRAMI_ARRIVE_POINT = 1;
241
+
242
+ /** Random roam radius after arrive. Cite: desolace.cpp:642 MoveRandomAroundPoint(..., 5.f) */
243
+ export const MAGRAMI_ROAM_RADIUS_YD = 5;
244
+
245
+ // Pure helpers — kodo
246
+
247
+ export interface KodoKomboCheckResult {
248
+ ok: boolean;
249
+ reason:
250
+ | 'ok'
251
+ | 'bad_target'
252
+ | 'player_has_buff'
253
+ | 'kodo_has_despawn_buff';
254
+ cite: string;
255
+ }
256
+
257
+ /** Port of KodoKombobulator::OnCheckCast. Cite: desolace.cpp:135–144 */
258
+ export function kodoKomboCheckCast(
259
+ targetEntry: number,
260
+ playerHasBuff18172: boolean,
261
+ kodoHasBuff18377: boolean,
262
+ ): KodoKomboCheckResult {
263
+ if (
264
+ targetEntry !== NPC_AGED_KODO &&
265
+ targetEntry !== NPC_DYING_KODO &&
266
+ targetEntry !== NPC_ANCIENT_KODO
267
+ ) {
268
+ return {
269
+ ok: false,
270
+ reason: 'bad_target',
271
+ cite: 'desolace.cpp:138 BAD_TARGETS unless Aged/Dying/Ancient Kodo',
272
+ };
273
+ }
274
+ if (playerHasBuff18172) {
275
+ return {
276
+ ok: false,
277
+ reason: 'player_has_buff',
278
+ cite: 'desolace.cpp:141 caster HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) → CASTER_AURASTATE',
279
+ };
280
+ }
281
+ if (kodoHasBuff18377) {
282
+ return {
283
+ ok: false,
284
+ reason: 'kodo_has_despawn_buff',
285
+ cite: 'desolace.cpp:141 target HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF) → CASTER_AURASTATE',
286
+ };
287
+ }
288
+ return { ok: true, reason: 'ok', cite: 'desolace.cpp:144 SPELL_CAST_OK' };
289
+ }
290
+
291
+ export interface KodoKomboExecuteResult {
292
+ playerBuffSpellId: number;
293
+ updateEntry: number;
294
+ kodoDespawnBuffSpellId: number;
295
+ moveFollow: boolean;
296
+ cite: string;
297
+ }
298
+
299
+ /** Port of KodoKombobulator::OnEffectExecute. Cite: desolace.cpp:147–160 */
300
+ export function kodoKomboOnEffectExecute(): KodoKomboExecuteResult {
301
+ return {
302
+ playerBuffSpellId: SPELL_KODO_KOMBO_PLAYER_BUFF,
303
+ updateEntry: NPC_TAMED_KODO,
304
+ kodoDespawnBuffSpellId: SPELL_KODO_KOMBO_DESPAWN_BUFF,
305
+ moveFollow: true,
306
+ cite:
307
+ 'desolace.cpp:151-159 target→caster 18172; UpdateEntry 11627; cast 18377; MoveFollow',
308
+ };
309
+ }
310
+
311
+ export interface KodoSmeedLosResult {
312
+ handled: boolean;
313
+ textId: number | null;
314
+ castGossipSpellId: number | null;
315
+ cite: string;
316
+ }
317
+
318
+ // Port of npc_aged_dying_ancient_kodoAI::MoveInLineOfSight, Smeed branch.
319
+ // Cite: desolace.cpp:73–92.
320
+ export function kodoSmeedMoveInLos(
321
+ smeedEntry: number,
322
+ distYd: number,
323
+ hasGossipFlag: boolean,
324
+ roll02: number,
325
+ ): KodoSmeedLosResult {
326
+ if ((smeedEntry | 0) !== NPC_SMEED) {
327
+ return {
328
+ handled: false,
329
+ textId: null,
330
+ castGossipSpellId: null,
331
+ cite: 'desolace.cpp:75 entry != NPC_SMEED → fall through ScriptedAI',
332
+ };
333
+ }
334
+ if (hasGossipFlag) {
335
+ return {
336
+ handled: false,
337
+ textId: null,
338
+ castGossipSpellId: null,
339
+ cite: 'desolace.cpp:77-78 already gossip flag → return',
340
+ };
341
+ }
342
+ if (!(distYd <= SMEED_HOME_LOS_YD)) {
343
+ return {
344
+ handled: false,
345
+ textId: null,
346
+ castGossipSpellId: null,
347
+ cite: 'desolace.cpp:80 not within 10yd → no-op',
348
+ };
349
+ }
350
+ const texts = [SAY_SMEED_HOME_1, SAY_SMEED_HOME_2, SAY_SMEED_HOME_3] as const;
351
+ const idx = ((roll02 | 0) % 3 + 3) % 3;
352
+ return {
353
+ handled: true,
354
+ textId: texts[idx]!,
355
+ castGossipSpellId: SPELL_KODO_KOMBO_GOSSIP,
356
+ cite:
357
+ 'desolace.cpp:82-90 urand SAY_SMEED_HOME_* on Smeed + CastSpell 18362 TRIGGERED self',
358
+ };
359
+ }
360
+
361
+ export interface KodoSpellHitResult {
362
+ handled: boolean;
363
+ moveIdle: boolean;
364
+ setGossipFlag: boolean;
365
+ despawnTimerMs: number;
366
+ cite: string;
367
+ }
368
+
369
+ /** Port of npc_aged_dying_ancient_kodoAI::SpellHit. Cite: desolace.cpp:95–103 */
370
+ export function kodoSpellHit(spellId: number): KodoSpellHitResult {
371
+ if ((spellId | 0) !== SPELL_KODO_KOMBO_GOSSIP) {
372
+ return {
373
+ handled: false,
374
+ moveIdle: false,
375
+ setGossipFlag: false,
376
+ despawnTimerMs: 0,
377
+ cite: 'desolace.cpp:97 spellId != SPELL_KODO_KOMBO_GOSSIP → no-op',
378
+ };
379
+ }
380
+ return {
381
+ handled: true,
382
+ moveIdle: true,
383
+ setGossipFlag: true,
384
+ despawnTimerMs: KODO_DESPAWN_TIMER_MS,
385
+ cite:
386
+ 'desolace.cpp:99-101 MoveIdle + gossip flag + m_uiDespawnTimer=60000',
387
+ };
388
+ }
389
+
390
+ export interface KodoGossipHelloResult {
391
+ handled: boolean;
392
+ questTalkEntry: number | null;
393
+ stripPlayerBuff: boolean;
394
+ forceDespawnMs: number;
395
+ cite: string;
396
+ }
397
+
398
+ /** Port of GossipHello_npc_aged_dying_ancient_kodo credit branch. Cite: desolace.cpp:163–177 */
399
+ export function kodoGossipHello(
400
+ playerHasBuff18172: boolean,
401
+ kodoHasBuff18377: boolean,
402
+ kodoEntry: number,
403
+ ): KodoGossipHelloResult {
404
+ if (!playerHasBuff18172 || !kodoHasBuff18377) {
405
+ return {
406
+ handled: false,
407
+ questTalkEntry: null,
408
+ stripPlayerBuff: false,
409
+ forceDespawnMs: 0,
410
+ cite: 'desolace.cpp:165 missing buff pair → prepare default gossip only',
411
+ };
412
+ }
413
+ return {
414
+ handled: true,
415
+ questTalkEntry: kodoEntry | 0,
416
+ stripPlayerBuff: true,
417
+ forceDespawnMs: KODO_GOSSIP_DESPAWN_MS,
418
+ cite:
419
+ 'desolace.cpp:168-171 TalkedToCreature(entry) + RemoveAuras 18172 + ForcedDespawn(10000)',
420
+ };
421
+ }
422
+
423
+ export interface KodoDespawnTimerResult {
424
+ expired: boolean;
425
+ justDiedRespawn: boolean;
426
+ remainingMs: number;
427
+ cite: string;
428
+ }
429
+
430
+ // Port of the despawn-timer branch in UpdateAI.
431
+ // Cite: desolace.cpp:105–118.
432
+ export function kodoDespawnTimerTick(
433
+ despawnTimerMs: number,
434
+ diffMs: number,
435
+ hasVictim: boolean,
436
+ alive: boolean,
437
+ ): KodoDespawnTimerResult {
438
+ if (!despawnTimerMs) {
439
+ return {
440
+ expired: false,
441
+ justDiedRespawn: false,
442
+ remainingMs: 0,
443
+ cite: 'desolace.cpp:108 m_uiDespawnTimer==0 → skip',
444
+ };
445
+ }
446
+ if (despawnTimerMs <= diffMs) {
447
+ if (!hasVictim && alive) {
448
+ return {
449
+ expired: true,
450
+ justDiedRespawn: true,
451
+ remainingMs: 0,
452
+ cite: 'desolace.cpp:110-115 OOC alive → Reset + JUST_DIED + Respawn',
453
+ };
454
+ }
455
+ return {
456
+ expired: true,
457
+ justDiedRespawn: false,
458
+ remainingMs: 0,
459
+ cite: 'desolace.cpp:110 in combat or dead → no JUST_DIED path',
460
+ };
461
+ }
462
+ return {
463
+ expired: false,
464
+ justDiedRespawn: false,
465
+ remainingMs: despawnTimerMs - diffMs,
466
+ cite: 'desolace.cpp:118 m_uiDespawnTimer -= diff',
467
+ };
468
+ }
469
+
470
+ // Pure helpers — Dalinda
471
+
472
+ export interface DalindaQuestAcceptResult {
473
+ handled: boolean;
474
+ standState: number;
475
+ factionId: number;
476
+ factionFlags: number;
477
+ questId: number;
478
+ cite: string;
479
+ }
480
+
481
+ /** Port of QuestAccept_npc_dalinda_malem + JustStartedEscort stand. Cite: desolace.cpp:198–201,218–229 */
482
+ export function dalindaQuestAccept(questId: number): DalindaQuestAcceptResult {
483
+ if ((questId | 0) !== QUEST_RETURN_TO_VAHLARRIEL) {
484
+ return {
485
+ handled: false,
486
+ standState: UNIT_STAND_STATE_KNEEL,
487
+ factionId: 0,
488
+ factionFlags: 0,
489
+ questId: 0,
490
+ cite: 'desolace.cpp:220 quest != 1440 → no-op',
491
+ };
492
+ }
493
+ return {
494
+ handled: true,
495
+ standState: UNIT_STAND_STATE_STAND,
496
+ factionId: FACTION_ESCORT_A_NEUTRAL_PASSIVE,
497
+ factionFlags: DALINDA_TEMP_FACTION_FLAGS,
498
+ questId: QUEST_RETURN_TO_VAHLARRIEL,
499
+ cite:
500
+ 'desolace.cpp:200,225-226 STAND + FACTION_ESCORT_A_NEUTRAL_PASSIVE 10 flags 0x21 + Start',
501
+ };
502
+ }
503
+
504
+ export interface DalindaWaypointResult {
505
+ handled: boolean;
506
+ exploreQuestId: number | null;
507
+ cite: string;
508
+ }
509
+
510
+ /** Port of npc_dalinda_malemAI::WaypointReached. Cite: desolace.cpp:203–210 */
511
+ export function dalindaWaypointReached(pointId: number): DalindaWaypointResult {
512
+ if ((pointId | 0) === DALINDA_CREDIT_WP) {
513
+ return {
514
+ handled: true,
515
+ exploreQuestId: QUEST_RETURN_TO_VAHLARRIEL,
516
+ cite: 'desolace.cpp:205-208 WP18 RewardPlayerAndGroupAtEventExplored(1440)',
517
+ };
518
+ }
519
+ return {
520
+ handled: false,
521
+ exploreQuestId: null,
522
+ cite: 'desolace.cpp:205 pointId != 18 → no-op',
523
+ };
524
+ }
525
+
526
+ // Pure helpers — Melizza
527
+
528
+ export interface MelizzaWaypointResult {
529
+ handled: boolean;
530
+ /** SAY text id(s) at this point. */
531
+ textIds: number[];
532
+ setFactionId: number | null;
533
+ openCage: boolean;
534
+ /** Marauder summon count total (anchors × MAX_MARAUDERS). */
535
+ summonMarauders: number;
536
+ /** Bonepaw + Wrangler pairs (MAX_WRANGLERS each). */
537
+ summonWranglerPairs: number;
538
+ startDialoguePoint: number | null;
539
+ cite: string;
540
+ }
541
+
542
+ /** Port of npc_melizza_brimbuzzleAI::WaypointReached. Cite: desolace.cpp:320–359 */
543
+ export function melizzaWaypointReached(pointId: number): MelizzaWaypointResult {
544
+ switch (pointId | 0) {
545
+ case 1:
546
+ return {
547
+ handled: true,
548
+ textIds: [SAY_MELIZZA_START],
549
+ setFactionId: FACTION_ESCORT_N_NEUTRAL_PASSIVE,
550
+ openCage: false,
551
+ summonMarauders: 0,
552
+ summonWranglerPairs: 0,
553
+ startDialoguePoint: null,
554
+ cite: 'desolace.cpp:324-329 WP1 SAY_MELIZZA_START + FACTION_ESCORT_N_NEUTRAL_PASSIVE 250',
555
+ };
556
+ case 4:
557
+ return {
558
+ handled: true,
559
+ textIds: [],
560
+ setFactionId: null,
561
+ openCage: false,
562
+ summonMarauders: MELIZZA_MARAUDER_SPAWNS.length * MAX_MARAUDERS,
563
+ summonWranglerPairs: 0,
564
+ startDialoguePoint: null,
565
+ cite: 'desolace.cpp:330-340 WP4 2 anchors × MAX_MARAUDERS=2 → Maraudine Marauder 4659',
566
+ };
567
+ case 9:
568
+ return {
569
+ handled: true,
570
+ textIds: [],
571
+ setFactionId: null,
572
+ openCage: false,
573
+ summonMarauders: 0,
574
+ summonWranglerPairs: MAX_WRANGLERS,
575
+ startDialoguePoint: null,
576
+ cite: 'desolace.cpp:342-351 WP9 MAX_WRANGLERS=3 × (Bonepaw 4660 + Wrangler 4655)',
577
+ };
578
+ case 12:
579
+ return {
580
+ handled: true,
581
+ textIds: [],
582
+ setFactionId: null,
583
+ openCage: false,
584
+ summonMarauders: 0,
585
+ summonWranglerPairs: 0,
586
+ startDialoguePoint: POINT_ID_QUEST_COMPLETE,
587
+ cite: 'desolace.cpp:353-355 WP12 StartNextDialogueText(POINT_ID_QUEST_COMPLETE)',
588
+ };
589
+ case 19:
590
+ return {
591
+ handled: true,
592
+ textIds: [],
593
+ setFactionId: null,
594
+ openCage: false,
595
+ summonMarauders: 0,
596
+ summonWranglerPairs: 0,
597
+ startDialoguePoint: POINT_ID_EVENT_COMPLETE,
598
+ cite: 'desolace.cpp:356-358 WP19 StartNextDialogueText(POINT_ID_EVENT_COMPLETE)',
599
+ };
600
+ default:
601
+ return {
602
+ handled: false,
603
+ textIds: [],
604
+ setFactionId: null,
605
+ openCage: false,
606
+ summonMarauders: 0,
607
+ summonWranglerPairs: 0,
608
+ startDialoguePoint: null,
609
+ cite: 'desolace.cpp:320-359 no case for this pointId',
610
+ };
611
+ }
612
+ }
613
+
614
+ export interface MelizzaDialogueStepResult {
615
+ handled: boolean;
616
+ pauseEscort: boolean | null;
617
+ resumeEscort: boolean;
618
+ setRun: boolean;
619
+ clearFaction: boolean;
620
+ exploreQuestId: number | null;
621
+ finishTextId: number | null;
622
+ face: number | null;
623
+ cite: string;
624
+ }
625
+
626
+ /** Port of npc_melizza_brimbuzzleAI::JustDidDialogueStep. Cite: desolace.cpp:362–388 */
627
+ export function melizzaDialogueStep(stepEntry: number): MelizzaDialogueStepResult {
628
+ switch (stepEntry | 0) {
629
+ case POINT_ID_QUEST_COMPLETE:
630
+ return {
631
+ handled: true,
632
+ pauseEscort: true,
633
+ resumeEscort: false,
634
+ setRun: false,
635
+ clearFaction: false,
636
+ exploreQuestId: null,
637
+ finishTextId: null,
638
+ face: null,
639
+ cite: 'desolace.cpp:366-368 POINT_ID_QUEST_COMPLETE → SetEscortPaused(true)',
640
+ };
641
+ case QUEST_GET_ME_OUT_OF_HERE:
642
+ return {
643
+ handled: true,
644
+ pauseEscort: false,
645
+ resumeEscort: true,
646
+ setRun: true,
647
+ clearFaction: true,
648
+ exploreQuestId: QUEST_GET_ME_OUT_OF_HERE,
649
+ finishTextId: SAY_MELIZZA_FINISH,
650
+ face: null,
651
+ cite:
652
+ 'desolace.cpp:369-378 QUEST_GET_ME_OUT_OF_HERE → SAY_FINISH + explore 6132 + clear faction + SetRun + unpause',
653
+ };
654
+ case POINT_ID_EVENT_COMPLETE:
655
+ return {
656
+ handled: true,
657
+ pauseEscort: true,
658
+ resumeEscort: false,
659
+ setRun: false,
660
+ clearFaction: false,
661
+ exploreQuestId: null,
662
+ finishTextId: null,
663
+ face: MELIZZA_EVENT_COMPLETE_FACING,
664
+ cite: 'desolace.cpp:380-383 POINT_ID_EVENT_COMPLETE → pause + SetFacingTo(4.71f)',
665
+ };
666
+ case NPC_MELIZZA:
667
+ return {
668
+ handled: true,
669
+ pauseEscort: false,
670
+ resumeEscort: true,
671
+ setRun: false,
672
+ clearFaction: false,
673
+ exploreQuestId: null,
674
+ finishTextId: null,
675
+ face: null,
676
+ cite: 'desolace.cpp:384-386 NPC_MELIZZA step → SetEscortPaused(false)',
677
+ };
678
+ default:
679
+ return {
680
+ handled: false,
681
+ pauseEscort: null,
682
+ resumeEscort: false,
683
+ setRun: false,
684
+ clearFaction: false,
685
+ exploreQuestId: null,
686
+ finishTextId: null,
687
+ face: null,
688
+ cite: 'desolace.cpp:362-388 no JustDidDialogueStep case',
689
+ };
690
+ }
691
+ }
692
+
693
+ /** Port of JustStartedEscort cage open. Cite: desolace.cpp:302–306 */
694
+ export function melizzaJustStartedEscort(): {
695
+ openGoEntry: number;
696
+ cite: string;
697
+ } {
698
+ return {
699
+ openGoEntry: GO_MELIZZAS_CAGE,
700
+ cite: 'desolace.cpp:304-305 GetClosestGameObjectWithEntry(GO_MELIZZAS_CAGE) UseDoorOrButton',
701
+ };
702
+ }
703
+
704
+ // Pure helpers — Cork / Rigger Gizelton
705
+
706
+ export interface CorkWaypointResult {
707
+ handled: boolean;
708
+ exploreQuestId: number | null;
709
+ resumePathId: number | null;
710
+ resumePathPoint: number | null;
711
+ endEscort: boolean;
712
+ clearSouthQuest: boolean;
713
+ cite: string;
714
+ }
715
+
716
+ // Port of npc_cork_gizeltonAI::WaypointReached, while escorting only.
717
+ // Cite: desolace.cpp:500–542.
718
+ export function corkWaypointReached(
719
+ pointId: number,
720
+ escorting: boolean,
721
+ southQuest: boolean,
722
+ questIncomplete5821: boolean,
723
+ questIncomplete5943: boolean,
724
+ ): CorkWaypointResult {
725
+ if (!escorting) {
726
+ return {
727
+ handled: false,
728
+ exploreQuestId: null,
729
+ resumePathId: null,
730
+ resumePathPoint: null,
731
+ endEscort: false,
732
+ clearSouthQuest: false,
733
+ cite: 'desolace.cpp:502-503 !escorting → return',
734
+ };
735
+ }
736
+ if ((pointId | 0) === 19 && !southQuest) {
737
+ return {
738
+ handled: true,
739
+ exploreQuestId: questIncomplete5821 ? QUEST_BODYGUARD_TO_HIRE : null,
740
+ resumePathId: WAYPOINT_PATH_ID,
741
+ resumePathPoint: WAYPOINT_PATH_POINT_AFTER_ESCORT_1,
742
+ endEscort: true,
743
+ clearSouthQuest: false,
744
+ cite:
745
+ 'desolace.cpp:509-523 WP19 !SouthQuest → explore 5821 if incomplete + MoveWaypoint 19019 point 33 + End',
746
+ };
747
+ }
748
+ if ((pointId | 0) === 21 && southQuest) {
749
+ return {
750
+ handled: true,
751
+ exploreQuestId: questIncomplete5943 ? QUEST_GIZELTON_CARAVAN : null,
752
+ resumePathId: WAYPOINT_PATH_ID,
753
+ resumePathPoint: WAYPOINT_PATH_POINT_AFTER_ESCORT_2,
754
+ endEscort: true,
755
+ clearSouthQuest: true,
756
+ cite:
757
+ 'desolace.cpp:526-540 WP21 SouthQuest → explore 5943 if incomplete + MoveWaypoint 19019 point 100 + End + SouthQuest=false',
758
+ };
759
+ }
760
+ return {
761
+ handled: false,
762
+ exploreQuestId: null,
763
+ resumePathId: null,
764
+ resumePathPoint: null,
765
+ endEscort: false,
766
+ clearSouthQuest: false,
767
+ cite: 'desolace.cpp:500-542 point/flag mismatch → no-op',
768
+ };
769
+ }
770
+
771
+ export interface CorkFailTimerResult {
772
+ scriptDone: boolean;
773
+ failQuests: boolean;
774
+ remainingMs: number;
775
+ cite: string;
776
+ }
777
+
778
+ // Port of the UpdateEscortAI fail timer after CreatureGroupMemberDied.
779
+ // Cite: desolace.cpp:482–498, :451–480.
780
+ export function corkFailTimerTick(
781
+ statusFailed: boolean,
782
+ scriptDone: boolean,
783
+ failTimerMs: number,
784
+ diffMs: number,
785
+ groupOutOfCombat: boolean,
786
+ ): CorkFailTimerResult {
787
+ if (scriptDone) {
788
+ return {
789
+ scriptDone: true,
790
+ failQuests: false,
791
+ remainingMs: failTimerMs,
792
+ cite: 'desolace.cpp:486-487 ScriptDone → return',
793
+ };
794
+ }
795
+ if (!statusFailed) {
796
+ return {
797
+ scriptDone: false,
798
+ failQuests: false,
799
+ remainingMs: failTimerMs,
800
+ cite: 'desolace.cpp:489-490 !StatusFailed → return',
801
+ };
802
+ }
803
+ const next = failTimerMs - diffMs;
804
+ if (next > 0 && !groupOutOfCombat) {
805
+ return {
806
+ scriptDone: false,
807
+ failQuests: false,
808
+ remainingMs: next,
809
+ cite: 'desolace.cpp:492-494 FailTimer>0 and group still in combat → wait',
810
+ };
811
+ }
812
+ return {
813
+ scriptDone: true,
814
+ failQuests: true,
815
+ remainingMs: Math.max(0, next),
816
+ cite:
817
+ 'desolace.cpp:496-497 MakeQuestFailAndClean (5821+5943 group fail + Despawn) + ScriptDone',
818
+ };
819
+ }
820
+
821
+ /** Port of QuestAccept_npc_cork_gizelton. Cite: desolace.cpp:558–566 */
822
+ export function corkQuestAccept(questId: number): {
823
+ handled: boolean;
824
+ pathId: number;
825
+ southQuest: boolean;
826
+ cite: string;
827
+ } {
828
+ if ((questId | 0) !== QUEST_BODYGUARD_TO_HIRE) {
829
+ return {
830
+ handled: false,
831
+ pathId: 0,
832
+ southQuest: false,
833
+ cite: 'desolace.cpp:560 quest != 5821 → no-op',
834
+ };
835
+ }
836
+ return {
837
+ handled: true,
838
+ pathId: PATH_ID_CORK_GIZELTON,
839
+ southQuest: false,
840
+ cite: 'desolace.cpp:562-563 Start(false, player, quest, false, false, PATH_ID_CORK_GIZELTON=11625)',
841
+ };
842
+ }
843
+
844
+ /** Port of QuestAccept_npc_rigger_gizelton → Cork StartRiggerEscort. Cite: desolace.cpp:579–589,545–548 */
845
+ export function riggerQuestAccept(
846
+ questId: number,
847
+ corkWithinYd: number,
848
+ ): {
849
+ handled: boolean;
850
+ startCorkSouth: boolean;
851
+ pathId: number;
852
+ cite: string;
853
+ } {
854
+ if ((questId | 0) !== QUEST_GIZELTON_CARAVAN) {
855
+ return {
856
+ handled: false,
857
+ startCorkSouth: false,
858
+ pathId: 0,
859
+ cite: 'desolace.cpp:581 quest != 5943 → no-op',
860
+ };
861
+ }
862
+ if (!(corkWithinYd <= RIGGER_CORK_SEARCH_YD)) {
863
+ return {
864
+ handled: false,
865
+ startCorkSouth: false,
866
+ pathId: 0,
867
+ cite: 'desolace.cpp:585 no Cork within 100yd → no StartRiggerEscort',
868
+ };
869
+ }
870
+ return {
871
+ handled: true,
872
+ startCorkSouth: true,
873
+ pathId: PATH_ID_RIGGER_GIZELTON,
874
+ cite:
875
+ 'desolace.cpp:585-587 Cork StartRiggerEscort: SouthQuest=true + Start path PATH_ID_RIGGER_GIZELTON=11626',
876
+ };
877
+ }
878
+
879
+ // Pure helpers — Magrami Spectre
880
+
881
+ export interface MagramiRespawnResult {
882
+ spellIds: number[];
883
+ textId: number;
884
+ cite: string;
885
+ }
886
+
887
+ // Port of npc_magrami_spectre::JustRespawned; `roll01` picks the emote.
888
+ // Cite: desolace.cpp:617–631.
889
+ export function magramiJustRespawned(roll01: number): MagramiRespawnResult {
890
+ const textId =
891
+ ((roll01 | 0) & 1) === 0 ? SAY_MAGRAMI_EMOTE_1 : SAY_MAGRAMI_EMOTE_2;
892
+ return {
893
+ spellIds: [SPELL_GHOST_SPAWN_IN, SPELL_BLUE_AURA, SPELL_CHILLING_TOUCH],
894
+ textId,
895
+ cite:
896
+ 'desolace.cpp:619-630 Cast 17321/17327/18146 + urand SAY_EMOTE_1/2',
897
+ };
898
+ }
899
+
900
+ export interface MagramiMovementInformResult {
901
+ handled: boolean;
902
+ stripBlueAura: boolean;
903
+ castGreenAura: boolean;
904
+ factionId: number;
905
+ roamRadiusYd: number;
906
+ cite: string;
907
+ }
908
+
909
+ // Port of npc_magrami_spectre::MovementInform, POINT branch (POINT_MOTION_TYPE is 1).
910
+ // Cite: desolace.cpp:634–647.
911
+ export function magramiMovementInform(
912
+ motionTypeIsPoint: boolean,
913
+ pointId: number,
914
+ ): MagramiMovementInformResult {
915
+ if (!motionTypeIsPoint || (pointId | 0) !== MAGRAMI_ARRIVE_POINT) {
916
+ return {
917
+ handled: false,
918
+ stripBlueAura: false,
919
+ castGreenAura: false,
920
+ factionId: 0,
921
+ roamRadiusYd: 0,
922
+ cite: 'desolace.cpp:636-638 !POINT or uiData!=1 → no-op',
923
+ };
924
+ }
925
+ return {
926
+ handled: true,
927
+ stripBlueAura: true,
928
+ castGreenAura: true,
929
+ factionId: FACTION_HOSTILE,
930
+ roamRadiusYd: MAGRAMI_ROAM_RADIUS_YD,
931
+ cite:
932
+ 'desolace.cpp:640-645 MoveRandomAroundPoint 5yd; strip 17327; cast 18951; SetFactionTemporary(16)',
933
+ };
934
+ }
935
+
936
+ export interface MagramiCurseTickResult {
937
+ cast: boolean;
938
+ timerMs: number;
939
+ cite: string;
940
+ }
941
+
942
+ /** Port of curse timer in UpdateAI (one-shot). Cite: desolace.cpp:655–664 */
943
+ export function magramiCurseTimerTick(
944
+ curseTimerMs: number,
945
+ diffMs: number,
946
+ hasVictim: boolean,
947
+ ): MagramiCurseTickResult {
948
+ if (!hasVictim) {
949
+ return {
950
+ cast: false,
951
+ timerMs: curseTimerMs,
952
+ cite: 'desolace.cpp:652 no victim → return before curse branch',
953
+ };
954
+ }
955
+ if (!curseTimerMs) {
956
+ return {
957
+ cast: false,
958
+ timerMs: 0,
959
+ cite: 'desolace.cpp:655 m_uiCurseTimer==0 → skip',
960
+ };
961
+ }
962
+ if (curseTimerMs <= diffMs) {
963
+ return {
964
+ cast: true,
965
+ timerMs: 0,
966
+ cite: 'desolace.cpp:657-660 m_uiCurseTimer=0 + DoCastSpellIfCan(victim, SPELL_CURSE_OF_MAGRAMI)',
967
+ };
968
+ }
969
+ return {
970
+ cast: false,
971
+ timerMs: curseTimerMs - diffMs,
972
+ cite: 'desolace.cpp:662-663 m_uiCurseTimer -= uiDiff',
973
+ };
974
+ }
975
+
976
+ // ScriptDev IR — npc_aged_dying_ancient_kodo
977
+
978
+ // npc_aged_dying_ancient_kodoAI — 4700 Aged, 4701 Dying, 4702 Ancient and 11627 Tamed, all in
979
+ // bake. No combat cast timers: the quest machine is pure helpers plus SpellHit 18362.
980
+ export const NPC_AGED_DYING_ANCIENT_KODO_SCRIPT: ScriptDevIR = {
981
+ name: 'npc_aged_dying_ancient_kodo',
982
+ boundCreatures: [
983
+ NPC_AGED_KODO,
984
+ NPC_DYING_KODO,
985
+ NPC_ANCIENT_KODO,
986
+ NPC_TAMED_KODO,
987
+ ],
988
+ sourceFile: 'kalimdor/desolace.cpp',
989
+ spellIds: [
990
+ SPELL_KODO_KOMBO_ITEM,
991
+ SPELL_KODO_KOMBO_PLAYER_BUFF,
992
+ SPELL_KODO_KOMBO_DESPAWN_BUFF,
993
+ SPELL_KODO_KOMBO_GOSSIP,
994
+ SPELL_KODO_KOMBOBULATOR,
995
+ SPELL_KODO_DESPAWN,
996
+ ],
997
+ timers: [],
998
+ spellHits: [
999
+ {
1000
+ spellId: SPELL_KODO_KOMBO_GOSSIP,
1001
+ once: false,
1002
+ actions: [
1003
+ {
1004
+ kind: 'flavor',
1005
+ text: `MoveIdle + UNIT_NPC_FLAG_GOSSIP + m_uiDespawnTimer=${KODO_DESPAWN_TIMER_MS}`,
1006
+ cite: 'desolace.cpp:99-101 SpellHit 18362',
1007
+ },
1008
+ ],
1009
+ cite: 'desolace.cpp:95-103 SpellHit SPELL_KODO_KOMBO_GOSSIP',
1010
+ },
1011
+ ],
1012
+ gossipHello: {
1013
+ defaultTextId: 0,
1014
+ cite: 'desolace.cpp:163-177 GossipHello default menu; credit branch when buffs 18172+18377 (kodoGossipHello)',
1015
+ },
1016
+ lifecycle: {
1017
+ onReset: [
1018
+ {
1019
+ kind: 'flavor',
1020
+ text: 'm_uiDespawnTimer=0',
1021
+ cite: 'desolace.cpp:68-71 Reset',
1022
+ },
1023
+ ],
1024
+ },
1025
+ cites: [
1026
+ 'desolace.cpp:36-177 npc_aged_dying_ancient_kodo + KodoKombobulator + GossipHello',
1027
+ 'desolace.cpp:46 QUEST_KODO=5561',
1028
+ 'desolace.cpp:49-52 Aged/Dying/Ancient/Tamed entries',
1029
+ 'desolace.cpp:54-59 combo spells 18153/18172/18377/18362/18793/22970',
1030
+ 'desolace.cpp:68-71 Reset despawn timer 0',
1031
+ 'desolace.cpp:73-92 Smeed LOS ≤10yd + SAY + cast 18362',
1032
+ 'desolace.cpp:95-103 SpellHit 18362 gossip + timer 60000',
1033
+ 'desolace.cpp:105-118 despawn timer JUST_DIED+Respawn OOC',
1034
+ 'desolace.cpp:132-161 spell_kodo_kombobulator OnCheckCast/OnEffectExecute',
1035
+ 'desolace.cpp:163-177 GossipHello TalkedToCreature + strip 18172 + despawn 10s',
1036
+ 'scriptdev2.sql ScriptName npc_aged_dying_ancient_kodo',
1037
+ ],
1038
+ };
1039
+
1040
+ // ScriptDev IR — npc_dalinda_malem
1041
+
1042
+ // Cite: desolace.cpp npc_dalinda_malemAI Binding: 5644 Dalinda Malem (in bake). Escort quest 1440 — no
1043
+ // combat timers. QI4 owns pQuestAcceptNPC; pure helpers dalindaQuestAccept / dalindaWaypointReached.
1044
+ export const NPC_DALINDA_MALEM_SCRIPT: ScriptDevIR = {
1045
+ name: 'npc_dalinda_malem',
1046
+ boundCreatures: [NPC_DALINDA_MALEM],
1047
+ sourceFile: 'kalimdor/desolace.cpp',
1048
+ spellIds: [],
1049
+ timers: [],
1050
+ lifecycle: {
1051
+ onReset: [
1052
+ {
1053
+ kind: 'flavor',
1054
+ text: 'Reset empty; ctor kneel UNIT_STAND_STATE_KNEEL',
1055
+ cite: 'desolace.cpp:192,196',
1056
+ },
1057
+ ],
1058
+ },
1059
+ cites: [
1060
+ 'desolace.cpp:179-230 npc_dalinda_malem',
1061
+ 'desolace.cpp:185 QUEST_RETURN_TO_VAHLARRIEL=1440',
1062
+ 'desolace.cpp:192 ctor SetStandState KNEEL',
1063
+ 'desolace.cpp:198-201 JustStartedEscort STAND',
1064
+ 'desolace.cpp:203-210 WP18 explore credit 1440',
1065
+ 'desolace.cpp:218-229 QuestAccept faction 10 flags 0x21 + Start',
1066
+ 'scriptdev2.sql entry 5644',
1067
+ ],
1068
+ };
1069
+
1070
+ // ScriptDev IR — npc_melizza_brimbuzzle
1071
+
1072
+ // npc_melizza_brimbuzzleAI, creature 12277. Escort 6132 with ambush summons and a dialogue
1073
+ // credit, no combat cast timers. Bonepaw 4660 is absent from bake, so that summon is unused.
1074
+ export const NPC_MELIZZA_BRIMBUZZLE_SCRIPT: ScriptDevIR = {
1075
+ name: 'npc_melizza_brimbuzzle',
1076
+ boundCreatures: [NPC_MELIZZA],
1077
+ sourceFile: 'kalimdor/desolace.cpp',
1078
+ spellIds: [],
1079
+ timers: [],
1080
+ lifecycle: {
1081
+ onReset: [
1082
+ {
1083
+ kind: 'flavor',
1084
+ text: 'Reset empty; JustStartedEscort opens GO_MELIZZAS_CAGE 177706',
1085
+ cite: 'desolace.cpp:300-306',
1086
+ },
1087
+ ],
1088
+ },
1089
+ unusedBindings: [
1090
+ {
1091
+ entry: NPC_MARAUDINE_BONEPAW,
1092
+ kind: 'creature',
1093
+ reason:
1094
+ 'NPC 4660 Maraudine Bonepaw is summoned at Melizza WP9 (desolace.cpp:348) but absent from product bake - IR summons record the entry; product cannot spawn Bonepaw until rebake. Wrangler 4655 + Marauder 4659 are in bake.',
1095
+ cite: 'desolace.cpp:252,348; loadRealBundle missing 4660',
1096
+ },
1097
+ ],
1098
+ cites: [
1099
+ 'desolace.cpp:232-415 npc_melizza_brimbuzzle',
1100
+ 'desolace.cpp:238 QUEST_GET_ME_OUT_OF_HERE=6132',
1101
+ 'desolace.cpp:240 GO_MELIZZAS_CAGE=177706',
1102
+ 'desolace.cpp:242-249 SAY_MELIZZA_* + SAY_HORNIZZ_*',
1103
+ 'desolace.cpp:251-255 Marauder/Bonepaw/Wrangler/Melizza entries',
1104
+ 'desolace.cpp:261-262 MAX_MARAUDERS=2 MAX_WRANGLERS=3',
1105
+ 'desolace.cpp:265-276 aIntroDialogue delays',
1106
+ 'desolace.cpp:284-290 spawn coords',
1107
+ 'desolace.cpp:302-306 cage open on escort start',
1108
+ 'desolace.cpp:320-359 WaypointReached ambush + dialogue',
1109
+ 'desolace.cpp:362-388 JustDidDialogueStep explore credit 6132',
1110
+ 'desolace.cpp:406-414 QuestAccept Start',
1111
+ 'scriptdev2.sql entry 12277',
1112
+ ],
1113
+ };
1114
+
1115
+ // ScriptDev IR — npc_cork_gizelton
1116
+
1117
+ // Cite: desolace.cpp npc_cork_gizeltonAI Binding: 11625 Cork Gizelton (in bake). Dual escort 5821/5943 +
1118
+ // fail timer. No combat cast timers. Vendor-tron/Super-Seller constants unused in AI body.
1119
+ export const NPC_CORK_GIZELTON_SCRIPT: ScriptDevIR = {
1120
+ name: 'npc_cork_gizelton',
1121
+ boundCreatures: [NPC_CORK_GIZELTON],
1122
+ sourceFile: 'kalimdor/desolace.cpp',
1123
+ spellIds: [],
1124
+ timers: [],
1125
+ lifecycle: {
1126
+ onReset: [
1127
+ {
1128
+ kind: 'flavor',
1129
+ text: 'Reset empty; FailTimer defaults 60000; StatusFailed/ScriptDone/SouthQuest false',
1130
+ cite: 'desolace.cpp:444-449,437',
1131
+ },
1132
+ ],
1133
+ },
1134
+ cites: [
1135
+ 'desolace.cpp:417-566 npc_cork_gizelton',
1136
+ 'desolace.cpp:428-429 QUEST_BODYGUARD_TO_HIRE=5821 QUEST_GIZELTON_CARAVAN=5943',
1137
+ 'desolace.cpp:431-435 path ids + post-escort points 33/100',
1138
+ 'desolace.cpp:437 GIZELTON_TIMER_AFTER_FAIL=60000',
1139
+ 'desolace.cpp:451-480 MakeQuestFailAndClean group fail both quests + Despawn',
1140
+ 'desolace.cpp:482-498 fail timer UpdateEscortAI',
1141
+ 'desolace.cpp:500-542 WP19/21 credit + resume waypoint path',
1142
+ 'desolace.cpp:545-548 StartRiggerEscort SouthQuest',
1143
+ 'desolace.cpp:552-555 CreatureGroupMemberDied → StatusFailed',
1144
+ 'desolace.cpp:558-566 QuestAccept 5821 path 11625',
1145
+ 'scriptdev2.sql entry 11625',
1146
+ ],
1147
+ };
1148
+
1149
+ // ScriptDev IR — npc_rigger_gizelton
1150
+
1151
+ // Cite: desolace.cpp npc_rigger_gizeltonAI + QuestAccept Binding: 11626 Rigger Gizelton (in bake). Empty
1152
+ // AI; QuestAccept 5943 hands off to nearby Cork StartRiggerEscort.
1153
+ export const NPC_RIGGER_GIZELTON_SCRIPT: ScriptDevIR = {
1154
+ name: 'npc_rigger_gizelton',
1155
+ boundCreatures: [NPC_RIGGER_GIZELTON],
1156
+ sourceFile: 'kalimdor/desolace.cpp',
1157
+ spellIds: [],
1158
+ timers: [],
1159
+ lifecycle: {
1160
+ onReset: [
1161
+ {
1162
+ kind: 'flavor',
1163
+ text: 'Reset empty (ScriptedAI)',
1164
+ cite: 'desolace.cpp:576',
1165
+ },
1166
+ ],
1167
+ },
1168
+ cites: [
1169
+ 'desolace.cpp:568-590 npc_rigger_gizelton',
1170
+ 'desolace.cpp:576 Reset empty',
1171
+ 'desolace.cpp:579-589 QuestAccept 5943 → Cork StartRiggerEscort ≤100yd',
1172
+ 'scriptdev2.sql entry 11626',
1173
+ ],
1174
+ };
1175
+
1176
+ // ScriptDev IR — npc_magrami_spectre
1177
+
1178
+ // Cite: desolace.cpp npc_magrami_spectre Binding: 11560 Magrami Spectre (in bake). Quest 6134 residual
1179
+ // combat: spawn auras + arrive faction + one-shot Curse 18159 at 4s. Outdoor zone — no InstanceDef.
1180
+ export const NPC_MAGRAMI_SPECTRE_SCRIPT: ScriptDevIR = {
1181
+ name: 'npc_magrami_spectre',
1182
+ boundCreatures: [NPC_MAGRAMI_SPECTRE],
1183
+ sourceFile: 'kalimdor/desolace.cpp',
1184
+ spellIds: [
1185
+ SPELL_CURSE_OF_MAGRAMI,
1186
+ SPELL_GHOST_SPAWN_IN,
1187
+ SPELL_BLUE_AURA,
1188
+ SPELL_GREEN_AURA,
1189
+ SPELL_CHILLING_TOUCH,
1190
+ ],
1191
+ timers: [
1192
+ {
1193
+ id: 'chilling_touch',
1194
+ spellId: SPELL_CHILLING_TOUCH,
1195
+ initialMinMs: 0,
1196
+ initialMaxMs: 0,
1197
+ repeatMinMs: 0,
1198
+ repeatMaxMs: 0,
1199
+ target: 'self',
1200
+ onReset: true,
1201
+ castFlags: CAST_FLAG.TRIGGERED | CAST_FLAG.AURA_NOT_PRESENT,
1202
+ cite:
1203
+ 'desolace.cpp:621 JustRespawned CastSpell SPELL_CHILLING_TOUCH (host onReset AURA_NOT_PRESENT stand-in)',
1204
+ },
1205
+ {
1206
+ id: 'curse_of_magrami',
1207
+ spellId: SPELL_CURSE_OF_MAGRAMI,
1208
+ initialMinMs: MAGRAMI_CURSE_INIT_MS,
1209
+ initialMaxMs: MAGRAMI_CURSE_INIT_MS,
1210
+ // cpp zeros timer after cast (one-shot). Host always EFLAG_REPEATABLE —
1211
+ // re-arm at bake aura duration so product does not spam every tick.
1212
+ repeatMinMs: MAGRAMI_CURSE_AURA_DURATION_MS,
1213
+ repeatMaxMs: MAGRAMI_CURSE_AURA_DURATION_MS,
1214
+ target: 'victim',
1215
+ cite:
1216
+ 'desolace.cpp:614,655-660 m_uiCurseTimer=4000 then =0 + DoCastSpellIfCan(victim, 18159); re-arm 900000ms = spell-data aura duration (one-shot stand-in)',
1217
+ },
1218
+ ],
1219
+ lifecycle: {
1220
+ onReset: [
1221
+ {
1222
+ kind: 'flavor',
1223
+ text: 'm_uiCurseTimer=4000; JustRespawned casts 17321/17327/18146 + emote (magramiJustRespawned)',
1224
+ cite: 'desolace.cpp:612-631',
1225
+ },
1226
+ ],
1227
+ },
1228
+ cites: [
1229
+ 'desolace.cpp:592-673 npc_magrami_spectre',
1230
+ 'desolace.cpp:594-598 SPELL_CURSE_OF_MAGRAMI=18159 GHOST_SPAWN_IN=17321 BLUE=17327 GREEN=18951 CHILLING_TOUCH=18146',
1231
+ 'desolace.cpp:600 FACTION_HOSTILE=16',
1232
+ 'desolace.cpp:602-603 SAY_EMOTE_1/2',
1233
+ 'desolace.cpp:612-615 Reset curse timer 4000',
1234
+ 'desolace.cpp:617-631 JustRespawned auras + emote',
1235
+ 'desolace.cpp:634-647 MovementInform point 1 green aura + hostile',
1236
+ 'desolace.cpp:650-667 UpdateAI curse once + melee',
1237
+ 'scriptdev2.sql entry 11560',
1238
+ ],
1239
+ };