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,1149 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
BuffMod,
|
|
3
|
+
ConditionDef,
|
|
4
|
+
ControlKind,
|
|
5
|
+
Mechanic,
|
|
6
|
+
PowerType,
|
|
7
|
+
School,
|
|
8
|
+
SealKind,
|
|
9
|
+
ShapeshiftFormId,
|
|
10
|
+
TotemSlot,
|
|
11
|
+
} from './primitives.ts';
|
|
12
|
+
|
|
13
|
+
// What Judgement unleashes per seal: damage seals roll min..max holy; utility and Crusader seals
|
|
14
|
+
// apply `debuffSpellId` instead. Cite: Paladin.cpp:78–116 spell_judgement; Spell.sql JoC ranks.
|
|
15
|
+
export interface JudgementBurst {
|
|
16
|
+
school: School;
|
|
17
|
+
min: number;
|
|
18
|
+
max: number;
|
|
19
|
+
halveIfNotStunned?: boolean;
|
|
20
|
+
// The judgement damage carrier this burst resolved from (20187 JoR r1, 20467 JoC r1), kept so the
|
|
21
|
+
// combat site can read its effectBonusCoefficient — the burst rolls from the tables here.
|
|
22
|
+
spellId?: number;
|
|
23
|
+
// Bonus-damage coefficient from the carrier's effectBonusCoefficient[slot], filled by
|
|
24
|
+
// buildCombatant; the store-free interpreter path rolls from transcribed tables and has no slot.
|
|
25
|
+
coeff?: number;
|
|
26
|
+
/** JoL/JoW/JoC aura applied to the judged target (e.g. 20185 / 20186 / 20188). */
|
|
27
|
+
debuffSpellId?: number;
|
|
28
|
+
/** Debuff display name (Judgement of Light / Wisdom / Crusader). */
|
|
29
|
+
debuffName?: string;
|
|
30
|
+
/** Debuff duration ms. Classic JoL/JoW/JoC rows bake to 10_000. */
|
|
31
|
+
debuffDurationMs?: number;
|
|
32
|
+
// Heal the striker on a landed melee hit vs the judged target. Sourced: Spell.sql Judgement of Light heal
|
|
33
|
+
// carriers (20267 bp24→25, …).
|
|
34
|
+
onHitHeal?: number;
|
|
35
|
+
// Restore mana to the striker on a landed melee hit vs the judged target. Sourced: Spell.sql Judgement of
|
|
36
|
+
// Wisdom energize carriers (20268 bp32→33, …).
|
|
37
|
+
onHitMana?: number;
|
|
38
|
+
// Flat spell/holy damage taken on the judged target (Judgement of the Crusader), from Spell.sql
|
|
39
|
+
// aura 14 basePoints+dice. Cite: SpellAuras.cpp SPELL_AURA_MOD_DAMAGE_TAKEN.
|
|
40
|
+
spellTaken?: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// One aura-removal body: `cast` fires `spellId`, `remove_aura` strips it, `heal_full` restores the
|
|
44
|
+
// caster. `amount` overrides the payload roll. Cite: SpellAuras.cpp HandleAuraDummy(!apply).
|
|
45
|
+
export interface AuraRemoveBody {
|
|
46
|
+
action: 'cast' | 'remove_aura' | 'heal_full';
|
|
47
|
+
spellId?: number;
|
|
48
|
+
mode: 'expire' | 'death' | 'dispel' | 'any';
|
|
49
|
+
amount?: number;
|
|
50
|
+
/** Who casts / is acted on. Defaults: caster → holder (`caster->CastSpell(target, …)`). */
|
|
51
|
+
from?: 'caster' | 'holder';
|
|
52
|
+
to?: 'caster' | 'holder';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type SpellEffectBody =
|
|
56
|
+
// `pointsPerComboPoint` (from EffectPointsPerComboPointN) is added per combo point at cast time
|
|
57
|
+
// when the caster has points on the target (CMaNGOS Object.cpp CalculateSpellEffectValue).
|
|
58
|
+
// `hostile: false` = EffectImplicitTargetA is TARGET_UNIT_CASTER (1) and the damage lands on the
|
|
59
|
+
// CASTER — every engineering backfire, Dark Rune, Shadow Bolt Misfire. Cite: SpellTargetDefines.h.
|
|
60
|
+
| { kind: 'direct_damage'; school: School; min: number; max: number; pointsPerComboPoint?: number; hostile?: boolean }
|
|
61
|
+
// Periodic damage. `leechMultiple` (aura 53) also heals the caster for dealt × multiplier;
|
|
62
|
+
// `healthFunnel` (aura 62) reverses it. Cite: SpellAuras.cpp PeriodicTick :4592–4683.
|
|
63
|
+
| {
|
|
64
|
+
kind: 'dot';
|
|
65
|
+
school: School;
|
|
66
|
+
min: number;
|
|
67
|
+
max: number;
|
|
68
|
+
durationMs: number;
|
|
69
|
+
tickMs: number;
|
|
70
|
+
pointsPerComboPoint?: number;
|
|
71
|
+
leechMultiple?: number;
|
|
72
|
+
healthFunnel?: boolean;
|
|
73
|
+
// EffectImplicitTargetA caster/self (TARGET_UNIT_CASTER=1): the aura sits on the caster.
|
|
74
|
+
// false → applySpell routes to src; true/absent → foe. Cite: SpellTargetDefines.h.
|
|
75
|
+
hostile?: boolean;
|
|
76
|
+
}
|
|
77
|
+
// SPELL_EFFECT_PERSISTENT_AREA_AURA (27) + PERIODIC_DAMAGE (aura 3): a session-owned ground pool,
|
|
78
|
+
// not a unit DoT. `radius` absent ⇒ text combat hits the whole hostile side (GAP).
|
|
79
|
+
| { kind: 'persistent_area'; school: School; min: number; max: number; durationMs: number; tickMs: number; radius?: number; pointsPerComboPoint?: number }
|
|
80
|
+
// `applyTo` routes party/friend heals like buffs: 'party' → every living friendly, 'friendly' →
|
|
81
|
+
// lowest-HP ally, 'pet' → pet, omit → single-target triage / self. Cite: healTargets.ts.
|
|
82
|
+
| { kind: 'heal'; min: number; max: number; applyTo?: 'self' | 'pet' | 'friendly' | 'party' }
|
|
83
|
+
// SPELL_EFFECT_INSTAKILL (1). `self` / `selfCast` when EffectImplicitTargetA is caster
|
|
84
|
+
// (Voidwalker Sacrifice kills the pet). Cite: SpellEffects.cpp:205–221.
|
|
85
|
+
| { kind: 'instakill'; self?: boolean; selfCast?: boolean }
|
|
86
|
+
// SPELL_EFFECT_SUMMON_CRITTER (97) mini-pet. Cite: SpellEffects.cpp:5031–5111.
|
|
87
|
+
| { kind: 'summon_critter'; creature: number; durationMs: number; despawnOnly?: boolean }
|
|
88
|
+
// SPELL_AURA_MOD_SCALE (61) cosmetic size %. Cite: SpellAuras.cpp:2182–2185.
|
|
89
|
+
| { kind: 'mod_scale'; pct: number; durationMs: number }
|
|
90
|
+
// Optional mechanic (usually 'root') so mechanic immunity / DR can key the live aura without
|
|
91
|
+
// inventing from kind alone. Cite: SharedDefines MECHANIC_ROOT=7; spell_template.Mechanic.
|
|
92
|
+
| { kind: 'root'; durationMs: number; mechanic?: Mechanic }
|
|
93
|
+
// Crowd control (stun / fear / incapacitate / silence / disarm / root). `mechanic` groups DR and
|
|
94
|
+
// gates type immunity; `breakOnDamage` drops it on the next hit. `pulseMs` is dead — no reader.
|
|
95
|
+
| { kind: 'cc'; control: ControlKind; mechanic: Mechanic; durationMs: number; school: School; breakOnDamage?: boolean; pulseMs?: number; onlyTypes?: number[] }
|
|
96
|
+
// SPELL_EFFECT_INTERRUPT_CAST (68): cancel an interruptible cast and lock out the VICTIM's cast
|
|
97
|
+
// school for `lockoutMs`. Not a global silence. Cite: SpellEffects.cpp EffectInterruptCast.
|
|
98
|
+
| { kind: 'interrupt_cast'; lockoutMs: number }
|
|
99
|
+
// SPELL_EFFECT_TRIGGER_SPELL (64): on a successful hit, cast the triggered spell's effects.
|
|
100
|
+
// Distinct from aura 42 `proc_trigger_spell`. Cite: SpellEffects.cpp EffectTriggerSpell.
|
|
101
|
+
| { kind: 'trigger_spell'; spellId: number }
|
|
102
|
+
| { kind: 'mechanic_immunity_purge'; mechanic: number; mechanicMask: number }
|
|
103
|
+
// SPELL_AURA_ADD_TARGET_TRIGGER (109): self-aura; a later isAffectedOnSpell hit chance-casts
|
|
104
|
+
// EffectTriggerSpell. Cite: SpellAuras.cpp:170; Spell.cpp:7433–7468 ProcSpellAuraTriggers.
|
|
105
|
+
| {
|
|
106
|
+
kind: 'add_target_trigger';
|
|
107
|
+
triggerSpellId: number;
|
|
108
|
+
chancePct: number;
|
|
109
|
+
durationMs: number;
|
|
110
|
+
/** Holder SpellFamilyName. Cite: SpellAuras.cpp:708. */
|
|
111
|
+
familyName?: number;
|
|
112
|
+
/** EffectItemType / spell_affect mask. Cite: SpellMgr.h:1950–1958 GetSpellAffectMask. */
|
|
113
|
+
familyFlags?: number;
|
|
114
|
+
}
|
|
115
|
+
// A permanent per-school magic resistance contribution, summed into `resistances`. hostile:true
|
|
116
|
+
// (or amount < 0) → foe debuff; false/positive → self. Cite: isHostileBuffEffect; KI-765.
|
|
117
|
+
// `pct` is the BASE_PCT form (aura 142 with a magic-school mask — Ossirian's Weaknesses −100).
|
|
118
|
+
// It resolves to a flat amount against the target's own resistance at apply. Cite: SpellAuras.cpp:3425.
|
|
119
|
+
| { kind: 'resist'; school: School; amount: number; hostile?: boolean; pct?: number }
|
|
120
|
+
// A self-cast control-breaker (Will of the Forsaken, Escape Artist): removes the listed controls
|
|
121
|
+
// and with `immuneMs` grants brief immunity. Usable WHILE controlled — that is the point.
|
|
122
|
+
| { kind: 'cleanse'; controls: ControlKind[]; immuneMs?: number }
|
|
123
|
+
// SPELL_EFFECT_DISPEL (38): remove up to `count` auras of `dispelType` (0 → 1 per
|
|
124
|
+
// ProcessDispelList). Cite: SpellEffects.cpp EffectDispel; domain/spells/dispel.ts.
|
|
125
|
+
| { kind: 'dispel'; dispelType: number; count: number }
|
|
126
|
+
// SPELL_EFFECT_DISPEL_MECHANIC (108): remove up to `count` holders with HasMechanic(mechanic),
|
|
127
|
+
// mechanic from EffectMiscValue. Cite: SpellEffects.cpp:2499–2519; SpellAuras.cpp:5786–5794.
|
|
128
|
+
| { kind: 'dispel_mechanic'; mechanic: number; count: number }
|
|
129
|
+
// SPELL_AURA_SPELL_MAGNET (96), Grounding Totem: redirect one MAGIC/NONE single-target spell to
|
|
130
|
+
// the aura caster. durationMs 0 → totem lifetime. Cite: Unit.cpp:6896–6922 SelectMagnetTarget.
|
|
131
|
+
| { kind: 'spell_magnet'; durationMs: number; charges?: number }
|
|
132
|
+
// SPELL_AURA_REFLECT_SPELLS (28) / _SCHOOL (74): reflect incoming harmful magic with `pct`
|
|
133
|
+
// chance; `school` omitted → all schools. Cite: Unit.cpp GetReflectChance ~3425.
|
|
134
|
+
| { kind: 'reflect'; pct: number; school?: School; durationMs: number }
|
|
135
|
+
// SPELL_AURA_FEATHER_FALL (105): Slow Fall self aura. Text game registers the aura so cast is
|
|
136
|
+
// not a pure mana sink; no movement simulation. durationMs from DurationIndex.
|
|
137
|
+
| { kind: 'feather_fall'; durationMs: number }
|
|
138
|
+
// SPELL_EFFECT_REPUTATION (103): grant rep to EffectMiscValue's faction on cast. An effect row,
|
|
139
|
+
// not an intent, because only effects[] reaches the OOC applier. Cite: SpellEffects.cpp:4908–4926.
|
|
140
|
+
| { kind: 'reputation'; factionId: number; amount: number }
|
|
141
|
+
// SPELL_AURA_WATER_BREATHING (82): unlimited breath while the aura is up (interval multiplier 0).
|
|
142
|
+
// Cite: SpellAuras.cpp HandleWaterBreathing :1688; domain/world/hazards.ts.
|
|
143
|
+
| { kind: 'water_breathing'; durationMs: number }
|
|
144
|
+
// SPELL_AURA_WATER_WALK (104): walk on water. Text registers the aura; no surface sim.
|
|
145
|
+
// Cite: SpellAuras.cpp HandleAuraWaterWalk :1661.
|
|
146
|
+
| { kind: 'water_walk'; durationMs: number }
|
|
147
|
+
// SPELL_AURA_HOVER (106): SetHover / MOVEFLAG_HOVER. Cite: SpellAuras.cpp:1681; Object.h:750.
|
|
148
|
+
| { kind: 'hover'; durationMs: number }
|
|
149
|
+
// SPELL_AURA_MOD_INVISIBILITY_DETECTION (19): Detect (Lesser/Greater) Invisibility strength.
|
|
150
|
+
// Text aura chip; world invis visibility residual. Cite: SpellAuras.cpp :2677–2717.
|
|
151
|
+
| { kind: 'mod_invisibility_detection'; amount: number; durationMs: number }
|
|
152
|
+
// Also an interpreter intent, but needed as an effect or the spell reads as a pure mana sink.
|
|
153
|
+
// SPELL_AURA_TRACK_RESOURCES (45): Find Treasure/Minerals/Herbs. Cite: SpellAuras.cpp:2163–2171.
|
|
154
|
+
| { kind: 'track_resources'; resourceType: number; trackFlag: number; durationMs: number }
|
|
155
|
+
// SPELL_AURA_SAFE_FALL (144): Slow Fall height reduction. Cite: Player.cpp:19535–19537.
|
|
156
|
+
| { kind: 'safe_fall'; amount: number; durationMs: number }
|
|
157
|
+
// SPELL_AURA_MOD_UNATTACKABLE (93): Phase Shift (Imp). Cite: SpellAuras.cpp:4454–4459.
|
|
158
|
+
| { kind: 'mod_unattackable'; durationMs: number; combatStopOnApply: true }
|
|
159
|
+
// SPELL_AURA_INTERRUPT_REGEN (94). Cite: SpellAuras.cpp:5111–5119; Player.cpp:2303–2304.
|
|
160
|
+
| { kind: 'interrupt_regen'; durationMs: number; setInDummyCombatState?: boolean }
|
|
161
|
+
// SPELL_AURA_MOD_WATER_BREATHING (155): Undead racial 5227 — multiplier, not the forced-0
|
|
162
|
+
// `water_breathing` above. Cite: SpellAuras.cpp:1701–1706.
|
|
163
|
+
| { kind: 'mod_water_breathing'; amount: number; intervalMultiplier: number; durationMs: number }
|
|
164
|
+
// SPELL_EFFECT_TELEPORT_UNITS (5) with a spell_target_position dest; OOC routes through
|
|
165
|
+
// castTeleport + reagents. Mage Portals (TRANS_DOOR 50) too. Cite: SpellEffects.cpp:1683.
|
|
166
|
+
| { kind: 'teleport' }
|
|
167
|
+
// SPELL_EFFECT_TELEPORT_UNITS with TARGET_LOCATION_CASTER_HOME_BIND (9): Astral Recall /
|
|
168
|
+
// Hearthstone-class homebind. Cite: SpellTargetDefines.h TARGET_LOCATION_CASTER_HOME_BIND = 9.
|
|
169
|
+
| { kind: 'teleport_hearth' }
|
|
170
|
+
// SPELL_EFFECT_BIND (11): SetHomebindToLocation at current position (hearth/home).
|
|
171
|
+
// Cite: SpellEffects.cpp:5544–5578. OOC writes char.hearthBind (same field bindHearth uses).
|
|
172
|
+
| { kind: 'bind_hearth' }
|
|
173
|
+
// SPELL_EFFECT_LEARN_SPELL (36) player path — learnGrantIds / ooc learn().
|
|
174
|
+
// Cite: SpellEffects.cpp:2445–2465 EffectLearnSpell.
|
|
175
|
+
| { kind: 'learn_spell'; spellId: number }
|
|
176
|
+
// SPELL_EFFECT_DUAL_WIELD (40). SetCanDualWield(true). Cite: SpellEffects.cpp:2628–2632.
|
|
177
|
+
| { kind: 'can_dual_wield' }
|
|
178
|
+
// SPELL_EFFECT_SEND_TAXI (123). ActivateTaxiPathTo(misc). Cite: SpellEffects.cpp:5124–5130.
|
|
179
|
+
| { kind: 'send_taxi'; pathId: number }
|
|
180
|
+
// SPELL_EFFECT_SUMMON_PLAYER (85). SetSummonPoint + summon request. Cite: SpellEffects.cpp:4356.
|
|
181
|
+
| { kind: 'summon_player' }
|
|
182
|
+
// EffectEmpty / EffectUnused / HandleUnused — client-inform marker, OOC aura chip.
|
|
183
|
+
// Cite: SpellEffects.cpp:190–203 EffectEmpty/EffectUnused.
|
|
184
|
+
| { kind: 'client_inform' }
|
|
185
|
+
// SPELL_EFFECT_LEARN_PET_SPELL (57): pet->learnSpell(EffectTriggerSpell).
|
|
186
|
+
// Cite: SpellEffects.cpp:3386–3404. OOC writes char.petSpells (same field trainPet uses).
|
|
187
|
+
| { kind: 'learn_pet_spell'; spellId: number }
|
|
188
|
+
// SPELL_EFFECT_ADD_HONOR (45): AddHonorCP(damage, HONORABLE) — amount is effect value.
|
|
189
|
+
// Cite: SpellEffects.cpp:3026–3035. OOC writes char.honor via addBonusHonor.
|
|
190
|
+
| { kind: 'add_honor'; amount: number }
|
|
191
|
+
// SPELL_EFFECT_DESTROY_ALL_TOTEMS (110): UnSummon every totem slot.
|
|
192
|
+
// Cite: SpellEffects.cpp:5202–5207. Combat calls unsummonAllTotems.
|
|
193
|
+
| { kind: 'destroy_all_totems' }
|
|
194
|
+
// SPELL_AURA_NO_PVP_CREDIT (159) — Honorless Target. Victim grants no honor.
|
|
195
|
+
// Cite: SpellAuras.cpp:220; Player.cpp:6626–6627 RewardHonor GetAura(2479).
|
|
196
|
+
| { kind: 'no_pvp_credit'; durationMs: number }
|
|
197
|
+
// SPELL_EFFECT_PULL_TOWARDS (124). KnockBackWithAngle toward caster.
|
|
198
|
+
// Cite: SpellEffects.cpp:5132–5162; combat/knockBack.ts.
|
|
199
|
+
| { kind: 'pull_towards'; speedXY: number; speedZ?: number; distance?: number }
|
|
200
|
+
// SPELL_EFFECT_TELEPORT_GRAVEYARD (120): send the target to its team's nearest graveyard — the BG
|
|
201
|
+
// resurrection payload (24237, spirit guides 13116/13117). Cite: BattleGround.h:85.
|
|
202
|
+
| { kind: 'teleport_graveyard' }
|
|
203
|
+
// SPELL_EFFECT_QUEST_COMPLETE (16): AreaExploredOrEventHappens(EffectMiscValue) — the BG
|
|
204
|
+
// objective credits 23658 / 24061 / 24064 are these. Cite: SpellEffects.cpp:4928-4935.
|
|
205
|
+
| { kind: 'quest_complete'; questId: number }
|
|
206
|
+
// SPELL_EFFECT_PICKPOCKET (71). OOC/stealth humanoid loot path. Cite: SpellEffects.cpp:2662.
|
|
207
|
+
| { kind: 'pickpocket' }
|
|
208
|
+
// SPELL_EFFECT_SKINNING (95). Corpse → game.skin. Cite: SpellEffects.cpp:4970.
|
|
209
|
+
| { kind: 'skinning' }
|
|
210
|
+
// SPELL_EFFECT_DISENCHANT (99). Item-target DE → game.disenchant. Cite: SpellEffects.cpp:4640.
|
|
211
|
+
| { kind: 'disenchant' }
|
|
212
|
+
// SPELL_EFFECT_DISTRACT (69). World attention/threat stub; durationMs = damage * 1000.
|
|
213
|
+
// Cite: SpellEffects.cpp:2640–2660; Common.h IN_MILLISECONDS.
|
|
214
|
+
| { kind: 'distract'; durationMs: number }
|
|
215
|
+
// SPELL_AURA_AURAS_VISIBLE (100) — Detect Magic. Text aura registers detection on target.
|
|
216
|
+
// Cite: SpellAuras.cpp HandleAurasVisible :3383.
|
|
217
|
+
| { kind: 'auras_visible'; durationMs: number }
|
|
218
|
+
// SPELL_AURA_MOD_DETECT_RANGE (91) — Mind Soothe yards (signed). Cite: Unit.cpp GetAttackDistance.
|
|
219
|
+
| { kind: 'mod_detect_range'; amount: number; durationMs: number }
|
|
220
|
+
// SPELL_AURA_BIND_SIGHT (1) — Mind Vision camera channel. Text: aura chip (no multi-session cam).
|
|
221
|
+
// Cite: SpellAuras.cpp HandleBindSight :2126.
|
|
222
|
+
| { kind: 'bind_sight'; durationMs: number }
|
|
223
|
+
// Periodic restore: food/drink OOC, Evocation per tick while channelling. `pctOfMax` (auras 20/21
|
|
224
|
+
// OBS_MOD_HEALTH/MANA) restores floor(max × pct/100) and ignores amountPerTick.
|
|
225
|
+
| {
|
|
226
|
+
kind: 'restore_health';
|
|
227
|
+
amountPerTick: number;
|
|
228
|
+
tickMs: number;
|
|
229
|
+
durationMs: number;
|
|
230
|
+
pctOfMax?: number;
|
|
231
|
+
// TARGET_PET=5 (Health Funnel / Mend Pet). Omit → lowest-HP friendly / self.
|
|
232
|
+
applyTo?: 'self' | 'pet' | 'friendly' | 'party';
|
|
233
|
+
}
|
|
234
|
+
// Periodic power restore/drain. A negative amountPerTick is PERIODIC_MANA_LEECH on the cast
|
|
235
|
+
// target unless `hostile: false` (self maintain cost). Cite: SpellAuras.cpp:1031–1042.
|
|
236
|
+
| {
|
|
237
|
+
kind: 'restore_power';
|
|
238
|
+
amountPerTick: number;
|
|
239
|
+
tickMs: number;
|
|
240
|
+
durationMs: number;
|
|
241
|
+
pctOfMax?: number;
|
|
242
|
+
// Powers index this fills (EffectMiscValue): 0 mana, 1 rage, 2 focus, 3 energy. Absent on an
|
|
243
|
+
// older bake, which the consumer reads as mana. Cite: SpellAuras.cpp:4836.
|
|
244
|
+
powerType?: number;
|
|
245
|
+
/** When false, negative ticks drain the caster (self cost), not the foe. Default: hostile leech. */
|
|
246
|
+
hostile?: boolean;
|
|
247
|
+
// SPELL_AURA_PERIODIC_MANA_LEECH EffectMultipleValue: caster gains drained × this each tick. Drain
|
|
248
|
+
// Mana mv=1 transfers; Viper Sting mv=0 is pure drain. Cite: SpellAuras.cpp:4747–4806.
|
|
249
|
+
leechMultiple?: number;
|
|
250
|
+
}
|
|
251
|
+
// SPELL_EFFECT_POWER_DRAIN (8): drain min..max power (capped at current); the caster gains
|
|
252
|
+
// drained × multiplier as mana. Cite: SpellEffects.cpp EffectPowerDrain.
|
|
253
|
+
| { kind: 'power_drain'; powerType: number; min: number; max: number; multiplier: number }
|
|
254
|
+
// SPELL_EFFECT_POWER_BURN (62): burn min..max power, deal burned × multiplier as school damage.
|
|
255
|
+
// Cite: SpellEffects.cpp EffectPowerBurn.
|
|
256
|
+
| { kind: 'power_burn'; powerType: number; min: number; max: number; multiplier: number; school: School }
|
|
257
|
+
// SPELL_EFFECT_HEALTH_LEECH (9): deal min..max school damage, heal caster damage × multiplier.
|
|
258
|
+
// Cite: SpellEffects.cpp EffectHealthLeech.
|
|
259
|
+
| { kind: 'health_leech'; school: School; min: number; max: number; multiplier: number }
|
|
260
|
+
// SPELL_EFFECT_ENERGIZE (30) for non-rage powers (rage stays on rageGenerated).
|
|
261
|
+
// Cite: SpellEffects.cpp EffectEnergize.
|
|
262
|
+
| { kind: 'energize'; powerType: number; min: number; max: number }
|
|
263
|
+
// Warlock Life Tap (DUMMY SPELLFAMILY_WARLOCK 0x40000): `healthCost` HP paid as power cost →
|
|
264
|
+
// `manaGain` via CastCustomSpell(31818). Cite: Warlock.cpp LifeTap :52–103.
|
|
265
|
+
| { kind: 'life_tap'; healthCost: number; manaGain: number }
|
|
266
|
+
// SPELL_EFFECT_HEAL_MAX_HEALTH (67): heal equal to the CASTER's max health (Lay on Hands).
|
|
267
|
+
// Cite: SpellEffects.cpp EffectHealMaxHealth.
|
|
268
|
+
| { kind: 'heal_max_health' }
|
|
269
|
+
// SPELL_EFFECT_WEAPON_PERCENT_DAMAGE (31): a weapon swing at pct% weapon damage, not flat damage.
|
|
270
|
+
// Cite: Unit.cpp CalculateDamage WEAPON_PERCENT_DAMAGE path.
|
|
271
|
+
| { kind: 'weapon_percent_damage'; pct: number }
|
|
272
|
+
// SPELL_AURA_SCHOOL_IMMUNITY (39): immune to the schools in `schoolMask`. Divine Protection stacks
|
|
273
|
+
// physical (1) + magic (126). Cite: SpellAuras.cpp HandleAuraModSchoolImmunity ~2992.
|
|
274
|
+
| { kind: 'school_immunity'; schoolMask: number; durationMs: number; positive?: boolean }
|
|
275
|
+
// SPELL_AURA_DAMAGE_IMMUNITY (40): immune to *damage* of schools in mask (not full aura block).
|
|
276
|
+
// Cite: SpellAuras.cpp HandleAuraModDmgImmunity ~3042.
|
|
277
|
+
| { kind: 'damage_immunity'; schoolMask: number; durationMs: number; positive?: boolean }
|
|
278
|
+
// SPELL_AURA_MECHANIC_IMMUNITY (77): immune to one mechanic id (EffectMiscValue, 1-based).
|
|
279
|
+
// Forbearance = MECHANIC_INVULNERABILITY (25). Cite: SpellAuras.cpp HandleModMechanicImmunity.
|
|
280
|
+
| { kind: 'mechanic_immunity'; mechanic: number; durationMs: number; positive?: boolean; charges?: number }
|
|
281
|
+
// SPELL_AURA_DISPEL_IMMUNITY (41): immune to one DispelType, and with IMMUNITY_PURGES_EFFECT it
|
|
282
|
+
// strips what is already held (Stoneform 20594 POISON). Cite: SpellAuras.cpp ~3053.
|
|
283
|
+
| { kind: 'dispel_immunity'; dispelType: number; durationMs: number; positive?: boolean }
|
|
284
|
+
// SPELL_AURA_STATE_IMMUNITY (38): immune to one AuraType (EffectMiscValue), purging what is held
|
|
285
|
+
// when IMMUNITY_PURGES_EFFECT. Cite: SpellAuras.cpp HandleAuraModStateImmunity ~2972.
|
|
286
|
+
| { kind: 'state_immunity'; stateAuraType: number; durationMs: number; positive?: boolean }
|
|
287
|
+
// SPELL_AURA_EFFECT_IMMUNITY (37): immune to one SpellEffect id. The WSG flag auras 23333/23335
|
|
288
|
+
// carry misc 85 SUMMON_PLAYER — a flag carrier cannot be ported away. Cite: SpellAuras.cpp:2962.
|
|
289
|
+
| { kind: 'effect_immunity'; effectId: number; durationMs: number; positive?: boolean }
|
|
290
|
+
// SPELL_AURA_MOD_PACIFY (25): cannot melee/ranged attack (can still cast). NOT silence.
|
|
291
|
+
// Cite: SpellAuras.cpp HandleAuraModPacify ~4382; UNIT_FLAG_PACIFIED.
|
|
292
|
+
| { kind: 'pacify'; durationMs: number }
|
|
293
|
+
// SPELL_AURA_SCHOOL_ABSORB (69): absorb pool vs `schoolMask`, rolled once at apply. `applyTo:
|
|
294
|
+
// 'owner'` = TARGET_UNIT_CASTER_MASTER (27), a pet's pool lands on the master (Sacrifice 7812).
|
|
295
|
+
| {
|
|
296
|
+
kind: 'school_absorb';
|
|
297
|
+
schoolMask: number;
|
|
298
|
+
min: number;
|
|
299
|
+
max: number;
|
|
300
|
+
durationMs: number;
|
|
301
|
+
applyTo?: 'self' | 'owner';
|
|
302
|
+
}
|
|
303
|
+
// SPELL_AURA_MANA_SHIELD (97): absorb pool paid from mana at `manaMultiplier` per point (classic
|
|
304
|
+
// ranks = 2); depletes on amount, not OOM. Cite: Unit.cpp ~2457–2496.
|
|
305
|
+
| { kind: 'mana_shield'; schoolMask: number; min: number; max: number; manaMultiplier: number; durationMs: number }
|
|
306
|
+
// SPELL_EFFECT_ADD_EXTRA_ATTACKS (19): grant `count` extra auto-attacks, capped at 5 by the
|
|
307
|
+
// engine (effects.ts resolveAddExtraAttacks). Cite: SpellEffects.cpp:4873–4882.
|
|
308
|
+
| { kind: 'extra_attacks'; count: number }
|
|
309
|
+
// SPELL_EFFECT_MODIFY_THREAT_PERCENT (125): change the target's threat toward the caster by signed
|
|
310
|
+
// `pct` (Cower/Feint bake negative). Cite: SpellEffects.cpp:5262–5268.
|
|
311
|
+
| { kind: 'modify_threat_pct'; pct: number }
|
|
312
|
+
// SPELL_AURA_FEIGN_DEATH (66): CombatStop so IsNonCombatSpell (hunter traps) can fire.
|
|
313
|
+
// Cite: Unit.cpp SetFeignDeath :10091–10103; Spell.cpp :4598 IsNonCombatSpell.
|
|
314
|
+
| { kind: 'feign_death'; durationMs: number; playerControlledResistRoll?: boolean }
|
|
315
|
+
// SPELL_AURA_MOD_TOTAL_THREAT (103): flat temporary threat reduction on every reverse-hate ref
|
|
316
|
+
// (Fade r1 −55), reversed on remove. Cite: SpellAuras.cpp:2841–2858; HostileRefManager.cpp:82–99.
|
|
317
|
+
| { kind: 'threat_temporary'; amount: number; durationMs: number }
|
|
318
|
+
// Temporary buff/debuff: `mod` names what it raises, `hostile` puts it on the target, `applyTo`
|
|
319
|
+
// routes self/pet/friendly/party, `school`/`schoolMask`/`creatureTypeMask` narrow it. All sourced.
|
|
320
|
+
| {
|
|
321
|
+
kind: 'buff';
|
|
322
|
+
mod: BuffMod;
|
|
323
|
+
amount: number;
|
|
324
|
+
durationMs: number;
|
|
325
|
+
pointsPerComboPoint?: number;
|
|
326
|
+
hostile?: boolean;
|
|
327
|
+
school?: School;
|
|
328
|
+
applyTo?: 'self' | 'pet' | 'friendly' | 'party';
|
|
329
|
+
creatureTypeMask?: number;
|
|
330
|
+
schoolMask?: number;
|
|
331
|
+
charges?: number;
|
|
332
|
+
}
|
|
333
|
+
// conjure an item into the inventory (Mage Conjure Food / Water, Create Healthstone)
|
|
334
|
+
// `count` is the roll's minimum (bp+baseDice); `countMax` its top (bp+dieSides) when they differ.
|
|
335
|
+
// Cite: SpellEffects.cpp:1971 num_to_add = damage; Object.cpp:2949 irand(baseDice, dieSides).
|
|
336
|
+
| { kind: 'conjure'; item: number; count: number; countMax?: number }
|
|
337
|
+
// summon a companion pet. `creature` is the CreatureDef to build the pet from; 0 means
|
|
338
|
+
// "the character's own tamed pet" (Hunter Call Pet), >0 a fixed demon (Warlock Summon Imp).
|
|
339
|
+
| { kind: 'summon_pet'; creature: number }
|
|
340
|
+
// SPELL_EFFECT_SUMMON_WILD (41): an uncontrolled temporary creature. `creature` = EffectMiscValue,
|
|
341
|
+
// `count` = damage>0 ? damage : 1, `durationMs` from DurationIndex. Cite: SpellEffects.cpp:2729.
|
|
342
|
+
| {
|
|
343
|
+
kind: 'summon_wild';
|
|
344
|
+
creature: number;
|
|
345
|
+
count: number;
|
|
346
|
+
durationMs: number;
|
|
347
|
+
}
|
|
348
|
+
// SPELL_EFFECT_SUMMON_GUARDIAN (42): a temporary GUARDIAN_PET, not a commandable companion. Keeps
|
|
349
|
+
// the count and duration bare `summon_pet` dropped. Cite: SpellEffects.cpp:2820–2992.
|
|
350
|
+
| {
|
|
351
|
+
kind: 'summon_guardian';
|
|
352
|
+
creature: number;
|
|
353
|
+
count: number;
|
|
354
|
+
durationMs: number;
|
|
355
|
+
}
|
|
356
|
+
// SPELL_EFFECT_SUMMON_OBJECT_WILD (76): a temporary ownerless world GameObject. `goEntry` =
|
|
357
|
+
// EffectMiscValue, `durationMs` from DurationIndex. Cite: SpellEffects.cpp:3620–3662.
|
|
358
|
+
| {
|
|
359
|
+
kind: 'summon_object_wild';
|
|
360
|
+
goEntry: number;
|
|
361
|
+
durationMs: number;
|
|
362
|
+
}
|
|
363
|
+
// SPELL_AURA_MOUNTED (78): mount creature template entry (EffectMiscValue), a travel state rather
|
|
364
|
+
// than a combat payload. Cite: SpellAuras.cpp:1629–1656 HandleAuraMounted; Unit.cpp:7741–7756.
|
|
365
|
+
| { kind: 'mounted'; creatureEntry: number }
|
|
366
|
+
// SPELL_EFFECT_KNOCK_BACK (98): push the target away from the caster. `horizontal` =
|
|
367
|
+
// EffectMiscValue/10, `vertical` = damage/10. Cite: SpellEffects.cpp:5113–5121 EffectKnockBack.
|
|
368
|
+
| { kind: 'knock_back'; horizontal: number; vertical: number }
|
|
369
|
+
// SPELL_EFFECT_SEND_EVENT (61): fire map event EffectMiscValue (dbscripts_on_event), never a
|
|
370
|
+
// hit/heal payload. Cite: SpellEffects.cpp:1794–1798; ScriptMgr.cpp:3410–3447 StartEvents_Event.
|
|
371
|
+
| { kind: 'send_event'; eventId: number }
|
|
372
|
+
// SPELL_EFFECT_OPEN_LOCK (33) / OPEN_LOCK_ITEM (59): unlock a GO or item then SendLoot.
|
|
373
|
+
// `skillBonus` is the effect amount, `fromItem` opcode 59. Cite: SpellEffects.cpp:2204–2274.
|
|
374
|
+
| {
|
|
375
|
+
kind: 'open_lock';
|
|
376
|
+
/** Effect amount — CanOpenLock skillValue (not a paperdoll damage bonus). */
|
|
377
|
+
skillBonus: number;
|
|
378
|
+
/** Opcode 59 / item target path vs GO-targeted OPEN_LOCK (33). */
|
|
379
|
+
fromItem: boolean;
|
|
380
|
+
/** EffectMiscValue LockType when non-zero. */
|
|
381
|
+
lockType?: number;
|
|
382
|
+
}
|
|
383
|
+
// SPELL_EFFECT_ACTIVATE_OBJECT (86): GameObjectActions(EffectMiscValue) on gameObjTarget; it
|
|
384
|
+
// early-outs without one. Cite: SpellEffects.cpp:4377–4482; GameObject.h GameObjectActions.
|
|
385
|
+
| {
|
|
386
|
+
kind: 'activate_object';
|
|
387
|
+
/** GameObjectActions enum (NONE=0 … CLOSE_AND_LOCK=18). */
|
|
388
|
+
action: number;
|
|
389
|
+
/** Twilight Council MAKE_ACTIVE/MAKE_INERT summon table NPC entry when applicable. */
|
|
390
|
+
summonNpcEntry?: number;
|
|
391
|
+
/** Onyxia Eruption 17731 OPEN/DISTURB → custom anim instead of Use. */
|
|
392
|
+
customAnim?: boolean;
|
|
393
|
+
}
|
|
394
|
+
// Summon a shaman totem into one of the four element slots (effects 74 / 87–90). `creature` =
|
|
395
|
+
// EffectMiscValue, `health` from base points, and the slot replaces any prior totem.
|
|
396
|
+
| {
|
|
397
|
+
kind: 'summon_totem';
|
|
398
|
+
slot: TotemSlot | 'none';
|
|
399
|
+
creature: number;
|
|
400
|
+
health: number;
|
|
401
|
+
durationMs: number;
|
|
402
|
+
name?: string;
|
|
403
|
+
abilities?: TotemAbilityDef[];
|
|
404
|
+
// Resolved payloads for kit `proc_trigger_spell` ids (aura 23): the kit spell is only the
|
|
405
|
+
// periodic holder, so without these the totem summons and does nothing. Not `abilities`.
|
|
406
|
+
triggerAbilities?: TotemAbilityDef[];
|
|
407
|
+
}
|
|
408
|
+
// SPELL_EFFECT_THREAT (63): flat threat pulse (Stoneclaw Totem Effect). Amount = real base points.
|
|
409
|
+
// Wired into ThreatManager (Unit AddThreat / EffectThreat) — not a soft-tank coin flip.
|
|
410
|
+
| { kind: 'threat'; amount: number }
|
|
411
|
+
// UnitAI::DoResetThreat — the CASTER's own list to zero, which `modify_threat_pct` cannot express.
|
|
412
|
+
// Cite: UnitAI.cpp:773-781 modifyAllThreatPercent(-100); boss_arlokk.cpp:50 20538.
|
|
413
|
+
| { kind: 'reset_own_threat' }
|
|
414
|
+
// SPELL_EFFECT_ATTACK_ME (114): Taunt / Growl — equalize to highest threat + force victim.
|
|
415
|
+
// Cite: SpellEffects.cpp EffectTaunt ~3413.
|
|
416
|
+
| { kind: 'taunt' }
|
|
417
|
+
// SPELL_AURA_MOD_TAUNT (11): hold taunt-state priority for `durationMs` (Taunt 3s, Mocking Blow
|
|
418
|
+
// 6s). Distinct from EffectTaunt equalize; a Taunt row carries both. Cite: SpellAuras.cpp:2860.
|
|
419
|
+
| { kind: 'mod_taunt'; durationMs: number }
|
|
420
|
+
// SPELL_EFFECT_DISMISS_PET (102): unsummon the active pet (Dismiss Pet 2641).
|
|
421
|
+
// Cite: SpellEffects.cpp EffectDismissPet; effect-handler-catalog.md §2.8.
|
|
422
|
+
| { kind: 'dismiss_pet' }
|
|
423
|
+
// SPELL_EFFECT_FEED_PET (101): consume diet food, start the Feed Pet Effect (1539) happiness
|
|
424
|
+
// course. OOC only. Cite: SpellEffects.cpp:4681–4712; Spell.cpp:5332–5355 CheckCast FEED_PET.
|
|
425
|
+
| { kind: 'feed_pet' }
|
|
426
|
+
// SPELL_EFFECT_SUMMON_DEAD_PET (109): revive the slain pet at `healthPct` of max (Revive Pet 982
|
|
427
|
+
// → 15%); no-op on a living pet. Cite: SpellEffects.cpp:5164 EffectSummonDeadPet.
|
|
428
|
+
| { kind: 'revive_pet'; healthPct: number }
|
|
429
|
+
// SPELL_EFFECT_RESURRECT_NEW (113): flat health (bp+dice) + mana (EffectMiscValue) on a dead
|
|
430
|
+
// player — Resurrection / Redemption / Ancestral Spirit / Rebirth. Cite: SpellEffects.cpp:4815.
|
|
431
|
+
| { kind: 'resurrect'; health: number; mana: number }
|
|
432
|
+
// SPELL_EFFECT_RESURRECT (18) via EffectResurrect: percent of max health and mana.
|
|
433
|
+
// Cite: SpellEffects.cpp:4819–4824 EffectResurrect else branch.
|
|
434
|
+
| { kind: 'resurrect_pct'; percent: number }
|
|
435
|
+
// Paladin seal: a 30s self-aura consumed by Judgement into `judge`. Which fields are set follows
|
|
436
|
+
// `seal` — coeff, procPpm+onSwingWeaponPct, onSwingHeal, onSwingMana. Cite: Paladin.cpp:1094.
|
|
437
|
+
| { kind: 'seal'; seal: SealKind; durationMs: number; coeff?: number; procPpm?: number; onSwingWeaponPct?: number; onSwingHeal?: number; onSwingMana?: number; judge?: JudgementBurst }
|
|
438
|
+
// The generic Judgement (spell 20271): consumes the caster's active seal and applies its `judge`
|
|
439
|
+
// burst on the target, then puts Judgement on its own cooldown. Inert if no seal is up.
|
|
440
|
+
| { kind: 'judgement' }
|
|
441
|
+
// SPELL_AURA_MOD_SHAPESHIFT (36): enter a form. `form` is EffectMiscValue (FORM_CAT=1, FORM_BEAR=5,
|
|
442
|
+
// FORM_DIREBEAR=8). Recasting the same form cancels it. Cite: Aura::HandleAuraModShapeshift.
|
|
443
|
+
| { kind: 'shapeshift'; form: ShapeshiftFormId }
|
|
444
|
+
// SPELL_AURA_TRANSFORM (56): a pure model swap — CC, if any, comes from a sibling aura slot.
|
|
445
|
+
// `creatureEntry` is EffectMiscValue; the display id is read off that creature at runtime.
|
|
446
|
+
// Cite: SpellAuras.cpp:1979 HandleAuraTransform (SetDisplayId only).
|
|
447
|
+
| { kind: 'transform'; creatureEntry: number; durationMs: number }
|
|
448
|
+
// SPELL_AURA_MOD_STEALTH (16): `strength` = bp+dice, `durationMs` 0 = until cancelled, optional
|
|
449
|
+
// `breakFlags` = AuraInterruptFlags. Cite: SpellAuras.cpp HandleModStealth.
|
|
450
|
+
| { kind: 'stealth'; strength: number; durationMs: number; breakFlags?: number; charges?: number }
|
|
451
|
+
// SPELL_AURA_MOD_STEALTH_LEVEL (154): passive/talent stealth *level* added to strength for detect math
|
|
452
|
+
// (Master of Deception, Shadowmeld Passive, Feral Instinct). Does not itself enter stealth.
|
|
453
|
+
| { kind: 'stealth_level'; amount: number }
|
|
454
|
+
/** SPELL_AURA_MOD_STEALTH_DETECT (17): Perception / Track Hidden detect strength for the formula. */
|
|
455
|
+
| { kind: 'stealth_detect'; amount: number; durationMs: number }
|
|
456
|
+
// SPELL_AURA_FORCE_REACTION (139): force the player's reaction to faction `factionId`
|
|
457
|
+
// (EffectMiscValue, a Faction not a FactionTemplate) up to `reputationRank`. Cite: SpellAuras.cpp:2034.
|
|
458
|
+
| {
|
|
459
|
+
kind: 'force_reaction';
|
|
460
|
+
factionId: number;
|
|
461
|
+
reputationRank: number;
|
|
462
|
+
durationMs: number;
|
|
463
|
+
stopAttackFaction?: boolean;
|
|
464
|
+
}
|
|
465
|
+
// SPELL_EFFECT_ENCHANT_ITEM (53): the permanent twin of `weapon_imbue` — kits, arcanums, scopes,
|
|
466
|
+
// formulas. `enchantId` indexes DataBundle.itemEnchants; the slot rule is in enchantApplicators.
|
|
467
|
+
| { kind: 'enchant_item_perm'; enchantId: number }
|
|
468
|
+
// SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY (54): weapon imbue / poison / oil / stone, exclusive per
|
|
469
|
+
// hand. Cite: SpellEffects.cpp EffectEnchantItemTmp; enrich-weapon-imbues.mjs fills the kit.
|
|
470
|
+
| {
|
|
471
|
+
kind: 'weapon_imbue';
|
|
472
|
+
enchantId: number;
|
|
473
|
+
durationMs: number;
|
|
474
|
+
/** rockbiter | windfury | flametongue | frostbrand | poison | other */
|
|
475
|
+
family?: string;
|
|
476
|
+
/** Rockbiter equip-spell MOD_ATTACK_POWER (aura 99). */
|
|
477
|
+
attackPower?: number;
|
|
478
|
+
equipSpellId?: number;
|
|
479
|
+
/** TYPE_COMBAT_SPELL on-hit proc. */
|
|
480
|
+
combatSpellId?: number;
|
|
481
|
+
/** Flat % chance per hit when no PPM (enchant amount). */
|
|
482
|
+
combatChancePct?: number;
|
|
483
|
+
/** PPM from spell_proc_item_enchant when present. */
|
|
484
|
+
combatPpm?: number;
|
|
485
|
+
/** TYPE_DAMAGE flat weapon damage. */
|
|
486
|
+
damageFlat?: number;
|
|
487
|
+
/** Legacy TYPE_TOTEM Rockbiter DPS-like amount (Classic DBC usually uses equip spell). */
|
|
488
|
+
rockbiterAmount?: number;
|
|
489
|
+
/** Baked combat proc payload so the engine need not re-resolve the combat spell. */
|
|
490
|
+
combat?: {
|
|
491
|
+
spellId: number;
|
|
492
|
+
name: string;
|
|
493
|
+
direct?: { school: School; min: number; max: number };
|
|
494
|
+
dot?: { school: School; min: number; max: number; durationMs: number; tickMs: number };
|
|
495
|
+
extraAttacks?: number;
|
|
496
|
+
apBonus?: number;
|
|
497
|
+
/** Frostbrand / Crippling Poison snare (kind:speed). Cite: KI-581 / KI-717. */
|
|
498
|
+
speed?: {
|
|
499
|
+
aura: number;
|
|
500
|
+
pct: number;
|
|
501
|
+
durationMs: number;
|
|
502
|
+
hostile?: boolean;
|
|
503
|
+
mechanic?: string;
|
|
504
|
+
};
|
|
505
|
+
/** Mind-numbing / Wound Poison hostile buffs. Cite: KI-717. */
|
|
506
|
+
buffs?: Array<{
|
|
507
|
+
mod: string;
|
|
508
|
+
amount: number;
|
|
509
|
+
durationMs: number;
|
|
510
|
+
hostile?: boolean;
|
|
511
|
+
}>;
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
// SPELL_AURA_DAMAGE_SHIELD (15) / PROC_TRIGGER_DAMAGE (43): on a taken hit, deal school damage to
|
|
515
|
+
// the attacker, with optional charges + internal CD. Cite: UnitAuraProcHandler.cpp ~1449–1467.
|
|
516
|
+
| {
|
|
517
|
+
kind: 'damage_shield';
|
|
518
|
+
school: School;
|
|
519
|
+
min: number;
|
|
520
|
+
max: number;
|
|
521
|
+
durationMs: number;
|
|
522
|
+
charges?: number;
|
|
523
|
+
cooldownMs?: number;
|
|
524
|
+
}
|
|
525
|
+
// SPELL_AURA_PROC_TRIGGER_SPELL (42) generic — cast `triggerSpellId` when the aura procs, from
|
|
526
|
+
// EffectTriggerSpell or a CMaNGOS special case where the DBC is wrong.
|
|
527
|
+
| {
|
|
528
|
+
kind: 'proc_trigger_spell';
|
|
529
|
+
triggerSpellId: number;
|
|
530
|
+
durationMs: number;
|
|
531
|
+
amount?: number;
|
|
532
|
+
charges?: number;
|
|
533
|
+
cooldownMs?: number;
|
|
534
|
+
/** PERIODIC_TRIGGER_SPELL (23) amplitude when periodic. */
|
|
535
|
+
tickMs?: number;
|
|
536
|
+
/** PERIODIC_TRIGGER_SPELL (23) per-tick roll 0..1 when the scripted body gates the cast. */
|
|
537
|
+
tickChance?: number;
|
|
538
|
+
// Proc roll in PERCENT when the scripted body rolls the aura's own amount rather than
|
|
539
|
+
// spell_proc_event (Improved Mend Pet). Cite: UnitAuraProcHandler.cpp:1615-1620.
|
|
540
|
+
procChancePct?: number;
|
|
541
|
+
// The aura row belongs on the cast TARGET (EffectImplicitTargetA 6/21/25), not the caster.
|
|
542
|
+
// Channel holders on targetA 1 CASTER leave this unset. Cite: SpellTargetDefines.h.
|
|
543
|
+
auraOnTarget?: boolean;
|
|
544
|
+
// HandleAuraDummy apply=false: the body runs when the aura GOES AWAY, so the row is a holder
|
|
545
|
+
// only and never procs. `mode` mirrors AuraRemoveMode. Cite: SpellAuras.cpp:1386-1436.
|
|
546
|
+
onRemove?: AuraRemoveBody[];
|
|
547
|
+
}
|
|
548
|
+
// Speed auras 31/32/33/58/129/130/171/172/191 — raw bake; `effectiveSpeeds` buckets by `aura` per
|
|
549
|
+
// Unit::UpdateSpeed. `mechanic` ('snare'/'daze') is what Blessing of Freedom gates. Cite: Unit.cpp:8325.
|
|
550
|
+
| { kind: 'speed'; aura: number; pct: number; durationMs: number; hostile?: boolean; mechanic?: Mechanic }
|
|
551
|
+
// SPELL_AURA_SPLIT_DAMAGE_PCT (81), Soul Link: redirect `pct`% of the caster's incoming damage vs
|
|
552
|
+
// `schoolMask` to the warlock's pet; no-op without a live pet. Cite: Unit.cpp split.
|
|
553
|
+
| { kind: 'split_damage'; pct: number; schoolMask: number; durationMs: number }
|
|
554
|
+
// SPELL_AURA_SPLIT_DAMAGE_FLAT (153), Blessing of Sacrifice: redirect up to `amount` damage per hit
|
|
555
|
+
// to the aura caster. Cite: Unit.cpp:2501–2537 CalculateAbsorbAndResist; SpellAuras.cpp:214.
|
|
556
|
+
| { kind: 'split_damage_flat'; amount: number; schoolMask: number; durationMs: number }
|
|
557
|
+
// SPELL_AURA_RESIST_PUSHBACK (149): chance (%) to ignore cast pushback from damage. `applyTo:
|
|
558
|
+
// 'party'` is APPLY_AREA_AURA_PARTY (Concentration Aura). Cite: Spell.cpp:6817–6820 Delayed.
|
|
559
|
+
| { kind: 'resist_pushback'; amount: number; durationMs: number; applyTo?: 'self' | 'party' }
|
|
560
|
+
// Peel a matching aura (Swiftmend HoT, Conflagrate Immolate, Hourglass Sand). `stacks === 1` →
|
|
561
|
+
// RemoveAuraHolderFromStack, else RemoveAurasDueToSpell. Cite: SpellEffects.cpp:1842–1877.
|
|
562
|
+
| {
|
|
563
|
+
kind: 'consume_aura';
|
|
564
|
+
spellId?: number;
|
|
565
|
+
spellFamilyName?: number;
|
|
566
|
+
spellFamilyFlags?: number;
|
|
567
|
+
auraType?: number;
|
|
568
|
+
casterOnly?: boolean;
|
|
569
|
+
stacks?: number;
|
|
570
|
+
}
|
|
571
|
+
/** Ferocious Bite: dump energy after a landed school hit. Cite: SpellEffects.cpp:311–320. */
|
|
572
|
+
| { kind: 'zero_energy' }
|
|
573
|
+
// Blessing of Light — a scripted DUMMY dual slot: effect 0 is flat Holy Light healing taken,
|
|
574
|
+
// effect 1 flat Flash of Light. Cite: Paladin.cpp:119–138; Unit.cpp:7261–7265.
|
|
575
|
+
| {
|
|
576
|
+
kind: 'blessing_of_light';
|
|
577
|
+
holyLight: number;
|
|
578
|
+
flashOfLight: number;
|
|
579
|
+
durationMs: number;
|
|
580
|
+
applyTo?: 'self' | 'friendly' | 'party';
|
|
581
|
+
}
|
|
582
|
+
// Holy Shock (20473 dummy): one button that heals a friendly or damages a hostile, branching on
|
|
583
|
+
// reaction into the real sub-spells 25914 / 25912. Cite: Spell::EffectDummy icon 156.
|
|
584
|
+
| { kind: 'holy_shock'; damage: { school: School; min: number; max: number }; heal: { min: number; max: number } }
|
|
585
|
+
// Sweeping Strikes (12292): the next `charges` melee attacks each strike another nearby enemy —
|
|
586
|
+
// 12723 copies post-mitigation damage, Whirlwind/Execute use 26654. Cite: UnitAuraProcHandler:810.
|
|
587
|
+
| { kind: 'sweeping_strikes'; charges: number; durationMs: number }
|
|
588
|
+
// Combustion (11129): every fire spell hit stacks `stackSpellId` for +`critPerStack` fire crit,
|
|
589
|
+
// and only a fire CRIT spends a charge. Cite: UnitAuraProcHandler.cpp:991-1003 case 11129.
|
|
590
|
+
| {
|
|
591
|
+
kind: 'combustion';
|
|
592
|
+
charges: number;
|
|
593
|
+
stackSpellId: number;
|
|
594
|
+
critPerStack: number;
|
|
595
|
+
maxStacks: number;
|
|
596
|
+
durationMs: number;
|
|
597
|
+
}
|
|
598
|
+
// Vampiric Embrace (15286): whenever the caster deals Shadow spell damage, heal caster and party
|
|
599
|
+
// for `pct`% of it via 15290. Cite: UnitAuraProcHandler.cpp SPELLFAMILY_PRIEST 15286.
|
|
600
|
+
| { kind: 'vampiric_embrace'; pct: number; durationMs: number }
|
|
601
|
+
// Eye for an Eye (9799/25988 dummy): return `pct`% of MAGIC damage taken to the attacker via
|
|
602
|
+
// 25997, capped at 50% of the caster's max health. Cite: UnitAuraProcHandler.cpp:795–808.
|
|
603
|
+
| { kind: 'eye_for_an_eye'; pct: number; durationMs: number }
|
|
604
|
+
// Ignite talent ranks (11119/11120/12846–12848 dummy): on fire spell damage the caster deals, arm DoT
|
|
605
|
+
// 12654 with basepoints = rank% × damage (4/8/12/16/20). Cite: UnitAuraProcHandler.cpp:970–985.
|
|
606
|
+
| { kind: 'ignite'; rankSpellId: number; durationMs: number }
|
|
607
|
+
// Deep Wounds talent ranks (12834/12849/12867): on melee crit, arm physical DoT 12721 with per-tick
|
|
608
|
+
// basepoints = weaponDamage × rank% / 6. Cite: UnitAuraProcHandler.cpp:1316–1342.
|
|
609
|
+
| { kind: 'deep_wounds'; rankSpellId: number; durationMs: number }
|
|
610
|
+
// Oracle Healing Bonus (26169 set dummy): when the caster heals, self-heal `pct`% of the heal amount via
|
|
611
|
+
// spell 26170. Cite: UnitAuraProcHandler.cpp:1046–1052.
|
|
612
|
+
| { kind: 'oracle_healing_bonus'; pct: number; durationMs: number }
|
|
613
|
+
// Obsidian Armor (27539 dummy): when the bearer takes non-physical spell damage, cast the school-matched
|
|
614
|
+
// resist buff (27533–27540). Cite: UnitAuraProcHandler.cpp:910–930.
|
|
615
|
+
| { kind: 'obsidian_armor'; durationMs: number }
|
|
616
|
+
// Adaptive Warding (28764 set dummy): when the bearer takes non-physical/non-holy spell damage WHILE Mage
|
|
617
|
+
// Armor is up, cast school resist buff (28765–28770). Cite: UnitAuraProcHandler.cpp:870–907.
|
|
618
|
+
| { kind: 'adaptive_warding'; durationMs: number }
|
|
619
|
+
// Holy Power (28789) / Totemic Power (28823): on a heal cast, buff the heal target by class.
|
|
620
|
+
// Cite: UnitAuraProcHandler.cpp:1153–1181 / 1191–1219.
|
|
621
|
+
| { kind: 'class_power_set'; setKind: 'holy_power' | 'totemic_power'; durationMs: number }
|
|
622
|
+
// Greater Heal Vestments 4pc (28809): when caster casts Greater Heal, trigger 28810. Cite:
|
|
623
|
+
// UnitAuraProcHandler.cpp:1055–1058.
|
|
624
|
+
| { kind: 'vestments_greater_heal'; durationMs: number }
|
|
625
|
+
// Dreamwalker Healing Touch set (28719): HT cast → refund 30% of manaCost via 28742. Cite:
|
|
626
|
+
// UnitAuraProcHandler.cpp:1068–1074.
|
|
627
|
+
| { kind: 'dreamwalker_healing_touch'; durationMs: number }
|
|
628
|
+
/** Idol of Longevity (28847): HT cast → trigger 28848. Cite: UnitAuraProcHandler.cpp:1077–1081. */
|
|
629
|
+
| { kind: 'idol_healing_touch_refund'; durationMs: number }
|
|
630
|
+
/** Totem of Flowing Water (28849): LHW cast → trigger 28850. Cite: UnitAuraProcHandler.cpp:1222–1226. */
|
|
631
|
+
| { kind: 'totem_lesser_healing_wave'; durationMs: number }
|
|
632
|
+
// Cheat Death set (28845): damage that crosses below 20% max HP → cast 28846. Cite:
|
|
633
|
+
// UnitAuraProcHandler.cpp:1378–1383.
|
|
634
|
+
| { kind: 'cheat_death'; durationMs: number }
|
|
635
|
+
// Master of Elements talent ranks: spell crit → refund `pct`% of the spell's mana cost via 29077. Cite:
|
|
636
|
+
// UnitAuraProcHandler.cpp:949–964.
|
|
637
|
+
| { kind: 'master_of_elements'; pct: number; durationMs: number }
|
|
638
|
+
// Magic Absorption talent ranks: full resist of a hostile spell → restore `pct`% of max mana via 29442.
|
|
639
|
+
// Cite: UnitAuraProcHandler.cpp:938–947.
|
|
640
|
+
| { kind: 'magic_absorption'; pct: number; durationMs: number }
|
|
641
|
+
// Improved Sprint (13743/13875): on a successful Sprint cast, `chancePct`% to cast 30918, which
|
|
642
|
+
// removes root and snare. Cite: Spell.cpp:7433–7468; SpellEffects.cpp:4140–4147.
|
|
643
|
+
| { kind: 'improved_sprint'; chancePct: number; triggerSpellId: number; durationMs: number }
|
|
644
|
+
// Healing Way (29206/29205/29202): ADD_TARGET_TRIGGER 109 → buff 29203 on a landed Healing Wave,
|
|
645
|
+
// chance bp+1 (33/66/100). Cite: Spell.cpp:7433–7468; Shaman.cpp:77–89.
|
|
646
|
+
| { kind: 'healing_way_talent'; chancePct: number; durationMs: number }
|
|
647
|
+
// Healing Way buff 29203: +amountPct Healing Wave taken, stacks to maxStacks, 15s. Cite: Shaman.cpp
|
|
648
|
+
// HealingWay OnDamageCalculate; spell_template 29203 StackAmount 3.
|
|
649
|
+
| { kind: 'healing_way'; amountPct: number; durationMs: number; maxStacks: number }
|
|
650
|
+
// Pyroclasm talent ranks (18096/18073): on Hellfire/Rain of Fire periodic damage the caster deals, chance
|
|
651
|
+
// = base/tickCount to stun the victim with 18093 (3s). Cite: UnitAuraProcHandler.cpp:1347–1375.
|
|
652
|
+
| { kind: 'pyroclasm'; rankSpellId: number; durationMs: number }
|
|
653
|
+
// SPELL_EFFECT_ADD_COMBO_POINTS (80) as a standalone grant (Premeditation 14183 +2). Stealth-gated,
|
|
654
|
+
// so the engine no-ops it unstealthed. Cite: SpellEffects.cpp EffectAddComboPoints.
|
|
655
|
+
| { kind: 'combo_points'; amount: number; requiresStealth?: boolean }
|
|
656
|
+
// SPELL_AURA_RETAIN_COMBO_POINTS (148), Premeditation: when this aura expires BY TIME, remove
|
|
657
|
+
// `amount` CP from the combo target; an early remove does not. Cite: SpellAuras.cpp:4436–4452.
|
|
658
|
+
| { kind: 'retain_combo_points'; amount: number; durationMs: number }
|
|
659
|
+
// SPELL_EFFECT_TAMECREATURE (55): the hunter pet capture finisher (13481); role `pet_tame` drives
|
|
660
|
+
// the OOC tame path. Cite: SpellEffects.cpp:3149–3225 EffectTameCreature.
|
|
661
|
+
| { kind: 'tame_creature' }
|
|
662
|
+
// SPELL_EFFECT_SELF_RESURRECT (94), Reincarnation: `percent` of max when effect damage ≥ 0, else
|
|
663
|
+
// flat `health` (−damage) and `mana` (EffectMiscValue). Cite: SpellEffects.cpp:4937–4968.
|
|
664
|
+
| { kind: 'self_resurrect'; percent?: number; health?: number; mana?: number }
|
|
665
|
+
// Demonic Sacrifice (18788): kill the pet, apply the per-entry result aura under `resultSpellId` —
|
|
666
|
+
// 416→18789, 1860→18790, 1863→18791, 417→18792. Cite: Warlock.cpp:225–228.
|
|
667
|
+
| {
|
|
668
|
+
kind: 'demonic_sacrifice';
|
|
669
|
+
byPet: Record<
|
|
670
|
+
number,
|
|
671
|
+
{
|
|
672
|
+
durationMs: number;
|
|
673
|
+
/** Result aura id 18789–18792. */
|
|
674
|
+
resultSpellId: number;
|
|
675
|
+
mod?: BuffMod;
|
|
676
|
+
amount?: number;
|
|
677
|
+
school?: School;
|
|
678
|
+
/** OBS_MOD_HEALTH/MANA: restore + pctOfMax + tickMs. */
|
|
679
|
+
restore?: 'health' | 'power';
|
|
680
|
+
pctOfMax?: number;
|
|
681
|
+
tickMs?: number;
|
|
682
|
+
}
|
|
683
|
+
>;
|
|
684
|
+
}
|
|
685
|
+
// Priest Lightwell (724): `charges` charges for `durationMs`. Modelled reactively — every
|
|
686
|
+
// `intervalMs` it renews the most-hurt friendly under half health for `healPerCharge`.
|
|
687
|
+
| { kind: 'lightwell'; charges: number; healPerCharge: number; intervalMs: number; durationMs: number }
|
|
688
|
+
// Scripted DUMMY that finishes cooldowns on a cluster of the caster's own spells: 'frost' = Cold
|
|
689
|
+
// Snap 12472, 'rogue' = Preparation 14185, 'hunter' = Readiness 23989. Cite: Spell::EffectDummy.
|
|
690
|
+
| { kind: 'reset_cooldowns'; scope: 'frost' | 'rogue' | 'hunter' }
|
|
691
|
+
// A one-shot modifier the caster's next matching cast consumes (auras 107/108): critAdd 0..1,
|
|
692
|
+
// instant, freeCost, costModPct (SPELLMOD_COST — not costPct), effectPct, castTimeFlat, appliesTo.
|
|
693
|
+
| {
|
|
694
|
+
kind: 'next_cast_mod';
|
|
695
|
+
appliesTo: 'any' | 'nature' | 'heal' | 'summon' | 'curse';
|
|
696
|
+
durationMs: number;
|
|
697
|
+
critAdd?: number;
|
|
698
|
+
instant?: boolean;
|
|
699
|
+
freeCost?: boolean;
|
|
700
|
+
/** SPELLMOD_COST signed % on the resolved cost (Fel Domination −50). Not ManaCostPercentage. */
|
|
701
|
+
costModPct?: number;
|
|
702
|
+
/** @deprecated Alias of costModPct for the startPendingSpellMod copy; not SpellDef.costPct. */
|
|
703
|
+
costPct?: number;
|
|
704
|
+
effectPct?: number;
|
|
705
|
+
/** SPELLMOD_CASTING_TIME flat ms (Nature's Grace CalculateSimpleValue −500). */
|
|
706
|
+
castTimeFlat?: number;
|
|
707
|
+
// EffectItemType / spell_affect mask: non-zero → only spells whose SpellFamilyFlags share a
|
|
708
|
+
// bit consume this (Improved Fireball vs Frostbolt). Cite: Player.cpp:350–357.
|
|
709
|
+
familyFlags?: number;
|
|
710
|
+
charges?: number;
|
|
711
|
+
}
|
|
712
|
+
// Lasting auras 107/108 that are NOT consume-on-next-cast — installed as owned SpellModifiers
|
|
713
|
+
// (Arcane Power COST +30% for 15s, Barkskin). Charged auras stay `next_cast_mod`.
|
|
714
|
+
| {
|
|
715
|
+
kind: 'owned_spell_mods';
|
|
716
|
+
durationMs: number;
|
|
717
|
+
applyTo?: 'self';
|
|
718
|
+
mods: Array<{
|
|
719
|
+
op: number;
|
|
720
|
+
type: 'flat' | 'pct';
|
|
721
|
+
amount: number;
|
|
722
|
+
familyFlags?: number;
|
|
723
|
+
}>;
|
|
724
|
+
}
|
|
725
|
+
// SI5 materializations resolveCombatSpell pushes onto `effects[]` and applySpellLate consumes.
|
|
726
|
+
// `auraOnTarget`: the holder belongs on the cast target, not the caster.
|
|
727
|
+
| { kind: 'aura_dummy_holder'; spellId?: number; durationMs: number; auraOnTarget?: boolean; hostile?: boolean }
|
|
728
|
+
| { kind: 'aura_dummy'; spellId?: number; durationMs?: number; auraOnTarget?: boolean; hostile?: boolean }
|
|
729
|
+
| { kind: 'mod_invisibility'; amount: number; durationMs: number; invisibilityType?: number }
|
|
730
|
+
| { kind: 'track_creatures'; durationMs: number; creatureType?: number; trackFlag?: number }
|
|
731
|
+
| { kind: 'channel_death_item'; itemType: number; count: number; soulShard?: boolean }
|
|
732
|
+
| { kind: 'leap'; targetA?: number; targetB?: number }
|
|
733
|
+
| { kind: 'trade_skill'; skillId?: number }
|
|
734
|
+
| { kind: 'inebriate'; drunkMod?: number; castItemEntry?: number }
|
|
735
|
+
| { kind: 'transmitted_object'; goEntry?: number; durationMs?: number }
|
|
736
|
+
| { kind: 'summon_object_slot'; goEntry: number; slot: number; durationMs: number }
|
|
737
|
+
| { kind: 'enchant_held_item'; enchantId?: number; durationMs?: number }
|
|
738
|
+
| { kind: 'sanctuary'; vanishRogueSpecial?: boolean; cannotBeDetectedMs?: number }
|
|
739
|
+
| { kind: 'mod_health_regen_percent'; amount: number; durationMs: number }
|
|
740
|
+
// SPELL_AURA_MOD_REGEN_DURING_COMBAT (116) — % of spirit HP regen allowed in combat.
|
|
741
|
+
// Cite: Player.cpp:2297–2299, :2399–2400; Troll Regeneration 20555; KI-876.
|
|
742
|
+
| { kind: 'mod_regen_during_combat'; amount: number; durationMs?: number }
|
|
743
|
+
| { kind: 'skill_step'; skillId: number; step: number }
|
|
744
|
+
| { kind: 'skill_marker' }
|
|
745
|
+
| { kind: 'mod_skill'; skillId: number; amount: number; permanent?: boolean; durationMs?: number }
|
|
746
|
+
// SPELL_EFFECT_PARRY (22). SetCanParry(true). Cite: SpellEffects.cpp:4885–4888; KI-818.
|
|
747
|
+
| { kind: 'can_parry' }
|
|
748
|
+
// SPELL_EFFECT_BLOCK (23). SetCanBlock(true). Cite: SpellEffects.cpp:4890–4893.
|
|
749
|
+
| { kind: 'can_block' }
|
|
750
|
+
// SPELL_AURA_MOD_REPUTATION_GAIN (156) — Diplomacy. Cite: Player.cpp:6297–6302.
|
|
751
|
+
| { kind: 'mod_reputation_gain'; amount: number; durationMs?: number; factionId?: number }
|
|
752
|
+
// SPELL_AURA_MOD_MECHANIC_RESISTANCE (117) — Hardiness. mechanic = EffectMiscValue.
|
|
753
|
+
// Cite: Unit.cpp:4015–4031 MagicSpellHitResult.
|
|
754
|
+
| { kind: 'mod_mechanic_resistance'; mechanic: number; amount: number; durationMs?: number }
|
|
755
|
+
| { kind: 'mod_stalked'; durationMs: number }
|
|
756
|
+
// SPELL_AURA_MOD_LANGUAGE (75). languageId = misc; hostile when targetA enemy (CoT, KI-765).
|
|
757
|
+
| { kind: 'mod_language'; amount?: number; durationMs?: number; languageId?: number; hostile?: boolean }
|
|
758
|
+
| { kind: 'force_reaction'; amount?: number; durationMs?: number; factionId?: number }
|
|
759
|
+
// SPELL_AURA_PREVENTS_FLEEING (92). hostile when targetA enemy (Curse of Recklessness).
|
|
760
|
+
// Cite: SpellAuras.cpp HandlePreventFleeing; SpellTargetDefines TARGET_UNIT_ENEMY=6; KI-765.
|
|
761
|
+
| { kind: 'prevents_fleeing'; durationMs?: number; hostile?: boolean }
|
|
762
|
+
| { kind: 'teleport_face_caster'; targetA?: number; targetB?: number; requiresDestLocation?: boolean }
|
|
763
|
+
| { kind: 'add_farsight'; durationMs: number; radius?: number; dynObjectType?: number }
|
|
764
|
+
| { kind: 'summon_change_item'; newItemId: number }
|
|
765
|
+
// SPELL_EFFECT_SUMMON_DEMON (56). Cite: SpellEffects.cpp:5430 EffectSummonDemon.
|
|
766
|
+
| { kind: 'summon_demon'; creature: number; count?: number; durationMs?: number; level?: number }
|
|
767
|
+
// SPELL_EFFECT_SUMMON_POSSESSED (73) — Eye of Kilrogg. oocCastEffects summons it as a pet
|
|
768
|
+
// alongside summon_demon. Cite: SpellEffects.cpp EffectSummonPossessed; KI-578.
|
|
769
|
+
| { kind: 'summon_possessed'; creature: number; durationMs?: number }
|
|
770
|
+
// SPELL_AURA_MOD_POSSESS_PET (128) — Eyes of the Beast. Own-pet vision, not enemy CC.
|
|
771
|
+
// Cite: SpellAuras.cpp:2258–2279; Spell.cpp:5717–5735; KI-729.
|
|
772
|
+
| { kind: 'mod_possess_pet'; durationMs: number; spellId?: number }
|
|
773
|
+
| { kind: 'script_handled_noop'; spellId?: number }
|
|
774
|
+
// SPELL_EFFECT_DURABILITY_DAMAGE_PCT (115). percent = damage/100. Cite: SpellEffects.cpp:5236–5260.
|
|
775
|
+
| { kind: 'durability_damage'; slot: number; percent: number; allItems: boolean; includeInventory: boolean };
|
|
776
|
+
|
|
777
|
+
/** `effectSlot`: the DBC EffectN slot this effect came from (index into effectBonusCoefficient*). */
|
|
778
|
+
export type SpellEffect = SpellEffectBody & { effectSlot?: number };
|
|
779
|
+
|
|
780
|
+
// Slim ability kit embedded on `summon_totem` effects so combat can cast/apply without DataStore. Numbers
|
|
781
|
+
// and effects are the same mapped values as the full SpellDef for that id.
|
|
782
|
+
export interface TotemAbilityDef {
|
|
783
|
+
id: number;
|
|
784
|
+
name: string;
|
|
785
|
+
castTimeMs: number;
|
|
786
|
+
cooldownMs: number;
|
|
787
|
+
gcdMs: number;
|
|
788
|
+
school: School;
|
|
789
|
+
effects: SpellEffect[];
|
|
790
|
+
// SpellRadius.dbc yards for the kit's area effect — the ABILITY spell's radius (effect 35), never
|
|
791
|
+
// the summon's cast range. Absent = bake gap, fail open. Cite: SpellAuras.cpp:307–309.
|
|
792
|
+
radiusYd?: number;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/** AI hint so the combat policy can pick sensible actions without guessing. */
|
|
796
|
+
export type SpellRole =
|
|
797
|
+
| 'nuke' // cast-time direct damage (Fireball, Frostbolt)
|
|
798
|
+
| 'instant_nuke' // instant direct damage on a cooldown (Fire Blast)
|
|
799
|
+
| 'control' // instant, roots the target (Frost Nova)
|
|
800
|
+
| 'dot' // applies a damage-over-time (Rend)
|
|
801
|
+
| 'buff' // self buff (Battle Shout, Frost Armor)
|
|
802
|
+
| 'charge' // opener that generates resource (Charge)
|
|
803
|
+
| 'strike' // weapon-based strike; the on-next-swing ones set onNextSwing (Heroic Strike)
|
|
804
|
+
| 'shoot' // ranged-weapon attack; damage comes from the equipped `ranged` item (Shoot/Auto Shot)
|
|
805
|
+
| 'attack' // melee auto-attack toggle (the counterpart to Shoot); flips the fighter to melee mode
|
|
806
|
+
| 'conjure' // creates an item
|
|
807
|
+
| 'pet_summon' // summon or call a pet (Summon Imp, Call Pet)
|
|
808
|
+
| 'pet_heal' // heal the active pet (Mend Pet)
|
|
809
|
+
| 'pet_tame' // tame a beast into a pet (Tame Beast)
|
|
810
|
+
| 'totem_summon' // shaman totem (Searing / Stoneskin / Mana Spring / …) — in-combat summon
|
|
811
|
+
| 'seal' // paladin seal: a self-aura kept up in combat, procs on melee swing (Seal of Righteousness)
|
|
812
|
+
| 'judgement' // paladin Judgement: unleash the active seal on a cooldown (Judgement)
|
|
813
|
+
| 'form' // shapeshift form spell (Bear/Cat/Travel/…) — enter/toggle form
|
|
814
|
+
| 'stealth' // enter stealth / Prowl / Shadowmeld (aura 16); OOC or Vanish mid-fight
|
|
815
|
+
| 'utility';
|
|
816
|
+
|
|
817
|
+
// Verbatim spell_template effect slot for the client-side interpreter (SI1), baked alongside the
|
|
818
|
+
// synthesized `effects[]`. Field names: docs/archive/SPELL-INTERPRETER.md §2.1.
|
|
819
|
+
export interface RawSpellEffect {
|
|
820
|
+
/** EffectN — SPELL_EFFECT_* dispatch key */
|
|
821
|
+
effect: number;
|
|
822
|
+
/** EffectApplyAuraNameN — SPELL_AURA_* when effect is apply-aura family */
|
|
823
|
+
auraName: number;
|
|
824
|
+
basePoints: number;
|
|
825
|
+
dieSides: number;
|
|
826
|
+
/** EffectBaseDiceN — used with basePoints for min formula */
|
|
827
|
+
baseDice: number;
|
|
828
|
+
/** EffectRealPointsPerLevelN */
|
|
829
|
+
perLevel: number;
|
|
830
|
+
/** EffectPointsPerComboPointN */
|
|
831
|
+
perCombo: number;
|
|
832
|
+
amplitude: number;
|
|
833
|
+
radiusIndex: number;
|
|
834
|
+
targetA: number;
|
|
835
|
+
targetB: number;
|
|
836
|
+
miscValue: number;
|
|
837
|
+
miscValueB: number;
|
|
838
|
+
triggerSpell: number;
|
|
839
|
+
/** Per-effect mechanic when present, else spell-level Mechanic */
|
|
840
|
+
mechanic: number;
|
|
841
|
+
/** EffectChainTargetN */
|
|
842
|
+
chainTargets: number;
|
|
843
|
+
// EffectItemTypeN — item entry for SPELL_EFFECT_CREATE_ITEM (24) and kin. Optional: SI1 omitted
|
|
844
|
+
// the column until SI3. Cite: spell_template.EffectItemType; SpellEffects.cpp DoCreateItem.
|
|
845
|
+
itemType?: number;
|
|
846
|
+
// EffectMultipleValueN — level offset / multiplier for summon wild/guardian paths. Cite: SpellEffects.cpp
|
|
847
|
+
// EffectSummonWild / EffectSummonGuardian.
|
|
848
|
+
multipleValue?: number;
|
|
849
|
+
// DmgMultiplierN — per-jump chain falloff (Chain Heal 0.5, Chain Lightning 0.7, Swipe 1). Cite:
|
|
850
|
+
// Spell.cpp:4459–4465 ExecuteEffects; spell_template.DmgMultiplier1.
|
|
851
|
+
dmgMultiplier?: number;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
export interface SpellDef {
|
|
855
|
+
id: number;
|
|
856
|
+
name: string;
|
|
857
|
+
rank: number; // 0 if unranked
|
|
858
|
+
school: School;
|
|
859
|
+
powerType: PowerType; // resource this spell spends
|
|
860
|
+
cost: number; // mana, rage, or energy (resolved; energy = raw ManaCost, rage = ManaCost/10)
|
|
861
|
+
castTimeMs: number; // resolved from CastingTimeIndex (0 = instant)
|
|
862
|
+
cooldownMs: number; // RecoveryTime
|
|
863
|
+
gcdMs: number; // 1500 on-GCD, 0 off-GCD
|
|
864
|
+
rangeMax: number; // yards (flavor for the text log)
|
|
865
|
+
// SpellRange.dbc min column (yards) — the charge / gap-close floor. Omitted when the DBC min is 0
|
|
866
|
+
// or the range index is absent; NEVER invent. Cite: SpellRange.dbc field 1.
|
|
867
|
+
rangeMin?: number;
|
|
868
|
+
// The raw SpellRange.dbc index, not the resolved yards. Only CanParryAbility reads it: parry needs
|
|
869
|
+
// index 1 or 2, and yards cannot substitute (5 covers 2, 6, 12). Cite: Unit.cpp:3153-3155.
|
|
870
|
+
rangeIndex?: number;
|
|
871
|
+
reqLevel: number;
|
|
872
|
+
// spell_template.SpellLevel — the intended cast level for the rank (downrank penalty input),
|
|
873
|
+
// distinct from `reqLevel`. Omitted when SpellLevel is 0.
|
|
874
|
+
spellLevel?: number;
|
|
875
|
+
effects: SpellEffect[];
|
|
876
|
+
// SI1: verbatim spell_template effect rows for the client interpreter, additive alongside
|
|
877
|
+
// `effects[]`. Omitted when all Effect1..3 are 0. Cite: docs/archive/SPELL-INTERPRETER.md §2.1.
|
|
878
|
+
rawEffects?: RawSpellEffect[];
|
|
879
|
+
// spell_template.Reagent1..8 / ReagentCount1..8 — items consumed on cast (Soul Shard 6265×1 on
|
|
880
|
+
// Summon Voidwalker). Omitted when the spell has none. Cite: Spell.cpp CheckItems / TakeReagents.
|
|
881
|
+
reagents?: { item: number; count: number }[];
|
|
882
|
+
category?: number; // spell_template.Category for shared category cooldowns (potions etc); omitted if 0/unset
|
|
883
|
+
outOfCombatOnly?: boolean; // conjure, food/water (NOT combat armor buffs — CB4)
|
|
884
|
+
role?: SpellRole; // AI hint
|
|
885
|
+
// Area-of-effect: the spell has an enemy-area EffectImplicitTarget (15/16/22/24/28) and a fannable
|
|
886
|
+
// effect, so castOnTargets hits every living unit on the target's side. Absent = single-target.
|
|
887
|
+
aoe?: boolean;
|
|
888
|
+
// Area shape from EffectImplicitTargetA: 22 → 'pbaoe', 15/16/28 → 'ground', 24 → 'cone'. Only on
|
|
889
|
+
// aoe spells; flat `aoe` stays the fan-out flag. Baked by enrich-spell-geometry.mjs.
|
|
890
|
+
aoeShape?: 'pbaoe' | 'ground' | 'cone';
|
|
891
|
+
// `spell_cone.ConeDegrees` for rank 1 — the FULL angle. NEGATIVE is a REAR cone, not a narrow one
|
|
892
|
+
// (Tail Sweep 15847 = -82). Absent means 60°. Read through `coneArcOf`. Cite: Spell.cpp:7585-7591.
|
|
893
|
+
coneDeg?: number;
|
|
894
|
+
// `spell_facing.facingcasterflag & 0x1`: a PLAYER cast refuses with "must be facing" outside the
|
|
895
|
+
// caster's front half; creature casts are exempt. Cite: Spell.cpp:6247-6249; SpellDefines.h:391.
|
|
896
|
+
requiresFacing?: true;
|
|
897
|
+
// First non-zero EffectRadiusIndex → SpellRadius.dbc yards; omitted when all resolve to 0. Engine
|
|
898
|
+
// fan-out still uses `aoe`, so this is data for a future distance/cap model.
|
|
899
|
+
radiusYd?: number;
|
|
900
|
+
// spell_template.MaxAffectedTargets when > 0 (CMaNGOS SpellEntry). Omitted when 0/absent — never invent a
|
|
901
|
+
// default cap. Cite: docs/cmangos_mapping/spells/additional-logic.md.
|
|
902
|
+
maxTargets?: number;
|
|
903
|
+
mechanic?: Mechanic; // DB Mechanic — drives CC diminishing-returns grouping + immunity (absent => none)
|
|
904
|
+
rageGenerated?: number; // Charge and similar
|
|
905
|
+
strikeBonus?: number; // Heroic Strike: flat bonus added onto a weapon hit
|
|
906
|
+
onNextSwing?: boolean; // Heroic Strike / Cleave / Maul / Raptor Strike: replaces your next auto-attack (off the GCD)
|
|
907
|
+
passive?: boolean; // SPELL_ATTR_PASSIVE: an aura you never cast (weapon skills, Block/Dodge, racials) — hidden from the spellbook/action bars
|
|
908
|
+
// SPELL_ATTR_HIDDEN_CLIENTSIDE (0x80): never in the spellbook or on a bar, but several carry real
|
|
909
|
+
// damage/CC (Grovel, Duel, Opening), so role inference must skip them. All have SpellIconID 1.
|
|
910
|
+
hiddenClientside?: boolean;
|
|
911
|
+
// Spell.dbc AuraInterruptFlags (field 18), stamped from the client DBC because the ClassicDB dump
|
|
912
|
+
// zeroes it. Bit 0x02 = break-on-damage CC. Cite: SpellDefines.h:362–386.
|
|
913
|
+
auraInterruptFlags?: number;
|
|
914
|
+
// Channel duration ms from DurationIndex (channelled AttributesEx only); until-cancelled stamps
|
|
915
|
+
// INT32_MAX + `channelUntilCancelled`. Cite: SpellMgr IsChanneledSpell; channel.ts arms it.
|
|
916
|
+
channelMs?: number;
|
|
917
|
+
// Spell.dbc ChannelInterruptFlags (field 19), the same bit enum as AuraInterruptFlags — combat
|
|
918
|
+
// cancels or pushbacks the channel from these. Cite: Unit.cpp:1285–1302; Spell.cpp DelayedChannel.
|
|
919
|
+
channelInterruptFlags?: number;
|
|
920
|
+
// SpellDuration.dbc Duration = -1 (index 21). Channel ends only on interrupt / death, not a timer. Cite:
|
|
921
|
+
// SpellDuration.dbc record 21; enrich-channel.mjs.
|
|
922
|
+
channelUntilCancelled?: boolean;
|
|
923
|
+
// SPELLMOD_NOT_LOSE_CASTING_TIME (op 9) PCT from talents matching this spell's class mask, added
|
|
924
|
+
// to the Delayed / DelayedChannel resist roll. Cite: Spell.cpp:6817–6821 / 6848–6852.
|
|
925
|
+
notLoseCastingTimePct?: number;
|
|
926
|
+
// SpellEntry.Dispel — the dispel CATEGORY of the auras this spell applies (MAGIC=1, CURSE=2,
|
|
927
|
+
// DISEASE=3, POISON=4). Absent/0 = not dispellable. Cite: SpellAuras.cpp IsDispellableByMask.
|
|
928
|
+
dispel?: number;
|
|
929
|
+
icon?: string; // WoW icon name (e.g. "spell_fire_flamebolt"); UI-only, absent => question-mark fallback
|
|
930
|
+
description?: string; // from DB/CSV if available (e.g. "Use: Increases your Strength by 4 for 1 hour.")
|
|
931
|
+
// Spell family class mask (SpellClassOptions.csv) that talent spell_mod rows match against.
|
|
932
|
+
// Absent on older bakes, and a missing mask means no family match, so mods will not apply.
|
|
933
|
+
spellClassMask?: number[];
|
|
934
|
+
// LEARN_SPELL (36) / LEARN_PET_SPELL (57): this row is a stub that teaches `teaches`, and inherits
|
|
935
|
+
// that ability's cooldown/gcd/category at bake. Cite: SpellEffects.cpp:2445; :3386.
|
|
936
|
+
teaches?: number;
|
|
937
|
+
// ---- Combo points / energy finishers (sourced from spell_template + SpellDuration.dbc) ----
|
|
938
|
+
/** SPELL_EFFECT_ADD_COMBO_POINTS (80): CP granted on a successful hit (base+dice, typically 1). */
|
|
939
|
+
comboPointsGenerated?: number;
|
|
940
|
+
// Finisher: AttributesEx SPELL_ATTR_EX_FINISHING_MOVE_DAMAGE (bit 20) and/or
|
|
941
|
+
// SPELL_ATTR_EX_FINISHING_MOVE_DURATION (bit 22). Needs combo points on the target to cast.
|
|
942
|
+
requiresComboPoints?: boolean;
|
|
943
|
+
finishingScalesDamage?: boolean;
|
|
944
|
+
finishingScalesDuration?: boolean;
|
|
945
|
+
// SpellDuration.dbc MaxDuration (Duration[2]) when it differs from base Duration[0]. CMaNGOS: duration +=
|
|
946
|
+
// (max - min) * comboPoints / 5 (SpellMgr.cpp CalculateSpellDuration).
|
|
947
|
+
durationMaxMs?: number;
|
|
948
|
+
// spell_template.DurationIndex → SpellDuration.dbc row; interpretSpell uses it when ctx.durationMs
|
|
949
|
+
// is absent. Not stamped on every bake. Cite: SpellMgr.cpp GetSpellDuration.
|
|
950
|
+
durationIndex?: number;
|
|
951
|
+
// SpellEntry.SpellIconID (numeric). Distinct from UI `icon` string name. Used by EffectSchoolDMG family
|
|
952
|
+
// specials (Bloodthirst icon 38, Shield Slam 413). Optional additive — fixtures / future extract.
|
|
953
|
+
spellIconId?: number;
|
|
954
|
+
// Optional spell_threat row (multiplier / flat / ap_bonus); absent means GetSpellThreatMultiplier
|
|
955
|
+
// defaults to 1.0. Populated by enrich-spell-threat.mjs — never invent rows.
|
|
956
|
+
threatMultiplier?: number;
|
|
957
|
+
threatFlat?: number;
|
|
958
|
+
threatApBonus?: number;
|
|
959
|
+
// Initial-aggro suppressors from AttributesEx/Ex2: `noThreat` never aggros, `threatOnlyOnMiss`
|
|
960
|
+
// only on a miss, `noInitialThreat` lets damage build threat but the cast itself never pulls.
|
|
961
|
+
noThreat?: boolean;
|
|
962
|
+
threatOnlyOnMiss?: boolean;
|
|
963
|
+
noInitialThreat?: boolean;
|
|
964
|
+
// SPELLMOD_THREAT percent from talent ADD_PCT/FLAT (runtime clone via withTalentMods). Applied in
|
|
965
|
+
// CalcThreat before ApplyTotalThreatModifier. Cite: ThreatManager.cpp:49.
|
|
966
|
+
threatSpellModPct?: number;
|
|
967
|
+
// Eviscerate AP term from CMaNGOS SpellEffects.cpp SPELLFAMILY_ROGUE hook: damage += AP * comboPoints *
|
|
968
|
+
// coeff. Only set for that family/flag match (coeff = 0.03).
|
|
969
|
+
comboApCoeff?: number;
|
|
970
|
+
// ---- Shapeshift / stance gating (spell_template Stances / StancesNot / Attributes) ----
|
|
971
|
+
// SpellEntry.Stances: allowed only in these forms (bit = 1 << (formId - 1)). Absent/0 = no form.
|
|
972
|
+
stances?: number;
|
|
973
|
+
/** SpellEntry.StancesNot bitmask: forbidden in these forms. */
|
|
974
|
+
stancesNot?: number;
|
|
975
|
+
// SPELL_ATTR_NOT_SHAPESHIFT (0x10000): cannot cast while in a real shapeshift form. Engine: product
|
|
976
|
+
// leave-then-cast (docs/done/druid.md §5). CMaNGOS refuses.
|
|
977
|
+
notShapeshift?: boolean;
|
|
978
|
+
// SPELL_ATTR_EX2_ALLOW_WHILE_NOT_SHAPESHIFTED (0x80000): form-required spell that may also be used out of
|
|
979
|
+
// form (rare). Sourced from AttributesEx2.
|
|
980
|
+
allowWhileNotShapeshifted?: boolean;
|
|
981
|
+
// ManaCostPercentage — a share of the caster's CREATE pool: powerCost = flat `cost` + floor(create
|
|
982
|
+
// health-or-mana × costPct / 100). Never store the percentage in `cost`. Cite: Spell.cpp:6331.
|
|
983
|
+
costPct?: number;
|
|
984
|
+
// spell_template.ManaPerSecond — HP/mana taken every 1s while the aura/channel lives. POWER_HEALTH
|
|
985
|
+
// (Health Funnel) cancels the aura when HP ≤ this. Cite: SpellAuras.cpp:5686–5707.
|
|
986
|
+
manaPerSecond?: number;
|
|
987
|
+
/** spell_template.ManaPerSecondPerLevel. All Classic Health Funnel ranks are 0. */
|
|
988
|
+
manaPerSecondPerLevel?: number;
|
|
989
|
+
// SPELL_ATTR_EX2_NO_TARGET_PER_SECOND_COSTS (0x800): only the caster's own holder pays. Health Funnel has
|
|
990
|
+
// this so the pet HoT does not drain the pet. Cite: SpellDefines.h:113.
|
|
991
|
+
noTargetPerSecondCosts?: boolean;
|
|
992
|
+
/** SpellEntry.AttributesEx2 raw mask when a consumer needs other EX2 bits. */
|
|
993
|
+
attributesEx2?: number;
|
|
994
|
+
// SpellEntry.AttributesEx raw mask, non-zero on 3,561 of 22,374. Read for NO_REDIRECTION 0x8,
|
|
995
|
+
// NO_THREAT 0x400, AURA_UNIQUE 0x800, REQUIRE_ALL_TARGETS 0x4000000. Cite: SpellDefines.h:64-95.
|
|
996
|
+
attributesEx?: number;
|
|
997
|
+
// SpellEntry.AttributesEx3 raw mask, non-zero on 799 rows. Read for NO_AVOIDANCE 0x40, NOT_A_PROC
|
|
998
|
+
// 0x200, ALWAYS_HIT 0x40000, CAN_PROC_FROM_PROCS 0x4000000. Cite: SpellDefines.h:135-167.
|
|
999
|
+
attributesEx3?: number;
|
|
1000
|
+
// SpellEntry.AttributesEx4 raw mask (field 10). Non-zero on 72 rows. Read for NO_HELPFUL_THREAT 0x8,
|
|
1001
|
+
// NO_HARMFUL_THREAT 0x10. Cite: SpellDefines.h:169-182.
|
|
1002
|
+
attributesEx4?: number;
|
|
1003
|
+
// `spell_template.AttributesServerside` — CMaNGOS's own fifth word, carried by no DBC. 72 of
|
|
1004
|
+
// 22,374: IGNORE_EVADE 0x4 on 56, FACING_BACK 0x8 on 16. Cite: SpellDefines.h:188-194.
|
|
1005
|
+
attributesServerside?: number;
|
|
1006
|
+
// SpellEntry.RequiresSpellFocus — a GO of this SpellFocusObject.dbc id must be nearby (anvil 1 on 315
|
|
1007
|
+
// spells, forge 4 on 86). 695 rows. Cite: Spell.cpp:5019-5022.
|
|
1008
|
+
requiresSpellFocus?: number;
|
|
1009
|
+
// SpellEntry.CasterAuraState — an AuraState bit the caster must hold (24 rows): 1 DEFENSE on 17,
|
|
1010
|
+
// 2 HEALTHLESS_20, 3 BERSERKING, 5 JUDGEMENT, 7 HUNTER_PARRY. Cite: Unit.h:2163 HasAuraState.
|
|
1011
|
+
casterAuraState?: number;
|
|
1012
|
+
// SpellEntry.TargetAuraState — 2 AURA_STATE_HEALTHLESS_20_PERCENT on all 16 rows (Execute x7,
|
|
1013
|
+
// Hammer of Wrath x3, Fatal Bite x3). Cite: Unit.cpp:534; engine/combat/reactiveGates.ts.
|
|
1014
|
+
targetAuraState?: number;
|
|
1015
|
+
// SpellEntry.BaseLevel — the floor the caster level is clamped to before spellLevel is subtracted for
|
|
1016
|
+
// per-level scaling. 6,128 rows. Cite: Object.cpp:2926-2934.
|
|
1017
|
+
baseLevel?: number;
|
|
1018
|
+
/** SpellEntry.MaxLevel — the ceiling of the same clamp. 1,306 rows. Cite: Object.cpp:2926. */
|
|
1019
|
+
maxLevel?: number;
|
|
1020
|
+
// SpellEntry.ManaCostPerlevel — added to the flat cost as perLevel × (rank/5 − baseLevel), where
|
|
1021
|
+
// rank is the caster level capped at maxLevel×5. 72 rows. Cite: Spell.cpp:6332; Unit.cpp:11855.
|
|
1022
|
+
costPerLevel?: number;
|
|
1023
|
+
// SpellEntry.MaxTargetLevel — refuse a victim above this level (Mind Soothe 40 and 55, Soothe Animal). 25
|
|
1024
|
+
// rows. Cite: Spell.cpp:4922 CheckTarget.
|
|
1025
|
+
maxTargetLevel?: number;
|
|
1026
|
+
// SpellEntry.Totem1/2 — crafting TOOL item entries the caster must carry despite the column name
|
|
1027
|
+
// (Blacksmith Hammer 5956 on 337 spells). 684 rows. Cite: Spell.cpp:6601 CheckItems.
|
|
1028
|
+
requiredTools?: number[];
|
|
1029
|
+
// ---- Stealth / positional gates (spell_template Attributes / Ex / Ex2 / Serverside) ----
|
|
1030
|
+
// SPELL_ATTR_ONLY_STEALTHED (0x20000): the cast fails without MOD_STEALTH. Cite: Spell.cpp ~4623.
|
|
1031
|
+
requiresStealth?: boolean;
|
|
1032
|
+
// Must be behind the target (38 rows: Backstab, Garrote, Shred, Ambush). Either the Ex2/Ex combat
|
|
1033
|
+
// pair or AttributesServerside FACING_BACK 0x8 sets it; Pounce is excluded. Cite: Spell.cpp:4822.
|
|
1034
|
+
requiresBehind?: boolean;
|
|
1035
|
+
// Must face the target's front (8 rows: Gouge, Sap). `Attributes` must EQUAL 0x150010 — an
|
|
1036
|
+
// equality test on the whole word, not a mask. Cite: Spell.cpp:4833-4834.
|
|
1037
|
+
requiresFront?: boolean;
|
|
1038
|
+
// SPELL_ATTR_CANCELS_AUTO_ATTACK_COMBAT (0x100000): AttackStop on successful cast. Stealth / Prowl /
|
|
1039
|
+
// Gouge / Sap / Shadowmeld. Cite: Spell.cpp ~3691.
|
|
1040
|
+
cancelsAutoAttack?: boolean;
|
|
1041
|
+
// SPELL_ATTR_NOT_IN_COMBAT_ONLY_PEACEFUL (0x10000000): cannot cast in combat. Aliases
|
|
1042
|
+
// outOfCombatOnly for world-cast gating; Sap's peaceful-target rule is a separate Ex flag.
|
|
1043
|
+
notInCombatOnly?: boolean;
|
|
1044
|
+
// Pounce carries the behind Ex-flags but lost the facing limit in 2.0.1, so the core excludes it
|
|
1045
|
+
// and `requiresBehind` stays unset on its 3 ranks. Cite: Spell.cpp:4825-4827.
|
|
1046
|
+
pounceBehindCoreExcluded?: boolean;
|
|
1047
|
+
// SpellMgr.h IsBinarySpell (pre-WotLK), computed at ETL from Effect* / EffectApplyAuraName* /
|
|
1048
|
+
// EffectImplicitTarget*. Absent → the engine falls back to an effect-kind proxy.
|
|
1049
|
+
binary?: boolean;
|
|
1050
|
+
// spell_template.DmgClass (SharedDefines SPELL_DAMAGE_CLASS_*): 0 none, 1 magic, 2 melee, 3 ranged.
|
|
1051
|
+
// IsResistableSpell = dmgClass !== 0. Used for full-resist land rolls on magic damage.
|
|
1052
|
+
dmgClass?: number;
|
|
1053
|
+
// SpellEntry.TargetCreatureType bits (1 << (type - 1)): the spell only lands on these types
|
|
1054
|
+
// (Shackle → undead, Banish → demon|elemental). Absent/0 = unrestricted. Cite: Spell.cpp ~6909.
|
|
1055
|
+
targetCreatureTypeMask?: number;
|
|
1056
|
+
// ---- Spell/aura engine (System 5) — optional; missing = prior behaviour ----
|
|
1057
|
+
// CategoryRecoveryTime ms: with `category` set the category CD uses this, personal uses `cooldownMs`.
|
|
1058
|
+
categoryRecoveryMs?: number;
|
|
1059
|
+
// InterruptFlags — COMBAT (0x08) for IsInterruptible + swing reset on cast. Cite: Spell.cpp
|
|
1060
|
+
// IsInterruptible / _handle_immediate_phase; SpellDefines.h SPELL_INTERRUPT_FLAG_*.
|
|
1061
|
+
interruptFlags?: number;
|
|
1062
|
+
// spell_template.PreventionType: 0 none, 1 silence, 2 pacify. Silence plus school lockout gates
|
|
1063
|
+
// casts; pacify is melee and out of scope. Cite: SharedDefines SpellPreventionType.
|
|
1064
|
+
preventionType?: number;
|
|
1065
|
+
// SpellEntry.StackAmount — max stacks for this aura on a target. 0/absent = single instance (refresh
|
|
1066
|
+
// duration, no multi-stack). Cite: SpellEntry.StackAmount; Player.cpp stack clamp.
|
|
1067
|
+
stackAmount?: number;
|
|
1068
|
+
// SPELL_ATTR_EX3_DOT_STACKING_RULE (0x80): a SEPARATE stack per caster (each warlock's own
|
|
1069
|
+
// Corruption). Absent = one shared holder, so two warriors build ONE 5-stack Sunder Armor.
|
|
1070
|
+
stacksPerCaster?: boolean;
|
|
1071
|
+
// SpellEntry.procCharges — charges on the aura; decremented on successful proc fire; aura removed at 0.
|
|
1072
|
+
// Cite: SpellEntry.procCharges; UnitAuraProcHandler charge consume.
|
|
1073
|
+
procCharges?: number;
|
|
1074
|
+
// SpellEntry.ProcChance as PERCENT 0..100. spell_proc_event.CustomChance overrides it, and PPM
|
|
1075
|
+
// replaces it on the attacker melee path. Cite: UnitAuraProcHandler.cpp:590–600.
|
|
1076
|
+
procChance?: number;
|
|
1077
|
+
// SpellEntry.procFlags bitmask (SpellMgr.h ProcFlags). Used when matching combat events to aura/talent
|
|
1078
|
+
// procs. Absent = match any hit context (legacy talent procs).
|
|
1079
|
+
procFlags?: number;
|
|
1080
|
+
// SpellEntry.SpellFamilyName (SharedDefines SpellFamily). Used with spell_proc_event family match. Cite:
|
|
1081
|
+
// SpellMgr.cpp IsSpellProcEventCanTriggeredBy ~912; enrich-spell-aura.mjs.
|
|
1082
|
+
spellFamilyName?: number;
|
|
1083
|
+
// SpellEntry.SpellFamilyFlags (bitmask). Matched against spell_proc_event.SpellFamilyMask*. Cite:
|
|
1084
|
+
// UnitAuraProcHandler.cpp ~634 IsFitToFamilyMask; enrich-spell-aura.mjs.
|
|
1085
|
+
spellFamilyFlags?: number;
|
|
1086
|
+
// Per-effect DBC effectBonusCoefficient[3]; with caster spell power or AP the SpellBonusWithCoeffs
|
|
1087
|
+
// path adds bonus damage. Absent = baked min/max only. Cite: Unit.cpp ~6974.
|
|
1088
|
+
effectBonusCoefficient?: number[];
|
|
1089
|
+
/** Per-effect DBC effectBonusCoefficientFromAP[3]. Cite: Unit.cpp SpellBonusWithCoeffs ~6985. */
|
|
1090
|
+
effectBonusCoefficientFromAP?: number[];
|
|
1091
|
+
// spell_proc_event row for this spell id, driving PPM / custom chance / school+family filters /
|
|
1092
|
+
// hidden cooldown at proc sites. Cite: SpellMgr.h SpellProcEventEntry ~1740. Never invent rows.
|
|
1093
|
+
spellProcEvent?: SpellProcEventDef;
|
|
1094
|
+
// Optional conditions-table entry id (or inline ConditionDef for tests/fixtures). When set, cast/use is
|
|
1095
|
+
// gated by the pure conditions evaluator. Cite: Conditions.h ConditionEntry; conditions.md.
|
|
1096
|
+
conditionId?: number;
|
|
1097
|
+
// Inline condition for fixtures / tests (production prefers conditionId + baked table). Never invent
|
|
1098
|
+
// Classic content rows here — test-only or ETL-sourced.
|
|
1099
|
+
condition?: ConditionDef;
|
|
1100
|
+
// ---- Wave D engine-bridge flags (Lane 2 bake half; Wave J deletes id/name lists) ----
|
|
1101
|
+
// SPELL_AURA_SPELL_MAGNET (96): Grounding Totem redirects one harmful single-target spell.
|
|
1102
|
+
spellMagnet?: boolean;
|
|
1103
|
+
// mangos.spell_group_spell group Id (e.g. 10 = Hunter Aspects UNIQUE_PER_CASTER). Cite:
|
|
1104
|
+
// sql/updates/mangos/z2828_01_mangos_spell_groups.sql; character.ts isHunterAspectSpell.
|
|
1105
|
+
spellGroupId?: number;
|
|
1106
|
+
// Mutual-exclusion group for UNIQUE_PER_CASTER / EXCLUSIVE spell_group rules (Aspects, Mage
|
|
1107
|
+
// Armors). Same id as spellGroupId when Rule is 1 or 2. Cite: SpellGroupStackRule.
|
|
1108
|
+
exclusionGroup?: number;
|
|
1109
|
+
// A killing blow with this DoT active grants Soul Shard 6265 — DB-driven, any EffectItemType slot
|
|
1110
|
+
// equal to 6265 (Drain Soul ranks, Shadowburn). Cite: spell_template.EffectItemType*.
|
|
1111
|
+
grantsSoulShardOnKill?: boolean;
|
|
1112
|
+
// SpellEntry.EquippedItemClass — weapon (2) / armor (4), a cast gate plus proficiency. Absent when
|
|
1113
|
+
// −1 (any). Cite: Item.cpp:834–862; Player.cpp:18572–18628; ItemPrototype.h ITEM_CLASS_*.
|
|
1114
|
+
equippedItemClass?: number;
|
|
1115
|
+
// SpellEntry.EquippedItemSubClassMask — subclass bit mask (0/absent = any subclass). Only baked when
|
|
1116
|
+
// EquippedItemClass >= 0 and mask ≠ 0. Cite: Item.cpp:846–850; Player.cpp:18572–18628.
|
|
1117
|
+
equippedItemSubClassMask?: number;
|
|
1118
|
+
// SpellEntry.EquippedItemInventoryTypeMask — InventoryType bits (0/absent = any), applied only
|
|
1119
|
+
// when Targets includes TARGET_FLAG_ITEM. Cite: Item.cpp:856–860.
|
|
1120
|
+
equippedItemInventoryTypeMask?: number;
|
|
1121
|
+
// SPELL_ATTR_EX3_REQUIRES_MAIN_HAND_WEAPON (0x400) on 128 rows — THIS is the disarm gate, not
|
|
1122
|
+
// `equippedItemClass`. Cite: Player.cpp:18577-18582; Unit.h:1191-1204 CanUseEquippedWeapon.
|
|
1123
|
+
requiresMainHandWeapon?: boolean;
|
|
1124
|
+
// SpellEntry.Attributes raw first word. IS_ABILITY (0x10) + USES_RANGED_SLOT (0x2) exclude 356
|
|
1125
|
+
// player rows from the GCD haste branch. Absent when 0. Cite: Player.cpp:20080-20087 AddGCD.
|
|
1126
|
+
attributes?: number;
|
|
1127
|
+
// SpellEntry.StartRecoveryCategory — the GCD bucket `gcdMs` is stored under; 133 is the global one
|
|
1128
|
+
// and the only category the haste branch touches. Absent when 0. Cite: Object.cpp:2596-2603.
|
|
1129
|
+
gcdCategory?: number;
|
|
1130
|
+
// SpellEntry.speed — missile / charge travel speed. 0 → BASE_CHARGE_SPEED (27). Cite:
|
|
1131
|
+
// SpellEffects.cpp:5021 EffectCharge; Unit.h BASE_CHARGE_SPEED.
|
|
1132
|
+
speed?: number;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
// Baked `spell_proc_event` row (optional fields only when non-zero). Cite: SpellMgr.h SpellProcEventEntry;
|
|
1136
|
+
// SpellMgr.cpp LoadSpellProcEvents.
|
|
1137
|
+
export interface SpellProcEventDef {
|
|
1138
|
+
schoolMask?: number;
|
|
1139
|
+
spellFamilyName?: number;
|
|
1140
|
+
/** Per-effect family masks [0..2]; non-zero entries filter candidate spell family flags. */
|
|
1141
|
+
spellFamilyMask?: number[];
|
|
1142
|
+
procFlags?: number;
|
|
1143
|
+
procEx?: number;
|
|
1144
|
+
ppmRate?: number;
|
|
1145
|
+
/** Flat override chance (percent in DB CustomChance; engine may treat >1 as percent). */
|
|
1146
|
+
customChance?: number;
|
|
1147
|
+
/** Hidden CD on the triggered spell (ms). DB Cooldown column. */
|
|
1148
|
+
cooldownMs?: number;
|
|
1149
|
+
}
|