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,446 @@
|
|
|
1
|
+
// Class and utility macro templates for the editor's Templates picker. Pure data: the documented
|
|
2
|
+
// vanilla and Roid macros, rewritten only where the shipped parser would reject the published text.
|
|
3
|
+
|
|
4
|
+
import { CLASS } from '../../data/schema.ts';
|
|
5
|
+
import { parseMacroBody } from './parse.ts';
|
|
6
|
+
import { sanitizeMacroName } from './normalize.ts';
|
|
7
|
+
import { validateMacroProgram } from './conditions.ts';
|
|
8
|
+
import { MACRO_NAME_MAX } from './types.ts';
|
|
9
|
+
|
|
10
|
+
export type MacroTemplateTag =
|
|
11
|
+
| 'combat'
|
|
12
|
+
| 'emergency'
|
|
13
|
+
| 'mouseover'
|
|
14
|
+
| 'downrank'
|
|
15
|
+
| 'pet'
|
|
16
|
+
| 'slots'
|
|
17
|
+
| 'sequence'
|
|
18
|
+
| 'pipeline';
|
|
19
|
+
|
|
20
|
+
export const MACRO_TEMPLATE_TAG_LABEL: Readonly<Record<MacroTemplateTag, string>> = {
|
|
21
|
+
combat: 'Combat & Stances',
|
|
22
|
+
emergency: 'Emergency & Panic',
|
|
23
|
+
mouseover: 'Mouseover & Healing',
|
|
24
|
+
downrank: 'Smart Downranking',
|
|
25
|
+
pet: 'Pet Control',
|
|
26
|
+
slots: 'Slots & Gear',
|
|
27
|
+
sequence: 'Priority Sequences',
|
|
28
|
+
pipeline: 'Advanced Pipelines',
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const MACRO_TEMPLATE_TAGS: readonly MacroTemplateTag[] = [
|
|
32
|
+
'combat', 'emergency', 'mouseover', 'downrank', 'pet', 'slots', 'sequence', 'pipeline',
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
export type MacroTemplateScope = 'class' | 'general' | 'all';
|
|
36
|
+
|
|
37
|
+
export interface MacroTemplate {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
icon: string;
|
|
41
|
+
/** Empty = General / Utility. Hamstring is warrior + druid, etc. */
|
|
42
|
+
classes: readonly number[];
|
|
43
|
+
tags: readonly MacroTemplateTag[];
|
|
44
|
+
description: string;
|
|
45
|
+
body: string;
|
|
46
|
+
/** Other template ids created with this one so `{Name}` calls resolve. */
|
|
47
|
+
nest?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type MacroTemplateCompat = {
|
|
51
|
+
kind: 'auto' | 'manual';
|
|
52
|
+
label: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const W = CLASS.WARRIOR;
|
|
56
|
+
const L = CLASS.PALADIN;
|
|
57
|
+
const H = CLASS.HUNTER;
|
|
58
|
+
const R = CLASS.ROGUE;
|
|
59
|
+
const P = CLASS.PRIEST;
|
|
60
|
+
const S = CLASS.SHAMAN;
|
|
61
|
+
const M = CLASS.MAGE;
|
|
62
|
+
const K = CLASS.WARLOCK;
|
|
63
|
+
const D = CLASS.DRUID;
|
|
64
|
+
|
|
65
|
+
function t(
|
|
66
|
+
id: string,
|
|
67
|
+
name: string,
|
|
68
|
+
icon: string,
|
|
69
|
+
classes: readonly number[],
|
|
70
|
+
tags: readonly MacroTemplateTag[],
|
|
71
|
+
description: string,
|
|
72
|
+
body: string,
|
|
73
|
+
nest?: readonly string[],
|
|
74
|
+
): MacroTemplate {
|
|
75
|
+
return { id, name, icon, classes, tags, description, body, ...(nest ? { nest } : {}) };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export const MACRO_TEMPLATES: readonly MacroTemplate[] = [
|
|
79
|
+
// ---- Slots (generic, any class) -----------------------------------------------------
|
|
80
|
+
t('slot-trinket1', 'Use Trinket 1', 'inv_jewelry_talisman_08', [], ['slots'],
|
|
81
|
+
'Uses whatever is in paperdoll slot 13 (first trinket). Swap the trinket; the macro stays the same.',
|
|
82
|
+
`#showtooltip
|
|
83
|
+
/use 13`),
|
|
84
|
+
t('slot-trinket2', 'Use Trinket 2', 'inv_jewelry_talisman_01', [], ['slots'],
|
|
85
|
+
'Uses paperdoll slot 14 (second trinket).',
|
|
86
|
+
`#showtooltip
|
|
87
|
+
/use 14`),
|
|
88
|
+
t('slot-trinkets', 'Both Trinkets', 'inv_misc_orb_02', [], ['slots', 'pipeline'],
|
|
89
|
+
'Slot 13 first; if that slot is empty, slot 14. Wear any on-use trinkets.',
|
|
90
|
+
`#showtooltip
|
|
91
|
+
/use 13
|
|
92
|
+
/use 14`),
|
|
93
|
+
t('slot-mh', 'Use Main Hand', 'inv_sword_04', [], ['slots'],
|
|
94
|
+
'Uses paperdoll slot 16 (main hand on-use).',
|
|
95
|
+
`#showtooltip
|
|
96
|
+
/use 16`),
|
|
97
|
+
t('slot-oh', 'Use Off Hand', 'inv_shield_06', [], ['slots'],
|
|
98
|
+
'Uses paperdoll slot 17 (off hand / shield on-use). Not a trinket: trinkets are 13 and 14.',
|
|
99
|
+
`#showtooltip
|
|
100
|
+
/use 17`),
|
|
101
|
+
t('slot-tankset', '1H + Shield', 'inv_shield_04', [], ['slots', 'combat'],
|
|
102
|
+
'If you have no shield on, equips the first one-hand weapon and first shield in your bags. No named items.',
|
|
103
|
+
`#showtooltip
|
|
104
|
+
/equip [noequipped:Shields] One-Hand
|
|
105
|
+
/equipoh [noequipped:Shields] Shields`),
|
|
106
|
+
t('slot-outfit', 'Wear Tank Outfit', 'inv_chest_plate04', [], ['slots', 'pipeline'],
|
|
107
|
+
'Wears an Outfitter set named Tank. Rename the set, or edit the line, to match yours.',
|
|
108
|
+
`#showtooltip
|
|
109
|
+
/outfitter wear Tank`),
|
|
110
|
+
|
|
111
|
+
// ---- Warrior ------------------------------------------------------------------------
|
|
112
|
+
t('war-overpower', 'Overpower Dance', 'ability_meleedamage', [W], ['combat'],
|
|
113
|
+
'Casts Overpower in Battle Stance; otherwise swaps into Battle Stance first.',
|
|
114
|
+
`#showtooltip Overpower
|
|
115
|
+
/cast [stance:1] Overpower ; Battle Stance
|
|
116
|
+
/startattack`),
|
|
117
|
+
t('war-shieldwall', 'Shield Wall Swap', 'ability_warrior_shieldwall', [W], ['emergency', 'combat', 'slots'],
|
|
118
|
+
'Puts on the first 1H and shield in your bags if you have no shield, then Defensive Stance and Shield Wall.',
|
|
119
|
+
`#showtooltip Shield Wall
|
|
120
|
+
/equip [noequipped:Shields] One-Hand
|
|
121
|
+
/equipoh [noequipped:Shields] Shields
|
|
122
|
+
/cast [nostance:2] Defensive Stance
|
|
123
|
+
/cast Shield Wall`),
|
|
124
|
+
t('war-pummel', 'Pummel Interrupt', 'inv_gauntlets_04', [W], ['combat', 'emergency'],
|
|
125
|
+
'Stops your current action, enters Berserker Stance if needed, then Pummel.',
|
|
126
|
+
`#showtooltip Pummel
|
|
127
|
+
/stopcasting
|
|
128
|
+
/cast [stance:3] Pummel ; Berserker Stance`),
|
|
129
|
+
t('war-charge', 'Charge / Intercept', 'ability_warrior_charge', [W], ['combat'],
|
|
130
|
+
'Out of combat: Battle Stance and Charge. In combat: Berserker Stance and Intercept.',
|
|
131
|
+
`#showtooltip
|
|
132
|
+
/cast [nocombat,stance:1] Charge ; [nocombat] Battle Stance ; [combat,stance:3] Intercept ; Berserker Stance
|
|
133
|
+
/startattack`),
|
|
134
|
+
t('war-execute', 'Execute Finisher', 'inv_sword_48', [W], ['combat', 'sequence'],
|
|
135
|
+
'Execute below 20% target health; otherwise Mortal Strike. Starts auto-attack.',
|
|
136
|
+
`#showtooltip Execute
|
|
137
|
+
/cast [harm,hp<20] Execute ; Mortal Strike
|
|
138
|
+
/startattack`),
|
|
139
|
+
|
|
140
|
+
// ---- Mage ---------------------------------------------------------------------------
|
|
141
|
+
t('mage-cs', 'Counterspell', 'spell_frost_iceshock', [M], ['emergency', 'mouseover'],
|
|
142
|
+
'Stops your current cast and Counterspells mouseover, then your target.',
|
|
143
|
+
`#showtooltip Counterspell
|
|
144
|
+
/stopcasting
|
|
145
|
+
/cast [@mouseover,harm,nodead][harm,nodead] Counterspell`),
|
|
146
|
+
t('mage-poly', 'Focus Polymorph', 'spell_nature_polymorph', [M], ['mouseover'],
|
|
147
|
+
'Shift clears focus. Otherwise locks focus on your target and sheeps focus, then mouseover, then target.',
|
|
148
|
+
`#showtooltip Polymorph
|
|
149
|
+
/clearfocus [mod:shift]
|
|
150
|
+
/focus [@focus,noexists][@focus,dead] target
|
|
151
|
+
/cast [@focus,harm,nodead][@mouseover,harm,nodead][harm] Polymorph`),
|
|
152
|
+
t('mage-blizz', 'Blizzard Rank 1', 'spell_frost_icestorm', [M], ['downrank'],
|
|
153
|
+
'Rank 1 Blizzard for the area slow. Hold Shift for max-rank damage.',
|
|
154
|
+
`#showtooltip Blizzard
|
|
155
|
+
/cast [mod:shift] Blizzard ; Blizzard(Rank 1)`),
|
|
156
|
+
t('mage-iceblock', 'Ice Block Cancel', 'spell_frost_frost', [M], ['emergency'],
|
|
157
|
+
'First tap casts Ice Block. Second tap leaves the form/buff if /unshift can clear it.',
|
|
158
|
+
`#showtooltip Ice Block
|
|
159
|
+
/stopcasting
|
|
160
|
+
/unshift [mybuff:Ice_Block]
|
|
161
|
+
/cast [nomybuff:Ice_Block] Ice Block`),
|
|
162
|
+
t('mage-pom', 'PoM Pyroblast', 'spell_fire_fireball02', [M], ['combat', 'pipeline'],
|
|
163
|
+
'Applies Presence of Mind if missing, then Pyroblast.',
|
|
164
|
+
`#showtooltip Pyroblast
|
|
165
|
+
/cast [nomybuff:Presence_of_Mind] Presence of Mind
|
|
166
|
+
/cast Pyroblast`),
|
|
167
|
+
|
|
168
|
+
// ---- Rogue --------------------------------------------------------------------------
|
|
169
|
+
t('rogue-opener', 'Stealth Opener', 'ability_stealth', [R], ['combat'],
|
|
170
|
+
'Enters Stealth if you are not stealthed. Stealthed: Cheap Shot, Shift Sap, Ctrl Ambush.',
|
|
171
|
+
`#showtooltip
|
|
172
|
+
/cast [nostealth] Stealth
|
|
173
|
+
/cast [stealth,mod:shift] Sap ; [stealth,mod:ctrl] Ambush ; [stealth] Cheap Shot`),
|
|
174
|
+
t('rogue-blind', 'Blind', 'spell_shadow_mindsteal', [R], ['emergency', 'mouseover'],
|
|
175
|
+
'Stops auto-attack so a swing does not break Blind, then blinds mouseover or target.',
|
|
176
|
+
`#showtooltip Blind
|
|
177
|
+
/stopattack
|
|
178
|
+
/cast [@mouseover,harm,nodead][harm] Blind`),
|
|
179
|
+
t('rogue-riposte', 'Riposte / SS', 'spell_shadow_ritualofsacrifice', [R], ['combat'],
|
|
180
|
+
'Riposte when it is ready after a parry; otherwise Sinister Strike.',
|
|
181
|
+
`#showtooltip Sinister Strike
|
|
182
|
+
/cast [nocooldown:Riposte] Riposte ; Sinister Strike
|
|
183
|
+
/startattack`),
|
|
184
|
+
t('rogue-vanish', 'Vanish Drop', 'ability_vanish', [R], ['emergency'],
|
|
185
|
+
'Stops attacking and Vanishes in combat; Stealths out of combat.',
|
|
186
|
+
`#showtooltip Vanish
|
|
187
|
+
/stopattack
|
|
188
|
+
/cast [combat] Vanish ; Stealth`),
|
|
189
|
+
|
|
190
|
+
// ---- Priest -------------------------------------------------------------------------
|
|
191
|
+
t('priest-shoot', 'Wand Shoot', 'ability_shootwand', [P], ['combat'],
|
|
192
|
+
'Starts wanding without toggling it off if you press the button again.',
|
|
193
|
+
`#showtooltip Shoot
|
|
194
|
+
/cast !Shoot`),
|
|
195
|
+
t('priest-flay', 'Mind Flay', 'spell_shadow_siphonmana', [P], ['combat'],
|
|
196
|
+
'Will not recast while you are already channelling, so ticks are not clipped.',
|
|
197
|
+
`#showtooltip Mind Flay
|
|
198
|
+
/cast [nochanneled] Mind Flay`),
|
|
199
|
+
t('priest-helpharm', 'Help / Harm', 'spell_holy_flashheal', [P], ['mouseover'],
|
|
200
|
+
'Flash Heal on a friendly mouseover or target; Smite on an enemy; else Flash Heal.',
|
|
201
|
+
`#showtooltip
|
|
202
|
+
/cast [@mouseover,help,nodead][help,nodead] Flash Heal ; [@mouseover,harm,nodead][harm,nodead] Smite ; Flash Heal`),
|
|
203
|
+
t('priest-if', 'Inner Fire', 'spell_holy_innerfire', [P], ['combat', 'sequence'],
|
|
204
|
+
'Recasts Inner Fire when the buff is gone; otherwise Holy Fire or Smite.',
|
|
205
|
+
`#showtooltip
|
|
206
|
+
/cast [nomybuff:Inner_Fire] Inner Fire ; [harm] Holy Fire ; Smite`),
|
|
207
|
+
t('priest-dp', 'Desperate Prayer', 'spell_holy_restoration', [P], ['emergency'],
|
|
208
|
+
'Stops casting and, below 25-35% health, uses a healthstone, potion, then Desperate Prayer.',
|
|
209
|
+
`#showtooltip Desperate Prayer
|
|
210
|
+
/stopcasting
|
|
211
|
+
/use [myhp<25] Major Healthstone
|
|
212
|
+
/use [myhp<25] Superior Healing Potion
|
|
213
|
+
/cast [myhp<35] Desperate Prayer`),
|
|
214
|
+
|
|
215
|
+
// ---- Hunter -------------------------------------------------------------------------
|
|
216
|
+
t('hunt-trap', 'Feign + Trap', 'spell_frost_chainsofice', [H], ['emergency', 'pet'],
|
|
217
|
+
'Calls the pet back, stops attacking, Feign Deaths in combat, then Freezing Trap.',
|
|
218
|
+
`#showtooltip Freezing Trap
|
|
219
|
+
/petfollow
|
|
220
|
+
/stopattack
|
|
221
|
+
/cast [combat] Feign Death
|
|
222
|
+
/cast Freezing Trap`),
|
|
223
|
+
t('hunt-autoshot', 'Auto Shot Weave', 'ability_whirlwind', [H], ['combat'],
|
|
224
|
+
'Keeps Auto Shot running at range and weaves Raptor Strike in melee.',
|
|
225
|
+
`#showtooltip
|
|
226
|
+
/cast [harm,hp>0] !Auto Shot
|
|
227
|
+
/cast [combat] Raptor Strike
|
|
228
|
+
/startattack`),
|
|
229
|
+
t('hunt-mark', "Hunter's Mark", 'ability_hunter_snipershot', [H], ['combat', 'pet'],
|
|
230
|
+
"Applies Hunter's Mark if the target lacks it, then sends the pet.",
|
|
231
|
+
`#showtooltip Hunter's Mark
|
|
232
|
+
/cast [harm,nodebuff:Hunter's_Mark] Hunter's Mark
|
|
233
|
+
/petattack [@target,harm,nodead]
|
|
234
|
+
/startattack`),
|
|
235
|
+
t('hunt-cheetah', 'Cheetah Cancel', 'ability_mount_jungletiger', [H], ['combat'],
|
|
236
|
+
'Drops Aspect of the Cheetah in combat so you are not dazed; Cheetah out of combat.',
|
|
237
|
+
`#showtooltip
|
|
238
|
+
/cast [combat,mybuff:Aspect_of_the_Cheetah] Aspect of the Monkey ; [nocombat] Aspect of the Cheetah ; Aspect of the Hawk`),
|
|
239
|
+
|
|
240
|
+
// ---- Warlock ------------------------------------------------------------------------
|
|
241
|
+
t('lock-soul', 'Drain Soul', 'spell_shadow_haunting', [K], ['downrank', 'combat'],
|
|
242
|
+
'Does not clip a channel. Rank 1 Drain Soul below 20% for shards; else Drain Life.',
|
|
243
|
+
`#showtooltip Drain Soul
|
|
244
|
+
/cast [nochanneled,hp<20] Drain Soul(Rank 1) ; [nochanneled] Drain Life`),
|
|
245
|
+
t('lock-sac', 'Sacrifice Panic', 'spell_shadow_sacrificialshield', [K], ['emergency', 'pet'],
|
|
246
|
+
'Below 30% health, Voidwalker Sacrifice and a Major Healthstone.',
|
|
247
|
+
`#showtooltip Sacrifice
|
|
248
|
+
/stopcasting
|
|
249
|
+
/cast [myhp<30] Sacrifice
|
|
250
|
+
/use [myhp<30] Major Healthstone`),
|
|
251
|
+
t('lock-lock', 'Spell Lock', 'spell_shadow_mindrot', [K], ['emergency', 'mouseover', 'pet'],
|
|
252
|
+
'Spell Lock on focus, then mouseover, then target.',
|
|
253
|
+
`#showtooltip Spell Lock
|
|
254
|
+
/cast [@focus,harm,nodead][@mouseover,harm,nodead][harm] Spell Lock`),
|
|
255
|
+
t('lock-dots', 'DoT Spreader', 'spell_shadow_abominationexplosion', [K], ['combat', 'sequence'],
|
|
256
|
+
'Corruption if missing, then Curse of Agony if missing, then Shadow Bolt.',
|
|
257
|
+
`#showtooltip
|
|
258
|
+
/cast [nodebuff:Corruption] Corruption ; [nodebuff:Curse_of_Agony] Curse of Agony ; Shadow Bolt`),
|
|
259
|
+
|
|
260
|
+
// ---- Druid --------------------------------------------------------------------------
|
|
261
|
+
t('druid-shift', 'Cat Powershift', 'ability_druid_catform', [D], ['combat'],
|
|
262
|
+
'Leaves form and re-enters Cat Form for Furor / Wolfshead energy.',
|
|
263
|
+
`#showtooltip Cat Form
|
|
264
|
+
/unshift
|
|
265
|
+
/cast !Cat Form
|
|
266
|
+
/startattack`),
|
|
267
|
+
t('druid-charge', 'Feral Charge', 'ability_hunter_pet_bear', [D], ['combat'],
|
|
268
|
+
'Feral Charge in Bear Form (stance 1); otherwise shifts into Bear Form.',
|
|
269
|
+
`#showtooltip Feral Charge
|
|
270
|
+
/cast [stance:1] Feral Charge ; Bear Form`),
|
|
271
|
+
t('druid-ns', 'NS Healing Touch', 'spell_nature_healingtouch', [D], ['emergency', 'mouseover'],
|
|
272
|
+
'Leaves beast forms, applies Nature\'s Swiftness, then instant Healing Touch.',
|
|
273
|
+
`#showtooltip Healing Touch
|
|
274
|
+
/stopcasting
|
|
275
|
+
/unshift [nostance:0]
|
|
276
|
+
/cast [nomybuff:Nature's_Swiftness] Nature's Swiftness
|
|
277
|
+
/cast [@mouseover,help,nodead][@player] Healing Touch`),
|
|
278
|
+
t('druid-mf', 'Moonfire Rank 1', 'spell_nature_starfall', [D], ['downrank'],
|
|
279
|
+
'Shift: max-rank Moonfire. Otherwise apply the debuff, then Rank 1 totem stomp.',
|
|
280
|
+
`#showtooltip Moonfire
|
|
281
|
+
/cast [mod:shift] Moonfire ; [nodebuff:Moonfire] Moonfire ; Moonfire(Rank 1)`),
|
|
282
|
+
|
|
283
|
+
// ---- Paladin ------------------------------------------------------------------------
|
|
284
|
+
t('pal-bubble', 'Bubble Hearth', 'spell_holy_divineintervention', [L], ['emergency'],
|
|
285
|
+
'Divine Shield if you lack it, then Hearthstone while the bubble is up.',
|
|
286
|
+
`#showtooltip Divine Shield
|
|
287
|
+
/stopcasting
|
|
288
|
+
/cast [nomybuff:Divine_Shield] Divine Shield
|
|
289
|
+
/use [mybuff:Divine_Shield] Hearthstone`),
|
|
290
|
+
t('pal-cleanse', 'Cleanse Mouseover', 'spell_holy_renew', [L], ['mouseover'],
|
|
291
|
+
'Cleanse mouseover, then a friendly target, then yourself.',
|
|
292
|
+
`#showtooltip Cleanse
|
|
293
|
+
/cast [@mouseover,help,nodead][help,nodead][@player] Cleanse`),
|
|
294
|
+
t('pal-judge', 'Seal Judgement', 'spell_holy_righteousfury', [L], ['combat'],
|
|
295
|
+
'Judgement if Seal of Command is up; otherwise apply the seal.',
|
|
296
|
+
`#showtooltip Judgement
|
|
297
|
+
/cast [mybuff:Seal_of_Command] Judgement ; Seal of Command
|
|
298
|
+
/startattack`),
|
|
299
|
+
t('pal-loh', 'Lay on Hands', 'spell_holy_layonhands', [L], ['emergency', 'mouseover'],
|
|
300
|
+
'Lay on Hands mouseover, then a friendly target, then yourself.',
|
|
301
|
+
`#showtooltip Lay on Hands
|
|
302
|
+
/stopcasting
|
|
303
|
+
/cast [@mouseover,help,nodead][@target,help,nodead][@player] Lay on Hands`),
|
|
304
|
+
|
|
305
|
+
// ---- Shaman -------------------------------------------------------------------------
|
|
306
|
+
t('sha-shock', 'Earth Shock R1', 'spell_nature_earthshock', [S], ['emergency', 'downrank', 'mouseover'],
|
|
307
|
+
'Stops casting and fires Rank 1 Earth Shock for the lockout, on mouseover or target.',
|
|
308
|
+
`#showtooltip Earth Shock(Rank 1)
|
|
309
|
+
/stopcasting
|
|
310
|
+
/cast [@mouseover,harm,nodead][harm] Earth Shock(Rank 1)`),
|
|
311
|
+
t('sha-ns', 'NS Chain Heal', 'spell_nature_healingwavegreater', [S], ['emergency', 'mouseover'],
|
|
312
|
+
'Applies Nature\'s Swiftness if missing, then Chain Heal mouseover / target / you.',
|
|
313
|
+
`#showtooltip Chain Heal
|
|
314
|
+
/stopcasting
|
|
315
|
+
/cast [nomybuff:Nature's_Swiftness] Nature's Swiftness
|
|
316
|
+
/cast [@mouseover,help,nodead][help,nodead][@player] Chain Heal`),
|
|
317
|
+
t('sha-helpharm', 'Purge / LHW', 'spell_nature_purge', [S], ['mouseover'],
|
|
318
|
+
'Lesser Healing Wave on a friend; Purge on an enemy; else Lesser Healing Wave.',
|
|
319
|
+
`#showtooltip
|
|
320
|
+
/cast [@mouseover,help,nodead][help,nodead] Lesser Healing Wave ; [@mouseover,harm,nodead][harm,nodead] Purge ; Lesser Healing Wave`),
|
|
321
|
+
|
|
322
|
+
// ---- Advanced / shared --------------------------------------------------------------
|
|
323
|
+
t('adv-exorcism', 'Exorcism Detector', 'spell_holy_excorcism_02', [L], ['combat', 'pipeline'],
|
|
324
|
+
'On Undead or Demon, Exorcism then Holy Wrath when ready; otherwise Judgement.',
|
|
325
|
+
`#showtooltip
|
|
326
|
+
/cast [harm,type:Undead/Demon,nocooldown:Exorcism] Exorcism ; [harm,type:Undead/Demon,nocooldown:Holy_Wrath] Holy Wrath ; Judgement
|
|
327
|
+
/startattack`),
|
|
328
|
+
t('adv-taunt', 'Threat Recovery', 'spell_nature_reincarnation', [W], ['combat', 'pipeline'],
|
|
329
|
+
'If the target is not attacking you: Taunt in Defensive, Mocking Blow in Battle; else Sunder.',
|
|
330
|
+
`#showtooltip Taunt
|
|
331
|
+
/cast [noattacks:player,stance:2] Taunt ; [noattacks:player,stance:1] Mocking Blow ; Sunder Armor
|
|
332
|
+
/startattack`),
|
|
333
|
+
t('adv-panic', 'Panic Consumables', 'inv_stone_04', [], ['emergency', 'pipeline'],
|
|
334
|
+
'Below 20% health: Major Healthstone, then Major Healing Potion, then a bandage.',
|
|
335
|
+
`#showtooltip
|
|
336
|
+
/stopcasting
|
|
337
|
+
/use [myhp<20] Major Healthstone
|
|
338
|
+
/use [myhp<20] Major Healing Potion
|
|
339
|
+
/use [myhp<20] Heavy Runecloth Bandage`),
|
|
340
|
+
t('adv-prebuffs', 'PreBuffs', 'ability_warrior_battleshout', [W], ['pipeline'],
|
|
341
|
+
'Out-of-combat shout helper that BurstEngage calls as {PreBuffs}.',
|
|
342
|
+
`#showtooltip Battle Shout
|
|
343
|
+
/cast [nomybuff:Battle_Shout] Battle Shout
|
|
344
|
+
/cast [nomybuff:Berserker_Rage,stance:3] Berserker Rage`),
|
|
345
|
+
t('adv-trinket', 'TrinketPop', 'inv_jewelry_talisman_08', [], ['pipeline', 'slots'],
|
|
346
|
+
'Uses trinket slot 13, then 14 if 13 is empty. BurstEngage calls this as {TrinketPop}.',
|
|
347
|
+
`#showtooltip
|
|
348
|
+
/use 13
|
|
349
|
+
/use 14`),
|
|
350
|
+
t('adv-burst', 'BurstEngage', 'ability_warrior_savageblow', [W], ['pipeline', 'combat', 'sequence'],
|
|
351
|
+
'Out of combat runs {PreBuffs}. In combat pops {TrinketPop} (slots 13/14), then Mortal Strike.',
|
|
352
|
+
`#showtooltip
|
|
353
|
+
/cast [nocombat] {PreBuffs}
|
|
354
|
+
/cast [combat] {TrinketPop}
|
|
355
|
+
/cast [combat] Mortal Strike
|
|
356
|
+
/startattack`,
|
|
357
|
+
['adv-prebuffs', 'adv-trinket']),
|
|
358
|
+
t('adv-hamstring', 'Rage / Hamstring', 'ability_shockwave', [W, D], ['combat', 'sequence'],
|
|
359
|
+
'Bloodrage when rage is below 10, Hamstring if the target is not slowed, then Mortal Strike.',
|
|
360
|
+
`#showtooltip
|
|
361
|
+
/cast [myrawpower<10,nocooldown:Bloodrage] Bloodrage
|
|
362
|
+
/cast [harm,nodebuff:Hamstring] Hamstring ; Mortal Strike
|
|
363
|
+
/startattack`),
|
|
364
|
+
t('adv-priority', 'Priority Sequence', 'spell_shadow_shadowbolt', [K], ['sequence', 'pipeline'],
|
|
365
|
+
'Vanilla has no /castsequence. This is the replacement: first matching branch wins, then the next line.',
|
|
366
|
+
`#showtooltip
|
|
367
|
+
/cast [nochanneled,nodebuff:Corruption] Corruption ; [nochanneled,nodebuff:Curse_of_Agony] Curse of Agony ; [nochanneled] Shadow Bolt`),
|
|
368
|
+
t('adv-fullkit', 'Full Toolkit', 'inv_misc_book_09', [W], ['pipeline', 'sequence', 'slots'],
|
|
369
|
+
'Stance, gear type, slot use, hp gate, creature type, threat, and a nested trinket call on one button.',
|
|
370
|
+
`#showtooltip
|
|
371
|
+
/cast [nocombat] {PreBuffs}
|
|
372
|
+
/equip [noequipped:Shields] One-Hand
|
|
373
|
+
/equipoh [noequipped:Shields] Shields
|
|
374
|
+
/cast [combat] {TrinketPop}
|
|
375
|
+
/cast [noattacks:player,stance:2] Taunt ; [harm,type:Undead/Demon] Hamstring ; [harm,hp<20] Execute ; Mortal Strike
|
|
376
|
+
/startattack`,
|
|
377
|
+
['adv-prebuffs', 'adv-trinket']),
|
|
378
|
+
];
|
|
379
|
+
|
|
380
|
+
const BY_ID: ReadonlyMap<string, MacroTemplate> = new Map(MACRO_TEMPLATES.map((row) => [row.id, row]));
|
|
381
|
+
|
|
382
|
+
export function macroTemplateById(id: string): MacroTemplate | null {
|
|
383
|
+
return BY_ID.get(id) ?? null;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
export function filterMacroTemplates(
|
|
387
|
+
opts: { scope: MacroTemplateScope; cls: number; tag: MacroTemplateTag | null },
|
|
388
|
+
): MacroTemplate[] {
|
|
389
|
+
return MACRO_TEMPLATES.filter((row) => {
|
|
390
|
+
if (opts.scope === 'general' && row.classes.length) return false;
|
|
391
|
+
if (opts.scope === 'class' && !row.classes.includes(opts.cls)) return false;
|
|
392
|
+
if (opts.tag && !row.tags.includes(opts.tag)) return false;
|
|
393
|
+
return true;
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Structural badge: mouseover, focus, party, raid and modifier keys cannot be held by auto-combat,
|
|
398
|
+
// so those templates are Manual Only. Everything else can compile its /cast and /use lines.
|
|
399
|
+
export function macroTemplateCompat(body: string): MacroTemplateCompat {
|
|
400
|
+
const prog = parseMacroBody(body);
|
|
401
|
+
for (const line of prog.lines) {
|
|
402
|
+
for (const clause of line.clauses) {
|
|
403
|
+
const ref = clause.unit;
|
|
404
|
+
if (ref && !(ref.base === 'target' && ref.hops === 0)
|
|
405
|
+
&& !(ref.base === 'player' && ref.hops === 0)) {
|
|
406
|
+
return { kind: 'manual', label: 'Manual Only (Mouseover/Mod)' };
|
|
407
|
+
}
|
|
408
|
+
for (const group of clause.groups) {
|
|
409
|
+
for (const cond of group) {
|
|
410
|
+
if (cond.key === 'mod' || cond.key === 'nomod' || cond.key === 'modifier') {
|
|
411
|
+
return { kind: 'manual', label: 'Manual Only (Mouseover/Mod)' };
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return { kind: 'auto', label: 'Manual + Auto-Combat Compatible' };
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
export function uniqueMacroName(base: string, taken: Iterable<string>): string {
|
|
421
|
+
const want = sanitizeMacroName(base) || 'Macro';
|
|
422
|
+
const used = new Set<string>();
|
|
423
|
+
for (const n of taken) used.add(n.toLowerCase());
|
|
424
|
+
if (!used.has(want.toLowerCase())) return want;
|
|
425
|
+
for (let i = 2; i <= 40; i++) {
|
|
426
|
+
const next = sanitizeMacroName(`${want.slice(0, Math.max(1, MACRO_NAME_MAX - 1 - String(i).length))} ${i}`);
|
|
427
|
+
if (next && !used.has(next.toLowerCase())) return next;
|
|
428
|
+
}
|
|
429
|
+
return want;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/** Helpers this template needs created so `{Name}` calls resolve, in create order. */
|
|
433
|
+
export function macroTemplateNest(row: MacroTemplate): MacroTemplate[] {
|
|
434
|
+
if (!row.nest?.length) return [];
|
|
435
|
+
const out: MacroTemplate[] = [];
|
|
436
|
+
for (const id of row.nest) {
|
|
437
|
+
const child = BY_ID.get(id);
|
|
438
|
+
if (child) out.push(child);
|
|
439
|
+
}
|
|
440
|
+
return out;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/** Parse issues a player would see if they pasted this body. Empty = the template is legal. */
|
|
444
|
+
export function macroTemplateIssues(body: string) {
|
|
445
|
+
return validateMacroProgram(parseMacroBody(body));
|
|
446
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Macro model and the caps that bound every macro path. The client's WRITING limits are 2006 frame
|
|
2
|
+
// sizes and are deliberately exceeded; the WORK limits are ours and stay tight. Pure data.
|
|
3
|
+
|
|
4
|
+
/** Macros per scope (two scopes = 72). The client's own frame held 18: Blizzard_MacroUI.lua:1. */
|
|
5
|
+
export const MACROS_PER_SCOPE = 36;
|
|
6
|
+
/** Name length. The client's popup box took 16: Blizzard_MacroUI.xml:697. */
|
|
7
|
+
export const MACRO_NAME_MAX = 24;
|
|
8
|
+
/** Body length. The client's edit box took 255: Blizzard_MacroUI.xml:406. */
|
|
9
|
+
export const MACRO_BODY_MAX = 2048;
|
|
10
|
+
/** Lines a body may run. A 2 KB body can hold more than the old 16. */
|
|
11
|
+
export const MACRO_LINES_MAX = 32;
|
|
12
|
+
/** Ours: `;` branches per line (the ranged-weapon example in docs/conditions/equipped.md uses 4). */
|
|
13
|
+
export const MACRO_CLAUSES_MAX = 12;
|
|
14
|
+
/** Ours: conditions inside one `[…]` group. */
|
|
15
|
+
export const MACRO_CONDS_MAX = 8;
|
|
16
|
+
/** Ours: `[a][b]` OR-groups per clause. */
|
|
17
|
+
export const MACRO_GROUPS_MAX = 4;
|
|
18
|
+
/** Ours: `{Other}` nesting depth. Roid recurses unbounded (Core.lua:236-241). */
|
|
19
|
+
export const MACRO_DEPTH_MAX = 3;
|
|
20
|
+
/** Ours: resolved steps per press, across the whole call tree. */
|
|
21
|
+
export const MACRO_STEP_BUDGET = 32;
|
|
22
|
+
|
|
23
|
+
/** WoW's default macro icon. Same basename icons.ts ships as its FALLBACK. */
|
|
24
|
+
export const MACRO_ICON_FALLBACK = 'inv_misc_questionmark';
|
|
25
|
+
|
|
26
|
+
/** Account-wide ("General" tab) or this character only. Cite: Blizzard_MacroUI.lua:31/:41. */
|
|
27
|
+
export type MacroScope = 'account' | 'character';
|
|
28
|
+
|
|
29
|
+
/** One macro. `icon` is an icon basename under /icons; `body` is the raw macro text. */
|
|
30
|
+
export interface MacroDef {
|
|
31
|
+
/** Stable id: `a1..aN` (account) / `c1..cN` (character), N = MACROS_PER_SCOPE. A bar slot stores this. */
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
icon: string;
|
|
35
|
+
body: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function macroScopePrefix(scope: MacroScope): 'a' | 'c' {
|
|
39
|
+
return scope === 'account' ? 'a' : 'c';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** True for a well-formed macro id in range (`a1`..`aN` / `c1`..`cN`, N = MACROS_PER_SCOPE). */
|
|
43
|
+
export function isMacroId(s: unknown): s is string {
|
|
44
|
+
if (typeof s !== 'string' || s.length < 2) return false;
|
|
45
|
+
const p = s.charCodeAt(0);
|
|
46
|
+
if (p !== 97 /* a */ && p !== 99 /* c */) return false;
|
|
47
|
+
// No leading zeros / signs / spaces: an id is one letter then a plain 1-based index, so the
|
|
48
|
+
// string form is canonical and `a07` can never masquerade as `a7` on a bar slot.
|
|
49
|
+
const rest = s.slice(1);
|
|
50
|
+
if (!/^[1-9][0-9]*$/.test(rest)) return false;
|
|
51
|
+
const n = Number(rest);
|
|
52
|
+
return n <= MACROS_PER_SCOPE;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function macroScopeOf(id: string): MacroScope | null {
|
|
56
|
+
if (!isMacroId(id)) return null;
|
|
57
|
+
return id.charCodeAt(0) === 97 ? 'account' : 'character';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Lowest free id in `scope`, or null when that scope is full. */
|
|
61
|
+
export function nextMacroId(scope: MacroScope, taken: Iterable<string>): string | null {
|
|
62
|
+
const used = new Set<string>();
|
|
63
|
+
for (const t of taken) if (typeof t === 'string') used.add(t);
|
|
64
|
+
const p = macroScopePrefix(scope);
|
|
65
|
+
for (let i = 1; i <= MACROS_PER_SCOPE; i++) {
|
|
66
|
+
const id = `${p}${i}`;
|
|
67
|
+
if (!used.has(id)) return id;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Unit references — what @… can name. A reference is parsed, not enumerated: a base, an optional
|
|
2
|
+
// 1-based index, and a hop count, since any base may be suffixed with `target` repeatedly.
|
|
3
|
+
|
|
4
|
+
/** The bases a reference can start from. */
|
|
5
|
+
export const MACRO_UNIT_BASES = [
|
|
6
|
+
'player', 'pet', 'party', 'partypet', 'raid', 'raidpet', 'target', 'mouseover', 'focus', 'npc',
|
|
7
|
+
] as const;
|
|
8
|
+
export type MacroUnitBase = typeof MACRO_UNIT_BASES[number];
|
|
9
|
+
|
|
10
|
+
/** Bases that take a 1-based index, with the highest index the game can offer. */
|
|
11
|
+
export const MACRO_UNIT_INDEXED: Readonly<Record<string, number>> = {
|
|
12
|
+
party: 4,
|
|
13
|
+
partypet: 4,
|
|
14
|
+
raid: 40,
|
|
15
|
+
raidpet: 40,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** Ours: `target` suffixes per reference. 3 covers every real macro; the doc warns past that. */
|
|
19
|
+
export const MACRO_UNIT_HOPS_MAX = 3;
|
|
20
|
+
|
|
21
|
+
/** One `@…` reference. `hops` is how many `target` suffixes followed the base. */
|
|
22
|
+
export interface MacroUnitRef {
|
|
23
|
+
base: MacroUnitBase;
|
|
24
|
+
/** 1-based, only for party/partypet/raid/raidpet. */
|
|
25
|
+
index?: number;
|
|
26
|
+
hops: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const BASES: readonly MacroUnitBase[] = MACRO_UNIT_BASES;
|
|
30
|
+
|
|
31
|
+
// Parse a unit token (without the `@`). Returns null when it is not a unit at all, so a `/target Ragnaros`
|
|
32
|
+
// argument is never mistaken for one. Total; never throws.
|
|
33
|
+
export function parseMacroUnit(raw: unknown): MacroUnitRef | null {
|
|
34
|
+
if (typeof raw !== 'string') return null;
|
|
35
|
+
let s = raw.trim().toLowerCase();
|
|
36
|
+
if (!s) return null;
|
|
37
|
+
if (s.startsWith('@')) s = s.slice(1);
|
|
38
|
+
// Peel `target` suffixes off the END first, so `target` itself still parses as the base.
|
|
39
|
+
let hops = 0;
|
|
40
|
+
while (s.length > 6 && s.endsWith('target')) {
|
|
41
|
+
s = s.slice(0, -6);
|
|
42
|
+
hops++;
|
|
43
|
+
if (hops > MACRO_UNIT_HOPS_MAX) return null;
|
|
44
|
+
}
|
|
45
|
+
// `targettarget` peels to `target` with hops 1; a bare `target` keeps hops 0.
|
|
46
|
+
const m = /^([a-z]+)([0-9]{1,2})?$/.exec(s);
|
|
47
|
+
if (!m) return null;
|
|
48
|
+
const base = m[1] as MacroUnitBase;
|
|
49
|
+
if (!BASES.includes(base)) return null;
|
|
50
|
+
const max = MACRO_UNIT_INDEXED[base];
|
|
51
|
+
if (max == null) {
|
|
52
|
+
// An index on a base that has none (`@player2`) is not a unit.
|
|
53
|
+
if (m[2] != null) return null;
|
|
54
|
+
return { base, hops };
|
|
55
|
+
}
|
|
56
|
+
const index = m[2] != null ? Number(m[2]) : NaN;
|
|
57
|
+
if (!Number.isInteger(index) || index < 1 || index > max) return null;
|
|
58
|
+
return { base, index, hops };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Canonical text for a reference (round-trips through parseMacroUnit). */
|
|
62
|
+
export function macroUnitToken(ref: MacroUnitRef): string {
|
|
63
|
+
const idx = ref.index != null ? String(ref.index) : '';
|
|
64
|
+
return `${ref.base}${idx}${'target'.repeat(Math.max(0, ref.hops))}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Stable key for caching / comparing two references. */
|
|
68
|
+
export function macroUnitKey(ref: MacroUnitRef): string {
|
|
69
|
+
return macroUnitToken(ref);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Plain-English name, for the builder chips and the editor preview. */
|
|
73
|
+
export function describeMacroUnit(ref: MacroUnitRef): string {
|
|
74
|
+
const base = ref.base === 'player' ? 'you'
|
|
75
|
+
: ref.base === 'pet' ? 'your pet'
|
|
76
|
+
: ref.base === 'target' ? 'your target'
|
|
77
|
+
: ref.base === 'mouseover' ? 'the unit under your cursor'
|
|
78
|
+
: ref.base === 'focus' ? 'your focus'
|
|
79
|
+
: ref.base === 'npc' ? 'the NPC you are talking to'
|
|
80
|
+
: ref.base === 'party' ? `party member ${ref.index}`
|
|
81
|
+
: ref.base === 'partypet' ? `party member ${ref.index}'s pet`
|
|
82
|
+
: ref.base === 'raid' ? `raid member ${ref.index}`
|
|
83
|
+
: `raid member ${ref.index}'s pet`;
|
|
84
|
+
let out = base;
|
|
85
|
+
for (let i = 0; i < ref.hops; i++) out = `${out}'s target`;
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** The references the pure layer names directly. */
|
|
90
|
+
export const MACRO_UNIT_PLAYER: MacroUnitRef = { base: 'player', hops: 0 };
|
|
91
|
+
export const MACRO_UNIT_TARGET: MacroUnitRef = { base: 'target', hops: 0 };
|
|
92
|
+
/** `targettarget` — your target's target (what `attacks:` compares against). */
|
|
93
|
+
export const MACRO_UNIT_TARGETTARGET: MacroUnitRef = { base: 'target', hops: 1 };
|