osrs-tools 0.2.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +41 -68
  2. package/dist/Requirement.d.ts +1 -0
  3. package/dist/account/OsrsAccount.d.ts +76 -27
  4. package/dist/account/OsrsAccount.js +172 -48
  5. package/dist/quest/Quest.d.ts +37 -9
  6. package/dist/quest/QuestTool.d.ts +22 -37
  7. package/dist/quest/QuestTool.js +115 -56
  8. package/dist/quest/all/AHandInTheSand.d.ts +3 -0
  9. package/dist/quest/all/AHandInTheSand.js +46 -0
  10. package/dist/quest/all/AKingdomDivided.d.ts +3 -0
  11. package/dist/quest/all/AKingdomDivided.js +56 -0
  12. package/dist/quest/all/APorcineOfInterest.js +7 -2
  13. package/dist/quest/all/ASoulsBane.js +8 -2
  14. package/dist/quest/all/ATailOfTwoCats.js +5 -4
  15. package/dist/quest/all/ATasteOfHope.js +5 -2
  16. package/dist/quest/all/ATheatreOfBlood.d.ts +3 -0
  17. package/dist/quest/all/ATheatreOfBlood.js +38 -0
  18. package/dist/quest/all/AnimalMagnetism.js +13 -4
  19. package/dist/quest/all/AnotherSliceOfHAM.js +8 -2
  20. package/dist/quest/all/BelowIceMountain.js +9 -6
  21. package/dist/quest/all/BetweenARock.js +9 -2
  22. package/dist/quest/all/BigChompyBirdHunting.js +9 -2
  23. package/dist/quest/all/Biohazard.js +7 -2
  24. package/dist/quest/all/BlackKnightsFortress.js +5 -2
  25. package/dist/quest/all/BoneVoyage.js +5 -2
  26. package/dist/quest/all/CabinFever.js +9 -2
  27. package/dist/quest/all/ClientOfKourend.js +5 -2
  28. package/dist/quest/all/ClockTower.js +5 -2
  29. package/dist/quest/all/ColdWar.js +10 -2
  30. package/dist/quest/all/Contact.js +8 -2
  31. package/dist/quest/all/CookAssistant.js +7 -2
  32. package/dist/quest/all/CooksAssistant.js +8 -2
  33. package/dist/quest/all/CreatureOfFenkenstrain.js +8 -2
  34. package/dist/quest/all/DarknessOfHallowvale.js +10 -2
  35. package/dist/quest/all/DeathPlateau.js +8 -2
  36. package/dist/quest/all/DeathToTheDorgeshuun.js +9 -2
  37. package/dist/quest/all/DemonSlayer.js +5 -2
  38. package/dist/quest/all/DesertTreasure.d.ts +14 -0
  39. package/dist/quest/all/DesertTreasure.js +15 -0
  40. package/dist/quest/all/DeviousMinds.js +10 -2
  41. package/dist/quest/all/DoricQuest.d.ts +16 -0
  42. package/dist/quest/all/DoricQuest.js +20 -0
  43. package/dist/quest/all/DoricsQuest.js +8 -2
  44. package/dist/quest/all/DragonSlayer.js +9 -2
  45. package/dist/quest/all/DragonSlayerII.js +13 -4
  46. package/dist/quest/all/DreamMentor.d.ts +16 -0
  47. package/dist/quest/all/DreamMentor.js +21 -0
  48. package/dist/quest/all/DruidicRitual.js +8 -2
  49. package/dist/quest/all/DwarfCannon.js +8 -2
  50. package/dist/quest/all/EadgarsRuse.js +8 -2
  51. package/dist/quest/all/EaglesPeak.js +8 -2
  52. package/dist/quest/all/ElementalWorkshopI.js +9 -2
  53. package/dist/quest/all/ElementalWorkshopII.js +9 -2
  54. package/dist/quest/all/EnakhrasLament.js +5 -2
  55. package/dist/quest/all/EnlightenedJourney.js +5 -2
  56. package/dist/quest/all/FairytaleIGrowingPains.js +5 -2
  57. package/dist/quest/all/FairytaleIICureAQueen.js +5 -2
  58. package/dist/quest/all/FamilyCrest.js +5 -2
  59. package/dist/quest/all/FightArena.js +5 -2
  60. package/dist/quest/all/FishingContest.js +5 -2
  61. package/dist/quest/all/ForgettableTale.js +5 -2
  62. package/dist/quest/all/GardenOfTranquillity.js +5 -2
  63. package/dist/quest/all/GertrudesCat.js +5 -2
  64. package/dist/quest/all/GettingAhead.js +5 -2
  65. package/dist/quest/all/GhostsAhoy.js +5 -2
  66. package/dist/quest/all/GoblinDiplomacy.js +6 -3
  67. package/dist/quest/all/GrimTales.js +13 -2
  68. package/dist/quest/all/HauntedMine.js +8 -2
  69. package/dist/quest/all/HazeelCult.js +8 -2
  70. package/dist/quest/all/HeroesQuest.js +19 -15
  71. package/dist/quest/all/HolyGrail.js +8 -2
  72. package/dist/quest/all/HorrorFromTheDeep.js +10 -2
  73. package/dist/quest/all/IcthlarinsLittleHelper.js +10 -2
  74. package/dist/quest/all/ImpCatcher.js +8 -2
  75. package/dist/quest/all/InAidOfTheMyreque.js +11 -2
  76. package/dist/quest/all/InSearchOfTheMyreque.js +12 -8
  77. package/dist/quest/all/JunglePotion.js +8 -2
  78. package/dist/quest/all/KingsRansom.js +11 -5
  79. package/dist/quest/all/LegendsQuest.d.ts +3 -0
  80. package/dist/quest/all/LegendsQuest.js +56 -0
  81. package/dist/quest/all/LostCity.d.ts +3 -0
  82. package/dist/quest/all/LostCity.js +42 -0
  83. package/dist/quest/all/LunarDiplomacy.d.ts +3 -0
  84. package/dist/quest/all/LunarDiplomacy.js +55 -0
  85. package/dist/quest/all/MakingHistory.d.ts +3 -0
  86. package/dist/quest/all/MakingHistory.js +42 -0
  87. package/dist/quest/all/MerlinsCrystal.d.ts +3 -0
  88. package/dist/quest/all/MerlinsCrystal.js +39 -0
  89. package/dist/quest/all/MonkeyMadness.d.ts +3 -0
  90. package/dist/quest/all/MonkeyMadness.js +46 -0
  91. package/dist/quest/all/MonkeyMadnessII.d.ts +3 -0
  92. package/dist/quest/all/MonkeyMadnessII.js +57 -0
  93. package/dist/quest/all/MonksFriend.d.ts +3 -0
  94. package/dist/quest/all/MonksFriend.js +42 -0
  95. package/dist/quest/all/MurderMystery.d.ts +3 -0
  96. package/dist/quest/all/MurderMystery.js +39 -0
  97. package/dist/quest/all/MyArmsBigAdventure.d.ts +3 -0
  98. package/dist/quest/all/MyArmsBigAdventure.js +48 -0
  99. package/dist/quest/all/NatureSpirit.d.ts +3 -0
  100. package/dist/quest/all/NatureSpirit.js +43 -0
  101. package/dist/quest/all/ObservatoryQuest.d.ts +3 -0
  102. package/dist/quest/all/ObservatoryQuest.js +39 -0
  103. package/dist/quest/all/OlafsQuest.d.ts +3 -0
  104. package/dist/quest/all/OlafsQuest.js +47 -0
  105. package/dist/quest/all/OneSmallFavour.d.ts +3 -0
  106. package/dist/quest/all/OneSmallFavour.js +47 -0
  107. package/dist/quest/all/PlagueCity.d.ts +3 -0
  108. package/dist/quest/all/PlagueCity.js +39 -0
  109. package/dist/quest/all/PriestInPeril.d.ts +3 -0
  110. package/dist/quest/all/PriestInPeril.js +42 -0
  111. package/dist/quest/all/RagAndBoneMan.d.ts +3 -0
  112. package/dist/quest/all/RagAndBoneMan.js +39 -0
  113. package/dist/quest/all/Ratcatchers.d.ts +3 -0
  114. package/dist/quest/all/Ratcatchers.js +42 -0
  115. package/dist/quest/all/RecipeForDisaster.d.ts +3 -0
  116. package/dist/quest/all/RecipeForDisaster.js +62 -0
  117. package/dist/quest/all/RecruitmentDrive.d.ts +3 -0
  118. package/dist/quest/all/RecruitmentDrive.js +43 -0
  119. package/dist/quest/all/Regicide.d.ts +3 -0
  120. package/dist/quest/all/Regicide.js +43 -0
  121. package/dist/quest/all/RovingElves.d.ts +3 -0
  122. package/dist/quest/all/RovingElves.js +43 -0
  123. package/dist/quest/all/RoyalTrouble.d.ts +3 -0
  124. package/dist/quest/all/RoyalTrouble.js +44 -0
  125. package/dist/quest/all/RumDeal.d.ts +3 -0
  126. package/dist/quest/all/RumDeal.js +47 -0
  127. package/dist/quest/all/ScorpionCatcher.d.ts +3 -0
  128. package/dist/quest/all/ScorpionCatcher.js +39 -0
  129. package/dist/quest/all/SeaSlug.d.ts +3 -0
  130. package/dist/quest/all/SeaSlug.js +39 -0
  131. package/dist/quest/all/ShadesOfMortton.d.ts +3 -0
  132. package/dist/quest/all/ShadesOfMortton.js +43 -0
  133. package/dist/quest/all/ShadowOfTheStorm.d.ts +3 -0
  134. package/dist/quest/all/ShadowOfTheStorm.js +44 -0
  135. package/dist/quest/all/SheepHerder.d.ts +3 -0
  136. package/dist/quest/all/SheepHerder.js +39 -0
  137. package/dist/quest/all/ShiloVillage.d.ts +3 -0
  138. package/dist/quest/all/ShiloVillage.js +43 -0
  139. package/dist/quest/all/SlugMenace.d.ts +3 -0
  140. package/dist/quest/all/SlugMenace.js +48 -0
  141. package/dist/quest/all/SongOfTheElves.d.ts +3 -0
  142. package/dist/quest/all/SongOfTheElves.js +50 -0
  143. package/dist/quest/all/SpiritsOfTheElid.d.ts +3 -0
  144. package/dist/quest/all/SpiritsOfTheElid.js +43 -0
  145. package/dist/quest/all/SwanSong.d.ts +3 -0
  146. package/dist/quest/all/SwanSong.js +47 -0
  147. package/dist/quest/all/TaiBwoWannaiTrio.d.ts +3 -0
  148. package/dist/quest/all/TaiBwoWannaiTrio.js +45 -0
  149. package/dist/quest/all/TheAscentOfArceuus.d.ts +3 -0
  150. package/dist/quest/all/TheAscentOfArceuus.js +39 -0
  151. package/dist/quest/all/TheDepthsOfDespair.d.ts +3 -0
  152. package/dist/quest/all/TheDepthsOfDespair.js +43 -0
  153. package/dist/quest/all/TheForsakenTower.d.ts +3 -0
  154. package/dist/quest/all/TheForsakenTower.js +42 -0
  155. package/dist/quest/all/TheFremennikExiles.d.ts +3 -0
  156. package/dist/quest/all/TheFremennikExiles.js +47 -0
  157. package/dist/quest/all/TheFremennikIsles.d.ts +3 -0
  158. package/dist/quest/all/TheFremennikIsles.js +44 -0
  159. package/dist/quest/all/TheFremennikTrials.d.ts +3 -0
  160. package/dist/quest/all/TheFremennikTrials.js +39 -0
  161. package/dist/quest/all/TheGiantDwarf.d.ts +3 -0
  162. package/dist/quest/all/TheGiantDwarf.js +44 -0
  163. package/dist/quest/all/TheGolem.d.ts +3 -0
  164. package/dist/quest/all/TheGolem.js +39 -0
  165. package/dist/quest/all/TheGrandTree.d.ts +3 -0
  166. package/dist/quest/all/TheGrandTree.js +39 -0
  167. package/dist/quest/all/TheGreatBrainRobbery.d.ts +3 -0
  168. package/dist/quest/all/TheGreatBrainRobbery.js +46 -0
  169. package/dist/quest/all/TheHandInTheSand.d.ts +3 -0
  170. package/dist/quest/all/TheHandInTheSand.js +43 -0
  171. package/dist/quest/all/TheKnightsSword.d.ts +3 -0
  172. package/dist/quest/all/TheKnightsSword.js +39 -0
  173. package/dist/quest/all/TheLostTribe.d.ts +3 -0
  174. package/dist/quest/all/TheLostTribe.js +43 -0
  175. package/dist/quest/all/TheQueenOfThieves.d.ts +3 -0
  176. package/dist/quest/all/TheQueenOfThieves.js +43 -0
  177. package/dist/quest/all/TheSlugMenace.d.ts +3 -0
  178. package/dist/quest/all/TheSlugMenace.js +48 -0
  179. package/dist/quest/all/TheTaleOfTheRighteous.d.ts +3 -0
  180. package/dist/quest/all/TheTaleOfTheRighteous.js +43 -0
  181. package/dist/quest/all/TheTempleOfIkov.d.ts +3 -0
  182. package/dist/quest/all/TheTempleOfIkov.js +42 -0
  183. package/dist/quest/all/TheTouristTrap.d.ts +3 -0
  184. package/dist/quest/all/TheTouristTrap.js +43 -0
  185. package/dist/quest/all/ThroneOfMiscellania.d.ts +3 -0
  186. package/dist/quest/all/ThroneOfMiscellania.js +46 -0
  187. package/dist/quest/all/TowerOfLife.d.ts +3 -0
  188. package/dist/quest/all/TowerOfLife.js +42 -0
  189. package/dist/quest/all/TreeGnomeVillage.d.ts +3 -0
  190. package/dist/quest/all/TreeGnomeVillage.js +39 -0
  191. package/dist/quest/all/TribalTotem.d.ts +3 -0
  192. package/dist/quest/all/TribalTotem.js +39 -0
  193. package/dist/quest/all/TrollRomance.d.ts +3 -0
  194. package/dist/quest/all/TrollRomance.js +43 -0
  195. package/dist/quest/all/TrollStronghold.d.ts +3 -0
  196. package/dist/quest/all/TrollStronghold.js +42 -0
  197. package/dist/quest/all/UndergroundPass.d.ts +3 -0
  198. package/dist/quest/all/UndergroundPass.js +43 -0
  199. package/dist/quest/all/VampyreSlayer.d.ts +3 -0
  200. package/dist/quest/all/VampyreSlayer.js +39 -0
  201. package/dist/quest/all/Wanted.d.ts +3 -0
  202. package/dist/quest/all/Wanted.js +48 -0
  203. package/dist/quest/all/Watchtower.d.ts +3 -0
  204. package/dist/quest/all/Watchtower.js +45 -0
  205. package/dist/quest/all/WaterfallQuest.d.ts +3 -0
  206. package/dist/quest/all/WaterfallQuest.js +39 -0
  207. package/dist/quest/all/WhatLiesBelow.d.ts +3 -0
  208. package/dist/quest/all/WhatLiesBelow.js +42 -0
  209. package/dist/quest/all/WitchesPotion.d.ts +3 -0
  210. package/dist/quest/all/WitchesPotion.js +39 -0
  211. package/dist/quest/all/WitchsHouse.d.ts +3 -0
  212. package/dist/quest/all/WitchsHouse.js +39 -0
  213. package/dist/quest/all/ZogreFleshEaters.d.ts +3 -0
  214. package/dist/quest/all/ZogreFleshEaters.js +44 -0
  215. package/dist/slayer/Assignment.d.ts +1 -1
  216. package/dist/slayer/Masters.js +14 -10
  217. package/dist/slayer/task/ChaelderTasks.d.ts +2 -2
  218. package/dist/slayer/task/ChaelderTasks.js +55 -65
  219. package/dist/slayer/task/DuradelTasks.d.ts +2 -1
  220. package/dist/slayer/task/DuradelTasks.js +32 -14
  221. package/dist/slayer/task/KonarTasks.d.ts +2 -2
  222. package/dist/slayer/task/KonarTasks.js +34 -3
  223. package/dist/slayer/task/KrystiliaTasks.d.ts +3 -0
  224. package/dist/slayer/task/KrystiliaTasks.js +36 -0
  225. package/dist/slayer/task/MazchnaTasks.d.ts +2 -2
  226. package/dist/slayer/task/MazchnaTasks.js +83 -2
  227. package/dist/slayer/task/NieveTasks.d.ts +2 -2
  228. package/dist/slayer/task/NieveTasks.js +38 -64
  229. package/dist/slayer/task/SpriaTasks.d.ts +2 -1
  230. package/dist/slayer/task/SpriaTasks.js +39 -34
  231. package/dist/slayer/task/TurealTasks.d.ts +3 -0
  232. package/dist/slayer/task/TurealTasks.js +125 -0
  233. package/dist/slayer/task/VannakaTasks.d.ts +2 -1
  234. package/dist/slayer/task/VannakaTasks.js +54 -69
  235. package/package.json +2 -2
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # Old School RuneScape Quest Tool
1
+ # Old School RuneScape Tools
2
2
 
