idlerpg.sh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -0
- package/dist/affix/AffixRegistry.d.ts +68 -0
- package/dist/affix/AffixRegistry.d.ts.map +1 -0
- package/dist/affix/AffixRegistry.js +245 -0
- package/dist/affix/AffixRegistry.js.map +1 -0
- package/dist/affix/PluginLoader.d.ts +66 -0
- package/dist/affix/PluginLoader.d.ts.map +1 -0
- package/dist/affix/PluginLoader.js +321 -0
- package/dist/affix/PluginLoader.js.map +1 -0
- package/dist/affix/builtin.d.ts +6 -0
- package/dist/affix/builtin.d.ts.map +1 -0
- package/dist/affix/builtin.js +311 -0
- package/dist/affix/builtin.js.map +1 -0
- package/dist/affix/index.d.ts +8 -0
- package/dist/affix/index.d.ts.map +1 -0
- package/dist/affix/index.js +11 -0
- package/dist/affix/index.js.map +1 -0
- package/dist/affix/types.d.ts +152 -0
- package/dist/affix/types.d.ts.map +1 -0
- package/dist/affix/types.js +8 -0
- package/dist/affix/types.js.map +1 -0
- package/dist/ai/PlayKitClient.d.ts +208 -0
- package/dist/ai/PlayKitClient.d.ts.map +1 -0
- package/dist/ai/PlayKitClient.js +721 -0
- package/dist/ai/PlayKitClient.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/app/App.d.ts +85 -0
- package/dist/app/App.d.ts.map +1 -0
- package/dist/app/App.js +296 -0
- package/dist/app/App.js.map +1 -0
- package/dist/app/EventBus.d.ts +222 -0
- package/dist/app/EventBus.d.ts.map +1 -0
- package/dist/app/EventBus.js +88 -0
- package/dist/app/EventBus.js.map +1 -0
- package/dist/app/Keybind.d.ts +83 -0
- package/dist/app/Keybind.d.ts.map +1 -0
- package/dist/app/Keybind.js +184 -0
- package/dist/app/Keybind.js.map +1 -0
- package/dist/app/Router.d.ts +123 -0
- package/dist/app/Router.d.ts.map +1 -0
- package/dist/app/Router.js +142 -0
- package/dist/app/Router.js.map +1 -0
- package/dist/app/ScreenManager.d.ts +97 -0
- package/dist/app/ScreenManager.d.ts.map +1 -0
- package/dist/app/ScreenManager.js +216 -0
- package/dist/app/ScreenManager.js.map +1 -0
- package/dist/app/index.d.ts +14 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +19 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/screens/BaseScreen.d.ts +101 -0
- package/dist/app/screens/BaseScreen.d.ts.map +1 -0
- package/dist/app/screens/BaseScreen.js +132 -0
- package/dist/app/screens/BaseScreen.js.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.js +467 -0
- package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
- package/dist/app/screens/CombatScreen.d.ts +30 -0
- package/dist/app/screens/CombatScreen.d.ts.map +1 -0
- package/dist/app/screens/CombatScreen.js +309 -0
- package/dist/app/screens/CombatScreen.js.map +1 -0
- package/dist/app/screens/DialogScreen.d.ts +29 -0
- package/dist/app/screens/DialogScreen.d.ts.map +1 -0
- package/dist/app/screens/DialogScreen.js +295 -0
- package/dist/app/screens/DialogScreen.js.map +1 -0
- package/dist/app/screens/ExploreScreen.d.ts +50 -0
- package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/app/screens/ExploreScreen.js +308 -0
- package/dist/app/screens/ExploreScreen.js.map +1 -0
- package/dist/app/screens/HelpScreen.d.ts +12 -0
- package/dist/app/screens/HelpScreen.d.ts.map +1 -0
- package/dist/app/screens/HelpScreen.js +155 -0
- package/dist/app/screens/HelpScreen.js.map +1 -0
- package/dist/app/screens/InventoryScreen.d.ts +27 -0
- package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
- package/dist/app/screens/InventoryScreen.js +326 -0
- package/dist/app/screens/InventoryScreen.js.map +1 -0
- package/dist/app/screens/PrologueScreen.d.ts +24 -0
- package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
- package/dist/app/screens/PrologueScreen.js +176 -0
- package/dist/app/screens/PrologueScreen.js.map +1 -0
- package/dist/app/screens/TitleScreen.d.ts +42 -0
- package/dist/app/screens/TitleScreen.d.ts.map +1 -0
- package/dist/app/screens/TitleScreen.js +380 -0
- package/dist/app/screens/TitleScreen.js.map +1 -0
- package/dist/app/screens/TravelScreen.d.ts +22 -0
- package/dist/app/screens/TravelScreen.d.ts.map +1 -0
- package/dist/app/screens/TravelScreen.js +122 -0
- package/dist/app/screens/TravelScreen.js.map +1 -0
- package/dist/app/screens/index.d.ts +14 -0
- package/dist/app/screens/index.d.ts.map +1 -0
- package/dist/app/screens/index.js +17 -0
- package/dist/app/screens/index.js.map +1 -0
- package/dist/commands/CommandRegistry.d.ts +91 -0
- package/dist/commands/CommandRegistry.d.ts.map +1 -0
- package/dist/commands/CommandRegistry.js +159 -0
- package/dist/commands/CommandRegistry.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/Actor.d.ts +103 -0
- package/dist/core/Actor.d.ts.map +1 -0
- package/dist/core/Actor.js +409 -0
- package/dist/core/Actor.js.map +1 -0
- package/dist/core/Combat.d.ts +37 -0
- package/dist/core/Combat.d.ts.map +1 -0
- package/dist/core/Combat.js +294 -0
- package/dist/core/Combat.js.map +1 -0
- package/dist/core/DungeonRunner.d.ts +169 -0
- package/dist/core/DungeonRunner.d.ts.map +1 -0
- package/dist/core/DungeonRunner.js +627 -0
- package/dist/core/DungeonRunner.js.map +1 -0
- package/dist/core/Game.d.ts +133 -0
- package/dist/core/Game.d.ts.map +1 -0
- package/dist/core/Game.js +644 -0
- package/dist/core/Game.js.map +1 -0
- package/dist/core/IdleCombat.d.ts +61 -0
- package/dist/core/IdleCombat.d.ts.map +1 -0
- package/dist/core/IdleCombat.js +461 -0
- package/dist/core/IdleCombat.js.map +1 -0
- package/dist/core/IdleGameManager.d.ts +198 -0
- package/dist/core/IdleGameManager.d.ts.map +1 -0
- package/dist/core/IdleGameManager.js +688 -0
- package/dist/core/IdleGameManager.js.map +1 -0
- package/dist/core/IdleSaveManager.d.ts +109 -0
- package/dist/core/IdleSaveManager.d.ts.map +1 -0
- package/dist/core/IdleSaveManager.js +296 -0
- package/dist/core/IdleSaveManager.js.map +1 -0
- package/dist/core/NewGameFlowManager.d.ts +64 -0
- package/dist/core/NewGameFlowManager.d.ts.map +1 -0
- package/dist/core/NewGameFlowManager.js +153 -0
- package/dist/core/NewGameFlowManager.js.map +1 -0
- package/dist/core/Player.d.ts +65 -0
- package/dist/core/Player.d.ts.map +1 -0
- package/dist/core/Player.js +261 -0
- package/dist/core/Player.js.map +1 -0
- package/dist/core/RoomHandlers.d.ts +75 -0
- package/dist/core/RoomHandlers.d.ts.map +1 -0
- package/dist/core/RoomHandlers.js +383 -0
- package/dist/core/RoomHandlers.js.map +1 -0
- package/dist/core/SaveManager.d.ts +84 -0
- package/dist/core/SaveManager.d.ts.map +1 -0
- package/dist/core/SaveManager.js +281 -0
- package/dist/core/SaveManager.js.map +1 -0
- package/dist/core/SaveMigration.d.ts +69 -0
- package/dist/core/SaveMigration.d.ts.map +1 -0
- package/dist/core/SaveMigration.js +408 -0
- package/dist/core/SaveMigration.js.map +1 -0
- package/dist/core/StateAdapter.d.ts +79 -0
- package/dist/core/StateAdapter.d.ts.map +1 -0
- package/dist/core/StateAdapter.js +397 -0
- package/dist/core/StateAdapter.js.map +1 -0
- package/dist/core/Team.d.ts +145 -0
- package/dist/core/Team.d.ts.map +1 -0
- package/dist/core/Team.js +371 -0
- package/dist/core/Team.js.map +1 -0
- package/dist/core/TeamCombat.d.ts +88 -0
- package/dist/core/TeamCombat.d.ts.map +1 -0
- package/dist/core/TeamCombat.js +405 -0
- package/dist/core/TeamCombat.js.map +1 -0
- package/dist/core/TeamDungeonRunner.d.ts +186 -0
- package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
- package/dist/core/TeamDungeonRunner.js +758 -0
- package/dist/core/TeamDungeonRunner.js.map +1 -0
- package/dist/core/TimeManager.d.ts +114 -0
- package/dist/core/TimeManager.d.ts.map +1 -0
- package/dist/core/TimeManager.js +318 -0
- package/dist/core/TimeManager.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/timeConstants.d.ts +135 -0
- package/dist/core/timeConstants.d.ts.map +1 -0
- package/dist/core/timeConstants.js +157 -0
- package/dist/core/timeConstants.js.map +1 -0
- package/dist/core/types.d.ts +780 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +16 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/continents/index.d.ts +163 -0
- package/dist/data/continents/index.d.ts.map +1 -0
- package/dist/data/continents/index.js +31 -0
- package/dist/data/continents/index.js.map +1 -0
- package/dist/data/continents/verdantia.d.ts +294 -0
- package/dist/data/continents/verdantia.d.ts.map +1 -0
- package/dist/data/continents/verdantia.js +327 -0
- package/dist/data/continents/verdantia.js.map +1 -0
- package/dist/handlers/DialogHandler.d.ts +95 -0
- package/dist/handlers/DialogHandler.d.ts.map +1 -0
- package/dist/handlers/DialogHandler.js +450 -0
- package/dist/handlers/DialogHandler.js.map +1 -0
- package/dist/handlers/SaveLoadHandler.d.ts +60 -0
- package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
- package/dist/handlers/SaveLoadHandler.js +187 -0
- package/dist/handlers/SaveLoadHandler.js.map +1 -0
- package/dist/handlers/TitleScreenHandler.d.ts +43 -0
- package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
- package/dist/handlers/TitleScreenHandler.js +508 -0
- package/dist/handlers/TitleScreenHandler.js.map +1 -0
- package/dist/handlers/WorkshopHandler.d.ts +75 -0
- package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
- package/dist/handlers/WorkshopHandler.js +401 -0
- package/dist/handlers/WorkshopHandler.js.map +1 -0
- package/dist/handlers/index.d.ts +12 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +14 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/types.d.ts +34 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +8 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +130 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +40 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +105 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +133 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +3 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +130 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/instrument.d.ts +8 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +33 -0
- package/dist/instrument.js.map +1 -0
- package/dist/main-new.d.ts +12 -0
- package/dist/main-new.d.ts.map +1 -0
- package/dist/main-new.js +32 -0
- package/dist/main-new.js.map +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +2816 -0
- package/dist/main.js.map +1 -0
- package/dist/map/ContinentManager.d.ts +88 -0
- package/dist/map/ContinentManager.d.ts.map +1 -0
- package/dist/map/ContinentManager.js +241 -0
- package/dist/map/ContinentManager.js.map +1 -0
- package/dist/map/DungeonGenerator.d.ts +32 -0
- package/dist/map/DungeonGenerator.d.ts.map +1 -0
- package/dist/map/DungeonGenerator.js +615 -0
- package/dist/map/DungeonGenerator.js.map +1 -0
- package/dist/map/MapGenerator.d.ts +27 -0
- package/dist/map/MapGenerator.d.ts.map +1 -0
- package/dist/map/MapGenerator.js +485 -0
- package/dist/map/MapGenerator.js.map +1 -0
- package/dist/map/index.d.ts +5 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +8 -0
- package/dist/map/index.js.map +1 -0
- package/dist/npc/NPCGenerator.d.ts +68 -0
- package/dist/npc/NPCGenerator.d.ts.map +1 -0
- package/dist/npc/NPCGenerator.js +468 -0
- package/dist/npc/NPCGenerator.js.map +1 -0
- package/dist/npc/NPCManager.d.ts +86 -0
- package/dist/npc/NPCManager.d.ts.map +1 -0
- package/dist/npc/NPCManager.js +217 -0
- package/dist/npc/NPCManager.js.map +1 -0
- package/dist/npc/fixedNPCs.d.ts +7 -0
- package/dist/npc/fixedNPCs.d.ts.map +1 -0
- package/dist/npc/fixedNPCs.js +196 -0
- package/dist/npc/fixedNPCs.js.map +1 -0
- package/dist/npc/index.d.ts +9 -0
- package/dist/npc/index.d.ts.map +1 -0
- package/dist/npc/index.js +12 -0
- package/dist/npc/index.js.map +1 -0
- package/dist/npc/traits.d.ts +33 -0
- package/dist/npc/traits.d.ts.map +1 -0
- package/dist/npc/traits.js +795 -0
- package/dist/npc/traits.js.map +1 -0
- package/dist/npc/types.d.ts +193 -0
- package/dist/npc/types.d.ts.map +1 -0
- package/dist/npc/types.js +9 -0
- package/dist/npc/types.js.map +1 -0
- package/dist/quest/QuestManager.d.ts +79 -0
- package/dist/quest/QuestManager.d.ts.map +1 -0
- package/dist/quest/QuestManager.js +273 -0
- package/dist/quest/QuestManager.js.map +1 -0
- package/dist/quest/index.d.ts +6 -0
- package/dist/quest/index.d.ts.map +1 -0
- package/dist/quest/index.js +9 -0
- package/dist/quest/index.js.map +1 -0
- package/dist/quest/types.d.ts +81 -0
- package/dist/quest/types.d.ts.map +1 -0
- package/dist/quest/types.js +8 -0
- package/dist/quest/types.js.map +1 -0
- package/dist/strategy/StrategyExecutor.d.ts +159 -0
- package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
- package/dist/strategy/StrategyExecutor.js +479 -0
- package/dist/strategy/StrategyExecutor.js.map +1 -0
- package/dist/strategy/StrategyParser.d.ts +48 -0
- package/dist/strategy/StrategyParser.d.ts.map +1 -0
- package/dist/strategy/StrategyParser.js +321 -0
- package/dist/strategy/StrategyParser.js.map +1 -0
- package/dist/strategy/defaultStrategy.d.ts +40 -0
- package/dist/strategy/defaultStrategy.d.ts.map +1 -0
- package/dist/strategy/defaultStrategy.js +254 -0
- package/dist/strategy/defaultStrategy.js.map +1 -0
- package/dist/strategy/index.d.ts +8 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +14 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/tui/ExploreMenu.d.ts +106 -0
- package/dist/tui/ExploreMenu.d.ts.map +1 -0
- package/dist/tui/ExploreMenu.js +282 -0
- package/dist/tui/ExploreMenu.js.map +1 -0
- package/dist/tui/GameUI.d.ts +313 -0
- package/dist/tui/GameUI.d.ts.map +1 -0
- package/dist/tui/GameUI.js +2116 -0
- package/dist/tui/GameUI.js.map +1 -0
- package/dist/tui/GameUIAdapter.d.ts +207 -0
- package/dist/tui/GameUIAdapter.d.ts.map +1 -0
- package/dist/tui/GameUIAdapter.js +1342 -0
- package/dist/tui/GameUIAdapter.js.map +1 -0
- package/dist/tui/Input.d.ts +139 -0
- package/dist/tui/Input.d.ts.map +1 -0
- package/dist/tui/Input.js +278 -0
- package/dist/tui/Input.js.map +1 -0
- package/dist/tui/Menu.d.ts +110 -0
- package/dist/tui/Menu.d.ts.map +1 -0
- package/dist/tui/Menu.js +365 -0
- package/dist/tui/Menu.js.map +1 -0
- package/dist/tui/Screen.d.ts +228 -0
- package/dist/tui/Screen.d.ts.map +1 -0
- package/dist/tui/Screen.js +502 -0
- package/dist/tui/Screen.js.map +1 -0
- package/dist/tui/components/Box.d.ts +36 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +43 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/components/List.d.ts +69 -0
- package/dist/tui/components/List.d.ts.map +1 -0
- package/dist/tui/components/List.js +136 -0
- package/dist/tui/components/List.js.map +1 -0
- package/dist/tui/components/ProgressBar.d.ts +42 -0
- package/dist/tui/components/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/ProgressBar.js +75 -0
- package/dist/tui/components/ProgressBar.js.map +1 -0
- package/dist/tui/components/index.d.ts +8 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +11 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/core/BaseSection.d.ts +98 -0
- package/dist/tui/core/BaseSection.d.ts.map +1 -0
- package/dist/tui/core/BaseSection.js +174 -0
- package/dist/tui/core/BaseSection.js.map +1 -0
- package/dist/tui/core/Component.d.ts +61 -0
- package/dist/tui/core/Component.d.ts.map +1 -0
- package/dist/tui/core/Component.js +32 -0
- package/dist/tui/core/Component.js.map +1 -0
- package/dist/tui/core/Section.d.ts +101 -0
- package/dist/tui/core/Section.d.ts.map +1 -0
- package/dist/tui/core/Section.js +24 -0
- package/dist/tui/core/Section.js.map +1 -0
- package/dist/tui/core/SectionManager.d.ts +108 -0
- package/dist/tui/core/SectionManager.d.ts.map +1 -0
- package/dist/tui/core/SectionManager.js +258 -0
- package/dist/tui/core/SectionManager.js.map +1 -0
- package/dist/tui/core/index.d.ts +9 -0
- package/dist/tui/core/index.d.ts.map +1 -0
- package/dist/tui/core/index.js +12 -0
- package/dist/tui/core/index.js.map +1 -0
- package/dist/tui/index.d.ts +15 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +23 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/BaseScreen.d.ts +62 -0
- package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
- package/dist/tui/screens/BaseScreen.js +55 -0
- package/dist/tui/screens/BaseScreen.js.map +1 -0
- package/dist/tui/screens/CombatScreen.d.ts +43 -0
- package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
- package/dist/tui/screens/CombatScreen.js +125 -0
- package/dist/tui/screens/CombatScreen.js.map +1 -0
- package/dist/tui/screens/DialogScreen.d.ts +53 -0
- package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
- package/dist/tui/screens/DialogScreen.js +90 -0
- package/dist/tui/screens/DialogScreen.js.map +1 -0
- package/dist/tui/screens/DungeonScreen.d.ts +80 -0
- package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
- package/dist/tui/screens/DungeonScreen.js +317 -0
- package/dist/tui/screens/DungeonScreen.js.map +1 -0
- package/dist/tui/screens/ExploreScreen.d.ts +69 -0
- package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/tui/screens/ExploreScreen.js +224 -0
- package/dist/tui/screens/ExploreScreen.js.map +1 -0
- package/dist/tui/screens/SectionScreen.d.ts +84 -0
- package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
- package/dist/tui/screens/SectionScreen.js +156 -0
- package/dist/tui/screens/SectionScreen.js.map +1 -0
- package/dist/tui/screens/TitleScreen.d.ts +40 -0
- package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
- package/dist/tui/screens/TitleScreen.js +253 -0
- package/dist/tui/screens/TitleScreen.js.map +1 -0
- package/dist/tui/screens/TownScreen.d.ts +98 -0
- package/dist/tui/screens/TownScreen.d.ts.map +1 -0
- package/dist/tui/screens/TownScreen.js +370 -0
- package/dist/tui/screens/TownScreen.js.map +1 -0
- package/dist/tui/screens/TravelScreen.d.ts +67 -0
- package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
- package/dist/tui/screens/TravelScreen.js +286 -0
- package/dist/tui/screens/TravelScreen.js.map +1 -0
- package/dist/tui/screens/index.d.ts +8 -0
- package/dist/tui/screens/index.d.ts.map +1 -0
- package/dist/tui/screens/index.js +17 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/sections/ActionsSection.d.ts +71 -0
- package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
- package/dist/tui/sections/ActionsSection.js +184 -0
- package/dist/tui/sections/ActionsSection.js.map +1 -0
- package/dist/tui/sections/DungeonSection.d.ts +65 -0
- package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
- package/dist/tui/sections/DungeonSection.js +144 -0
- package/dist/tui/sections/DungeonSection.js.map +1 -0
- package/dist/tui/sections/EventsSection.d.ts +50 -0
- package/dist/tui/sections/EventsSection.d.ts.map +1 -0
- package/dist/tui/sections/EventsSection.js +134 -0
- package/dist/tui/sections/EventsSection.js.map +1 -0
- package/dist/tui/sections/MapSection.d.ts +66 -0
- package/dist/tui/sections/MapSection.d.ts.map +1 -0
- package/dist/tui/sections/MapSection.js +669 -0
- package/dist/tui/sections/MapSection.js.map +1 -0
- package/dist/tui/sections/StatusSection.d.ts +47 -0
- package/dist/tui/sections/StatusSection.d.ts.map +1 -0
- package/dist/tui/sections/StatusSection.js +133 -0
- package/dist/tui/sections/StatusSection.js.map +1 -0
- package/dist/tui/sections/TeamSection.d.ts +71 -0
- package/dist/tui/sections/TeamSection.d.ts.map +1 -0
- package/dist/tui/sections/TeamSection.js +224 -0
- package/dist/tui/sections/TeamSection.js.map +1 -0
- package/dist/tui/sections/TravelingSection.d.ts +51 -0
- package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
- package/dist/tui/sections/TravelingSection.js +106 -0
- package/dist/tui/sections/TravelingSection.js.map +1 -0
- package/dist/tui/sections/index.d.ts +9 -0
- package/dist/tui/sections/index.d.ts.map +1 -0
- package/dist/tui/sections/index.js +12 -0
- package/dist/tui/sections/index.js.map +1 -0
- package/dist/ui/Terminal.d.ts +68 -0
- package/dist/ui/Terminal.d.ts.map +1 -0
- package/dist/ui/Terminal.js +297 -0
- package/dist/ui/Terminal.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/configMigration.d.ts +14 -0
- package/dist/utils/configMigration.d.ts.map +1 -0
- package/dist/utils/configMigration.js +92 -0
- package/dist/utils/configMigration.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +86 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +224 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/weapon/WeaponFactory.d.ts +32 -0
- package/dist/weapon/WeaponFactory.d.ts.map +1 -0
- package/dist/weapon/WeaponFactory.js +216 -0
- package/dist/weapon/WeaponFactory.js.map +1 -0
- package/dist/weapon/index.d.ts +5 -0
- package/dist/weapon/index.d.ts.map +1 -0
- package/dist/weapon/index.js +8 -0
- package/dist/weapon/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest Manager - Handles quest lifecycle, progress tracking, and rewards
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2a15a3b6-8d3e-50d1-8025-703f4e3fb569")}catch(e){}}();
|
|
6
|
+
import { addExperience, addGold, addToInventory } from '../core/Player.js';
|
|
7
|
+
export class QuestManager {
|
|
8
|
+
activeQuests = new Map();
|
|
9
|
+
completedQuestIds = new Set();
|
|
10
|
+
failedQuestIds = new Set();
|
|
11
|
+
questLog = [];
|
|
12
|
+
eventListeners = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Accept a quest
|
|
15
|
+
*/
|
|
16
|
+
acceptQuest(quest) {
|
|
17
|
+
// Check prerequisites
|
|
18
|
+
if (quest.prerequisiteQuestId && !this.completedQuestIds.has(quest.prerequisiteQuestId)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
// Check if already active
|
|
22
|
+
if (this.activeQuests.has(quest.id)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
// Activate quest
|
|
26
|
+
const activeQuest = {
|
|
27
|
+
...quest,
|
|
28
|
+
status: 'active',
|
|
29
|
+
startTime: Date.now(),
|
|
30
|
+
};
|
|
31
|
+
this.activeQuests.set(quest.id, activeQuest);
|
|
32
|
+
this.logEvent(quest.id, 'accepted');
|
|
33
|
+
this.emit('quest:accepted', activeQuest);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Update quest progress
|
|
38
|
+
*/
|
|
39
|
+
updateProgress(eventType, targetId, amount = 1) {
|
|
40
|
+
const updatedQuests = [];
|
|
41
|
+
for (const quest of this.activeQuests.values()) {
|
|
42
|
+
if (quest.status !== 'active')
|
|
43
|
+
continue;
|
|
44
|
+
let questUpdated = false;
|
|
45
|
+
for (const objective of quest.objectives) {
|
|
46
|
+
if (objective.isComplete)
|
|
47
|
+
continue;
|
|
48
|
+
if (objective.type !== eventType)
|
|
49
|
+
continue;
|
|
50
|
+
// Check if target matches (supports wildcards)
|
|
51
|
+
if (this.matchesTarget(targetId, objective.target)) {
|
|
52
|
+
objective.current = Math.min(objective.current + amount, objective.required);
|
|
53
|
+
objective.isComplete = objective.current >= objective.required;
|
|
54
|
+
questUpdated = true;
|
|
55
|
+
// Reveal hidden objectives if discovered
|
|
56
|
+
if (objective.isHidden && objective.current > 0) {
|
|
57
|
+
objective.isHidden = false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (questUpdated) {
|
|
62
|
+
this.logEvent(quest.id, 'progress', `${eventType}: ${targetId}`);
|
|
63
|
+
this.emit('quest:progress', quest);
|
|
64
|
+
updatedQuests.push(quest);
|
|
65
|
+
// Check if all objectives complete
|
|
66
|
+
if (quest.objectives.every(o => o.isComplete)) {
|
|
67
|
+
quest.status = 'completed';
|
|
68
|
+
quest.completedTime = Date.now();
|
|
69
|
+
this.emit('quest:ready_to_complete', quest);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return updatedQuests;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if target matches objective target (supports wildcards)
|
|
77
|
+
*/
|
|
78
|
+
matchesTarget(targetId, pattern) {
|
|
79
|
+
if (pattern === targetId)
|
|
80
|
+
return true;
|
|
81
|
+
// Support wildcard patterns like "enemy_*" or "floor_8_*"
|
|
82
|
+
if (pattern.includes('*')) {
|
|
83
|
+
const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
|
|
84
|
+
return regex.test(targetId);
|
|
85
|
+
}
|
|
86
|
+
// Support category matching like "any_floor_1_room"
|
|
87
|
+
if (pattern.startsWith('any_')) {
|
|
88
|
+
const category = pattern.slice(4);
|
|
89
|
+
return targetId.includes(category);
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Turn in a completed quest
|
|
95
|
+
*/
|
|
96
|
+
completeQuest(questId, player) {
|
|
97
|
+
const quest = this.activeQuests.get(questId);
|
|
98
|
+
if (!quest || quest.status !== 'completed') {
|
|
99
|
+
return { success: false, player, rewards: [] };
|
|
100
|
+
}
|
|
101
|
+
// Apply rewards
|
|
102
|
+
let updatedPlayer = player;
|
|
103
|
+
for (const reward of quest.rewards) {
|
|
104
|
+
updatedPlayer = this.applyReward(updatedPlayer, reward);
|
|
105
|
+
}
|
|
106
|
+
// Move to completed
|
|
107
|
+
this.activeQuests.delete(questId);
|
|
108
|
+
this.completedQuestIds.add(questId);
|
|
109
|
+
quest.timesCompleted++;
|
|
110
|
+
this.logEvent(questId, 'completed');
|
|
111
|
+
this.emit('quest:completed', { quest, rewards: quest.rewards });
|
|
112
|
+
return { success: true, player: updatedPlayer, rewards: quest.rewards };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Apply a single reward
|
|
116
|
+
*/
|
|
117
|
+
applyReward(player, reward) {
|
|
118
|
+
switch (reward.type) {
|
|
119
|
+
case 'exp':
|
|
120
|
+
return addExperience(player, Number(reward.value));
|
|
121
|
+
case 'gold':
|
|
122
|
+
return addGold(player, Number(reward.value));
|
|
123
|
+
case 'item':
|
|
124
|
+
return addToInventory(player, {
|
|
125
|
+
id: String(reward.value),
|
|
126
|
+
type: 'consumable',
|
|
127
|
+
name: reward.description || String(reward.value),
|
|
128
|
+
description: '',
|
|
129
|
+
quantity: reward.quantity || 1,
|
|
130
|
+
});
|
|
131
|
+
// Other reward types handled by other systems
|
|
132
|
+
default:
|
|
133
|
+
return player;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Fail a quest
|
|
138
|
+
*/
|
|
139
|
+
failQuest(questId, reason = 'Unknown') {
|
|
140
|
+
const quest = this.activeQuests.get(questId);
|
|
141
|
+
if (!quest)
|
|
142
|
+
return false;
|
|
143
|
+
quest.status = 'failed';
|
|
144
|
+
this.activeQuests.delete(questId);
|
|
145
|
+
this.failedQuestIds.add(questId);
|
|
146
|
+
this.logEvent(questId, 'failed', reason);
|
|
147
|
+
this.emit('quest:failed', { quest, reason });
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Abandon a quest
|
|
152
|
+
*/
|
|
153
|
+
abandonQuest(questId) {
|
|
154
|
+
const quest = this.activeQuests.get(questId);
|
|
155
|
+
if (!quest)
|
|
156
|
+
return false;
|
|
157
|
+
this.activeQuests.delete(questId);
|
|
158
|
+
this.logEvent(questId, 'abandoned');
|
|
159
|
+
this.emit('quest:abandoned', quest);
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Check for timed quest failures
|
|
164
|
+
*/
|
|
165
|
+
checkTimeouts() {
|
|
166
|
+
const failed = [];
|
|
167
|
+
const now = Date.now();
|
|
168
|
+
for (const quest of this.activeQuests.values()) {
|
|
169
|
+
if (quest.timeLimit && quest.startTime) {
|
|
170
|
+
const elapsed = (now - quest.startTime) / 1000;
|
|
171
|
+
if (elapsed >= quest.timeLimit) {
|
|
172
|
+
this.failQuest(quest.id, 'Time limit exceeded');
|
|
173
|
+
failed.push(quest);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return failed;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get time remaining for a quest
|
|
181
|
+
*/
|
|
182
|
+
getTimeRemaining(questId) {
|
|
183
|
+
const quest = this.activeQuests.get(questId);
|
|
184
|
+
if (!quest || !quest.timeLimit || !quest.startTime)
|
|
185
|
+
return null;
|
|
186
|
+
const elapsed = (Date.now() - quest.startTime) / 1000;
|
|
187
|
+
return Math.max(0, quest.timeLimit - elapsed);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get active quests
|
|
191
|
+
*/
|
|
192
|
+
getActiveQuests() {
|
|
193
|
+
return Array.from(this.activeQuests.values());
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get quest by ID
|
|
197
|
+
*/
|
|
198
|
+
getQuest(questId) {
|
|
199
|
+
return this.activeQuests.get(questId);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Check if quest is completed (ever)
|
|
203
|
+
*/
|
|
204
|
+
isQuestCompleted(questId) {
|
|
205
|
+
return this.completedQuestIds.has(questId);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get quests from a specific NPC
|
|
209
|
+
*/
|
|
210
|
+
getQuestsFromNPC(npcId) {
|
|
211
|
+
return this.getActiveQuests().filter(q => q.giverNPCId === npcId);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Log a quest event
|
|
215
|
+
*/
|
|
216
|
+
logEvent(questId, event, details) {
|
|
217
|
+
this.questLog.push({
|
|
218
|
+
questId,
|
|
219
|
+
timestamp: Date.now(),
|
|
220
|
+
event,
|
|
221
|
+
details,
|
|
222
|
+
});
|
|
223
|
+
// Cap log size
|
|
224
|
+
if (this.questLog.length > 200) {
|
|
225
|
+
this.questLog = this.questLog.slice(-200);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// =========================================================================
|
|
229
|
+
// Event System
|
|
230
|
+
// =========================================================================
|
|
231
|
+
on(event, callback) {
|
|
232
|
+
if (!this.eventListeners.has(event)) {
|
|
233
|
+
this.eventListeners.set(event, new Set());
|
|
234
|
+
}
|
|
235
|
+
this.eventListeners.get(event).add(callback);
|
|
236
|
+
}
|
|
237
|
+
off(event, callback) {
|
|
238
|
+
this.eventListeners.get(event)?.delete(callback);
|
|
239
|
+
}
|
|
240
|
+
emit(event, data) {
|
|
241
|
+
this.eventListeners.get(event)?.forEach(cb => cb(data));
|
|
242
|
+
}
|
|
243
|
+
// =========================================================================
|
|
244
|
+
// Save/Load
|
|
245
|
+
// =========================================================================
|
|
246
|
+
save() {
|
|
247
|
+
return {
|
|
248
|
+
activeQuests: Array.from(this.activeQuests.values()),
|
|
249
|
+
completedQuestIds: Array.from(this.completedQuestIds),
|
|
250
|
+
failedQuestIds: Array.from(this.failedQuestIds),
|
|
251
|
+
questLog: this.questLog,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
load(data) {
|
|
255
|
+
this.activeQuests.clear();
|
|
256
|
+
for (const quest of data.activeQuests) {
|
|
257
|
+
this.activeQuests.set(quest.id, quest);
|
|
258
|
+
}
|
|
259
|
+
this.completedQuestIds = new Set(data.completedQuestIds);
|
|
260
|
+
this.failedQuestIds = new Set(data.failedQuestIds);
|
|
261
|
+
this.questLog = data.questLog;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Singleton
|
|
265
|
+
let managerInstance = null;
|
|
266
|
+
export function getQuestManager() {
|
|
267
|
+
if (!managerInstance) {
|
|
268
|
+
managerInstance = new QuestManager();
|
|
269
|
+
}
|
|
270
|
+
return managerInstance;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=QuestManager.js.map
|
|
273
|
+
//# debugId=2a15a3b6-8d3e-50d1-8025-703f4e3fb569
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuestManager.js","sources":["quest/QuestManager.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Quest Manager - Handles quest lifecycle, progress tracking, and rewards\r\n */\r\n\r\nimport type {\r\n Quest,\r\n QuestStatus,\r\n QuestObjective,\r\n QuestReward,\r\n QuestLogEntry,\r\n QuestSaveData,\r\n} from './types.js';\r\nimport type { Player } from '../core/types.js';\r\nimport { addExperience, addGold, addToInventory } from '../core/Player.js';\r\n\r\nexport class QuestManager {\r\n private activeQuests: Map<string, Quest> = new Map();\r\n private completedQuestIds: Set<string> = new Set();\r\n private failedQuestIds: Set<string> = new Set();\r\n private questLog: QuestLogEntry[] = [];\r\n private eventListeners: Map<string, Set<(data: unknown) => void>> = new Map();\r\n\r\n /**\r\n * Accept a quest\r\n */\r\n acceptQuest(quest: Quest): boolean {\r\n // Check prerequisites\r\n if (quest.prerequisiteQuestId && !this.completedQuestIds.has(quest.prerequisiteQuestId)) {\r\n return false;\r\n }\r\n\r\n // Check if already active\r\n if (this.activeQuests.has(quest.id)) {\r\n return false;\r\n }\r\n\r\n // Activate quest\r\n const activeQuest: Quest = {\r\n ...quest,\r\n status: 'active',\r\n startTime: Date.now(),\r\n };\r\n\r\n this.activeQuests.set(quest.id, activeQuest);\r\n this.logEvent(quest.id, 'accepted');\r\n this.emit('quest:accepted', activeQuest);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Update quest progress\r\n */\r\n updateProgress(\r\n eventType: 'kill' | 'collect' | 'reach' | 'talk',\r\n targetId: string,\r\n amount: number = 1\r\n ): Quest[] {\r\n const updatedQuests: Quest[] = [];\r\n\r\n for (const quest of this.activeQuests.values()) {\r\n if (quest.status !== 'active') continue;\r\n\r\n let questUpdated = false;\r\n\r\n for (const objective of quest.objectives) {\r\n if (objective.isComplete) continue;\r\n if (objective.type !== eventType) continue;\r\n\r\n // Check if target matches (supports wildcards)\r\n if (this.matchesTarget(targetId, objective.target)) {\r\n objective.current = Math.min(objective.current + amount, objective.required);\r\n objective.isComplete = objective.current >= objective.required;\r\n questUpdated = true;\r\n\r\n // Reveal hidden objectives if discovered\r\n if (objective.isHidden && objective.current > 0) {\r\n objective.isHidden = false;\r\n }\r\n }\r\n }\r\n\r\n if (questUpdated) {\r\n this.logEvent(quest.id, 'progress', `${eventType}: ${targetId}`);\r\n this.emit('quest:progress', quest);\r\n updatedQuests.push(quest);\r\n\r\n // Check if all objectives complete\r\n if (quest.objectives.every(o => o.isComplete)) {\r\n quest.status = 'completed';\r\n quest.completedTime = Date.now();\r\n this.emit('quest:ready_to_complete', quest);\r\n }\r\n }\r\n }\r\n\r\n return updatedQuests;\r\n }\r\n\r\n /**\r\n * Check if target matches objective target (supports wildcards)\r\n */\r\n private matchesTarget(targetId: string, pattern: string): boolean {\r\n if (pattern === targetId) return true;\r\n \r\n // Support wildcard patterns like \"enemy_*\" or \"floor_8_*\"\r\n if (pattern.includes('*')) {\r\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\r\n return regex.test(targetId);\r\n }\r\n\r\n // Support category matching like \"any_floor_1_room\"\r\n if (pattern.startsWith('any_')) {\r\n const category = pattern.slice(4);\r\n return targetId.includes(category);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Turn in a completed quest\r\n */\r\n completeQuest(questId: string, player: Player): { success: boolean; player: Player; rewards: QuestReward[] } {\r\n const quest = this.activeQuests.get(questId);\r\n \r\n if (!quest || quest.status !== 'completed') {\r\n return { success: false, player, rewards: [] };\r\n }\r\n\r\n // Apply rewards\r\n let updatedPlayer = player;\r\n for (const reward of quest.rewards) {\r\n updatedPlayer = this.applyReward(updatedPlayer, reward);\r\n }\r\n\r\n // Move to completed\r\n this.activeQuests.delete(questId);\r\n this.completedQuestIds.add(questId);\r\n quest.timesCompleted++;\r\n\r\n this.logEvent(questId, 'completed');\r\n this.emit('quest:completed', { quest, rewards: quest.rewards });\r\n\r\n return { success: true, player: updatedPlayer, rewards: quest.rewards };\r\n }\r\n\r\n /**\r\n * Apply a single reward\r\n */\r\n private applyReward(player: Player, reward: QuestReward): Player {\r\n switch (reward.type) {\r\n case 'exp':\r\n return addExperience(player, Number(reward.value));\r\n case 'gold':\r\n return addGold(player, Number(reward.value));\r\n case 'item':\r\n return addToInventory(player, {\r\n id: String(reward.value),\r\n type: 'consumable',\r\n name: reward.description || String(reward.value),\r\n description: '',\r\n quantity: reward.quantity || 1,\r\n });\r\n // Other reward types handled by other systems\r\n default:\r\n return player;\r\n }\r\n }\r\n\r\n /**\r\n * Fail a quest\r\n */\r\n failQuest(questId: string, reason: string = 'Unknown'): boolean {\r\n const quest = this.activeQuests.get(questId);\r\n \r\n if (!quest) return false;\r\n\r\n quest.status = 'failed';\r\n this.activeQuests.delete(questId);\r\n this.failedQuestIds.add(questId);\r\n\r\n this.logEvent(questId, 'failed', reason);\r\n this.emit('quest:failed', { quest, reason });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Abandon a quest\r\n */\r\n abandonQuest(questId: string): boolean {\r\n const quest = this.activeQuests.get(questId);\r\n \r\n if (!quest) return false;\r\n\r\n this.activeQuests.delete(questId);\r\n this.logEvent(questId, 'abandoned');\r\n this.emit('quest:abandoned', quest);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Check for timed quest failures\r\n */\r\n checkTimeouts(): Quest[] {\r\n const failed: Quest[] = [];\r\n const now = Date.now();\r\n\r\n for (const quest of this.activeQuests.values()) {\r\n if (quest.timeLimit && quest.startTime) {\r\n const elapsed = (now - quest.startTime) / 1000;\r\n if (elapsed >= quest.timeLimit) {\r\n this.failQuest(quest.id, 'Time limit exceeded');\r\n failed.push(quest);\r\n }\r\n }\r\n }\r\n\r\n return failed;\r\n }\r\n\r\n /**\r\n * Get time remaining for a quest\r\n */\r\n getTimeRemaining(questId: string): number | null {\r\n const quest = this.activeQuests.get(questId);\r\n \r\n if (!quest || !quest.timeLimit || !quest.startTime) return null;\r\n\r\n const elapsed = (Date.now() - quest.startTime) / 1000;\r\n return Math.max(0, quest.timeLimit - elapsed);\r\n }\r\n\r\n /**\r\n * Get active quests\r\n */\r\n getActiveQuests(): Quest[] {\r\n return Array.from(this.activeQuests.values());\r\n }\r\n\r\n /**\r\n * Get quest by ID\r\n */\r\n getQuest(questId: string): Quest | undefined {\r\n return this.activeQuests.get(questId);\r\n }\r\n\r\n /**\r\n * Check if quest is completed (ever)\r\n */\r\n isQuestCompleted(questId: string): boolean {\r\n return this.completedQuestIds.has(questId);\r\n }\r\n\r\n /**\r\n * Get quests from a specific NPC\r\n */\r\n getQuestsFromNPC(npcId: string): Quest[] {\r\n return this.getActiveQuests().filter(q => q.giverNPCId === npcId);\r\n }\r\n\r\n /**\r\n * Log a quest event\r\n */\r\n private logEvent(questId: string, event: QuestLogEntry['event'], details?: string): void {\r\n this.questLog.push({\r\n questId,\r\n timestamp: Date.now(),\r\n event,\r\n details,\r\n });\r\n\r\n // Cap log size\r\n if (this.questLog.length > 200) {\r\n this.questLog = this.questLog.slice(-200);\r\n }\r\n }\r\n\r\n // =========================================================================\r\n // Event System\r\n // =========================================================================\r\n\r\n on(event: string, callback: (data: unknown) => void): void {\r\n if (!this.eventListeners.has(event)) {\r\n this.eventListeners.set(event, new Set());\r\n }\r\n this.eventListeners.get(event)!.add(callback);\r\n }\r\n\r\n off(event: string, callback: (data: unknown) => void): void {\r\n this.eventListeners.get(event)?.delete(callback);\r\n }\r\n\r\n private emit(event: string, data: unknown): void {\r\n this.eventListeners.get(event)?.forEach(cb => cb(data));\r\n }\r\n\r\n // =========================================================================\r\n // Save/Load\r\n // =========================================================================\r\n\r\n save(): QuestSaveData {\r\n return {\r\n activeQuests: Array.from(this.activeQuests.values()),\r\n completedQuestIds: Array.from(this.completedQuestIds),\r\n failedQuestIds: Array.from(this.failedQuestIds),\r\n questLog: this.questLog,\r\n };\r\n }\r\n\r\n load(data: QuestSaveData): void {\r\n this.activeQuests.clear();\r\n for (const quest of data.activeQuests) {\r\n this.activeQuests.set(quest.id, quest);\r\n }\r\n \r\n this.completedQuestIds = new Set(data.completedQuestIds);\r\n this.failedQuestIds = new Set(data.failedQuestIds);\r\n this.questLog = data.questLog;\r\n }\r\n}\r\n\r\n// Singleton\r\nlet managerInstance: QuestManager | null = null;\r\n\r\nexport function getQuestManager(): QuestManager {\r\n if (!managerInstance) {\r\n managerInstance = new QuestManager();\r\n }\r\n return managerInstance;\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"2a15a3b6-8d3e-50d1-8025-703f4e3fb569"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["quest/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest Module Exports
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="39e77ce6-fc51-5b86-9055-fe76aebd8d21")}catch(e){}}();
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { QuestManager, getQuestManager } from './QuestManager.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
9
|
+
//# debugId=39e77ce6-fc51-5b86-9055-fe76aebd8d21
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["quest/index.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Quest Module Exports\r\n */\r\n\r\nexport * from './types.js';\r\nexport { QuestManager, getQuestManager } from './QuestManager.js';\r\n"],"names":[],"mappings":"AAAA;;GAEG;;;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC","debug_id":"39e77ce6-fc51-5b86-9055-fe76aebd8d21"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest System Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Quest types
|
|
6
|
+
*/
|
|
7
|
+
export type QuestType = 'kill' | 'collect' | 'explore' | 'deliver' | 'escort' | 'survive' | 'dialog';
|
|
8
|
+
/**
|
|
9
|
+
* Quest status
|
|
10
|
+
*/
|
|
11
|
+
export type QuestStatus = 'available' | 'active' | 'completed' | 'failed' | 'expired';
|
|
12
|
+
/**
|
|
13
|
+
* Quest objective
|
|
14
|
+
*/
|
|
15
|
+
export interface QuestObjective {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'kill' | 'collect' | 'reach' | 'talk' | 'survive' | 'deliver' | 'protect';
|
|
18
|
+
description: string;
|
|
19
|
+
target: string;
|
|
20
|
+
targetName: string;
|
|
21
|
+
required: number;
|
|
22
|
+
current: number;
|
|
23
|
+
isComplete: boolean;
|
|
24
|
+
isHidden?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Quest reward
|
|
28
|
+
*/
|
|
29
|
+
export interface QuestReward {
|
|
30
|
+
type: 'exp' | 'gold' | 'item' | 'affix' | 'reputation' | 'unlock';
|
|
31
|
+
value: number | string;
|
|
32
|
+
quantity?: number;
|
|
33
|
+
description?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Full quest definition
|
|
37
|
+
*/
|
|
38
|
+
export interface Quest {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
type: QuestType;
|
|
43
|
+
status: QuestStatus;
|
|
44
|
+
giverNPCId: string;
|
|
45
|
+
giverNPCName: string;
|
|
46
|
+
objectives: QuestObjective[];
|
|
47
|
+
rewards: QuestReward[];
|
|
48
|
+
timeLimit?: number;
|
|
49
|
+
startTime?: number;
|
|
50
|
+
completedTime?: number;
|
|
51
|
+
targetFloor?: number;
|
|
52
|
+
targetRoomId?: string;
|
|
53
|
+
prerequisiteQuestId?: string;
|
|
54
|
+
nextQuestId?: string;
|
|
55
|
+
giveDialog: string;
|
|
56
|
+
progressDialog: string;
|
|
57
|
+
completeDialog: string;
|
|
58
|
+
failDialog: string;
|
|
59
|
+
difficulty: 'easy' | 'medium' | 'hard' | 'legendary';
|
|
60
|
+
repeatable: boolean;
|
|
61
|
+
timesCompleted: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Quest log entry for tracking
|
|
65
|
+
*/
|
|
66
|
+
export interface QuestLogEntry {
|
|
67
|
+
questId: string;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
event: 'accepted' | 'progress' | 'completed' | 'failed' | 'abandoned';
|
|
70
|
+
details?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Quest manager save data
|
|
74
|
+
*/
|
|
75
|
+
export interface QuestSaveData {
|
|
76
|
+
activeQuests: Quest[];
|
|
77
|
+
completedQuestIds: string[];
|
|
78
|
+
failedQuestIds: string[];
|
|
79
|
+
questLog: QuestLogEntry[];
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["quest/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;IAClE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IAGpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,cAAc,EAAE,CAAC;IAG7B,OAAO,EAAE,WAAW,EAAE,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACrD,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest System Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fd49f492-bf4b-5bd9-ba4c-2125f7b68a5b")}catch(e){}}();
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
8
|
+
//# debugId=fd49f492-bf4b-5bd9-ba4c-2125f7b68a5b
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["quest/types.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Quest System Type Definitions\r\n */\r\n\r\n/**\r\n * Quest types\r\n */\r\nexport type QuestType = \r\n | 'kill' // Kill specific enemies\r\n | 'collect' // Collect items\r\n | 'explore' // Reach locations\r\n | 'deliver' // Bring item to NPC\r\n | 'escort' // Protect NPC\r\n | 'survive' // Survive for time/waves\r\n | 'dialog'; // Have conversation\r\n\r\n/**\r\n * Quest status\r\n */\r\nexport type QuestStatus = \r\n | 'available' // Can be accepted\r\n | 'active' // Currently in progress\r\n | 'completed' // Finished successfully\r\n | 'failed' // Failed (time/death)\r\n | 'expired'; // No longer available\r\n\r\n/**\r\n * Quest objective\r\n */\r\nexport interface QuestObjective {\r\n id: string;\r\n type: 'kill' | 'collect' | 'reach' | 'talk' | 'survive' | 'deliver' | 'protect';\r\n description: string;\r\n target: string; // Target ID or pattern\r\n targetName: string; // Display name\r\n required: number; // How many needed\r\n current: number; // Current progress\r\n isComplete: boolean;\r\n isHidden?: boolean; // Hidden objectives revealed on discovery\r\n}\r\n\r\n/**\r\n * Quest reward\r\n */\r\nexport interface QuestReward {\r\n type: 'exp' | 'gold' | 'item' | 'affix' | 'reputation' | 'unlock';\r\n value: number | string;\r\n quantity?: number;\r\n description?: string;\r\n}\r\n\r\n/**\r\n * Full quest definition\r\n */\r\nexport interface Quest {\r\n id: string;\r\n name: string;\r\n description: string;\r\n type: QuestType;\r\n status: QuestStatus;\r\n \r\n // Source\r\n giverNPCId: string; // NPC who gave the quest\r\n giverNPCName: string; // For display\r\n \r\n // Objectives\r\n objectives: QuestObjective[];\r\n \r\n // Rewards\r\n rewards: QuestReward[];\r\n \r\n // Time tracking (real time)\r\n timeLimit?: number; // Real seconds (0 = no limit)\r\n startTime?: number; // When quest was accepted\r\n completedTime?: number; // When quest was completed\r\n \r\n // Location hints\r\n targetFloor?: number;\r\n targetRoomId?: string;\r\n \r\n // Chain quests\r\n prerequisiteQuestId?: string;\r\n nextQuestId?: string;\r\n \r\n // Dialog\r\n giveDialog: string;\r\n progressDialog: string;\r\n completeDialog: string;\r\n failDialog: string;\r\n \r\n // Metadata\r\n difficulty: 'easy' | 'medium' | 'hard' | 'legendary';\r\n repeatable: boolean;\r\n timesCompleted: number;\r\n}\r\n\r\n/**\r\n * Quest log entry for tracking\r\n */\r\nexport interface QuestLogEntry {\r\n questId: string;\r\n timestamp: number;\r\n event: 'accepted' | 'progress' | 'completed' | 'failed' | 'abandoned';\r\n details?: string;\r\n}\r\n\r\n/**\r\n * Quest manager save data\r\n */\r\nexport interface QuestSaveData {\r\n activeQuests: Quest[];\r\n completedQuestIds: string[];\r\n failedQuestIds: string[];\r\n questLog: QuestLogEntry[];\r\n}\r\n"],"names":[],"mappings":"AAAA;;GAEG","debug_id":"fd49f492-bf4b-5bd9-ba4c-2125f7b68a5b"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy Executor
|
|
3
|
+
* Executes strategy decisions during gameplay based on the StrategyStateMachine
|
|
4
|
+
*
|
|
5
|
+
* This module makes deterministic decisions based on the parsed strategy.
|
|
6
|
+
* No AI calls are made during execution - all decisions are rule-based.
|
|
7
|
+
*/
|
|
8
|
+
import type { StrategyStateMachine, ResourceStrategy, Enemy, DungeonRoom, InventoryItem, NPC, GameEvent } from '../core/types.js';
|
|
9
|
+
export interface CombatContext {
|
|
10
|
+
player: {
|
|
11
|
+
hp: number;
|
|
12
|
+
maxHp: number;
|
|
13
|
+
mp: number;
|
|
14
|
+
maxMp: number;
|
|
15
|
+
};
|
|
16
|
+
enemies: Enemy[];
|
|
17
|
+
turn: number;
|
|
18
|
+
isBossFight: boolean;
|
|
19
|
+
inventory: InventoryItem[];
|
|
20
|
+
}
|
|
21
|
+
export interface ExplorationContext {
|
|
22
|
+
currentRoom: DungeonRoom;
|
|
23
|
+
availableRooms: DungeonRoom[];
|
|
24
|
+
exploredRooms: string[];
|
|
25
|
+
player: {
|
|
26
|
+
hp: number;
|
|
27
|
+
maxHp: number;
|
|
28
|
+
mp: number;
|
|
29
|
+
maxMp: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface EncounterContext {
|
|
33
|
+
type: 'npc' | 'event' | 'shop' | 'trap' | 'puzzle';
|
|
34
|
+
npc?: NPC;
|
|
35
|
+
event?: GameEvent;
|
|
36
|
+
riskLevel?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface CombatDecision {
|
|
39
|
+
action: 'attack' | 'skill' | 'item' | 'retreat' | 'defend';
|
|
40
|
+
targetId?: string;
|
|
41
|
+
itemId?: string;
|
|
42
|
+
skillId?: string;
|
|
43
|
+
reason: string;
|
|
44
|
+
}
|
|
45
|
+
export interface ExplorationDecision {
|
|
46
|
+
action: 'move' | 'rest' | 'search' | 'retreat';
|
|
47
|
+
targetRoomId?: string;
|
|
48
|
+
reason: string;
|
|
49
|
+
}
|
|
50
|
+
export interface EncounterDecision {
|
|
51
|
+
action: 'engage' | 'skip' | 'buy' | 'sell' | 'accept' | 'decline';
|
|
52
|
+
itemId?: string;
|
|
53
|
+
questId?: string;
|
|
54
|
+
reason: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ItemUseDecision {
|
|
57
|
+
shouldUse: boolean;
|
|
58
|
+
itemId?: string;
|
|
59
|
+
itemType?: string;
|
|
60
|
+
reason: string;
|
|
61
|
+
}
|
|
62
|
+
export declare class StrategyExecutor {
|
|
63
|
+
private strategy;
|
|
64
|
+
constructor(strategy: StrategyStateMachine);
|
|
65
|
+
/**
|
|
66
|
+
* Update the current strategy
|
|
67
|
+
*/
|
|
68
|
+
setStrategy(strategy: StrategyStateMachine): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get the current strategy
|
|
71
|
+
*/
|
|
72
|
+
getStrategy(): StrategyStateMachine;
|
|
73
|
+
/**
|
|
74
|
+
* Decide combat action based on current context
|
|
75
|
+
*/
|
|
76
|
+
decideCombatAction(context: CombatContext): CombatDecision;
|
|
77
|
+
/**
|
|
78
|
+
* Check if should retreat from combat
|
|
79
|
+
*/
|
|
80
|
+
private shouldRetreat;
|
|
81
|
+
/**
|
|
82
|
+
* Check if should use an item in combat
|
|
83
|
+
*/
|
|
84
|
+
private shouldUseItemInCombat;
|
|
85
|
+
/**
|
|
86
|
+
* Select target based on priority
|
|
87
|
+
*/
|
|
88
|
+
private selectTarget;
|
|
89
|
+
/**
|
|
90
|
+
* Find target matching priority type
|
|
91
|
+
*/
|
|
92
|
+
private findTargetByPriority;
|
|
93
|
+
/**
|
|
94
|
+
* Select target by focus strategy
|
|
95
|
+
*/
|
|
96
|
+
private selectByFocusTarget;
|
|
97
|
+
/**
|
|
98
|
+
* Check enemy type based on name/abilities
|
|
99
|
+
*/
|
|
100
|
+
private isEnemyType;
|
|
101
|
+
/**
|
|
102
|
+
* Decide exploration action
|
|
103
|
+
*/
|
|
104
|
+
decideExplorationAction(context: ExplorationContext): ExplorationDecision;
|
|
105
|
+
/**
|
|
106
|
+
* Check if current position is a dead end
|
|
107
|
+
*/
|
|
108
|
+
private isDeadEnd;
|
|
109
|
+
/**
|
|
110
|
+
* Handle dead end based on strategy
|
|
111
|
+
*/
|
|
112
|
+
private handleDeadEnd;
|
|
113
|
+
/**
|
|
114
|
+
* Check if can rest in current room
|
|
115
|
+
*/
|
|
116
|
+
private canRestInRoom;
|
|
117
|
+
/**
|
|
118
|
+
* Select room based on priority
|
|
119
|
+
*/
|
|
120
|
+
private selectRoomByPriority;
|
|
121
|
+
/**
|
|
122
|
+
* Decide encounter action
|
|
123
|
+
*/
|
|
124
|
+
decideEncounterAction(context: EncounterContext): EncounterDecision;
|
|
125
|
+
/**
|
|
126
|
+
* Decide NPC interaction
|
|
127
|
+
*/
|
|
128
|
+
private decideNPCAction;
|
|
129
|
+
/**
|
|
130
|
+
* Decide event action
|
|
131
|
+
*/
|
|
132
|
+
private decideEventAction;
|
|
133
|
+
/**
|
|
134
|
+
* Decide shop action
|
|
135
|
+
*/
|
|
136
|
+
private decideShopAction;
|
|
137
|
+
/**
|
|
138
|
+
* Check if should take resource action (outside combat)
|
|
139
|
+
*/
|
|
140
|
+
checkResourceAction(player: {
|
|
141
|
+
hp: number;
|
|
142
|
+
maxHp: number;
|
|
143
|
+
mp: number;
|
|
144
|
+
maxMp: number;
|
|
145
|
+
gold: number;
|
|
146
|
+
}): {
|
|
147
|
+
action: ResourceStrategy['hpAction'] | null;
|
|
148
|
+
reason: string;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Find item by type in inventory
|
|
152
|
+
*/
|
|
153
|
+
private findItemByType;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a strategy executor with the given strategy
|
|
157
|
+
*/
|
|
158
|
+
export declare function createStrategyExecutor(strategy: StrategyStateMachine): StrategyExecutor;
|
|
159
|
+
//# sourceMappingURL=StrategyExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrategyExecutor.d.ts","sourceRoot":"/","sources":["strategy/StrategyExecutor.ts"],"names":[],"mappings":"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"}
|