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.
Files changed (478) hide show
  1. package/README.md +171 -0
  2. package/dist/affix/AffixRegistry.d.ts +68 -0
  3. package/dist/affix/AffixRegistry.d.ts.map +1 -0
  4. package/dist/affix/AffixRegistry.js +245 -0
  5. package/dist/affix/AffixRegistry.js.map +1 -0
  6. package/dist/affix/PluginLoader.d.ts +66 -0
  7. package/dist/affix/PluginLoader.d.ts.map +1 -0
  8. package/dist/affix/PluginLoader.js +321 -0
  9. package/dist/affix/PluginLoader.js.map +1 -0
  10. package/dist/affix/builtin.d.ts +6 -0
  11. package/dist/affix/builtin.d.ts.map +1 -0
  12. package/dist/affix/builtin.js +311 -0
  13. package/dist/affix/builtin.js.map +1 -0
  14. package/dist/affix/index.d.ts +8 -0
  15. package/dist/affix/index.d.ts.map +1 -0
  16. package/dist/affix/index.js +11 -0
  17. package/dist/affix/index.js.map +1 -0
  18. package/dist/affix/types.d.ts +152 -0
  19. package/dist/affix/types.d.ts.map +1 -0
  20. package/dist/affix/types.js +8 -0
  21. package/dist/affix/types.js.map +1 -0
  22. package/dist/ai/PlayKitClient.d.ts +208 -0
  23. package/dist/ai/PlayKitClient.d.ts.map +1 -0
  24. package/dist/ai/PlayKitClient.js +721 -0
  25. package/dist/ai/PlayKitClient.js.map +1 -0
  26. package/dist/ai/index.d.ts +5 -0
  27. package/dist/ai/index.d.ts.map +1 -0
  28. package/dist/ai/index.js +8 -0
  29. package/dist/ai/index.js.map +1 -0
  30. package/dist/app/App.d.ts +85 -0
  31. package/dist/app/App.d.ts.map +1 -0
  32. package/dist/app/App.js +296 -0
  33. package/dist/app/App.js.map +1 -0
  34. package/dist/app/EventBus.d.ts +222 -0
  35. package/dist/app/EventBus.d.ts.map +1 -0
  36. package/dist/app/EventBus.js +88 -0
  37. package/dist/app/EventBus.js.map +1 -0
  38. package/dist/app/Keybind.d.ts +83 -0
  39. package/dist/app/Keybind.d.ts.map +1 -0
  40. package/dist/app/Keybind.js +184 -0
  41. package/dist/app/Keybind.js.map +1 -0
  42. package/dist/app/Router.d.ts +123 -0
  43. package/dist/app/Router.d.ts.map +1 -0
  44. package/dist/app/Router.js +142 -0
  45. package/dist/app/Router.js.map +1 -0
  46. package/dist/app/ScreenManager.d.ts +97 -0
  47. package/dist/app/ScreenManager.d.ts.map +1 -0
  48. package/dist/app/ScreenManager.js +216 -0
  49. package/dist/app/ScreenManager.js.map +1 -0
  50. package/dist/app/index.d.ts +14 -0
  51. package/dist/app/index.d.ts.map +1 -0
  52. package/dist/app/index.js +19 -0
  53. package/dist/app/index.js.map +1 -0
  54. package/dist/app/screens/BaseScreen.d.ts +101 -0
  55. package/dist/app/screens/BaseScreen.d.ts.map +1 -0
  56. package/dist/app/screens/BaseScreen.js +132 -0
  57. package/dist/app/screens/BaseScreen.js.map +1 -0
  58. package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
  59. package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
  60. package/dist/app/screens/CharacterCreationScreen.js +467 -0
  61. package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
  62. package/dist/app/screens/CombatScreen.d.ts +30 -0
  63. package/dist/app/screens/CombatScreen.d.ts.map +1 -0
  64. package/dist/app/screens/CombatScreen.js +309 -0
  65. package/dist/app/screens/CombatScreen.js.map +1 -0
  66. package/dist/app/screens/DialogScreen.d.ts +29 -0
  67. package/dist/app/screens/DialogScreen.d.ts.map +1 -0
  68. package/dist/app/screens/DialogScreen.js +295 -0
  69. package/dist/app/screens/DialogScreen.js.map +1 -0
  70. package/dist/app/screens/ExploreScreen.d.ts +50 -0
  71. package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
  72. package/dist/app/screens/ExploreScreen.js +308 -0
  73. package/dist/app/screens/ExploreScreen.js.map +1 -0
  74. package/dist/app/screens/HelpScreen.d.ts +12 -0
  75. package/dist/app/screens/HelpScreen.d.ts.map +1 -0
  76. package/dist/app/screens/HelpScreen.js +155 -0
  77. package/dist/app/screens/HelpScreen.js.map +1 -0
  78. package/dist/app/screens/InventoryScreen.d.ts +27 -0
  79. package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
  80. package/dist/app/screens/InventoryScreen.js +326 -0
  81. package/dist/app/screens/InventoryScreen.js.map +1 -0
  82. package/dist/app/screens/PrologueScreen.d.ts +24 -0
  83. package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
  84. package/dist/app/screens/PrologueScreen.js +176 -0
  85. package/dist/app/screens/PrologueScreen.js.map +1 -0
  86. package/dist/app/screens/TitleScreen.d.ts +42 -0
  87. package/dist/app/screens/TitleScreen.d.ts.map +1 -0
  88. package/dist/app/screens/TitleScreen.js +380 -0
  89. package/dist/app/screens/TitleScreen.js.map +1 -0
  90. package/dist/app/screens/TravelScreen.d.ts +22 -0
  91. package/dist/app/screens/TravelScreen.d.ts.map +1 -0
  92. package/dist/app/screens/TravelScreen.js +122 -0
  93. package/dist/app/screens/TravelScreen.js.map +1 -0
  94. package/dist/app/screens/index.d.ts +14 -0
  95. package/dist/app/screens/index.d.ts.map +1 -0
  96. package/dist/app/screens/index.js +17 -0
  97. package/dist/app/screens/index.js.map +1 -0
  98. package/dist/commands/CommandRegistry.d.ts +91 -0
  99. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  100. package/dist/commands/CommandRegistry.js +159 -0
  101. package/dist/commands/CommandRegistry.js.map +1 -0
  102. package/dist/commands/index.d.ts +7 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +10 -0
  105. package/dist/commands/index.js.map +1 -0
  106. package/dist/core/Actor.d.ts +103 -0
  107. package/dist/core/Actor.d.ts.map +1 -0
  108. package/dist/core/Actor.js +409 -0
  109. package/dist/core/Actor.js.map +1 -0
  110. package/dist/core/Combat.d.ts +37 -0
  111. package/dist/core/Combat.d.ts.map +1 -0
  112. package/dist/core/Combat.js +294 -0
  113. package/dist/core/Combat.js.map +1 -0
  114. package/dist/core/DungeonRunner.d.ts +169 -0
  115. package/dist/core/DungeonRunner.d.ts.map +1 -0
  116. package/dist/core/DungeonRunner.js +627 -0
  117. package/dist/core/DungeonRunner.js.map +1 -0
  118. package/dist/core/Game.d.ts +133 -0
  119. package/dist/core/Game.d.ts.map +1 -0
  120. package/dist/core/Game.js +644 -0
  121. package/dist/core/Game.js.map +1 -0
  122. package/dist/core/IdleCombat.d.ts +61 -0
  123. package/dist/core/IdleCombat.d.ts.map +1 -0
  124. package/dist/core/IdleCombat.js +461 -0
  125. package/dist/core/IdleCombat.js.map +1 -0
  126. package/dist/core/IdleGameManager.d.ts +198 -0
  127. package/dist/core/IdleGameManager.d.ts.map +1 -0
  128. package/dist/core/IdleGameManager.js +688 -0
  129. package/dist/core/IdleGameManager.js.map +1 -0
  130. package/dist/core/IdleSaveManager.d.ts +109 -0
  131. package/dist/core/IdleSaveManager.d.ts.map +1 -0
  132. package/dist/core/IdleSaveManager.js +296 -0
  133. package/dist/core/IdleSaveManager.js.map +1 -0
  134. package/dist/core/NewGameFlowManager.d.ts +64 -0
  135. package/dist/core/NewGameFlowManager.d.ts.map +1 -0
  136. package/dist/core/NewGameFlowManager.js +153 -0
  137. package/dist/core/NewGameFlowManager.js.map +1 -0
  138. package/dist/core/Player.d.ts +65 -0
  139. package/dist/core/Player.d.ts.map +1 -0
  140. package/dist/core/Player.js +261 -0
  141. package/dist/core/Player.js.map +1 -0
  142. package/dist/core/RoomHandlers.d.ts +75 -0
  143. package/dist/core/RoomHandlers.d.ts.map +1 -0
  144. package/dist/core/RoomHandlers.js +383 -0
  145. package/dist/core/RoomHandlers.js.map +1 -0
  146. package/dist/core/SaveManager.d.ts +84 -0
  147. package/dist/core/SaveManager.d.ts.map +1 -0
  148. package/dist/core/SaveManager.js +281 -0
  149. package/dist/core/SaveManager.js.map +1 -0
  150. package/dist/core/SaveMigration.d.ts +69 -0
  151. package/dist/core/SaveMigration.d.ts.map +1 -0
  152. package/dist/core/SaveMigration.js +408 -0
  153. package/dist/core/SaveMigration.js.map +1 -0
  154. package/dist/core/StateAdapter.d.ts +79 -0
  155. package/dist/core/StateAdapter.d.ts.map +1 -0
  156. package/dist/core/StateAdapter.js +397 -0
  157. package/dist/core/StateAdapter.js.map +1 -0
  158. package/dist/core/Team.d.ts +145 -0
  159. package/dist/core/Team.d.ts.map +1 -0
  160. package/dist/core/Team.js +371 -0
  161. package/dist/core/Team.js.map +1 -0
  162. package/dist/core/TeamCombat.d.ts +88 -0
  163. package/dist/core/TeamCombat.d.ts.map +1 -0
  164. package/dist/core/TeamCombat.js +405 -0
  165. package/dist/core/TeamCombat.js.map +1 -0
  166. package/dist/core/TeamDungeonRunner.d.ts +186 -0
  167. package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
  168. package/dist/core/TeamDungeonRunner.js +758 -0
  169. package/dist/core/TeamDungeonRunner.js.map +1 -0
  170. package/dist/core/TimeManager.d.ts +114 -0
  171. package/dist/core/TimeManager.d.ts.map +1 -0
  172. package/dist/core/TimeManager.js +318 -0
  173. package/dist/core/TimeManager.js.map +1 -0
  174. package/dist/core/index.d.ts +9 -0
  175. package/dist/core/index.d.ts.map +1 -0
  176. package/dist/core/index.js +12 -0
  177. package/dist/core/index.js.map +1 -0
  178. package/dist/core/timeConstants.d.ts +135 -0
  179. package/dist/core/timeConstants.d.ts.map +1 -0
  180. package/dist/core/timeConstants.js +157 -0
  181. package/dist/core/timeConstants.js.map +1 -0
  182. package/dist/core/types.d.ts +780 -0
  183. package/dist/core/types.d.ts.map +1 -0
  184. package/dist/core/types.js +16 -0
  185. package/dist/core/types.js.map +1 -0
  186. package/dist/data/continents/index.d.ts +163 -0
  187. package/dist/data/continents/index.d.ts.map +1 -0
  188. package/dist/data/continents/index.js +31 -0
  189. package/dist/data/continents/index.js.map +1 -0
  190. package/dist/data/continents/verdantia.d.ts +294 -0
  191. package/dist/data/continents/verdantia.d.ts.map +1 -0
  192. package/dist/data/continents/verdantia.js +327 -0
  193. package/dist/data/continents/verdantia.js.map +1 -0
  194. package/dist/handlers/DialogHandler.d.ts +95 -0
  195. package/dist/handlers/DialogHandler.d.ts.map +1 -0
  196. package/dist/handlers/DialogHandler.js +450 -0
  197. package/dist/handlers/DialogHandler.js.map +1 -0
  198. package/dist/handlers/SaveLoadHandler.d.ts +60 -0
  199. package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
  200. package/dist/handlers/SaveLoadHandler.js +187 -0
  201. package/dist/handlers/SaveLoadHandler.js.map +1 -0
  202. package/dist/handlers/TitleScreenHandler.d.ts +43 -0
  203. package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
  204. package/dist/handlers/TitleScreenHandler.js +508 -0
  205. package/dist/handlers/TitleScreenHandler.js.map +1 -0
  206. package/dist/handlers/WorkshopHandler.d.ts +75 -0
  207. package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
  208. package/dist/handlers/WorkshopHandler.js +401 -0
  209. package/dist/handlers/WorkshopHandler.js.map +1 -0
  210. package/dist/handlers/index.d.ts +12 -0
  211. package/dist/handlers/index.d.ts.map +1 -0
  212. package/dist/handlers/index.js +14 -0
  213. package/dist/handlers/index.js.map +1 -0
  214. package/dist/handlers/types.d.ts +34 -0
  215. package/dist/handlers/types.d.ts.map +1 -0
  216. package/dist/handlers/types.js +8 -0
  217. package/dist/handlers/types.js.map +1 -0
  218. package/dist/i18n/en.d.ts +3 -0
  219. package/dist/i18n/en.d.ts.map +1 -0
  220. package/dist/i18n/en.js +130 -0
  221. package/dist/i18n/en.js.map +1 -0
  222. package/dist/i18n/index.d.ts +40 -0
  223. package/dist/i18n/index.d.ts.map +1 -0
  224. package/dist/i18n/index.js +105 -0
  225. package/dist/i18n/index.js.map +1 -0
  226. package/dist/i18n/types.d.ts +133 -0
  227. package/dist/i18n/types.d.ts.map +1 -0
  228. package/dist/i18n/types.js +8 -0
  229. package/dist/i18n/types.js.map +1 -0
  230. package/dist/i18n/zh.d.ts +3 -0
  231. package/dist/i18n/zh.d.ts.map +1 -0
  232. package/dist/i18n/zh.js +130 -0
  233. package/dist/i18n/zh.js.map +1 -0
  234. package/dist/instrument.d.ts +8 -0
  235. package/dist/instrument.d.ts.map +1 -0
  236. package/dist/instrument.js +33 -0
  237. package/dist/instrument.js.map +1 -0
  238. package/dist/main-new.d.ts +12 -0
  239. package/dist/main-new.d.ts.map +1 -0
  240. package/dist/main-new.js +32 -0
  241. package/dist/main-new.js.map +1 -0
  242. package/dist/main.d.ts +7 -0
  243. package/dist/main.d.ts.map +1 -0
  244. package/dist/main.js +2816 -0
  245. package/dist/main.js.map +1 -0
  246. package/dist/map/ContinentManager.d.ts +88 -0
  247. package/dist/map/ContinentManager.d.ts.map +1 -0
  248. package/dist/map/ContinentManager.js +241 -0
  249. package/dist/map/ContinentManager.js.map +1 -0
  250. package/dist/map/DungeonGenerator.d.ts +32 -0
  251. package/dist/map/DungeonGenerator.d.ts.map +1 -0
  252. package/dist/map/DungeonGenerator.js +615 -0
  253. package/dist/map/DungeonGenerator.js.map +1 -0
  254. package/dist/map/MapGenerator.d.ts +27 -0
  255. package/dist/map/MapGenerator.d.ts.map +1 -0
  256. package/dist/map/MapGenerator.js +485 -0
  257. package/dist/map/MapGenerator.js.map +1 -0
  258. package/dist/map/index.d.ts +5 -0
  259. package/dist/map/index.d.ts.map +1 -0
  260. package/dist/map/index.js +8 -0
  261. package/dist/map/index.js.map +1 -0
  262. package/dist/npc/NPCGenerator.d.ts +68 -0
  263. package/dist/npc/NPCGenerator.d.ts.map +1 -0
  264. package/dist/npc/NPCGenerator.js +468 -0
  265. package/dist/npc/NPCGenerator.js.map +1 -0
  266. package/dist/npc/NPCManager.d.ts +86 -0
  267. package/dist/npc/NPCManager.d.ts.map +1 -0
  268. package/dist/npc/NPCManager.js +217 -0
  269. package/dist/npc/NPCManager.js.map +1 -0
  270. package/dist/npc/fixedNPCs.d.ts +7 -0
  271. package/dist/npc/fixedNPCs.d.ts.map +1 -0
  272. package/dist/npc/fixedNPCs.js +196 -0
  273. package/dist/npc/fixedNPCs.js.map +1 -0
  274. package/dist/npc/index.d.ts +9 -0
  275. package/dist/npc/index.d.ts.map +1 -0
  276. package/dist/npc/index.js +12 -0
  277. package/dist/npc/index.js.map +1 -0
  278. package/dist/npc/traits.d.ts +33 -0
  279. package/dist/npc/traits.d.ts.map +1 -0
  280. package/dist/npc/traits.js +795 -0
  281. package/dist/npc/traits.js.map +1 -0
  282. package/dist/npc/types.d.ts +193 -0
  283. package/dist/npc/types.d.ts.map +1 -0
  284. package/dist/npc/types.js +9 -0
  285. package/dist/npc/types.js.map +1 -0
  286. package/dist/quest/QuestManager.d.ts +79 -0
  287. package/dist/quest/QuestManager.d.ts.map +1 -0
  288. package/dist/quest/QuestManager.js +273 -0
  289. package/dist/quest/QuestManager.js.map +1 -0
  290. package/dist/quest/index.d.ts +6 -0
  291. package/dist/quest/index.d.ts.map +1 -0
  292. package/dist/quest/index.js +9 -0
  293. package/dist/quest/index.js.map +1 -0
  294. package/dist/quest/types.d.ts +81 -0
  295. package/dist/quest/types.d.ts.map +1 -0
  296. package/dist/quest/types.js +8 -0
  297. package/dist/quest/types.js.map +1 -0
  298. package/dist/strategy/StrategyExecutor.d.ts +159 -0
  299. package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
  300. package/dist/strategy/StrategyExecutor.js +479 -0
  301. package/dist/strategy/StrategyExecutor.js.map +1 -0
  302. package/dist/strategy/StrategyParser.d.ts +48 -0
  303. package/dist/strategy/StrategyParser.d.ts.map +1 -0
  304. package/dist/strategy/StrategyParser.js +321 -0
  305. package/dist/strategy/StrategyParser.js.map +1 -0
  306. package/dist/strategy/defaultStrategy.d.ts +40 -0
  307. package/dist/strategy/defaultStrategy.d.ts.map +1 -0
  308. package/dist/strategy/defaultStrategy.js +254 -0
  309. package/dist/strategy/defaultStrategy.js.map +1 -0
  310. package/dist/strategy/index.d.ts +8 -0
  311. package/dist/strategy/index.d.ts.map +1 -0
  312. package/dist/strategy/index.js +14 -0
  313. package/dist/strategy/index.js.map +1 -0
  314. package/dist/tui/ExploreMenu.d.ts +106 -0
  315. package/dist/tui/ExploreMenu.d.ts.map +1 -0
  316. package/dist/tui/ExploreMenu.js +282 -0
  317. package/dist/tui/ExploreMenu.js.map +1 -0
  318. package/dist/tui/GameUI.d.ts +313 -0
  319. package/dist/tui/GameUI.d.ts.map +1 -0
  320. package/dist/tui/GameUI.js +2116 -0
  321. package/dist/tui/GameUI.js.map +1 -0
  322. package/dist/tui/GameUIAdapter.d.ts +207 -0
  323. package/dist/tui/GameUIAdapter.d.ts.map +1 -0
  324. package/dist/tui/GameUIAdapter.js +1342 -0
  325. package/dist/tui/GameUIAdapter.js.map +1 -0
  326. package/dist/tui/Input.d.ts +139 -0
  327. package/dist/tui/Input.d.ts.map +1 -0
  328. package/dist/tui/Input.js +278 -0
  329. package/dist/tui/Input.js.map +1 -0
  330. package/dist/tui/Menu.d.ts +110 -0
  331. package/dist/tui/Menu.d.ts.map +1 -0
  332. package/dist/tui/Menu.js +365 -0
  333. package/dist/tui/Menu.js.map +1 -0
  334. package/dist/tui/Screen.d.ts +228 -0
  335. package/dist/tui/Screen.d.ts.map +1 -0
  336. package/dist/tui/Screen.js +502 -0
  337. package/dist/tui/Screen.js.map +1 -0
  338. package/dist/tui/components/Box.d.ts +36 -0
  339. package/dist/tui/components/Box.d.ts.map +1 -0
  340. package/dist/tui/components/Box.js +43 -0
  341. package/dist/tui/components/Box.js.map +1 -0
  342. package/dist/tui/components/List.d.ts +69 -0
  343. package/dist/tui/components/List.d.ts.map +1 -0
  344. package/dist/tui/components/List.js +136 -0
  345. package/dist/tui/components/List.js.map +1 -0
  346. package/dist/tui/components/ProgressBar.d.ts +42 -0
  347. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  348. package/dist/tui/components/ProgressBar.js +75 -0
  349. package/dist/tui/components/ProgressBar.js.map +1 -0
  350. package/dist/tui/components/index.d.ts +8 -0
  351. package/dist/tui/components/index.d.ts.map +1 -0
  352. package/dist/tui/components/index.js +11 -0
  353. package/dist/tui/components/index.js.map +1 -0
  354. package/dist/tui/core/BaseSection.d.ts +98 -0
  355. package/dist/tui/core/BaseSection.d.ts.map +1 -0
  356. package/dist/tui/core/BaseSection.js +174 -0
  357. package/dist/tui/core/BaseSection.js.map +1 -0
  358. package/dist/tui/core/Component.d.ts +61 -0
  359. package/dist/tui/core/Component.d.ts.map +1 -0
  360. package/dist/tui/core/Component.js +32 -0
  361. package/dist/tui/core/Component.js.map +1 -0
  362. package/dist/tui/core/Section.d.ts +101 -0
  363. package/dist/tui/core/Section.d.ts.map +1 -0
  364. package/dist/tui/core/Section.js +24 -0
  365. package/dist/tui/core/Section.js.map +1 -0
  366. package/dist/tui/core/SectionManager.d.ts +108 -0
  367. package/dist/tui/core/SectionManager.d.ts.map +1 -0
  368. package/dist/tui/core/SectionManager.js +258 -0
  369. package/dist/tui/core/SectionManager.js.map +1 -0
  370. package/dist/tui/core/index.d.ts +9 -0
  371. package/dist/tui/core/index.d.ts.map +1 -0
  372. package/dist/tui/core/index.js +12 -0
  373. package/dist/tui/core/index.js.map +1 -0
  374. package/dist/tui/index.d.ts +15 -0
  375. package/dist/tui/index.d.ts.map +1 -0
  376. package/dist/tui/index.js +23 -0
  377. package/dist/tui/index.js.map +1 -0
  378. package/dist/tui/screens/BaseScreen.d.ts +62 -0
  379. package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
  380. package/dist/tui/screens/BaseScreen.js +55 -0
  381. package/dist/tui/screens/BaseScreen.js.map +1 -0
  382. package/dist/tui/screens/CombatScreen.d.ts +43 -0
  383. package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
  384. package/dist/tui/screens/CombatScreen.js +125 -0
  385. package/dist/tui/screens/CombatScreen.js.map +1 -0
  386. package/dist/tui/screens/DialogScreen.d.ts +53 -0
  387. package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
  388. package/dist/tui/screens/DialogScreen.js +90 -0
  389. package/dist/tui/screens/DialogScreen.js.map +1 -0
  390. package/dist/tui/screens/DungeonScreen.d.ts +80 -0
  391. package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
  392. package/dist/tui/screens/DungeonScreen.js +317 -0
  393. package/dist/tui/screens/DungeonScreen.js.map +1 -0
  394. package/dist/tui/screens/ExploreScreen.d.ts +69 -0
  395. package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
  396. package/dist/tui/screens/ExploreScreen.js +224 -0
  397. package/dist/tui/screens/ExploreScreen.js.map +1 -0
  398. package/dist/tui/screens/SectionScreen.d.ts +84 -0
  399. package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
  400. package/dist/tui/screens/SectionScreen.js +156 -0
  401. package/dist/tui/screens/SectionScreen.js.map +1 -0
  402. package/dist/tui/screens/TitleScreen.d.ts +40 -0
  403. package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
  404. package/dist/tui/screens/TitleScreen.js +253 -0
  405. package/dist/tui/screens/TitleScreen.js.map +1 -0
  406. package/dist/tui/screens/TownScreen.d.ts +98 -0
  407. package/dist/tui/screens/TownScreen.d.ts.map +1 -0
  408. package/dist/tui/screens/TownScreen.js +370 -0
  409. package/dist/tui/screens/TownScreen.js.map +1 -0
  410. package/dist/tui/screens/TravelScreen.d.ts +67 -0
  411. package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
  412. package/dist/tui/screens/TravelScreen.js +286 -0
  413. package/dist/tui/screens/TravelScreen.js.map +1 -0
  414. package/dist/tui/screens/index.d.ts +8 -0
  415. package/dist/tui/screens/index.d.ts.map +1 -0
  416. package/dist/tui/screens/index.js +17 -0
  417. package/dist/tui/screens/index.js.map +1 -0
  418. package/dist/tui/sections/ActionsSection.d.ts +71 -0
  419. package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
  420. package/dist/tui/sections/ActionsSection.js +184 -0
  421. package/dist/tui/sections/ActionsSection.js.map +1 -0
  422. package/dist/tui/sections/DungeonSection.d.ts +65 -0
  423. package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
  424. package/dist/tui/sections/DungeonSection.js +144 -0
  425. package/dist/tui/sections/DungeonSection.js.map +1 -0
  426. package/dist/tui/sections/EventsSection.d.ts +50 -0
  427. package/dist/tui/sections/EventsSection.d.ts.map +1 -0
  428. package/dist/tui/sections/EventsSection.js +134 -0
  429. package/dist/tui/sections/EventsSection.js.map +1 -0
  430. package/dist/tui/sections/MapSection.d.ts +66 -0
  431. package/dist/tui/sections/MapSection.d.ts.map +1 -0
  432. package/dist/tui/sections/MapSection.js +669 -0
  433. package/dist/tui/sections/MapSection.js.map +1 -0
  434. package/dist/tui/sections/StatusSection.d.ts +47 -0
  435. package/dist/tui/sections/StatusSection.d.ts.map +1 -0
  436. package/dist/tui/sections/StatusSection.js +133 -0
  437. package/dist/tui/sections/StatusSection.js.map +1 -0
  438. package/dist/tui/sections/TeamSection.d.ts +71 -0
  439. package/dist/tui/sections/TeamSection.d.ts.map +1 -0
  440. package/dist/tui/sections/TeamSection.js +224 -0
  441. package/dist/tui/sections/TeamSection.js.map +1 -0
  442. package/dist/tui/sections/TravelingSection.d.ts +51 -0
  443. package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
  444. package/dist/tui/sections/TravelingSection.js +106 -0
  445. package/dist/tui/sections/TravelingSection.js.map +1 -0
  446. package/dist/tui/sections/index.d.ts +9 -0
  447. package/dist/tui/sections/index.d.ts.map +1 -0
  448. package/dist/tui/sections/index.js +12 -0
  449. package/dist/tui/sections/index.js.map +1 -0
  450. package/dist/ui/Terminal.d.ts +68 -0
  451. package/dist/ui/Terminal.d.ts.map +1 -0
  452. package/dist/ui/Terminal.js +297 -0
  453. package/dist/ui/Terminal.js.map +1 -0
  454. package/dist/ui/index.d.ts +5 -0
  455. package/dist/ui/index.d.ts.map +1 -0
  456. package/dist/ui/index.js +8 -0
  457. package/dist/ui/index.js.map +1 -0
  458. package/dist/utils/configMigration.d.ts +14 -0
  459. package/dist/utils/configMigration.d.ts.map +1 -0
  460. package/dist/utils/configMigration.js +92 -0
  461. package/dist/utils/configMigration.js.map +1 -0
  462. package/dist/utils/errorHandler.d.ts +86 -0
  463. package/dist/utils/errorHandler.d.ts.map +1 -0
  464. package/dist/utils/errorHandler.js +224 -0
  465. package/dist/utils/errorHandler.js.map +1 -0
  466. package/dist/utils/logger.d.ts +14 -0
  467. package/dist/utils/logger.d.ts.map +1 -0
  468. package/dist/utils/logger.js +43 -0
  469. package/dist/utils/logger.js.map +1 -0
  470. package/dist/weapon/WeaponFactory.d.ts +32 -0
  471. package/dist/weapon/WeaponFactory.d.ts.map +1 -0
  472. package/dist/weapon/WeaponFactory.js +216 -0
  473. package/dist/weapon/WeaponFactory.js.map +1 -0
  474. package/dist/weapon/index.d.ts +5 -0
  475. package/dist/weapon/index.d.ts.map +1 -0
  476. package/dist/weapon/index.js +8 -0
  477. package/dist/weapon/index.js.map +1 -0
  478. 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":"AAAA;;GAEG;;;AAWH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,OAAO,YAAY;IACf,YAAY,GAAuB,IAAI,GAAG,EAAE,CAAC;IAC7C,iBAAiB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAC3C,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,QAAQ,GAAoB,EAAE,CAAC;IAC/B,cAAc,GAA8C,IAAI,GAAG,EAAE,CAAC;IAE9E;;OAEG;IACH,WAAW,CAAC,KAAY;QACtB,sBAAsB;QACtB,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iBAAiB;QACjB,MAAM,WAAW,GAAU;YACzB,GAAG,KAAK;YACR,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,SAAgD,EAChD,QAAgB,EAChB,SAAiB,CAAC;QAElB,MAAM,aAAa,GAAY,EAAE,CAAC;QAElC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YAExC,IAAI,YAAY,GAAG,KAAK,CAAC;YAEzB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,SAAS,CAAC,UAAU;oBAAE,SAAS;gBACnC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;oBAAE,SAAS;gBAE3C,+CAA+C;gBAC/C,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC7E,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;oBAC/D,YAAY,GAAG,IAAI,CAAC;oBAEpB,yCAAyC;oBACzC,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChD,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,KAAK,QAAQ,EAAE,CAAC,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACnC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE1B,mCAAmC;gBACnC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9C,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;oBAC3B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,QAAgB,EAAE,OAAe;QACrD,IAAI,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEtC,0DAA0D;QAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACnE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,oDAAoD;QACpD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe,EAAE,MAAc;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACjD,CAAC;QAED,gBAAgB;QAChB,IAAI,aAAa,GAAG,MAAM,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAc,EAAE,MAAmB;QACrD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,KAAK;gBACR,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,KAAK,MAAM;gBACT,OAAO,cAAc,CAAC,MAAM,EAAE;oBAC5B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACxB,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChD,WAAW,EAAE,EAAE;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;iBAC/B,CAAC,CAAC;YACL,8CAA8C;YAC9C;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,SAAiB,SAAS;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;gBAC/C,IAAI,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAe;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAEhE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,OAAe,EAAE,KAA6B,EAAE,OAAgB;QAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,eAAe;IACf,4EAA4E;IAE5E,EAAE,CAAC,KAAa,EAAE,QAAiC;QACjD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAiC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEO,IAAI,CAAC,KAAa,EAAE,IAAa;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E,IAAI;QACF,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACpD,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACrD,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAmB;QACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;CACF;AAED,YAAY;AACZ,IAAI,eAAe,GAAwB,IAAI,CAAC;AAEhD,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC","debug_id":"2a15a3b6-8d3e-50d1-8025-703f4e3fb569"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Quest Module Exports
3
+ */
4
+ export * from './types.js';
5
+ export { QuestManager, getQuestManager } from './QuestManager.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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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"}