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.
- package/README.md +138 -2
- package/bin/azsh.mjs +19 -0
- package/docs/aifid/eventai-texts.json +4414 -0
- package/docs/dungeons/atlas/atlas-rows-dungeons.json +8989 -0
- package/docs/dungeons/survey/pack-id-migration.json +2418 -0
- package/package.json +26 -4
- package/src/autopilot/bossSkip.ts +26 -0
- package/src/autopilot/combatRotation.ts +824 -0
- package/src/autopilot/config.ts +533 -0
- package/src/autopilot/consumables.ts +58 -0
- package/src/autopilot/encounterStand.ts +121 -0
- package/src/autopilot/objectGatePlan.ts +53 -0
- package/src/autopilot/pathEngage.ts +229 -0
- package/src/autopilot/plan.ts +1643 -0
- package/src/autopilot/questPolicy.ts +274 -0
- package/src/autopilot/routeStep.ts +69 -0
- package/src/autopilot/sessionReport.ts +88 -0
- package/src/autopilot/topOffPower.ts +26 -0
- package/src/autopilot/view.ts +476 -0
- package/src/cli/bootCheck.mjs +34 -0
- package/src/cli/bootData.mjs +57 -0
- package/src/cli/combatLogFilter.ts +153 -0
- package/src/cli/combatLogFormat.ts +613 -0
- package/src/cli/fileRepository.mjs +105 -0
- package/src/cli/gzLoader.mjs +31 -0
- package/src/cli/liveGauntletEscort.ts +978 -0
- package/src/cli/liveStratUndead.ts +305 -0
- package/src/cli/macroHostCombat.ts +545 -0
- package/src/cli/macroHostWorld.ts +330 -0
- package/src/cli/prefs.mjs +31 -0
- package/src/cli/register.mjs +4 -0
- package/src/cli/repl.mjs +693 -0
- package/src/cli/rotationText.mjs +226 -0
- package/src/cli/squad.mjs +105 -0
- package/src/cli/term.mjs +126 -0
- package/src/cli/text.mjs +122 -0
- package/src/cli/tui.mjs +626 -0
- package/src/cli/tuiArena.mjs +109 -0
- package/src/cli/tuiAutopilotSettings.mjs +93 -0
- package/src/cli/tuiBags.mjs +180 -0
- package/src/cli/tuiBars.mjs +133 -0
- package/src/cli/tuiBg.mjs +243 -0
- package/src/cli/tuiBulk.mjs +162 -0
- package/src/cli/tuiCheck.mjs +1882 -0
- package/src/cli/tuiCity.mjs +396 -0
- package/src/cli/tuiCompanionKit.mjs +300 -0
- package/src/cli/tuiCompanions.mjs +471 -0
- package/src/cli/tuiDev.mjs +62 -0
- package/src/cli/tuiDungeon.mjs +606 -0
- package/src/cli/tuiEnchantTarget.mjs +120 -0
- package/src/cli/tuiFight.mjs +577 -0
- package/src/cli/tuiFightPanes.mjs +228 -0
- package/src/cli/tuiFloor.mjs +506 -0
- package/src/cli/tuiGear.mjs +158 -0
- package/src/cli/tuiHonor.mjs +74 -0
- package/src/cli/tuiLoot.mjs +97 -0
- package/src/cli/tuiMacros.mjs +144 -0
- package/src/cli/tuiOutfitter.mjs +115 -0
- package/src/cli/tuiPet.mjs +116 -0
- package/src/cli/tuiProfessions.mjs +800 -0
- package/src/cli/tuiRaid.mjs +127 -0
- package/src/cli/tuiRep.mjs +65 -0
- package/src/cli/tuiSaves.mjs +69 -0
- package/src/cli/tuiSearch.mjs +363 -0
- package/src/cli/tuiSettings.mjs +151 -0
- package/src/cli/tuiSimLab.mjs +80 -0
- package/src/cli/tuiTalents.mjs +60 -0
- package/src/cli/tuiViews.mjs +1178 -0
- package/src/cli/tuiWiki.mjs +181 -0
- package/src/cli/tuiWorld.mjs +361 -0
- package/src/cli/wikiIndex.ts +259 -0
- package/src/cli/wikiSources.ts +355 -0
- package/src/data/alteracValley.ts +176 -0
- package/src/data/appearanceOptions.ts +534 -0
- package/src/data/applyLootChanceSanity.ts +21 -0
- package/src/data/createFlavor.ts +96 -0
- package/src/data/customItems.ts +33 -0
- package/src/data/dataStore.ts +1904 -0
- package/src/data/dungeonGameObjects.ts +84 -0
- package/src/data/dungeonPlateCover.ts +66 -0
- package/src/data/dungeonSpawns.ts +294 -0
- package/src/data/dungeons/alterac-valley.ts +135 -0
- package/src/data/dungeons/apply-dungeon-rooms.ts +29 -0
- package/src/data/dungeons/apply-encounter-outdoors.ts +72 -0
- package/src/data/dungeons/apply-instance-geometry.ts +65 -0
- package/src/data/dungeons/apply-spawn-placement.ts +171 -0
- package/src/data/dungeons/blackfathom-deeps.ts +539 -0
- package/src/data/dungeons/blackrock-depths.ts +1410 -0
- package/src/data/dungeons/blackwing-lair.ts +129 -0
- package/src/data/dungeons/boss-eventai.ts +8 -0
- package/src/data/dungeons/deadmines.ts +410 -0
- package/src/data/dungeons/dire-maul-east.ts +980 -0
- package/src/data/dungeons/dire-maul-north.ts +661 -0
- package/src/data/dungeons/dire-maul-west.ts +785 -0
- package/src/data/dungeons/dungeon-rooms.json +5479 -0
- package/src/data/dungeons/encounter-outdoors.json +359 -0
- package/src/data/dungeons/eventai/blackfathom-deeps.ts +308 -0
- package/src/data/dungeons/eventai/blackrock-depths.ts +1257 -0
- package/src/data/dungeons/eventai/deadmines.ts +264 -0
- package/src/data/dungeons/eventai/dire-maul-east.ts +320 -0
- package/src/data/dungeons/eventai/gnomeregan.ts +213 -0
- package/src/data/dungeons/eventai/helpers.ts +79 -0
- package/src/data/dungeons/eventai/index.ts +133 -0
- package/src/data/dungeons/eventai/lbrs.ts +372 -0
- package/src/data/dungeons/eventai/maraudon.ts +323 -0
- package/src/data/dungeons/eventai/ragefire-chasm.ts +108 -0
- package/src/data/dungeons/eventai/razorfen-downs.ts +207 -0
- package/src/data/dungeons/eventai/razorfen-kraul.ts +326 -0
- package/src/data/dungeons/eventai/scholomance.ts +680 -0
- package/src/data/dungeons/eventai/shadowfang-keep.ts +230 -0
- package/src/data/dungeons/eventai/sm-cathedral.ts +75 -0
- package/src/data/dungeons/eventai/sm-graveyard.ts +150 -0
- package/src/data/dungeons/eventai/sm-library.ts +55 -0
- package/src/data/dungeons/eventai/stratholme-undead.ts +127 -0
- package/src/data/dungeons/eventai/sunken-temple.ts +582 -0
- package/src/data/dungeons/eventai/the-stockade.ts +228 -0
- package/src/data/dungeons/eventai/ubrs.ts +225 -0
- package/src/data/dungeons/eventai/uldaman.ts +355 -0
- package/src/data/dungeons/eventai/wailing-caverns.ts +396 -0
- package/src/data/dungeons/eventai/zul-farrak.ts +591 -0
- package/src/data/dungeons/gnomeregan.ts +909 -0
- package/src/data/dungeons/index.ts +126 -0
- package/src/data/dungeons/instance-geometry.json +5233 -0
- package/src/data/dungeons/key-sources.json +169 -0
- package/src/data/dungeons/lbrs.ts +996 -0
- package/src/data/dungeons/maraudon.ts +786 -0
- package/src/data/dungeons/molten-core.ts +194 -0
- package/src/data/dungeons/naxxramas.ts +173 -0
- package/src/data/dungeons/onyxias-lair.ts +71 -0
- package/src/data/dungeons/pack-from-clusters.ts +1256 -0
- package/src/data/dungeons/ragefire-chasm.ts +238 -0
- package/src/data/dungeons/razorfen-downs.ts +698 -0
- package/src/data/dungeons/razorfen-kraul.ts +766 -0
- package/src/data/dungeons/ruins-of-ahnqiraj.ts +121 -0
- package/src/data/dungeons/scholomance.ts +1076 -0
- package/src/data/dungeons/shadowfang-keep.ts +740 -0
- package/src/data/dungeons/sm-armory.ts +266 -0
- package/src/data/dungeons/sm-cathedral.ts +430 -0
- package/src/data/dungeons/sm-graveyard.ts +482 -0
- package/src/data/dungeons/sm-library.ts +337 -0
- package/src/data/dungeons/stratholme-live.ts +808 -0
- package/src/data/dungeons/stratholme-undead.ts +1164 -0
- package/src/data/dungeons/sunken-temple.ts +931 -0
- package/src/data/dungeons/temple-of-ahnqiraj.ts +119 -0
- package/src/data/dungeons/the-stockade.ts +282 -0
- package/src/data/dungeons/ubrs.ts +1286 -0
- package/src/data/dungeons/uldaman.ts +685 -0
- package/src/data/dungeons/wailing-caverns.ts +356 -0
- package/src/data/dungeons/zul-farrak.ts +686 -0
- package/src/data/dungeons/zul-gurub.ts +142 -0
- package/src/data/dungeons.ts +42 -0
- package/src/data/fixtures.ts +446 -0
- package/src/data/gameobject-data.json.gz +0 -0
- package/src/data/item-data.json.gz +0 -0
- package/src/data/loot-data.json.gz +0 -0
- package/src/data/maps/atlas-approach-maps.json +1425 -0
- package/src/data/maps/atlas-landmarks.json +1711 -0
- package/src/data/maps/dungeon-viewports.json +392 -0
- package/src/data/materializeModDamagePercentTaken.ts +70 -0
- package/src/data/materializeModHealthRegen.ts +89 -0
- package/src/data/materializeSpellReputation.ts +26 -0
- package/src/data/pageTexts.ts +19 -0
- package/src/data/profession-data.json.gz +0 -0
- package/src/data/raid-plans/blackfathom-deeps.json +86 -0
- package/src/data/raid-plans/blackrock-depths.json +419 -0
- package/src/data/raid-plans/blackwing-lair.json +328 -0
- package/src/data/raid-plans/deadmines.json +55 -0
- package/src/data/raid-plans/dire-maul-east.json +94 -0
- package/src/data/raid-plans/dire-maul-north.json +70 -0
- package/src/data/raid-plans/dire-maul-west.json +75 -0
- package/src/data/raid-plans/gnomeregan.json +131 -0
- package/src/data/raid-plans/lbrs.json +176 -0
- package/src/data/raid-plans/maraudon.json +102 -0
- package/src/data/raid-plans/molten-core.json +169 -0
- package/src/data/raid-plans/naxxramas.json +354 -0
- package/src/data/raid-plans/onyxias-lair.json +18 -0
- package/src/data/raid-plans/ragefire-chasm.json +30 -0
- package/src/data/raid-plans/razorfen-downs.json +75 -0
- package/src/data/raid-plans/razorfen-kraul.json +53 -0
- package/src/data/raid-plans/ruins-of-ahnqiraj.json +110 -0
- package/src/data/raid-plans/scholomance.json +170 -0
- package/src/data/raid-plans/shadowfang-keep.json +87 -0
- package/src/data/raid-plans/sm-armory.json +53 -0
- package/src/data/raid-plans/sm-cathedral.json +72 -0
- package/src/data/raid-plans/sm-graveyard.json +63 -0
- package/src/data/raid-plans/sm-library.json +23 -0
- package/src/data/raid-plans/stratholme-live.json +129 -0
- package/src/data/raid-plans/stratholme-undead.json +73 -0
- package/src/data/raid-plans/sunken-temple.json +159 -0
- package/src/data/raid-plans/temple-of-ahnqiraj.json +163 -0
- package/src/data/raid-plans/the-stockade.json +42 -0
- package/src/data/raid-plans/ubrs.json +53 -0
- package/src/data/raid-plans/uldaman.json +131 -0
- package/src/data/raid-plans/wailing-caverns.json +90 -0
- package/src/data/raid-plans/zul-farrak.json +156 -0
- package/src/data/raid-plans/zul-gurub.json +307 -0
- package/src/data/raidInstanceCreatures.mjs +473 -0
- package/src/data/rotations/index.ts +152 -0
- package/src/data/rotations/layout.mjs +72 -0
- package/src/data/rotations/pve/druid/balance.json +754 -0
- package/src/data/rotations/pve/druid/feral-tank.json +2448 -0
- package/src/data/rotations/pve/druid/feral.json +2660 -0
- package/src/data/rotations/pve/druid/restoration.json +424 -0
- package/src/data/rotations/pve/hunter/beast-mastery.json +1288 -0
- package/src/data/rotations/pve/hunter/marksmanship.json +1260 -0
- package/src/data/rotations/pve/hunter/survival.json +1373 -0
- package/src/data/rotations/pve/mage/arcane-leveling.json +1798 -0
- package/src/data/rotations/pve/mage/fire-leveling.json +2003 -0
- package/src/data/rotations/pve/mage/frost-leveling.json +1912 -0
- package/src/data/rotations/pve/paladin/holy.json +755 -0
- package/src/data/rotations/pve/paladin/protection.json +962 -0
- package/src/data/rotations/pve/paladin/retribution.json +924 -0
- package/src/data/rotations/pve/priest/discipline.json +772 -0
- package/src/data/rotations/pve/priest/holy.json +707 -0
- package/src/data/rotations/pve/priest/shadow.json +787 -0
- package/src/data/rotations/pve/rogue/assassination.json +2477 -0
- package/src/data/rotations/pve/rogue/combat.json +2483 -0
- package/src/data/rotations/pve/rogue/subtlety.json +2523 -0
- package/src/data/rotations/pve/shaman/elemental.json +1157 -0
- package/src/data/rotations/pve/shaman/enhancement.json +1085 -0
- package/src/data/rotations/pve/shaman/restoration.json +592 -0
- package/src/data/rotations/pve/warlock/affliction.json +1185 -0
- package/src/data/rotations/pve/warlock/demonology.json +1165 -0
- package/src/data/rotations/pve/warlock/destruction.json +1177 -0
- package/src/data/rotations/pve/warrior/arms.json +3020 -0
- package/src/data/rotations/pve/warrior/fury.json +2996 -0
- package/src/data/rotations/pve/warrior/protection.json +2509 -0
- package/src/data/rotations/pvp/druid/balance.json +593 -0
- package/src/data/rotations/pvp/druid/feral.json +3276 -0
- package/src/data/rotations/pvp/druid/restoration.json +662 -0
- package/src/data/rotations/pvp/hunter/beast-mastery.json +665 -0
- package/src/data/rotations/pvp/hunter/marksmanship.json +2406 -0
- package/src/data/rotations/pvp/hunter/survival.json +635 -0
- package/src/data/rotations/pvp/mage/arcane.json +574 -0
- package/src/data/rotations/pvp/mage/fire.json +570 -0
- package/src/data/rotations/pvp/mage/frost.json +4048 -0
- package/src/data/rotations/pvp/paladin/holy.json +1498 -0
- package/src/data/rotations/pvp/paladin/protection.json +567 -0
- package/src/data/rotations/pvp/paladin/retribution.json +1110 -0
- package/src/data/rotations/pvp/priest/discipline.json +1848 -0
- package/src/data/rotations/pvp/priest/holy.json +6340 -0
- package/src/data/rotations/pvp/priest/shadow.json +2329 -0
- package/src/data/rotations/pvp/rogue/assassination.json +1322 -0
- package/src/data/rotations/pvp/rogue/combat.json +5258 -0
- package/src/data/rotations/pvp/rogue/subtlety.json +586 -0
- package/src/data/rotations/pvp/shaman/elemental.json +1404 -0
- package/src/data/rotations/pvp/shaman/enhancement.json +1277 -0
- package/src/data/rotations/pvp/shaman/restoration.json +2490 -0
- package/src/data/rotations/pvp/warlock/affliction.json +1017 -0
- package/src/data/rotations/pvp/warlock/demonology.json +1503 -0
- package/src/data/rotations/pvp/warlock/destruction.json +638 -0
- package/src/data/rotations/pvp/warrior/arms.json +5665 -0
- package/src/data/rotations/pvp/warrior/fury.json +850 -0
- package/src/data/rotations/pvp/warrior/protection.json +777 -0
- package/src/data/schema/bundle.ts +511 -0
- package/src/data/schema/constants.ts +49 -0
- package/src/data/schema/creature.ts +454 -0
- package/src/data/schema/encounter.ts +155 -0
- package/src/data/schema/faction.ts +48 -0
- package/src/data/schema/item.ts +297 -0
- package/src/data/schema/itemEnchant.ts +105 -0
- package/src/data/schema/npc.ts +44 -0
- package/src/data/schema/primitives.ts +295 -0
- package/src/data/schema/profession.ts +226 -0
- package/src/data/schema/quest.ts +154 -0
- package/src/data/schema/spell.ts +1149 -0
- package/src/data/schema/talent.ts +74 -0
- package/src/data/schema/world.ts +124 -0
- package/src/data/schema.ts +19 -0
- package/src/data/skinNodeGapFill.ts +68 -0
- package/src/data/spell-data.json.gz +0 -0
- package/src/data/spell-script-targets.json +1 -0
- package/src/data/tables/ahItemValues.json.gz +0 -0
- package/src/data/tables/alteracValley.json.gz +0 -0
- package/src/data/tables/areatriggerTeleports.json.gz +0 -0
- package/src/data/tables/botNames.json.gz +0 -0
- package/src/data/tables/botPopulation.json.gz +0 -0
- package/src/data/tables/botSpecs.json.gz +0 -0
- package/src/data/tables/classLevelStats.json.gz +0 -0
- package/src/data/tables/combatConditions.json.gz +0 -0
- package/src/data/tables/combatSkillMeta.json.gz +0 -0
- package/src/data/tables/conditions.json.gz +0 -0
- package/src/data/tables/createInfo.json.gz +0 -0
- package/src/data/tables/creatureAggroGroups.json.gz +0 -0
- package/src/data/tables/creatureClassLevelStats.json.gz +0 -0
- package/src/data/tables/creaturePatrolPacks.json.gz +0 -0
- package/src/data/tables/creatureWeapons.json.gz +0 -0
- package/src/data/tables/creatures.json.gz +0 -0
- package/src/data/tables/dbScripts.json.gz +0 -0
- package/src/data/tables/dungeonAuthoredRoutes.json.gz +0 -0
- package/src/data/tables/dungeonCensus.json.gz +0 -0
- package/src/data/tables/dungeonGameObjects.json.gz +0 -0
- package/src/data/tables/dungeonPacks.json.gz +0 -0
- package/src/data/tables/dungeonPlateCover.json.gz +0 -0
- package/src/data/tables/dungeonSpawns.json.gz +0 -0
- package/src/data/tables/dungeonSurvey.json.gz +0 -0
- package/src/data/tables/durabilityCosts.json.gz +0 -0
- package/src/data/tables/durabilityQuality.json.gz +0 -0
- package/src/data/tables/enchantApplicators.json.gz +0 -0
- package/src/data/tables/entranceYards.json.gz +0 -0
- package/src/data/tables/explorationBasexp.json.gz +0 -0
- package/src/data/tables/factionTemplates.json.gz +0 -0
- package/src/data/tables/factions.json.gz +0 -0
- package/src/data/tables/gameEvents.json.gz +0 -0
- package/src/data/tables/gameObjects.json.gz +0 -0
- package/src/data/tables/gossipMenus.json.gz +0 -0
- package/src/data/tables/graveyards.json.gz +0 -0
- package/src/data/tables/instanceMaps.json.gz +0 -0
- package/src/data/tables/itemEnchantmentTemplates.json.gz +0 -0
- package/src/data/tables/itemEnchants.json.gz +0 -0
- package/src/data/tables/itemRandomProperties.json.gz +0 -0
- package/src/data/tables/itemSets.json.gz +0 -0
- package/src/data/tables/items.json.gz +0 -0
- package/src/data/tables/levelStats.json.gz +0 -0
- package/src/data/tables/locks.json.gz +0 -0
- package/src/data/tables/map-pin-overrides.json.gz +0 -0
- package/src/data/tables/nonCombatTrash.json.gz +0 -0
- package/src/data/tables/npcTexts.json.gz +0 -0
- package/src/data/tables/pageTexts.json.gz +0 -0
- package/src/data/tables/petAbilityTP.json.gz +0 -0
- package/src/data/tables/petGenericSpells.json.gz +0 -0
- package/src/data/tables/petLevelStats.json.gz +0 -0
- package/src/data/tables/playerbot-weightscales.json.gz +0 -0
- package/src/data/tables/pools.json.gz +0 -0
- package/src/data/tables/quests.json.gz +0 -0
- package/src/data/tables/races.json.gz +0 -0
- package/src/data/tables/reputationRanks.json.gz +0 -0
- package/src/data/tables/reputationRates.json.gz +0 -0
- package/src/data/tables/reputationSpillover.json.gz +0 -0
- package/src/data/tables/ridingSpells.json.gz +0 -0
- package/src/data/tables/scriptTexts.json.gz +0 -0
- package/src/data/tables/soundClipVolume.json.gz +0 -0
- package/src/data/tables/spellChain.json.gz +0 -0
- package/src/data/tables/spellTeleports.json.gz +0 -0
- package/src/data/tables/spells.json.gz +0 -0
- package/src/data/tables/talents.json.gz +0 -0
- package/src/data/tables/tavernTriggers.json.gz +0 -0
- package/src/data/tables/taxiNodes.json.gz +0 -0
- package/src/data/tables/taxiRoutes.json.gz +0 -0
- package/src/data/tables/trainers.json.gz +0 -0
- package/src/data/tables/transports.json.gz +0 -0
- package/src/data/tables/travelAnchors.json.gz +0 -0
- package/src/data/tables/travelEdges.json.gz +0 -0
- package/src/data/tables/unitConditions.json.gz +0 -0
- package/src/data/tables/vendors.json.gz +0 -0
- package/src/data/tables/weaponEnchantProcs.json.gz +0 -0
- package/src/data/tables/xp.json.gz +0 -0
- package/src/data/tables/zoneWeather.json.gz +0 -0
- package/src/data/tables/zones.json.gz +0 -0
- package/src/data/world-data.ts +56 -0
- package/src/data/zone-music-sets.json +2751 -0
- package/src/dev/etl/lib/loot-chance-sanity.mjs +180 -0
- package/src/domain/audioQuality.mjs +145 -0
- package/src/domain/bg/ab.ts +433 -0
- package/src/domain/bg/arenaComps.ts +644 -0
- package/src/domain/bg/arenaLab.ts +695 -0
- package/src/domain/bg/arenaPace.ts +31 -0
- package/src/domain/bg/arenaRating.ts +110 -0
- package/src/domain/bg/av.ts +758 -0
- package/src/domain/bg/avEnemyPush.ts +219 -0
- package/src/domain/bg/avField.ts +283 -0
- package/src/domain/bg/avInstanceNodes.ts +197 -0
- package/src/domain/bg/avInstanceScore.ts +123 -0
- package/src/domain/bg/avQuestItems.ts +55 -0
- package/src/domain/bg/avQuests.ts +210 -0
- package/src/domain/bg/avSession.ts +196 -0
- package/src/domain/bg/bgConsumes.ts +269 -0
- package/src/domain/bg/bgPrebuff.ts +153 -0
- package/src/domain/bg/bgRest.ts +91 -0
- package/src/domain/bg/bgRoster.ts +305 -0
- package/src/domain/bg/bgTier.ts +61 -0
- package/src/domain/bg/bgWorld.ts +862 -0
- package/src/domain/bg/match.ts +215 -0
- package/src/domain/bg/strategies.ts +552 -0
- package/src/domain/bg/types.ts +291 -0
- package/src/domain/bg/wsg.ts +264 -0
- package/src/domain/bots/actionProviderSpec.ts +38 -0
- package/src/domain/bots/autoConsumables.ts +285 -0
- package/src/domain/bots/betweenPullRest.ts +239 -0
- package/src/domain/bots/botGear.ts +248 -0
- package/src/domain/bots/botInventory.ts +486 -0
- package/src/domain/bots/botPet.ts +535 -0
- package/src/domain/bots/botPool.ts +291 -0
- package/src/domain/bots/botProfessions.ts +334 -0
- package/src/domain/bots/companionActionBar.ts +209 -0
- package/src/domain/bots/companionHireCost.ts +236 -0
- package/src/domain/bots/companionMissions.ts +582 -0
- package/src/domain/bots/companionPrep.ts +254 -0
- package/src/domain/bots/companionQuests.ts +270 -0
- package/src/domain/bots/companionRep.ts +75 -0
- package/src/domain/bots/companionRotation.ts +708 -0
- package/src/domain/bots/companionXp.ts +66 -0
- package/src/domain/bots/consumableShare.ts +811 -0
- package/src/domain/bots/dpsMate.ts +1072 -0
- package/src/domain/bots/groupCompReport.ts +132 -0
- package/src/domain/bots/healthstoneSupply.ts +198 -0
- package/src/domain/bots/outfitter.ts +1056 -0
- package/src/domain/bots/paladinPrePull.ts +231 -0
- package/src/domain/bots/partyRole.ts +40 -0
- package/src/domain/bots/playerbotEquipCache.ts +412 -0
- package/src/domain/bots/playerbotItemEligibility.ts +60 -0
- package/src/domain/bots/playerbotStatWeight.ts +853 -0
- package/src/domain/bots/playerbotUnavailableItems.ts +147 -0
- package/src/domain/bots/prePullBuffs.ts +219 -0
- package/src/domain/bots/prePullStealth.ts +82 -0
- package/src/domain/bots/runSupply.ts +251 -0
- package/src/domain/bots/runSupplyPrefs.ts +28 -0
- package/src/domain/bots/sendTradeGoods.ts +394 -0
- package/src/domain/bots/soulShardCap.ts +35 -0
- package/src/domain/bots/squad.ts +842 -0
- package/src/domain/bots/squadRun.ts +81 -0
- package/src/domain/character/actionbar.ts +346 -0
- package/src/domain/character/appearance.ts +165 -0
- package/src/domain/character/buildCombatant.ts +1726 -0
- package/src/domain/character/character.ts +356 -0
- package/src/domain/character/characterName.ts +43 -0
- package/src/domain/character/characterRatings.ts +424 -0
- package/src/domain/character/characterSpells.ts +282 -0
- package/src/domain/character/characterStats.ts +1559 -0
- package/src/domain/character/characterTalents.ts +398 -0
- package/src/domain/character/combatSkills.ts +994 -0
- package/src/domain/character/displayForm.ts +72 -0
- package/src/domain/character/formTalentAuras.ts +171 -0
- package/src/domain/character/forms.ts +499 -0
- package/src/domain/character/races.ts +40 -0
- package/src/domain/character/resurrectionSickness.ts +49 -0
- package/src/domain/character/spellbook.ts +169 -0
- package/src/domain/character/stanceBar.ts +354 -0
- package/src/domain/character/stancePrereq.ts +70 -0
- package/src/domain/character/talentBuilds.ts +63 -0
- package/src/domain/character/talentImport.ts +130 -0
- package/src/domain/character/talentLink.ts +123 -0
- package/src/domain/character/talents.ts +201 -0
- package/src/domain/core/conditionSnapshot.ts +92 -0
- package/src/domain/core/hover.ts +14 -0
- package/src/domain/core/ids.ts +58 -0
- package/src/domain/core/internalNameTags.ts +5 -0
- package/src/domain/core/runtimeDataPatches.ts +357 -0
- package/src/domain/creature/aiTargeting.ts +588 -0
- package/src/domain/creature/combatCondition.ts +157 -0
- package/src/domain/creature/creatureAggro.ts +804 -0
- package/src/domain/creature/creatureAi.ts +206 -0
- package/src/domain/creature/creatureAiConstants.ts +661 -0
- package/src/domain/creature/creatureCastList.ts +1007 -0
- package/src/domain/creature/creatureEventAi.ts +1409 -0
- package/src/domain/creature/creatureGroups.ts +144 -0
- package/src/domain/creature/creatureLinking.ts +333 -0
- package/src/domain/creature/creatureScaling.ts +320 -0
- package/src/domain/creature/creatureTrigger.ts +53 -0
- package/src/domain/creature/creatureWander.ts +74 -0
- package/src/domain/creature/eventAiTexts.ts +145 -0
- package/src/domain/creature/faction.ts +287 -0
- package/src/domain/creature/forcedReaction.ts +48 -0
- package/src/domain/creature/outdoorHuntable.ts +74 -0
- package/src/domain/creature/patrolPacks.ts +210 -0
- package/src/domain/creature/reputation.ts +967 -0
- package/src/domain/creature/unitFlags.ts +74 -0
- package/src/domain/creature/worldBosses.ts +393 -0
- package/src/domain/dungeonMusic.mjs +48 -0
- package/src/domain/economy/auction.ts +282 -0
- package/src/domain/economy/auctionBot.ts +1060 -0
- package/src/domain/economy/honorPrice.ts +100 -0
- package/src/domain/economy/mail.ts +958 -0
- package/src/domain/economy/money.ts +42 -0
- package/src/domain/economy/syntheticClassTrainers.ts +62 -0
- package/src/domain/economy/trading.ts +296 -0
- package/src/domain/economy/vendorSellAll.ts +252 -0
- package/src/domain/economy/vendorStock.ts +146 -0
- package/src/domain/items/ammo.ts +817 -0
- package/src/domain/items/bank.ts +162 -0
- package/src/domain/items/consumableFamily.ts +205 -0
- package/src/domain/items/craftUpgrades.ts +83 -0
- package/src/domain/items/createItem.ts +93 -0
- package/src/domain/items/durability.ts +581 -0
- package/src/domain/items/equipment.ts +441 -0
- package/src/domain/items/equipmentHelper.ts +767 -0
- package/src/domain/items/inventory.ts +561 -0
- package/src/domain/items/itemBonding.ts +93 -0
- package/src/domain/items/itemContainer.ts +245 -0
- package/src/domain/items/itemDisplayName.ts +33 -0
- package/src/domain/items/itemInstance.ts +181 -0
- package/src/domain/items/itemRandomEnchantOutcomes.ts +315 -0
- package/src/domain/items/itemRandomProps.ts +77 -0
- package/src/domain/items/itemRestrictions.ts +329 -0
- package/src/domain/items/itemTeaches.ts +82 -0
- package/src/domain/items/itemUseCooldown.ts +52 -0
- package/src/domain/items/itemUseTarget.ts +90 -0
- package/src/domain/items/junkCategories.ts +174 -0
- package/src/domain/items/junkFilter.ts +368 -0
- package/src/domain/items/keyring.ts +131 -0
- package/src/domain/items/loot.ts +221 -0
- package/src/domain/items/mounts.ts +190 -0
- package/src/domain/items/onUsePayload.ts +102 -0
- package/src/domain/items/pendingLoot.ts +107 -0
- package/src/domain/items/relic.ts +105 -0
- package/src/domain/items/rocketBoots.ts +36 -0
- package/src/domain/items/sortContainer.ts +139 -0
- package/src/domain/items/spareContainers.ts +71 -0
- package/src/domain/items/spellReagentIndex.ts +131 -0
- package/src/domain/items/staleConsumables.ts +66 -0
- package/src/domain/items/weaponSpender.ts +110 -0
- package/src/domain/listDungeonIds.mjs +28 -0
- package/src/domain/macro/compose.ts +239 -0
- package/src/domain/macro/conditions.ts +260 -0
- package/src/domain/macro/creatureTypes.ts +40 -0
- package/src/domain/macro/describe.ts +169 -0
- package/src/domain/macro/icon.ts +60 -0
- package/src/domain/macro/index.ts +20 -0
- package/src/domain/macro/normalize.ts +112 -0
- package/src/domain/macro/parse.ts +316 -0
- package/src/domain/macro/plan.ts +288 -0
- package/src/domain/macro/rotation.ts +590 -0
- package/src/domain/macro/rotationEnv.ts +173 -0
- package/src/domain/macro/slots.ts +101 -0
- package/src/domain/macro/snapshot.ts +114 -0
- package/src/domain/macro/templates.ts +446 -0
- package/src/domain/macro/types.ts +70 -0
- package/src/domain/macro/units.ts +93 -0
- package/src/domain/macro/weaponTypes.ts +83 -0
- package/src/domain/nav/cityTeleports.ts +10 -0
- package/src/domain/nav/mounting.ts +113 -0
- package/src/domain/nav/nav.ts +43 -0
- package/src/domain/nav/navCollision.ts +606 -0
- package/src/domain/nav/navOutdoors.ts +91 -0
- package/src/domain/nav/navRegistry.ts +179 -0
- package/src/domain/nav/navRoomGraph.ts +302 -0
- package/src/domain/nav/navTypes.ts +43 -0
- package/src/domain/nav/navmesh.ts +1715 -0
- package/src/domain/nav/speed.ts +200 -0
- package/src/domain/nav/storey.ts +10 -0
- package/src/domain/nav/travel.ts +725 -0
- package/src/domain/nav/travelTypes.ts +75 -0
- package/src/domain/pet/pet.ts +1150 -0
- package/src/domain/pet/petActionBar.ts +180 -0
- package/src/domain/pet/petSpellbook.ts +39 -0
- package/src/domain/pet/petStable.ts +81 -0
- package/src/domain/professions/autoDisenchant.ts +236 -0
- package/src/domain/professions/characterEnchants.ts +176 -0
- package/src/domain/professions/craftCooldown.ts +52 -0
- package/src/domain/professions/enchantApply.ts +62 -0
- package/src/domain/professions/enchantTargets.ts +114 -0
- package/src/domain/professions/enchanting.ts +236 -0
- package/src/domain/professions/gatherFilter.ts +149 -0
- package/src/domain/professions/gearEnchant.ts +137 -0
- package/src/domain/professions/heldTools.ts +29 -0
- package/src/domain/professions/learnAllRecipes.ts +146 -0
- package/src/domain/professions/miningHarvest.ts +69 -0
- package/src/domain/professions/partyDisenchant.ts +294 -0
- package/src/domain/professions/partyWork.ts +83 -0
- package/src/domain/professions/pickpocket.ts +172 -0
- package/src/domain/professions/poisons.ts +240 -0
- package/src/domain/professions/professions.ts +677 -0
- package/src/domain/professions/rareNodes.ts +45 -0
- package/src/domain/professions/skinLoot.ts +27 -0
- package/src/domain/professions/vendorReagents.ts +152 -0
- package/src/domain/professions/weaponImbueHand.ts +171 -0
- package/src/domain/questFarmFilter.mjs +42 -0
- package/src/domain/quests/doQuest.ts +1204 -0
- package/src/domain/quests/gossip.ts +308 -0
- package/src/domain/quests/gossipTalk.ts +298 -0
- package/src/domain/quests/interpreter/canComplete.ts +150 -0
- package/src/domain/quests/interpreter/claim.ts +137 -0
- package/src/domain/quests/interpreter/dbscript/handlers.ts +1371 -0
- package/src/domain/quests/interpreter/dbscript/handlersBatch.ts +1251 -0
- package/src/domain/quests/interpreter/dbscript/hooks.ts +331 -0
- package/src/domain/quests/interpreter/dbscript/index.ts +212 -0
- package/src/domain/quests/interpreter/dbscript/opcodes.ts +257 -0
- package/src/domain/quests/interpreter/dbscript/registry.ts +1194 -0
- package/src/domain/quests/interpreter/dbscript/registryAreatriggerScripts.ts +539 -0
- package/src/domain/quests/interpreter/dbscript/registryAshenvale.ts +553 -0
- package/src/domain/quests/interpreter/dbscript/registryAzshara.ts +272 -0
- package/src/domain/quests/interpreter/dbscript/registryDarkshore.ts +637 -0
- package/src/domain/quests/interpreter/dbscript/registryDesolace.ts +501 -0
- package/src/domain/quests/interpreter/dbscript/registryDustwallowMarsh.ts +735 -0
- package/src/domain/quests/interpreter/dbscript/registryFelwood.ts +493 -0
- package/src/domain/quests/interpreter/dbscript/registryFeralas.ts +485 -0
- package/src/domain/quests/interpreter/dbscript/registryGoScripts.ts +203 -0
- package/src/domain/quests/interpreter/dbscript/registryMoonglade.ts +288 -0
- package/src/domain/quests/interpreter/dbscript/registryNpcProfessions.ts +230 -0
- package/src/domain/quests/interpreter/dbscript/registryNpcsSpecial.ts +545 -0
- package/src/domain/quests/interpreter/dbscript/registryRazorfenDowns.ts +293 -0
- package/src/domain/quests/interpreter/dbscript/registryRazorfenKraul.ts +221 -0
- package/src/domain/quests/interpreter/dbscript/registryRedridge.ts +112 -0
- package/src/domain/quests/interpreter/dbscript/registrySearingGorge.ts +125 -0
- package/src/domain/quests/interpreter/dbscript/registrySiblings.ts +51 -0
- package/src/domain/quests/interpreter/dbscript/registrySilverpineForest.ts +172 -0
- package/src/domain/quests/interpreter/dbscript/registryStonetalonMountains.ts +180 -0
- package/src/domain/quests/interpreter/dbscript/registryStormwindCity.ts +369 -0
- package/src/domain/quests/interpreter/dbscript/registryStranglethornVale.ts +115 -0
- package/src/domain/quests/interpreter/dbscript/registryStratholme.ts +146 -0
- package/src/domain/quests/interpreter/dbscript/registrySunkenTemple.ts +149 -0
- package/src/domain/quests/interpreter/dbscript/registrySwampOfSorrows.ts +163 -0
- package/src/domain/quests/interpreter/dbscript/registryTanaris.ts +318 -0
- package/src/domain/quests/interpreter/dbscript/registryTeldrassil.ts +120 -0
- package/src/domain/quests/interpreter/dbscript/registryTheBarrens.ts +603 -0
- package/src/domain/quests/interpreter/dbscript/registryThousandNeedles.ts +499 -0
- package/src/domain/quests/interpreter/dbscript/registryTirisfalGlades.ts +222 -0
- package/src/domain/quests/interpreter/dbscript/registryUngoroCrater.ts +291 -0
- package/src/domain/quests/interpreter/dbscript/registryWarEffort.ts +773 -0
- package/src/domain/quests/interpreter/dbscript/registryWesternPlaguelands.ts +206 -0
- package/src/domain/quests/interpreter/dbscript/registryWestfall.ts +190 -0
- package/src/domain/quests/interpreter/dbscript/registryWetlands.ts +186 -0
- package/src/domain/quests/interpreter/dbscript/registryWinterspring.ts +235 -0
- package/src/domain/quests/interpreter/dbscript/types.ts +817 -0
- package/src/domain/quests/interpreter/dbscript/vm.ts +171 -0
- package/src/domain/quests/interpreter/diff.ts +349 -0
- package/src/domain/quests/interpreter/fixtures/oracle-questlog-qi2.json +2417 -0
- package/src/domain/quests/interpreter/flags.ts +101 -0
- package/src/domain/quests/interpreter/index.ts +113 -0
- package/src/domain/quests/interpreter/live.ts +178 -0
- package/src/domain/quests/interpreter/types.ts +81 -0
- package/src/domain/quests/interpreter/updaters.ts +412 -0
- package/src/domain/quests/questCorpseUse.ts +155 -0
- package/src/domain/quests/questDialog.ts +43 -0
- package/src/domain/quests/questFight.ts +34 -0
- package/src/domain/quests/questObjectiveLabel.ts +39 -0
- package/src/domain/quests/questRewardChoice.ts +85 -0
- package/src/domain/quests/questScriptCredit.ts +26 -0
- package/src/domain/quests/questScriptItemUse.ts +74 -0
- package/src/domain/quests/questTameRods.ts +79 -0
- package/src/domain/quests/questlog.ts +1545 -0
- package/src/domain/quests/talkDeliver.ts +170 -0
- package/src/domain/raid/globalActionBar.ts +195 -0
- package/src/domain/raid/instanceRoster.ts +194 -0
- package/src/domain/raid/partySummon.ts +198 -0
- package/src/domain/raid/partyVault.ts +320 -0
- package/src/domain/raid/raidBossAbilities.ts +268 -0
- package/src/domain/raid/raidComp.ts +335 -0
- package/src/domain/raid/raidCustomRows.ts +453 -0
- package/src/domain/raid/raidEncounterGear.ts +298 -0
- package/src/domain/raid/raidEncounterTactics.ts +412 -0
- package/src/domain/raid/raidPlan.ts +509 -0
- package/src/domain/raid/raidPlanEdits.ts +98 -0
- package/src/domain/raid/raidPlanPacks.ts +480 -0
- package/src/domain/raid/raidRecovery.ts +183 -0
- package/src/domain/raid/raidRosterTemplate.ts +138 -0
- package/src/domain/rotation/auraSide.ts +68 -0
- package/src/domain/rotation/build.ts +3031 -0
- package/src/domain/rotation/classes/druid.ts +58 -0
- package/src/domain/rotation/classes/hooks.ts +59 -0
- package/src/domain/rotation/classes/hunter.ts +156 -0
- package/src/domain/rotation/classes/index.ts +104 -0
- package/src/domain/rotation/classes/mage.ts +99 -0
- package/src/domain/rotation/classes/paladin.ts +296 -0
- package/src/domain/rotation/classes/priest.ts +94 -0
- package/src/domain/rotation/classes/pullOpener.ts +92 -0
- package/src/domain/rotation/classes/rogue.ts +69 -0
- package/src/domain/rotation/classes/shaman.ts +29 -0
- package/src/domain/rotation/classes/supportSpec.ts +94 -0
- package/src/domain/rotation/classes/warlock.ts +81 -0
- package/src/domain/rotation/classes/warrior.ts +402 -0
- package/src/domain/rotation/classify.ts +1381 -0
- package/src/domain/rotation/condMetricPicker.ts +379 -0
- package/src/domain/rotation/consumables.ts +242 -0
- package/src/domain/rotation/evaluate.ts +1115 -0
- package/src/domain/rotation/finisherLadder.ts +145 -0
- package/src/domain/rotation/invent.ts +938 -0
- package/src/domain/rotation/killOrder.ts +30 -0
- package/src/domain/rotation/openerForm.ts +22 -0
- package/src/domain/rotation/paladinBuffs.ts +568 -0
- package/src/domain/rotation/prebuff.ts +283 -0
- package/src/domain/rotation/raidRowTuning.ts +34 -0
- package/src/domain/rotation/rotation.ts +11 -0
- package/src/domain/rotation/rotationProfiles.ts +180 -0
- package/src/domain/rotation/rotationSuggestions.ts +851 -0
- package/src/domain/rotation/ruleAfterChain.ts +49 -0
- package/src/domain/rotation/spec.ts +70 -0
- package/src/domain/rotation/spellPicker.ts +140 -0
- package/src/domain/rotation/stand.ts +143 -0
- package/src/domain/rotation/types.ts +718 -0
- package/src/domain/run/battlegroundRun.ts +111 -0
- package/src/domain/run/canEnterContext.ts +32 -0
- package/src/domain/run/death.ts +561 -0
- package/src/domain/run/deathRecovery.ts +289 -0
- package/src/domain/run/duel.ts +141 -0
- package/src/domain/run/dungeonRun.ts +344 -0
- package/src/domain/run/floorRest.ts +159 -0
- package/src/domain/run/honor.ts +557 -0
- package/src/domain/run/honorWeek.ts +180 -0
- package/src/domain/run/whenMap.ts +977 -0
- package/src/domain/scriptdev/arathiHighlands.ts +445 -0
- package/src/domain/scriptdev/ashenvale.ts +635 -0
- package/src/domain/scriptdev/ashenvaleHelpers.ts +1215 -0
- package/src/domain/scriptdev/azshara.ts +892 -0
- package/src/domain/scriptdev/blackfathomDeeps.ts +212 -0
- package/src/domain/scriptdev/blackrockDepths.ts +1434 -0
- package/src/domain/scriptdev/blackrockSpire.ts +730 -0
- package/src/domain/scriptdev/blackwingLair.ts +521 -0
- package/src/domain/scriptdev/burningSteppes.ts +62 -0
- package/src/domain/scriptdev/classFilter.ts +43 -0
- package/src/domain/scriptdev/darkshore.ts +817 -0
- package/src/domain/scriptdev/darkshoreHelpers.ts +853 -0
- package/src/domain/scriptdev/deadmines.ts +331 -0
- package/src/domain/scriptdev/desolace.ts +1239 -0
- package/src/domain/scriptdev/direMaul.ts +859 -0
- package/src/domain/scriptdev/durotar.ts +532 -0
- package/src/domain/scriptdev/dustwallowMarsh.ts +758 -0
- package/src/domain/scriptdev/dustwallowMarshHelpers.ts +994 -0
- package/src/domain/scriptdev/easternPlaguelands.ts +21 -0
- package/src/domain/scriptdev/felwood.ts +1055 -0
- package/src/domain/scriptdev/feralas.ts +571 -0
- package/src/domain/scriptdev/feralasHelpers.ts +838 -0
- package/src/domain/scriptdev/gnomeregan.ts +466 -0
- package/src/domain/scriptdev/guards.ts +616 -0
- package/src/domain/scriptdev/hinterlands.ts +693 -0
- package/src/domain/scriptdev/host.ts +1134 -0
- package/src/domain/scriptdev/index.ts +123 -0
- package/src/domain/scriptdev/instanceRaids.ts +136 -0
- package/src/domain/scriptdev/itemScripts.ts +37 -0
- package/src/domain/scriptdev/lochModan.ts +283 -0
- package/src/domain/scriptdev/maraudon.ts +232 -0
- package/src/domain/scriptdev/moltenCore.ts +831 -0
- package/src/domain/scriptdev/moonglade.ts +659 -0
- package/src/domain/scriptdev/moongladeHelpers.ts +933 -0
- package/src/domain/scriptdev/naxxramas.ts +577 -0
- package/src/domain/scriptdev/naxxramasConstruct.ts +364 -0
- package/src/domain/scriptdev/naxxramasFrostwyrm.ts +378 -0
- package/src/domain/scriptdev/naxxramasMilitary.ts +276 -0
- package/src/domain/scriptdev/npcProfessions.ts +1025 -0
- package/src/domain/scriptdev/npcsSpecial.ts +1379 -0
- package/src/domain/scriptdev/onyxiasLair.ts +313 -0
- package/src/domain/scriptdev/orgrimmar.ts +147 -0
- package/src/domain/scriptdev/professionSpecConsumer.ts +481 -0
- package/src/domain/scriptdev/razorfenDowns.ts +468 -0
- package/src/domain/scriptdev/razorfenKraul.ts +410 -0
- package/src/domain/scriptdev/redridgeMountains.ts +163 -0
- package/src/domain/scriptdev/registry.ts +945 -0
- package/src/domain/scriptdev/ruinsOfAhnqiraj.ts +356 -0
- package/src/domain/scriptdev/scarletMonastery.ts +713 -0
- package/src/domain/scriptdev/scholomance.ts +682 -0
- package/src/domain/scriptdev/searingGorge.ts +295 -0
- package/src/domain/scriptdev/shadowfangKeep.ts +181 -0
- package/src/domain/scriptdev/silithus.ts +71 -0
- package/src/domain/scriptdev/silverpineForest.ts +662 -0
- package/src/domain/scriptdev/stonetalonMountains.ts +493 -0
- package/src/domain/scriptdev/stormwindCity.ts +1192 -0
- package/src/domain/scriptdev/stranglethornVale.ts +402 -0
- package/src/domain/scriptdev/stratholme.ts +650 -0
- package/src/domain/scriptdev/stratholmeScripts.ts +505 -0
- package/src/domain/scriptdev/sunkenTemple.ts +736 -0
- package/src/domain/scriptdev/swampOfSorrows.ts +22 -0
- package/src/domain/scriptdev/tanaris.ts +391 -0
- package/src/domain/scriptdev/tanarisHelpers.ts +661 -0
- package/src/domain/scriptdev/teldrassil.ts +143 -0
- package/src/domain/scriptdev/templeOfAhnqiraj.ts +1013 -0
- package/src/domain/scriptdev/theBarrens.ts +709 -0
- package/src/domain/scriptdev/theBarrensHelpers.ts +1026 -0
- package/src/domain/scriptdev/thousandNeedles.ts +426 -0
- package/src/domain/scriptdev/thousandNeedlesHelpers.ts +566 -0
- package/src/domain/scriptdev/tirisfalGlades.ts +533 -0
- package/src/domain/scriptdev/types.ts +1026 -0
- package/src/domain/scriptdev/uldaman.ts +437 -0
- package/src/domain/scriptdev/ungoroCrater.ts +549 -0
- package/src/domain/scriptdev/ungoroCraterHelpers.ts +1006 -0
- package/src/domain/scriptdev/wailingCaverns.ts +700 -0
- package/src/domain/scriptdev/warEffort.ts +371 -0
- package/src/domain/scriptdev/westernPlaguelands.ts +952 -0
- package/src/domain/scriptdev/westfall.ts +767 -0
- package/src/domain/scriptdev/wetlands.ts +660 -0
- package/src/domain/scriptdev/winterspring.ts +482 -0
- package/src/domain/scriptdev/winterspringHelpers.ts +801 -0
- package/src/domain/scriptdev/worldBosses.ts +605 -0
- package/src/domain/scriptdev/zulfarrak.ts +478 -0
- package/src/domain/scriptdev/zulgurub.ts +1152 -0
- package/src/domain/sim/dummySim.ts +408 -0
- package/src/domain/sim/targetDummy.ts +29 -0
- package/src/domain/social/guild.ts +148 -0
- package/src/domain/spells/areaAuraMembership.ts +93 -0
- package/src/domain/spells/breakableStunCc.ts +166 -0
- package/src/domain/spells/cancelAura.ts +80 -0
- package/src/domain/spells/diminishing.ts +167 -0
- package/src/domain/spells/dispel.ts +149 -0
- package/src/domain/spells/dispelMechanic.ts +105 -0
- package/src/domain/spells/equipSpells.ts +247 -0
- package/src/domain/spells/learnOnTargets.ts +260 -0
- package/src/domain/spells/mergeSchoolImmunityFromRaw.ts +66 -0
- package/src/domain/spells/resurrectSpell.ts +124 -0
- package/src/domain/spells/spellPushback.ts +39 -0
- package/src/domain/spells/spellReflect.ts +43 -0
- package/src/domain/spells/stealth.ts +183 -0
- package/src/domain/spells/totem.ts +394 -0
- package/src/domain/spells/worldCast.ts +187 -0
- package/src/domain/world/areaTriggerLocks.ts +177 -0
- package/src/domain/world/dungeonMusic.ts +108 -0
- package/src/domain/world/gameEvents.ts +119 -0
- package/src/domain/world/gameObjects.ts +1030 -0
- package/src/domain/world/goEventFire.ts +234 -0
- package/src/domain/world/goMoTransport.ts +74 -0
- package/src/domain/world/goTransport.ts +81 -0
- package/src/domain/world/hazards.ts +459 -0
- package/src/domain/world/openLock.ts +398 -0
- package/src/domain/world/pools.ts +470 -0
- package/src/domain/world/restArea.ts +37 -0
- package/src/domain/world/weather.ts +201 -0
- package/src/domain/zoneAmbience.mjs +87 -0
- package/src/domain/zoneMusic.mjs +62 -0
- package/src/domain/zoneMusicQueue.mjs +7 -0
- package/src/engine/combat/activeSeal.ts +39 -0
- package/src/engine/combat/aiTargetResolve.ts +64 -0
- package/src/engine/combat/aoeCast.ts +289 -0
- package/src/engine/combat/applyConsumeAura.ts +74 -0
- package/src/engine/combat/applyDemonicSacrifice.ts +70 -0
- package/src/engine/combat/applyDispelMechanic.ts +30 -0
- package/src/engine/combat/applyHealEffect.ts +301 -0
- package/src/engine/combat/applySchoolAbsorb.ts +114 -0
- package/src/engine/combat/applySpell.ts +3169 -0
- package/src/engine/combat/applySpellLate.ts +2026 -0
- package/src/engine/combat/applySpellLateBag.ts +144 -0
- package/src/engine/combat/areaAura.ts +283 -0
- package/src/engine/combat/attackTable.ts +508 -0
- package/src/engine/combat/battleRez.ts +87 -0
- package/src/engine/combat/castAction.ts +36 -0
- package/src/engine/combat/castTargetGates.ts +75 -0
- package/src/engine/combat/castableKit.ts +68 -0
- package/src/engine/combat/ccMirrorUpgrade.ts +39 -0
- package/src/engine/combat/chainFan.ts +210 -0
- package/src/engine/combat/channel.ts +423 -0
- package/src/engine/combat/chaseCloseness.ts +95 -0
- package/src/engine/combat/cmangosCastGates.ts +129 -0
- package/src/engine/combat/combatFlag.ts +77 -0
- package/src/engine/combat/combatGeometry.ts +1329 -0
- package/src/engine/combat/combustion.ts +68 -0
- package/src/engine/combat/context.ts +730 -0
- package/src/engine/combat/createSession.ts +1165 -0
- package/src/engine/combat/creatureLeash.ts +38 -0
- package/src/engine/combat/crowdControl.ts +1259 -0
- package/src/engine/combat/dispelDuty.ts +54 -0
- package/src/engine/combat/dispelReflect.ts +609 -0
- package/src/engine/combat/displaceFloor.ts +113 -0
- package/src/engine/combat/duelBounds.ts +47 -0
- package/src/engine/combat/equippedItemGate.ts +297 -0
- package/src/engine/combat/evadeLifecycle.ts +63 -0
- package/src/engine/combat/eventAi.ts +2220 -0
- package/src/engine/combat/facing.ts +74 -0
- package/src/engine/combat/fearFlee.ts +137 -0
- package/src/engine/combat/fighterFactory.ts +1144 -0
- package/src/engine/combat/forceDespawnAction.ts +51 -0
- package/src/engine/combat/formulas.ts +807 -0
- package/src/engine/combat/friendlyFan.ts +55 -0
- package/src/engine/combat/groundPoolTick.ts +210 -0
- package/src/engine/combat/hazards.ts +114 -0
- package/src/engine/combat/healTargets.ts +226 -0
- package/src/engine/combat/heartbeatResist.ts +49 -0
- package/src/engine/combat/hostileItemUse.ts +75 -0
- package/src/engine/combat/interruptAuras.ts +66 -0
- package/src/engine/combat/itemRescue.ts +49 -0
- package/src/engine/combat/itemUse.ts +260 -0
- package/src/engine/combat/kitById.ts +23 -0
- package/src/engine/combat/knockBack.ts +201 -0
- package/src/engine/combat/leap.ts +89 -0
- package/src/engine/combat/mitigation.ts +587 -0
- package/src/engine/combat/modTaunt.ts +43 -0
- package/src/engine/combat/motionClaim.ts +268 -0
- package/src/engine/combat/motionGate.ts +150 -0
- package/src/engine/combat/motionGenerator.ts +27 -0
- package/src/engine/combat/navSight.ts +138 -0
- package/src/engine/combat/perfSink.ts +28 -0
- package/src/engine/combat/periodicDue.ts +55 -0
- package/src/engine/combat/petAuras.ts +86 -0
- package/src/engine/combat/pickAction.ts +3449 -0
- package/src/engine/combat/powerForm.ts +735 -0
- package/src/engine/combat/powerPools.ts +49 -0
- package/src/engine/combat/predicates.ts +538 -0
- package/src/engine/combat/procsDamage.ts +1823 -0
- package/src/engine/combat/reactiveGates.ts +135 -0
- package/src/engine/combat/roles.ts +389 -0
- package/src/engine/combat/rotationSubject.ts +78 -0
- package/src/engine/combat/ruleAfter.ts +106 -0
- package/src/engine/combat/seedDisplayAuras.ts +203 -0
- package/src/engine/combat/seedOocEffects.ts +317 -0
- package/src/engine/combat/seedSchoolImmunities.ts +45 -0
- package/src/engine/combat/session-types.ts +458 -0
- package/src/engine/combat/sessionApi.ts +1785 -0
- package/src/engine/combat/sessionCharge.ts +124 -0
- package/src/engine/combat/sessionChase.ts +869 -0
- package/src/engine/combat/sessionDeaths.ts +469 -0
- package/src/engine/combat/sessionFocus.ts +506 -0
- package/src/engine/combat/sessionFollow.ts +167 -0
- package/src/engine/combat/sessionGeometry.ts +188 -0
- package/src/engine/combat/sessionHome.ts +75 -0
- package/src/engine/combat/sessionInject.ts +719 -0
- package/src/engine/combat/sessionMechanicMove.ts +555 -0
- package/src/engine/combat/sessionMotion.ts +1553 -0
- package/src/engine/combat/sessionMotionKit.ts +247 -0
- package/src/engine/combat/sessionMoveIntent.ts +49 -0
- package/src/engine/combat/sessionMoveOrder.ts +200 -0
- package/src/engine/combat/sessionPathTo.ts +657 -0
- package/src/engine/combat/sessionPools.ts +688 -0
- package/src/engine/combat/sessionSteer.ts +144 -0
- package/src/engine/combat/sessionStepBack.ts +151 -0
- package/src/engine/combat/sessionStepWrap.ts +116 -0
- package/src/engine/combat/sessionView.ts +442 -0
- package/src/engine/combat/simEffects.ts +32 -0
- package/src/engine/combat/simFacade.ts +620 -0
- package/src/engine/combat/simPump.ts +264 -0
- package/src/engine/combat/simSnapshot.ts +165 -0
- package/src/engine/combat/simThreadPool.ts +35 -0
- package/src/engine/combat/skeramImages.ts +57 -0
- package/src/engine/combat/slowUpdate.ts +178 -0
- package/src/engine/combat/snapToFloor.ts +42 -0
- package/src/engine/combat/speedAura.ts +29 -0
- package/src/engine/combat/spellReagents.ts +71 -0
- package/src/engine/combat/stealthDetect.ts +93 -0
- package/src/engine/combat/stepBackMotion.ts +171 -0
- package/src/engine/combat/stepSession.ts +3102 -0
- package/src/engine/combat/summonCast.ts +243 -0
- package/src/engine/combat/thaddiusPolarity.ts +97 -0
- package/src/engine/combat/threat.ts +388 -0
- package/src/engine/combat/threatOps.ts +272 -0
- package/src/engine/combat/tickWorkerBody.ts +211 -0
- package/src/engine/combat/totemAuras.ts +122 -0
- package/src/engine/combat/triggerPayload.ts +42 -0
- package/src/engine/combat/triggeredCompanion.ts +63 -0
- package/src/engine/combat/types.ts +1897 -0
- package/src/engine/combat/useObjectTrap.ts +140 -0
- package/src/engine/combat/walkSurface.ts +54 -0
- package/src/engine/combat/weapon.ts +1248 -0
- package/src/engine/combat/worldFrame.ts +43 -0
- package/src/engine/combat.solo-golden.json +2242 -0
- package/src/engine/combat.ts +84 -0
- package/src/engine/core/detMath.ts +289 -0
- package/src/engine/core/events.ts +357 -0
- package/src/engine/core/rng.ts +36 -0
- package/src/engine/game/actionBars.ts +124 -0
- package/src/engine/game/activateObjectFromSpell.ts +320 -0
- package/src/engine/game/applyActiveObjectFromDbScript.ts +98 -0
- package/src/engine/game/applyDeathAndSpellScripts.ts +268 -0
- package/src/engine/game/applyDoorFromDbScript.ts +388 -0
- package/src/engine/game/applyEscortFromDbScript.ts +290 -0
- package/src/engine/game/applyGoSpellcasterCast.ts +40 -0
- package/src/engine/game/applyHoverFromDbScript.ts +110 -0
- package/src/engine/game/applyOocResurrect.ts +71 -0
- package/src/engine/game/applySpellDurability.ts +115 -0
- package/src/engine/game/applyTailFromDbScript.ts +478 -0
- package/src/engine/game/applyTerminateFromDbScript.ts +95 -0
- package/src/engine/game/auctionMail.ts +269 -0
- package/src/engine/game/bagOverflow.ts +130 -0
- package/src/engine/game/bank.ts +110 -0
- package/src/engine/game/barAutofill.ts +26 -0
- package/src/engine/game/battleground.ts +369 -0
- package/src/engine/game/combatEnemySpec.ts +216 -0
- package/src/engine/game/combatObjectTraps.ts +167 -0
- package/src/engine/game/combatSeed.ts +320 -0
- package/src/engine/game/combatSession.ts +3241 -0
- package/src/engine/game/combatSessionClock.ts +62 -0
- package/src/engine/game/companionQuestActions.ts +242 -0
- package/src/engine/game/companionTraining.ts +40 -0
- package/src/engine/game/consumables.ts +624 -0
- package/src/engine/game/context.ts +53 -0
- package/src/engine/game/createHealthstone.ts +45 -0
- package/src/engine/game/deathFlow.ts +127 -0
- package/src/engine/game/devGrant.ts +117 -0
- package/src/engine/game/dynamicObject.ts +365 -0
- package/src/engine/game/enchantItem.ts +177 -0
- package/src/engine/game/equipmentHelper.ts +806 -0
- package/src/engine/game/factionState.ts +108 -0
- package/src/engine/game/garmentsOoc.ts +69 -0
- package/src/engine/game/globalActionBar.ts +179 -0
- package/src/engine/game/goInteractQuestCredit.ts +51 -0
- package/src/engine/game/goMoTransportUse.ts +61 -0
- package/src/engine/game/goTransportUse.ts +60 -0
- package/src/engine/game/healthstoneUpkeep.ts +59 -0
- package/src/engine/game/killSkin.ts +124 -0
- package/src/engine/game/learnFromItem.ts +118 -0
- package/src/engine/game/loadReconcile.ts +551 -0
- package/src/engine/game/loot.ts +294 -0
- package/src/engine/game/macros.ts +125 -0
- package/src/engine/game/mail.ts +293 -0
- package/src/engine/game/meetingStoneQueue.ts +75 -0
- package/src/engine/game/meetingStoneUse.ts +54 -0
- package/src/engine/game/newGameState.ts +363 -0
- package/src/engine/game/oocAuraInterrupt.ts +92 -0
- package/src/engine/game/oocCast.ts +241 -0
- package/src/engine/game/oocCastEffects.ts +803 -0
- package/src/engine/game/oocCastMethods.ts +1077 -0
- package/src/engine/game/openLockFromSpell.ts +174 -0
- package/src/engine/game/outdoorPvp.ts +187 -0
- package/src/engine/game/outfitter.ts +644 -0
- package/src/engine/game/paladinBoard.ts +393 -0
- package/src/engine/game/partyAuras.ts +121 -0
- package/src/engine/game/persistCombatAuras.ts +91 -0
- package/src/engine/game/pets.ts +459 -0
- package/src/engine/game/prePullHealthstones.ts +154 -0
- package/src/engine/game/professions.ts +2227 -0
- package/src/engine/game/pruneStaleRuntime.ts +39 -0
- package/src/engine/game/questFightCredit.ts +36 -0
- package/src/engine/game/questItemOnCorpse.ts +166 -0
- package/src/engine/game/questItemOnCreature.ts +103 -0
- package/src/engine/game/questLog.ts +879 -0
- package/src/engine/game/questSpellComplete.ts +21 -0
- package/src/engine/game/questTurnIn.ts +598 -0
- package/src/engine/game/raidParty.ts +32 -0
- package/src/engine/game/reagentBuyIn.ts +39 -0
- package/src/engine/game/regenRest.ts +186 -0
- package/src/engine/game/rotation.ts +425 -0
- package/src/engine/game/runFullDungeon.ts +611 -0
- package/src/engine/game/runSupply.ts +80 -0
- package/src/engine/game/sanitizeDriftedItems.ts +135 -0
- package/src/engine/game/scriptDevGoUse.ts +397 -0
- package/src/engine/game/scriptDevInnkeeper.ts +150 -0
- package/src/engine/game/scriptDevProfessionSpec.ts +99 -0
- package/src/engine/game/sendEventFromSpell.ts +87 -0
- package/src/engine/game/sortContainers.ts +85 -0
- package/src/engine/game/spellReputation.ts +69 -0
- package/src/engine/game/squad/squadDungeonSeating.ts +197 -0
- package/src/engine/game/squadDungeon.ts +4222 -0
- package/src/engine/game/squadQuestShare.ts +260 -0
- package/src/engine/game/summonObjectSlot.ts +69 -0
- package/src/engine/game/summonObjectWild.ts +73 -0
- package/src/engine/game/summoningRitualUse.ts +141 -0
- package/src/engine/game/talents.ts +356 -0
- package/src/engine/game/tamingRodUse.ts +66 -0
- package/src/engine/game/tempSpawnCreature.ts +136 -0
- package/src/engine/game/tickDungeonPatrolScripts.ts +205 -0
- package/src/engine/game/tickTimedQuests.ts +28 -0
- package/src/engine/game/trade.ts +586 -0
- package/src/engine/game/travel.ts +1155 -0
- package/src/engine/game/types.ts +1855 -0
- package/src/engine/game/vendorOffers.ts +244 -0
- package/src/engine/game/weaponImbueItem.ts +281 -0
- package/src/engine/game/worldSession.ts +183 -0
- package/src/engine/game/worldState.ts +166 -0
- package/src/engine/game.ts +968 -0
- package/src/engine/spells/GAP.md +67 -0
- package/src/engine/spells/absorbs.ts +376 -0
- package/src/engine/spells/addTargetTrigger.ts +53 -0
- package/src/engine/spells/auraPerSecondCost.ts +50 -0
- package/src/engine/spells/auraStacking.ts +497 -0
- package/src/engine/spells/cmangos-special-cases-combustion.ts +13 -0
- package/src/engine/spells/cmangos-special-cases-s18.ts +445 -0
- package/src/engine/spells/cmangos-special-cases-s19.ts +324 -0
- package/src/engine/spells/cmangos-special-cases-s20.ts +385 -0
- package/src/engine/spells/cmangos-special-cases-s21.ts +116 -0
- package/src/engine/spells/cmangos-special-cases-s22.ts +24 -0
- package/src/engine/spells/cmangos-special-cases-s23.ts +52 -0
- package/src/engine/spells/cmangos-special-cases.ts +1570 -0
- package/src/engine/spells/conditions.ts +718 -0
- package/src/engine/spells/effects.ts +203 -0
- package/src/engine/spells/fixtures/oracle-effects-lock9a.json +1 -0
- package/src/engine/spells/immunity.ts +942 -0
- package/src/engine/spells/intentEffects.ts +351 -0
- package/src/engine/spells/interpreter/GAPS.md +21 -0
- package/src/engine/spells/interpreter/amount.ts +109 -0
- package/src/engine/spells/interpreter/class-scripts-kit.ts +478 -0
- package/src/engine/spells/interpreter/diff.ts +246 -0
- package/src/engine/spells/interpreter/duration.ts +90 -0
- package/src/engine/spells/interpreter/form-attrs.json +1 -0
- package/src/engine/spells/interpreter/form-attrs.ts +95 -0
- package/src/engine/spells/interpreter/handlers/aura-remove.ts +113 -0
- package/src/engine/spells/interpreter/handlers/auras-control.ts +1547 -0
- package/src/engine/spells/interpreter/handlers/auras-core.ts +1583 -0
- package/src/engine/spells/interpreter/handlers/auras-misc.ts +1774 -0
- package/src/engine/spells/interpreter/handlers/effect-disenchant.ts +17 -0
- package/src/engine/spells/interpreter/handlers/effect-skinning.ts +20 -0
- package/src/engine/spells/interpreter/handlers/effects-action-utility.ts +1455 -0
- package/src/engine/spells/interpreter/handlers/effects-core.ts +432 -0
- package/src/engine/spells/interpreter/handlers/effects-remainder.ts +105 -0
- package/src/engine/spells/interpreter/handlers/effects-summon-item.ts +687 -0
- package/src/engine/spells/interpreter/handlers/mod-increase-energy-percent.ts +36 -0
- package/src/engine/spells/interpreter/handlers/mod-increase-energy.ts +36 -0
- package/src/engine/spells/interpreter/handlers/periodic-trigger-zero.ts +327 -0
- package/src/engine/spells/interpreter/handlers/procs.ts +131 -0
- package/src/engine/spells/interpreter/handlers/registry.ts +975 -0
- package/src/engine/spells/interpreter/handlers/shared.ts +667 -0
- package/src/engine/spells/interpreter/handlers.ts +9 -0
- package/src/engine/spells/interpreter/hunter-kit.ts +202 -0
- package/src/engine/spells/interpreter/index.ts +525 -0
- package/src/engine/spells/interpreter/item-triggers.ts +1121 -0
- package/src/engine/spells/interpreter/lift-consume-energy.ts +37 -0
- package/src/engine/spells/interpreter/mage-portals.ts +37 -0
- package/src/engine/spells/interpreter/materialize-charm.ts +88 -0
- package/src/engine/spells/interpreter/materialize-dispel-mechanic.ts +25 -0
- package/src/engine/spells/interpreter/materialize-rating-buffs.ts +81 -0
- package/src/engine/spells/interpreter/materialize-speed.ts +109 -0
- package/src/engine/spells/interpreter/materialize-spell-magnet.ts +22 -0
- package/src/engine/spells/interpreter/opcodes.ts +789 -0
- package/src/engine/spells/interpreter/paladin-kit.ts +95 -0
- package/src/engine/spells/interpreter/paladin-seals.ts +499 -0
- package/src/engine/spells/interpreter/priest-warlock-kit.ts +135 -0
- package/src/engine/spells/interpreter/proc.ts +443 -0
- package/src/engine/spells/interpreter/registry/helpers.ts +16 -0
- package/src/engine/spells/interpreter/registry/index.ts +216 -0
- package/src/engine/spells/interpreter/registry/packs/class-abilities.ts +304 -0
- package/src/engine/spells/interpreter/registry/packs/dire-maul.ts +44 -0
- package/src/engine/spells/interpreter/registry/packs/dummy-script-tail.ts +1065 -0
- package/src/engine/spells/interpreter/registry/packs/ex-wave-m.ts +70 -0
- package/src/engine/spells/interpreter/registry/packs/life-tap.ts +107 -0
- package/src/engine/spells/interpreter/registry/packs/paladin.ts +246 -0
- package/src/engine/spells/interpreter/registry/packs/raid-script-summons.ts +26 -0
- package/src/engine/spells/interpreter/registry/packs/raid-threat-wipe.ts +22 -0
- package/src/engine/spells/interpreter/registry/packs/shaman.ts +214 -0
- package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-a.ts +269 -0
- package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-b.ts +370 -0
- package/src/engine/spells/interpreter/registry/packs/si4-dummy-generic-c.ts +172 -0
- package/src/engine/spells/interpreter/registry/packs/si4-dummy-hunter.ts +60 -0
- package/src/engine/spells/interpreter/registry/packs/si4-dummy-warrior.ts +31 -0
- package/src/engine/spells/interpreter/registry/packs/si4-script-generic-a.ts +114 -0
- package/src/engine/spells/interpreter/registry/packs/si4-script-generic-b.ts +249 -0
- package/src/engine/spells/interpreter/registry/packs/si4-script-generic-c.ts +233 -0
- package/src/engine/spells/interpreter/registry/types.ts +48 -0
- package/src/engine/spells/interpreter/talent-scripted.ts +329 -0
- package/src/engine/spells/interpreter/targeting.ts +90 -0
- package/src/engine/spells/interpreter/types-intent.ts +1501 -0
- package/src/engine/spells/interpreter/types.ts +419 -0
- package/src/engine/spells/interpreter/warrior-druid-kit.ts +314 -0
- package/src/engine/spells/interpreter/weapon-imbue-kit.ts +384 -0
- package/src/engine/spells/interrupt.ts +217 -0
- package/src/engine/spells/meleeAttackReset.ts +60 -0
- package/src/engine/spells/oocTriggerSpell.ts +49 -0
- package/src/engine/spells/overrideClassScripts.ts +319 -0
- package/src/engine/spells/parryHaste.ts +20 -0
- package/src/engine/spells/procs.ts +300 -0
- package/src/engine/spells/recovery.ts +203 -0
- package/src/engine/spells/scriptTargetDest.ts +76 -0
- package/src/engine/spells/scriptTargets.ts +85 -0
- package/src/engine/spells/singleTargetAura.ts +82 -0
- package/src/engine/spells/specialCasePayloads.ts +57 -0
- package/src/engine/spells/spellAttributes.ts +249 -0
- package/src/engine/spells/spellBonus.ts +143 -0
- package/src/engine/spells/spellModIntents.ts +419 -0
- package/src/engine/spells/spellMods.ts +283 -0
- package/src/engine/spells/spellRadius.ts +15 -0
- package/src/engine/spells/trapObjects.ts +26 -0
- package/src/json.d.ts +7 -0
- package/src/persistence/memoryRepository.ts +23 -0
- package/src/persistence/saveBackups.ts +162 -0
- package/src/persistence/saveFile.ts +68 -0
- package/src/persistence/saveRepository.ts +11 -0
- package/src/persistence/saveShape.ts +668 -0
- package/src/progression/leveling.ts +89 -0
- package/src/progression/rest.ts +1434 -0
- package/src/progression/training.ts +226 -0
- package/src/progression/xpGain.ts +369 -0
- package/src/quests/quests.ts +1580 -0
- package/src/world/aoePull.ts +198 -0
- package/src/world/areaTableDbc.ts +39 -0
- package/src/world/areaTableMapIdPairs.ts +141 -0
- package/src/world/bakeSlug.ts +43 -0
- package/src/world/continuousDungeon.ts +1250 -0
- package/src/world/dungeonBakeProjection.ts +190 -0
- package/src/world/dungeonMapDensity.ts +342 -0
- package/src/world/dungeonMapProjection.ts +135 -0
- package/src/world/dungeonNav.ts +904 -0
- package/src/world/dungeonNpcSim.ts +147 -0
- package/src/world/dungeonObjectives.ts +234 -0
- package/src/world/dungeonPreset.ts +35 -0
- package/src/world/dungeonRoute.ts +311 -0
- package/src/world/dungeonRouteGeometry.ts +732 -0
- package/src/world/dungeonRouteOrder.ts +1037 -0
- package/src/world/dungeonWingRooms.ts +426 -0
- package/src/world/escort.ts +296 -0
- package/src/world/goPoolRoll.ts +75 -0
- package/src/world/instanceObjects.ts +785 -0
- package/src/world/instances.ts +1572 -0
- package/src/world/meetingStones.ts +56 -0
- package/src/world/navmeshFloors.ts +145 -0
- package/src/world/nearGrid.ts +167 -0
- package/src/world/packBudget.ts +613 -0
- package/src/world/rareRoll.ts +335 -0
- package/src/world/routeAuthoring.ts +132 -0
- package/src/world/routeEdit.ts +209 -0
- package/src/world/world.ts +812 -0
- package/src/world/zoneHazards.ts +47 -0
|
@@ -0,0 +1,730 @@
|
|
|
1
|
+
// Combat session context bag: createSession's mutable state plus the hub function slots, so leaf and
|
|
2
|
+
// hub peels take (ctx, …) instead of closing over locals. Extracted modules must not import combat.ts.
|
|
3
|
+
|
|
4
|
+
import type { Rng } from '../core/rng.ts';
|
|
5
|
+
import type { CombatEvent, Side, TotemSide, EnemySide, HitResult } from '../core/events.ts';
|
|
6
|
+
import type { CombatantId } from './threat.ts';
|
|
7
|
+
import type { ThreatManager } from './threat.ts';
|
|
8
|
+
import type { ControlKind, Mechanic, School, ShapeshiftFormId, SpellDef } from '../../data/schema.ts';
|
|
9
|
+
import type { CreatureCastSlot, CreatureEventAiState } from '../../domain/creature/creatureAi.ts';
|
|
10
|
+
import type { ScriptDevRuntimeState } from '../../domain/scriptdev/index.ts';
|
|
11
|
+
import type { GroundPool } from '../game/dynamicObject.ts';
|
|
12
|
+
import type { Hazard } from './hazards.ts';
|
|
13
|
+
import type { CombatPosYd, SummonWorldPoint } from './combatGeometry.ts';
|
|
14
|
+
import type {
|
|
15
|
+
ActiveEffect,
|
|
16
|
+
AllyActionProvider,
|
|
17
|
+
CombatConfig,
|
|
18
|
+
CombatItem,
|
|
19
|
+
CombatantView,
|
|
20
|
+
Fighter,
|
|
21
|
+
} from './types.ts';
|
|
22
|
+
import type { QueuedCast } from './session-types.ts';
|
|
23
|
+
import type { EventAiIntent } from '../../domain/creature/creatureAi.ts';
|
|
24
|
+
import type { AreaAuraSource } from './areaAura.ts';
|
|
25
|
+
import type { MotionClaims, MotionOwner } from './motionClaim.ts';
|
|
26
|
+
import type { MotionGates } from './motionGate.ts';
|
|
27
|
+
import type { SlowDiag } from './slowUpdate.ts';
|
|
28
|
+
|
|
29
|
+
// Delayed spell impact after cast finish (missile flight). Cost/CD already taken at cast finish;
|
|
30
|
+
// effects/threat land at `landAt`. Cite: Spell.cpp cast with SpellEntry.speed ≠ 0.
|
|
31
|
+
export interface PendingMissile {
|
|
32
|
+
/** Session clock when the missile left the caster (cast finish). */
|
|
33
|
+
launchAt: number;
|
|
34
|
+
/** Session clock when effects land (launchAt + travel from cast-time yards). */
|
|
35
|
+
landAt: number;
|
|
36
|
+
casterSide: Side;
|
|
37
|
+
targetSide: Side;
|
|
38
|
+
spell: SpellDef;
|
|
39
|
+
/** Snapshot next-cast crit / effect mods armed at cast finish. */
|
|
40
|
+
castCritAdd: number;
|
|
41
|
+
castEffectPct: number;
|
|
42
|
+
// White Auto Shot / wand / Throw: land via rangedStrike(null), not deliverSpellImpact.
|
|
43
|
+
// Cite: Unit.cpp:4192 recast of 75/5019; weapon.ts white-swing contract.
|
|
44
|
+
whiteRanged?: boolean;
|
|
45
|
+
/** Wand weapon school for the orb tint; Auto Shot stays physical. */
|
|
46
|
+
school?: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Per-enemy cast / EventAI / ScriptDev runtime (lives on the session). */
|
|
50
|
+
export interface EnemyCastState {
|
|
51
|
+
fighter: Fighter;
|
|
52
|
+
slots: CreatureCastSlot[];
|
|
53
|
+
// Auras the creature is already wearing when the fight opens — its out-of-combat self-casts, which
|
|
54
|
+
// the C++ resolves at spawn and refuses once combat is open. Cite: CreatureEventAI.cpp:216-218.
|
|
55
|
+
spawnAuras: SpellDef[];
|
|
56
|
+
pendingSlot: CreatureCastSlot | null;
|
|
57
|
+
eventAi: CreatureEventAiState;
|
|
58
|
+
/** Null when creature has no ScriptDev IR binding. */
|
|
59
|
+
scriptDev: ScriptDevRuntimeState | null;
|
|
60
|
+
/** Last main-spell exclusive window end (ranged MAIN_SPELL vs white melee). */
|
|
61
|
+
mainSpellExclusiveUntil?: number;
|
|
62
|
+
// Next time this creature may evaluate its spell list. UpdateSpellLists burns a 1200 ms timer at the
|
|
63
|
+
// top of every evaluation, so a blocking row fires once per poll, not once per engine tick.
|
|
64
|
+
spellListPollAt: number;
|
|
65
|
+
// This creature's scheduled kit contains a heal, measured off its own cast entries and never a name.
|
|
66
|
+
// A pack that heals itself must be un-healed first, or four Flamewaker Healers sit at 100% forever.
|
|
67
|
+
healer?: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Explicit session bag for peels. State fields are required; hub methods are filled as clusters attach
|
|
71
|
+
// (same call order as the original nested defs).
|
|
72
|
+
export interface CombatContext {
|
|
73
|
+
// ---- clocks / outcome ----
|
|
74
|
+
t: number;
|
|
75
|
+
ended: boolean;
|
|
76
|
+
winner: Side | 'timeout' | null;
|
|
77
|
+
tickMs: number;
|
|
78
|
+
maxMs: number;
|
|
79
|
+
rng: Rng;
|
|
80
|
+
cfg: CombatConfig;
|
|
81
|
+
|
|
82
|
+
// ---- fighters ----
|
|
83
|
+
player: Fighter;
|
|
84
|
+
// The primary enemy, ABSENT when the session holds none — a continuous floor run between pulls. Two
|
|
85
|
+
// readers, both 1v1-shaped reporting rather than engine logic.
|
|
86
|
+
enemy?: Fighter;
|
|
87
|
+
pet: Fighter | null;
|
|
88
|
+
// HP the pet had when the owner's death unsummoned it (RemovePet), so the writeback restores a live
|
|
89
|
+
// pet instead of reading the 0 the despawn leaves. Null while the pet is out. Cite: Player.cpp:1670.
|
|
90
|
+
petUnsummonedHp: number | null;
|
|
91
|
+
// Keyed by the totem's own side, which carries owner + slot: the slot array is per-Unit
|
|
92
|
+
// (Unit.h:2625), so two shamans never contend for one seat.
|
|
93
|
+
totems: Map<TotemSide, Fighter>;
|
|
94
|
+
|
|
95
|
+
// ---- combat tables ----
|
|
96
|
+
effects: ActiveEffect[];
|
|
97
|
+
// `effects` bucketed by the unit they sit on, rebuilt only when the array structurally changes.
|
|
98
|
+
// Same objects in the same order, without the per-unit scan that dominated view at raid size.
|
|
99
|
+
effectsOn: (side: Side) => ActiveEffect[];
|
|
100
|
+
// Same rebuild as effectsOn, bucketed by the unit that applied the row (totem / caster).
|
|
101
|
+
effectsFrom: (side: Side) => ActiveEffect[];
|
|
102
|
+
/** Re-source a live row and move it between by-source buckets. Never write `e.source` directly. */
|
|
103
|
+
setEffectSource: (e: ActiveEffect, side: Side) => void;
|
|
104
|
+
/** Bump the version after an in-place edit a version-keyed skip reads (heartbeat, broken). */
|
|
105
|
+
bumpEffectsVersion: () => void;
|
|
106
|
+
/** Monotonic structural version of `effects` — every push/splice bumps it. */
|
|
107
|
+
effectsVersion: () => number;
|
|
108
|
+
// Next sim time the effects sweep / totem expiry / ground-pool pulse has work. Skip those loops while `t
|
|
109
|
+
// < nextPeriodicDue`. Cite: EventProcessor.cpp:39.
|
|
110
|
+
nextPeriodicDue: number;
|
|
111
|
+
/** Lower nextPeriodicDue from this row's nextTickAt / expiresAt / heartbeat nextRollAt. */
|
|
112
|
+
touchEffect: (e: ActiveEffect) => void;
|
|
113
|
+
/** Lower nextPeriodicDue to `at` when finite and earlier. */
|
|
114
|
+
touchPeriodicDue: (at: number) => void;
|
|
115
|
+
/** Lower nextPeriodicDue from a ground-pool pulse / expiry. */
|
|
116
|
+
touchGroundPool: (p: GroundPool) => void;
|
|
117
|
+
/** Rebuild nextPeriodicDue from live effects, totems, and ground pools. */
|
|
118
|
+
recomputePeriodicDue: () => void;
|
|
119
|
+
events: CombatEvent[];
|
|
120
|
+
threatByOwner: Map<CombatantId, ThreatManager>;
|
|
121
|
+
enemyCastBySide: Map<EnemySide, EnemyCastState>;
|
|
122
|
+
groundPools: GroundPool[];
|
|
123
|
+
// Live class-A area-aura holders — party auras, pet area auras, totem kits. Empty until one is
|
|
124
|
+
// applied, so a fight without any does zero extra work and draws no RNG.
|
|
125
|
+
areaAuraSources: AreaAuraSource[];
|
|
126
|
+
// Spell ids carrying DO_NOT_DISPLAY seen this session, whose chips the view drops. There is no
|
|
127
|
+
// spell registry here: the view folds in the roster's kits and applySpell stamps the rest.
|
|
128
|
+
hiddenAuraSpellIds: Set<number>;
|
|
129
|
+
unitPositionsMutable: Record<string, CombatPosYd> | undefined;
|
|
130
|
+
// Position generation counter — bumped by setPos for acquire-range hostiles cache. Owned by
|
|
131
|
+
// sessionGeometry; read by sessionPools.
|
|
132
|
+
posGen: number;
|
|
133
|
+
// Explicit click/kill-target focus on a floor passive (no threat yet). Free AI may aim only at this side
|
|
134
|
+
// until it enters combat — not every streamed passive in range.
|
|
135
|
+
explicitEnemyFocus: EnemySide | null;
|
|
136
|
+
/** Companion manual kill-target override (ally side → enemy side). */
|
|
137
|
+
allyManualTarget: Map<Side, EnemySide>;
|
|
138
|
+
// Pet bar command state (CharmInfo COMMAND_ATTACK / COMMAND_FOLLOW / COMMAND_STAY). Cite: Unit.h:819-824
|
|
139
|
+
// CommandStates; PetAI.cpp:376-377.
|
|
140
|
+
petCommand: 'attack' | 'follow' | 'stay';
|
|
141
|
+
/** Pet bar react state. Cite: UnitAI.h:81-86 ReactStates; PetAI.cpp:83,380,480. */
|
|
142
|
+
petReact: 'aggressive' | 'defensive' | 'passive';
|
|
143
|
+
/** Victim the Attack command named; cleared when it dies or a Follow/Stay is issued. */
|
|
144
|
+
petManualTarget: EnemySide | null;
|
|
145
|
+
/** COMMAND_STAY anchor. Cite: PetAI.cpp:395-398 CharmInfo::UpdateStayPosition / MoveStay. */
|
|
146
|
+
petStayPos: CombatPosYd | null;
|
|
147
|
+
// GetIsRetreating — Follow is a RECALL, not a command flip. Without it the order is invisible
|
|
148
|
+
// mid-fight, since owner-assist re-acquires the victim the very next tick.
|
|
149
|
+
petRetreating: boolean;
|
|
150
|
+
/** Per-side motion-resolution tally (sessionMotion). Diagnosis only — never read by logic. */
|
|
151
|
+
navDiag?: Map<string, Record<string, number>>;
|
|
152
|
+
/** C2 SlowUpdate think/skip tallies. Diagnosis only. */
|
|
153
|
+
slowDiag?: SlowDiag;
|
|
154
|
+
// In-flight missiles, landing once the clock reaches their arrival. Empty with no geometry or no
|
|
155
|
+
// projectile spells, so a 1v1 golden does zero work.
|
|
156
|
+
pendingMissiles: PendingMissile[];
|
|
157
|
+
instanceData: Map<number, number>;
|
|
158
|
+
guardianSidesBySummoner: Map<Side, Set<Side>>;
|
|
159
|
+
|
|
160
|
+
// ---- items ----
|
|
161
|
+
playerItems: CombatItem[];
|
|
162
|
+
itemCd: Map<number, number>;
|
|
163
|
+
itemsSpent: Map<number, number>;
|
|
164
|
+
/** Items a fight put in the player's bags (Scorched Rocket Boots). Emitted as itemsGained. */
|
|
165
|
+
itemsGained: Map<number, number>;
|
|
166
|
+
// Every non-player unit's combat bag, keyed by SIDE. It replaced six seat-indexed arrays: an inject
|
|
167
|
+
// had to grow three of them in lockstep, and every reader scanned the roster back to an index.
|
|
168
|
+
unitItems: Map<Side, CombatItem[]>;
|
|
169
|
+
unitItemCd: Map<Side, Map<number, number>>;
|
|
170
|
+
unitItemsSpent: Map<Side, Map<number, number>>;
|
|
171
|
+
/** Items a fight put in a non-player unit's bag (a companion warlock's Drain Soul shard). */
|
|
172
|
+
unitItemsGained: Map<Side, Map<number, number>>;
|
|
173
|
+
// Every non-player unit's rotation provider, keyed by SIDE. The seat-indexed arrays stay as the
|
|
174
|
+
// input contract, but nothing reads them by index — that needed a whole memo module to stay cheap.
|
|
175
|
+
unitActionProvider: Map<Side, AllyActionProvider>;
|
|
176
|
+
/** BG enemy-bot kits (index-aligned with `enemies` at session start; injected enemies have none). */
|
|
177
|
+
|
|
178
|
+
// ---- misc session sets ----
|
|
179
|
+
deathEmitted: Set<string>;
|
|
180
|
+
invalidTargetReported: Set<number>;
|
|
181
|
+
// Party interrupt coordination: enemy side → claimer side. One Kick/CS/Spell Lock at a time per casting
|
|
182
|
+
// target; miss frees the next.
|
|
183
|
+
interruptClaim: Map<CombatantId, CombatantId>;
|
|
184
|
+
// Party dispel coordination: `${targetId}:${dispelCat}` → claimer side. One Tranq/Purge/Cleanse per
|
|
185
|
+
// (target, category); miss frees the next. Cite: AUTOPILOT-PLAN §4 row 21.
|
|
186
|
+
dispelClaim: Map<string, CombatantId>;
|
|
187
|
+
// Party battle-rez coordination: corpse side → claimer side. One Rebirth per corpse, so N druids stand up
|
|
188
|
+
// N bodies instead of racing for one.
|
|
189
|
+
rezClaim: Map<CombatantId, CombatantId>;
|
|
190
|
+
|
|
191
|
+
// ---- focus / AI ----
|
|
192
|
+
aiPlayer: boolean;
|
|
193
|
+
/** Player focus combatant id. */
|
|
194
|
+
playerFocus: CombatantId;
|
|
195
|
+
/** Player focus Fighter (writable; side is mirrored via playerFocus). */
|
|
196
|
+
playerFocusFighter: Fighter;
|
|
197
|
+
/** Warlock soul shards gained this fight (checkDeaths). */
|
|
198
|
+
soulShardsGained: number;
|
|
199
|
+
// Last non-aura/resource event time (ms). Kept for diagnostics; fights no longer abort because nothing
|
|
200
|
+
// has swung.
|
|
201
|
+
lastActionT: number;
|
|
202
|
+
/** Rows discarded by the session event ring (MAX_SESSION_EVENTS trim). */
|
|
203
|
+
eventsDropped: number;
|
|
204
|
+
// Damage can never kill this enemy (armed SetDeathPrevention, or the UNKILLABLE static flag), so it is
|
|
205
|
+
// not a kill target while anything else in the pull is. Installed by sessionPools.
|
|
206
|
+
isUnkillableEnemy?: (f: Fighter) => boolean;
|
|
207
|
+
// Scripted-mechanic counts tallied at push time, so they survive the ring trim that drops the first
|
|
208
|
+
// minutes of a raid-length fight. Read out as `CombatResult.mechanics`.
|
|
209
|
+
mechanicTally?: Map<CombatEvent['kind'], { count: number; firstT: number; lastT: number }>;
|
|
210
|
+
// Damage landed per victim side, tallied at push time for the same reason as mechanicTally. Read out as
|
|
211
|
+
// `CombatResult.damageTakenBySide`; the domain buckets it by role.
|
|
212
|
+
damageTakenBySide?: Map<string, number>;
|
|
213
|
+
/** Deaths in order with their killing blow, push-time. Read out as `CombatResult.deaths`. */
|
|
214
|
+
deathRoll?: { side: Side; t: number; by?: Side; cause?: string }[];
|
|
215
|
+
/** Deaths counted including any the deathRoll cap dropped. */
|
|
216
|
+
deathsTotalOf?: () => number;
|
|
217
|
+
|
|
218
|
+
// Live floor hazards for THIS tick, pools and hazard bodies alike. One answer per fight per tick,
|
|
219
|
+
// because the avoid move and the proximity condition both ask and must not disagree.
|
|
220
|
+
hazardCache?: { t: number; list: readonly Hazard[] };
|
|
221
|
+
motionClaims?: MotionClaims;
|
|
222
|
+
/** Which gate resolved each unit's motion last tick (sessionMotion). Diagnosis only. */
|
|
223
|
+
motionGates?: MotionGates;
|
|
224
|
+
unitMoveOrders?: Map<string, CombatPosYd[]>;
|
|
225
|
+
unitMoveIntents?: Map<string, CombatPosYd>;
|
|
226
|
+
unitManualMotion?: Set<string>;
|
|
227
|
+
/** Player "go here" dests — AI must not drop them to start a cast-time spell. */
|
|
228
|
+
unitHoldCourse?: Set<string>;
|
|
229
|
+
/** Split-now / own-slot dests — do not follow the player's corridor. */
|
|
230
|
+
unitDirectMove?: Set<string>;
|
|
231
|
+
// Which sides the player drives as ONE unit — the `partyFollowYd` bubble only tows a member in here
|
|
232
|
+
// alongside the player's own body. Unset means every side, which is what a bare session opens with.
|
|
233
|
+
followGroupSides?: Set<string>;
|
|
234
|
+
unitStance?: Map<string, 'retaliate' | 'passive' | 'hold' | 'patrol'>;
|
|
235
|
+
unitPatrolLoop?: Map<string, CombatPosYd[]>;
|
|
236
|
+
unitAnchors?: Map<string, CombatPosYd>;
|
|
237
|
+
// Where each enemy walks back to when it evades: its combat-start position, else the spawn coord it
|
|
238
|
+
// was injected at. Cite: HomeMovementGenerator.cpp:40-52; UnitAI.cpp:113-130.
|
|
239
|
+
enemyHomeYd?: Map<string, CombatPosYd>;
|
|
240
|
+
// ORDERED cast list per friendly seat, written by queueUnitCast and consumed head-first. It replaced
|
|
241
|
+
// ONE slot per unit, which a Pre-buff order faked on a wall clock and landed every cast twice.
|
|
242
|
+
unitCastOrders?: Map<Side, QueuedCast[]>;
|
|
243
|
+
castTargetOverride?: Map<Side, { spellId: number; side: EnemySide }>;
|
|
244
|
+
/** This-tick dest for a ground-targeted player cast (Blizzard / RoF). Copied onto Fighter.castDest at startOrCast. */
|
|
245
|
+
castDestOverride?: Map<Side, { spellId: number; dest: CombatPosYd }>;
|
|
246
|
+
// One-shot per-tick aim from a `target: 'other'` rule. Written by pickAction or the live-player tick wrap
|
|
247
|
+
// (CombatAction.offTarget); consumed by the scheduler this tick.
|
|
248
|
+
rotationOffTarget?: Map<Side, EnemySide>;
|
|
249
|
+
/** Same selector as offTargetSpell / `target: 'other'` (pickAction pickCcTarget). */
|
|
250
|
+
pickCcTarget?: (f: Fighter, focus: Fighter | null, spell?: SpellDef) => Fighter | null;
|
|
251
|
+
/** Clear pull-sequence spent sets when no combat hostiles remain (P11 step wrap). */
|
|
252
|
+
clearPullSpentIfIdle?: () => void;
|
|
253
|
+
/** Drop this unit's pull spent (Feign Death CombatStop → next opener). */
|
|
254
|
+
clearPullSpentFor?: (side: Side) => void;
|
|
255
|
+
|
|
256
|
+
// ---- hub / leaf methods (assigned by peels + assembler) ----
|
|
257
|
+
push: (e: CombatEvent) => void;
|
|
258
|
+
fightersOrder: () => Fighter[];
|
|
259
|
+
/** E7: inject/totem — composition of fightersOrder changed. */
|
|
260
|
+
bumpRoster?: () => void;
|
|
261
|
+
// Roster membership writers (E1.1). Seat and generation together - never `enemies.push` plus a
|
|
262
|
+
// `bumpRoster` the caller has to remember. `idx` past the end appends.
|
|
263
|
+
rosterSeatEnemy?: (side: EnemySide, f: Fighter) => void;
|
|
264
|
+
rosterSeatAlly?: (side: Side, f: Fighter) => void;
|
|
265
|
+
// The seat an inject should take: the first DEAD seat in the block the request accepts, else the
|
|
266
|
+
// next ordinal, else null when the block is at cap. Off the store, so it is no longer a findIndex.
|
|
267
|
+
freeSeatIn?: (
|
|
268
|
+
isBlock: (s: Side) => boolean,
|
|
269
|
+
nameAt: (i: number) => Side,
|
|
270
|
+
want: (f: Fighter) => boolean,
|
|
271
|
+
cap: number,
|
|
272
|
+
) => Side | null;
|
|
273
|
+
rosterSetTotem?: (side: TotemSide, f: Fighter) => void;
|
|
274
|
+
rosterClearTotem?: (side: TotemSide) => void;
|
|
275
|
+
/** The seat a world id occupies, off the guid index the one writer maintains. E1.2. */
|
|
276
|
+
unitByGuid?: (guid: number) => Fighter | undefined;
|
|
277
|
+
/** Record or clear a seat's world id in that index. Null clears every id for the seat. */
|
|
278
|
+
noteUnitGuid?: (side: Side, guid: number | null) => void;
|
|
279
|
+
/** E7: death/charm — friendly/hostile pool membership changed. */
|
|
280
|
+
bumpPool?: () => void;
|
|
281
|
+
bySide: (s: Side) => Fighter;
|
|
282
|
+
/** bySide without the player/enemy miss fallbacks — undefined when the side is off-roster. */
|
|
283
|
+
sideFighter?: (s: Side) => Fighter | undefined;
|
|
284
|
+
/** Player + pet + companions in turn order, memoized on roster gen (E1.1). */
|
|
285
|
+
partyUnits: () => readonly Fighter[];
|
|
286
|
+
// EVERY seat this session holds, alive or dead, totems included. The turn-order list drops a dead
|
|
287
|
+
// totem, but a per-unit SWEEP wants those too, and four sweeps hand-walked the seat fields instead.
|
|
288
|
+
allSeats: () => readonly Fighter[];
|
|
289
|
+
// One block's seats, alive or dead, in turn order (E1.1) - the answer between `allSeats()` and
|
|
290
|
+
// `livingEnemies` / `livingAllies`, for the sweeps that act ON a corpse.
|
|
291
|
+
enemyBlock: () => readonly Fighter[];
|
|
292
|
+
allyBlock: () => readonly Fighter[];
|
|
293
|
+
factionOf: (side: Side) => 'player' | 'enemy';
|
|
294
|
+
factionOfFighter: (f: Fighter) => 'player' | 'enemy';
|
|
295
|
+
livingHostilesFor: (f: Fighter) => Fighter[];
|
|
296
|
+
livingFriendlies: () => Fighter[];
|
|
297
|
+
// Living ALLY seats, the twin of `livingEnemies` (E1.1). Liveness only - no charm filter, which is what
|
|
298
|
+
// separates it from `livingFriendlies`, the targeting pool.
|
|
299
|
+
livingAllies: () => Fighter[];
|
|
300
|
+
friendlyPoolOf: (f: Fighter) => Fighter[];
|
|
301
|
+
/** Lowest-HP% living free unit on `f`'s faction (heal triage for player or enemy pack). */
|
|
302
|
+
lowestHpFriendlyOf: (f: Fighter) => Fighter | null;
|
|
303
|
+
foePoolOf: (f: Fighter) => Fighter[];
|
|
304
|
+
livingEnemies: () => Fighter[];
|
|
305
|
+
// Living enemies that are free-fire for party AI / multi counts / social pulse. Endless floor: threat
|
|
306
|
+
// table or explicit click only — not the whole 48 yd passive stream. Non-endless: same as livingEnemies.
|
|
307
|
+
livingCombatEnemies: () => Fighter[];
|
|
308
|
+
/** Pull-sequence spent ids for one unit, maintained on push (never rescanned). */
|
|
309
|
+
pullSpentSpellsFor: (side: Side) => ReadonlySet<number>;
|
|
310
|
+
pullSpentItemsFor: (side: Side) => ReadonlySet<number>;
|
|
311
|
+
isCharmed: (f: Fighter) => boolean;
|
|
312
|
+
/** Installed by pickAction.ts:2827, so absent until that install runs. */
|
|
313
|
+
livingPetOf?: (f: Fighter) => Fighter | null;
|
|
314
|
+
isUnattackable: (f: Fighter, observer?: Fighter | null) => boolean;
|
|
315
|
+
threatOf: (owner: CombatantId | Fighter) => ThreatManager | undefined;
|
|
316
|
+
distanceBetween: (a: Fighter, b: Fighter) => number | undefined;
|
|
317
|
+
posOf: (side: Side | string) => CombatPosYd | undefined;
|
|
318
|
+
setPos: (side: Side | string, p: CombatPosYd) => void;
|
|
319
|
+
// Is this unit under way right now? True for one tick after a position write that carried a heading.
|
|
320
|
+
// Combat movement here is always run speed, so this doubles as "not walking".
|
|
321
|
+
isMoving: (side: Side | string) => boolean;
|
|
322
|
+
// Heading in radians this unit is facing, or undefined when the session has no geometry. Cite:
|
|
323
|
+
// engine/combat/facing.ts facingFrom.
|
|
324
|
+
facingOf: (f: Fighter) => number | undefined;
|
|
325
|
+
// WorldObject::HasInArc(other, π) on `observer`'s heading — "is `other` in my front half". True when the
|
|
326
|
+
// session has no geometry, so a positionless fight is unchanged. Cite: Object.cpp:1515-1535.
|
|
327
|
+
isInFrontArc: (observer: Fighter, other: Fighter) => boolean;
|
|
328
|
+
// `IsFacingTargetsBack` — both arc tests, or null when this session has no geometry for one of the two
|
|
329
|
+
// units. Null is the signal to fall back to the non-spatial behind proxy. Cite: Object.cpp:1542-1556.
|
|
330
|
+
facingTargetsBack?: (self: Fighter, target: Fighter) => boolean | null;
|
|
331
|
+
/** `IsFacingTargetsFront` — both arc tests true, null without geometry. Cite: Object.cpp:1558. */
|
|
332
|
+
facingTargetsFront?: (self: Fighter, target: Fighter) => boolean | null;
|
|
333
|
+
/** Snap combat-yard point to navmesh (sessionGeometry). */
|
|
334
|
+
snapToMesh?: (pos: CombatPosYd, radiusYd: number, refZ?: number | null) => CombatPosYd | null;
|
|
335
|
+
// The one "go here" issuer. Finds a corridor, seeds the follower, sets the move order. Floor clicks,
|
|
336
|
+
// kill-target, and gap-close approach all go through this.
|
|
337
|
+
pathTo?: (
|
|
338
|
+
side: string,
|
|
339
|
+
dest: CombatPosYd,
|
|
340
|
+
opts?: {
|
|
341
|
+
queue?: boolean;
|
|
342
|
+
keepFocus?: boolean;
|
|
343
|
+
worldPts?: Array<{ x: number; y: number; z?: number }>;
|
|
344
|
+
viaMesh?: boolean;
|
|
345
|
+
standShortYd?: number;
|
|
346
|
+
holdCourse?: boolean;
|
|
347
|
+
direct?: boolean;
|
|
348
|
+
owner?: MotionOwner;
|
|
349
|
+
},
|
|
350
|
+
) => boolean;
|
|
351
|
+
/** Enemy spawn placement with ENEMY_SNAP_YD (sessionGeometry). */
|
|
352
|
+
placeEnemyAt?: (pos: CombatPosYd) => CombatPosYd;
|
|
353
|
+
/** Drop this side's cached corridor / stuck state after a teleport (sessionMotion). */
|
|
354
|
+
clearMotionCaches?: (side: string) => void;
|
|
355
|
+
|
|
356
|
+
// sessionPools helpers (also used by focus/deaths peels later)
|
|
357
|
+
enemyHasThreat?: (ef: Fighter) => boolean;
|
|
358
|
+
allEnemiesDead?: () => boolean;
|
|
359
|
+
partyWiped?: () => boolean;
|
|
360
|
+
nativeFactionOf?: (side: Side) => 'player' | 'enemy';
|
|
361
|
+
preferFocusHostile?: (hostiles: Fighter[], from?: Fighter) => Fighter | null;
|
|
362
|
+
// Team match only (`cfg.reacquireOnEmptyThreat`): re-open every empty-list enemy on the nearest
|
|
363
|
+
// living hostile. Returns how many re-opened. Cite: sessionFocus.ts reacquireEmptyThreat.
|
|
364
|
+
reacquireEmptyThreat?: () => number;
|
|
365
|
+
lowestHpFriendly?: () => Fighter | null;
|
|
366
|
+
freeFireHostilesFor?: (f: Fighter) => Fighter[];
|
|
367
|
+
|
|
368
|
+
// sessionFocus (P4)
|
|
369
|
+
ensurePlayerFocus?: () => Fighter;
|
|
370
|
+
foeOf?: (f: Fighter) => Fighter;
|
|
371
|
+
/** Defender-side talent procs (dodge / resist). Cite: Rogue.cpp SetupRogue. */
|
|
372
|
+
triggerTakenProcs?: (
|
|
373
|
+
victim: Fighter,
|
|
374
|
+
attacker: Fighter,
|
|
375
|
+
outcome: 'dodge' | 'parry' | 'block' | 'resist',
|
|
376
|
+
flagsHint: import('../spells/procs.ts').ProcFlagsHint,
|
|
377
|
+
) => void;
|
|
378
|
+
hostileTargetOf?: (enemyF: Fighter) => Fighter;
|
|
379
|
+
nearestPartyInAcquire?: (enemySide: string) => CombatantId | null;
|
|
380
|
+
fighterByThreatId?: (id: CombatantId | null) => Fighter | null;
|
|
381
|
+
selectTargetLookup?: (caster: Fighter) => (id: string) => Fighter | null;
|
|
382
|
+
selectTargetCtxFor?: (caster: Fighter, spellId?: number, selectClass?: number) => ReturnType<typeof import('./aiTargetResolve.ts').buildSelectTargetCtx>;
|
|
383
|
+
resolveEventAiTargetFighter?: (summoner: Fighter, targetSel: number) => Fighter;
|
|
384
|
+
// resolveEventAiCastTarget typed below with eventAi surface
|
|
385
|
+
|
|
386
|
+
// sessionDeaths (P5)
|
|
387
|
+
unsummonTotem?: (side: TotemSide, reason: 'expire' | 'death' | 'replace' | 'owner' | 'zone') => void;
|
|
388
|
+
/** Every totem `owner` holds, or the whole session's when owner is omitted (zone change). */
|
|
389
|
+
unsummonAllTotems?: (reason: 'owner' | 'expire' | 'zone', owner?: Side) => void;
|
|
390
|
+
checkDeaths?: () => void;
|
|
391
|
+
|
|
392
|
+
// aoeCast (P7)
|
|
393
|
+
castOnTargets?: (src: Fighter, primaryTgt: Fighter, spell: SpellDef) => void;
|
|
394
|
+
aoeUnitInRadius?: (
|
|
395
|
+
src: Fighter,
|
|
396
|
+
primaryTgt: Fighter,
|
|
397
|
+
other: Fighter,
|
|
398
|
+
spell: SpellDef,
|
|
399
|
+
) => boolean;
|
|
400
|
+
selectAoeSecondaries?: (
|
|
401
|
+
src: Fighter,
|
|
402
|
+
primaryTgt: Fighter,
|
|
403
|
+
spell: SpellDef,
|
|
404
|
+
pool: Fighter[],
|
|
405
|
+
totalCap: number | null,
|
|
406
|
+
) => Fighter[];
|
|
407
|
+
|
|
408
|
+
// itemUse (P8)
|
|
409
|
+
useItem?: (entry: number, targetId?: CombatantId, actor?: Side) => boolean;
|
|
410
|
+
resolveItemTarget?: (targetId: CombatantId) => Fighter | null;
|
|
411
|
+
|
|
412
|
+
// sessionView (P9)
|
|
413
|
+
view?: (f: Fighter) => CombatantView;
|
|
414
|
+
/** `view(f).debuffs` alone, without building the rest of the view. Installed with `view`. */
|
|
415
|
+
debuffChipsOf?: (f: Fighter) => Array<{ spellId: number; remainingMs?: number; stacks?: number; charges?: number }>;
|
|
416
|
+
invalidateViewMemo?: () => void;
|
|
417
|
+
|
|
418
|
+
// powerForm (P6)
|
|
419
|
+
spend?: (
|
|
420
|
+
f: Fighter,
|
|
421
|
+
amount: number,
|
|
422
|
+
pt?: import('../../data/schema.ts').PowerType,
|
|
423
|
+
spell?: SpellDef,
|
|
424
|
+
) => void;
|
|
425
|
+
/** 80% power back on MISS / DODGE / PARRY / DEFLECT. Cite: Spell.cpp:3647-3663. */
|
|
426
|
+
refundPowerOnMiss?: (f: Fighter, spell: SpellDef, outcome: string) => void;
|
|
427
|
+
// MeleeSpellHitResult for a melee-class spell with no weapon damage; weapon.ts installs it.
|
|
428
|
+
meleeSpellHitResult?: (
|
|
429
|
+
src: Fighter,
|
|
430
|
+
tgt: Fighter,
|
|
431
|
+
spell: SpellDef,
|
|
432
|
+
mechanicResistPct: number,
|
|
433
|
+
) => { result: HitResult | 'resist'; failPct: number };
|
|
434
|
+
spellCost?: (f: Fighter, spell: SpellDef) => number;
|
|
435
|
+
canAffordSpell?: (f: Fighter, spell: SpellDef) => boolean;
|
|
436
|
+
enterForm?: (f: Fighter, form: ShapeshiftFormId, spellName: string, spellId?: number) => void;
|
|
437
|
+
applyStealth?: (
|
|
438
|
+
f: Fighter,
|
|
439
|
+
strength: number,
|
|
440
|
+
durationMs: number,
|
|
441
|
+
breakFlags: number | undefined,
|
|
442
|
+
spell: SpellDef,
|
|
443
|
+
) => void;
|
|
444
|
+
/** Player-only; clears Stealth CD then recasts highest learned rank. Cite: Rogue.cpp:61–77. */
|
|
445
|
+
castHighestStealthRank?: (caster: Fighter) => void;
|
|
446
|
+
maybeBreakStealthOn?: (f: Fighter, flag: number, reason: string) => void;
|
|
447
|
+
behindOk?: (caster: Fighter, target: Fighter) => boolean;
|
|
448
|
+
gainRage?: (f: Fighter, amount: number) => void;
|
|
449
|
+
regenRage?: (f: Fighter, dt: number) => void;
|
|
450
|
+
regenEnergy?: (f: Fighter, dt: number) => void;
|
|
451
|
+
regenMana?: (f: Fighter, dt: number) => void;
|
|
452
|
+
regenFocus?: (f: Fighter, dt: number) => void;
|
|
453
|
+
/** SPELL_AURA_MOD_REGEN_DURING_COMBAT spirit HP regen. Cite: Player.cpp:2389–2399; KI-898. */
|
|
454
|
+
regenHealth?: (f: Fighter, dt: number) => void;
|
|
455
|
+
addComboPoints?: (f: Fighter, target: Fighter, count: number) => void;
|
|
456
|
+
clearComboPoints?: (f: Fighter) => void;
|
|
457
|
+
comboOn?: (f: Fighter, tgt: Fighter) => number;
|
|
458
|
+
scaleDurationByCp?: (baseMs: number, maxMs: number | undefined, cp: number) => number;
|
|
459
|
+
rollHeal?: (healer: Fighter, min: number, max: number) => { amount: number; crit: boolean };
|
|
460
|
+
|
|
461
|
+
// sessionInject
|
|
462
|
+
injectEnemySpec?: (
|
|
463
|
+
raw: import('./types.ts').CombatantSpec,
|
|
464
|
+
opts?: {
|
|
465
|
+
summonerSide?: Side;
|
|
466
|
+
creatureId?: number;
|
|
467
|
+
position?: CombatPosYd;
|
|
468
|
+
passive?: boolean;
|
|
469
|
+
/** Forced seat (tick seam). Throws when it holds a living unit. */
|
|
470
|
+
side?: string;
|
|
471
|
+
},
|
|
472
|
+
) => Fighter | null;
|
|
473
|
+
injectEnemySummon?: (
|
|
474
|
+
summoner: Fighter,
|
|
475
|
+
creatureId: number,
|
|
476
|
+
durationMs: number,
|
|
477
|
+
worldPos?: SummonWorldPoint,
|
|
478
|
+
opts?: { attackStart?: boolean },
|
|
479
|
+
) => Fighter | null;
|
|
480
|
+
/** Ally-seat body from a spec — the friendly half of injectEnemySpec (AV's own guards). */
|
|
481
|
+
injectAllySpec?: (
|
|
482
|
+
raw: import('./types.ts').CombatantSpec,
|
|
483
|
+
opts?: { ownerSide?: Side; position?: CombatPosYd; side?: string },
|
|
484
|
+
) => Fighter | null;
|
|
485
|
+
/** Ally-seat summon for a player/ally/pet caster. Cite: SpellEffects.cpp AddGuardian. */
|
|
486
|
+
injectFriendlySummon?: (
|
|
487
|
+
summoner: Fighter,
|
|
488
|
+
creatureId: number,
|
|
489
|
+
durationMs: number,
|
|
490
|
+
worldPos?: SummonWorldPoint,
|
|
491
|
+
) => Fighter | null;
|
|
492
|
+
/** Side-routing entry point: the summon lands on the summoner's live faction. */
|
|
493
|
+
injectSummonForCaster?: (
|
|
494
|
+
summoner: Fighter,
|
|
495
|
+
creatureId: number,
|
|
496
|
+
durationMs: number,
|
|
497
|
+
worldPos?: SummonWorldPoint,
|
|
498
|
+
) => Fighter | null;
|
|
499
|
+
/** Per-tick TEMPSPAWN expiry for ally-seat summons. Cite: SpellEffects.cpp:2765. */
|
|
500
|
+
expireFriendlySummons?: () => void;
|
|
501
|
+
/** Re-cast replace: drop this owner's guardians of one entry. Cite: SpellEffects.cpp:2839. */
|
|
502
|
+
unsummonFriendlyGuardians?: (
|
|
503
|
+
owner: Fighter,
|
|
504
|
+
creatureId: number,
|
|
505
|
+
createdBySpell: number,
|
|
506
|
+
) => number;
|
|
507
|
+
summonPositionFor?: (
|
|
508
|
+
summoner: Fighter,
|
|
509
|
+
worldPos?: SummonWorldPoint,
|
|
510
|
+
) => { position: CombatPosYd } | null;
|
|
511
|
+
forceDespawnEnemy?: (ef: Fighter) => void;
|
|
512
|
+
runScriptDevAggroLifecycle?: (ef: Fighter) => void;
|
|
513
|
+
/** Fire onAggro for watched sides that have since entered combat (floor spawns). */
|
|
514
|
+
pumpScriptDevAggroLifecycle?: () => void;
|
|
515
|
+
|
|
516
|
+
// leaf peels
|
|
517
|
+
dispelTypeOfSpell?: (spellId: number) => number;
|
|
518
|
+
/** Guard for the whole dispel pass — false skips every per-ally per-category scan. */
|
|
519
|
+
anyDispellableEffect?: () => boolean;
|
|
520
|
+
/** True when `spell`'s own MECHANIC_IMMUNITY purges every hard control blocking `f`. */
|
|
521
|
+
spellCancelsOwnControl?: (f: Fighter, spell: SpellDef) => boolean;
|
|
522
|
+
dispellableAurasOn?: (unit: Fighter, mask: number, friendlyDispel: boolean) => ActiveEffect[];
|
|
523
|
+
// Spell ids a raid keep-row forbids auto-dispelling. pickAction fills this each tick from keepAuraIdsOf
|
|
524
|
+
// on every live rotation provider. Absent → none skipped.
|
|
525
|
+
keepAuraSpellIds?: ReadonlySet<number>;
|
|
526
|
+
reflectChanceFor?: (unit: Fighter, school: School) => number;
|
|
527
|
+
reverseActiveEffect?: (unit: Fighter, e: ActiveEffect) => void;
|
|
528
|
+
stripAuraOnDispel?: (unit: Fighter, spellId: number, count: number) => void;
|
|
529
|
+
removeAllAurasOnDeath?: (unit: Fighter) => void;
|
|
530
|
+
removeAurasDueToSpell?: (unit: Fighter, spellId: number) => number;
|
|
531
|
+
/** Run an aura row's removal bodies (HandleAuraDummy apply=false). See dispelReflect.ts. */
|
|
532
|
+
fireAuraRemoveBodies?: (
|
|
533
|
+
e: ActiveEffect,
|
|
534
|
+
mode: 'expire' | 'death' | 'dispel' | 'cancel',
|
|
535
|
+
) => void;
|
|
536
|
+
resolveDispelTarget?: (
|
|
537
|
+
src: Fighter,
|
|
538
|
+
requestedTgt: Fighter,
|
|
539
|
+
dispelType: number,
|
|
540
|
+
) => { unit: Fighter; friendlyDispel: boolean } | null;
|
|
541
|
+
/** One aura-23 totem pulse onto the totem's party (cleansers / Tremor / Stoneclaw threat). */
|
|
542
|
+
firePartyTotemPulse?: (totem: Fighter, trig: SpellDef) => void;
|
|
543
|
+
/** Record totem→owner for DPSMate merge (survives UnSummon). */
|
|
544
|
+
noteTotemOwner?: (side: TotemSide, owner: Side, name: string) => void;
|
|
545
|
+
|
|
546
|
+
/** Is this control live on the unit right now? Cite: Unit.h:2276 IsCrowdControlled. */
|
|
547
|
+
controlActive?: (f: Fighter, control: ControlKind) => boolean;
|
|
548
|
+
breakControl?: (f: Fighter, control: ControlKind) => void;
|
|
549
|
+
breakCharm?: (f: Fighter) => void;
|
|
550
|
+
/** Holding CC our own damage would shatter (poly/sap/gouge/shackle/blind) — not stun/fear. */
|
|
551
|
+
ccProtected?: (f: Fighter) => boolean;
|
|
552
|
+
/** One heartbeat-resist pass over the armed holders. Cite: heartbeatResist.ts. */
|
|
553
|
+
tickHeartbeatResists?: () => void;
|
|
554
|
+
// creature_template_classlevelstats BaseDamage lookup, injected from CombatConfig for
|
|
555
|
+
// SPELL_ATTR_SCALES_WITH_CREATURE_LEVEL. Absent = creature spells keep their baked numbers.
|
|
556
|
+
creatureBaseDamageAt?: (level: number, unitClass: number) => number | undefined;
|
|
557
|
+
/** Rank-chain lookup for aura identity. Cite: dataStore.spellChain. */
|
|
558
|
+
spellChainOf?: (spellId: number) => { first: number; rank: number } | undefined;
|
|
559
|
+
/** Spell 1604 Dazed. Cite: Unit.cpp:2227. */
|
|
560
|
+
dazeSpell?: SpellDef;
|
|
561
|
+
// `SpellEntry.AuraInterruptFlags` by spell id, for holders whose SpellDef is not in hand. Absent = no
|
|
562
|
+
// generic interrupt removal (stealth still breaks off its own breakFlags). Cite: SpellDefines.h:360-386.
|
|
563
|
+
auraInterruptFlagsOf?: (spellId: number) => number;
|
|
564
|
+
// Global spell store injected from CombatConfig, for a triggered payload that sits in no kit. Absent =
|
|
565
|
+
// kit membership only (fixtures). Cite: Unit.cpp:1447-1449.
|
|
566
|
+
spellOf?: (id: number) => SpellDef | undefined;
|
|
567
|
+
// Unit::RemoveAurasWithInterruptFlags — drop every holder on `f` carrying one of `flags`. Cite:
|
|
568
|
+
// Unit.cpp:5197-5209; engine/combat/interruptAuras.ts.
|
|
569
|
+
removeAurasWithInterruptFlags?: (f: Fighter, flags: number, reason: string, opts?: { skipStealth?: boolean; exceptSpellId?: number; skipInvisibility?: boolean }) => void;
|
|
570
|
+
applyControl?: (
|
|
571
|
+
src: Fighter,
|
|
572
|
+
tgt: Fighter,
|
|
573
|
+
spell: SpellDef,
|
|
574
|
+
eff: { control: ControlKind; mechanic: Mechanic; school?: School; breakOnDamage?: boolean },
|
|
575
|
+
durMs: number,
|
|
576
|
+
/** Armed heartbeat-resist holder, when the spell carries SPELL_ATTR_HEARTBEAT_RESIST. */
|
|
577
|
+
heartbeat?: import('./heartbeatResist.ts').HeartbeatHolder | null,
|
|
578
|
+
) => void;
|
|
579
|
+
// Where this caster's seat for a tracked single-target aura currently sits (empty when free), and
|
|
580
|
+
// the move that drops it elsewhere. Cite: Unit.cpp:4774-4830; SpellMgr.h:2230.
|
|
581
|
+
trackedAuraSeats?: (src: Fighter, spell: SpellDef) => { side: Side; spellId: number }[];
|
|
582
|
+
purgeTrackedAuraTargets?: (src: Fighter, tgt: Fighter, spell: SpellDef) => number;
|
|
583
|
+
applyDr?: (src: Fighter, tgt: Fighter, mechanic: Mechanic, baseMs: number) => number;
|
|
584
|
+
ccImmune?: (tgt: Fighter, mechanic: Mechanic, onlyTypes?: number[]) => boolean;
|
|
585
|
+
// The DealDamage interrupt bag: `absorbed` is the school or mana absorb on this packet, and the skip
|
|
586
|
+
// flag is the damage-shield and split case, where the C++ returns before the channel delay.
|
|
587
|
+
onDamaged?: (
|
|
588
|
+
f: Fighter,
|
|
589
|
+
amount: number,
|
|
590
|
+
damageType?: string,
|
|
591
|
+
fromSpellId?: number,
|
|
592
|
+
info?: { absorbed?: number; attacker?: Fighter; skipChannelDelay?: boolean },
|
|
593
|
+
) => void;
|
|
594
|
+
// After a heal lands. Twin Emperors HealedBy gets pre-clamp addhealth. Cite: Unit.cpp:6889;
|
|
595
|
+
// boss_twinemperors.cpp:113-125.
|
|
596
|
+
onHealed?: (f: Fighter, amount: number, fromSpellId?: number) => void;
|
|
597
|
+
/** Install damage/heal mirror onDamaged/onHealed wrappers. Cite: boss_twinemperors.cpp:96-125. */
|
|
598
|
+
ensureDamageHealMirrorHooks?: () => void;
|
|
599
|
+
|
|
600
|
+
applyDamageThreat?: (
|
|
601
|
+
dealer: Fighter | undefined,
|
|
602
|
+
victim: Fighter,
|
|
603
|
+
damage: number,
|
|
604
|
+
crit: boolean,
|
|
605
|
+
spell?: SpellDef | null,
|
|
606
|
+
) => void;
|
|
607
|
+
applyFlatThreat?: (
|
|
608
|
+
caster: Fighter,
|
|
609
|
+
amount: number,
|
|
610
|
+
spell?: SpellDef | null,
|
|
611
|
+
onEnemy?: Fighter,
|
|
612
|
+
) => void;
|
|
613
|
+
// Heal/buff assist threat. `healedSide` is the unit whose HostileRefManager owns the refs — omit for a
|
|
614
|
+
// self-heal or an energize, where the healer IS the healed unit. Cite: HostileRefManager.cpp:39-68.
|
|
615
|
+
applyHealThreat?: (
|
|
616
|
+
healer: Fighter,
|
|
617
|
+
amount: number,
|
|
618
|
+
spell?: SpellDef | null,
|
|
619
|
+
healedSide?: Side,
|
|
620
|
+
) => void;
|
|
621
|
+
applySpellThreatBonus?: (caster: Fighter, spell: SpellDef, onEnemy?: Fighter, hitCount?: number) => void;
|
|
622
|
+
/** Initial aggro from a resolved hostile action — hit, miss, resist, dodge or immune alike. */
|
|
623
|
+
engageOnHostileSpell?: (
|
|
624
|
+
caster: Fighter,
|
|
625
|
+
target: Fighter,
|
|
626
|
+
spell: SpellDef | null | undefined,
|
|
627
|
+
success: boolean,
|
|
628
|
+
melee?: boolean,
|
|
629
|
+
) => void;
|
|
630
|
+
isPlayerOrPetSide?: (f: Fighter) => boolean;
|
|
631
|
+
removeFromAllThreat?: (id: CombatantId) => void;
|
|
632
|
+
clearAllThreat?: () => void;
|
|
633
|
+
|
|
634
|
+
leaveForm?: (f: Fighter) => void;
|
|
635
|
+
breakStealth?: (f: Fighter, reason: string) => void;
|
|
636
|
+
dealDamage?: (
|
|
637
|
+
target: Fighter,
|
|
638
|
+
raw: number,
|
|
639
|
+
school: School,
|
|
640
|
+
attackerLevel: number,
|
|
641
|
+
opts?: {
|
|
642
|
+
binary?: boolean;
|
|
643
|
+
damageType?: 'spell' | 'dot' | 'weapon' | 'shield';
|
|
644
|
+
ranged?: boolean;
|
|
645
|
+
attacker?: Fighter;
|
|
646
|
+
spell?: SpellDef | null;
|
|
647
|
+
crit?: boolean;
|
|
648
|
+
},
|
|
649
|
+
) => number;
|
|
650
|
+
applySpell?: (src: Fighter, tgtIn: Fighter, spellIn: SpellDef, reflected?: boolean, hitCount?: number) => void;
|
|
651
|
+
consumePendingSpellMod?: (f: Fighter) => void;
|
|
652
|
+
pickAction?: (f: Fighter, foe: Fighter) => SpellDef | null;
|
|
653
|
+
/** Off-GCD next-swing queue (Cleave/HS/Maul) for party AI — see pickAction hub. */
|
|
654
|
+
pickNextSwingArm?: (f: Fighter, foe: Fighter) => SpellDef | null;
|
|
655
|
+
startOrCast?: (f: Fighter, foe: Fighter, spell: SpellDef) => void;
|
|
656
|
+
step?: (
|
|
657
|
+
action?: import('./types.ts').CombatAction,
|
|
658
|
+
inputs?: import('./types.ts').SimTickInputs,
|
|
659
|
+
) => CombatEvent[];
|
|
660
|
+
// The last `SimTickInputs` a caller supplied, held for the whole tick. Overwritten only when the
|
|
661
|
+
// caller passes one, so an internal step (runToEnd) keeps the game layer's last answer.
|
|
662
|
+
tickInputs?: import('./types.ts').SimTickInputs;
|
|
663
|
+
// Effects this tick RECORDED for the flush at the end of the step (S6b mechanism 1). Never read by
|
|
664
|
+
// the tick itself — a phase that needs the result must take it from `tickInputs` next step.
|
|
665
|
+
simEffects?: import('./simEffects.ts').SimEffect[];
|
|
666
|
+
/** True only while `ctx.step` runs, so an effect knows whether a flush is coming for it. */
|
|
667
|
+
inStep?: boolean;
|
|
668
|
+
/** Apply school/mechanic/dispel immunity aura (installCrowdControl). */
|
|
669
|
+
grantImmunityAura?: (
|
|
670
|
+
owner: Fighter,
|
|
671
|
+
aura: import('../spells/immunity.ts').ImmunityAura,
|
|
672
|
+
expiresAt: number,
|
|
673
|
+
name: string,
|
|
674
|
+
source: Side,
|
|
675
|
+
) => void;
|
|
676
|
+
// DropAuraCharge on a charged mechanic_immunity that just blocked this mechanic. Cite: SpellAuras.cpp
|
|
677
|
+
// DropAuraCharge; Fear Ward ProcCharges=1.
|
|
678
|
+
consumeChargedImmunityOnMechanicBlock?: (
|
|
679
|
+
owner: Fighter,
|
|
680
|
+
mechanic: import('../../data/schema.ts').Mechanic | string,
|
|
681
|
+
) => void;
|
|
682
|
+
applyEventAiIntent?: (summoner: Fighter, intent: EventAiIntent) => void;
|
|
683
|
+
runEnemyEventAi?: (ef: Fighter) => void;
|
|
684
|
+
// One-shot EventAI pulses for the events whose context field no polled build sets, so each gate was
|
|
685
|
+
// permanently false: 177 DB rows, 51 on census creatures. Death already worked this way.
|
|
686
|
+
notifyEventAiKill?: (killer: Fighter, victim?: Fighter) => void;
|
|
687
|
+
notifyEventAiSummoned?: (summoner: Fighter, summonedEntry: number, died: boolean) => void;
|
|
688
|
+
notifyEventAiSpellCast?: (caster: Fighter, spellId: number) => void;
|
|
689
|
+
notifyEventAiReachedHome?: (unit: Fighter) => void;
|
|
690
|
+
notifyEventAiOocLos?: (unit: Fighter) => void;
|
|
691
|
+
notifyEventAiDamageTaken?: (target: Fighter, healthBefore: number, damage: number) => void;
|
|
692
|
+
/** CreatureEventAI::HealedBy full-heal throw. Cite: CreatureEventAI.cpp:1885–1895. */
|
|
693
|
+
notifyEventAiHealedBy?: (target: Fighter, healthBefore: number, healedAmount: number) => void;
|
|
694
|
+
/** ScriptDevTimer.actions after CAST_OK (Yauj Fear → DoResetThreat; Gate 23138 → SendAIEvent). */
|
|
695
|
+
applyScriptDevTimerActions?: (ef: Fighter, spellId: number, target?: Fighter) => void;
|
|
696
|
+
/** ScriptDev send_ai_event / receive actions (death + tick). */
|
|
697
|
+
applyScriptDevCombatActions?: (
|
|
698
|
+
ef: Fighter,
|
|
699
|
+
actions: readonly import('../../domain/scriptdev/types.ts').ScriptDevAction[],
|
|
700
|
+
) => void;
|
|
701
|
+
// ScriptDev CreatureAI::SpellHit for the unit a spell was delivered to. Cite: Spell.cpp:1345;
|
|
702
|
+
// domain/scriptdev host handleSpellHit.
|
|
703
|
+
runScriptDevSpellHit?: (tgt: Fighter, caster: Fighter, spellId: number) => void;
|
|
704
|
+
/** Viscidus frost/melee hit-count. Cite: boss_viscidus.cpp:295-331,552-565,422-428. */
|
|
705
|
+
notifyScriptDevHitCount?: (target: Fighter, opts: { school: string; melee: boolean }) => void;
|
|
706
|
+
// Periodic stealth detect sweep (stealthDetect.ts). Self-timed: safe to call every tick. Cite:
|
|
707
|
+
// Player.cpp:1538-1550 m_DetectInvTimer.
|
|
708
|
+
stealthDetectPhase?: () => void;
|
|
709
|
+
/** Drop Possess Inv (17250) when the charmer has no living victim. */
|
|
710
|
+
dropIdlePossessInv?: () => void;
|
|
711
|
+
/** EventAI / spell-list cast-target resolution (createSession closure; used by stepSession). */
|
|
712
|
+
resolveEventAiCastTarget?: (
|
|
713
|
+
caster: Fighter,
|
|
714
|
+
spell: SpellDef,
|
|
715
|
+
mode: number,
|
|
716
|
+
source?: 'eventai' | 'spell_list',
|
|
717
|
+
selectClass?: number,
|
|
718
|
+
/** Friendly-searcher range gate. Cite: UnitAI.cpp:764-771; boss_bug_trio.cpp:371 50.0f. */
|
|
719
|
+
friendlyMaxRangeYd?: number,
|
|
720
|
+
/** SELECT_FLAG_IN_MELEE_RANGE. Cite: boss_twinemperors.cpp:256. */
|
|
721
|
+
requireInMelee?: boolean,
|
|
722
|
+
) => Fighter | null;
|
|
723
|
+
/** SCHEME_HIGHEST_HP among the first N threat entries in melee. Cite: boss_patchwerk.cpp:114-127. */
|
|
724
|
+
resolveHighestHpTopThreat?: (caster: Fighter, topN: number) => Fighter | null;
|
|
725
|
+
// DoSelectLowestHpFriendly. Cite: UnitAI.cpp; boss_sulfuron_harbinger.cpp:162.
|
|
726
|
+
resolveLowestHpFriendly?: (caster: Fighter, radiusYd: number, minDeficit: number) => Fighter | null;
|
|
727
|
+
|
|
728
|
+
// allow additional peels to hang methods without widening this type every time
|
|
729
|
+
[key: string]: unknown;
|
|
730
|
+
}
|