osrs-tools
Version:
A comprehensive TypeScript library for Old School RuneScape (OSRS) data and utilities, including quest data, skill requirements, and game item information
159 lines (158 loc) • 4.74 kB
JavaScript
import { SKILL_METADATA } from './account/Skill';
/**
* Level requirement for a specific skill.
* Automatically determines boostability from skill metadata.
* Supports both Skill enum and string skill names for backwards compatibility.
*/
class LevelRequirement {
type = RequirementType.Level;
skillName;
level;
boostable;
constructor(skillName, level, boostable) {
this.skillName = skillName;
this.level = level;
// If boostable is not explicitly provided, use metadata
if (boostable !== undefined) {
this.boostable = boostable;
}
else {
// Try to infer from metadata, default to false if skill not found
const meta = SKILL_METADATA[this.skillName];
this.boostable = meta?.isBoostable ?? false;
}
}
get description() {
return `Level ${this.level}`;
}
/**
* Get the expected max level for this skill from metadata.
* Useful for validation and display purposes.
*/
getMaxLevel() {
const meta = SKILL_METADATA[this.skillName];
return meta?.maxLevel ?? 99;
}
}
// Enum for requirement types
var RequirementType;
(function (RequirementType) {
RequirementType["SlayerLevel"] = "SlayerLevel";
RequirementType["Level"] = "Level";
RequirementType["CombatLevel"] = "CombatLevel";
RequirementType["Quest"] = "Quest";
RequirementType["Item"] = "Item";
RequirementType["QuestPoint"] = "QuestPoint";
RequirementType["Location"] = "Location";
RequirementType["SlayerUnlock"] = "SlayerUnlock";
})(RequirementType || (RequirementType = {}));
// Slayer Unlock requirement
class SlayerUnlockRequirement {
type = RequirementType.SlayerUnlock;
name;
constructor(name) {
this.name = name;
}
get description() {
return `Slayer unlock: ${this.name}`;
}
}
// Slayer level requirement
class SlayerLevelRequirement {
type = RequirementType.SlayerLevel;
level;
constructor(level) {
this.level = level;
}
get description() {
return `Slayer level ${this.level}`;
}
}
// Combat level requirement
class CombatLevelRequirement {
type = RequirementType.CombatLevel;
level;
constructor(level) {
this.level = level;
}
get description() {
return `Combat level ${this.level}`;
}
}
// Quest requirement
class QuestRequirement {
static fromQuestName(arg0) {
throw new Error("Method not implemented.");
}
type = RequirementType.Quest;
questName;
constructor(questName) {
this.questName = questName;
}
get description() {
return `Completed quest: ${this.questName}`;
}
get completionDescription() {
return `Completion of ${this.questName}`;
}
}
class QuestPointRequirement {
type = RequirementType.QuestPoint;
amount;
constructor(amount) {
this.amount = amount;
}
get description() {
return `Quest Points Needed: ${this.amount}`;
}
}
// Item requirement
class ItemRequirement {
type = RequirementType.Item;
itemName;
quantity;
/** Whether the item is consumed during the quest */
consumed;
/** Alternative items that can be used instead */
alternatives;
/** Whether the item must be noted */
noted;
/** Whether the item can be banked and withdrawn during the quest */
bankable;
/** Any additional notes about the item requirement */
notes;
constructor(itemName, quantity = 1, options = {}) {
this.itemName = itemName;
this.quantity = quantity;
this.consumed = options.consumed ?? true;
this.alternatives = options.alternatives;
this.noted = options.noted;
this.bankable = options.bankable;
this.notes = options.notes;
}
get description() {
let desc = `${this.quantity}x ${this.itemName}`;
if (this.noted)
desc += ' (noted)';
if (!this.consumed)
desc += ' (not consumed)';
if (this.alternatives?.length) {
desc += ` (or ${this.alternatives.join(' or ')})`;
}
if (this.notes)
desc += ` (${this.notes})`;
return desc;
}
}
// Location requirement
class LocationRequirement {
type = RequirementType.Location;
locationName;
constructor(locationName) {
this.locationName = locationName;
}
get description() {
return `Access to location: ${this.locationName}`;
}
}
export { CombatLevelRequirement, ItemRequirement, LevelRequirement, LocationRequirement, QuestPointRequirement, QuestRequirement, RequirementType, SlayerLevelRequirement, SlayerUnlockRequirement, };