osrs-tools 2.3.3 → 2.3.5

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 (279) hide show
  1. package/README.md +8 -0
  2. package/package.json +29 -60
  3. package/dist/out-tsc/test/resources/A_Squeezer_Main_Data.js +0 -474
  4. package/dist/out-tsc/test/unit/account/OsrsAccount.test.js +0 -76
  5. package/dist/out-tsc/test/unit/quest/Quest.test.js +0 -96
  6. package/dist/out-tsc/test/unit/quest/QuestTool.test.js +0 -193
  7. package/dist/out-tsc/test/unit/quest/mockQuests.js +0 -75
  8. package/dist/out-tsc/test/unit/quest/types.test.js +0 -98
  9. package/dist/out-tsc/test/unit/requirements/Requirement.test.js +0 -52
  10. package/dist/out-tsc/test/unit/slayer/SlayerMaster.test.js +0 -43
  11. package/dist/out-tsc/test/unit/slayer/master/Chaeldar.test.js +0 -20
  12. package/dist/out-tsc/test/unit/slayer/master/Duradel.test.js +0 -22
  13. package/dist/out-tsc/test/unit/slayer/master/Konar.test.js +0 -20
  14. package/dist/out-tsc/test/unit/slayer/master/Krystillia.test.js +0 -20
  15. package/dist/out-tsc/test/unit/slayer/master/Mazchna.test.js +0 -20
  16. package/dist/out-tsc/test/unit/slayer/master/Nieve.test.js +0 -20
  17. package/dist/out-tsc/test/unit/slayer/master/Spria.test.js +0 -21
  18. package/dist/out-tsc/test/unit/slayer/master/Tureal.test.js +0 -21
  19. package/dist/out-tsc/test/unit/slayer/master/Vannaka.test.js +0 -20
  20. package/dist/out-tsc/test/unit/slayer/model/Assignment.test.js +0 -14
  21. package/dist/out-tsc/test/unit/slayer/model/SlayerUnlock.test.js +0 -38
  22. package/dist/out-tsc/test/unit/slayer/model/Task.test.js +0 -122
  23. package/dist/out-tsc/test/unit/tools/experience.test.js +0 -31
  24. package/dist/out-tsc/test/unit/utils/cache.test.js +0 -82
  25. /package/dist/{out-tsc/source/examples → examples}/ExampleQuest.js +0 -0
  26. /package/dist/{out-tsc/source/index.js → index.js} +0 -0
  27. /package/dist/{out-tsc/source/runescape → runescape}/errors.js +0 -0
  28. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/Item.js +0 -0
  29. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/Items.js +0 -0
  30. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AmuletOfGlory.js +0 -0
  31. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AncientStaff.js +0 -0
  32. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AntiDragonShield.js +0 -0
  33. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bearhead.js +0 -0
  34. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlackAxe.js +0 -0
  35. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlisterwoodFlail.js +0 -0
  36. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BloodRune.js +0 -0
  37. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlueDye.js +0 -0
  38. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bones.js +0 -0
  39. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bucket.js +0 -0
  40. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BucketofWater.js +0 -0
  41. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Cat.js +0 -0
  42. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Coins.js +0 -0
  43. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CrossSection.js +0 -0
  44. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CrystalKey.js +0 -0
  45. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CulinaromancerGloves.js +0 -0
  46. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DagannothHide.js +0 -0
  47. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DemonicGorillaHeart.js +0 -0
  48. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DragonKey.js +0 -0
  49. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DragonkinMap.js +0 -0
  50. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DrakansMedallion.js +0 -0
  51. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DramenStaff.js +0 -0
  52. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DwarvenRockCake.js +0 -0
  53. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Ectophial.js +0 -0
  54. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/FibulaPiece.js +0 -0
  55. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/FremennikKestrelEyeHelm.js +0 -0
  56. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/GamesNecklace.js +0 -0
  57. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/GhostspeakAmulet.js +0 -0
  58. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IbansStaff.js +0 -0
  59. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IceCooler.js +0 -0
  60. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IcyBasalt.js +0 -0
  61. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IvandisFlail.js +0 -0
  62. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/KlanksGauntlets.js +0 -0
  63. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/LunarStaff.js +0 -0
  64. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MithrilSeeds.js +0 -0
  65. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MoonclanHelmet.js +0 -0
  66. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MorttonTeleport.js +0 -0
  67. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MythicalCape.js +0 -0
  68. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Nosepeg.js +0 -0
  69. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/PaladinCredentials.js +0 -0
  70. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RibcagePiece.js +0 -0
  71. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RingOfDueling.js +0 -0
  72. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Rope.js +0 -0
  73. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RoyalSeedPod.js +0 -0
  74. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SalveAmulet.js +0 -0
  75. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SilverPot.js +0 -0
  76. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SilverSickleB.js +0 -0
  77. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalBottoms.js +0 -0
  78. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalHelm.js +0 -0
  79. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalTop.js +0 -0
  80. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkullPiece.js +0 -0
  81. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SmokeBarrage.js +0 -0
  82. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Spade.js +0 -0
  83. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SuqahTeeth.js +0 -0
  84. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Tinderbox.js +0 -0
  85. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/UnseenKey.js +0 -0
  86. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/WaterRune.js +0 -0
  87. /package/dist/{out-tsc/source/runescape → runescape}/model/Requirement.js +0 -0
  88. /package/dist/{out-tsc/source/runescape → runescape}/model/account/OsrsAccount.js +0 -0
  89. /package/dist/{out-tsc/source/runescape → runescape}/model/account/Skill.js +0 -0
  90. /package/dist/{out-tsc/source/runescape → runescape}/model/account/skills/unlocks/AttackUnlocks.js +0 -0
  91. /package/dist/{out-tsc/source/runescape → runescape}/model/account/skills/unlocks/SkillUnlock.js +0 -0
  92. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Ardougne.js +0 -0
  93. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Desert.js +0 -0
  94. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Diary.js +0 -0
  95. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Fremennik.js +0 -0
  96. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Kandarin.js +0 -0
  97. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Karamja.js +0 -0
  98. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/KourendKebos.js +0 -0
  99. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/LumbridgeDraynor.js +0 -0
  100. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Morytania.js +0 -0
  101. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Wilderness.js +0 -0
  102. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/ardougne/Ardougne.js +0 -0
  103. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/desert/Desert.js +0 -0
  104. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/index.js +0 -0
  105. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/karamja/Karamja.js +0 -0
  106. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/varrock/Varrock.js +0 -0
  107. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/Npc.js +0 -0
  108. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/NpcDrop.js +0 -0
  109. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/NpcProduct.js +0 -0
  110. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Hans.js +0 -0
  111. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Man.js +0 -0
  112. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/PeerTheSeer.js +0 -0
  113. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Woman.js +0 -0
  114. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/Quest.js +0 -0
  115. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/QuestList.js +0 -0
  116. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/QuestTool.js +0 -0
  117. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/Requirements.js +0 -0
  118. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AKingdomDivided.js +0 -0
  119. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/APorcineOfInterest.js +0 -0
  120. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ASoulsBane.js +0 -0
  121. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATailOfTwoCats.js +0 -0
  122. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATasteOfHope.js +0 -0
  123. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATheatreOfBlood.js +0 -0
  124. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AnimalMagnetism.js +0 -0
  125. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AnotherSliceOfHAM.js +0 -0
  126. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BelowIceMountain.js +0 -0
  127. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BetweenARock.js +0 -0
  128. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BigChompyBirdHunting.js +0 -0
  129. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Biohazard.js +0 -0
  130. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BlackKnightsFortress.js +0 -0
  131. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BoneVoyage.js +0 -0
  132. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CabinFever.js +0 -0
  133. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ClientOfKourend.js +0 -0
  134. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ClockTower.js +0 -0
  135. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ColdWar.js +0 -0
  136. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Contact.js +0 -0
  137. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CooksAssistant.js +0 -0
  138. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CreatureOfFenkenstrain.js +0 -0
  139. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CurrentAffairs.js +0 -0
  140. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DarknessOfHallowvale.js +0 -0
  141. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeathPlateau.js +0 -0
  142. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeathToTheDorgeshuun.js +0 -0
  143. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DemonSlayer.js +0 -0
  144. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DesertTreasure.js +0 -0
  145. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeviousMinds.js +0 -0
  146. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DoricQuest.js +0 -0
  147. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DoricsQuest.js +0 -0
  148. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DragonSlayerI.js +0 -0
  149. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DragonSlayerII.js +0 -0
  150. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DreamMentor.js +0 -0
  151. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DruidicRitual.js +0 -0
  152. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DwarfCannon.js +0 -0
  153. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EadgarsRuse.js +0 -0
  154. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EaglesPeak.js +0 -0
  155. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ElementalWorkshopI.js +0 -0
  156. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ElementalWorkshopII.js +0 -0
  157. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EnakhrasLament.js +0 -0
  158. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EnlightenedJourney.js +0 -0
  159. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FairytaleIGrowingPains.js +0 -0
  160. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FairytaleIICureAQueen.js +0 -0
  161. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FamilyCrest.js +0 -0
  162. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FightArena.js +0 -0
  163. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FishingContest.js +0 -0
  164. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ForgettableTale.js +0 -0
  165. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GardenOfTranquillity.js +0 -0
  166. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GertrudesCat.js +0 -0
  167. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GettingAhead.js +0 -0
  168. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GhostsAhoy.js +0 -0
  169. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GoblinDiplomacy.js +0 -0
  170. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GrimTales.js +0 -0
  171. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HauntedMine.js +0 -0
  172. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HazeelCult.js +0 -0
  173. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HeroesQuest.js +0 -0
  174. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HolyGrail.js +0 -0
  175. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HorrorFromTheDeep.js +0 -0
  176. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/IcthlarinsLittleHelper.js +0 -0
  177. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ImpCatcher.js +0 -0
  178. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/InAidOfTheMyreque.js +0 -0
  179. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/InSearchOfTheMyreque.js +0 -0
  180. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/JunglePotion.js +0 -0
  181. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/KingsRansom.js +0 -0
  182. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LegendsQuest.js +0 -0
  183. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LostCity.js +0 -0
  184. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LunarDiplomacy.js +0 -0
  185. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MakingHistory.js +0 -0
  186. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MeatAndGreet.js +0 -0
  187. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MerlinsCrystal.js +0 -0
  188. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonkeyMadness.js +0 -0
  189. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonkeyMadnessII.js +0 -0
  190. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonksFriend.js +0 -0
  191. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MurderMystery.js +0 -0
  192. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MyArmsBigAdventure.js +0 -0
  193. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/NatureSpirit.js +0 -0
  194. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ObservatoryQuest.js +0 -0
  195. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/OlafsQuest.js +0 -0
  196. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/OneSmallFavour.js +0 -0
  197. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Pandemonium.js +0 -0
  198. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PlagueCity.js +0 -0
  199. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PriestInPeril.js +0 -0
  200. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PryingTimes.js +0 -0
  201. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RagAndBoneMan.js +0 -0
  202. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Ratcatchers.js +0 -0
  203. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RecipeForDisaster.js +0 -0
  204. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RecruitmentDrive.js +0 -0
  205. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Regicide.js +0 -0
  206. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RovingElves.js +0 -0
  207. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RoyalTrouble.js +0 -0
  208. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RumDeal.js +0 -0
  209. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ScorpionCatcher.js +0 -0
  210. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Scrambled.js +0 -0
  211. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SeaSlug.js +0 -0
  212. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadesOfMortton.js +0 -0
  213. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadowOfTheStorm.js +0 -0
  214. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadowsOfCustodia.js +0 -0
  215. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SheepHerder.js +0 -0
  216. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShiloVillage.js +0 -0
  217. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SlugMenace.js +0 -0
  218. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SongOfTheElves.js +0 -0
  219. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SpiritsOfTheElid.js +0 -0
  220. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SwanSong.js +0 -0
  221. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TaiBwoWannaiTrio.js +0 -0
  222. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheAscentOfArceuus.js +0 -0
  223. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheDepthsOfDespair.js +0 -0
  224. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFinalDawn.js +0 -0
  225. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheForsakenTower.js +0 -0
  226. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikExiles.js +0 -0
  227. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikIsles.js +0 -0
  228. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikTrials.js +0 -0
  229. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGiantDwarf.js +0 -0
  230. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGolem.js +0 -0
  231. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGrandTree.js +0 -0
  232. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGreatBrainRobbery.js +0 -0
  233. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheHandInTheSand.js +0 -0
  234. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheKnightsSword.js +0 -0
  235. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheLostTribe.js +0 -0
  236. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheQueenOfThieves.js +0 -0
  237. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheSlugMenace.js +0 -0
  238. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTaleOfTheRighteous.js +0 -0
  239. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTempleOfIkov.js +0 -0
  240. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTouristTrap.js +0 -0
  241. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ThroneOfMiscellania.js +0 -0
  242. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TowerOfLife.js +0 -0
  243. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TreeGnomeVillage.js +0 -0
  244. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TribalTotem.js +0 -0
  245. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TrollRomance.js +0 -0
  246. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TrollStronghold.js +0 -0
  247. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TroubledTortugans.js +0 -0
  248. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/UndergroundPass.js +0 -0
  249. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/VampyreSlayer.js +0 -0
  250. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Wanted.js +0 -0
  251. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Watchtower.js +0 -0
  252. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WaterfallQuest.js +0 -0
  253. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WhatLiesBelow.js +0 -0
  254. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WitchesPotion.js +0 -0
  255. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WitchsHouse.js +0 -0
  256. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ZogreFleshEaters.js +0 -0
  257. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/enums.js +0 -0
  258. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/types.js +0 -0
  259. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Assignment.js +0 -0
  260. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Masters.js +0 -0
  261. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerBuys.js +0 -0
  262. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerExtends.js +0 -0
  263. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerMaster.js +0 -0
  264. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerReward.js +0 -0
  265. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerUnlock.js +0 -0
  266. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Task.js +0 -0
  267. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/ChaelderTasks.js +0 -0
  268. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/DuradelTasks.js +0 -0
  269. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/KonarTasks.js +0 -0
  270. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/KrystiliaTasks.js +0 -0
  271. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/MazchnaTasks.js +0 -0
  272. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/NieveTasks.js +0 -0
  273. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/SpriaTasks.js +0 -0
  274. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/TurealTasks.js +0 -0
  275. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/VannakaTasks.js +0 -0
  276. /package/dist/{out-tsc/source/runescape → runescape}/tools/experience.js +0 -0
  277. /package/dist/{out-tsc/source/runescape → runescape}/tools/getAccount.js +0 -0
  278. /package/dist/{out-tsc/source/runescape → runescape}/utils/cache.js +0 -0
  279. /package/dist/{out-tsc/source/runescape → runescape}/utils/validation.js +0 -0
