azeroth-shell 0.0.0-stage → 0.1.1
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 +35 -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 +144 -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,1055 @@
|
|
|
1
|
+
// Felwood ScriptDev IR ports. Source: scripts/kalimdor/felwood.cpp — npc_kitten, npc_corrupt_saber,
|
|
2
|
+
// npc_captured_arkonarin and npc_arei. Arei's schedule supersedes the bake EventAI kit on 9598.
|
|
3
|
+
|
|
4
|
+
import type { ScriptDevIR } from './types.ts';
|
|
5
|
+
|
|
6
|
+
// Shared faction / tempfaction / stand-state / AI event constants
|
|
7
|
+
|
|
8
|
+
/** FACTION_ESCORT_N_NEUTRAL_ACTIVE. Cite: ScriptDevAIMgr.h:50 = 250; felwood.cpp:229 Arkonarin */
|
|
9
|
+
export const FACTION_ESCORT_N_NEUTRAL_ACTIVE = 250;
|
|
10
|
+
|
|
11
|
+
/** FACTION_ESCORT_N_NEUTRAL_PASSIVE. Cite: ScriptDevAIMgr.h:46 = 113; felwood.cpp:412 Arei */
|
|
12
|
+
export const FACTION_ESCORT_N_NEUTRAL_PASSIVE = 113;
|
|
13
|
+
|
|
14
|
+
/** TEMPFACTION_RESTORE_RESPAWN. Cite: Creature.h:577 = 0x01; felwood.cpp:229,412 */
|
|
15
|
+
export const TEMPFACTION_RESTORE_RESPAWN = 0x01;
|
|
16
|
+
|
|
17
|
+
/** TEMPFACTION_TOGGLE_IMMUNE_TO_NPC. Cite: Creature.h:582 = 0x20; felwood.cpp:229 */
|
|
18
|
+
export const TEMPFACTION_TOGGLE_IMMUNE_TO_NPC = 0x20;
|
|
19
|
+
|
|
20
|
+
/** UNIT_STAND_STATE_STAND / KNEEL. Cite: Unit.h; felwood.cpp:192 kneel ctor, :228 stand escort start */
|
|
21
|
+
export const UNIT_STAND_STATE_STAND = 0;
|
|
22
|
+
export const UNIT_STAND_STATE_KNEEL = 8;
|
|
23
|
+
|
|
24
|
+
/** INTERACTION_DISTANCE. Cite: ObjectDefines.h:25 = 5.0f; felwood.cpp:85,141 */
|
|
25
|
+
export const INTERACTION_DISTANCE = 5;
|
|
26
|
+
|
|
27
|
+
/** AI_EVENT_START_ESCORT. Cite: AIDefines.h:43 = 100; felwood.cpp:226,408 */
|
|
28
|
+
export const AI_EVENT_START_ESCORT = 100;
|
|
29
|
+
|
|
30
|
+
// Constants — npc_kitten / npc_corrupt_saber
|
|
31
|
+
|
|
32
|
+
// felwood.cpp:45–53
|
|
33
|
+
/** Cite: felwood.cpp:45 EMOTE_SAB_JUMP = -1000541 */
|
|
34
|
+
export const EMOTE_SAB_JUMP = -1_000_541;
|
|
35
|
+
/** Cite: felwood.cpp:46 EMOTE_SAB_FOLLOW = -1000542 */
|
|
36
|
+
export const EMOTE_SAB_FOLLOW = -1_000_542;
|
|
37
|
+
|
|
38
|
+
/** Cite: felwood.cpp:48 SPELL_CORRUPT_SABER_VISUAL = 16510 */
|
|
39
|
+
export const SPELL_CORRUPT_SABER_VISUAL = 16510;
|
|
40
|
+
|
|
41
|
+
/** Cite: felwood.cpp:50 QUEST_CORRUPT_SABER = 4506 */
|
|
42
|
+
export const QUEST_CORRUPT_SABER = 4506;
|
|
43
|
+
/** Cite: felwood.cpp:51 NPC_WINNA = 9996 */
|
|
44
|
+
export const NPC_WINNA = 9996;
|
|
45
|
+
/** Cite: felwood.cpp:52 NPC_CORRUPT_SABER = 10042 */
|
|
46
|
+
export const NPC_CORRUPT_SABER = 10042;
|
|
47
|
+
|
|
48
|
+
/** DB binding. Cite: scriptdev-corpus.json entry 9937 Common Kitten */
|
|
49
|
+
export const NPC_COMMON_KITTEN = 9937;
|
|
50
|
+
|
|
51
|
+
/** Moonwell visual arm after follow starts (paused). Cite: felwood.cpp:72 m_uiMoonwellCooldown = 7500 */
|
|
52
|
+
export const KITTEN_MOONWELL_COOLDOWN_MS = 7500;
|
|
53
|
+
|
|
54
|
+
/** Gossip release menu item (literal). Cite: felwood.cpp:55 GOSSIP_ITEM_RELEASE */
|
|
55
|
+
export const GOSSIP_ITEM_RELEASE_CORRUPT_SABER =
|
|
56
|
+
'I want to release the corrupted saber to Winna.';
|
|
57
|
+
|
|
58
|
+
// Constants — npc_captured_arkonarin
|
|
59
|
+
|
|
60
|
+
// felwood.cpp:170–182
|
|
61
|
+
/** Cite: felwood.cpp:170 SAY_ESCORT_START = 6433 */
|
|
62
|
+
export const SAY_ARKONARIN_ESCORT_START = 6433;
|
|
63
|
+
|
|
64
|
+
/** Cite: felwood.cpp:172 SPELL_MORTAL_STRIKE = 16856 */
|
|
65
|
+
export const SPELL_MORTAL_STRIKE = 16856;
|
|
66
|
+
/** Cite: felwood.cpp:173 SPELL_CLEAVE = 15496 */
|
|
67
|
+
export const SPELL_CLEAVE = 15496;
|
|
68
|
+
|
|
69
|
+
/** Cite: felwood.cpp:175 QUEST_ID_RESCUE_JAEDENAR = 5203 */
|
|
70
|
+
export const QUEST_ID_RESCUE_JAEDENAR = 5203;
|
|
71
|
+
/** Cite: felwood.cpp:176 NPC_JAEDENAR_LEGIONNAIRE = 9862 */
|
|
72
|
+
export const NPC_JAEDENAR_LEGIONNAIRE = 9862;
|
|
73
|
+
/** Cite: felwood.cpp:177 NPC_SPIRT_TREY = 11141 */
|
|
74
|
+
export const NPC_SPIRT_TREY = 11141;
|
|
75
|
+
/** Cite: felwood.cpp:178 GO_ARKONARIN_CAGE = 176306 */
|
|
76
|
+
export const GO_ARKONARIN_CAGE = 176306;
|
|
77
|
+
|
|
78
|
+
/** Cite: felwood.cpp:181 PATH_ID = 11016 */
|
|
79
|
+
export const ARKONARIN_ESCORT_PATH = 11016;
|
|
80
|
+
|
|
81
|
+
/** DB binding. Cite: scriptdev-corpus.json entry 11016 */
|
|
82
|
+
export const NPC_CAPTURED_ARKONARIN = 11016;
|
|
83
|
+
|
|
84
|
+
/** RND Aggro Texts. Cite: felwood.cpp:186 aRandomAggro[] = { 6801, 6802, 6803 } */
|
|
85
|
+
export const ARKONARIN_AGGRO_TEXTS = [6801, 6802, 6803] as const;
|
|
86
|
+
|
|
87
|
+
/** Aggro yell chance percent. Cite: felwood.cpp:214 roll_chance_i(80) */
|
|
88
|
+
export const ARKONARIN_AGGRO_YELL_CHANCE_PCT = 80;
|
|
89
|
+
|
|
90
|
+
// Mortal Strike timer. Reset urand(5000,7000); CAST_OK re-arm urand(7000,10000). Cite:
|
|
91
|
+
// felwood.cpp:208,274-277
|
|
92
|
+
export const ARKONARIN_MORTAL_STRIKE_INIT_MIN_MS = 5000;
|
|
93
|
+
export const ARKONARIN_MORTAL_STRIKE_INIT_MAX_MS = 7000;
|
|
94
|
+
export const ARKONARIN_MORTAL_STRIKE_REPEAT_MIN_MS = 7000;
|
|
95
|
+
export const ARKONARIN_MORTAL_STRIKE_REPEAT_MAX_MS = 10_000;
|
|
96
|
+
|
|
97
|
+
/** Cleave timer. Reset urand(1000,4000); CAST_OK re-arm urand(3000,6000). Cite: felwood.cpp:209,282-285 */
|
|
98
|
+
export const ARKONARIN_CLEAVE_INIT_MIN_MS = 1000;
|
|
99
|
+
export const ARKONARIN_CLEAVE_INIT_MAX_MS = 4000;
|
|
100
|
+
export const ARKONARIN_CLEAVE_REPEAT_MIN_MS = 3000;
|
|
101
|
+
export const ARKONARIN_CLEAVE_REPEAT_MAX_MS = 6000;
|
|
102
|
+
|
|
103
|
+
/** Cage search radius on escort start. Cite: felwood.cpp:232 GetClosestGameObjectWithEntry(..., 5.0f) */
|
|
104
|
+
export const ARKONARIN_CAGE_SEARCH_YD = 5;
|
|
105
|
+
|
|
106
|
+
// QuestAccept temp faction flags. Cite: felwood.cpp:229 TEMPFACTION_RESTORE_RESPAWN +
|
|
107
|
+
// TEMPFACTION_TOGGLE_IMMUNE_TO_NPC
|
|
108
|
+
export const ARKONARIN_TEMP_FACTION_FLAGS =
|
|
109
|
+
TEMPFACTION_RESTORE_RESPAWN | TEMPFACTION_TOGGLE_IMMUNE_TO_NPC;
|
|
110
|
+
|
|
111
|
+
// Constants — npc_arei
|
|
112
|
+
|
|
113
|
+
// felwood.cpp:314–332
|
|
114
|
+
/** Cite: felwood.cpp:314 SAY_AREI_ESCORT_START = -1001159 */
|
|
115
|
+
export const SAY_AREI_ESCORT_START = -1_001_159;
|
|
116
|
+
/** Cite: felwood.cpp:315 SAY_ATTACK_IRONTREE = -1001160 */
|
|
117
|
+
export const SAY_ATTACK_IRONTREE = -1_001_160;
|
|
118
|
+
/** Cite: felwood.cpp:316 SAY_ATTACK_TOXIC_HORROR = -1001161 */
|
|
119
|
+
export const SAY_ATTACK_TOXIC_HORROR = -1_001_161;
|
|
120
|
+
/** Cite: felwood.cpp:317 SAY_EXIT_WOODS = -1001162 */
|
|
121
|
+
export const SAY_EXIT_WOODS = -1_001_162;
|
|
122
|
+
/** Cite: felwood.cpp:318 SAY_CLEAR_PATH = -1001163 */
|
|
123
|
+
export const SAY_CLEAR_PATH = -1_001_163;
|
|
124
|
+
/** Cite: felwood.cpp:319 SAY_ASHENVALE = -1001164 */
|
|
125
|
+
export const SAY_ASHENVALE = -1_001_164;
|
|
126
|
+
/** Cite: felwood.cpp:320 SAY_TRANSFORM = -1001165 */
|
|
127
|
+
export const SAY_TRANSFORM = -1_001_165;
|
|
128
|
+
/** Cite: felwood.cpp:321 SAY_LIFT_CURSE = -1001166 */
|
|
129
|
+
export const SAY_LIFT_CURSE = -1_001_166;
|
|
130
|
+
/** Cite: felwood.cpp:322 SAY_AREI_ESCORT_COMPLETE = -1001167 */
|
|
131
|
+
export const SAY_AREI_ESCORT_COMPLETE = -1_001_167;
|
|
132
|
+
|
|
133
|
+
/** Cite: felwood.cpp:324 SPELL_WITHER_STRIKE = 5337 */
|
|
134
|
+
export const SPELL_WITHER_STRIKE = 5337;
|
|
135
|
+
/** Cite: felwood.cpp:325 SPELL_AREI_TRANSFORM = 14888 */
|
|
136
|
+
export const SPELL_AREI_TRANSFORM = 14888;
|
|
137
|
+
|
|
138
|
+
/** Cite: felwood.cpp:327 NPC_AREI = 9598 */
|
|
139
|
+
export const NPC_AREI = 9598;
|
|
140
|
+
/** Cite: felwood.cpp:328 NPC_TOXIC_HORROR = 7132 */
|
|
141
|
+
export const NPC_TOXIC_HORROR = 7132;
|
|
142
|
+
/** Cite: felwood.cpp:329 NPC_IRONTREE_WANDERER = 7138 */
|
|
143
|
+
export const NPC_IRONTREE_WANDERER = 7138;
|
|
144
|
+
/** Cite: felwood.cpp:330 NPC_IRONTREE_STOMPER = 7139 */
|
|
145
|
+
export const NPC_IRONTREE_STOMPER = 7139;
|
|
146
|
+
/** Cite: felwood.cpp:331 QUEST_ID_ANCIENT_SPIRIT = 4261 */
|
|
147
|
+
export const QUEST_ID_ANCIENT_SPIRIT = 4261;
|
|
148
|
+
|
|
149
|
+
// Wither Strike timer. Reset urand(1000,4000); CAST_OK re-arm urand(3000,6000). Cite:
|
|
150
|
+
// felwood.cpp:363,468-471
|
|
151
|
+
export const AREI_WITHER_STRIKE_INIT_MIN_MS = 1000;
|
|
152
|
+
export const AREI_WITHER_STRIKE_INIT_MAX_MS = 4000;
|
|
153
|
+
export const AREI_WITHER_STRIKE_REPEAT_MIN_MS = 3000;
|
|
154
|
+
export const AREI_WITHER_STRIKE_REPEAT_MAX_MS = 6000;
|
|
155
|
+
|
|
156
|
+
/** Ambush TEMPSPAWN_TIMED_OOC_OR_DEAD_DESPAWN. Cite: felwood.cpp:423-425 60000 */
|
|
157
|
+
export const AREI_AMBUSH_DESPAWN_MS = 60_000;
|
|
158
|
+
|
|
159
|
+
/** ForcedDespawn after explore credit. Cite: felwood.cpp:455 ForcedDespawn(10000) */
|
|
160
|
+
export const AREI_COMPLETE_DESPAWN_MS = 10_000;
|
|
161
|
+
|
|
162
|
+
/** WP37 Irontree ambush summons (Stomper + 2× Wanderer). Cite: felwood.cpp:423-425 */
|
|
163
|
+
export const AREI_WP37_SPAWNS = [
|
|
164
|
+
{
|
|
165
|
+
entry: NPC_IRONTREE_STOMPER,
|
|
166
|
+
x: 6573.321,
|
|
167
|
+
y: -1195.213,
|
|
168
|
+
z: 442.489,
|
|
169
|
+
o: 0,
|
|
170
|
+
cite: 'felwood.cpp:423 NPC_IRONTREE_STOMPER',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
entry: NPC_IRONTREE_WANDERER,
|
|
174
|
+
x: 6573.24,
|
|
175
|
+
y: -1213.475,
|
|
176
|
+
z: 443.643,
|
|
177
|
+
o: 0,
|
|
178
|
+
cite: 'felwood.cpp:424 NPC_IRONTREE_WANDERER',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
entry: NPC_IRONTREE_WANDERER,
|
|
182
|
+
x: 6583.354,
|
|
183
|
+
y: -1209.811,
|
|
184
|
+
z: 444.769,
|
|
185
|
+
o: 0,
|
|
186
|
+
cite: 'felwood.cpp:425 NPC_IRONTREE_WANDERER',
|
|
187
|
+
},
|
|
188
|
+
] as const;
|
|
189
|
+
|
|
190
|
+
// Epilog dialogue steps after ambush clear. Cite: felwood.cpp:334–342 aEpilogDialogue Delays are between
|
|
191
|
+
// steps (DialogueHelper): text/spell entry, speaker, delayMs.
|
|
192
|
+
export const AREI_EPILOG_DIALOGUE = [
|
|
193
|
+
{ entry: SAY_CLEAR_PATH, speaker: NPC_AREI, delayMs: 4000, cite: 'felwood.cpp:336' },
|
|
194
|
+
{
|
|
195
|
+
entry: SPELL_WITHER_STRIKE,
|
|
196
|
+
speaker: 0,
|
|
197
|
+
delayMs: 5000,
|
|
198
|
+
cite: 'felwood.cpp:337 (step marker → SAY_ASHENVALE in JustDidDialogueStep)',
|
|
199
|
+
},
|
|
200
|
+
{ entry: SAY_TRANSFORM, speaker: NPC_AREI, delayMs: 3000, cite: 'felwood.cpp:338' },
|
|
201
|
+
{
|
|
202
|
+
entry: SPELL_AREI_TRANSFORM,
|
|
203
|
+
speaker: 0,
|
|
204
|
+
delayMs: 7000,
|
|
205
|
+
cite: 'felwood.cpp:339 (cast transform + SAY_LIFT_CURSE)',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
entry: QUEST_ID_ANCIENT_SPIRIT,
|
|
209
|
+
speaker: 0,
|
|
210
|
+
delayMs: 0,
|
|
211
|
+
cite: 'felwood.cpp:340 (complete + explore credit + despawn 10s)',
|
|
212
|
+
},
|
|
213
|
+
] as const;
|
|
214
|
+
|
|
215
|
+
// Pure helpers — npc_kitten / npc_corrupt_saber
|
|
216
|
+
|
|
217
|
+
export interface KittenCtorResult {
|
|
218
|
+
startFollow: boolean;
|
|
219
|
+
followPaused: boolean;
|
|
220
|
+
textId: number | null;
|
|
221
|
+
setSpawningFlag: boolean;
|
|
222
|
+
moonwellCooldownMs: number;
|
|
223
|
+
cite: string;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** Port of npc_kittenAI ctor branch when owner is player. Cite: felwood.cpp:61–73 */
|
|
227
|
+
export function kittenCtor(hasPlayerOwner: boolean): KittenCtorResult {
|
|
228
|
+
if (!hasPlayerOwner) {
|
|
229
|
+
return {
|
|
230
|
+
startFollow: false,
|
|
231
|
+
followPaused: false,
|
|
232
|
+
textId: null,
|
|
233
|
+
setSpawningFlag: false,
|
|
234
|
+
moonwellCooldownMs: KITTEN_MOONWELL_COOLDOWN_MS,
|
|
235
|
+
cite: 'felwood.cpp:61 no player owner → skip follow arm; still m_uiMoonwellCooldown=7500',
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
startFollow: true,
|
|
240
|
+
followPaused: true,
|
|
241
|
+
textId: EMOTE_SAB_JUMP,
|
|
242
|
+
setSpawningFlag: true,
|
|
243
|
+
moonwellCooldownMs: KITTEN_MOONWELL_COOLDOWN_MS,
|
|
244
|
+
cite:
|
|
245
|
+
'felwood.cpp:63-72 StartFollow + SetFollowPaused + EMOTE_SAB_JUMP + SPAWNING + moonwell 7500',
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export interface KittenMoonwellTickResult {
|
|
250
|
+
castVisual: boolean;
|
|
251
|
+
unpauseFollow: boolean;
|
|
252
|
+
remainingMs: number;
|
|
253
|
+
cite: string;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Port of the OOC moonwell branch in UpdateFollowerAI.
|
|
257
|
+
// Cite: felwood.cpp:92–103.
|
|
258
|
+
export function kittenMoonwellTick(
|
|
259
|
+
followPaused: boolean,
|
|
260
|
+
cooldownMs: number,
|
|
261
|
+
diffMs: number,
|
|
262
|
+
hasVictim: boolean,
|
|
263
|
+
): KittenMoonwellTickResult {
|
|
264
|
+
if (hasVictim) {
|
|
265
|
+
return {
|
|
266
|
+
castVisual: false,
|
|
267
|
+
unpauseFollow: false,
|
|
268
|
+
remainingMs: cooldownMs,
|
|
269
|
+
cite: 'felwood.cpp:92-106 has victim → melee path, no moonwell',
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (!followPaused) {
|
|
273
|
+
return {
|
|
274
|
+
castVisual: false,
|
|
275
|
+
unpauseFollow: false,
|
|
276
|
+
remainingMs: cooldownMs,
|
|
277
|
+
cite: 'felwood.cpp:94 !STATE_FOLLOW_PAUSED → no moonwell',
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// cpp: if (m_uiMoonwellCooldown < uiDiff) cast; else subtract
|
|
281
|
+
if (cooldownMs < diffMs) {
|
|
282
|
+
return {
|
|
283
|
+
castVisual: true,
|
|
284
|
+
unpauseFollow: true,
|
|
285
|
+
remainingMs: 0,
|
|
286
|
+
cite:
|
|
287
|
+
'felwood.cpp:96-99 cast SPELL_CORRUPT_SABER_VISUAL 16510 + SetFollowPaused(false)',
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
castVisual: false,
|
|
292
|
+
unpauseFollow: false,
|
|
293
|
+
remainingMs: cooldownMs - diffMs,
|
|
294
|
+
cite: 'felwood.cpp:102 m_uiMoonwellCooldown -= uiDiff',
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export interface CorruptedSaberVisualResult {
|
|
299
|
+
updateEntry: number;
|
|
300
|
+
emoteFollow: number;
|
|
301
|
+
cite: string;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/** Port of CorruptedSaberVisual::OnEffectExecute morph. Cite: felwood.cpp:118–134 */
|
|
305
|
+
export function corruptedSaberVisualOnEffect(): CorruptedSaberVisualResult {
|
|
306
|
+
return {
|
|
307
|
+
updateEntry: NPC_CORRUPT_SABER,
|
|
308
|
+
emoteFollow: EMOTE_SAB_FOLLOW,
|
|
309
|
+
cite:
|
|
310
|
+
'felwood.cpp:124-133 SetEntry/Display/Name/Scale NPC_CORRUPT_SABER 10042 + EMOTE_SAB_FOLLOW to owner',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export interface KittenWinnaLosResult {
|
|
315
|
+
setGossipFlag: boolean;
|
|
316
|
+
cite: string;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/** Port of MoveInLineOfSight Winna gossip arm. Cite: felwood.cpp:80–87 */
|
|
320
|
+
export function kittenWinnaMoveInLos(
|
|
321
|
+
hasVictim: boolean,
|
|
322
|
+
hasGossipFlag: boolean,
|
|
323
|
+
followInProgress: boolean,
|
|
324
|
+
whoEntry: number,
|
|
325
|
+
distYd: number,
|
|
326
|
+
): KittenWinnaLosResult {
|
|
327
|
+
if (
|
|
328
|
+
!hasVictim
|
|
329
|
+
&& !hasGossipFlag
|
|
330
|
+
&& followInProgress
|
|
331
|
+
&& (whoEntry | 0) === NPC_WINNA
|
|
332
|
+
&& distYd <= INTERACTION_DISTANCE
|
|
333
|
+
) {
|
|
334
|
+
return {
|
|
335
|
+
setGossipFlag: true,
|
|
336
|
+
cite: 'felwood.cpp:83-86 Winna within INTERACTION_DISTANCE → UNIT_NPC_FLAG_GOSSIP',
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
setGossipFlag: false,
|
|
341
|
+
cite: 'felwood.cpp:83 gates fail → no gossip flag',
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
export interface CorruptSaberGossipHelloResult {
|
|
346
|
+
showRelease: boolean;
|
|
347
|
+
cite: string;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** Port of GossipHello_npc_corrupt_saber release branch. Cite: felwood.cpp:137–146 */
|
|
351
|
+
export function corruptSaberGossipHello(
|
|
352
|
+
questIncomplete4506: boolean,
|
|
353
|
+
winnaWithinInteraction: boolean,
|
|
354
|
+
): CorruptSaberGossipHelloResult {
|
|
355
|
+
if (questIncomplete4506 && winnaWithinInteraction) {
|
|
356
|
+
return {
|
|
357
|
+
showRelease: true,
|
|
358
|
+
cite:
|
|
359
|
+
'felwood.cpp:139-142 QUEST_CORRUPT_SABER incomplete + Winna ≤INTERACTION_DISTANCE → release item',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
showRelease: false,
|
|
364
|
+
cite: 'felwood.cpp:139-145 default gossip only',
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
export interface CorruptSaberGossipSelectResult {
|
|
369
|
+
handled: boolean;
|
|
370
|
+
followComplete: boolean;
|
|
371
|
+
exploreQuestId: number | null;
|
|
372
|
+
cite: string;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Port of GossipSelect_npc_corrupt_saber.
|
|
376
|
+
// Cite: felwood.cpp:149–161.
|
|
377
|
+
export function corruptSaberGossipSelect(
|
|
378
|
+
isReleaseAction: boolean,
|
|
379
|
+
): CorruptSaberGossipSelectResult {
|
|
380
|
+
if (!isReleaseAction) {
|
|
381
|
+
return {
|
|
382
|
+
handled: false,
|
|
383
|
+
followComplete: false,
|
|
384
|
+
exploreQuestId: null,
|
|
385
|
+
cite: 'felwood.cpp:151 action != GOSSIP_ACTION_INFO_DEF+1 → no-op',
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
handled: true,
|
|
390
|
+
followComplete: true,
|
|
391
|
+
exploreQuestId: QUEST_CORRUPT_SABER,
|
|
392
|
+
cite:
|
|
393
|
+
'felwood.cpp:153-158 CLOSE + SetFollowComplete + AreaExploredOrEventHappens(4506)',
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Pure helpers — npc_captured_arkonarin
|
|
398
|
+
|
|
399
|
+
export interface ArkonarinQuestAcceptResult {
|
|
400
|
+
handled: boolean;
|
|
401
|
+
standState: number;
|
|
402
|
+
factionId: number;
|
|
403
|
+
factionFlags: number;
|
|
404
|
+
pathId: number;
|
|
405
|
+
openCageEntry: number;
|
|
406
|
+
cageSearchYd: number;
|
|
407
|
+
eventType: number;
|
|
408
|
+
questId: number;
|
|
409
|
+
cite: string;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/** Port of QuestAccept + ReceiveAIEvent START_ESCORT for Arkonarin. Cite: felwood.cpp:224–234,300–305 */
|
|
413
|
+
export function arkonarinQuestAccept(questId: number): ArkonarinQuestAcceptResult {
|
|
414
|
+
if ((questId | 0) !== QUEST_ID_RESCUE_JAEDENAR) {
|
|
415
|
+
return {
|
|
416
|
+
handled: false,
|
|
417
|
+
standState: UNIT_STAND_STATE_KNEEL,
|
|
418
|
+
factionId: 0,
|
|
419
|
+
factionFlags: 0,
|
|
420
|
+
pathId: 0,
|
|
421
|
+
openCageEntry: 0,
|
|
422
|
+
cageSearchYd: 0,
|
|
423
|
+
eventType: 0,
|
|
424
|
+
questId: 0,
|
|
425
|
+
cite: 'felwood.cpp:302 quest != 5203 → no-op',
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
return {
|
|
429
|
+
handled: true,
|
|
430
|
+
standState: UNIT_STAND_STATE_STAND,
|
|
431
|
+
factionId: FACTION_ESCORT_N_NEUTRAL_ACTIVE,
|
|
432
|
+
factionFlags: ARKONARIN_TEMP_FACTION_FLAGS,
|
|
433
|
+
pathId: ARKONARIN_ESCORT_PATH,
|
|
434
|
+
openCageEntry: GO_ARKONARIN_CAGE,
|
|
435
|
+
cageSearchYd: ARKONARIN_CAGE_SEARCH_YD,
|
|
436
|
+
eventType: AI_EVENT_START_ESCORT,
|
|
437
|
+
questId: QUEST_ID_RESCUE_JAEDENAR,
|
|
438
|
+
cite:
|
|
439
|
+
'felwood.cpp:228-233 STAND + faction 250 flags 0x21 + Start path 11016 + open GO 176306 ≤5yd',
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export interface ArkonarinResetResult {
|
|
444
|
+
/** After Reset: false when !escorting, else prior value. */
|
|
445
|
+
canAttack: boolean;
|
|
446
|
+
mortalStrikeTimerMinMs: number;
|
|
447
|
+
mortalStrikeTimerMaxMs: number;
|
|
448
|
+
cleaveTimerMinMs: number;
|
|
449
|
+
cleaveTimerMaxMs: number;
|
|
450
|
+
cite: string;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Port of Reset() timer arms; canAttack is only cleared when not escorting.
|
|
454
|
+
// Cite: felwood.cpp:203–209.
|
|
455
|
+
export function arkonarinReset(
|
|
456
|
+
escorting: boolean,
|
|
457
|
+
priorCanAttack = false,
|
|
458
|
+
): ArkonarinResetResult {
|
|
459
|
+
return {
|
|
460
|
+
canAttack: escorting ? priorCanAttack : false,
|
|
461
|
+
mortalStrikeTimerMinMs: ARKONARIN_MORTAL_STRIKE_INIT_MIN_MS,
|
|
462
|
+
mortalStrikeTimerMaxMs: ARKONARIN_MORTAL_STRIKE_INIT_MAX_MS,
|
|
463
|
+
cleaveTimerMinMs: ARKONARIN_CLEAVE_INIT_MIN_MS,
|
|
464
|
+
cleaveTimerMaxMs: ARKONARIN_CLEAVE_INIT_MAX_MS,
|
|
465
|
+
cite: escorting
|
|
466
|
+
? 'felwood.cpp:205-209 escorting → keep m_bCanAttack; re-arm timers 5-7s / 1-4s'
|
|
467
|
+
: 'felwood.cpp:205-209 !escorting → m_bCanAttack=false; timers 5-7s / 1-4s',
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export interface ArkonarinAggroResult {
|
|
472
|
+
textId: number | null;
|
|
473
|
+
cite: string;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Port of the Aggro random yell, 80% of aRandomAggro.
|
|
477
|
+
// Cite: felwood.cpp:212–216.
|
|
478
|
+
export function arkonarinAggro(roll01Lt80: boolean, textIdx: number): ArkonarinAggroResult {
|
|
479
|
+
if (!roll01Lt80) {
|
|
480
|
+
return {
|
|
481
|
+
textId: null,
|
|
482
|
+
cite: 'felwood.cpp:214 roll_chance_i(80) fail → no yell',
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
const idx = ((textIdx | 0) % 3 + 3) % 3;
|
|
486
|
+
return {
|
|
487
|
+
textId: ARKONARIN_AGGRO_TEXTS[idx]!,
|
|
488
|
+
cite: 'felwood.cpp:215 DoBroadcastText(aRandomAggro[urand(0,2)])',
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
export interface ArkonarinWaypointResult {
|
|
493
|
+
handled: boolean;
|
|
494
|
+
textId: number | null;
|
|
495
|
+
canAttack: boolean | null;
|
|
496
|
+
pauseEscort: boolean;
|
|
497
|
+
exploreQuestId: number | null;
|
|
498
|
+
setImmuneToNpc: boolean;
|
|
499
|
+
questEnd: boolean;
|
|
500
|
+
cite: string;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/** Port of WaypointReached for Arkonarin. Cite: felwood.cpp:237–264 */
|
|
504
|
+
export function arkonarinWaypointReached(pointId: number): ArkonarinWaypointResult {
|
|
505
|
+
switch (pointId | 0) {
|
|
506
|
+
case 1:
|
|
507
|
+
return {
|
|
508
|
+
handled: true,
|
|
509
|
+
textId: SAY_ARKONARIN_ESCORT_START,
|
|
510
|
+
canAttack: null,
|
|
511
|
+
pauseEscort: false,
|
|
512
|
+
exploreQuestId: null,
|
|
513
|
+
setImmuneToNpc: false,
|
|
514
|
+
questEnd: false,
|
|
515
|
+
cite: 'felwood.cpp:241-246 WP1 SAY_ESCORT_START 6433 + talk emote',
|
|
516
|
+
};
|
|
517
|
+
case 37:
|
|
518
|
+
return {
|
|
519
|
+
handled: true,
|
|
520
|
+
textId: null,
|
|
521
|
+
canAttack: true,
|
|
522
|
+
pauseEscort: false,
|
|
523
|
+
exploreQuestId: null,
|
|
524
|
+
setImmuneToNpc: false,
|
|
525
|
+
questEnd: false,
|
|
526
|
+
cite: 'felwood.cpp:248-250 WP37 m_bCanAttack=true',
|
|
527
|
+
};
|
|
528
|
+
case 83:
|
|
529
|
+
return {
|
|
530
|
+
handled: true,
|
|
531
|
+
textId: null,
|
|
532
|
+
canAttack: null,
|
|
533
|
+
pauseEscort: true,
|
|
534
|
+
exploreQuestId: null,
|
|
535
|
+
setImmuneToNpc: false,
|
|
536
|
+
questEnd: false,
|
|
537
|
+
cite: 'felwood.cpp:251-253 WP83 SetEscortPaused(true) - Spirit Trey ambush',
|
|
538
|
+
};
|
|
539
|
+
case 85:
|
|
540
|
+
return {
|
|
541
|
+
handled: true,
|
|
542
|
+
textId: null,
|
|
543
|
+
canAttack: null,
|
|
544
|
+
pauseEscort: false,
|
|
545
|
+
exploreQuestId: QUEST_ID_RESCUE_JAEDENAR,
|
|
546
|
+
setImmuneToNpc: true,
|
|
547
|
+
questEnd: true,
|
|
548
|
+
cite:
|
|
549
|
+
'felwood.cpp:254-262 WP85 explore 5203 + UNIT_FLAG_IMMUNE_TO_NPC + QuestEnd',
|
|
550
|
+
};
|
|
551
|
+
default:
|
|
552
|
+
return {
|
|
553
|
+
handled: false,
|
|
554
|
+
textId: null,
|
|
555
|
+
canAttack: null,
|
|
556
|
+
pauseEscort: false,
|
|
557
|
+
exploreQuestId: null,
|
|
558
|
+
setImmuneToNpc: false,
|
|
559
|
+
questEnd: false,
|
|
560
|
+
cite: 'felwood.cpp:237 unknown WP → no-op',
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
export interface ArkonarinSummonedDiedResult {
|
|
566
|
+
resumeEscort: boolean;
|
|
567
|
+
cite: string;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/** Port of SummonedCreatureJustDied Spirit Trey branch. Cite: felwood.cpp:218–221 */
|
|
571
|
+
export function arkonarinSummonedCreatureJustDied(
|
|
572
|
+
summonedEntry: number,
|
|
573
|
+
): ArkonarinSummonedDiedResult {
|
|
574
|
+
if ((summonedEntry | 0) === NPC_SPIRT_TREY) {
|
|
575
|
+
return {
|
|
576
|
+
resumeEscort: true,
|
|
577
|
+
cite: 'felwood.cpp:220-221 NPC_SPIRT_TREY death → SetEscortPaused(false)',
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
return {
|
|
581
|
+
resumeEscort: false,
|
|
582
|
+
cite: 'felwood.cpp:220 entry != 11141 → no-op',
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// Pure helpers — npc_arei
|
|
587
|
+
|
|
588
|
+
export interface AreiQuestAcceptResult {
|
|
589
|
+
handled: boolean;
|
|
590
|
+
textId: number | null;
|
|
591
|
+
factionId: number;
|
|
592
|
+
factionFlags: number;
|
|
593
|
+
eventType: number;
|
|
594
|
+
questId: number;
|
|
595
|
+
cite: string;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/** Port of QuestAccept + ReceiveAIEvent START_ESCORT for Arei. Cite: felwood.cpp:406–414,485–490 */
|
|
599
|
+
export function areiQuestAccept(questId: number): AreiQuestAcceptResult {
|
|
600
|
+
if ((questId | 0) !== QUEST_ID_ANCIENT_SPIRIT) {
|
|
601
|
+
return {
|
|
602
|
+
handled: false,
|
|
603
|
+
textId: null,
|
|
604
|
+
factionId: 0,
|
|
605
|
+
factionFlags: 0,
|
|
606
|
+
eventType: 0,
|
|
607
|
+
questId: 0,
|
|
608
|
+
cite: 'felwood.cpp:487 quest != 4261 → no-op',
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
return {
|
|
612
|
+
handled: true,
|
|
613
|
+
textId: SAY_AREI_ESCORT_START,
|
|
614
|
+
factionId: FACTION_ESCORT_N_NEUTRAL_PASSIVE,
|
|
615
|
+
factionFlags: TEMPFACTION_RESTORE_RESPAWN,
|
|
616
|
+
eventType: AI_EVENT_START_ESCORT,
|
|
617
|
+
questId: QUEST_ID_ANCIENT_SPIRIT,
|
|
618
|
+
cite:
|
|
619
|
+
'felwood.cpp:410-413 SAY_AREI_ESCORT_START + faction 113 RESTORE_RESPAWN + Start',
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
export interface AreiResetResult {
|
|
624
|
+
witherStrikeTimerMinMs: number;
|
|
625
|
+
witherStrikeTimerMaxMs: number;
|
|
626
|
+
cite: string;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/** Port of Reset wither timer. Cite: felwood.cpp:361–364 */
|
|
630
|
+
export function areiReset(): AreiResetResult {
|
|
631
|
+
return {
|
|
632
|
+
witherStrikeTimerMinMs: AREI_WITHER_STRIKE_INIT_MIN_MS,
|
|
633
|
+
witherStrikeTimerMaxMs: AREI_WITHER_STRIKE_INIT_MAX_MS,
|
|
634
|
+
cite: 'felwood.cpp:363 m_uiWitherStrikeTimer = urand(1000, 4000)',
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
export interface AreiAggroResult {
|
|
639
|
+
textId: number | null;
|
|
640
|
+
setAggroIrontree: boolean;
|
|
641
|
+
setAggroHorror: boolean;
|
|
642
|
+
cite: string;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/** Port of Aggro special yells (once each family). Cite: felwood.cpp:366–378 */
|
|
646
|
+
export function areiAggro(
|
|
647
|
+
whoEntry: number,
|
|
648
|
+
alreadyAggroIrontree: boolean,
|
|
649
|
+
alreadyAggroHorror: boolean,
|
|
650
|
+
): AreiAggroResult {
|
|
651
|
+
const e = whoEntry | 0;
|
|
652
|
+
if (
|
|
653
|
+
(e === NPC_IRONTREE_WANDERER || e === NPC_IRONTREE_STOMPER)
|
|
654
|
+
&& !alreadyAggroIrontree
|
|
655
|
+
) {
|
|
656
|
+
return {
|
|
657
|
+
textId: SAY_ATTACK_IRONTREE,
|
|
658
|
+
setAggroIrontree: true,
|
|
659
|
+
setAggroHorror: false,
|
|
660
|
+
cite: 'felwood.cpp:368-371 first Irontree → SAY_ATTACK_IRONTREE',
|
|
661
|
+
};
|
|
662
|
+
}
|
|
663
|
+
if (e === NPC_TOXIC_HORROR && !alreadyAggroHorror) {
|
|
664
|
+
return {
|
|
665
|
+
textId: SAY_ATTACK_TOXIC_HORROR,
|
|
666
|
+
setAggroIrontree: false,
|
|
667
|
+
setAggroHorror: true,
|
|
668
|
+
cite: 'felwood.cpp:373-377 first Toxic Horror → SAY_ATTACK_TOXIC_HORROR',
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
return {
|
|
672
|
+
textId: null,
|
|
673
|
+
setAggroIrontree: false,
|
|
674
|
+
setAggroHorror: false,
|
|
675
|
+
cite: 'felwood.cpp:366-378 no special yell',
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
export interface AreiWaypointResult {
|
|
680
|
+
handled: boolean;
|
|
681
|
+
pauseEscort: boolean;
|
|
682
|
+
summons: ReadonlyArray<{
|
|
683
|
+
creatureEntry: number;
|
|
684
|
+
x: number;
|
|
685
|
+
y: number;
|
|
686
|
+
z: number;
|
|
687
|
+
o: number;
|
|
688
|
+
despawnMs: number;
|
|
689
|
+
}>;
|
|
690
|
+
cite: string;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
/** Port of WaypointReached WP37 ambush. Cite: felwood.cpp:417–426 */
|
|
694
|
+
export function areiWaypointReached(pointId: number): AreiWaypointResult {
|
|
695
|
+
if ((pointId | 0) !== 37) {
|
|
696
|
+
return {
|
|
697
|
+
handled: false,
|
|
698
|
+
pauseEscort: false,
|
|
699
|
+
summons: [],
|
|
700
|
+
cite: 'felwood.cpp:419 uiPointId != 37 → no-op',
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
return {
|
|
704
|
+
handled: true,
|
|
705
|
+
pauseEscort: true,
|
|
706
|
+
summons: AREI_WP37_SPAWNS.map((s) => ({
|
|
707
|
+
creatureEntry: s.entry,
|
|
708
|
+
x: s.x,
|
|
709
|
+
y: s.y,
|
|
710
|
+
z: s.z,
|
|
711
|
+
o: s.o,
|
|
712
|
+
despawnMs: AREI_AMBUSH_DESPAWN_MS,
|
|
713
|
+
})),
|
|
714
|
+
cite:
|
|
715
|
+
'felwood.cpp:421-425 WP37 pause + summon Stomper 7139 + 2× Wanderer 7138 despawn 60s',
|
|
716
|
+
};
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
export interface AreiJustSummonedResult {
|
|
720
|
+
textId: number | null;
|
|
721
|
+
attackStartArei: boolean;
|
|
722
|
+
trackGuid: boolean;
|
|
723
|
+
cite: string;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
/** Port of JustSummoned Irontree branch. Cite: felwood.cpp:381–392 */
|
|
727
|
+
export function areiJustSummoned(summonedEntry: number): AreiJustSummonedResult {
|
|
728
|
+
const e = summonedEntry | 0;
|
|
729
|
+
if (e === NPC_IRONTREE_STOMPER) {
|
|
730
|
+
return {
|
|
731
|
+
textId: SAY_EXIT_WOODS,
|
|
732
|
+
attackStartArei: true,
|
|
733
|
+
trackGuid: true,
|
|
734
|
+
cite:
|
|
735
|
+
'felwood.cpp:385-390 Stomper → SAY_EXIT_WOODS + AttackStart(Arei) + track guid',
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
if (e === NPC_IRONTREE_WANDERER) {
|
|
739
|
+
return {
|
|
740
|
+
textId: null,
|
|
741
|
+
attackStartArei: true,
|
|
742
|
+
trackGuid: true,
|
|
743
|
+
cite: 'felwood.cpp:388-390 Wanderer → AttackStart(Arei) + track guid',
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
return {
|
|
747
|
+
textId: null,
|
|
748
|
+
attackStartArei: false,
|
|
749
|
+
trackGuid: false,
|
|
750
|
+
cite: 'felwood.cpp:383 unknown summon → no-op',
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
export interface AreiSummonedDiedResult {
|
|
755
|
+
startEpilog: boolean;
|
|
756
|
+
remainingTracked: number;
|
|
757
|
+
cite: string;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// Port of SummonedCreatureJustDied ambush-clear → StartNextDialogueText.
|
|
761
|
+
// Cite: felwood.cpp:395–403.
|
|
762
|
+
export function areiSummonedCreatureJustDied(
|
|
763
|
+
summonedEntry: number,
|
|
764
|
+
trackedBeforeRemove: number,
|
|
765
|
+
): AreiSummonedDiedResult {
|
|
766
|
+
const e = summonedEntry | 0;
|
|
767
|
+
if (e !== NPC_IRONTREE_STOMPER && e !== NPC_IRONTREE_WANDERER) {
|
|
768
|
+
return {
|
|
769
|
+
startEpilog: false,
|
|
770
|
+
remainingTracked: trackedBeforeRemove,
|
|
771
|
+
cite: 'felwood.cpp:397 not Irontree → no-op',
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
const remaining = Math.max(0, (trackedBeforeRemove | 0) - 1);
|
|
775
|
+
return {
|
|
776
|
+
startEpilog: remaining === 0,
|
|
777
|
+
remainingTracked: remaining,
|
|
778
|
+
cite:
|
|
779
|
+
remaining === 0
|
|
780
|
+
? 'felwood.cpp:401-402 empty summons → StartNextDialogueText(SAY_CLEAR_PATH)'
|
|
781
|
+
: 'felwood.cpp:399 remove guid; still tracked → wait',
|
|
782
|
+
};
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
export interface AreiDialogueStepResult {
|
|
786
|
+
handled: boolean;
|
|
787
|
+
textId: number | null;
|
|
788
|
+
castTransform: boolean;
|
|
789
|
+
exploreQuestId: number | null;
|
|
790
|
+
forceDespawnMs: number;
|
|
791
|
+
cite: string;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
// Port of JustDidDialogueStep epilog actions.
|
|
795
|
+
// Cite: felwood.cpp:437–458.
|
|
796
|
+
export function areiDialogueStep(stepEntry: number): AreiDialogueStepResult {
|
|
797
|
+
const e = stepEntry | 0;
|
|
798
|
+
if (e === SPELL_WITHER_STRIKE) {
|
|
799
|
+
return {
|
|
800
|
+
handled: true,
|
|
801
|
+
textId: SAY_ASHENVALE,
|
|
802
|
+
castTransform: false,
|
|
803
|
+
exploreQuestId: null,
|
|
804
|
+
forceDespawnMs: 0,
|
|
805
|
+
cite: 'felwood.cpp:441-443 SPELL_WITHER_STRIKE step → SAY_ASHENVALE',
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
if (e === SPELL_AREI_TRANSFORM) {
|
|
809
|
+
return {
|
|
810
|
+
handled: true,
|
|
811
|
+
textId: SAY_LIFT_CURSE,
|
|
812
|
+
castTransform: true,
|
|
813
|
+
exploreQuestId: null,
|
|
814
|
+
forceDespawnMs: 0,
|
|
815
|
+
cite:
|
|
816
|
+
'felwood.cpp:445-448 SPELL_AREI_TRANSFORM step → cast 14888 + SAY_LIFT_CURSE',
|
|
817
|
+
};
|
|
818
|
+
}
|
|
819
|
+
if (e === QUEST_ID_ANCIENT_SPIRIT) {
|
|
820
|
+
return {
|
|
821
|
+
handled: true,
|
|
822
|
+
textId: SAY_AREI_ESCORT_COMPLETE,
|
|
823
|
+
castTransform: false,
|
|
824
|
+
exploreQuestId: QUEST_ID_ANCIENT_SPIRIT,
|
|
825
|
+
forceDespawnMs: AREI_COMPLETE_DESPAWN_MS,
|
|
826
|
+
cite:
|
|
827
|
+
'felwood.cpp:450-456 QUEST step → SAY complete + explore 4261 + ForcedDespawn(10000)',
|
|
828
|
+
};
|
|
829
|
+
}
|
|
830
|
+
// SAY_CLEAR_PATH / SAY_TRANSFORM are DialogueHelper speaker texts (auto-said).
|
|
831
|
+
if (e === SAY_CLEAR_PATH || e === SAY_TRANSFORM) {
|
|
832
|
+
return {
|
|
833
|
+
handled: true,
|
|
834
|
+
textId: e,
|
|
835
|
+
castTransform: false,
|
|
836
|
+
exploreQuestId: null,
|
|
837
|
+
forceDespawnMs: 0,
|
|
838
|
+
cite: 'felwood.cpp:336/338 DialogueHelper speaker text (no JustDidDialogueStep action)',
|
|
839
|
+
};
|
|
840
|
+
}
|
|
841
|
+
return {
|
|
842
|
+
handled: false,
|
|
843
|
+
textId: null,
|
|
844
|
+
castTransform: false,
|
|
845
|
+
exploreQuestId: null,
|
|
846
|
+
forceDespawnMs: 0,
|
|
847
|
+
cite: 'felwood.cpp:439 unknown dialogue step → no-op',
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// ScriptDev IR — npc_kitten
|
|
852
|
+
|
|
853
|
+
// npc_kittenAI and the CorruptedSaberVisual spell script. Creature 9937 is ABSENT from the product
|
|
854
|
+
// bake, so the binding is unused. Follower plus the 16510 morph to 10042; no combat timers.
|
|
855
|
+
export const NPC_KITTEN_SCRIPT: ScriptDevIR = {
|
|
856
|
+
name: 'npc_kitten',
|
|
857
|
+
boundCreatures: [NPC_COMMON_KITTEN],
|
|
858
|
+
sourceFile: 'kalimdor/felwood.cpp',
|
|
859
|
+
spellIds: [SPELL_CORRUPT_SABER_VISUAL],
|
|
860
|
+
timers: [],
|
|
861
|
+
lifecycle: {
|
|
862
|
+
onReset: [
|
|
863
|
+
{
|
|
864
|
+
kind: 'flavor',
|
|
865
|
+
text: `m_uiMoonwellCooldown=${KITTEN_MOONWELL_COOLDOWN_MS}; Reset empty`,
|
|
866
|
+
cite: 'felwood.cpp:72,78',
|
|
867
|
+
},
|
|
868
|
+
],
|
|
869
|
+
},
|
|
870
|
+
unusedBindings: [
|
|
871
|
+
{
|
|
872
|
+
entry: NPC_COMMON_KITTEN,
|
|
873
|
+
kind: 'creature',
|
|
874
|
+
reason:
|
|
875
|
+
'NPC 9937 Common Kitten is DB-bound to npc_kitten (quest 4506 follower) but absent from product bake - IR + pure helpers (kittenCtor / kittenMoonwellTick / corruptedSaberVisualOnEffect) ported; product cannot spawn until rebake',
|
|
876
|
+
cite: 'felwood.cpp:57-115,117-135; scriptdev-corpus bound 9937; loadRealBundle missing 9937',
|
|
877
|
+
},
|
|
878
|
+
],
|
|
879
|
+
cites: [
|
|
880
|
+
'felwood.cpp:39-135 npc_kitten + CorruptedSaberVisual',
|
|
881
|
+
'felwood.cpp:45-52 EMOTE/SPELL/QUEST/NPC constants',
|
|
882
|
+
'felwood.cpp:61-73 ctor follow + moonwell 7500',
|
|
883
|
+
'felwood.cpp:80-87 Winna LOS gossip flag',
|
|
884
|
+
'felwood.cpp:90-109 UpdateFollowerAI moonwell cast 16510',
|
|
885
|
+
'felwood.cpp:117-135 spell_corrupted_saber_visual morph 10042',
|
|
886
|
+
],
|
|
887
|
+
};
|
|
888
|
+
|
|
889
|
+
// ScriptDev IR — npc_corrupt_saber
|
|
890
|
+
|
|
891
|
+
// GossipHello/Select_npc_corrupt_saber. Creature 10042 is ABSENT from the product bake, so the
|
|
892
|
+
// binding is unused. Gossip residual only — release to Winna gives explore credit 4506.
|
|
893
|
+
export const NPC_CORRUPT_SABER_SCRIPT: ScriptDevIR = {
|
|
894
|
+
name: 'npc_corrupt_saber',
|
|
895
|
+
boundCreatures: [NPC_CORRUPT_SABER],
|
|
896
|
+
sourceFile: 'kalimdor/felwood.cpp',
|
|
897
|
+
spellIds: [],
|
|
898
|
+
timers: [],
|
|
899
|
+
gossipHello: {
|
|
900
|
+
defaultTextId: 0,
|
|
901
|
+
cite:
|
|
902
|
+
'felwood.cpp:137-146 GossipHello: release item when 4506 incomplete + Winna near (corruptSaberGossipHello)',
|
|
903
|
+
},
|
|
904
|
+
unusedBindings: [
|
|
905
|
+
{
|
|
906
|
+
entry: NPC_CORRUPT_SABER,
|
|
907
|
+
kind: 'creature',
|
|
908
|
+
reason:
|
|
909
|
+
'NPC 10042 Corrupted Saber is DB-bound to npc_corrupt_saber (quest 4506 gossip residual / morph of 9937) but absent from product bake - IR + pure helpers (corruptSaberGossipHello/Select) ported; product cannot spawn until rebake',
|
|
910
|
+
cite: 'felwood.cpp:137-161; scriptdev-corpus bound 10042; loadRealBundle missing 10042',
|
|
911
|
+
},
|
|
912
|
+
],
|
|
913
|
+
cites: [
|
|
914
|
+
'felwood.cpp:137-161 npc_corrupt_saber gossip',
|
|
915
|
+
'felwood.cpp:50 QUEST_CORRUPT_SABER=4506',
|
|
916
|
+
'felwood.cpp:51-52 NPC_WINNA=9996 NPC_CORRUPT_SABER=10042',
|
|
917
|
+
'felwood.cpp:139-142 incomplete 4506 + Winna ≤INTERACTION_DISTANCE → release',
|
|
918
|
+
'felwood.cpp:151-158 select → SetFollowComplete + AreaExploredOrEventHappens(4506)',
|
|
919
|
+
],
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
// ScriptDev IR — npc_captured_arkonarin
|
|
923
|
+
|
|
924
|
+
// npc_captured_arkonarinAI, creature 11016. Escort 5203 with a combat kit after WP37 — Mortal
|
|
925
|
+
// Strike 16856 and Cleave 15496. Spirit Trey 11141 is absent from bake, so that binding is unused.
|
|
926
|
+
export const NPC_CAPTURED_ARKONARIN_SCRIPT: ScriptDevIR = {
|
|
927
|
+
name: 'npc_captured_arkonarin',
|
|
928
|
+
boundCreatures: [NPC_CAPTURED_ARKONARIN],
|
|
929
|
+
sourceFile: 'kalimdor/felwood.cpp',
|
|
930
|
+
spellIds: [SPELL_MORTAL_STRIKE, SPELL_CLEAVE],
|
|
931
|
+
timers: [
|
|
932
|
+
{
|
|
933
|
+
id: 'mortal_strike',
|
|
934
|
+
spellId: SPELL_MORTAL_STRIKE,
|
|
935
|
+
// Reset m_uiMortalStrikeTimer = urand(5000, 7000) (cpp:208)
|
|
936
|
+
initialMinMs: ARKONARIN_MORTAL_STRIKE_INIT_MIN_MS,
|
|
937
|
+
initialMaxMs: ARKONARIN_MORTAL_STRIKE_INIT_MAX_MS,
|
|
938
|
+
// CAST_OK re-arm urand(7000, 10000) (cpp:277)
|
|
939
|
+
repeatMinMs: ARKONARIN_MORTAL_STRIKE_REPEAT_MIN_MS,
|
|
940
|
+
repeatMaxMs: ARKONARIN_MORTAL_STRIKE_REPEAT_MAX_MS,
|
|
941
|
+
target: 'victim',
|
|
942
|
+
cite:
|
|
943
|
+
'felwood.cpp:208,274-277 Mortal Strike 16856 init 5000-7000 re-arm 7000-10000 victim (gated m_bCanAttack after WP37)',
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
id: 'cleave',
|
|
947
|
+
spellId: SPELL_CLEAVE,
|
|
948
|
+
// Reset m_uiCleaveTimer = urand(1000, 4000) (cpp:209)
|
|
949
|
+
initialMinMs: ARKONARIN_CLEAVE_INIT_MIN_MS,
|
|
950
|
+
initialMaxMs: ARKONARIN_CLEAVE_INIT_MAX_MS,
|
|
951
|
+
// CAST_OK re-arm urand(3000, 6000) (cpp:285)
|
|
952
|
+
repeatMinMs: ARKONARIN_CLEAVE_REPEAT_MIN_MS,
|
|
953
|
+
repeatMaxMs: ARKONARIN_CLEAVE_REPEAT_MAX_MS,
|
|
954
|
+
target: 'victim',
|
|
955
|
+
cite:
|
|
956
|
+
'felwood.cpp:209,282-285 Cleave 15496 init 1000-4000 re-arm 3000-6000 victim (gated m_bCanAttack after WP37)',
|
|
957
|
+
},
|
|
958
|
+
],
|
|
959
|
+
lifecycle: {
|
|
960
|
+
onReset: [
|
|
961
|
+
{
|
|
962
|
+
kind: 'flavor',
|
|
963
|
+
text: 'm_bCanAttack=false when !escorting; MortalStrike urand(5-7)s Cleave urand(1-4)s',
|
|
964
|
+
cite: 'felwood.cpp:203-209',
|
|
965
|
+
},
|
|
966
|
+
],
|
|
967
|
+
onAggro: [
|
|
968
|
+
{
|
|
969
|
+
kind: 'yell',
|
|
970
|
+
textId: 6801,
|
|
971
|
+
cite:
|
|
972
|
+
'felwood.cpp:214-215 80% DoBroadcastText(aRandomAggro[urand(0,2)]) - 6801/6802/6803 (arkonarinAggro)',
|
|
973
|
+
},
|
|
974
|
+
],
|
|
975
|
+
},
|
|
976
|
+
unusedBindings: [
|
|
977
|
+
{
|
|
978
|
+
entry: NPC_SPIRT_TREY,
|
|
979
|
+
kind: 'creature',
|
|
980
|
+
reason:
|
|
981
|
+
'NPC 11141 Spirit of Trey is escort-ambush residual (WP83 pause until death → resume; felwood.cpp:220-221,251-253) but absent from product bake - IR ported; resume helper arkonarinSummonedCreatureJustDied documents the gate',
|
|
982
|
+
cite: 'felwood.cpp:177,218-221,251-253; loadRealBundle missing 11141',
|
|
983
|
+
},
|
|
984
|
+
],
|
|
985
|
+
cites: [
|
|
986
|
+
'felwood.cpp:164-306 npc_captured_arkonarin',
|
|
987
|
+
'felwood.cpp:170-182 SAY/SPELL/QUEST/NPC/PATH constants',
|
|
988
|
+
'felwood.cpp:186 aRandomAggro 6801/6802/6803',
|
|
989
|
+
'felwood.cpp:192 ctor kneel',
|
|
990
|
+
'felwood.cpp:203-209 Reset timers + canAttack',
|
|
991
|
+
'felwood.cpp:212-216 Aggro 80% yell',
|
|
992
|
+
'felwood.cpp:218-221 Spirit Trey death resume',
|
|
993
|
+
'felwood.cpp:224-234 ReceiveAIEvent START_ESCORT',
|
|
994
|
+
'felwood.cpp:237-264 WaypointReached WP1/37/83/85',
|
|
995
|
+
'felwood.cpp:267-292 UpdateEscortAI Mortal Strike + Cleave + melee',
|
|
996
|
+
'felwood.cpp:300-305 QuestAccept 5203 SendAIEvent',
|
|
997
|
+
],
|
|
998
|
+
};
|
|
999
|
+
|
|
1000
|
+
// ScriptDev IR — npc_arei
|
|
1001
|
+
|
|
1002
|
+
// npc_areiAI, creature 9598. Escort 4261 with Wither Strike 5337, the WP37 Irontree ambush and the
|
|
1003
|
+
// epilog transform 14888. This ScriptDev schedule supersedes the bake EventAI kit — never both.
|
|
1004
|
+
export const NPC_AREI_SCRIPT: ScriptDevIR = {
|
|
1005
|
+
name: 'npc_arei',
|
|
1006
|
+
boundCreatures: [NPC_AREI],
|
|
1007
|
+
sourceFile: 'kalimdor/felwood.cpp',
|
|
1008
|
+
spellIds: [SPELL_WITHER_STRIKE, SPELL_AREI_TRANSFORM],
|
|
1009
|
+
timers: [
|
|
1010
|
+
{
|
|
1011
|
+
id: 'wither_strike',
|
|
1012
|
+
spellId: SPELL_WITHER_STRIKE,
|
|
1013
|
+
// Reset m_uiWitherStrikeTimer = urand(1000, 4000) (cpp:363)
|
|
1014
|
+
initialMinMs: AREI_WITHER_STRIKE_INIT_MIN_MS,
|
|
1015
|
+
initialMaxMs: AREI_WITHER_STRIKE_INIT_MAX_MS,
|
|
1016
|
+
// CAST_OK re-arm urand(3000, 6000) (cpp:471)
|
|
1017
|
+
repeatMinMs: AREI_WITHER_STRIKE_REPEAT_MIN_MS,
|
|
1018
|
+
repeatMaxMs: AREI_WITHER_STRIKE_REPEAT_MAX_MS,
|
|
1019
|
+
target: 'victim',
|
|
1020
|
+
cite:
|
|
1021
|
+
'felwood.cpp:363,468-471 Wither Strike 5337 init 1000-4000 re-arm 3000-6000 victim',
|
|
1022
|
+
},
|
|
1023
|
+
],
|
|
1024
|
+
lifecycle: {
|
|
1025
|
+
onReset: [
|
|
1026
|
+
{
|
|
1027
|
+
kind: 'flavor',
|
|
1028
|
+
text: 'm_uiWitherStrikeTimer=urand(1000,4000)',
|
|
1029
|
+
cite: 'felwood.cpp:361-364',
|
|
1030
|
+
},
|
|
1031
|
+
],
|
|
1032
|
+
onAggro: [
|
|
1033
|
+
{
|
|
1034
|
+
kind: 'yell',
|
|
1035
|
+
textId: SAY_ATTACK_IRONTREE,
|
|
1036
|
+
cite:
|
|
1037
|
+
'felwood.cpp:366-378 Aggro: first Irontree → SAY_ATTACK_IRONTREE; first Toxic Horror → SAY_ATTACK_TOXIC_HORROR (areiAggro)',
|
|
1038
|
+
},
|
|
1039
|
+
],
|
|
1040
|
+
},
|
|
1041
|
+
cites: [
|
|
1042
|
+
'felwood.cpp:308-491 npc_arei',
|
|
1043
|
+
'felwood.cpp:314-331 SAY_*/SPELL_*/NPC_*/QUEST constants',
|
|
1044
|
+
'felwood.cpp:334-342 aEpilogDialogue delays 4s/5s/3s/7s/0',
|
|
1045
|
+
'felwood.cpp:361-364 Reset Wither Strike timer',
|
|
1046
|
+
'felwood.cpp:366-378 Aggro Irontree/Horror yells once',
|
|
1047
|
+
'felwood.cpp:381-392 JustSummoned Stomper/Wanderer',
|
|
1048
|
+
'felwood.cpp:395-403 SummonedCreatureJustDied → epilog',
|
|
1049
|
+
'felwood.cpp:406-414 ReceiveAIEvent START_ESCORT',
|
|
1050
|
+
'felwood.cpp:417-426 WP37 ambush summons',
|
|
1051
|
+
'felwood.cpp:437-458 JustDidDialogueStep transform + credit 4261',
|
|
1052
|
+
'felwood.cpp:461-477 UpdateEscortAI DialogueUpdate + Wither Strike + melee',
|
|
1053
|
+
'felwood.cpp:485-490 QuestAccept 4261 SendAIEvent',
|
|
1054
|
+
],
|
|
1055
|
+
};
|