osrs-tools 2.5.3 → 2.6.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 (218) hide show
  1. package/README.md +270 -270
  2. package/dist/runescape/model/quest/QuestTool.d.ts.map +1 -1
  3. package/dist/runescape/model/quest/QuestTool.js +102 -4
  4. package/dist/runescape/model/quest/all/ANightAtTheTheatre.d.ts +4 -0
  5. package/dist/runescape/model/quest/all/ANightAtTheTheatre.d.ts.map +1 -0
  6. package/dist/runescape/model/quest/all/ANightAtTheTheatre.js +4 -0
  7. package/dist/runescape/model/quest/all/AtFirstLight.d.ts +4 -0
  8. package/dist/runescape/model/quest/all/AtFirstLight.d.ts.map +1 -0
  9. package/dist/runescape/model/quest/all/AtFirstLight.js +4 -0
  10. package/dist/runescape/model/quest/all/BeneathCursedSands.d.ts +4 -0
  11. package/dist/runescape/model/quest/all/BeneathCursedSands.d.ts.map +1 -0
  12. package/dist/runescape/model/quest/all/BeneathCursedSands.js +4 -0
  13. package/dist/runescape/model/quest/all/ChildrenOfTheSun.d.ts +4 -0
  14. package/dist/runescape/model/quest/all/ChildrenOfTheSun.d.ts.map +1 -0
  15. package/dist/runescape/model/quest/all/ChildrenOfTheSun.js +4 -0
  16. package/dist/runescape/model/quest/all/ColdWar.js +1 -1
  17. package/dist/runescape/model/quest/all/DeathOnTheIsle.d.ts +4 -0
  18. package/dist/runescape/model/quest/all/DeathOnTheIsle.d.ts.map +1 -0
  19. package/dist/runescape/model/quest/all/DeathOnTheIsle.js +4 -0
  20. package/dist/runescape/model/quest/all/DefenderOfVarrock.d.ts +4 -0
  21. package/dist/runescape/model/quest/all/DefenderOfVarrock.d.ts.map +1 -0
  22. package/dist/runescape/model/quest/all/DefenderOfVarrock.js +4 -0
  23. package/dist/runescape/model/quest/all/DesertTreasureI.d.ts +4 -0
  24. package/dist/runescape/model/quest/all/DesertTreasureI.d.ts.map +1 -0
  25. package/dist/runescape/model/quest/all/DesertTreasureI.js +4 -0
  26. package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.d.ts +4 -0
  27. package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.d.ts.map +1 -0
  28. package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.js +4 -0
  29. package/dist/runescape/model/quest/all/DragonSlayerI.js +1 -1
  30. package/dist/runescape/model/quest/all/ErnestTheChicken.d.ts +4 -0
  31. package/dist/runescape/model/quest/all/ErnestTheChicken.d.ts.map +1 -0
  32. package/dist/runescape/model/quest/all/ErnestTheChicken.js +38 -0
  33. package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.d.ts +4 -0
  34. package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.d.ts.map +1 -0
  35. package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.js +4 -0
  36. package/dist/runescape/model/quest/all/LandOfTheGoblins.d.ts +4 -0
  37. package/dist/runescape/model/quest/all/LandOfTheGoblins.d.ts.map +1 -0
  38. package/dist/runescape/model/quest/all/LandOfTheGoblins.js +4 -0
  39. package/dist/runescape/model/quest/all/LearningTheRopes.d.ts +4 -0
  40. package/dist/runescape/model/quest/all/LearningTheRopes.d.ts.map +1 -0
  41. package/dist/runescape/model/quest/all/LearningTheRopes.js +37 -0
  42. package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.d.ts +4 -0
  43. package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.d.ts.map +1 -0
  44. package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.js +25 -0
  45. package/dist/runescape/model/quest/all/MisthalinMystery.d.ts +4 -0
  46. package/dist/runescape/model/quest/all/MisthalinMystery.d.ts.map +1 -0
  47. package/dist/runescape/model/quest/all/MisthalinMystery.js +4 -0
  48. package/dist/runescape/model/quest/all/MonkeyMadnessI.d.ts +4 -0
  49. package/dist/runescape/model/quest/all/MonkeyMadnessI.d.ts.map +1 -0
  50. package/dist/runescape/model/quest/all/MonkeyMadnessI.js +4 -0
  51. package/dist/runescape/model/quest/all/MountainDaughter.d.ts +4 -0
  52. package/dist/runescape/model/quest/all/MountainDaughter.d.ts.map +1 -0
  53. package/dist/runescape/model/quest/all/MountainDaughter.js +25 -0
  54. package/dist/runescape/model/quest/all/MourningsEndPartI.d.ts +4 -0
  55. package/dist/runescape/model/quest/all/MourningsEndPartI.d.ts.map +1 -0
  56. package/dist/runescape/model/quest/all/MourningsEndPartI.js +4 -0
  57. package/dist/runescape/model/quest/all/MourningsEndPartII.d.ts +4 -0
  58. package/dist/runescape/model/quest/all/MourningsEndPartII.d.ts.map +1 -0
  59. package/dist/runescape/model/quest/all/MourningsEndPartII.js +4 -0
  60. package/dist/runescape/model/quest/all/PerilousMoons.d.ts +4 -0
  61. package/dist/runescape/model/quest/all/PerilousMoons.d.ts.map +1 -0
  62. package/dist/runescape/model/quest/all/PerilousMoons.js +4 -0
  63. package/dist/runescape/model/quest/all/PiratesTreasure.d.ts +4 -0
  64. package/dist/runescape/model/quest/all/PiratesTreasure.d.ts.map +1 -0
  65. package/dist/runescape/model/quest/all/PiratesTreasure.js +4 -0
  66. package/dist/runescape/model/quest/all/PrinceAliRescue.d.ts +4 -0
  67. package/dist/runescape/model/quest/all/PrinceAliRescue.d.ts.map +1 -0
  68. package/dist/runescape/model/quest/all/PrinceAliRescue.js +4 -0
  69. package/dist/runescape/model/quest/all/RagAndBoneManI.d.ts +4 -0
  70. package/dist/runescape/model/quest/all/RagAndBoneManI.d.ts.map +1 -0
  71. package/dist/runescape/model/quest/all/RagAndBoneManI.js +4 -0
  72. package/dist/runescape/model/quest/all/RagAndBoneManII.d.ts +4 -0
  73. package/dist/runescape/model/quest/all/RagAndBoneManII.d.ts.map +1 -0
  74. package/dist/runescape/model/quest/all/RagAndBoneManII.js +4 -0
  75. package/dist/runescape/model/quest/all/RomeoAndJuliet.d.ts +4 -0
  76. package/dist/runescape/model/quest/all/RomeoAndJuliet.d.ts.map +1 -0
  77. package/dist/runescape/model/quest/all/RomeoAndJuliet.js +25 -0
  78. package/dist/runescape/model/quest/all/RuneMysteries.d.ts +4 -0
  79. package/dist/runescape/model/quest/all/RuneMysteries.d.ts.map +1 -0
  80. package/dist/runescape/model/quest/all/RuneMysteries.js +4 -0
  81. package/dist/runescape/model/quest/all/SecretsOfTheNorth.d.ts +4 -0
  82. package/dist/runescape/model/quest/all/SecretsOfTheNorth.d.ts.map +1 -0
  83. package/dist/runescape/model/quest/all/SecretsOfTheNorth.js +4 -0
  84. package/dist/runescape/model/quest/all/SheepShearer.d.ts +4 -0
  85. package/dist/runescape/model/quest/all/SheepShearer.d.ts.map +1 -0
  86. package/dist/runescape/model/quest/all/SheepShearer.js +4 -0
  87. package/dist/runescape/model/quest/all/ShieldOfArrav.d.ts +4 -0
  88. package/dist/runescape/model/quest/all/ShieldOfArrav.d.ts.map +1 -0
  89. package/dist/runescape/model/quest/all/ShieldOfArrav.js +4 -0
  90. package/dist/runescape/model/quest/all/SinsOfTheFather.d.ts +4 -0
  91. package/dist/runescape/model/quest/all/SinsOfTheFather.d.ts.map +1 -0
  92. package/dist/runescape/model/quest/all/SinsOfTheFather.js +4 -0
  93. package/dist/runescape/model/quest/all/SleepingGiants.d.ts +4 -0
  94. package/dist/runescape/model/quest/all/SleepingGiants.d.ts.map +1 -0
  95. package/dist/runescape/model/quest/all/SleepingGiants.js +4 -0
  96. package/dist/runescape/model/quest/all/TaleOfTheRighteous.d.ts +4 -0
  97. package/dist/runescape/model/quest/all/TaleOfTheRighteous.d.ts.map +1 -0
  98. package/dist/runescape/model/quest/all/TaleOfTheRighteous.js +4 -0
  99. package/dist/runescape/model/quest/all/TearsOfGuthix.d.ts +4 -0
  100. package/dist/runescape/model/quest/all/TearsOfGuthix.d.ts.map +1 -0
  101. package/dist/runescape/model/quest/all/TearsOfGuthix.js +4 -0
  102. package/dist/runescape/model/quest/all/TempleOfIkov.d.ts +4 -0
  103. package/dist/runescape/model/quest/all/TempleOfIkov.d.ts.map +1 -0
  104. package/dist/runescape/model/quest/all/TempleOfIkov.js +4 -0
  105. package/dist/runescape/model/quest/all/TempleOfTheEye.d.ts +4 -0
  106. package/dist/runescape/model/quest/all/TempleOfTheEye.d.ts.map +1 -0
  107. package/dist/runescape/model/quest/all/TempleOfTheEye.js +4 -0
  108. package/dist/runescape/model/quest/all/TheCorsairCurse.d.ts +4 -0
  109. package/dist/runescape/model/quest/all/TheCorsairCurse.d.ts.map +1 -0
  110. package/dist/runescape/model/quest/all/TheCorsairCurse.js +25 -0
  111. package/dist/runescape/model/quest/all/TheCurseOfArrav.d.ts +4 -0
  112. package/dist/runescape/model/quest/all/TheCurseOfArrav.d.ts.map +1 -0
  113. package/dist/runescape/model/quest/all/TheCurseOfArrav.js +34 -0
  114. package/dist/runescape/model/quest/all/TheDigSite.d.ts +4 -0
  115. package/dist/runescape/model/quest/all/TheDigSite.d.ts.map +1 -0
  116. package/dist/runescape/model/quest/all/TheDigSite.js +4 -0
  117. package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.d.ts +4 -0
  118. package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.d.ts.map +1 -0
  119. package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.js +4 -0
  120. package/dist/runescape/model/quest/all/TheFeud.d.ts +4 -0
  121. package/dist/runescape/model/quest/all/TheFeud.d.ts.map +1 -0
  122. package/dist/runescape/model/quest/all/TheFeud.js +4 -0
  123. package/dist/runescape/model/quest/all/TheGardenOfDeath.d.ts +4 -0
  124. package/dist/runescape/model/quest/all/TheGardenOfDeath.d.ts.map +1 -0
  125. package/dist/runescape/model/quest/all/TheGardenOfDeath.js +4 -0
  126. package/dist/runescape/model/quest/all/TheHandInTheSand.js +1 -1
  127. package/dist/runescape/model/quest/all/TheHeartOfDarkness.d.ts +4 -0
  128. package/dist/runescape/model/quest/all/TheHeartOfDarkness.d.ts.map +1 -0
  129. package/dist/runescape/model/quest/all/TheHeartOfDarkness.js +4 -0
  130. package/dist/runescape/model/quest/all/TheIdesOfMilk.d.ts +4 -0
  131. package/dist/runescape/model/quest/all/TheIdesOfMilk.d.ts.map +1 -0
  132. package/dist/runescape/model/quest/all/TheIdesOfMilk.js +4 -0
  133. package/dist/runescape/model/quest/all/ThePathOfGlouphrie.d.ts +4 -0
  134. package/dist/runescape/model/quest/all/ThePathOfGlouphrie.d.ts.map +1 -0
  135. package/dist/runescape/model/quest/all/ThePathOfGlouphrie.js +4 -0
  136. package/dist/runescape/model/quest/all/TheRestlessGhost.d.ts +4 -0
  137. package/dist/runescape/model/quest/all/TheRestlessGhost.d.ts.map +1 -0
  138. package/dist/runescape/model/quest/all/TheRestlessGhost.js +4 -0
  139. package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.d.ts +4 -0
  140. package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.d.ts.map +1 -0
  141. package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.js +4 -0
  142. package/dist/runescape/model/quest/all/TwilightsPromise.d.ts +4 -0
  143. package/dist/runescape/model/quest/all/TwilightsPromise.d.ts.map +1 -0
  144. package/dist/runescape/model/quest/all/TwilightsPromise.js +4 -0
  145. package/dist/runescape/model/quest/all/WhileGuthixSleeps.d.ts +4 -0
  146. package/dist/runescape/model/quest/all/WhileGuthixSleeps.d.ts.map +1 -0
  147. package/dist/runescape/model/quest/all/WhileGuthixSleeps.js +4 -0
  148. package/dist/runescape/model/quest/all/WitchsPotion.d.ts +4 -0
  149. package/dist/runescape/model/quest/all/WitchsPotion.d.ts.map +1 -0
  150. package/dist/runescape/model/quest/all/WitchsPotion.js +4 -0
  151. package/dist/runescape/model/quest/all/XMarksTheSpot.d.ts +4 -0
  152. package/dist/runescape/model/quest/all/XMarksTheSpot.d.ts.map +1 -0
  153. package/dist/runescape/model/quest/all/XMarksTheSpot.js +4 -0
  154. package/dist/runescape/model/quest/all/index.d.ts +47 -0
  155. package/dist/runescape/model/quest/all/index.d.ts.map +1 -1
  156. package/dist/runescape/model/quest/all/index.js +47 -0
  157. package/dist/runescape/model/slayer/index.d.ts +10 -10
  158. package/dist/runescape/model/slayer/index.d.ts.map +1 -1
  159. package/dist/runescape/model/slayer/index.js +8 -8
  160. package/dist/runescape/model/slayer/masters/index.d.ts +19 -19
  161. package/dist/runescape/model/slayer/masters/index.d.ts.map +1 -1
  162. package/dist/runescape/model/slayer/masters/index.js +20 -20
  163. package/dist/runescape/model/slayer/masters/registry.d.ts +1 -1
  164. package/dist/runescape/model/slayer/masters/registry.d.ts.map +1 -1
  165. package/dist/runescape/model/slayer/masters/registry.js +1 -1
  166. package/dist/runescape/model/slayer/masters.d.ts +8 -0
  167. package/dist/runescape/model/slayer/masters.d.ts.map +1 -0
  168. package/dist/runescape/model/slayer/masters.js +6 -0
  169. package/dist/runescape/model/slayer/tasks/index.d.ts +11 -11
  170. package/dist/runescape/model/slayer/tasks/index.js +11 -11
  171. package/package.json +96 -96
  172. package/public/assets/icons/diaries/Ardougne_Diary.png +0 -0
  173. package/public/assets/icons/diaries/Desert_Diary.png +0 -0
  174. package/public/assets/icons/diaries/Falador_Diary.png +0 -0
  175. package/public/assets/icons/diaries/Fremennik_Diary.png +0 -0
  176. package/public/assets/icons/diaries/Kandarin_Diary.png +0 -0
  177. package/public/assets/icons/diaries/Karamja_Diary.png +0 -0
  178. package/public/assets/icons/diaries/Morytania_Diary.png +0 -0
  179. package/public/assets/icons/diaries/Varrock_Diary.png +0 -0
  180. package/public/assets/icons/diaries/Wilderness_Diary.png +0 -0
  181. package/public/assets/icons/skills/Agility_icon.png +0 -0
  182. package/public/assets/icons/skills/Attack_icon.png +0 -0
  183. package/public/assets/icons/skills/Construction_icon.png +0 -0
  184. package/public/assets/icons/skills/Cooking_icon.png +0 -0
  185. package/public/assets/icons/skills/Crafting_icon.png +0 -0
  186. package/public/assets/icons/skills/Defence_icon.png +0 -0
  187. package/public/assets/icons/skills/Farming_icon.png +0 -0
  188. package/public/assets/icons/skills/Firemaking_icon.png +0 -0
  189. package/public/assets/icons/skills/Fishing_icon.png +0 -0
  190. package/public/assets/icons/skills/Fletching_icon.png +0 -0
  191. package/public/assets/icons/skills/Herblore_icon.png +0 -0
  192. package/public/assets/icons/skills/Hitpoints_icon.png +0 -0
  193. package/public/assets/icons/skills/Magic_icon.png +0 -0
  194. package/public/assets/icons/skills/Mining_icon.png +0 -0
  195. package/public/assets/icons/skills/Prayer_icon.png +0 -0
  196. package/public/assets/icons/skills/Ranged_icon.png +0 -0
  197. package/public/assets/icons/skills/Sailing_icon.png +0 -0
  198. package/public/assets/icons/skills/Slayer_icon.png +0 -0
  199. package/public/assets/icons/skills/Smithing_icon.png +0 -0
  200. package/public/assets/icons/skills/Strength_icon.png +0 -0
  201. package/public/assets/icons/skills/Thieving_icon.png +0 -0
  202. package/public/assets/icons/skills/Woodcutting_icon.png +0 -0
  203. package/public/assets/icons/tabs/Combat_Tab.png +0 -0
  204. package/public/assets/icons/tabs/Inventory_Tab.png +0 -0
  205. package/public/assets/icons/tabs/Magic_Tab.png +0 -0
  206. package/public/assets/icons/tabs/Prayer_Tab.png +0 -0
  207. package/public/assets/icons/tabs/Quest_Tab.png +0 -0
  208. package/public/assets/icons/tabs/Skills_Tab.png +0 -0
  209. package/public/assets/icons/ui/Bank.png +0 -0
  210. package/public/assets/icons/ui/Music.png +0 -0
  211. package/public/assets/icons/ui/Quest_Points.png +0 -0
  212. package/public/assets/icons/ui/Settings.png +0 -0
  213. package/dist/runescape/model/Item/ClueScrollRewards.js +0 -286
  214. package/dist/runescape/model/Item/all/StudiedChaps.js +0 -35
  215. package/dist/runescape/model/Item/models/YellowPartyhat.obj +0 -149
  216. package/dist/runescape/model/slayer/Masters.js +0 -101
  217. package/dist/runescape/tools/ClueScrollHelper.js +0 -103
  218. package/dist/runescape/utils/cache.js +0 -124
