osrs-tools 2.5.4 → 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.
- package/README.md +270 -270
- package/dist/runescape/model/quest/QuestTool.d.ts.map +1 -1
- package/dist/runescape/model/quest/QuestTool.js +102 -4
- package/dist/runescape/model/quest/all/ANightAtTheTheatre.d.ts +4 -0
- package/dist/runescape/model/quest/all/ANightAtTheTheatre.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/ANightAtTheTheatre.js +4 -0
- package/dist/runescape/model/quest/all/AtFirstLight.d.ts +4 -0
- package/dist/runescape/model/quest/all/AtFirstLight.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/AtFirstLight.js +4 -0
- package/dist/runescape/model/quest/all/BeneathCursedSands.d.ts +4 -0
- package/dist/runescape/model/quest/all/BeneathCursedSands.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/BeneathCursedSands.js +4 -0
- package/dist/runescape/model/quest/all/ChildrenOfTheSun.d.ts +4 -0
- package/dist/runescape/model/quest/all/ChildrenOfTheSun.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/ChildrenOfTheSun.js +4 -0
- package/dist/runescape/model/quest/all/ColdWar.js +1 -1
- package/dist/runescape/model/quest/all/DeathOnTheIsle.d.ts +4 -0
- package/dist/runescape/model/quest/all/DeathOnTheIsle.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/DeathOnTheIsle.js +4 -0
- package/dist/runescape/model/quest/all/DefenderOfVarrock.d.ts +4 -0
- package/dist/runescape/model/quest/all/DefenderOfVarrock.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/DefenderOfVarrock.js +4 -0
- package/dist/runescape/model/quest/all/DesertTreasureI.d.ts +4 -0
- package/dist/runescape/model/quest/all/DesertTreasureI.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/DesertTreasureI.js +4 -0
- package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.d.ts +4 -0
- package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/DesertTreasureIITheFallenEmpire.js +4 -0
- package/dist/runescape/model/quest/all/DragonSlayerI.js +1 -1
- package/dist/runescape/model/quest/all/ErnestTheChicken.d.ts +4 -0
- package/dist/runescape/model/quest/all/ErnestTheChicken.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/ErnestTheChicken.js +38 -0
- package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.d.ts +4 -0
- package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/EthicallyAcquiredAntiquities.js +4 -0
- package/dist/runescape/model/quest/all/LandOfTheGoblins.d.ts +4 -0
- package/dist/runescape/model/quest/all/LandOfTheGoblins.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/LandOfTheGoblins.js +4 -0
- package/dist/runescape/model/quest/all/LearningTheRopes.d.ts +4 -0
- package/dist/runescape/model/quest/all/LearningTheRopes.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/LearningTheRopes.js +37 -0
- package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.d.ts +4 -0
- package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MakingFriendsWithMyArm.js +25 -0
- package/dist/runescape/model/quest/all/MisthalinMystery.d.ts +4 -0
- package/dist/runescape/model/quest/all/MisthalinMystery.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MisthalinMystery.js +4 -0
- package/dist/runescape/model/quest/all/MonkeyMadnessI.d.ts +4 -0
- package/dist/runescape/model/quest/all/MonkeyMadnessI.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MonkeyMadnessI.js +4 -0
- package/dist/runescape/model/quest/all/MountainDaughter.d.ts +4 -0
- package/dist/runescape/model/quest/all/MountainDaughter.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MountainDaughter.js +25 -0
- package/dist/runescape/model/quest/all/MourningsEndPartI.d.ts +4 -0
- package/dist/runescape/model/quest/all/MourningsEndPartI.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MourningsEndPartI.js +4 -0
- package/dist/runescape/model/quest/all/MourningsEndPartII.d.ts +4 -0
- package/dist/runescape/model/quest/all/MourningsEndPartII.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/MourningsEndPartII.js +4 -0
- package/dist/runescape/model/quest/all/PerilousMoons.d.ts +4 -0
- package/dist/runescape/model/quest/all/PerilousMoons.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/PerilousMoons.js +4 -0
- package/dist/runescape/model/quest/all/PiratesTreasure.d.ts +4 -0
- package/dist/runescape/model/quest/all/PiratesTreasure.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/PiratesTreasure.js +4 -0
- package/dist/runescape/model/quest/all/PrinceAliRescue.d.ts +4 -0
- package/dist/runescape/model/quest/all/PrinceAliRescue.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/PrinceAliRescue.js +4 -0
- package/dist/runescape/model/quest/all/RagAndBoneManI.d.ts +4 -0
- package/dist/runescape/model/quest/all/RagAndBoneManI.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/RagAndBoneManI.js +4 -0
- package/dist/runescape/model/quest/all/RagAndBoneManII.d.ts +4 -0
- package/dist/runescape/model/quest/all/RagAndBoneManII.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/RagAndBoneManII.js +4 -0
- package/dist/runescape/model/quest/all/RomeoAndJuliet.d.ts +4 -0
- package/dist/runescape/model/quest/all/RomeoAndJuliet.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/RomeoAndJuliet.js +25 -0
- package/dist/runescape/model/quest/all/RuneMysteries.d.ts +4 -0
- package/dist/runescape/model/quest/all/RuneMysteries.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/RuneMysteries.js +4 -0
- package/dist/runescape/model/quest/all/SecretsOfTheNorth.d.ts +4 -0
- package/dist/runescape/model/quest/all/SecretsOfTheNorth.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/SecretsOfTheNorth.js +4 -0
- package/dist/runescape/model/quest/all/SheepShearer.d.ts +4 -0
- package/dist/runescape/model/quest/all/SheepShearer.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/SheepShearer.js +4 -0
- package/dist/runescape/model/quest/all/ShieldOfArrav.d.ts +4 -0
- package/dist/runescape/model/quest/all/ShieldOfArrav.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/ShieldOfArrav.js +4 -0
- package/dist/runescape/model/quest/all/SinsOfTheFather.d.ts +4 -0
- package/dist/runescape/model/quest/all/SinsOfTheFather.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/SinsOfTheFather.js +4 -0
- package/dist/runescape/model/quest/all/SleepingGiants.d.ts +4 -0
- package/dist/runescape/model/quest/all/SleepingGiants.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/SleepingGiants.js +4 -0
- package/dist/runescape/model/quest/all/TaleOfTheRighteous.d.ts +4 -0
- package/dist/runescape/model/quest/all/TaleOfTheRighteous.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TaleOfTheRighteous.js +4 -0
- package/dist/runescape/model/quest/all/TearsOfGuthix.d.ts +4 -0
- package/dist/runescape/model/quest/all/TearsOfGuthix.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TearsOfGuthix.js +4 -0
- package/dist/runescape/model/quest/all/TempleOfIkov.d.ts +4 -0
- package/dist/runescape/model/quest/all/TempleOfIkov.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TempleOfIkov.js +4 -0
- package/dist/runescape/model/quest/all/TempleOfTheEye.d.ts +4 -0
- package/dist/runescape/model/quest/all/TempleOfTheEye.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TempleOfTheEye.js +4 -0
- package/dist/runescape/model/quest/all/TheCorsairCurse.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheCorsairCurse.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheCorsairCurse.js +25 -0
- package/dist/runescape/model/quest/all/TheCurseOfArrav.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheCurseOfArrav.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheCurseOfArrav.js +34 -0
- package/dist/runescape/model/quest/all/TheDigSite.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheDigSite.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheDigSite.js +4 -0
- package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheEyesOfGlouphrie.js +4 -0
- package/dist/runescape/model/quest/all/TheFeud.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheFeud.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheFeud.js +4 -0
- package/dist/runescape/model/quest/all/TheGardenOfDeath.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheGardenOfDeath.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheGardenOfDeath.js +4 -0
- package/dist/runescape/model/quest/all/TheHandInTheSand.js +1 -1
- package/dist/runescape/model/quest/all/TheHeartOfDarkness.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheHeartOfDarkness.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheHeartOfDarkness.js +4 -0
- package/dist/runescape/model/quest/all/TheIdesOfMilk.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheIdesOfMilk.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheIdesOfMilk.js +4 -0
- package/dist/runescape/model/quest/all/ThePathOfGlouphrie.d.ts +4 -0
- package/dist/runescape/model/quest/all/ThePathOfGlouphrie.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/ThePathOfGlouphrie.js +4 -0
- package/dist/runescape/model/quest/all/TheRestlessGhost.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheRestlessGhost.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheRestlessGhost.js +4 -0
- package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.d.ts +4 -0
- package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TheRibbitingTaleOfALilyPadLabourDispute.js +4 -0
- package/dist/runescape/model/quest/all/TwilightsPromise.d.ts +4 -0
- package/dist/runescape/model/quest/all/TwilightsPromise.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/TwilightsPromise.js +4 -0
- package/dist/runescape/model/quest/all/WhileGuthixSleeps.d.ts +4 -0
- package/dist/runescape/model/quest/all/WhileGuthixSleeps.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/WhileGuthixSleeps.js +4 -0
- package/dist/runescape/model/quest/all/WitchsPotion.d.ts +4 -0
- package/dist/runescape/model/quest/all/WitchsPotion.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/WitchsPotion.js +4 -0
- package/dist/runescape/model/quest/all/XMarksTheSpot.d.ts +4 -0
- package/dist/runescape/model/quest/all/XMarksTheSpot.d.ts.map +1 -0
- package/dist/runescape/model/quest/all/XMarksTheSpot.js +4 -0
- package/dist/runescape/model/quest/all/index.d.ts +47 -0
- package/dist/runescape/model/quest/all/index.d.ts.map +1 -1
- package/dist/runescape/model/quest/all/index.js +47 -0
- package/package.json +96 -96
- package/public/assets/icons/diaries/Ardougne_Diary.png +0 -0
- package/public/assets/icons/diaries/Desert_Diary.png +0 -0
- package/public/assets/icons/diaries/Falador_Diary.png +0 -0
- package/public/assets/icons/diaries/Fremennik_Diary.png +0 -0
- package/public/assets/icons/diaries/Kandarin_Diary.png +0 -0
- package/public/assets/icons/diaries/Karamja_Diary.png +0 -0
- package/public/assets/icons/diaries/Morytania_Diary.png +0 -0
- package/public/assets/icons/diaries/Varrock_Diary.png +0 -0
- package/public/assets/icons/diaries/Wilderness_Diary.png +0 -0
- package/public/assets/icons/skills/Agility_icon.png +0 -0
- package/public/assets/icons/skills/Attack_icon.png +0 -0
- package/public/assets/icons/skills/Construction_icon.png +0 -0
- package/public/assets/icons/skills/Cooking_icon.png +0 -0
- package/public/assets/icons/skills/Crafting_icon.png +0 -0
- package/public/assets/icons/skills/Defence_icon.png +0 -0
- package/public/assets/icons/skills/Farming_icon.png +0 -0
- package/public/assets/icons/skills/Firemaking_icon.png +0 -0
- package/public/assets/icons/skills/Fishing_icon.png +0 -0
- package/public/assets/icons/skills/Fletching_icon.png +0 -0
- package/public/assets/icons/skills/Herblore_icon.png +0 -0
- package/public/assets/icons/skills/Hitpoints_icon.png +0 -0
- package/public/assets/icons/skills/Magic_icon.png +0 -0
- package/public/assets/icons/skills/Mining_icon.png +0 -0
- package/public/assets/icons/skills/Prayer_icon.png +0 -0
- package/public/assets/icons/skills/Ranged_icon.png +0 -0
- package/public/assets/icons/skills/Sailing_icon.png +0 -0
- package/public/assets/icons/skills/Slayer_icon.png +0 -0
- package/public/assets/icons/skills/Smithing_icon.png +0 -0
- package/public/assets/icons/skills/Strength_icon.png +0 -0
- package/public/assets/icons/skills/Thieving_icon.png +0 -0
- package/public/assets/icons/skills/Woodcutting_icon.png +0 -0
- package/public/assets/icons/tabs/Combat_Tab.png +0 -0
- package/public/assets/icons/tabs/Inventory_Tab.png +0 -0
- package/public/assets/icons/tabs/Magic_Tab.png +0 -0
- package/public/assets/icons/tabs/Prayer_Tab.png +0 -0
- package/public/assets/icons/tabs/Quest_Tab.png +0 -0
- package/public/assets/icons/tabs/Skills_Tab.png +0 -0
- package/public/assets/icons/ui/Bank.png +0 -0
- package/public/assets/icons/ui/Music.png +0 -0
- package/public/assets/icons/ui/Quest_Points.png +0 -0
- package/public/assets/icons/ui/Settings.png +0 -0
- package/dist/runescape/model/Item/ClueScrollRewards.js +0 -286
- package/dist/runescape/model/Item/all/StudiedChaps.js +0 -35
- package/dist/runescape/model/Item/models/YellowPartyhat.obj +0 -149
- package/dist/runescape/tools/ClueScrollHelper.js +0 -103
- package/dist/runescape/utils/cache.js +0 -124
- /package/dist/runescape/model/slayer/{Masters.js → masters.js} +0 -0
|
@@ -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,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
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic cache implementation with LRU eviction and TTL support
|
|
3
|
-
*/
|
|
4
|
-
export class Cache {
|
|
5
|
-
store = new Map();
|
|
6
|
-
maxSize;
|
|
7
|
-
ttl;
|
|
8
|
-
/**
|
|
9
|
-
* Creates a new Cache instance
|
|
10
|
-
* @param options Cache configuration options
|
|
11
|
-
*/
|
|
12
|
-
constructor(options = {}) {
|
|
13
|
-
this.maxSize = options.maxSize || 100;
|
|
14
|
-
this.ttl = options.ttl;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Store a value in the cache
|
|
18
|
-
* @param key Cache key
|
|
19
|
-
* @param value Value to store
|
|
20
|
-
* @param ttl Optional TTL override for this item
|
|
21
|
-
*/
|
|
22
|
-
set(key, value, ttl) {
|
|
23
|
-
// Enforce size limit using LRU eviction
|
|
24
|
-
if (this.store.size >= this.maxSize) {
|
|
25
|
-
const firstKey = this.store.keys().next().value;
|
|
26
|
-
this.store.delete(firstKey);
|
|
27
|
-
}
|
|
28
|
-
const expiresAt = ttl || this.ttl ? Date.now() + (ttl || this.ttl) : undefined;
|
|
29
|
-
this.store.set(key, { expiresAt, value });
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Retrieve a value from the cache
|
|
33
|
-
* @param key Cache key
|
|
34
|
-
* @returns Stored value or undefined if not found/expired
|
|
35
|
-
*/
|
|
36
|
-
get(key) {
|
|
37
|
-
const item = this.store.get(key);
|
|
38
|
-
if (!item) {
|
|
39
|
-
return undefined;
|
|
40
|
-
}
|
|
41
|
-
// Check if item has expired
|
|
42
|
-
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
43
|
-
this.store.delete(key);
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
return item.value;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Remove an item from the cache
|
|
50
|
-
* @param key Cache key
|
|
51
|
-
* @returns true if item was found and removed
|
|
52
|
-
*/
|
|
53
|
-
delete(key) {
|
|
54
|
-
return this.store.delete(key);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Clear all items from the cache
|
|
58
|
-
*/
|
|
59
|
-
clear() {
|
|
60
|
-
this.store.clear();
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get the number of items in the cache
|
|
64
|
-
*/
|
|
65
|
-
get size() {
|
|
66
|
-
return this.store.size;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Get all valid keys in the cache
|
|
70
|
-
* @returns Array of cache keys
|
|
71
|
-
*/
|
|
72
|
-
keys() {
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
return Array.from(this.store.entries())
|
|
75
|
-
.filter(([, item]) => !item.expiresAt || item.expiresAt > now)
|
|
76
|
-
.map(([key]) => key);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Remove all expired items from the cache
|
|
80
|
-
* @returns Number of items removed
|
|
81
|
-
*/
|
|
82
|
-
prune() {
|
|
83
|
-
const now = Date.now();
|
|
84
|
-
let removed = 0;
|
|
85
|
-
for (const [key, item] of this.store.entries()) {
|
|
86
|
-
if (item.expiresAt && item.expiresAt <= now) {
|
|
87
|
-
this.store.delete(key);
|
|
88
|
-
removed++;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return removed;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Check if a key exists in the cache and isn't expired
|
|
95
|
-
* @param key Cache key
|
|
96
|
-
* @returns true if key exists and isn't expired
|
|
97
|
-
*/
|
|
98
|
-
has(key) {
|
|
99
|
-
const item = this.store.get(key);
|
|
100
|
-
if (!item) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
if (item.expiresAt && Date.now() > item.expiresAt) {
|
|
104
|
-
this.store.delete(key);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Get or set a cache value
|
|
111
|
-
* @param key Cache key
|
|
112
|
-
* @param factory Function to create value if not found
|
|
113
|
-
* @returns Cached or newly created value
|
|
114
|
-
*/
|
|
115
|
-
async getOrSet(key, factory) {
|
|
116
|
-
const existing = this.get(key);
|
|
117
|
-
if (existing !== undefined) {
|
|
118
|
-
return existing;
|
|
119
|
-
}
|
|
120
|
-
const value = await factory();
|
|
121
|
-
this.set(key, value);
|
|
122
|
-
return value;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
File without changes
|