@@ -1,96 +0,0 @@
1
- import { QuestDifficulty, QuestLength } from "../../../source/runescape/model/quest/enums";
2
- import { QuestStatus } from "../../../source/runescape/model/quest/Quest";
3
- import { ItemRequirement, LevelRequirement } from "../../../source/runescape/model/Requirement";
4
- describe("Quest Rewards Structure", () => {
5
- it("should support the new QuestRewards experience array structure", () => {
6
- const quest = {
7
- age: "Fifth Age",
8
- description: "Help the cook in Lumbridge Castle to make a cake.",
9
- difficulty: QuestDifficulty.Novice,
10
- id: 1,
11
- length: QuestLength.Short,
12
- members: false,
13
- miniquest: false,
14
- name: "Cook's Assistant",
15
- questPoints: 1,
16
- recommendations: [],
17
- recommendedPrayers: ["None"],
18
- recommendedSkills: { cooking: 10 },
19
- requirements: [new ItemRequirement("Bucket of milk"), new ItemRequirement("Pot of flour"), new ItemRequirement("Egg"), new LevelRequirement("cooking", 10, true)],
20
- rewards: {
21
- areas: ["Lumbridge"],
22
- experience: [
23
- { amount: 300, skill: "cooking" },
24
- { amount: 100, skill: "fishing" },
25
- ],
26
- items: [{ name: "Quest point" }],
27
- lamps: [],
28
- pets: [],
29
- points: [],
30
- questPoints: 1,
31
- unlocks: [{ description: "Access to the kitchen" }],
32
- },
33
- series: "None",
34
- shortName: "cooks_assistant",
35
- startLocation: "Lumbridge Castle",
36
- status: QuestStatus.NotStarted,
37
- steps: [],
38
- url: "http://example.com/cooks_assistant",
39
- };
40
- expect(Array.isArray(quest.rewards.experience)).toBe(true);
41
- expect(quest.rewards.experience?.length).toBe(2);
42
- expect(quest.rewards.experience?.[0]).toEqual({
43
- amount: 300,
44
- skill: "cooking",
45
- });
46
- expect(quest.rewards.experience?.[1]).toEqual({
47
- amount: 100,
48
- skill: "fishing",
49
- });
50
- expect(quest.rewards.unlocks?.[0].description).toBe("Access to the kitchen");
51
- expect(quest.rewards.lamps).toEqual([]);
52
- expect(quest.rewards.points).toEqual([]);
53
- expect(quest.rewards.pets).toEqual([]);
54
- });
55
- it("should allow empty experience array and all reward fields present", () => {
56
- const quest = {
57
- age: "Fifth Age",
58
- description: "Help the cook in Lumbridge Castle to make a cake.",
59
- difficulty: QuestDifficulty.Novice,
60
- id: 1,
61
- length: QuestLength.Short,
62
- members: false,
63
- miniquest: false,
64
- name: "Cook's Assistant",
65
- questPoints: 1,
66
- recommendations: [],
67
- recommendedPrayers: ["None"],
68
- recommendedSkills: { cooking: 10 },
69
- requirements: [new ItemRequirement("Bucket of milk"), new ItemRequirement("Pot of flour"), new ItemRequirement("Egg"), new LevelRequirement("cooking", 10, true)],
70
- rewards: {
71
- areas: [],
72
- experience: [],
73
- items: [],
74
- lamps: [],
75
- pets: [],
76
- points: [],
77
- questPoints: 1,
78
- unlocks: [],
79
- },
80
- series: "None",
81
- shortName: "cooks_assistant",
82
- startLocation: "Lumbridge Castle",
83
- status: QuestStatus.NotStarted,
84
- steps: [],
85
- url: "http://example.com/cooks_assistant",
86
- };
87
- expect(Array.isArray(quest.rewards.experience)).toBe(true);
88
- expect(quest.rewards.experience).toHaveLength(0);
89
- expect(quest.rewards.items).toEqual([]);
90
- expect(quest.rewards.areas).toEqual([]);
91
- expect(quest.rewards.unlocks).toEqual([]);
92
- expect(quest.rewards.lamps).toEqual([]);
93
- expect(quest.rewards.points).toEqual([]);
94
- expect(quest.rewards.pets).toEqual([]);
95
- });
96
- });
@@ -1,193 +0,0 @@
1
- import { OsrsAccount } from "../../../source/runescape/model/account/OsrsAccount";
2
- import { QuestTool } from "../../../source/runescape/model/quest/QuestTool";
3
- import { LevelRequirement, QuestRequirement } from "../../../source/runescape/model/Requirement";
4
- import { account } from "../../resources/A_Squeezer_Main_Data";
5
- import { simpleQuest } from "./mockQuests";
6
- // Helper: create an account with a given skill level
7
- function makeAccountWithSkill(skill, level) {
8
- return OsrsAccount.fromJson({
9
- combatLevel: 3,
10
- name: "Test",
11
- questPoints: 0,
12
- skills: { [skill]: { level } },
13
- });
14
- }
15
- describe("QuestTool", () => {
16
- beforeEach(() => {
17
- jest.clearAllMocks();
18
- });
19
- it("should set and get OsrsAccount", () => {
20
- const acc = OsrsAccount.fromJson(account);
21
- const tool = new QuestTool();
22
- expect(tool.getOsrsAccount()).toBeUndefined();
23
- tool.setOsrsAccount(acc);
24
- expect(tool.getOsrsAccount()).toBe(acc);
25
- });
26
- it("should get max skill boost for known and unknown skills", () => {
27
- expect(QuestTool.getMaxSkillBoost("Attack")).toBeGreaterThan(0);
28
- expect(QuestTool.getMaxSkillBoost("Herblore")).toBeGreaterThan(0);
29
- expect(QuestTool.getMaxSkillBoost("UnknownSkill")).toBe(0);
30
- });
31
- describe("Quest Cache", () => {
32
- let mockGetQuestByName;
33
- beforeEach(() => {
34
- QuestTool["questCache"].clear();
35
- // Setup mock for getQuestByName that returns our test quest
36
- mockGetQuestByName = jest.spyOn(QuestTool, "getQuestByName");
37
- });
38
- afterEach(() => {
39
- mockGetQuestByName.mockRestore();
40
- });
41
- it("should handle non-existent quests", () => {
42
- mockGetQuestByName.mockImplementation(() => undefined);
43
- const result = QuestTool.getQuestByName("NonexistentQuest");
44
- expect(result).toBeUndefined();
45
- // Second lookup should still check since we don't cache undefined results
46
- const result2 = QuestTool.getQuestByName("NonexistentQuest");
47
- expect(result2).toBeUndefined();
48
- expect(mockGetQuestByName).toHaveBeenCalledTimes(2);
49
- });
50
- it("should clear cache between tests", () => {
51
- const mockQuest = { ...simpleQuest, name: "Test Quest" };
52
- mockGetQuestByName.mockImplementation(() => mockQuest);
53
- // First test - should call implementation
54
- const result1 = QuestTool.getQuestByName("Test Quest");
55
- expect(result1).toBe(mockQuest);
56
- expect(mockGetQuestByName).toHaveBeenCalledTimes(1);
57
- // Clear cache manually (simulating beforeEach)
58
- QuestTool["questCache"].clear();
59
- // Should call implementation again after cache clear
60
- const result2 = QuestTool.getQuestByName("Test Quest");
61
- expect(result2).toBe(mockQuest);
62
- expect(mockGetQuestByName).toHaveBeenCalledTimes(2);
63
- });
64
- });
65
- describe("Quest Requirements", () => {
66
- let tool;
67
- beforeEach(() => {
68
- tool = new QuestTool();
69
- });
70
- it("should handle multiple skill requirements", () => {
71
- const quest = {
72
- ...simpleQuest,
73
- requirements: [new LevelRequirement("attack", 60, false), new LevelRequirement("defence", 60, false), new LevelRequirement("strength", 60, false)],
74
- };
75
- // Test with insufficient levels
76
- tool.setOsrsAccount(makeAccountWithSkill("attack", 59));
77
- expect(tool.canCompleteQuest(quest)).toBe(false);
78
- // Test with all requirements met
79
- tool.setOsrsAccount(OsrsAccount.fromJson({
80
- combatLevel: 3,
81
- name: "Test",
82
- questPoints: 0,
83
- skills: {
84
- attack: { level: 60, rank: 0, xp: 0 },
85
- defence: { level: 60, rank: 0, xp: 0 },
86
- strength: { level: 60, rank: 0, xp: 0 },
87
- },
88
- }));
89
- expect(tool.canCompleteQuest(quest)).toBe(true);
90
- });
91
- it("should handle boostable and non-boostable requirements", () => {
92
- const quest = {
93
- ...simpleQuest,
94
- requirements: [
95
- new LevelRequirement("attack", 60, false), // Non-boostable
96
- new LevelRequirement("herblore", 90, true), // Boostable
97
- ],
98
- };
99
- // Test with insufficient non-boostable level
100
- tool.setOsrsAccount(makeAccountWithSkill("attack", 59));
101
- expect(tool.canCompleteQuest(quest)).toBe(false);
102
- // Test with boostable but insufficient herblore
103
- tool.setOsrsAccount(OsrsAccount.fromJson({
104
- combatLevel: 3,
105
- name: "Test",
106
- questPoints: 0,
107
- skills: {
108
- attack: { level: 60, rank: 0, xp: 0 },
109
- herblore: { level: 84, rank: 0, xp: 0 }, // Max boost +5, not enough
110
- },
111
- }));
112
- expect(tool.canCompleteQuest(quest)).toBe(false);
113
- // Test with both requirements met (one through boost)
114
- tool.setOsrsAccount(OsrsAccount.fromJson({
115
- combatLevel: 3,
116
- name: "Test",
117
- questPoints: 0,
118
- skills: {
119
- attack: { level: 60 },
120
- herblore: { level: 86 }, // Can boost to 91
121
- },
122
- }));
123
- expect(tool.canCompleteQuest(quest)).toBe(true);
124
- });
125
- it("should handle quest chains", () => {
126
- // Create a chain: Quest3 requires Quest2 requires Quest1
127
- const quest1 = { ...simpleQuest, name: "Quest1" };
128
- const quest2 = {
129
- ...simpleQuest,
130
- name: "Quest2",
131
- requirements: [new QuestRequirement("Quest1")],
132
- };
133
- const quest3 = {
134
- ...simpleQuest,
135
- name: "Quest3",
136
- requirements: [new QuestRequirement("Quest2")],
137
- };
138
- // Mock getQuestByName
139
- jest.spyOn(QuestTool, "getQuestByName").mockImplementation((name) => {
140
- switch (name) {
141
- case "Quest1":
142
- return quest1;
143
- case "Quest2":
144
- return quest2;
145
- case "Quest3":
146
- return quest3;
147
- default:
148
- return undefined;
149
- }
150
- });
151
- tool.setOsrsAccount(makeAccountWithSkill("attack", 1));
152
- expect(tool.canCompleteQuest(quest3)).toBe(true);
153
- });
154
- it("should handle circular quest dependencies", () => {
155
- // Create circular dependency: QuestA requires QuestB requires QuestA
156
- const questA = {
157
- ...simpleQuest,
158
- name: "QuestA",
159
- requirements: [new QuestRequirement("QuestB")],
160
- };
161
- const questB = {
162
- ...simpleQuest,
163
- name: "QuestB",
164
- requirements: [new QuestRequirement("QuestA")],
165
- };
166
- // Mock getQuestByName
167
- jest.spyOn(QuestTool, "getQuestByName").mockImplementation((name) => {
168
- switch (name) {
169
- case "QuestA":
170
- return questA;
171
- case "QuestB":
172
- return questB;
173
- default:
174
- return undefined;
175
- }
176
- });
177
- tool.setOsrsAccount(makeAccountWithSkill("attack", 1));
178
- expect(tool.canCompleteQuest(questA)).toBe(true); // Should not get stuck in infinite loop
179
- });
180
- it("should handle missing quests", () => {
181
- const quest = {
182
- ...simpleQuest,
183
- requirements: [new QuestRequirement("NonexistentQuest")],
184
- };
185
- tool.setOsrsAccount(makeAccountWithSkill("attack", 1));
186
- expect(tool.canCompleteQuest(quest)).toBe(false);
187
- });
188
- it("should handle undefined quest", () => {
189
- tool.setOsrsAccount(makeAccountWithSkill("attack", 1));
190
- expect(tool.canCompleteQuest(undefined)).toBe(false);
191
- });
192
- });
193
- });
@@ -1,75 +0,0 @@
1
- import { QuestStatus } from '../../../source/runescape/model/quest/Quest';
2
- import { QuestDifficulty, QuestLength } from '../../../source/runescape/model/quest/enums';
3
- import { LevelRequirement, QuestRequirement } from '../../../source/runescape/model/Requirement';
4
- export const simpleQuest = {
5
- age: 'Fifth',
6
- description: 'A quest with no requirements.',
7
- difficulty: QuestDifficulty.Novice,
8
- id: 1,
9
- length: QuestLength.Short,
10
- members: false,
11
- miniquest: false,
12
- name: 'Simple Quest',
13
- questPoints: 1,
14
- recommendations: [],
15
- recommendedPrayers: [],
16
- recommendedSkills: {},
17
- requirements: [],
18
- rewards: { questPoints: 1 },
19
- shortName: 'SimpleQuest',
20
- startLocation: '',
21
- status: QuestStatus.NotStarted,
22
- steps: [],
23
- url: '',
24
- };
25
- export const skillQuest = {
26
- ...simpleQuest,
27
- id: 2,
28
- name: 'Skill Quest',
29
- requirements: [new LevelRequirement('attack', 50, false)],
30
- };
31
- export const boostableSkillQuest = {
32
- ...simpleQuest,
33
- id: 3,
34
- name: 'Boostable Skill Quest',
35
- requirements: [new LevelRequirement('herblore', 90, true)],
36
- };
37
- export const questReqQuest = {
38
- ...simpleQuest,
39
- id: 4,
40
- name: 'Quest Req Quest',
41
- requirements: [new QuestRequirement('Simple Quest')],
42
- };
43
- export const recursiveQuest = {
44
- ...simpleQuest,
45
- id: 5,
46
- name: 'Recursive Quest',
47
- requirements: [new QuestRequirement('Quest Req Quest')],
48
- };
49
- export const multiRequirementQuest = {
50
- ...simpleQuest,
51
- difficulty: QuestDifficulty.Master,
52
- id: 6,
53
- name: 'Multi Requirement Quest',
54
- requirements: [
55
- new LevelRequirement('attack', 70, false),
56
- new LevelRequirement('defence', 70, false),
57
- new LevelRequirement('strength', 70, false),
58
- new LevelRequirement('ranged', 70, true),
59
- new QuestRequirement('Simple Quest'),
60
- new QuestRequirement('Skill Quest'),
61
- ],
62
- series: 'Combat',
63
- };
64
- export const circularQuest1 = {
65
- ...simpleQuest,
66
- id: 7,
67
- name: 'Circular Quest 1',
68
- requirements: [new QuestRequirement('Circular Quest 2')],
69
- };
70
- export const circularQuest2 = {
71
- ...simpleQuest,
72
- id: 8,
73
- name: 'Circular Quest 2',
74
- requirements: [new QuestRequirement('Circular Quest 1')],
75
- };
@@ -1,98 +0,0 @@
1
- import { QuestDifficulty, QuestLength } from "../../../source/runescape/model/quest/enums";
2
- import { createItemRequirement, createLevelRequirement, createQuestPointRequirement, createQuestRequirement, RequirementType } from "../../../source/runescape/model/quest/Requirements";
3
- import { QuestStatus } from "../../../source/runescape/model/quest/Quest";
4
- describe("Quest Types and Requirements", () => {
5
- describe("Requirements", () => {
6
- it("should create level requirements correctly", () => {
7
- const req = createLevelRequirement("Mining", 55, true);
8
- expect(req).toEqual({
9
- boostable: true,
10
- description: "55 Mining",
11
- level: 55,
12
- skillName: "Mining",
13
- type: RequirementType.Level,
14
- });
15
- });
16
- it("should create quest requirements correctly", () => {
17
- const req = createQuestRequirement("Dragon Slayer");
18
- expect(req).toEqual({
19
- description: "Completion of Dragon Slayer",
20
- questName: "Dragon Slayer",
21
- type: RequirementType.Quest,
22
- });
23
- });
24
- it("should create quest point requirements correctly", () => {
25
- const req = createQuestPointRequirement(32);
26
- expect(req).toEqual({
27
- description: "32 Quest Points",
28
- points: 32,
29
- type: RequirementType.QuestPoint,
30
- });
31
- });
32
- it("should create item requirements correctly", () => {
33
- const req = createItemRequirement("Dragon bones", 3, true);
34
- expect(req).toEqual({
35
- consumed: true,
36
- description: "3x Dragon bones (consumed)",
37
- itemName: "Dragon bones",
38
- quantity: 3,
39
- type: RequirementType.Item,
40
- });
41
- });
42
- it("should handle optional item requirement parameters", () => {
43
- const req = createItemRequirement("Tinderbox");
44
- expect(req).toEqual({
45
- consumed: false,
46
- description: "1x Tinderbox",
47
- itemName: "Tinderbox",
48
- quantity: 1,
49
- type: RequirementType.Item,
50
- });
51
- });
52
- });
53
- describe("Quest Interface", () => {
54
- it("should validate a complete quest object", () => {
55
- const quest = {
56
- age: "Fifth Age",
57
- description: "Help the cook make a cake.",
58
- difficulty: QuestDifficulty.Novice,
59
- id: 1,
60
- length: QuestLength.Short,
61
- members: false,
62
- miniquest: false,
63
- name: "Cook's Assistant",
64
- questPoints: 1,
65
- recommendations: [],
66
- recommendedPrayers: [],
67
- recommendedSkills: {},
68
- requirements: [],
69
- rewards: {
70
- areas: [],
71
- experience: [{ amount: 300, skill: "Cooking" }],
72
- items: [],
73
- lamps: [],
74
- pets: [],
75
- points: [],
76
- questPoints: 1,
77
- unlocks: [{ description: "Access to the kitchen" }],
78
- },
79
- series: null,
80
- shortName: "cooksAssistant",
81
- startLocation: "Lumbridge Castle Kitchen",
82
- status: QuestStatus.NotStarted,
83
- steps: [
84
- "Talk to the cook in Lumbridge Castle kitchen.",
85
- "Get an egg from the farm north of Lumbridge.",
86
- "Get a bucket of milk from a dairy cow.",
87
- "Get a pot of flour from the mill north of Lumbridge.",
88
- "Return all ingredients to the cook.",
89
- ],
90
- url: "https://oldschool.runescape.wiki/w/Cook%27s_Assistant",
91
- };
92
- // Just checking that it compiles - TypeScript would catch type errors
93
- expect(quest.name).toBe("Cook's Assistant");
94
- expect(quest.difficulty).toBe(QuestDifficulty.Novice);
95
- expect(quest.rewards.experience?.[0].amount).toBe(300);
96
- });
97
- });
98
- });
@@ -1,52 +0,0 @@
1
- // Test file for all requirement types
2
- import { CombatLevelRequirement, ItemRequirement, LocationRequirement, QuestPointRequirement, QuestRequirement, RequirementType, SlayerLevelRequirement, SlayerUnlockRequirement, } from '../../../source/runescape/model/Requirement';
3
- describe('Requirement', () => {
4
- it('should create a QuestRequirement', () => {
5
- const req = new QuestRequirement('Dragon Slayer II');
6
- expect(req.questName).toBe('Dragon Slayer II');
7
- expect(req.type).toBe(RequirementType.Quest);
8
- expect(req.completionDescription).toBe('Completion of Dragon Slayer II');
9
- expect(req.description).toBe('Completed quest: Dragon Slayer II');
10
- });
11
- it('should create an ItemRequirement', () => {
12
- const req = new ItemRequirement('Dragon bones', 5, { noted: true });
13
- expect(req.itemName).toBe('Dragon bones');
14
- expect(req.quantity).toBe(5);
15
- expect(req.noted).toBe(true);
16
- expect(req.type).toBe(RequirementType.Item);
17
- expect(req.description).toBe('5x Dragon bones (noted)');
18
- });
19
- it('should create a SlayerUnlockRequirement', () => {
20
- const req = new SlayerUnlockRequirement('Slug Salter');
21
- expect(req.name).toBe('Slug Salter');
22
- expect(req.type).toBe(RequirementType.SlayerUnlock);
23
- expect(req.description).toBe('Slayer unlock: Slug Salter');
24
- });
25
- // CombatLevelRequirement
26
- it('should create a CombatLevelRequirement', () => {
27
- const req = new CombatLevelRequirement(75);
28
- expect(req.level).toBe(75);
29
- expect(req.type).toBe(RequirementType.CombatLevel);
30
- expect(req.description).toBe('Combat level 75');
31
- });
32
- // slayer level requirement
33
- it('should create a SlayerLevelRequirement', () => {
34
- const req = new SlayerLevelRequirement(90);
35
- expect(req.level).toBe(90);
36
- expect(req.type).toBe(RequirementType.SlayerLevel);
37
- expect(req.description).toBe('Slayer level 90');
38
- });
39
- // slayer level requirement
40
- it('should create a QuestPointRequirement ', () => {
41
- const req = new QuestPointRequirement(135);
42
- expect(req.amount).toBe(135);
43
- expect(req.type).toBe(RequirementType.QuestPoint);
44
- expect(req.description).toBe('Quest Points Needed: 135');
45
- });
46
- // LocationRequirement
47
- it('should create a LocationRequirement ', () => {
48
- const req = new LocationRequirement('Yanille');
49
- expect(req.type).toBe(RequirementType.Location);
50
- expect(req.description).toBe('Access to location: Yanille');
51
- });
52
- });
@@ -1,43 +0,0 @@
1
- import { SlayerMaster } from "../../../source/runescape/model/slayer/SlayerMaster";
2
- import { Task } from "../../../source/runescape/model/slayer/Task";
3
- describe("SlayerMaster", () => {
4
- const mockTasks = [new Task("Banshee", 0, 15, [], null, null, [], 5), new Task("Cave Crawler", 0, 15, [], null, null, [], 3), new Task("Crawling Hand", 0, 15, [], null, null, [], 2)];
5
- const taskPoints = { 1: 2, 10: 10, 50: 50 };
6
- const eliteDiaryTaskPoints = { 1: 3, 10: 15, 50: 75 };
7
- const master = new SlayerMaster("Test Master", mockTasks, "Testville", 50, "https://wiki.test/Test_Master", taskPoints, eliteDiaryTaskPoints);
8
- it("should construct with correct properties", () => {
9
- expect(master.getName()).toBe("Test Master");
10
- expect(master.getLocation()).toBe("Testville");
11
- expect(master.getMinimumCombatLevel()).toBe(50);
12
- expect(master.getWikiUrl()).toBe("https://wiki.test/Test_Master");
13
- expect(master.getTasks()).toEqual(mockTasks);
14
- expect(master.getTotalWeight()).toBe(10);
15
- expect(master.taskPoints).toEqual(taskPoints);
16
- expect(master.eliteDiaryTaskPoints).toEqual(eliteDiaryTaskPoints);
17
- });
18
- it("should calculate total weight correctly", () => {
19
- expect(master.calculateTotalWeight()).toBe(10);
20
- });
21
- it("should get points for task interval", () => {
22
- expect(master.getPointsForTaskInterval(1)).toBe(2);
23
- expect(master.getPointsForTaskInterval(10)).toBe(10);
24
- expect(master.getPointsForTaskInterval(50)).toBe(50);
25
- expect(master.getPointsForTaskInterval(99)).toBe(0);
26
- });
27
- it("should return a random task (weighted)", () => {
28
- // Run multiple times to check randomness and always return a valid task
29
- for (let i = 0; i < 10; i++) {
30
- const task = master.getRandomTask();
31
- expect(task).not.toBeNull();
32
- expect(mockTasks).toContain(task);
33
- }
34
- });
35
- it("should return null for random task if no tasks", () => {
36
- const emptyMaster = new SlayerMaster("Empty", [], "Nowhere", 1, "", {});
37
- expect(emptyMaster.getRandomTask()).toBeNull();
38
- });
39
- it("toString should return a string", () => {
40
- expect(typeof master.toString()).toBe("string");
41
- expect(master.toString()).toContain("Test Master");
42
- });
43
- });
@@ -1,20 +0,0 @@
1
- import { Chaeldar } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Chaeldar', () => {
3
- it('should be defined', () => {
4
- expect(Chaeldar).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Chaeldar.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Chaeldar.name).toBe('Chaeldar');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Chaeldar.location).toBe('Zanaris');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Chaeldar.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Chaeldar');
19
- });
20
- });
@@ -1,22 +0,0 @@
1
- // Test for the Tureal data from the JSON file
2
- import { Duradel } from '../../../../source/runescape/model/slayer/Masters';
3
- describe('Duradel', () => {
4
- it('should be defined', () => {
5
- expect(Duradel).toBeDefined();
6
- });
7
- it('should have a list of tasks', () => {
8
- const tasks = Duradel.tasks;
9
- expect(Array.isArray(tasks)).toBe(true);
10
- expect(tasks.length).toBeGreaterThan(0);
11
- });
12
- it('should have the correct name', () => {
13
- expect(Duradel.name).toBe('Duradel');
14
- });
15
- it('should have the correct location', () => {
16
- expect(Duradel.location).toBe('Shilo Village');
17
- });
18
- it('should have the correct wiki URL', () => {
19
- expect(Duradel.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Duradel');
20
- });
21
- });
22
- // We recommend installing an extension to run jest tests.
@@ -1,20 +0,0 @@
1
- import { KonarQuoMaten } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Konar Quo Maten', () => {
3
- it('should be defined', () => {
4
- expect(KonarQuoMaten).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = KonarQuoMaten.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(KonarQuoMaten.name).toBe('Konar Quo Maten');
13
- });
14
- it('should have the correct location', () => {
15
- expect(KonarQuoMaten.location).toBe('Mount Karuulm');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(KonarQuoMaten.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Konar_Quo_Maten');
19
- });
20
- });
@@ -1,20 +0,0 @@
1
- import { Krystilia } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Krystilia', () => {
3
- it('should be defined', () => {
4
- expect(Krystilia).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Krystilia.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Krystilia.name).toBe('Krystilia');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Krystilia.location).toBe('Edgeville');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Krystilia.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Krystilia');
19
- });
20
- });
@@ -1,20 +0,0 @@
1
- import { Mazchna } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Mazchna', () => {
3
- it('should be defined', () => {
4
- expect(Mazchna).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Mazchna.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Mazchna.name).toBe('Mazchna');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Mazchna.location).toBe('Canifis');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Mazchna.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Mazchna');
19
- });
20
- });