@@ -1,286 +0,0 @@
1
- /**
2
- * Clue Scroll Reward Item Mappings
3
- * Organizes all clue scroll rewards by tier with their correct rarity tiers
4
- * Based on official OSRS Wiki data
5
- */
6
- import { AdamantPlatebody } from './all/AdamantPlatebody';
7
- import { AdamantPlatelegs } from './all/AdamantPlatelegs';
8
- import { AdamantShieldG } from './all/AdamantShieldG';
9
- import { AirRune } from './all/AirRune';
10
- import { AmuletOfMagic } from './all/AmuletOfMagic';
11
- import { AmuletOfMagicT } from './all/AmuletOfMagicT';
12
- import { AmuletOfPowerT } from './all/AmuletOfPowerT';
13
- import { AmuletOfTheVoid } from './all/AmuletOfTheVoid';
14
- import { AncestralRobeBottom } from './all/AncestralRobeBottom';
15
- import { AncestralRobeTop } from './all/AncestralRobeTop';
16
- import { BlackAxe } from './all/BlackAxe';
17
- import { BlackBattleaxe } from './all/BlackBattleaxe';
18
- import { BlackDagger } from './all/BlackDagger';
19
- import { BlackFullHelm } from './all/BlackFullHelm';
20
- import { BlackFullHelmT } from './all/BlackFullHelmT';
21
- import { BlackLongsword } from './all/BlackLongsword';
22
- import { BlackPlatebody } from './all/BlackPlatebody';
23
- import { BlackPlatebodyT } from './all/BlackPlatebodyT';
24
- import { BlackPlatelegs } from './all/BlackPlatelegs';
25
- import { BlackPlatelegsT } from './all/BlackPlatelegsT';
26
- import { BlackPickaxe } from './all/BlackPickaxe';
27
- import { BodyRune } from './all/BodyRune';
28
- import { BlueDHideBody } from './all/BlueDHideBody';
29
- import { BlueDHideChaps } from './all/BlueDHideChaps';
30
- import { CapeOfSkulls } from './all/CapeOfSkulls';
31
- import { ChaosRune } from './all/ChaosRune';
32
- import { Coins } from './all/Coins';
33
- import { Coif } from './all/Coif';
34
- import { CrawsBow } from './all/CrawsBow';
35
- import { DragonBoots } from './all/DragonBoots';
36
- import { DragonFullHelm } from './all/DragonFullHelm';
37
- import { DragonMediumHelm } from './all/DragonMediumHelm';
38
- import { DragonPlatebody } from './all/DragonPlatebody';
39
- import { DragonPlatelegs } from './all/DragonPlatelegs';
40
- import { EarthRune } from './all/EarthRune';
41
- import { FireRune } from './all/FireRune';
42
- import { FlaredTrousers } from './all/FlaredTrousersItem';
43
- import { GildedFullHelm } from './all/GildedFullHelm';
44
- import { GildedLegs } from './all/GildedLegs';
45
- import { GildedPlatebody } from './all/GildedPlatebody';
46
- import { GoldenApron } from './all/GoldenApron';
47
- import { GoldenChefsHat } from './all/GoldenChefsHat';
48
- import { GreenDHideBody } from './all/GreenDHideBody';
49
- import { HamJoint } from './all/HamJoint';
50
- import { IronBoots } from './all/IronBoots';
51
- import { IronFullHelm } from './all/IronFullHelm';
52
- import { IronFullHelmT } from './all/IronFullHelmT';
53
- import { IronPlatebody } from './all/IronPlatebody';
54
- import { IronPlatebodyT } from './all/IronPlatebodyT';
55
- import { IronPlatelegs } from './all/IronPlatelegs';
56
- import { LawRune } from './all/LawRune';
57
- import { MasterScrollBookEmpty } from './all/MasterScrollBookEmpty';
58
- import { MindRune } from './all/MindRune';
59
- import { MithrilBoots } from './all/MithrilBoots';
60
- import { MithrilFullHelm } from './all/MithrilFullHelm';
61
- import { MithrilPlatebody } from './all/MithrilPlatebody';
62
- import { MithrilPlatelegs } from './all/MithrilPlatelegs';
63
- import { MithrilShieldT } from './all/MithrilShieldT';
64
- import { MonksRobeG } from './all/MonksRobeG';
65
- import { MonksRobeTopG } from './all/MonksRobeTopG';
66
- import { NatureRune } from './all/NatureRune';
67
- import { RainBow } from './all/RainBow';
68
- import { RangerBoots } from './all/RangerBoots';
69
- import { RangerGloves } from './all/RangerGloves';
70
- import { RangerLegs } from './all/RangerLegs';
71
- import { RangerTunic } from './all/RangerTunic';
72
- import { RedDHideBody } from './all/RedDHideBody';
73
- import { RedDHideChaps } from './all/RedDHideChaps';
74
- import { RedElegantShirt } from './all/RedElegantShirt';
75
- import { RuneFullHelm } from './all/RuneFullHelm';
76
- import { RuneFullHelmT } from './all/RuneFullHelmT';
77
- import { RuneMediumHelm } from './all/RuneMediumHelm';
78
- import { RunePlatebody } from './all/RunePlatebody';
79
- import { RunePlatebodyT } from './all/RunePlatebodyT';
80
- import { RunePlatelegs } from './all/RunePlatelegs';
81
- import { RuniteBar } from './all/RuniteBar';
82
- import { Salmon } from './all/Salmon';
83
- import { StaffOfAir } from './all/StaffOfAir';
84
- import { StaffOfBobTheCat } from './all/StaffOfBobTheCat';
85
- import { SteelBoots } from './all/SteelBoots';
86
- import { SteelFullHelm } from './all/SteelFullHelm';
87
- import { SteelFullHelmT } from './all/SteelFullHelmT';
88
- import { SteelPickaxe } from './all/SteelPickaxe';
89
- import { SteelPlatebody } from './all/SteelPlatebody';
90
- import { SteelPlatebodyT } from './all/SteelPlatebodyT';
91
- import { SteelPlatelegs } from './all/SteelPlatelegs';
92
- import { StudiedBody } from './all/StudiedBody';
93
- import { StudiedChaps } from './all/StudiedChaps';
94
- import { TeamCapeI } from './all/TeamCapeI';
95
- import { TeamCapeX } from './all/TeamCapeX';
96
- import { TeamCapeZero } from './all/TeamCapeZero';
97
- import { ThammaronsSceptre } from './all/ThammaronsSceptre';
98
- import { ThirdAgeLongsword } from './all/ThirdAgeLongsword';
99
- import { ThirdAgePlatebody } from './all/ThirdAgePlatebody';
100
- import { ThirdAgePlatelegs } from './all/ThirdAgePlatelegs';
101
- import { TreasonousRing } from './all/TreasonousRing';
102
- import { Trout } from './all/Trout';
103
- import { TwistedBow } from './all/TwistedBow';
104
- import { UncutDiamond } from './all/UncutDiamond';
105
- import { UncutEmerald } from './all/UncutEmerald';
106
- import { UncutRuby } from './all/UncutRuby';
107
- import { UncutSapphire } from './all/UncutSapphire';
108
- import { WaterRune } from './all/WaterRune';
109
- import { WillowCompBow } from './all/WillowCompBow';
110
- import { WillowLongbow } from './all/WillowLongbow';
111
- import { WillowShortbow } from './all/WillowShortbow';
112
- import { WoodenShieldG } from './all/WoodenShieldG';
113
- /**
114
- * Reward odds mapping for Beginner clue scrolls
115
- * Items are organized with their rarity tiers (denominator)
116
- */
117
- export const BEGINNER_REWARDS = {
118
- 'Iron full helm': { item: IronFullHelm, rarity: 10 },
119
- 'Iron platebody': { item: IronPlatebody, rarity: 10 },
120
- 'Iron platelegs': { item: IronPlatelegs, rarity: 10 },
121
- 'Iron boots': { item: IronBoots, rarity: 10 },
122
- 'Steel full helm': { item: SteelFullHelm, rarity: 15 },
123
- 'Steel platebody': { item: SteelPlatebody, rarity: 15 },
124
- 'Steel platelegs': { item: SteelPlatelegs, rarity: 15 },
125
- 'Steel boots': { item: SteelBoots, rarity: 15 },
126
- 'Mithril full helm': { item: MithrilFullHelm, rarity: 25 },
127
- 'Mithril platebody': { item: MithrilPlatebody, rarity: 25 },
128
- 'Mithril platelegs': { item: MithrilPlatelegs, rarity: 25 },
129
- 'Mithril boots': { item: MithrilBoots, rarity: 25 },
130
- 'Uncut sapphire': { item: UncutSapphire, rarity: 50 },
131
- 'Uncut emerald': { item: UncutEmerald, rarity: 50 },
132
- 'Uncut ruby': { item: UncutRuby, rarity: 50 },
133
- 'Uncut diamond': { item: UncutDiamond, rarity: 100 },
134
- };
135
- /**
136
- * Reward odds mapping for Easy clue scrolls
137
- */
138
- export const EASY_REWARDS = {
139
- 'Black full helm': { item: BlackFullHelm, rarity: 36 },
140
- 'Black platebody': { item: BlackPlatebody, rarity: 36 },
141
- 'Black platelegs': { item: BlackPlatelegs, rarity: 36 },
142
- 'Black longsword': { item: BlackLongsword, rarity: 36 },
143
- 'Black battleaxe': { item: BlackBattleaxe, rarity: 36 },
144
- 'Black axe': { item: BlackAxe, rarity: 36 },
145
- 'Black dagger': { item: BlackDagger, rarity: 36 },
146
- 'Steel pickaxe': { item: SteelPickaxe, rarity: 36 },
147
- 'Black pickaxe': { item: BlackPickaxe, rarity: 36 },
148
- 'Coif': { item: Coif, rarity: 36 },
149
- 'Studded body': { item: StudiedBody, rarity: 36 },
150
- 'Studded chaps': { item: StudiedChaps, rarity: 36 },
151
- 'Willow shortbow': { item: WillowShortbow, rarity: 36 },
152
- 'Staff of air': { item: StaffOfAir, rarity: 36 },
153
- 'Air rune': { item: AirRune, rarity: 36 },
154
- 'Mind rune': { item: MindRune, rarity: 36 },
155
- 'Water rune': { item: WaterRune, rarity: 36 },
156
- 'Earth rune': { item: EarthRune, rarity: 36 },
157
- 'Fire rune': { item: FireRune, rarity: 36 },
158
- 'Body rune': { item: BodyRune, rarity: 36 },
159
- 'Chaos rune': { item: ChaosRune, rarity: 36 },
160
- 'Nature rune': { item: NatureRune, rarity: 36 },
161
- 'Law rune': { item: LawRune, rarity: 36 },
162
- 'Trout': { item: Trout, rarity: 36 },
163
- 'Salmon': { item: Salmon, rarity: 36 },
164
- 'Coins (50-200)': { item: Coins, rarity: 36 },
165
- 'Willow longbow': { item: WillowLongbow, rarity: 40 },
166
- 'Amulet of magic': { item: AmuletOfMagic, rarity: 40 },
167
- 'Willow comp bow': { item: WillowCompBow, rarity: 360 },
168
- 'Amulet of magic (t)': { item: AmuletOfMagicT, rarity: 360 },
169
- 'Wooden shield (g)': { item: WoodenShieldG, rarity: 1404 },
170
- 'Black full helm (t)': { item: BlackFullHelmT, rarity: 1404 },
171
- 'Black platebody (t)': { item: BlackPlatebodyT, rarity: 1404 },
172
- 'Black platelegs (t)': { item: BlackPlatelegsT, rarity: 1404 },
173
- 'Steel full helm (t)': { item: SteelFullHelmT, rarity: 1404 },
174
- 'Steel platebody (t)': { item: SteelPlatebodyT, rarity: 1404 },
175
- 'Iron full helm (t)': { item: IronFullHelmT, rarity: 1404 },
176
- 'Iron platebody (t)': { item: IronPlatebodyT, rarity: 1404 },
177
- 'Flared trousers': { item: FlaredTrousers, rarity: 1404 },
178
- 'Ham joint': { item: HamJoint, rarity: 1404 },
179
- 'Staff of bob the cat': { item: StaffOfBobTheCat, rarity: 1404 },
180
- 'Amulet of power (t)': { item: AmuletOfPowerT, rarity: 1404 },
181
- 'Rain bow': { item: RainBow, rarity: 1404 },
182
- 'Master scroll book (empty)': { item: MasterScrollBookEmpty, rarity: 1404 },
183
- 'Golden chef\'s hat': { item: GoldenChefsHat, rarity: 2808 },
184
- 'Golden apron': { item: GoldenApron, rarity: 2808 },
185
- 'Red elegant shirt': { item: RedElegantShirt, rarity: 2808 },
186
- 'Team cape zero': { item: TeamCapeZero, rarity: 5616 },
187
- 'Team cape i': { item: TeamCapeI, rarity: 5616 },
188
- 'Team cape x': { item: TeamCapeX, rarity: 5616 },
189
- 'Cape of skulls': { item: CapeOfSkulls, rarity: 5616 },
190
- 'Monk\'s robe top (g)': { item: MonksRobeTopG, rarity: 14040 },
191
- 'Monk\'s robe (g)': { item: MonksRobeG, rarity: 14040 },
192
- };
193
- /**
194
- * Reward odds mapping for Medium clue scrolls
195
- */
196
- export const MEDIUM_REWARDS = {
197
- 'Mithril platebody': { item: MithrilPlatebody, rarity: 40 },
198
- 'Mithril platelegs': { item: MithrilPlatelegs, rarity: 40 },
199
- 'Adamant platebody': { item: AdamantPlatebody, rarity: 40 },
200
- 'Adamant platelegs': { item: AdamantPlatelegs, rarity: 40 },
201
- 'Rune medium helm': { item: RuneMediumHelm, rarity: 60 },
202
- 'Rune full helm': { item: RuneFullHelm, rarity: 60 },
203
- 'Ranger tunic': { item: RangerTunic, rarity: 60 },
204
- 'Mithril shield (t)': { item: MithrilShieldT, rarity: 240 },
205
- 'Adamant shield (g)': { item: AdamantShieldG, rarity: 240 },
206
- 'Green d\'hide body': { item: GreenDHideBody, rarity: 600 },
207
- };
208
- /**
209
- * Reward odds mapping for Hard clue scrolls
210
- */
211
- export const HARD_REWARDS = {
212
- 'Rune full helm': { item: RuneFullHelm, rarity: 48 },
213
- 'Rune platebody': { item: RunePlatebody, rarity: 48 },
214
- 'Rune platelegs': { item: RunePlatelegs, rarity: 48 },
215
- 'Runite bar': { item: RuniteBar, rarity: 48 },
216
- 'Blue d\'hide body': { item: BlueDHideBody, rarity: 64 },
217
- 'Blue d\'hide chaps': { item: BlueDHideChaps, rarity: 64 },
218
- 'Dragon medium helm': { item: DragonMediumHelm, rarity: 80 },
219
- 'Amulet of the void': { item: AmuletOfTheVoid, rarity: 108 },
220
- 'Rune full helm (t)': { item: RuneFullHelmT, rarity: 240 },
221
- 'Rune platebody (t)': { item: RunePlatebodyT, rarity: 240 },
222
- 'Ranger boots': { item: RangerBoots, rarity: 336 },
223
- 'Ranger gloves': { item: RangerGloves, rarity: 336 },
224
- 'Ranger tunic': { item: RangerTunic, rarity: 336 },
225
- 'Ranger legs': { item: RangerLegs, rarity: 336 },
226
- };
227
- /**
228
- * Reward odds mapping for Elite clue scrolls
229
- */
230
- export const ELITE_REWARDS = {
231
- 'Rune full helm': { item: RuneFullHelm, rarity: 36 },
232
- 'Dragon platebody': { item: DragonPlatebody, rarity: 50 },
233
- 'Dragon platelegs': { item: DragonPlatelegs, rarity: 50 },
234
- 'Dragon medium helm': { item: DragonMediumHelm, rarity: 50 },
235
- 'Red d\'hide body': { item: RedDHideBody, rarity: 45 },
236
- 'Red d\'hide chaps': { item: RedDHideChaps, rarity: 45 },
237
- 'Craw\'s bow': { item: CrawsBow, rarity: 360 },
238
- 'Thammaron\'s sceptre': { item: ThammaronsSceptre, rarity: 360 },
239
- 'Treasonous ring': { item: TreasonousRing, rarity: 360 },
240
- };
241
- /**
242
- * Reward odds mapping for Master clue scrolls
243
- */
244
- export const MASTER_REWARDS = {
245
- 'Gilded platebody': { item: GildedPlatebody, rarity: 12 },
246
- 'Gilded platelegs': { item: GildedLegs, rarity: 12 },
247
- 'Gilded full helm': { item: GildedFullHelm, rarity: 12 },
248
- 'Dragon full helm': { item: DragonFullHelm, rarity: 30 },
249
- 'Dragon platebody': { item: DragonPlatebody, rarity: 30 },
250
- 'Dragon platelegs': { item: DragonPlatelegs, rarity: 30 },
251
- 'Dragon boots': { item: DragonBoots, rarity: 30 },
252
- 'Twisted bow': { item: TwistedBow, rarity: 800 },
253
- 'Ancestral robe top': { item: AncestralRobeTop, rarity: 800 },
254
- 'Ancestral robe bottom': { item: AncestralRobeBottom, rarity: 800 },
255
- '3rd age longsword': { item: ThirdAgeLongsword, rarity: 1000 },
256
- '3rd age platebody': { item: ThirdAgePlatebody, rarity: 1000 },
257
- '3rd age platelegs': { item: ThirdAgePlatelegs, rarity: 1000 },
258
- };
259
- /**
260
- * Gets all reward odds for a specific clue tier
261
- */
262
- export function getClueRewardsByTier(tier) {
263
- switch (tier.toLowerCase()) {
264
- case 'beginner':
265
- return BEGINNER_REWARDS;
266
- case 'easy':
267
- return EASY_REWARDS;
268
- case 'medium':
269
- return MEDIUM_REWARDS;
270
- case 'hard':
271
- return HARD_REWARDS;
272
- case 'elite':
273
- return ELITE_REWARDS;
274
- case 'master':
275
- return MASTER_REWARDS;
276
- default:
277
- throw new Error(`Unknown clue tier: ${tier}`);
278
- }
279
- }
280
- /**
281
- * Gets all items for a specific tier as an array
282
- */
283
- export function getClueItemsList(tier) {
284
- const rewards = getClueRewardsByTier(tier);
285
- return Object.values(rewards).map(r => r.item);
286
- }
@@ -1,35 +0,0 @@
1
- import { Item } from '../Item';
2
- const studiedChapsData = {
3
- id: 1333,
4
- name: 'Studded chaps',
5
- iconUrl: '/assets/items/studded-chaps.png',
6
- examine: 'Leather chaps with metal studs.',
7
- value: 50,
8
- highAlch: 30,
9
- lowAlch: 20,
10
- weight: 2.721,
11
- members: true,
12
- tradeable: true,
13
- equipable: true,
14
- releaseDate: '2001-12-10',
15
- destroy: 'Drop',
16
- questItem: false,
17
- stackable: false,
18
- noted: false,
19
- officialWikiUrl: 'https://oldschool.runescape.wiki/w/Studded_chaps',
20
- attackStab: 0,
21
- attackSlash: 0,
22
- attackCrush: 0,
23
- attackRanged: 0,
24
- attackMagic: -5,
25
- defenceStab: 15,
26
- defenceSlash: 18,
27
- defenceCrush: 12,
28
- defenceRanged: 15,
29
- defenceMagic: -3,
30
- strength: 0,
31
- rangedStrength: 0,
32
- magicDamage: 0,
33
- prayer: 0,
34
- };
35
- export const StudiedChaps = Item.fromJson(studiedChapsData);
@@ -1,149 +0,0 @@
1
- # Made by RuneLite Model-Dumper Plugin
2
- mtllib Item Yellow partyhat 2026-03-24_23-28-34.mtl
3
- o Item Yellow partyhat 2026-03-24_23-28-34
4
- v 0 7 9
5
- v 7 7 9
6
- v 7 2 9
7
- v 0 2 9
8
- v -7 7 9
9
- v 0 10 10
10
- v 5 17 11
11
- v -7 2 9
12
- v -10 3 -2
13
- v -10 9 -2
14
- v -10 17 4
15
- v 10 9 -2
16
- v 10 3 -2
17
- v 10 17 4
18
- v 8 7 -12
19
- v 7 0 -11
20
- v 9 17 -7
21
- v -7 0 -11
22
- v -8 7 -12
23
- v -10 17 -7
24
- v 0 7 -14
25
- v 0 -1 -13
26
- v 5 17 -13
27
- v -5 17 -13
28
- v -5 17 11
29
- v 7 9 9
30
- v 0 9 9
31
- v -7 9 9
32
- v -10 10 -2
33
- v -8 9 -12
34
- v 0 9 -14
35
- v 8 9 -12
36
- v 10 10 -2
37
- v -5 19 11
38
- v 0 12 10
39
- v 5 19 11
40
- v -10 19 4
41
- v -10 19 -7
42
- v -5 19 -13
43
- v 5 19 -13
44
- v 9 19 -7
45
- v 10 19 4
46
- usemtl c0
47
- f 1 2 3
48
- usemtl c1
49
- f 1 3 4
50
- usemtl c2
51
- f 1 4 5
52
- usemtl c3
53
- f 1 5 6
54
- usemtl c4
55
- f 1 6 2
56
- usemtl c5
57
- f 2 6 7
58
- usemtl c6
59
- f 4 8 5
60
- usemtl c7
61
- f 5 8 9
62
- usemtl c8
63
- f 5 9 10
64
- usemtl c9
65
- f 5 10 11
66
- usemtl c10
67
- f 12 13 3
68
- usemtl c11
69
- f 12 3 2
70
- usemtl c12
71
- f 12 2 14
72
- usemtl c13
73
- f 15 16 13
74
- usemtl c14
75
- f 15 13 12
76
- usemtl c15
77
- f 15 12 17
78
- usemtl c16
79
- f 10 9 18
80
- usemtl c17
81
- f 10 18 19
82
- usemtl c18
83
- f 10 19 20
84
- usemtl c19
85
- f 21 22 16
86
- usemtl c20
87
- f 21 16 15
88
- usemtl c21
89
- f 21 15 23
90
- usemtl c22
91
- f 19 18 22
92
- usemtl c23
93
- f 19 22 21
94
- usemtl c24
95
- f 19 21 24
96
- usemtl c9
97
- f 6 5 25
98
- usemtl c25
99
- f 4 3 26
100
- usemtl c26
101
- f 4 26 27
102
- usemtl c27
103
- f 4 27 8
104
- usemtl c28
105
- f 8 27 28
106
- usemtl c29
107
- f 8 28 29
108
- usemtl c30
109
- f 8 29 9
110
- usemtl c31
111
- f 9 29 30
112
- usemtl c32
113
- f 9 30 18
114
- usemtl c33
115
- f 18 30 31
116
- usemtl c16
117
- f 18 31 22
118
- usemtl c8
119
- f 22 31 32
120
- usemtl c34
121
- f 22 32 16
122
- usemtl c2
123
- f 16 32 33
124
- usemtl c35
125
- f 16 33 13
126
- usemtl c36
127
- f 13 33 26
128
- usemtl c37
129
- f 13 26 3
130
- usemtl c38
131
- f 34 28 35
132
- usemtl c39
133
- f 35 28 27
134
- usemtl c40
135
- f 35 27 26
136
- usemtl c41
137
- f 35 26 36
138
- usemtl c42
139
- f 28 37 29
140
- usemtl c43
141
- f 29 38 30
142
- usemtl c44
143
- f 30 39 31
144
- usemtl c9
145
- f 31 40 32
146
- usemtl c45
147
- f 32 41 33
148
- usemtl c46
149
- f 33 42 26
@@ -1,101 +0,0 @@
1
- import { SlayerMaster } from './SlayerMaster';
2
- import { chaeldarTasks } from './task/ChaelderTasks';
3
- import { duradelTasks } from './task/DuradelTasks';
4
- import { konarTasks } from './task/KonarTasks';
5
- import { krystiliaTasks } from './task/KrystiliaTasks';
6
- import { mazchnaTasks } from './task/MazchnaTasks';
7
- import { nieveTasks } from './task/NieveTasks';
8
- import { spriaTasks } from './task/SpriaTasks';
9
- import { turealTasks } from './task/TurealTasks';
10
- import { vannakaTasks } from './task/VannakaTasks';
11
- // TODO: Add the rest of the tasks for each master
12
- // TODO: Add the rest of the masters
13
- // TODO: Ensure points are correct
14
- // Mazchna: https://oldschool.runescape.wiki/w/Mazchna
15
- export const Mazchna = new SlayerMaster('Mazchna', mazchnaTasks, 'Canifis', 0, 'https://oldschool.runescape.wiki/w/Mazchna', {
16
- 1: 2,
17
- 10: 5,
18
- 100: 50,
19
- 1000: 100,
20
- 250: 70,
21
- 50: 15,
22
- }, undefined);
23
- // Spria: https://oldschool.runescape.wiki/w/Spria
24
- export const Spria = new SlayerMaster('Spria', spriaTasks, 'Draynor Village', 0, 'https://oldschool.runescape.wiki/w/Spria', {
25
- 1: 2,
26
- 10: 5,
27
- 100: 50,
28
- 1000: 100,
29
- 250: 70,
30
- 50: 15,
31
- }, undefined);
32
- // Tureal: https://oldschool.runescape.wiki/w/Turael
33
- export const Turael = new SlayerMaster('Turael', turealTasks, 'Burthope', 0, 'https://oldschool.runescape.wiki/w/Turael', {
34
- 1: 2,
35
- 10: 5,
36
- 100: 50,
37
- 1000: 100,
38
- 250: 70,
39
- 50: 15,
40
- }, undefined);
41
- // Vannaka: https://oldschool.runescape.wiki/w/Vannaka
42
- export const Vannaka = new SlayerMaster('Vannaka', vannakaTasks, 'Edgeville Dungeon', 0, 'https://oldschool.runescape.wiki/w/Vannaka', {
43
- 1: 2,
44
- 10: 5,
45
- 100: 50,
46
- 1000: 100,
47
- 250: 70,
48
- 50: 15,
49
- }, undefined);
50
- // Konar Quo Maten: https://oldschool.runescape.wiki/w/Konar_Quo_Maten
51
- export const KonarQuoMaten = new SlayerMaster('Konar Quo Maten', konarTasks, 'Mount Karuulm', 0, 'https://oldschool.runescape.wiki/w/Konar_Quo_Maten', {
52
- 1: 2,
53
- 10: 5,
54
- 100: 50,
55
- 1000: 100,
56
- 250: 70,
57
- 50: 15,
58
- }, undefined);
59
- // Krystilia: https://oldschool.runescape.wiki/w/Krystilia
60
- export const Krystilia = new SlayerMaster('Krystilia', krystiliaTasks, 'Edgeville', 0, 'https://oldschool.runescape.wiki/w/Krystilia', {
61
- 1: 2,
62
- 10: 5,
63
- 100: 50,
64
- 1000: 100,
65
- 250: 70,
66
- 50: 15,
67
- }, undefined);
68
- // Nieve: https://oldschool.runescape.wiki/w/Nieve
69
- export const Nieve = new SlayerMaster('Nieve', nieveTasks, "Nieve's Cave", 0, 'https://oldschool.runescape.wiki/w/Nieve', {
70
- 1: 12,
71
- 10: 60,
72
- 100: 300,
73
- 1000: 600,
74
- 250: 420,
75
- 50: 180,
76
- }, {
77
- 1: 15,
78
- 10: 75,
79
- 100: 375,
80
- 1000: 750,
81
- 250: 525,
82
- 50: 225,
83
- });
84
- // Duradel: https://oldschool.runescape.wiki/w/Duradel
85
- export const Duradel = new SlayerMaster('Duradel', duradelTasks, 'Shilo Village', 85, 'https://oldschool.runescape.wiki/w/Duradel', {
86
- 1: 15,
87
- 10: 75,
88
- 100: 375,
89
- 1000: 750,
90
- 250: 525,
91
- 50: 225,
92
- }, undefined);
93
- // Chaeldar: https://oldschool.runescape.wiki/w/Chaeldar
94
- export const Chaeldar = new SlayerMaster('Chaeldar', chaeldarTasks, 'Zanaris', 0, 'https://oldschool.runescape.wiki/w/Chaeldar', {
95
- 1: 10,
96
- 10: 50,
97
- 100: 250,
98
- 1000: 500,
99
- 250: 350,
100
- 50: 150,
101
- }, undefined);
@@ -1,103 +0,0 @@
1
- /**
2
- * Helper class for OSRS Clue Scrolls
3
- * Handles casket opening simulation with accurate wiki-based reward odds
4
- */
5
- import { getClueRewardsByTier, } from '../model/Item/ClueScrollRewards';
6
- /**
7
- * Main ClueScrollHelper class that provides methods to simulate clue scroll rewards, calculate probabilities, and list possible rewards
8
- *
9
- * Reference: https://oldschool.runescape.wiki/w/Clue_scrolls
10
- */
11
- export class ClueScrollHelper {
12
- /**
13
- * Select a random reward based on rarity tiers
14
- * Uses item rarity values to create weighted selection
15
- */
16
- static selectRandomReward(rewards) {
17
- const items = [];
18
- let totalWeight = 0;
19
- for (const { item, rarity } of Object.values(rewards)) {
20
- const probability = 1 / rarity;
21
- items.push({ item, probability });
22
- totalWeight += probability;
23
- }
24
- const random = Math.random() * totalWeight;
25
- let cumulative = 0;
26
- for (const { item, probability } of items) {
27
- cumulative += probability;
28
- if (random < cumulative) {
29
- return item;
30
- }
31
- }
32
- // Fallback to last item if rounding errors occur
33
- return items[items.length - 1].item;
34
- }
35
- /**
36
- * Simulate opening a clue casket and return a random reward item
37
- * @param tier The difficulty tier of the clue scroll
38
- * @returns The Item object that is the reward
39
- */
40
- static openCasket(tier) {
41
- const rewards = getClueRewardsByTier(tier);
42
- return this.selectRandomReward(rewards);
43
- }
44
- /**
45
- * Get the probability of obtaining a specific item from a casket as a fraction
46
- * @param tier The difficulty tier
47
- * @param itemName The item name to check probability for
48
- * @returns The probability as a fraction (e.g., 0.0278 for 1/36)
49
- */
50
- static getItemProbability(tier, itemName) {
51
- const rewards = getClueRewardsByTier(tier);
52
- const reward = rewards[itemName];
53
- return reward ? 1 / reward.rarity : 0;
54
- }
55
- /**
56
- * Get the rarity denominator (X in "1 in X") for an item
57
- */
58
- static getItemRarity(tier, itemName) {
59
- const rewards = getClueRewardsByTier(tier);
60
- const reward = rewards[itemName];
61
- return reward ? reward.rarity : 0;
62
- }
63
- /**
64
- * Get all possible rewards for a tier as Item objects
65
- */
66
- static getPossibleRewards(tier) {
67
- const rewards = getClueRewardsByTier(tier);
68
- return Object.values(rewards).map(r => r.item);
69
- }
70
- /**
71
- * Get all possible reward items names for a tier
72
- */
73
- static getPossibleRewardNames(tier) {
74
- const rewards = getClueRewardsByTier(tier);
75
- return Object.keys(rewards);
76
- }
77
- /**
78
- * Simulate opening multiple caskets
79
- * @param tier The clue tier
80
- * @param count Number of caskets to open
81
- * @returns Array of reward Item objects
82
- */
83
- static simulateMultiple(tier, count) {
84
- const rewards = [];
85
- for (let i = 0; i < count; i++) {
86
- rewards.push(this.openCasket(tier));
87
- }
88
- return rewards;
89
- }
90
- /**
91
- * Get reward statistics for a tier
92
- */
93
- static getRewardStats(tier) {
94
- const rewards = getClueRewardsByTier(tier);
95
- const items = Object.values(rewards);
96
- return {
97
- tier,
98
- totalUnique: items.length,
99
- rareItems: items.filter(r => r.rarity > 100).length,
100
- commonItems: items.filter(r => r.rarity <= 50).length,
101
- };
102
- }
103
- }