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,1026 @@
|
|
|
1
|
+
// ScriptDevAI intermediate representation — a data-shaped extract of the CMaNGOS scripts for the
|
|
2
|
+
// engine host, not a C++ transpile. Never invent timers, thresholds or spell ids.
|
|
3
|
+
|
|
4
|
+
import type { CreatureCastEntry } from '../../data/schema.ts';
|
|
5
|
+
|
|
6
|
+
// Target / cast helpers (reuse EventAI TARGET_T via selectTarget source 'eventai')
|
|
7
|
+
|
|
8
|
+
// ScriptDev SelectAttackingTarget mapping → EventAI TARGET_T for selectTarget. Cite: Unit.h
|
|
9
|
+
// AttackingTarget; boss scripts SelectAttackingTarget(RANDOM, …).
|
|
10
|
+
export type ScriptDevTargetMode =
|
|
11
|
+
| 'self'
|
|
12
|
+
| 'victim'
|
|
13
|
+
| 'hostile_random'
|
|
14
|
+
| 'hostile_random_not_top'
|
|
15
|
+
| 'hostile_random_player'
|
|
16
|
+
| 'hostile_random_not_top_player'
|
|
17
|
+
| 'hostile_random_mana'
|
|
18
|
+
| 'hostile_random_not_in_melee'
|
|
19
|
+
// DoFindFriendlyEligibleDispel — a friendly creature in combat within range that is immobilized,
|
|
20
|
+
// slowed, frozen or crowd-controlled. Cite: UnitAI.cpp:764-771; GridNotifiers.h:915-930.
|
|
21
|
+
| 'friendly_dispellable'
|
|
22
|
+
// SELECT_FLAG_PLAYER | SELECT_FLAG_NOT_AURA on the CAST spell — a random player who does not
|
|
23
|
+
// already carry it. Cite: boss_sapphiron.cpp:241-243; creature_spell_targeting id 121.
|
|
24
|
+
| 'hostile_random_player_not_aura'
|
|
25
|
+
// DoFindFriendlyMissingBuff — a friendly in range that does NOT already carry the cast spell.
|
|
26
|
+
// Cite: UnitAI.cpp:737-761; boss_sulfuron_harbinger.cpp:94-109.
|
|
27
|
+
| 'friendly_missing_buff';
|
|
28
|
+
|
|
29
|
+
/** Optional select flags (Unit.h SelectFlags bits) plus getClass() filter. */
|
|
30
|
+
export interface ScriptDevSelectOpts {
|
|
31
|
+
/** SELECT_FLAG_PLAYER = 0x0002 */
|
|
32
|
+
playerOnly?: boolean;
|
|
33
|
+
/** SELECT_FLAG_POWER_MANA = 0x0004 */
|
|
34
|
+
powerMana?: boolean;
|
|
35
|
+
/** SELECT_FLAG_NOT_IN_MELEE_RANGE = 0x0080 */
|
|
36
|
+
notInMelee?: boolean;
|
|
37
|
+
/** SELECT_FLAG_IN_MELEE_RANGE = 0x0040. Cite: boss_twinemperors.cpp:256 SPELL_UPPERCUT. */
|
|
38
|
+
inMelee?: boolean;
|
|
39
|
+
// SelectAttackingTarget second arg: 0 = include tank, 1 = skip top threat. Cite:
|
|
40
|
+
// boss_baroness_anastari.cpp Possess SelectAttackingTarget(RANDOM, 1, …).
|
|
41
|
+
skipTopThreat?: boolean;
|
|
42
|
+
/** Unit::getClass() / enum Classes. Cite: SharedDefines.h:65-79; boss_nefarian.cpp:270-280. */
|
|
43
|
+
classId?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Timers
|
|
47
|
+
|
|
48
|
+
// One UpdateAI timer: initial arm on Reset, re-arm on successful cast. Cite: ScriptedAI Reset() + UpdateAI
|
|
49
|
+
// timer pattern (every boss_*.cpp).
|
|
50
|
+
export interface ScriptDevTimer {
|
|
51
|
+
/** Stable id for runtime state (e.g. 'possess', 'banshee_wail'). */
|
|
52
|
+
id: string;
|
|
53
|
+
spellId: number;
|
|
54
|
+
/** Initial ready delay ms [min,max] inclusive. Cite: Reset() assignment. */
|
|
55
|
+
initialMinMs: number;
|
|
56
|
+
initialMaxMs: number;
|
|
57
|
+
/** Re-arm after CAST_OK [min,max]. */
|
|
58
|
+
repeatMinMs: number;
|
|
59
|
+
repeatMaxMs: number;
|
|
60
|
+
target: ScriptDevTargetMode;
|
|
61
|
+
select?: ScriptDevSelectOpts;
|
|
62
|
+
// Only fire when runtime phase equals this value (default 0). Cite: boss_dathrohan_balnazzar.cpp
|
|
63
|
+
// m_bTransformed branch.
|
|
64
|
+
phase?: number;
|
|
65
|
+
// UnitAI CastFlags bits (TRIGGERED, AURA_NOT_PRESENT, FORCE_CAST, …). Cite: UnitAI.h CastFlags; Maleki
|
|
66
|
+
// Frost Armor CAST_TRIGGERED|AURA_NOT_PRESENT.
|
|
67
|
+
castFlags?: number;
|
|
68
|
+
// When true, timer is armed OOC / on Reset as a one-shot buff (Frost Armor). Host emits as AGGRO or
|
|
69
|
+
// initial TIMER with AURA_NOT_PRESENT.
|
|
70
|
+
onReset?: boolean;
|
|
71
|
+
// Optional self-HP band in percent. When set the host emits EVENT_T.HP instead of TIMER_IN_COMBAT
|
|
72
|
+
// so the cast only fires inside it. Cite: boss_darkmaster_gandling.cpp:94 portal gate above 3%.
|
|
73
|
+
hpPctMax?: number;
|
|
74
|
+
hpPctMin?: number;
|
|
75
|
+
/** creature_spell_list.CombatCondition. Cite: UnitAI.cpp:1218-1224; creatureCastList.ts:318. */
|
|
76
|
+
combatCondition?: number;
|
|
77
|
+
/** Instance-data gate at pick time. Cite: boss_hakkar.cpp aspect CombatCondition 1005-1009. */
|
|
78
|
+
gate?: ScriptDevDataGate;
|
|
79
|
+
// Skip unless the current victim is known out of melee. Cite: boss_grobbulus.cpp:97-110
|
|
80
|
+
// !CanReachWithMeleeAttack(GetVictim()).
|
|
81
|
+
requireVictimNotInMelee?: boolean;
|
|
82
|
+
// Fire only while SOMEBODY is in melee reach — the IN_MELEE_RANGE flag used as an existence test
|
|
83
|
+
// ahead of a nullptr cast. Cite: shadowfang_keep.cpp:477; darkshore.cpp:805.
|
|
84
|
+
requireMeleeTargetExists?: boolean;
|
|
85
|
+
// Fire `actions` on the timer without casting `spellId`. Cite: boss_four_horsemen.cpp:169-174 SPECIAL
|
|
86
|
+
// DoBroadcastText, no spell.
|
|
87
|
+
pollOnly?: boolean;
|
|
88
|
+
/** Exhaust after this many CAST_OK fires. Cite: boss_gothik.cpp:305 m_teleportCount >= 4. */
|
|
89
|
+
maxFires?: number;
|
|
90
|
+
/** SCHEME_HIGHEST_HP among the first N threat entries in melee. Cite: boss_patchwerk.cpp:114-127. */
|
|
91
|
+
highestHpTopThreat?: number;
|
|
92
|
+
/** Shuffle these and cast `spells[waveLeft-1]` each fire. Cite: boss_fankriss.cpp:91-99,141-157. */
|
|
93
|
+
rotateSpellIds?: number[];
|
|
94
|
+
// urand pick made ONCE per spawn, not per fire: the slot casts the same picked spell all fight.
|
|
95
|
+
// Cite: zulgurubScripts.cpp:61,110-115 m_uiCCSpell = urand(0,1) ? FEAR : KNOCKDOWN.
|
|
96
|
+
pickPerSpawnSpellIds?: number[];
|
|
97
|
+
/** friendly_dispellable scan radius. Cite: boss_bug_trio.cpp:371 DoFindFriendlyEligibleDispel(50.0f). */
|
|
98
|
+
friendlyRadiusYd?: number;
|
|
99
|
+
// An empty friendly pool falls back to SELF rather than casting nothing. Per-script: Sulfuron's
|
|
100
|
+
// Inspire does, Yauj's Dispel does not. Cite: boss_sulfuron_harbinger.cpp:104-105.
|
|
101
|
+
friendlyFallbackSelf?: boolean;
|
|
102
|
+
// DoSelectLowestHpFriendly scan radius: the LOWEST-hp friendly in range missing at least
|
|
103
|
+
// `friendlyHpDeficit` hp. Cite: UnitAI.cpp DoSelectLowestHpFriendly; boss_sulfuron_harbinger.cpp:162.
|
|
104
|
+
friendlyLowestHpYd?: number;
|
|
105
|
+
/** The `minHPDiff` second argument. Cite: boss_sulfuron_harbinger.cpp:162 the literal 1. */
|
|
106
|
+
friendlyHpDeficit?: number;
|
|
107
|
+
/** Wave size. Cite: boss_fankriss.cpp:90 urand(1, 3). */
|
|
108
|
+
waveMinCount?: number;
|
|
109
|
+
waveMaxCount?: number;
|
|
110
|
+
/** Intra-wave re-arm. Cite: boss_fankriss.cpp:156 urand(5000, 7000). */
|
|
111
|
+
intraWaveMinMs?: number;
|
|
112
|
+
intraWaveMaxMs?: number;
|
|
113
|
+
// When set, only this creature_template.entry arms the timer, matching the ctor filter a
|
|
114
|
+
// multi-entry script uses. Cite: azshara.cpp:90-94 m_aSpitelashAbility entry match.
|
|
115
|
+
creatureEntry?: number;
|
|
116
|
+
/** Source citation (file:line). */
|
|
117
|
+
cite: string;
|
|
118
|
+
/** CombatAI action id for a getClass() switch (shared ResetCombatAction). Cite: boss_nefarian.cpp:86,285. */
|
|
119
|
+
classCallGroup?: number;
|
|
120
|
+
// AddCombatAction(id, true) — slot starts exhausted until arm_timer / ResetCombatAction. Cite:
|
|
121
|
+
// boss_marli.cpp:72 AddCombatAction(MARLI_CHARGE, true); TimerAI.cpp disabled ctor.
|
|
122
|
+
startDisabled?: boolean;
|
|
123
|
+
// DisableCombatAction after CAST_OK — omit EFLAG_REPEATABLE so the slot exhausts. Cite:
|
|
124
|
+
// boss_marli.cpp:146 DisableCombatAction(MARLI_CHARGE); TimerAI.cpp:248-257.
|
|
125
|
+
oneShot?: boolean;
|
|
126
|
+
// After a successful cast of this timer (CAST_OK). Yauj Fear → DoResetThreat; Gate 23138 dummy →
|
|
127
|
+
// SendAIEvent. Cite: boss_bug_trio.cpp:356-358; boss_noth.cpp:218-219; SpellEffects.cpp:910-933.
|
|
128
|
+
actions?: ScriptDevAction[];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Phases / HP thresholds
|
|
132
|
+
|
|
133
|
+
export interface ScriptDevPhaseThreshold {
|
|
134
|
+
/** Enter this phase when HP% drops below threshold. */
|
|
135
|
+
phase: number;
|
|
136
|
+
/** Health percent (0–100). Cite: GetHealthPercent() < N. */
|
|
137
|
+
hpBelowPct: number;
|
|
138
|
+
// Fire `actions` once but do not assign `state.phase` / emit a phase event. Cite: boss_jeklik.cpp
|
|
139
|
+
// JEKLIK_PHASE_BATS — timerless HP summon, no SetSpellList.
|
|
140
|
+
retainPhase?: boolean;
|
|
141
|
+
/** Actions when threshold first crosses (transform cast, UpdateEntry, yell). */
|
|
142
|
+
actions?: ScriptDevAction[];
|
|
143
|
+
cite: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Actions (instance coupling, yells, summons, update entry)
|
|
147
|
+
|
|
148
|
+
export type ScriptDevAction =
|
|
149
|
+
| {
|
|
150
|
+
kind: 'set_instance_data';
|
|
151
|
+
/** Encounter type field (stratholme.h TYPE_*). */
|
|
152
|
+
field: number;
|
|
153
|
+
value: number;
|
|
154
|
+
/** Add `value` to the current store (default 1). Cite: temple_of_ahnqiraj.cpp:240 ++m_uiBugTrioDeathCount. */
|
|
155
|
+
increment?: boolean;
|
|
156
|
+
gate?: ScriptDevDataGate;
|
|
157
|
+
cite: string;
|
|
158
|
+
}
|
|
159
|
+
| {
|
|
160
|
+
kind: 'set_melee_enabled';
|
|
161
|
+
enabled: boolean;
|
|
162
|
+
gate?: ScriptDevDataGate;
|
|
163
|
+
cite: string;
|
|
164
|
+
}
|
|
165
|
+
| {
|
|
166
|
+
kind: 'yell';
|
|
167
|
+
/** Negative script_texts id or positive broadcast_text id. Provide either textId or textIds. */
|
|
168
|
+
textId?: number;
|
|
169
|
+
textIds?: readonly number[];
|
|
170
|
+
// Skip unless urand(0, urandInclusiveMax) === 0. Cite: boss_vaelastrasz.cpp:141-144 if (urand(0, 4))
|
|
171
|
+
// return;
|
|
172
|
+
urandInclusiveMax?: number;
|
|
173
|
+
cite: string;
|
|
174
|
+
}
|
|
175
|
+
| {
|
|
176
|
+
kind: 'update_entry';
|
|
177
|
+
entry: number;
|
|
178
|
+
cite: string;
|
|
179
|
+
}
|
|
180
|
+
| {
|
|
181
|
+
kind: 'cast_self';
|
|
182
|
+
spellId: number;
|
|
183
|
+
castFlags?: number;
|
|
184
|
+
// Instance-data condition the C++ cast sat behind. A Reset loop that casts once per open
|
|
185
|
+
// encounter unrolls to one row per iteration, each carrying its own gate.
|
|
186
|
+
gate?: ScriptDevDataGate;
|
|
187
|
+
// JustSummoned: only this summoned entry. Omit = every summon. Cite: boss_jeklik.cpp:146-157
|
|
188
|
+
// GetEntry() == NPC_BAT_RIDER / NPC_FRENZIED_BAT.
|
|
189
|
+
creatureEntry?: number;
|
|
190
|
+
cite: string;
|
|
191
|
+
}
|
|
192
|
+
| {
|
|
193
|
+
kind: 'summon';
|
|
194
|
+
spellId?: number;
|
|
195
|
+
creatureEntry?: number;
|
|
196
|
+
cite: string;
|
|
197
|
+
}
|
|
198
|
+
| {
|
|
199
|
+
kind: 'open_door';
|
|
200
|
+
/** GameObject entry (stratholme.h GO_ZIGGURAT_DOOR_*). */
|
|
201
|
+
goEntry: number;
|
|
202
|
+
cite: string;
|
|
203
|
+
}
|
|
204
|
+
| {
|
|
205
|
+
/** SetGoState(GO_STATE_READY). Cite: boss_heigan.cpp:190-197 CloseEntrance. */
|
|
206
|
+
kind: 'close_door';
|
|
207
|
+
goEntry: number;
|
|
208
|
+
cite: string;
|
|
209
|
+
}
|
|
210
|
+
| {
|
|
211
|
+
kind: 'cast_on_player';
|
|
212
|
+
spellId: number;
|
|
213
|
+
castFlags?: number;
|
|
214
|
+
/** Skip if player already has this aura. Cite: go_gauntlet_gate HasAura check. */
|
|
215
|
+
auraNotPresent?: boolean;
|
|
216
|
+
cite: string;
|
|
217
|
+
}
|
|
218
|
+
| {
|
|
219
|
+
kind: 'cast_on_group';
|
|
220
|
+
spellId: number;
|
|
221
|
+
castFlags?: number;
|
|
222
|
+
auraNotPresent?: boolean;
|
|
223
|
+
cite: string;
|
|
224
|
+
}
|
|
225
|
+
| {
|
|
226
|
+
// DoCastSpellIfCan(nullptr, id) when the spell resolves via spell_script_target.
|
|
227
|
+
// Cite: boss_majordomo_executus.cpp:243 SPELL_ENCOURAGEMENT; SpellTargets.cpp:40,71.
|
|
228
|
+
kind: 'cast_on_script_targets';
|
|
229
|
+
spellId: number;
|
|
230
|
+
castFlags?: number;
|
|
231
|
+
cite: string;
|
|
232
|
+
}
|
|
233
|
+
| {
|
|
234
|
+
kind: 'summon_count';
|
|
235
|
+
creatureEntry: number;
|
|
236
|
+
count: number;
|
|
237
|
+
/** Random radius around player (yards). Cite: GetRandomPoint radius 3.0f. */
|
|
238
|
+
radiusYd?: number;
|
|
239
|
+
/** Map-absolute spawn X. Cite: SummonCreature(entry, x, y, z, o, …). */
|
|
240
|
+
x?: number;
|
|
241
|
+
/** Map-absolute spawn Y. */
|
|
242
|
+
y?: number;
|
|
243
|
+
cite: string;
|
|
244
|
+
}
|
|
245
|
+
| {
|
|
246
|
+
kind: 'force_despawn';
|
|
247
|
+
/** Delay ms before despawn (0 = immediate). Cite: ForcedDespawn(60000). */
|
|
248
|
+
delayMs?: number;
|
|
249
|
+
cite: string;
|
|
250
|
+
}
|
|
251
|
+
| {
|
|
252
|
+
// ForcedDespawn owned summons (optional entry filter). Cite: CreatureEventAI.cpp
|
|
253
|
+
// ACTION_T_DESPAWN_GUARDIANS; boss_jeklik.cpp:185-195.
|
|
254
|
+
kind: 'despawn_guardians';
|
|
255
|
+
/** 0 = every owned summon. Cite: CreatureEventAI.cpp param1. */
|
|
256
|
+
entryId: number;
|
|
257
|
+
cite: string;
|
|
258
|
+
}
|
|
259
|
+
| {
|
|
260
|
+
kind: 'quest_credit';
|
|
261
|
+
/** Quest id for an event credit, or creature entry for a creature credit — see `credit`. */
|
|
262
|
+
entry: number;
|
|
263
|
+
// WHICH credit call this row is: `event` is AreaExploredOrEventHappens(questId), `creature`
|
|
264
|
+
// is KilledMonsterCredit(entry), `talkedTo` is TalkedToCreature(entry). Absent = event.
|
|
265
|
+
credit?: 'event' | 'creature' | 'talkedTo';
|
|
266
|
+
cite: string;
|
|
267
|
+
}
|
|
268
|
+
| {
|
|
269
|
+
kind: 'stop_combat';
|
|
270
|
+
// CMaNGOS AttackStop(true) — drop the current attack but STAY in the encounter, so later HP
|
|
271
|
+
// phases still fire. Omit for CombatStop / EnterEvadeMode, where the pull is genuinely over.
|
|
272
|
+
attackOnly?: boolean;
|
|
273
|
+
cite: string;
|
|
274
|
+
}
|
|
275
|
+
| {
|
|
276
|
+
kind: 'set_combat_movement';
|
|
277
|
+
enabled: boolean;
|
|
278
|
+
gate?: ScriptDevDataGate;
|
|
279
|
+
cite: string;
|
|
280
|
+
}
|
|
281
|
+
| {
|
|
282
|
+
/** CreatureAI::SetDeathPrevention — UNKILLABLE. Cite: CreatureAI.cpp:130-135 (pin de8f729). */
|
|
283
|
+
kind: 'set_death_prevention';
|
|
284
|
+
enabled: boolean;
|
|
285
|
+
gate?: ScriptDevDataGate;
|
|
286
|
+
cite: string;
|
|
287
|
+
}
|
|
288
|
+
| {
|
|
289
|
+
// Set current HP to floor(maxHealth * pct / 100). Cite: boss_vaelastrasz.cpp:115 Reset
|
|
290
|
+
// `SetHealth(uint32(GetMaxHealth()*.3))`.
|
|
291
|
+
kind: 'set_health_pct';
|
|
292
|
+
/** Percent of max health (0–100). */
|
|
293
|
+
pct: number;
|
|
294
|
+
cite: string;
|
|
295
|
+
}
|
|
296
|
+
| {
|
|
297
|
+
// Strip every effect of spellId from the scripted unit. Cite: boss_mr_smite.cpp
|
|
298
|
+
// RemoveAurasDueToSpell(SPELL_NIBLE_REFLEXES / SPELL_THRASH).
|
|
299
|
+
kind: 'remove_auras';
|
|
300
|
+
spellId: number;
|
|
301
|
+
cite: string;
|
|
302
|
+
}
|
|
303
|
+
| {
|
|
304
|
+
/** Combat-feed / equip chrome line (not a yell textId). */
|
|
305
|
+
kind: 'flavor';
|
|
306
|
+
text: string;
|
|
307
|
+
cite: string;
|
|
308
|
+
}
|
|
309
|
+
| {
|
|
310
|
+
// UnitAI::SendAIEvent — deliver eventType to one receiver (or each matching entry). Cite:
|
|
311
|
+
// UnitAI.cpp:664-668; SpellEffects.cpp:933 Gate self-send; boss_golemagg.cpp:73-84.
|
|
312
|
+
kind: 'send_ai_event';
|
|
313
|
+
eventType: number;
|
|
314
|
+
receiver: 'self' | 'creature_entry';
|
|
315
|
+
creatureEntry?: number;
|
|
316
|
+
/** GetCreatureListWithEntryInGrid radius yards. Cite: boss_golemagg.cpp:76 100.0f. */
|
|
317
|
+
radiusYd?: number;
|
|
318
|
+
miscValue?: number;
|
|
319
|
+
cite: string;
|
|
320
|
+
}
|
|
321
|
+
| {
|
|
322
|
+
// UnitAI::DoResetThreat — modifyAllThreatPercent(-100), keeping list entries at 0. With
|
|
323
|
+
// `of: 'cast'` it is modifyThreatPercent on the cast target. Cite: UnitAI.cpp:773-781.
|
|
324
|
+
kind: 'reset_threat';
|
|
325
|
+
of?: 'all' | 'cast';
|
|
326
|
+
cite: string;
|
|
327
|
+
}
|
|
328
|
+
| {
|
|
329
|
+
// Chase-focus: DoResetThreat, pick a random player, AddThreat and AttackStart — the class
|
|
330
|
+
// verb for DoAttackNewTarget. Cite: boss_buru.cpp:125-138; boss_ouro.cpp:379-386.
|
|
331
|
+
kind: 'chase_focus';
|
|
332
|
+
/** Flat threat after reset. Cite: boss_buru.cpp:135 AddThreat(target, 1000000.f). */
|
|
333
|
+
threat: number;
|
|
334
|
+
cite: string;
|
|
335
|
+
}
|
|
336
|
+
| {
|
|
337
|
+
// CombatAI::ResetCombatAction — clear exhausted and arm readyAt = now + delayMs. Cite:
|
|
338
|
+
// boss_marli.cpp:101-105 SpellHitTarget ENVELOPING_WEBS → ResetCombatAction(MARLI_CHARGE, 1000).
|
|
339
|
+
kind: 'arm_timer';
|
|
340
|
+
/** ScriptDevTimer.id to re-arm. */
|
|
341
|
+
timerId: string;
|
|
342
|
+
delayMs: number;
|
|
343
|
+
gate?: ScriptDevDataGate;
|
|
344
|
+
cite: string;
|
|
345
|
+
}
|
|
346
|
+
| {
|
|
347
|
+
// CombatAI::DisableTimer. Optional creatureEntry aims at another living add. Cite:
|
|
348
|
+
// boss_thekal.cpp:152-157,365-368 PreventRevive DisableTimer(ACTION_RESSURECTION).
|
|
349
|
+
kind: 'disable_timer';
|
|
350
|
+
timerId: string;
|
|
351
|
+
creatureEntry?: number;
|
|
352
|
+
gate?: ScriptDevDataGate;
|
|
353
|
+
cite: string;
|
|
354
|
+
}
|
|
355
|
+
| {
|
|
356
|
+
// JustSummoned: summoned->AI()->AttackStart(summoner). Cite: boss_loatheb.cpp:66-72 NPC_SPORE 16286.
|
|
357
|
+
kind: 'attack_summoner';
|
|
358
|
+
creatureEntry?: number;
|
|
359
|
+
cite: string;
|
|
360
|
+
}
|
|
361
|
+
| {
|
|
362
|
+
// JustSummoned: AttackStart(SelectAttackingTarget RANDOM). Cite: boss_jeklik.cpp:155-156
|
|
363
|
+
// NPC_FRENZIED_BAT.
|
|
364
|
+
kind: 'attack_random';
|
|
365
|
+
creatureEntry?: number;
|
|
366
|
+
cite: string;
|
|
367
|
+
}
|
|
368
|
+
| {
|
|
369
|
+
// HandleOpenGates: each living add of these entries AddThreat on the raid. No side test
|
|
370
|
+
// (IsInRightSideGothikArea is unported); product merges both sides. Cite: boss_gothik.cpp:261-287.
|
|
371
|
+
kind: 'adds_threat_players';
|
|
372
|
+
creatureEntries: number[];
|
|
373
|
+
cite: string;
|
|
374
|
+
}
|
|
375
|
+
| {
|
|
376
|
+
/** Write EventAI / ScriptDev phase so timer.phase masks swap. Cite: SetSpellList PHASE_2. */
|
|
377
|
+
kind: 'set_phase';
|
|
378
|
+
phase: number;
|
|
379
|
+
gate?: ScriptDevDataGate;
|
|
380
|
+
cite: string;
|
|
381
|
+
}
|
|
382
|
+
| {
|
|
383
|
+
/** Save getThreat(invoker) at gaze apply. Cite: boss_mandokir.cpp:169 m_targetThreat. */
|
|
384
|
+
kind: 'store_threat';
|
|
385
|
+
cite: string;
|
|
386
|
+
}
|
|
387
|
+
| {
|
|
388
|
+
// If current threat of the stored gaze target is higher, cast spellId on them. Cite:
|
|
389
|
+
// boss_mandokir.cpp:176-181 getThreat > m_targetThreat → SPELL_CHARGE_GAZE 24315.
|
|
390
|
+
kind: 'charge_if_threat_up';
|
|
391
|
+
spellId: number;
|
|
392
|
+
cite: string;
|
|
393
|
+
}
|
|
394
|
+
| {
|
|
395
|
+
/** UNIT_FLAG_UNINTERACTIBLE until clear. Cite: boss_thaddius.cpp:112 Reset. */
|
|
396
|
+
kind: 'set_unattackable';
|
|
397
|
+
cite: string;
|
|
398
|
+
}
|
|
399
|
+
| {
|
|
400
|
+
/** Drop UNINTERACTIBLE. Cite: boss_thaddius.cpp:329-332 Shock strips SPELL_THADIUS_SPAWN. */
|
|
401
|
+
kind: 'clear_unattackable';
|
|
402
|
+
cite: string;
|
|
403
|
+
}
|
|
404
|
+
| {
|
|
405
|
+
// CastCustomSpell per target: a player takes base + ((maxYd - min(d,maxYd)) / maxYd) * scale,
|
|
406
|
+
// a listed creature `pct` of ITS OWN max. Cite: boss_buru.cpp:269-281 SpellHitTarget.
|
|
407
|
+
kind: 'explode_proximity';
|
|
408
|
+
/** The AoE whose hit the C++ reacts to (SPELL_EXPLODE). */
|
|
409
|
+
spellId: number;
|
|
410
|
+
/** CastCustomSpell payload — school and mitigation come off its own bake row. */
|
|
411
|
+
payloadSpellId: number;
|
|
412
|
+
playerBase: number;
|
|
413
|
+
playerScale: number;
|
|
414
|
+
maxYd: number;
|
|
415
|
+
/** Named creature targets and the percent of their own max health they take. */
|
|
416
|
+
creaturePctMaxHealth?: Array<{ creatureEntry: number; pct: number; actions?: ScriptDevAction[] }>;
|
|
417
|
+
cite: string;
|
|
418
|
+
}
|
|
419
|
+
| {
|
|
420
|
+
// Shuffle once, deal one ability to self and to each same-entry sibling in range, each
|
|
421
|
+
// self-casting its own. Cite: mob_anubisath_sentinel.cpp:127-131,140-159,183-205.
|
|
422
|
+
kind: 'deal_group_abilities';
|
|
423
|
+
spellIds: number[];
|
|
424
|
+
/** GetCreatureListWithEntryInGrid radius. Cite: mob_anubisath_sentinel.cpp:117 80.0f. */
|
|
425
|
+
radiusYd: number;
|
|
426
|
+
cite: string;
|
|
427
|
+
}
|
|
428
|
+
| {
|
|
429
|
+
// JustDied: the dealt ability plus healSpellId onto every living sibling in range.
|
|
430
|
+
// Cite: mob_anubisath_sentinel.cpp:163-181 DoTransferAbility 2400 + HEAL_BRETHEN 26565.
|
|
431
|
+
kind: 'transfer_group_ability';
|
|
432
|
+
healSpellId?: number;
|
|
433
|
+
radiusYd: number;
|
|
434
|
+
cite: string;
|
|
435
|
+
}
|
|
436
|
+
| {
|
|
437
|
+
// One summon per DEAD body of `fromEntries` on the floor, so the raise scales with the corpse
|
|
438
|
+
// count. Cite: boss_nefarian.cpp:211-222 SPELL_RAISE_DRAKONID; :73,150-153 NPC 14605.
|
|
439
|
+
kind: 'raise_corpses';
|
|
440
|
+
fromEntries: number[];
|
|
441
|
+
creatureEntry: number;
|
|
442
|
+
/** MAX_DRAKONID_SUMMONS is 42, so the raise is bounded by the spawn budget, not by this. */
|
|
443
|
+
maxCount?: number;
|
|
444
|
+
cite: string;
|
|
445
|
+
}
|
|
446
|
+
| {
|
|
447
|
+
// Casts at the current victim only when it CHANGED since the last poll — a stack per new tank
|
|
448
|
+
// rather than a timer. Cite: boss_kelthuzad.cpp:495-521 KilledUnit + m_victimGuid.
|
|
449
|
+
kind: 'cast_on_victim_change';
|
|
450
|
+
spellId: number;
|
|
451
|
+
castFlags?: number;
|
|
452
|
+
cite: string;
|
|
453
|
+
}
|
|
454
|
+
| {
|
|
455
|
+
// JustSummoned: the image's MAX is a fraction of the SUMMONER's max and its CURRENT health is
|
|
456
|
+
// the summoner's percent, so a late split is a bigger body. Cite: boss_skeram.cpp:328-364.
|
|
457
|
+
kind: 'mirror_summoner_health';
|
|
458
|
+
/** Tried in order; the first band whose `belowPct` the summoner is under wins. */
|
|
459
|
+
bands: Array<{ belowPct: number; fracOfMax: number }>;
|
|
460
|
+
cite: string;
|
|
461
|
+
}
|
|
462
|
+
| {
|
|
463
|
+
// The pbaoe a script SELF-casts: roll spellId's own direct_damage over its own radius, since
|
|
464
|
+
// cast_self hands it to the caster alone. Cite: naxxramas.cpp:1089; spell_template 28433.
|
|
465
|
+
kind: 'damage_in_radius';
|
|
466
|
+
spellId: number;
|
|
467
|
+
cite: string;
|
|
468
|
+
}
|
|
469
|
+
| {
|
|
470
|
+
// A SET of `count` shuffled non-tank players, each taking spellId — the shape no TARGET_T has.
|
|
471
|
+
// Cite: boss_maexxna.cpp:207-224 WebWrapMaexxna MAX_PLAYERS_WEB_WRAP 3.
|
|
472
|
+
kind: 'cast_on_random_players';
|
|
473
|
+
spellId: number;
|
|
474
|
+
count: number;
|
|
475
|
+
/** SELECT_FLAG_SKIP_TANK — the current victim is never picked. */
|
|
476
|
+
skipTopThreat?: boolean;
|
|
477
|
+
cite: string;
|
|
478
|
+
}
|
|
479
|
+
| {
|
|
480
|
+
// A THIRD body casts: the nearest `casterEntry` within radiusYd of the VICTIM, measured from
|
|
481
|
+
// the victim. Cite: boss_mandokir.cpp:209-211 KilledUnit; :257-268 Ohgan's copy.
|
|
482
|
+
kind: 'proxy_cast_on_victim';
|
|
483
|
+
casterEntry: number;
|
|
484
|
+
spellId: number;
|
|
485
|
+
radiusYd: number;
|
|
486
|
+
cite: string;
|
|
487
|
+
}
|
|
488
|
+
| {
|
|
489
|
+
// A per-INSTANCE DISTINCT pair: r = urand(0,4), l = (r + urand(1,4)) % 5, written only while
|
|
490
|
+
// both fields are NOT_STARTED. Cite: SpellEffects.cpp:993-1029; blackwing_lair.cpp:622-691.
|
|
491
|
+
kind: 'roll_instance_pair';
|
|
492
|
+
leftField: number;
|
|
493
|
+
rightField: number;
|
|
494
|
+
leftValues: number[];
|
|
495
|
+
rightValues: number[];
|
|
496
|
+
cite: string;
|
|
497
|
+
}
|
|
498
|
+
| {
|
|
499
|
+
// A raw SetHealth subtraction of pct% of max, NOT damage: no armor, no resist, no threat.
|
|
500
|
+
// Cite: boss_viscidus.cpp:505-521 ViscidusShrinks; :517 the 1 + hpLose floor.
|
|
501
|
+
kind: 'shrink_creature_pct';
|
|
502
|
+
creatureEntry: number;
|
|
503
|
+
pct: number;
|
|
504
|
+
/** Floor the subtraction leaves standing. Cite: :517. */
|
|
505
|
+
minHealth?: number;
|
|
506
|
+
cite: string;
|
|
507
|
+
}
|
|
508
|
+
| {
|
|
509
|
+
// Cast at the unit the ROW's own cast resolved to; cast_on_player would aim at the leader.
|
|
510
|
+
// Cite: boss_sapphiron.cpp:265-279 PeriodicIceBolt 31800 + the 28535 payload swap.
|
|
511
|
+
kind: 'cast_on_cast_target';
|
|
512
|
+
spellId: number;
|
|
513
|
+
castFlags?: number;
|
|
514
|
+
/** Skip when that unit already holds this aura. */
|
|
515
|
+
auraNotPresent?: boolean;
|
|
516
|
+
cite: string;
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
// GO use / SpellHit / quest / emote hooks (zone scripts)
|
|
520
|
+
|
|
521
|
+
/** Condition on instance data field before a GO/quest hook runs. */
|
|
522
|
+
export interface ScriptDevDataGate {
|
|
523
|
+
field: number;
|
|
524
|
+
/** Require GetData(field) === value. */
|
|
525
|
+
equals?: number;
|
|
526
|
+
/** Require GetData(field) !== value. */
|
|
527
|
+
notEquals?: number;
|
|
528
|
+
/** Additional required gate. Cite: boss_thekal.cpp:248 TYPE_ZATH && TYPE_LORKHAN. */
|
|
529
|
+
and?: ScriptDevDataGate;
|
|
530
|
+
/** Alternative gate. Cite: boss_thekal.cpp:330 TYPE_THEKAL != SPECIAL || TYPE_ZATH != SPECIAL. */
|
|
531
|
+
or?: ScriptDevDataGate;
|
|
532
|
+
cite: string;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/** GameObject pGOUse handler IR. Cite: stratholmeScripts.cpp GOUse_go_* patterns. */
|
|
536
|
+
export interface ScriptDevGoUse {
|
|
537
|
+
/** gameobject_template.entry bindings. */
|
|
538
|
+
goEntries: number[];
|
|
539
|
+
/** All gates must pass (AND). */
|
|
540
|
+
gates?: ScriptDevDataGate[];
|
|
541
|
+
// Branch on current instance data (e.g. postbox SPECIAL → summon postmaster). First matching branch wins;
|
|
542
|
+
// if none match, `actions` run.
|
|
543
|
+
branches?: Array<{
|
|
544
|
+
gate: ScriptDevDataGate;
|
|
545
|
+
actions: ScriptDevAction[];
|
|
546
|
+
cite: string;
|
|
547
|
+
}>;
|
|
548
|
+
/** Default actions when no branch matches. */
|
|
549
|
+
actions?: ScriptDevAction[];
|
|
550
|
+
// Per-GO-ENTRY branches, checked before `branches`. Some GO scripts key off WHICH object was
|
|
551
|
+
// used: with two Molten Core bosses down, a data-gated branch would douse the wrong rune.
|
|
552
|
+
perEntry?: Array<{
|
|
553
|
+
goEntry: number;
|
|
554
|
+
gates?: ScriptDevDataGate[];
|
|
555
|
+
actions: ScriptDevAction[];
|
|
556
|
+
cite: string;
|
|
557
|
+
}>;
|
|
558
|
+
cite: string;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// SpellHit hook — e.g. Egan's Blaster on Restless Soul / Spectral Citizen. Cite:
|
|
562
|
+
// mob_restless_soulAI::SpellHit; mobs_spectral_ghostly_citizenAI::SpellHit.
|
|
563
|
+
export interface ScriptDevSpellHit {
|
|
564
|
+
spellId: number;
|
|
565
|
+
/** Optional incomplete quest status gate. Cite: QUEST_RESTLESS_SOUL. */
|
|
566
|
+
requireQuestIncomplete?: number;
|
|
567
|
+
/** Player caster only. */
|
|
568
|
+
playerCaster?: boolean;
|
|
569
|
+
/** One-shot tag (m_bIsTagged). */
|
|
570
|
+
once?: boolean;
|
|
571
|
+
/** Immediate actions on hit. */
|
|
572
|
+
actions?: ScriptDevAction[];
|
|
573
|
+
// Arm a one-shot die/transform timer after hit (m_uiDieTimer). Cite: restless_soul 1000; spectral 2000
|
|
574
|
+
// (ctor).
|
|
575
|
+
dieTimerMs?: number;
|
|
576
|
+
/** Actions when die timer expires. */
|
|
577
|
+
onDieTimer?: ScriptDevAction[];
|
|
578
|
+
cite: string;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/** QuestRewarded NPC hook. Cite: QuestRewarded_npc_aurius. */
|
|
582
|
+
export interface ScriptDevQuestRewarded {
|
|
583
|
+
questId: number;
|
|
584
|
+
gates?: ScriptDevDataGate[];
|
|
585
|
+
actions: ScriptDevAction[];
|
|
586
|
+
cite: string;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/** GossipHello branch by instance data (display text only — no combat). Cite: GossipHello_npc_aurius. */
|
|
590
|
+
export interface ScriptDevGossipHello {
|
|
591
|
+
/** Default gossip text id when no branch matches. */
|
|
592
|
+
defaultTextId: number;
|
|
593
|
+
branches?: Array<{
|
|
594
|
+
gates: ScriptDevDataGate[];
|
|
595
|
+
textId: number;
|
|
596
|
+
cite: string;
|
|
597
|
+
}>;
|
|
598
|
+
cite: string;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/** ReceiveEmote responses (TEXTEMOTE_*). Cite: mobs_spectral_ghostly_citizenAI::ReceiveEmote. */
|
|
602
|
+
export interface ScriptDevReceiveEmote {
|
|
603
|
+
/** TEXTEMOTE id (e.g. DANCE=10, RUDE=14, WAVE=0, BOW=2, KISS=17 — Classic). */
|
|
604
|
+
emote: number;
|
|
605
|
+
/** Optional interaction distance gate (yards). Cite: INTERACTION_DISTANCE. */
|
|
606
|
+
maxDistYd?: number;
|
|
607
|
+
actions: ScriptDevAction[];
|
|
608
|
+
/** Fallback when out of range (emote reply only). */
|
|
609
|
+
outOfRangeActions?: ScriptDevAction[];
|
|
610
|
+
cite: string;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// DB ScriptName binding that is not runnable in product (entry absent from bake). Census treats documented
|
|
614
|
+
// N/A bindings as ported when the script name is registered.
|
|
615
|
+
export interface ScriptDevUnusedBinding {
|
|
616
|
+
entry: number;
|
|
617
|
+
kind: 'creature' | 'go';
|
|
618
|
+
reason: string;
|
|
619
|
+
cite: string;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
// AuraScript hooks (Anastari Possess pattern)
|
|
623
|
+
|
|
624
|
+
// AuraScript IR — apply/remove/periodic + charm-side-switch helpers. Cite: SpellScript/AuraScript;
|
|
625
|
+
// boss_baroness_anastari.cpp AnastariPossess.
|
|
626
|
+
export interface ScriptDevAuraScript {
|
|
627
|
+
spellId: number;
|
|
628
|
+
// When this spell charms an enemy→player unit, break when HP ≤ frac * max. Cite: AnastariPossess
|
|
629
|
+
// OnPeriodicTickEnd GetHealthPercent() < 50.f.
|
|
630
|
+
charmBreakHpFrac?: number;
|
|
631
|
+
/** ForcePeriodicity interval ms (0 = none). Cite: AnastariPossess OnApply ForcePeriodicity(1000). */
|
|
632
|
+
periodMs?: number;
|
|
633
|
+
// Aura duration ms for non-charm holder auras (set_unattackable window). Cite: spell DurationIndex →
|
|
634
|
+
// SpellDuration; Noxxion 21708 index 8 → 15_000.
|
|
635
|
+
durationMs?: number;
|
|
636
|
+
onApply?: ScriptDevAuraAction[];
|
|
637
|
+
onRemove?: ScriptDevAuraAction[];
|
|
638
|
+
onPeriodic?: ScriptDevAuraAction[];
|
|
639
|
+
// Leash/break when charmer has possess-inv aura and threat list size ≤ N. Cite:
|
|
640
|
+
// boss_baroness_anastari.cpp SetLeashingCheck size() <= 1.
|
|
641
|
+
leashThreatSizeLte?: number;
|
|
642
|
+
/** Spell id that marks charmer "possessing" (for leash + unattackable). */
|
|
643
|
+
possessInvSpellId?: number;
|
|
644
|
+
cite: string;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
export type ScriptDevAuraAction =
|
|
648
|
+
| {
|
|
649
|
+
kind: 'cast_helper';
|
|
650
|
+
spellId: number;
|
|
651
|
+
basepoints?: number;
|
|
652
|
+
/** 'aura_target' | 'caster' */
|
|
653
|
+
on: 'aura_target' | 'caster';
|
|
654
|
+
cite: string;
|
|
655
|
+
}
|
|
656
|
+
| {
|
|
657
|
+
kind: 'remove_auras';
|
|
658
|
+
spellId: number;
|
|
659
|
+
on: 'aura_target' | 'caster';
|
|
660
|
+
cite: string;
|
|
661
|
+
}
|
|
662
|
+
| {
|
|
663
|
+
kind: 'heal_full';
|
|
664
|
+
on: 'aura_target' | 'caster';
|
|
665
|
+
cite: string;
|
|
666
|
+
}
|
|
667
|
+
| {
|
|
668
|
+
kind: 'set_unattackable';
|
|
669
|
+
on: 'aura_target' | 'caster';
|
|
670
|
+
cite: string;
|
|
671
|
+
}
|
|
672
|
+
| {
|
|
673
|
+
kind: 'clear_unattackable';
|
|
674
|
+
on: 'aura_target' | 'caster';
|
|
675
|
+
cite: string;
|
|
676
|
+
}
|
|
677
|
+
| {
|
|
678
|
+
kind: 'break_charm_if_hp_below';
|
|
679
|
+
frac: number;
|
|
680
|
+
cite: string;
|
|
681
|
+
}
|
|
682
|
+
| {
|
|
683
|
+
kind: 'flavor';
|
|
684
|
+
text: string;
|
|
685
|
+
cite: string;
|
|
686
|
+
};
|
|
687
|
+
|
|
688
|
+
// Timed phases (a CLOCK, not a health bar)
|
|
689
|
+
|
|
690
|
+
// One IncreaseHitCount ladder. Frost and melee share `hitCount`. Cite: boss_viscidus.cpp:86-92 HITCOUNT_*;
|
|
691
|
+
// :295-331 IncreaseHitCount; :552-565 FrostWeakness.
|
|
692
|
+
export interface ScriptDevHitCountGate {
|
|
693
|
+
id: string;
|
|
694
|
+
/** SpellDef.school exact match. Cite: GetSchoolMask() == SPELL_SCHOOL_MASK_FROST. */
|
|
695
|
+
school?: 'frost';
|
|
696
|
+
/** BASE_ATTACK / OFF_ATTACK. Cite: ViscidusFreeze OnProc attType. */
|
|
697
|
+
melee?: boolean;
|
|
698
|
+
/** Aura that must be on the boss (WEAKNESS 25926). */
|
|
699
|
+
requireAura?: number;
|
|
700
|
+
phaseMin?: number;
|
|
701
|
+
phaseMax?: number;
|
|
702
|
+
thresholds: ScriptDevHitCountThreshold[];
|
|
703
|
+
cite: string;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
export interface ScriptDevHitCountThreshold {
|
|
707
|
+
at: number;
|
|
708
|
+
setPhase?: number;
|
|
709
|
+
resetCount?: boolean;
|
|
710
|
+
/** Arm hitCountExpire. Cite: 25937 durationIndex 8 → 15000. */
|
|
711
|
+
durationMs?: number;
|
|
712
|
+
onExpire?: {
|
|
713
|
+
setPhase?: number;
|
|
714
|
+
resetCount?: boolean;
|
|
715
|
+
actions: ScriptDevAction[];
|
|
716
|
+
cite: string;
|
|
717
|
+
};
|
|
718
|
+
actions: ScriptDevAction[];
|
|
719
|
+
cite: string;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
// A phase transition driven by elapsed combat time, optionally cycling — `phases` is health-gated
|
|
723
|
+
// and fires once each, which is wrong for a submerge cycle. A two-entry ring is a cycle.
|
|
724
|
+
export interface ScriptDevTimedPhase {
|
|
725
|
+
/** Stable id, referenced by `next`. */
|
|
726
|
+
id: string;
|
|
727
|
+
/** Runtime phase to enter (gates timers via their `phase` field). */
|
|
728
|
+
phase: number;
|
|
729
|
+
/** Delay from arming to firing. */
|
|
730
|
+
afterMs: number;
|
|
731
|
+
/** Id armed after this one fires. Omit for a one-shot. */
|
|
732
|
+
next?: string;
|
|
733
|
+
// Skip this firing while HP% is at or below this; poll until it is not. Cite: boss_sapphiron.cpp:201
|
|
734
|
+
// GetHealthPercent() > 10.f air-phase gate.
|
|
735
|
+
hpMinPct?: number;
|
|
736
|
+
actions?: ScriptDevAction[];
|
|
737
|
+
cite: string;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// MoveInLineOfSight proximity trigger — a body that answers PRESENCE rather than a timer. Cite:
|
|
741
|
+
// naxxramas.cpp:1084-1089 npc_living_poison GetDistance2d(who) > 4.0f -> return, else explode.
|
|
742
|
+
export interface ScriptDevProximityTrigger {
|
|
743
|
+
/** Yards. Cite: the literal in the MoveInLineOfSight guard. */
|
|
744
|
+
withinYd: number;
|
|
745
|
+
/** Fire once per spawn — an exploding body has nothing to fire twice. */
|
|
746
|
+
once?: boolean;
|
|
747
|
+
actions: ScriptDevAction[];
|
|
748
|
+
cite: string;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
// Summon waves (add-pressure that is NOT a spell)
|
|
752
|
+
|
|
753
|
+
// A repeating summon loop owned by the script, not by a spell: summon `perTick` every tick until
|
|
754
|
+
// `waveCount` are out, then wait. Onyxia's whelps have no usable summon spell to express it.
|
|
755
|
+
export interface ScriptDevSummonWave {
|
|
756
|
+
/** Stable id for runtime state. */
|
|
757
|
+
id: string;
|
|
758
|
+
creatureEntry: number;
|
|
759
|
+
/** Summons per firing. Cite: `for (uint8 i = 0; i < 2; i++)`. */
|
|
760
|
+
perTick: number;
|
|
761
|
+
/** Delay from wave arm to first firing. Cite: ResetTimer(SUMMON_WHELPS, 3000). */
|
|
762
|
+
armDelayMs: number;
|
|
763
|
+
/** Between firings INSIDE the first wave. */
|
|
764
|
+
firstTickMinMs: number;
|
|
765
|
+
firstTickMaxMs: number;
|
|
766
|
+
/** Between firings inside every later wave. */
|
|
767
|
+
tickMinMs: number;
|
|
768
|
+
tickMaxMs: number;
|
|
769
|
+
/** Size of the first wave. Cite: m_uiWhelpsPerWave = 20. */
|
|
770
|
+
firstWaveCount: number;
|
|
771
|
+
/** Size of every later wave. Cite: urand(4, 10). */
|
|
772
|
+
waveMinCount: number;
|
|
773
|
+
waveMaxCount: number;
|
|
774
|
+
/** Gap = gapBaseMs - count * gapPerSummon{First,}Ms. Cite: 90 * IN_MILLISECONDS. */
|
|
775
|
+
gapBaseMs: number;
|
|
776
|
+
gapPerSummonFirstMs: number;
|
|
777
|
+
gapPerSummonMs: number;
|
|
778
|
+
/** Only runs while the runtime phase equals this. */
|
|
779
|
+
phase: number;
|
|
780
|
+
cite: string;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
// Lifecycle hooks
|
|
784
|
+
|
|
785
|
+
export interface ScriptDevLifecycle {
|
|
786
|
+
onAggro?: ScriptDevAction[];
|
|
787
|
+
onDeath?: ScriptDevAction[];
|
|
788
|
+
onEvade?: ScriptDevAction[];
|
|
789
|
+
onReset?: ScriptDevAction[];
|
|
790
|
+
// CreatureAI::KilledUnit — this creature killed a player-side unit. Cite: Unit.cpp Kill →
|
|
791
|
+
// killer->AI()->KilledUnit; boss_vaelastrasz.cpp:139-145.
|
|
792
|
+
onKill?: ScriptDevAction[];
|
|
793
|
+
// JustSummoned — actions run on each creature this AI summons (actor = summoned). Cite:
|
|
794
|
+
// boss_jandice_barov.cpp:52-55 CastSpell(pSummoned, SPELL_SPREAD_ILLUSIONS).
|
|
795
|
+
justSummoned?: ScriptDevAction[];
|
|
796
|
+
// CreatureAI::JustPreventedDeath — lethal hit while SetDeathPrevention, once per pull. Cite:
|
|
797
|
+
// CreatureAI.cpp JustPreventedDeath; boss_thekal.cpp:102-123.
|
|
798
|
+
onPreventedDeath?: ScriptDevAction[];
|
|
799
|
+
// SummonedJustReachedHome — actions run on the summon that reached home. Cite: boss_maexxna.cpp:145-148
|
|
800
|
+
// summoned->ForcedDespawn().
|
|
801
|
+
summonedReachedHome?: ScriptDevAction[];
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
// Cross-creature damage/heal mirror (the Twin Emperors' shared pool): damage and heal are scaled
|
|
805
|
+
// by the partner's max, and Heal Brother fires within range. Cite: boss_twinemperors.cpp:96-125.
|
|
806
|
+
export interface ScriptDevDamageHealMirror {
|
|
807
|
+
partnerEntry: number;
|
|
808
|
+
/** SPELL_TWIN_EMPATHY — CastCustomSpell damage; recursion guard. */
|
|
809
|
+
empathySpellId: number;
|
|
810
|
+
/** SPELL_TWIN_SUICIDE when mirrored damage >= partner HP. */
|
|
811
|
+
suicideSpellId: number;
|
|
812
|
+
/** SPELL_HEAL_BROTHER contact heal. */
|
|
813
|
+
healBrotherSpellId?: number;
|
|
814
|
+
/** MoveInLineOfSight range yards. Cite: boss_twinemperors.cpp:209 60.0f */
|
|
815
|
+
healBrotherRangeYd?: number;
|
|
816
|
+
/** Encounter field that must be IN_PROGRESS for Heal Brother. */
|
|
817
|
+
encounterField?: number;
|
|
818
|
+
cite: string;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
// Instance script IR
|
|
822
|
+
|
|
823
|
+
/** Encounter state values — classic InstanceData. Cite: sc_instance.h. */
|
|
824
|
+
export const INSTANCE_DATA = {
|
|
825
|
+
NOT_STARTED: 0,
|
|
826
|
+
IN_PROGRESS: 1,
|
|
827
|
+
FAIL: 2,
|
|
828
|
+
DONE: 3,
|
|
829
|
+
SPECIAL: 4,
|
|
830
|
+
} as const;
|
|
831
|
+
|
|
832
|
+
// ScriptDev AIEventType ids used by SendAIEvent / ReceiveAIEvent. Cite: AIDefines.h:50-55 (pin de8f729).
|
|
833
|
+
export const AI_EVENT = {
|
|
834
|
+
CUSTOM_A: 1000,
|
|
835
|
+
CUSTOM_B: 1001,
|
|
836
|
+
CUSTOM_C: 1002,
|
|
837
|
+
CUSTOM_D: 1003,
|
|
838
|
+
CUSTOM_E: 1004,
|
|
839
|
+
CUSTOM_F: 1005,
|
|
840
|
+
} as const;
|
|
841
|
+
|
|
842
|
+
// ReceiveAIEvent hook — actions when this script is the SendAIEvent receiver. Cite: UnitAI.cpp:667
|
|
843
|
+
// receiver->AI()->ReceiveAIEvent; boss_shazzrah.cpp:80-87.
|
|
844
|
+
export interface ScriptDevReceiveAiEvent {
|
|
845
|
+
eventType: number;
|
|
846
|
+
/** If set, only this sender entry (Core Rager checks NPC_GOLEMAGG). */
|
|
847
|
+
senderEntry?: number;
|
|
848
|
+
actions: ScriptDevAction[];
|
|
849
|
+
cite: string;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
// `SummonedCreatureJustDied` — actions keyed on how many of the script's own adds have died. It
|
|
853
|
+
// exists for the boss whose encounter ends without him dying: Majordomo, unwinnable without it.
|
|
854
|
+
export interface ScriptDevAddDeathHook {
|
|
855
|
+
/** Which creature entries count as this script's adds. */
|
|
856
|
+
creatureEntries: number[];
|
|
857
|
+
// Deaths that trigger the actions; `all` / `allButOne` / `half` resolve against `total`, the
|
|
858
|
+
// script's own constant, never a live headcount. `every` fires while addsKilled < total.
|
|
859
|
+
atKilled: number | 'all' | 'allButOne' | 'half' | 'every';
|
|
860
|
+
total: number;
|
|
861
|
+
actions: ScriptDevAction[];
|
|
862
|
+
cite: string;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
export interface ScriptDevEncounterBinding {
|
|
866
|
+
/** creature_template.entry that drives this encounter field. */
|
|
867
|
+
creatureEntry: number;
|
|
868
|
+
field: number;
|
|
869
|
+
/** SetData value on death. Default DONE. */
|
|
870
|
+
onDeath?: number;
|
|
871
|
+
/** SetData value on aggro. Default IN_PROGRESS. */
|
|
872
|
+
onAggro?: number;
|
|
873
|
+
/** SetData value on evade/fail. Default FAIL. */
|
|
874
|
+
onEvade?: number;
|
|
875
|
+
cite: string;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
export interface ScriptDevDoorBinding {
|
|
879
|
+
/** Encounter field that opens this door when value === DONE (or SPECIAL). */
|
|
880
|
+
field: number;
|
|
881
|
+
goEntry: number;
|
|
882
|
+
/** Values that open the door. Default [DONE]. */
|
|
883
|
+
openOn?: number[];
|
|
884
|
+
cite: string;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
// Top-level IR
|
|
888
|
+
|
|
889
|
+
export interface ScriptDevIR {
|
|
890
|
+
/** Script Name = "…" — registry key; census parses quoted names. */
|
|
891
|
+
name: string;
|
|
892
|
+
/** creature_template.ScriptName bindings. Empty for pure instance / GO scripts. */
|
|
893
|
+
boundCreatures: number[];
|
|
894
|
+
/** gameobject_template.ScriptName bindings. */
|
|
895
|
+
boundGos?: number[];
|
|
896
|
+
/** Source cpp relative path under ScriptDevAI/scripts/. */
|
|
897
|
+
sourceFile: string;
|
|
898
|
+
timers: ScriptDevTimer[];
|
|
899
|
+
phases?: ScriptDevPhaseThreshold[];
|
|
900
|
+
/** Script-owned repeating summon loops (no spell drives them). */
|
|
901
|
+
summonWaves?: ScriptDevSummonWave[];
|
|
902
|
+
/** Clock-driven phase transitions (submerge cycles). See ScriptDevTimedPhase. */
|
|
903
|
+
timedPhases?: ScriptDevTimedPhase[];
|
|
904
|
+
// Ticks `timedPhases` while out of combat (no threat). Only Kel'Thuzad's C++ runs its
|
|
905
|
+
// phase clock outside combat. Cite: boss_kelthuzad.cpp:236-238 polls players, not threat.
|
|
906
|
+
oocClock?: boolean;
|
|
907
|
+
// School / melee hit-count freeze gates (shared m_hitCount). Cite:
|
|
908
|
+
// boss_viscidus.cpp:86-92,295-331,552-565.
|
|
909
|
+
hitCountGates?: ScriptDevHitCountGate[];
|
|
910
|
+
/** MoveInLineOfSight proximity answers. Cite: naxxramas.cpp:1084-1089. */
|
|
911
|
+
proximityTriggers?: ScriptDevProximityTrigger[];
|
|
912
|
+
// Shared HP pool — damage and heals on this creature apply percent-mirrored to partnerEntry. Cite:
|
|
913
|
+
// boss_twinemperors.cpp:96-125.
|
|
914
|
+
damageHealMirror?: ScriptDevDamageHealMirror;
|
|
915
|
+
auraScripts?: ScriptDevAuraScript[];
|
|
916
|
+
lifecycle?: ScriptDevLifecycle;
|
|
917
|
+
/** SummonedCreatureJustDied hooks — see ScriptDevAddDeathHook. */
|
|
918
|
+
addDeaths?: ScriptDevAddDeathHook[];
|
|
919
|
+
/** Instance-only: encounter type → creature death / doors. */
|
|
920
|
+
encounters?: ScriptDevEncounterBinding[];
|
|
921
|
+
doors?: ScriptDevDoorBinding[];
|
|
922
|
+
/** GO use handlers (pGOUse). */
|
|
923
|
+
goUse?: ScriptDevGoUse;
|
|
924
|
+
/** SpellHit handlers. */
|
|
925
|
+
spellHits?: ScriptDevSpellHit[];
|
|
926
|
+
/** QuestRewarded NPC hooks. */
|
|
927
|
+
questRewarded?: ScriptDevQuestRewarded[];
|
|
928
|
+
/** GossipHello text selection. */
|
|
929
|
+
gossipHello?: ScriptDevGossipHello;
|
|
930
|
+
/** ReceiveEmote handlers. */
|
|
931
|
+
receiveEmotes?: ScriptDevReceiveEmote[];
|
|
932
|
+
/** ReceiveAIEvent handlers. Cite: UnitAI.cpp:667; boss_shazzrah.cpp:80-87. */
|
|
933
|
+
receiveAiEvents?: ScriptDevReceiveAiEvent[];
|
|
934
|
+
// DB bindings not present in the bake (or not owned by this script body). Documented so census / missions
|
|
935
|
+
// treat the script as fully ported.
|
|
936
|
+
unusedBindings?: ScriptDevUnusedBinding[];
|
|
937
|
+
// CombatManager SetLeashingCheck: evade when the unit's z is above this. Cite: boss_faerlina.cpp:52,67-71
|
|
938
|
+
// resetZ 266; boss_razuvious.cpp:49,60 z 285.
|
|
939
|
+
leashZGt?: number;
|
|
940
|
+
/** Evade when world x is above this. Cite: boss_heigan.cpp:62,80-85 resetX 2825. */
|
|
941
|
+
leashXGt?: number;
|
|
942
|
+
// Evade when planar yards from respawn/home exceed this. Cite: boss_heigan.cpp:84 GetDistance2d(respawn)
|
|
943
|
+
// > 90.
|
|
944
|
+
leashHomeYd?: number;
|
|
945
|
+
/** Evade if any corner matches (x > xGt && y < yLt). Cite: boss_four_horsemen.cpp:107-140. */
|
|
946
|
+
leashOrXy?: { xGt: number; yLt: number }[];
|
|
947
|
+
/** Spell ids referenced (for kit assembly). */
|
|
948
|
+
spellIds: number[];
|
|
949
|
+
cites: string[];
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
// Runtime state (host-owned; combat injects)
|
|
953
|
+
|
|
954
|
+
export interface ScriptDevRuntimeState {
|
|
955
|
+
ir: ScriptDevIR;
|
|
956
|
+
/** Current phase (0 default). */
|
|
957
|
+
phase: number;
|
|
958
|
+
/** Phase thresholds already fired. */
|
|
959
|
+
phaseFired: Set<number>;
|
|
960
|
+
/** Possessed target side id while possess-end timer runs (Anastari). */
|
|
961
|
+
possessedSide?: string | null;
|
|
962
|
+
/** Possess-end check timer remaining ms (0 = idle). Cite: m_uiPossessEndTimer. */
|
|
963
|
+
possessEndTimerMs: number;
|
|
964
|
+
/** Armed timed phase id + ms left (ScriptDevTimedPhase). */
|
|
965
|
+
timedPhase?: { id: string; remainingMs: number } | null;
|
|
966
|
+
/** Per-wave summon loop state, keyed by ScriptDevSummonWave.id. */
|
|
967
|
+
summonWaves?: Record<string, { timerMs: number; summoned: number; waveCount: number; firstDone: boolean }>;
|
|
968
|
+
/** SpellHit one-shot tag (m_bIsTagged). */
|
|
969
|
+
spellHitTagged?: boolean;
|
|
970
|
+
/** How many of this script's own adds have died (SummonedCreatureJustDied counter). */
|
|
971
|
+
addsKilled?: number;
|
|
972
|
+
/** Remaining die-after-tag timer ms (0 = idle). Cite: m_uiDieTimer. */
|
|
973
|
+
dieTimerMs?: number;
|
|
974
|
+
/** One-shot C++ bools (m_isInitialEntangleDone). Cleared on evade Reset. */
|
|
975
|
+
oneshotTags?: Set<string>;
|
|
976
|
+
/** Threatening Gaze: threat of the gazed unit at apply. Cite: boss_mandokir.cpp:111,169. */
|
|
977
|
+
gazeThreat?: { side: string; amount: number };
|
|
978
|
+
/** Ability dealt by deal_group_abilities. Cite: mob_anubisath_sentinel.cpp:74 m_myAbility. */
|
|
979
|
+
dealtAbilitySpellId?: number;
|
|
980
|
+
/** Victim side at the last cast_on_victim_change poll. Cite: boss_kelthuzad.cpp:504 m_victimGuid. */
|
|
981
|
+
lastVictimSide?: string | null;
|
|
982
|
+
/** Shared m_hitCount. Cite: boss_viscidus.cpp:142,151,296. */
|
|
983
|
+
hitCount?: number;
|
|
984
|
+
/** Freeze-aura duration clock. Cite: boss_viscidus.cpp:415-419; 25937 durationIndex 8. */
|
|
985
|
+
hitCountExpire?: {
|
|
986
|
+
remainingMs: number;
|
|
987
|
+
setPhase?: number;
|
|
988
|
+
resetCount?: boolean;
|
|
989
|
+
actions: ScriptDevAction[];
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
/** Output of IR → cast-entry conversion (feeds existing creatureCasts arm path). */
|
|
994
|
+
export interface ScriptDevCastPlan {
|
|
995
|
+
castEntries: CreatureCastEntry[];
|
|
996
|
+
spellIds: number[];
|
|
997
|
+
auraScripts: ScriptDevAuraScript[];
|
|
998
|
+
// Creature entries this script can UpdateEntry into mid-fight (Dathrohan → Balnazzar 10813). The
|
|
999
|
+
// spec builder resolves each against the bake so combat can swap stats without a DataStore.
|
|
1000
|
+
morphEntries: number[];
|
|
1001
|
+
ir: ScriptDevIR;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
// ScriptedAI and ScriptedInstance constants (sc_creature.cpp, sc_instance.h, system.h)
|
|
1005
|
+
|
|
1006
|
+
/** ScriptedAI.cpp:22–24 m_uiEvadeCheckCooldown = 2500 ms */
|
|
1007
|
+
export const SCRIPTED_AI_EVADE_COOLDOWN_MS = 2500;
|
|
1008
|
+
|
|
1009
|
+
/** EncounterState enum. Cite: sc_instance.h:12–19 */
|
|
1010
|
+
export const ENCOUNTER_STATE = {
|
|
1011
|
+
NOT_STARTED: 0,
|
|
1012
|
+
IN_PROGRESS: 1,
|
|
1013
|
+
FAIL: 2,
|
|
1014
|
+
DONE: 3,
|
|
1015
|
+
SPECIAL: 4,
|
|
1016
|
+
} as const;
|
|
1017
|
+
|
|
1018
|
+
/** Script texts offset ranges. Cite: system.h:35–38, system.cpp:48 LoadMangosStrings */
|
|
1019
|
+
export const TEXT_SOURCE_RANGE = {
|
|
1020
|
+
SCRIPT_TEXTS_START: -1_000_000,
|
|
1021
|
+
SCRIPT_TEXTS_END: -1_999_999,
|
|
1022
|
+
CUSTOM_TEXTS_START: -2_000_000,
|
|
1023
|
+
CUSTOM_TEXTS_END: -2_999_999,
|
|
1024
|
+
GOSSIP_TEXTS_START: -3_000_000,
|
|
1025
|
+
GOSSIP_TEXTS_END: -3_999_999,
|
|
1026
|
+
} as const;
|