3
3
  [![NPM Version][npm-image]][npm-url] [![Downloads][downloads-image]][downloads-url] [![GitHub Issues][issues-img]][new-issue]
4
4
  [![types](https://img.shields.io/npm/types/osrs-tools.svg?style=flat-square)](https://github.com/jamescer/osrs-tools/blob/master/src/types.ts)
5
5
 
6
- The **Old School RuneScape Quest Tool** is a Node.js package designed to provide comprehensive data for all current Old School RuneScape (OSRS) quests, slayer tasks, and related game mechanics. This tool is ideal for developers looking to integrate OSRS data into their projects, whether for personal use, game guides, or community tools.
6
+ The **Old School RuneScape Tools** repo is a Node.js package designed to provide comprehensive data for all current Old School RuneScape (OSRS) quests, slayer tasks, and related game mechanics. This tool is ideal for developers looking to integrate OSRS data into their projects, whether for personal use, game guides, or community tools.
7
7
 
8
8
  ## Features
9
9
 
@@ -13,93 +13,66 @@ The **Old School RuneScape Quest Tool** is a Node.js package designed to provide
13
13
  - Built-in support for tracking quest and slayer progress.
14
14
  - Easy-to-use API for developers of all skill levels.
15
15
 
16
- ## Installation
16
+ ## Overview
17
17
 
18
- Install the package via npm:
18
+ This package provides a comprehensive, programmatic interface to Old School RuneScape (OSRS) quest, slayer, and account data. It is designed for developers, tool creators, and enthusiasts who want to:
19
19
 
20
- ```bash
21
- npm install osrs-tools --save
22
- ```
20
+ - Access and analyze detailed quest data, including requirements, rewards, and quest steps.
21
+ - Retrieve and filter slayer master tasks, including requirements, locations, and weights.
22
+ - Simulate or build tools for quest progression, slayer assignment, and account planning.
23
+ - Integrate OSRS data into bots, web apps, Discord bots, or personal utilities.
24
+ - Track quest and slayer progress, or build custom checklists and planners.
23
25
 
24
- ## Usage
26
+ ## What You Can Do
25
27
 
26
- Here’s how to use the tool in your project:
28
+ - **Quest Data**: Use the `QuestTool` class and related functions to get all quest data as objects or arrays. Filter quests by requirements, rewards, or completion status. Build quest guides, checklists, or progress trackers.
29
+ - **Slayer Masters & Tasks**: Import any Slayer Master (e.g., `Turael`, `Duradel`, `Krystilia`) to access their full list of tasks, requirements, and locations. Randomly assign tasks, filter by requirements, or analyze task weights for planning.
30
+ - **Account Modeling**: Use the `OsrsAccount` and `Skill` models to represent and manipulate player accounts, including skill levels and quest completions. Simulate account progression or validate requirements for quests and tasks.
31
+ - **Slayer Rewards**: Access lists of unlockable Slayer rewards and buyable items, including costs and descriptions, for use in planning or calculators.
32
+ - **Data Integration**: All data is available as TypeScript/JavaScript objects, making it easy to integrate into web apps, bots, or scripts. The structure is ideal for both backend and frontend use.
33
+ - **Extendable**: The modular design allows you to add new quests, tasks, or masters, or to extend models for custom use cases.
27
34
 
28
- ### Importing the Module
35
+ ## Example Use Cases
29
36
 
30
- ```javascript
31
- import { QuestTool, questArray, questObject } from 'osrs-tools';
32
- ```
37
+ - **Quest Progress Tracker**: Build a web or mobile app that tracks quest completion, shows requirements, and suggests next quests based on your account.
38
+ - **Slayer Task Generator**: Create a Discord bot or web tool that assigns random slayer tasks based on your current level and unlocked masters.
39
+ - **Account Planner**: Simulate an account's progression, checking which quests or tasks are available at each stage.
40
+ - **Data Analysis**: Analyze quest or slayer data for guides, statistics, or optimization (e.g., fastest quest cape route, most efficient slayer path).
33
41
 
34
- ### Working with Quests
42
+ ## Data Structure Highlights
35
43
 
36
- ```javascript
37
- // Instantiate the QuestTool class
38
- const tool = new QuestTool();
44
+ - **Quests**: Each quest is represented as a class with requirements, rewards, and steps. Data is available in both object and array formats for flexibility.
45
+ - **Slayer Masters**: Each master is a class instance with a list of `Task` objects, each containing requirements, weights, and locations.
46
+ - **Tasks**: Tasks include all relevant requirements (combat, slayer, quest), possible monsters, and location data.
47
+ - **Account Models**: The `OsrsAccount` and `Skill` classes allow you to represent and manipulate player data programmatically.
39
48
 
40
- // Get quest data as an array
41
- const questArrayData = questArray();
49
+ ## Installation
42
50
 
43
- // Get quest data as an object
44
- const questObjectData = questObject();
51
+ Install the package via npm:
45
52
 
46
- // Output the quest data
47
- console.log(questArrayData);
48
- console.log(questObjectData);
53
+ ```bash
54
+ npm install osrs-tools --save
49
55
  ```
50
56
 
51
- ### Working with Slayer Masters and Tasks
52
-
53
- ```javascript
54
- import { Turael, Duradel } from 'osrs-tools';
55
-
56
- // Access Turael's tasks
57
- console.log(Turael.getTasks());
57
+ ## Usage
58
58
 
59
- // Get a random task from Duradel
60
- const randomTask = Duradel.getRandomTask();
61
- console.log(randomTask);
62
- ```
59
+ Here’s how to use the tool in your project:
63
60
 
64
- ### Slayer Rewards and Unlocks
61
+ ### Importing the Module
65
62
 
66
63
  ```javascript
67
- import { SlayerUnlocks, SlayerBuys } from 'osrs-tools';
68
-
69
- // List all available Slayer unlocks
70
- console.log(SlayerUnlocks);
71
-
72
- // List all items available for purchase with Slayer points
73
- console.log(SlayerBuys);
64
+ import { QuestTool, questArray, questObject } from 'osrs-tools';
74
65
  ```
75
66
 
76
- ## API Reference
77
-
78
- ### Quest API
79
-
80
- | Method | Description | Type |
81
- | ----------------- | ----------------------------------------------------------------------- | ----------------- |
82
- | `new QuestTool()` | Constructor for the `QuestTool` class. | Class Constructor |
83
- | `questObject()` | Function that returns an object with quest data (keys are quest names). | Function |
84
- | `questArray()` | Function that returns an array of quests, ordered alphabetically. | Function |
67
+ ### Module Optional Dependencies
68
+ If you want to use your account to test quest tool compatibilities or check what you can unlock for slayer, I am referencing the repository [osrs-json-hiscores](https://www.npmjs.com/package/osrs-json-hiscores)
85
69
 
86
- ### Slayer API
87
-
88
- | Class/Method | Description |
89
- | -------------------- | ------------------------------------------------------------------------- |
90
- | `SlayerMaster` | Represents a Slayer Master, including tasks, location, and requirements. |
91
- | `getTasks()` | Returns a list of tasks assigned by the Slayer Master. |
92
- | `getRandomTask()` | Returns a random task based on task weights. |
93
- | `SlayerUnlocks` | Predefined list of Slayer unlocks with costs and descriptions. |
94
- | `SlayerBuys` | Predefined list of items available for purchase with Slayer points. |
95
-
96
- ## To-Do
70
+ ```bash
71
+ npm install osrs-json-hiscores --save
72
+ ```
97
73
 
98
- - Implement a recursive function for determining quest completion.
99
- - Develop a quest completion tracking array.
100
- - Refactor `questArray()` and `questObject()` to return objects instead of functions.
101
- - Continue work on the **Recipe for Disaster** quest.
102
- - Fix and validate all Slayer data.
74
+ ### Todo
75
+ - Fix quest data and ensure all requirements exist
103
76
 
104
77
  ## Contributing
105
78
 
@@ -1,5 +1,6 @@
1
1
  interface Requirement {
2
2
  description: string;
3
+ type: RequirementType;
3
4
  }
4
5
  declare class LevelRequirement implements Requirement {
5
6
  type: RequirementType;
@@ -1,31 +1,80 @@
1
- interface OsrsAccountObject {
1
+ interface SkillDetail {
2
+ rank: number;
3
+ level: number;
4
+ xp: number;
5
+ }
6
+ interface Skill {
7
+ level: number;
8
+ }
9
+ interface Skills {
10
+ [skillName: string]: Skill;
11
+ }
12
+ interface SkillsDetail {
13
+ [skillName: string]: SkillDetail;
14
+ }
15
+ interface BossScore {
16
+ rank: number;
17
+ score: number;
18
+ }
19
+ interface Bosses {
20
+ [bossName: string]: BossScore;
21
+ }
22
+ interface ClueScore {
23
+ rank: number;
24
+ score: number;
25
+ }
26
+ interface Clues {
27
+ [clueType: string]: ClueScore;
28
+ }
29
+ interface BountyHunter {
30
+ hunterV2?: BossScore;
31
+ rogueV2?: BossScore;
32
+ hunter?: BossScore;
33
+ rogue?: BossScore;
34
+ }
35
+ interface OsrsAccountData {
2
36
  name: string;
3
- main: {
4
- combatLevel: number;
5
- questPoints: number;
6
- skills: {
7
- [skillName: string]: {
8
- level: number;
9
- };
10
- };
11
- };
37
+ combatLevel: number;
38
+ questPoints: number;
39
+ skills: Skills;
40
+ skillsDetail?: SkillsDetail;
41
+ bosses?: Bosses;
42
+ clues?: Clues;
43
+ bountyHunter?: BountyHunter;
44
+ lastManStanding?: BossScore;
45
+ pvpArena?: BossScore;
46
+ soulWarsZeal?: BossScore;
47
+ riftsClosed?: BossScore;
48
+ colosseumGlory?: BossScore;
49
+ collectionsLogged?: BossScore;
50
+ leaguePoints?: BossScore;
51
+ deadmanPoints?: BossScore;
12
52
  }
13
53
  declare class OsrsAccount {
14
- private osrsAccount;
15
- constructor(accountObject: OsrsAccountObject | null);
16
- getName(): string | undefined;
54
+ #private;
55
+ constructor(data: OsrsAccountData);
56
+ static fromJson(json: any): OsrsAccount;
57
+ get name(): string;
58
+ get combatLevel(): number;
59
+ get questPoints(): number;
60
+ get skills(): Skills;
61
+ get skillsDetail(): SkillsDetail | undefined;
62
+ get bosses(): Bosses | undefined;
63
+ get clues(): Clues | undefined;
64
+ get bountyHunter(): BountyHunter | undefined;
65
+ get lastManStanding(): BossScore | undefined;
66
+ get pvpArena(): BossScore | undefined;
67
+ get soulWarsZeal(): BossScore | undefined;
68
+ get riftsClosed(): BossScore | undefined;
69
+ get colosseumGlory(): BossScore | undefined;
70
+ get collectionsLogged(): BossScore | undefined;
71
+ get leaguePoints(): BossScore | undefined;
72
+ get deadmanPoints(): BossScore | undefined;
73
+ getSkill(skillName: string): Skill | undefined;
74
+ getSkillDetail(skillName: string): SkillDetail | undefined;
75
+ getBossScore(bossName: string): BossScore | undefined;
76
+ getClueScore(clueType: string): ClueScore | undefined;
17
77
  toString(): string;
18
- getSkills(): {
19
- [skillName: string]: {
20
- level: number;
21
- };
22
- } | undefined;
23
- getSkill(skillName: string): {
24
- level: number;
25
- } | undefined;
26
- getQuestPoints(): number | undefined;
27
- setQuestPoints(x: number): void;
28
- getCombatLevel(): number | undefined;
29
- setCombatLevel(): void;
30
- }
31
- export { OsrsAccount };
78
+ toJson(): OsrsAccountData;
79
+ }
80
+ export { OsrsAccount, OsrsAccountData, Skills, Skill, SkillsDetail, Bosses, BossScore, Clues, ClueScore, BountyHunter, };
@@ -1,64 +1,188 @@
1
1
  "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _OsrsAccount_name, _OsrsAccount_combatLevel, _OsrsAccount_questPoints, _OsrsAccount_skills, _OsrsAccount_skillsDetail, _OsrsAccount_bosses, _OsrsAccount_clues, _OsrsAccount_bountyHunter, _OsrsAccount_lastManStanding, _OsrsAccount_pvpArena, _OsrsAccount_soulWarsZeal, _OsrsAccount_riftsClosed, _OsrsAccount_colosseumGlory, _OsrsAccount_collectionsLogged, _OsrsAccount_leaguePoints, _OsrsAccount_deadmanPoints;
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
15
  exports.OsrsAccount = void 0;
4
16
  class OsrsAccount {
5
- constructor(accountObject) {
6
- this.osrsAccount = accountObject ? accountObject : null;
7
- this.setQuestPoints(0);
8
- this.setCombatLevel();
17
+ constructor(data) {
18
+ _OsrsAccount_name.set(this, void 0);
19
+ _OsrsAccount_combatLevel.set(this, void 0);
20
+ _OsrsAccount_questPoints.set(this, void 0);
21
+ _OsrsAccount_skills.set(this, void 0);
22
+ _OsrsAccount_skillsDetail.set(this, void 0);
23
+ _OsrsAccount_bosses.set(this, void 0);
24
+ _OsrsAccount_clues.set(this, void 0);
25
+ _OsrsAccount_bountyHunter.set(this, void 0);
26
+ _OsrsAccount_lastManStanding.set(this, void 0);
27
+ _OsrsAccount_pvpArena.set(this, void 0);
28
+ _OsrsAccount_soulWarsZeal.set(this, void 0);
29
+ _OsrsAccount_riftsClosed.set(this, void 0);
30
+ _OsrsAccount_colosseumGlory.set(this, void 0);
31
+ _OsrsAccount_collectionsLogged.set(this, void 0);
32
+ _OsrsAccount_leaguePoints.set(this, void 0);
33
+ _OsrsAccount_deadmanPoints.set(this, void 0);
34
+ __classPrivateFieldSet(this, _OsrsAccount_name, data.name, "f");
35
+ __classPrivateFieldSet(this, _OsrsAccount_combatLevel, data.combatLevel, "f");
36
+ __classPrivateFieldSet(this, _OsrsAccount_questPoints, data.questPoints, "f");
37
+ __classPrivateFieldSet(this, _OsrsAccount_skills, data.skills, "f");
38
+ __classPrivateFieldSet(this, _OsrsAccount_skillsDetail, data.skillsDetail, "f");
39
+ __classPrivateFieldSet(this, _OsrsAccount_bosses, data.bosses, "f");
40
+ __classPrivateFieldSet(this, _OsrsAccount_clues, data.clues, "f");
41
+ __classPrivateFieldSet(this, _OsrsAccount_bountyHunter, data.bountyHunter, "f");
42
+ __classPrivateFieldSet(this, _OsrsAccount_lastManStanding, data.lastManStanding, "f");
43
+ __classPrivateFieldSet(this, _OsrsAccount_pvpArena, data.pvpArena, "f");
44
+ __classPrivateFieldSet(this, _OsrsAccount_soulWarsZeal, data.soulWarsZeal, "f");
45
+ __classPrivateFieldSet(this, _OsrsAccount_riftsClosed, data.riftsClosed, "f");
46
+ __classPrivateFieldSet(this, _OsrsAccount_colosseumGlory, data.colosseumGlory, "f");
47
+ __classPrivateFieldSet(this, _OsrsAccount_collectionsLogged, data.collectionsLogged, "f");
48
+ __classPrivateFieldSet(this, _OsrsAccount_leaguePoints, data.leaguePoints, "f");
49
+ __classPrivateFieldSet(this, _OsrsAccount_deadmanPoints, data.deadmanPoints, "f");
9
50
  }
10
- getName() {
11
- var _a;
12
- return (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.name;
51
+ static fromJson(json) {
52
+ var _a, _b, _c, _d, _e, _f, _g;
53
+ const name = json.name || '';
54
+ const combatLevel = (_c = (_b = (_a = json.main) === null || _a === void 0 ? void 0 : _a.combatLevel) !== null && _b !== void 0 ? _b : json.combatLevel) !== null && _c !== void 0 ? _c : 3;
55
+ const questPoints = (_f = (_e = (_d = json.main) === null || _d === void 0 ? void 0 : _d.questPoints) !== null && _e !== void 0 ? _e : json.questPoints) !== null && _f !== void 0 ? _f : 0;
56
+ // Accept both lower and upper case skill keys
57
+ const skills = {};
58
+ const skillsDetail = {};
59
+ const srcSkills = ((_g = json.main) === null || _g === void 0 ? void 0 : _g.skills) || json.skills || {};
60
+ for (const key of Object.keys(srcSkills)) {
61
+ skills[key.toLowerCase()] = { level: srcSkills[key].level };
62
+ skillsDetail[key.toLowerCase()] = {
63
+ rank: srcSkills[key].rank,
64
+ level: srcSkills[key].level,
65
+ xp: srcSkills[key].xp,
66
+ };
67
+ }
68
+ const bosses = json.bosses
69
+ ? Object.assign({}, json.bosses) : undefined;
70
+ const clues = json.clues ? Object.assign({}, json.clues) : undefined;
71
+ const bountyHunter = json.bountyHunter
72
+ ? Object.assign({}, json.bountyHunter) : undefined;
73
+ const lastManStanding = json.lastManStanding;
74
+ const pvpArena = json.pvpArena;
75
+ const soulWarsZeal = json.soulWarsZeal;
76
+ const riftsClosed = json.riftsClosed;
77
+ const colosseumGlory = json.colosseumGlory;
78
+ const collectionsLogged = json.collectionsLogged;
79
+ const leaguePoints = json.leaguePoints;
80
+ const deadmanPoints = json.deadmanPoints;
81
+ return new OsrsAccount({
82
+ name,
83
+ combatLevel,
84
+ questPoints,
85
+ skills,
86
+ skillsDetail,
87
+ bosses,
88
+ clues,
89
+ bountyHunter,
90
+ lastManStanding,
91
+ pvpArena,
92
+ soulWarsZeal,
93
+ riftsClosed,
94
+ colosseumGlory,
95
+ collectionsLogged,
96
+ leaguePoints,
97
+ deadmanPoints,
98
+ });
13
99
  }
14
- toString() {
15
- var _a, _b, _c, _d;
16
- return (((_b = (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "") +
17
- ": \nCombat Level: " +
18
- ((_d = (_c = this.osrsAccount) === null || _c === void 0 ? void 0 : _c.main.combatLevel) !== null && _d !== void 0 ? _d : "") +
19
- "\nQuestPoints: " +
20
- this.getQuestPoints());
21
- }
22
- getSkills() {
23
- var _a;
24
- return (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.main.skills;
100
+ get name() {
101
+ return __classPrivateFieldGet(this, _OsrsAccount_name, "f");
102
+ }
103
+ get combatLevel() {
104
+ return __classPrivateFieldGet(this, _OsrsAccount_combatLevel, "f");
105
+ }
106
+ get questPoints() {
107
+ return __classPrivateFieldGet(this, _OsrsAccount_questPoints, "f");
108
+ }
109
+ get skills() {
110
+ return __classPrivateFieldGet(this, _OsrsAccount_skills, "f");
111
+ }
112
+ get skillsDetail() {
113
+ return __classPrivateFieldGet(this, _OsrsAccount_skillsDetail, "f");
114
+ }
115
+ get bosses() {
116
+ return __classPrivateFieldGet(this, _OsrsAccount_bosses, "f");
117
+ }
118
+ get clues() {
119
+ return __classPrivateFieldGet(this, _OsrsAccount_clues, "f");
120
+ }
121
+ get bountyHunter() {
122
+ return __classPrivateFieldGet(this, _OsrsAccount_bountyHunter, "f");
123
+ }
124
+ get lastManStanding() {
125
+ return __classPrivateFieldGet(this, _OsrsAccount_lastManStanding, "f");
126
+ }
127
+ get pvpArena() {
128
+ return __classPrivateFieldGet(this, _OsrsAccount_pvpArena, "f");
129
+ }
130
+ get soulWarsZeal() {
131
+ return __classPrivateFieldGet(this, _OsrsAccount_soulWarsZeal, "f");
132
+ }
133
+ get riftsClosed() {
134
+ return __classPrivateFieldGet(this, _OsrsAccount_riftsClosed, "f");
135
+ }
136
+ get colosseumGlory() {
137
+ return __classPrivateFieldGet(this, _OsrsAccount_colosseumGlory, "f");
138
+ }
139
+ get collectionsLogged() {
140
+ return __classPrivateFieldGet(this, _OsrsAccount_collectionsLogged, "f");
141
+ }
142
+ get leaguePoints() {
143
+ return __classPrivateFieldGet(this, _OsrsAccount_leaguePoints, "f");
144
+ }
145
+ get deadmanPoints() {
146
+ return __classPrivateFieldGet(this, _OsrsAccount_deadmanPoints, "f");
25
147
  }
26
148
  getSkill(skillName) {
27
- var _a;
28
- return (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.main.skills[skillName.toLowerCase()];
149
+ return __classPrivateFieldGet(this, _OsrsAccount_skills, "f")[skillName.toLowerCase()];
29
150
  }
30
- getQuestPoints() {
151
+ getSkillDetail(skillName) {
31
152
  var _a;
32
- return (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.main.questPoints;
153
+ return (_a = __classPrivateFieldGet(this, _OsrsAccount_skillsDetail, "f")) === null || _a === void 0 ? void 0 : _a[skillName.toLowerCase()];
33
154
  }
34
- setQuestPoints(x) {
35
- if (x >= 0 && this.osrsAccount) {
36
- this.osrsAccount.main.questPoints = x;
37
- }
155
+ getBossScore(bossName) {
156
+ var _a;
157
+ return (_a = __classPrivateFieldGet(this, _OsrsAccount_bosses, "f")) === null || _a === void 0 ? void 0 : _a[bossName];
38
158
  }
39
- getCombatLevel() {
159
+ getClueScore(clueType) {
40
160
  var _a;
41
- return (_a = this.osrsAccount) === null || _a === void 0 ? void 0 : _a.main.combatLevel;
42
- }
43
- setCombatLevel() {
44
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
45
- if (this.osrsAccount) {
46
- const attklvl = (_b = (_a = this.osrsAccount.main.skills.attack) === null || _a === void 0 ? void 0 : _a.level) !== null && _b !== void 0 ? _b : 1;
47
- const strlvl = (_d = (_c = this.osrsAccount.main.skills.strength) === null || _c === void 0 ? void 0 : _c.level) !== null && _d !== void 0 ? _d : 1;
48
- const deflvl = (_f = (_e = this.osrsAccount.main.skills.defence) === null || _e === void 0 ? void 0 : _e.level) !== null && _f !== void 0 ? _f : 1;
49
- const rangedlvl = (_h = (_g = this.osrsAccount.main.skills.ranged) === null || _g === void 0 ? void 0 : _g.level) !== null && _h !== void 0 ? _h : 1;
50
- const magiclvl = (_k = (_j = this.osrsAccount.main.skills.magic) === null || _j === void 0 ? void 0 : _j.level) !== null && _k !== void 0 ? _k : 1;
51
- const praylvl = (_m = (_l = this.osrsAccount.main.skills.prayer) === null || _l === void 0 ? void 0 : _l.level) !== null && _m !== void 0 ? _m : 1;
52
- const hplvl = (_p = (_o = this.osrsAccount.main.skills.hitpoints) === null || _o === void 0 ? void 0 : _o.level) !== null && _p !== void 0 ? _p : 10;
53
- const x = [
54
- 0.325 * (attklvl + strlvl),
55
- 0.325 * ((3 * rangedlvl) / 2),
56
- 0.325 * ((3 * magiclvl) / 2),
57
- ];
58
- const cbMax = Math.max(...x);
59
- this.osrsAccount.main.combatLevel =
60
- 0.25 * (deflvl + hplvl + praylvl / 2) + cbMax;
61
- }
161
+ return (_a = __classPrivateFieldGet(this, _OsrsAccount_clues, "f")) === null || _a === void 0 ? void 0 : _a[clueType];
162
+ }
163
+ toString() {
164
+ return `${__classPrivateFieldGet(this, _OsrsAccount_name, "f")}:\nCombat Level: ${__classPrivateFieldGet(this, _OsrsAccount_combatLevel, "f")}\nQuestPoints: ${__classPrivateFieldGet(this, _OsrsAccount_questPoints, "f")}`;
165
+ }
166
+ toJson() {
167
+ return {
168
+ name: __classPrivateFieldGet(this, _OsrsAccount_name, "f"),
169
+ combatLevel: __classPrivateFieldGet(this, _OsrsAccount_combatLevel, "f"),
170
+ questPoints: __classPrivateFieldGet(this, _OsrsAccount_questPoints, "f"),
171
+ skills: __classPrivateFieldGet(this, _OsrsAccount_skills, "f"),
172
+ skillsDetail: __classPrivateFieldGet(this, _OsrsAccount_skillsDetail, "f"),
173
+ bosses: __classPrivateFieldGet(this, _OsrsAccount_bosses, "f"),
174
+ clues: __classPrivateFieldGet(this, _OsrsAccount_clues, "f"),
175
+ bountyHunter: __classPrivateFieldGet(this, _OsrsAccount_bountyHunter, "f"),
176
+ lastManStanding: __classPrivateFieldGet(this, _OsrsAccount_lastManStanding, "f"),
177
+ pvpArena: __classPrivateFieldGet(this, _OsrsAccount_pvpArena, "f"),
178
+ soulWarsZeal: __classPrivateFieldGet(this, _OsrsAccount_soulWarsZeal, "f"),
179
+ riftsClosed: __classPrivateFieldGet(this, _OsrsAccount_riftsClosed, "f"),
180
+ colosseumGlory: __classPrivateFieldGet(this, _OsrsAccount_colosseumGlory, "f"),
181
+ collectionsLogged: __classPrivateFieldGet(this, _OsrsAccount_collectionsLogged, "f"),
182
+ leaguePoints: __classPrivateFieldGet(this, _OsrsAccount_leaguePoints, "f"),
183
+ deadmanPoints: __classPrivateFieldGet(this, _OsrsAccount_deadmanPoints, "f"),
184
+ };
62
185
  }
63
186
  }
64
187
  exports.OsrsAccount = OsrsAccount;
188
+ _OsrsAccount_name = new WeakMap(), _OsrsAccount_combatLevel = new WeakMap(), _OsrsAccount_questPoints = new WeakMap(), _OsrsAccount_skills = new WeakMap(), _OsrsAccount_skillsDetail = new WeakMap(), _OsrsAccount_bosses = new WeakMap(), _OsrsAccount_clues = new WeakMap(), _OsrsAccount_bountyHunter = new WeakMap(), _OsrsAccount_lastManStanding = new WeakMap(), _OsrsAccount_pvpArena = new WeakMap(), _OsrsAccount_soulWarsZeal = new WeakMap(), _OsrsAccount_riftsClosed = new WeakMap(), _OsrsAccount_colosseumGlory = new WeakMap(), _OsrsAccount_collectionsLogged = new WeakMap(), _OsrsAccount_leaguePoints = new WeakMap(), _OsrsAccount_deadmanPoints = new WeakMap();
@@ -1,4 +1,40 @@
1
1
  import { Requirement } from '../Requirement';
2
+ interface QuestRewardExperience {
3
+ skill: string;
4
+ amount: number;
5
+ }
6
+ interface QuestRewardItem {
7
+ name: string;
8
+ quantity?: number;
9
+ note?: string;
10
+ }
11
+ interface QuestRewardUnlock {
12
+ description: string;
13
+ url?: string;
14
+ }
15
+ interface QuestRewardLamp {
16
+ amount: number;
17
+ skillRestriction?: string | string[];
18
+ note?: string;
19
+ }
20
+ interface QuestRewardPoints {
21
+ type: string;
22
+ amount: number;
23
+ }
24
+ interface QuestRewardPet {
25
+ name: string;
26
+ note?: string;
27
+ }
28
+ interface QuestRewards {
29
+ experience?: QuestRewardExperience[];
30
+ items?: QuestRewardItem[];
31
+ unlocks?: QuestRewardUnlock[];
32
+ lamps?: QuestRewardLamp[];
33
+ points?: QuestRewardPoints[];
34
+ pets?: QuestRewardPet[];
35
+ questPoints: number;
36
+ areas?: string[];
37
+ }
2
38
  interface Quest {
3
39
  id: number;
4
40
  name: string;
@@ -25,15 +61,7 @@ interface Quest {
25
61
  [skill: string]: number;
26
62
  };
27
63
  recommendedPrayers: string[];
28
- rewards: {
29
- experience?: {
30
- [skill: string]: number;
31
- };
32
- items?: string[];
33
- questPoints: number;
34
- areas?: string[];
35
- grants?: string[];
36
- };
64
+ rewards: QuestRewards;
37
65
  [key: string]: any;
38
66
  }
39
67
  export { Quest };
@@ -1,51 +1,36 @@
1
1
  import { OsrsAccount } from '../account/OsrsAccount';
2
2
  import { Quest } from './Quest';
3
3
  declare class QuestTool {
4
- private questObject;
5
- private questArray;
6
- private subQuestArray;
7
4
  private osrsAccount;
8
- constructor();
9
- /**
10
- * to string func
11
- * @todo Implement this function
12
- * @return {String} The string representation of the class object.
13
- */
14
- toString(): string;
15
- /**
16
- * Get the data for a quest
17
- * @param {String} questName The name of the quest
18
- * @return {Object} The data for the input quest in a JSON object.
19
- * */
20
- getQuest(questName: string): Quest | undefined;
21
- /**
22
- * Get the data for a quest
23
- * @param {String} questName The name of the quest
24
- * @return {Object} The data for the input quest in a JSON object.
25
- * */
26
- getQuestByName(questName: string): Quest | undefined;
27
- /**
28
- * Get the data for a quest
29
- * @param {String} subQuestName The name of the subquest
30
- * @return {Object} The data for the input subquest in a JSON object.
31
- * */
32
- getSubQuest(subQuestName: string): any | undefined;
33
- /**
34
- * Add two numbers together
35
- * @todo Need to implement Recipe for disaster functionality
36
- * @param {String} quest The either string or quest object of the quest to be determined completeable or not.
37
- * @return {Boolean} If the account currently tied to the tool can complete the quest.
38
- * */
39
- canCompleteQuest(quest: string | Quest | undefined): boolean;
5
+ constructor(account?: OsrsAccount);
40
6
  /**
41
7
  * Set the account to be used in this quest tool
42
8
  * @param {OsrsAccount} acc1 The osrs Account to be associated with this class object.
43
- * */
9
+ */
44
10
  setOsrsAccount(acc1: OsrsAccount): boolean;
45
11
  /**
46
12
  * Get the osrs account associated with this quest tool
47
13
  * @return {OsrsAccount | undefined} The osrs Account associated with this class object.
48
- * */
14
+ */
49
15
  getOsrsAccount(): OsrsAccount | undefined;
16
+ /**
17
+ * Determine if the account can complete a quest, including recursively checking quest requirements.
18
+ * @param quest The quest to check (must be a Quest instance)
19
+ * @param visited (internal) Set of quest names already checked to prevent infinite recursion
20
+ */
21
+ canCompleteQuest(quest: Quest | undefined, visited?: Set<string>): boolean;
22
+ /**
23
+ * Static utility to get a Quest instance by its name.
24
+ * This assumes all quests are exported as default from their respective files in quest/all/.
25
+ * @param questName The name of the quest to retrieve
26
+ * @returns Quest instance or undefined if not found
27
+ */
28
+ static getQuestByName(questName: string): Quest | undefined;
29
+ /**
30
+ * Get the maximum boost for a given skill, based on OSRS Wiki data.
31
+ * @param skillName The name of the skill (case-insensitive, e.g. 'Attack', 'Herblore')
32
+ * @returns The maximum boost amount for the skill (positive integer, or 0 if unboostable)
33
+ */
34
+ static getMaxSkillBoost(skillName: string): number;
50
35
  }
51
36
  export { QuestTool };