osrs-tools 2.8.1 → 2.9.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/runescape/model/collection-log/CollectionLog.d.ts +8 -0
- package/dist/runescape/model/collection-log/CollectionLog.d.ts.map +1 -0
- package/dist/runescape/model/collection-log/CollectionLog.js +124 -0
- package/dist/runescape/model/collection-log/CollectionLog.model.d.ts +48 -0
- package/dist/runescape/model/collection-log/CollectionLog.model.d.ts.map +1 -0
- package/dist/runescape/model/collection-log/CollectionLog.model.js +13 -0
- package/dist/runescape/model/collection-log/index.d.ts +4 -0
- package/dist/runescape/model/collection-log/index.d.ts.map +1 -0
- package/dist/runescape/model/collection-log/index.js +2 -0
- package/dist/runescape/model/combat-achievements/CombatAchievement.model.d.ts +37 -0
- package/dist/runescape/model/combat-achievements/CombatAchievement.model.d.ts.map +1 -0
- package/dist/runescape/model/combat-achievements/CombatAchievement.model.js +17 -0
- package/dist/runescape/model/combat-achievements/CombatAchievements.d.ts +8 -0
- package/dist/runescape/model/combat-achievements/CombatAchievements.d.ts.map +1 -0
- package/dist/runescape/model/combat-achievements/CombatAchievements.js +80 -0
- package/dist/runescape/model/combat-achievements/index.d.ts +4 -0
- package/dist/runescape/model/combat-achievements/index.d.ts.map +1 -0
- package/dist/runescape/model/combat-achievements/index.js +2 -0
- package/dist/runescape/model/guilds/HunterGuild.d.ts +18 -0
- package/dist/runescape/model/guilds/HunterGuild.d.ts.map +1 -0
- package/dist/runescape/model/guilds/HunterGuild.js +65 -0
- package/dist/runescape/model/guilds/HunterGuildMaster.d.ts +29 -0
- package/dist/runescape/model/guilds/HunterGuildMaster.d.ts.map +1 -0
- package/dist/runescape/model/guilds/HunterGuildMaster.js +39 -0
- package/dist/runescape/model/guilds/HunterGuildProgress.d.ts +12 -0
- package/dist/runescape/model/guilds/HunterGuildProgress.d.ts.map +1 -0
- package/dist/runescape/model/guilds/HunterGuildProgress.js +27 -0
- package/dist/runescape/model/guilds/HunterRumour.d.ts +23 -0
- package/dist/runescape/model/guilds/HunterRumour.d.ts.map +1 -0
- package/dist/runescape/model/guilds/HunterRumour.js +43 -0
- package/dist/runescape/model/guilds/RumourLocation.d.ts +10 -0
- package/dist/runescape/model/guilds/RumourLocation.d.ts.map +1 -0
- package/dist/runescape/model/guilds/RumourLocation.js +12 -0
- package/dist/runescape/model/guilds/Rumours.d.ts +3 -0
- package/dist/runescape/model/guilds/Rumours.d.ts.map +1 -0
- package/dist/runescape/model/guilds/Rumours.js +303 -0
- package/dist/runescape/model/guilds/hunter/HunterGuild.d.ts +33 -0
- package/dist/runescape/model/guilds/hunter/HunterGuild.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/HunterGuild.js +107 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMaster.d.ts +52 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMaster.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMaster.js +71 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMasterName.d.ts +21 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMasterName.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/HunterGuildMasterName.js +8 -0
- package/dist/runescape/model/guilds/hunter/HunterRumour.d.ts +33 -0
- package/dist/runescape/model/guilds/hunter/HunterRumour.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/HunterRumour.js +52 -0
- package/dist/runescape/model/guilds/hunter/RumourLocation.d.ts +48 -0
- package/dist/runescape/model/guilds/hunter/RumourLocation.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/RumourLocation.js +42 -0
- package/dist/runescape/model/guilds/hunter/Rumours.d.ts +11 -0
- package/dist/runescape/model/guilds/hunter/Rumours.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/Rumours.js +325 -0
- package/dist/runescape/model/guilds/hunter/index.d.ts +5 -0
- package/dist/runescape/model/guilds/hunter/index.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/index.js +4 -0
- package/dist/runescape/model/guilds/hunter/types.d.ts +32 -0
- package/dist/runescape/model/guilds/hunter/types.d.ts.map +1 -0
- package/dist/runescape/model/guilds/hunter/types.js +10 -0
- package/dist/runescape/model/guilds/index.d.ts +2 -0
- package/dist/runescape/model/guilds/index.d.ts.map +1 -0
- package/dist/runescape/model/guilds/index.js +1 -0
- package/dist/runescape/model/guilds/types.d.ts +44 -0
- package/dist/runescape/model/guilds/types.d.ts.map +1 -0
- package/dist/runescape/model/guilds/types.js +21 -0
- package/dist/runescape/model/hunter/HunterRumour.d.ts +155 -0
- package/dist/runescape/model/hunter/HunterRumour.d.ts.map +1 -0
- package/dist/runescape/model/hunter/HunterRumour.js +183 -0
- package/dist/runescape/model/hunter/HunterRumours.d.ts +70 -0
- package/dist/runescape/model/hunter/HunterRumours.d.ts.map +1 -0
- package/dist/runescape/model/hunter/HunterRumours.js +346 -0
- package/dist/runescape/model/hunter/index.d.ts +9 -0
- package/dist/runescape/model/hunter/index.d.ts.map +1 -0
- package/dist/runescape/model/hunter/index.js +9 -0
- package/dist/runescape/model/leagues/DemonicPact.d.ts +23 -0
- package/dist/runescape/model/leagues/DemonicPact.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPact.js +210 -0
- package/dist/runescape/model/leagues/DemonicPact.model.d.ts +103 -0
- package/dist/runescape/model/leagues/DemonicPact.model.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPact.model.js +17 -0
- package/dist/runescape/model/leagues/DemonicPactClasses.d.ts +539 -0
- package/dist/runescape/model/leagues/DemonicPactClasses.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPactClasses.js +1085 -0
- package/dist/runescape/model/leagues/DemonicPactPlanningData.d.ts +4 -0
- package/dist/runescape/model/leagues/DemonicPactPlanningData.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPactPlanningData.js +174 -0
- package/dist/runescape/model/leagues/DemonicPacts.d.ts +4 -0
- package/dist/runescape/model/leagues/DemonicPacts.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPacts.js +66 -0
- package/dist/runescape/model/leagues/DemonicPactsLeague/DemonicPactsLeagueAreas.d.ts +23 -0
- package/dist/runescape/model/leagues/DemonicPactsLeague/DemonicPactsLeagueAreas.d.ts.map +1 -0
- package/dist/runescape/model/leagues/DemonicPactsLeague/DemonicPactsLeagueAreas.js +442 -0
- package/dist/runescape/model/leagues/LeaguesRegion.model.d.ts +33 -0
- package/dist/runescape/model/leagues/LeaguesRegion.model.d.ts.map +1 -0
- package/dist/runescape/model/leagues/LeaguesRegion.model.js +14 -0
- package/dist/runescape/model/leagues/LeaguesRegions.d.ts +10 -0
- package/dist/runescape/model/leagues/LeaguesRegions.d.ts.map +1 -0
- package/dist/runescape/model/leagues/LeaguesRegions.js +69 -0
- package/dist/runescape/model/leagues/LeaguesRelic.model.d.ts +31 -0
- package/dist/runescape/model/leagues/LeaguesRelic.model.d.ts.map +1 -0
- package/dist/runescape/model/leagues/LeaguesRelic.model.js +11 -0
- package/dist/runescape/model/leagues/LeaguesRelics.d.ts +8 -0
- package/dist/runescape/model/leagues/LeaguesRelics.d.ts.map +1 -0
- package/dist/runescape/model/leagues/LeaguesRelics.js +237 -0
- package/dist/runescape/model/leagues/RagingEchoesLeague/RagingEchoesLeague.d.ts +749 -0
- package/dist/runescape/model/leagues/RagingEchoesLeague/RagingEchoesLeague.d.ts.map +1 -0
- package/dist/runescape/model/leagues/RagingEchoesLeague/RagingEchoesLeague.js +856 -0
- package/dist/runescape/model/leagues/general/Leagues.d.ts +70 -0
- package/dist/runescape/model/leagues/general/Leagues.d.ts.map +1 -0
- package/dist/runescape/model/leagues/general/Leagues.js +141 -0
- package/dist/runescape/model/leagues/index.d.ts +4 -0
- package/dist/runescape/model/leagues/index.d.ts.map +1 -0
- package/dist/runescape/model/leagues/index.js +3 -0
- package/dist/runescape/model/leagues/model.d.ts +32 -0
- package/dist/runescape/model/leagues/model.d.ts.map +1 -0
- package/dist/runescape/model/leagues/model.js +19 -0
- package/dist/runescape/model/skills/Skill.d.ts +22 -0
- package/dist/runescape/model/skills/Skill.d.ts.map +1 -0
- package/dist/runescape/model/skills/Skill.js +1 -0
- package/dist/runescape/model/skills/attack/Attack.d.ts +15 -0
- package/dist/runescape/model/skills/attack/Attack.d.ts.map +1 -0
- package/dist/runescape/model/skills/attack/Attack.js +19 -0
- package/dist/runescape/model/skills/attack/AttackLevelUnlocks.d.ts +6 -0
- package/dist/runescape/model/skills/attack/AttackLevelUnlocks.d.ts.map +1 -0
- package/dist/runescape/model/skills/attack/AttackLevelUnlocks.js +47 -0
- package/dist/runescape/model/skills/attack/index.d.ts +3 -0
- package/dist/runescape/model/skills/attack/index.d.ts.map +1 -0
- package/dist/runescape/model/skills/attack/index.js +2 -0
- package/dist/runescape/model/skills/hunter/Hunter.d.ts +5 -0
- package/dist/runescape/model/skills/hunter/Hunter.d.ts.map +1 -0
- package/dist/runescape/model/skills/hunter/Hunter.js +6 -0
- package/dist/runescape/model/skills/hunter/HunterNpcs.d.ts +1 -0
- package/dist/runescape/model/skills/hunter/HunterNpcs.d.ts.map +1 -0
- package/dist/runescape/model/skills/hunter/HunterNpcs.js +1 -0
- package/dist/runescape/model/skills/hunter/index.d.ts +2 -0
- package/dist/runescape/model/skills/hunter/index.d.ts.map +1 -0
- package/dist/runescape/model/skills/hunter/index.js +1 -0
- package/dist/runescape/model/skills/index.d.ts +3 -0
- package/dist/runescape/model/skills/index.d.ts.map +1 -0
- package/dist/runescape/model/skills/index.js +2 -0
- package/dist/runescape/resources/QuestData.json +5454 -0
- package/dist/runescape/resources/diary/diaries.json +1484 -0
- package/dist/runescape/resources/diary/diariesArray.json +0 -0
- package/dist/runescape/resources/leagues/demonicPacts.leagues7.json +2449 -0
- package/dist/runescape/resources/quest/exp.json +1333 -0
- package/dist/runescape/resources/quest/questData.json +5790 -0
- package/dist/runescape/resources/quest/questDataArray.json +5489 -0
- package/dist/runescape/resources/quest/subquestArray.json +58 -0
- package/dist/runescape/resources/quest/testObj.json +5682 -0
- package/dist/runescape/resources/quest/testarray.json +5589 -0
- package/dist/runescape/resources/quests/CooksAssistant.json +34 -0
- package/dist/runescape/resources/slayer/slayer.json +3581 -0
- package/dist/runescape/resources/slayer/slayerData.json +4431 -0
- package/dist/runescape/resources/slayer/tasks/json/Chaeldar.json +348 -0
- package/dist/runescape/resources/slayer/tasks/json/Duradel.json +541 -0
- package/dist/runescape/resources/slayer/tasks/json/Krystilia.json +2 -0
- package/dist/runescape/resources/slayer/tasks/json/Mazchna.json +379 -0
- package/dist/runescape/resources/slayer/tasks/json/Neive.json +320 -0
- package/dist/runescape/resources/slayer/tasks/json/Spria.json +345 -0
- package/dist/runescape/resources/slayer/tasks/json/Tureal.json +341 -0
- package/dist/runescape/resources/slayer/tasks/json/Vannaka.json +547 -0
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HunterRumourDefinition, HunterRumourTier } from './types';
|
|
2
|
+
import { RumourLocation } from './RumourLocation';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a Hunter Rumour that can be assigned by a Hunter Guild Master. Contains all the necessary information about the rumour, including the creature, method, locations, required hunter level, tier, and any quest requirements. Provides methods to check if the rumour can be assigned to a specific master and if a player is eligible for the rumour based on their hunter level and completed quests.
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
export declare class HunterRumour {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly creature: string;
|
|
10
|
+
readonly method: string;
|
|
11
|
+
readonly locations: RumourLocation[];
|
|
12
|
+
readonly requiredHunterLevel: number;
|
|
13
|
+
readonly tier: HunterRumourTier;
|
|
14
|
+
readonly masterNames: string[];
|
|
15
|
+
readonly questRequirements: string[];
|
|
16
|
+
readonly notes?: string;
|
|
17
|
+
readonly leagueRegions: string[];
|
|
18
|
+
constructor(definition: HunterRumourDefinition);
|
|
19
|
+
get wikiUrls(): string[];
|
|
20
|
+
canBeAssignedByMaster(masterName: string): boolean;
|
|
21
|
+
isEligible(hunterLevel: number, completedQuests?: string[]): boolean;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=HunterRumour.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HunterRumour.d.ts","sourceRoot":"","sources":["../../../../source/runescape/model/guilds/HunterRumour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD;;;GAGG;AACH,qBAAa,YAAY;IAGvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAGpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC;IAErC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAErC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEhC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAErC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;gBAGrB,UAAU,EAAE,sBAAsB;IAa9C,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;IAED,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIlD,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,OAAO;CAKzE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { RumourLocation } from './RumourLocation';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a Hunter Rumour that can be assigned by a Hunter Guild Master. Contains all the necessary information about the rumour, including the creature, method, locations, required hunter level, tier, and any quest requirements. Provides methods to check if the rumour can be assigned to a specific master and if a player is eligible for the rumour based on their hunter level and completed quests.
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
export class HunterRumour {
|
|
7
|
+
/// Unique identifier for the rumour, typically derived from the creature name and method.
|
|
8
|
+
id;
|
|
9
|
+
// The name of the creature that the rumour is about.
|
|
10
|
+
creature;
|
|
11
|
+
// A brief description of the method to catch the creature.
|
|
12
|
+
method;
|
|
13
|
+
locations;
|
|
14
|
+
requiredHunterLevel;
|
|
15
|
+
tier;
|
|
16
|
+
masterNames;
|
|
17
|
+
questRequirements;
|
|
18
|
+
notes;
|
|
19
|
+
leagueRegions;
|
|
20
|
+
constructor(definition) {
|
|
21
|
+
this.id = definition.id;
|
|
22
|
+
this.creature = definition.creature;
|
|
23
|
+
this.method = definition.method;
|
|
24
|
+
this.locations = definition.locations.map((location) => new RumourLocation(location.name, location.wikiUrl));
|
|
25
|
+
this.requiredHunterLevel = definition.requiredHunterLevel;
|
|
26
|
+
this.tier = definition.tier;
|
|
27
|
+
this.masterNames = [...definition.masterNames];
|
|
28
|
+
this.questRequirements = [...(definition.questRequirements ?? [])];
|
|
29
|
+
this.notes = definition.notes;
|
|
30
|
+
this.leagueRegions = [...(definition.leagueRegions ?? [])];
|
|
31
|
+
}
|
|
32
|
+
get wikiUrls() {
|
|
33
|
+
return this.locations.map((location) => location.wikiUrl);
|
|
34
|
+
}
|
|
35
|
+
canBeAssignedByMaster(masterName) {
|
|
36
|
+
return this.masterNames.includes(masterName);
|
|
37
|
+
}
|
|
38
|
+
isEligible(hunterLevel, completedQuests = []) {
|
|
39
|
+
const meetsLevel = hunterLevel >= this.requiredHunterLevel;
|
|
40
|
+
const meetsQuests = this.questRequirements.every((quest) => completedQuests.includes(quest));
|
|
41
|
+
return meetsLevel && meetsQuests;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a location where a rumour can be found in Gielinor.
|
|
3
|
+
* Each location has a name and a corresponding wiki URL for more information. This class is used to provide players with details about where they can find specific rumours within the guild, helping them to navigate and complete their tasks more efficiently.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RumourLocation {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly wikiUrl: string;
|
|
8
|
+
constructor(name: string, wikiUrl: string);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=RumourLocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RumourLocation.d.ts","sourceRoot":"","sources":["../../../../source/runescape/model/guilds/RumourLocation.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,cAAc;IAEzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a location where a rumour can be found in Gielinor.
|
|
3
|
+
* Each location has a name and a corresponding wiki URL for more information. This class is used to provide players with details about where they can find specific rumours within the guild, helping them to navigate and complete their tasks more efficiently.
|
|
4
|
+
*/
|
|
5
|
+
export class RumourLocation {
|
|
6
|
+
name; // The name of the location where the rumour can be found.
|
|
7
|
+
wikiUrl; // A URL to the RuneScape Wiki page that provides more information about the location, including how to access it and any relevant details for players.
|
|
8
|
+
constructor(name, wikiUrl) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.wikiUrl = wikiUrl;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rumours.d.ts","sourceRoot":"","sources":["../../../../source/runescape/model/guilds/Rumours.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0C9C,eAAO,MAAM,sBAAsB,EAAE,YAAY,EA4RhD,CAAC"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { HunterRumour } from "./HunterRumour";
|
|
2
|
+
import { RumourLocation } from "./RumourLocation";
|
|
3
|
+
import { HunterGuildMasterName } from "./HunterGuildMaster";
|
|
4
|
+
import { HunterRumourMethods, HunterLeagueRegions } from "./types";
|
|
5
|
+
// Common location name constants to avoid repeated literal strings
|
|
6
|
+
const FELDIP_HUNTER_AREA = 'Feldip Hunter area';
|
|
7
|
+
const PISCATORIS_HUNTER_AREA = 'Piscatoris Hunter area';
|
|
8
|
+
const RELLEKKA_HUNTER_AREA = 'Rellekka Hunter area';
|
|
9
|
+
const THE_GREAT_CONCH = 'The Great Conch';
|
|
10
|
+
const TLATI_RAINFOREST = 'Tlati Rainforest';
|
|
11
|
+
const FARMING_GUILD = 'Farming Guild';
|
|
12
|
+
const PISCATORIS_FALCONRY_AREA = 'Piscatoris falconry area';
|
|
13
|
+
const AVIUM_SAVANNAH = 'Avium Savannah';
|
|
14
|
+
const MONS_GRATIA = 'Mons Gratia';
|
|
15
|
+
const NEYPOTZLI = 'Neypotzli';
|
|
16
|
+
const THE_BURROW = 'The Burrow';
|
|
17
|
+
const { BIRD_SNARE, DEADFALL, BUTTERFLY_NET, NET_TRAP, SPIKED_PIT, BOX_TRAP, FALCONRY, TRACKING, } = HunterRumourMethods;
|
|
18
|
+
const { KANDARIN, VARLAMORE, FREMENNIK, KOUREND, MORYTANIA, KARAMJA, DESERT, MISHTHALIN, TIRANNWN, } = HunterLeagueRegions;
|
|
19
|
+
export const HUNTER_RUMOUR_REGISTRY = [
|
|
20
|
+
new HunterRumour({
|
|
21
|
+
id: 'tropical-wagtail',
|
|
22
|
+
creature: 'Tropical wagtail',
|
|
23
|
+
method: 'Bird snare',
|
|
24
|
+
locations: [new RumourLocation(FELDIP_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Tropical_wagtail'), new RumourLocation(THE_GREAT_CONCH, 'https://oldschool.runescape.wiki/w/Tropical_wagtail'), new RumourLocation(TLATI_RAINFOREST, 'https://oldschool.runescape.wiki/w/Tropical_wagtail')],
|
|
25
|
+
requiredHunterLevel: 19,
|
|
26
|
+
tier: 'Novice',
|
|
27
|
+
masterNames: [HunterGuildMasterName.GILMAN],
|
|
28
|
+
leagueRegions: ["Kandarin", "Varlamore"],
|
|
29
|
+
}),
|
|
30
|
+
new HunterRumour({
|
|
31
|
+
id: 'wild-kebbit',
|
|
32
|
+
creature: 'Wild kebbit',
|
|
33
|
+
method: 'Deadfall',
|
|
34
|
+
locations: [new RumourLocation(PISCATORIS_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Wild_kebbit'), new RumourLocation('Auburnvale', 'https://oldschool.runescape.wiki/w/Wild_kebbit')],
|
|
35
|
+
requiredHunterLevel: 23,
|
|
36
|
+
tier: 'Novice',
|
|
37
|
+
masterNames: [HunterGuildMasterName.GILMAN],
|
|
38
|
+
leagueRegions: ["Kandarin", "Varlamore"],
|
|
39
|
+
}),
|
|
40
|
+
new HunterRumour({
|
|
41
|
+
id: 'sapphire-glacialis',
|
|
42
|
+
creature: 'Sapphire glacialis',
|
|
43
|
+
method: 'Butterfly net',
|
|
44
|
+
locations: [new RumourLocation(RELLEKKA_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Sapphire_glacialis'), new RumourLocation(FARMING_GUILD, 'https://oldschool.runescape.wiki/w/Sapphire_glacialis'), new RumourLocation(MONS_GRATIA, 'https://oldschool.runescape.wiki/w/Sapphire_glacialis')],
|
|
45
|
+
requiredHunterLevel: 25,
|
|
46
|
+
tier: 'Novice',
|
|
47
|
+
masterNames: [HunterGuildMasterName.GILMAN],
|
|
48
|
+
leagueRegions: ["Fremennik", "Kourend", "Varlamore"],
|
|
49
|
+
}),
|
|
50
|
+
new HunterRumour({
|
|
51
|
+
id: 'swamp-lizard',
|
|
52
|
+
creature: 'Swamp lizard',
|
|
53
|
+
method: 'Net trap',
|
|
54
|
+
locations: [new RumourLocation('Canifis Hunter area', 'https://oldschool.runescape.wiki/w/Swamp_lizard'), new RumourLocation('North-west of Slepe', 'https://oldschool.runescape.wiki/w/Swamp_lizard')],
|
|
55
|
+
requiredHunterLevel: 29,
|
|
56
|
+
tier: 'Adept',
|
|
57
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus'],
|
|
58
|
+
leagueRegions: ["Morytania"],
|
|
59
|
+
}),
|
|
60
|
+
new HunterRumour({
|
|
61
|
+
id: 'spined-larupia',
|
|
62
|
+
creature: 'Spined larupia',
|
|
63
|
+
method: 'Spiked pit',
|
|
64
|
+
locations: [new RumourLocation(FELDIP_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Spined_larupia')],
|
|
65
|
+
requiredHunterLevel: 31,
|
|
66
|
+
tier: 'Expert',
|
|
67
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Aco'],
|
|
68
|
+
leagueRegions: ["Kandarin"],
|
|
69
|
+
}),
|
|
70
|
+
new HunterRumour({
|
|
71
|
+
id: 'barb-tailed-kebbit',
|
|
72
|
+
creature: 'Barb-tailed kebbit',
|
|
73
|
+
method: 'Deadfall',
|
|
74
|
+
locations: [new RumourLocation(FELDIP_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Barb-tailed_kebbit')],
|
|
75
|
+
requiredHunterLevel: 33,
|
|
76
|
+
tier: 'Novice',
|
|
77
|
+
masterNames: [HunterGuildMasterName.GILMAN],
|
|
78
|
+
leagueRegions: ["Kandarin"],
|
|
79
|
+
}),
|
|
80
|
+
new HunterRumour({
|
|
81
|
+
id: 'snowy-knight',
|
|
82
|
+
creature: 'Snowy knight',
|
|
83
|
+
method: 'Butterfly net',
|
|
84
|
+
locations: [new RumourLocation(RELLEKKA_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Snowy_knight'), new RumourLocation('Weiss', 'https://oldschool.runescape.wiki/w/Snowy_knight'), new RumourLocation(FARMING_GUILD, 'https://oldschool.runescape.wiki/w/Snowy_knight'), new RumourLocation(MONS_GRATIA, 'https://oldschool.runescape.wiki/w/Snowy_knight')],
|
|
85
|
+
requiredHunterLevel: 35,
|
|
86
|
+
tier: 'Expert',
|
|
87
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Aco'],
|
|
88
|
+
leagueRegions: ["Fremennik", "Kandarin", "Kourend", "Varlamore"],
|
|
89
|
+
}),
|
|
90
|
+
new HunterRumour({
|
|
91
|
+
id: 'prickly-kebbit',
|
|
92
|
+
creature: 'Prickly kebbit',
|
|
93
|
+
method: 'Deadfall',
|
|
94
|
+
locations: [new RumourLocation(PISCATORIS_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Prickly_kebbit')],
|
|
95
|
+
requiredHunterLevel: 37,
|
|
96
|
+
tier: 'Novice',
|
|
97
|
+
masterNames: [HunterGuildMasterName.GILMAN],
|
|
98
|
+
leagueRegions: ["Kandarin"],
|
|
99
|
+
}),
|
|
100
|
+
new HunterRumour({
|
|
101
|
+
id: 'embertailed-jerboa',
|
|
102
|
+
creature: 'Embertailed jerboa',
|
|
103
|
+
method: 'Box trap',
|
|
104
|
+
locations: [new RumourLocation('West of Hunter Guild', 'https://oldschool.runescape.wiki/w/Embertailed_jerboa'), new RumourLocation('North-west of the Locus Oasis', 'https://oldschool.runescape.wiki/w/Embertailed_jerboa')],
|
|
105
|
+
requiredHunterLevel: 39,
|
|
106
|
+
tier: 'Expert',
|
|
107
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Aco'],
|
|
108
|
+
leagueRegions: ["Varlamore"],
|
|
109
|
+
}),
|
|
110
|
+
new HunterRumour({
|
|
111
|
+
id: 'horned-graahk',
|
|
112
|
+
creature: 'Horned graahk',
|
|
113
|
+
method: 'Spiked pit',
|
|
114
|
+
locations: [new RumourLocation('Karamja Hunter area', 'https://oldschool.runescape.wiki/w/Horned_graahk')],
|
|
115
|
+
requiredHunterLevel: 41,
|
|
116
|
+
tier: 'Adept',
|
|
117
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus'],
|
|
118
|
+
leagueRegions: ["Karamja"],
|
|
119
|
+
}),
|
|
120
|
+
new HunterRumour({
|
|
121
|
+
id: 'spotted-kebbit',
|
|
122
|
+
creature: 'Spotted kebbit',
|
|
123
|
+
method: 'Falconry',
|
|
124
|
+
locations: [new RumourLocation(PISCATORIS_FALCONRY_AREA, 'https://oldschool.runescape.wiki/w/Spotted_kebbit')],
|
|
125
|
+
requiredHunterLevel: 43,
|
|
126
|
+
tier: 'Adept',
|
|
127
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Ornus'],
|
|
128
|
+
leagueRegions: ["Kandarin"],
|
|
129
|
+
}),
|
|
130
|
+
new HunterRumour({
|
|
131
|
+
id: 'black-warlock',
|
|
132
|
+
creature: 'Black warlock',
|
|
133
|
+
method: 'Butterfly net',
|
|
134
|
+
locations: [new RumourLocation(FELDIP_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Black_warlock'), new RumourLocation(FARMING_GUILD, 'https://oldschool.runescape.wiki/w/Black_warlock'), new RumourLocation('Crypt of Tonali hunter area', 'https://oldschool.runescape.wiki/w/Black_warlock'), new RumourLocation(TLATI_RAINFOREST, 'https://oldschool.runescape.wiki/w/Black_warlock'), new RumourLocation('Shimmering Atoll', 'https://oldschool.runescape.wiki/w/Black_warlock')],
|
|
135
|
+
requiredHunterLevel: 45,
|
|
136
|
+
tier: 'Adept',
|
|
137
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus'],
|
|
138
|
+
leagueRegions: ["Kandarin", "Kourend", "Varlamore"],
|
|
139
|
+
}),
|
|
140
|
+
new HunterRumour({
|
|
141
|
+
id: 'orange-salamander',
|
|
142
|
+
creature: 'Orange salamander',
|
|
143
|
+
method: 'Net trap',
|
|
144
|
+
locations: [new RumourLocation(THE_GREAT_CONCH, 'https://oldschool.runescape.wiki/w/Orange_salamander'), new RumourLocation('Uzer Hunter area', 'https://oldschool.runescape.wiki/w/Orange_salamander'), new RumourLocation('Necropolis Hunter area', 'https://oldschool.runescape.wiki/w/Orange_salamander')],
|
|
145
|
+
requiredHunterLevel: 47,
|
|
146
|
+
tier: 'Expert',
|
|
147
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Ornus'],
|
|
148
|
+
leagueRegions: ["Desert"],
|
|
149
|
+
}),
|
|
150
|
+
new HunterRumour({
|
|
151
|
+
id: 'razor-backed-kebbit',
|
|
152
|
+
creature: 'Razor-backed kebbit',
|
|
153
|
+
method: 'Tracking',
|
|
154
|
+
locations: [new RumourLocation(PISCATORIS_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Razor-backed_kebbit')],
|
|
155
|
+
requiredHunterLevel: 49,
|
|
156
|
+
tier: 'Adept',
|
|
157
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus'],
|
|
158
|
+
leagueRegions: ["Kandarin"],
|
|
159
|
+
}),
|
|
160
|
+
new HunterRumour({
|
|
161
|
+
id: 'sabre-toothed-kebbit',
|
|
162
|
+
creature: 'Sabre-toothed kebbit',
|
|
163
|
+
method: 'Deadfall',
|
|
164
|
+
locations: [new RumourLocation(RELLEKKA_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Sabre-toothed_kebbit')],
|
|
165
|
+
requiredHunterLevel: 51,
|
|
166
|
+
tier: 'Expert',
|
|
167
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Ornus'],
|
|
168
|
+
leagueRegions: ["Fremennik"],
|
|
169
|
+
}),
|
|
170
|
+
new HunterRumour({
|
|
171
|
+
id: 'grey-chinchompa',
|
|
172
|
+
creature: 'Grey chinchompa',
|
|
173
|
+
method: 'Box trap',
|
|
174
|
+
locations: [new RumourLocation(PISCATORIS_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Grey_chinchompa'), new RumourLocation('Kourend Woodland', 'https://oldschool.runescape.wiki/w/Grey_chinchompa'), new RumourLocation('Isle of Souls', 'https://oldschool.runescape.wiki/w/Grey_chinchompa')],
|
|
175
|
+
requiredHunterLevel: 53,
|
|
176
|
+
tier: 'Expert',
|
|
177
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Aco', 'Teco'],
|
|
178
|
+
leagueRegions: ["Kandarin", "Kourend", "Misthalin"],
|
|
179
|
+
}),
|
|
180
|
+
new HunterRumour({
|
|
181
|
+
id: 'sabre-toothed-kyatt',
|
|
182
|
+
creature: 'Sabre-toothed kyatt',
|
|
183
|
+
method: 'Spiked pit',
|
|
184
|
+
locations: [new RumourLocation(RELLEKKA_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Sabre-toothed_kyatt')],
|
|
185
|
+
requiredHunterLevel: 55,
|
|
186
|
+
tier: 'Expert',
|
|
187
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Ornus', 'Aco', 'Teco'],
|
|
188
|
+
leagueRegions: ["Fremennik"],
|
|
189
|
+
}),
|
|
190
|
+
new HunterRumour({
|
|
191
|
+
id: 'dark-kebbit',
|
|
192
|
+
creature: 'Dark kebbit',
|
|
193
|
+
method: 'Falconry',
|
|
194
|
+
locations: [new RumourLocation(PISCATORIS_FALCONRY_AREA, 'https://oldschool.runescape.wiki/w/Dark_kebbit')],
|
|
195
|
+
requiredHunterLevel: 57,
|
|
196
|
+
tier: 'Expert',
|
|
197
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Aco', 'Teco'],
|
|
198
|
+
leagueRegions: ["Kandarin"],
|
|
199
|
+
}),
|
|
200
|
+
new HunterRumour({
|
|
201
|
+
id: 'pyre-fox',
|
|
202
|
+
creature: 'Pyre fox',
|
|
203
|
+
method: 'Deadfall',
|
|
204
|
+
locations: [new RumourLocation(AVIUM_SAVANNAH, 'https://oldschool.runescape.wiki/w/Pyre_fox')],
|
|
205
|
+
requiredHunterLevel: 57,
|
|
206
|
+
tier: 'Expert',
|
|
207
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Ornus'],
|
|
208
|
+
leagueRegions: ["Varlamore"],
|
|
209
|
+
}),
|
|
210
|
+
new HunterRumour({
|
|
211
|
+
id: 'red-salamander',
|
|
212
|
+
creature: 'Red salamander',
|
|
213
|
+
method: 'Net trap',
|
|
214
|
+
locations: [new RumourLocation('Ourania Hunter area', 'https://oldschool.runescape.wiki/w/Red_salamander'), new RumourLocation('Charred Island', 'https://oldschool.runescape.wiki/w/Red_salamander')],
|
|
215
|
+
requiredHunterLevel: 59,
|
|
216
|
+
tier: 'Master',
|
|
217
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Aco', 'Teco', 'Wolf'],
|
|
218
|
+
leagueRegions: ["Kandarin"],
|
|
219
|
+
}),
|
|
220
|
+
new HunterRumour({
|
|
221
|
+
id: 'red-chinchompa',
|
|
222
|
+
creature: 'Red chinchompa',
|
|
223
|
+
method: 'Box trap',
|
|
224
|
+
locations: [new RumourLocation('Chinchompa Island', 'https://oldschool.runescape.wiki/w/Red_chinchompa'), new RumourLocation(FELDIP_HUNTER_AREA, 'https://oldschool.runescape.wiki/w/Red_chinchompa'), new RumourLocation(THE_GREAT_CONCH, 'https://oldschool.runescape.wiki/w/Red_chinchompa'), new RumourLocation('Gwenith Hunter area', 'https://oldschool.runescape.wiki/w/Red_chinchompa'), new RumourLocation('Red chinchompa hunting ground', 'https://oldschool.runescape.wiki/w/Red_chinchompa'), new RumourLocation(TLATI_RAINFOREST, 'https://oldschool.runescape.wiki/w/Red_chinchompa')],
|
|
225
|
+
requiredHunterLevel: 63,
|
|
226
|
+
tier: 'Master',
|
|
227
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Ornus', 'Aco', 'Teco', 'Wolf'],
|
|
228
|
+
leagueRegions: ["Kandarin", "Tirannwn", "Varlamore"],
|
|
229
|
+
}),
|
|
230
|
+
new HunterRumour({
|
|
231
|
+
id: 'dashing-kebbit',
|
|
232
|
+
creature: 'Dashing kebbit',
|
|
233
|
+
method: 'Falconry',
|
|
234
|
+
locations: [new RumourLocation(PISCATORIS_FALCONRY_AREA, 'https://oldschool.runescape.wiki/w/Dashing_kebbit')],
|
|
235
|
+
requiredHunterLevel: 69,
|
|
236
|
+
tier: 'Master',
|
|
237
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Aco', 'Teco', 'Wolf'],
|
|
238
|
+
leagueRegions: ["Kandarin"],
|
|
239
|
+
}),
|
|
240
|
+
new HunterRumour({
|
|
241
|
+
id: 'sunlight-antelope',
|
|
242
|
+
creature: 'Sunlight antelope',
|
|
243
|
+
method: 'Spiked pit',
|
|
244
|
+
locations: [new RumourLocation(AVIUM_SAVANNAH, 'https://oldschool.runescape.wiki/w/Sunlight_antelope')],
|
|
245
|
+
requiredHunterLevel: 72,
|
|
246
|
+
tier: 'Master',
|
|
247
|
+
masterNames: ['Aco', 'Teco', 'Wolf'],
|
|
248
|
+
leagueRegions: ["Varlamore"],
|
|
249
|
+
}),
|
|
250
|
+
new HunterRumour({
|
|
251
|
+
id: 'sunlight-moth',
|
|
252
|
+
creature: 'Sunlight moth',
|
|
253
|
+
method: 'Butterfly net',
|
|
254
|
+
locations: [new RumourLocation(AVIUM_SAVANNAH, 'https://oldschool.runescape.wiki/w/Sunlight_moth'), new RumourLocation(NEYPOTZLI, 'https://oldschool.runescape.wiki/w/Sunlight_moth')],
|
|
255
|
+
requiredHunterLevel: 75,
|
|
256
|
+
tier: 'Master',
|
|
257
|
+
masterNames: [HunterGuildMasterName.GILMAN, 'Cervus', 'Teco'],
|
|
258
|
+
leagueRegions: ["Varlamore"],
|
|
259
|
+
}),
|
|
260
|
+
new HunterRumour({
|
|
261
|
+
id: 'tecu-salamander',
|
|
262
|
+
creature: 'Tecu salamander',
|
|
263
|
+
method: 'Net trap',
|
|
264
|
+
locations: [new RumourLocation("Ralos' Rise", 'https://oldschool.runescape.wiki/w/Tecu_salamander')],
|
|
265
|
+
requiredHunterLevel: 79,
|
|
266
|
+
tier: 'Master',
|
|
267
|
+
masterNames: ['Aco', 'Wolf'],
|
|
268
|
+
leagueRegions: ["Varlamore"],
|
|
269
|
+
}),
|
|
270
|
+
new HunterRumour({
|
|
271
|
+
id: 'herbiboar',
|
|
272
|
+
creature: 'Herbiboar',
|
|
273
|
+
method: 'Tracking',
|
|
274
|
+
locations: [new RumourLocation('Mushroom Forest on Fossil Island', 'https://oldschool.runescape.wiki/w/Herbiboar')],
|
|
275
|
+
requiredHunterLevel: 80,
|
|
276
|
+
tier: 'Master',
|
|
277
|
+
masterNames: ['Teco', 'Wolf'],
|
|
278
|
+
questRequirements: ['Bone Voyage'],
|
|
279
|
+
notes: 'Also requires Herblore 31',
|
|
280
|
+
leagueRegions: ["Misthalin"],
|
|
281
|
+
}),
|
|
282
|
+
new HunterRumour({
|
|
283
|
+
id: 'moonlight-moth',
|
|
284
|
+
creature: 'Moonlight moth',
|
|
285
|
+
method: 'Butterfly net',
|
|
286
|
+
locations: [new RumourLocation(THE_BURROW, 'https://oldschool.runescape.wiki/w/Moonlight_moth'), new RumourLocation(NEYPOTZLI, 'https://oldschool.runescape.wiki/w/Moonlight_moth'), new RumourLocation('Ruins of Tapoyauik', 'https://oldschool.runescape.wiki/w/Moonlight_moth'), new RumourLocation('Tonali Cavern', 'https://oldschool.runescape.wiki/w/Moonlight_moth')],
|
|
287
|
+
requiredHunterLevel: 85,
|
|
288
|
+
tier: 'Master',
|
|
289
|
+
masterNames: ['Aco', 'Wolf'],
|
|
290
|
+
leagueRegions: ["Varlamore"],
|
|
291
|
+
}),
|
|
292
|
+
new HunterRumour({
|
|
293
|
+
id: 'moonlight-antelope',
|
|
294
|
+
creature: 'Moonlight antelope',
|
|
295
|
+
method: 'Spiked pit',
|
|
296
|
+
locations: [new RumourLocation(THE_BURROW, 'https://oldschool.runescape.wiki/w/Moonlight_antelope')],
|
|
297
|
+
requiredHunterLevel: 91,
|
|
298
|
+
tier: 'Master',
|
|
299
|
+
masterNames: ['Wolf'],
|
|
300
|
+
questRequirements: ['At First Light'],
|
|
301
|
+
leagueRegions: ["Varlamore"],
|
|
302
|
+
}),
|
|
303
|
+
];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { HunterRumourAssignment } from './types';
|
|
2
|
+
import { HunterRumour } from './HunterRumour';
|
|
3
|
+
import { HunterGuildMaster } from './HunterGuildMaster';
|
|
4
|
+
/**
|
|
5
|
+
* The Hunter Guild module encapsulates all data and logic related to the Hunter Guild, including its masters, rumours, and player progress. It provides methods to retrieve masters and rumours, determine eligibility, and assign rumours to players based on their level, completed quests, and current progress.
|
|
6
|
+
* Note: The rumours are defined in a separate module to avoid circular dependencies, as HunterRumour references HunterGuildMaster and vice versa.
|
|
7
|
+
*/
|
|
8
|
+
export declare class HunterGuild {
|
|
9
|
+
wikiUrl: string;
|
|
10
|
+
private gilman;
|
|
11
|
+
private cervus;
|
|
12
|
+
private ornus;
|
|
13
|
+
private aco;
|
|
14
|
+
private teco;
|
|
15
|
+
private wolf;
|
|
16
|
+
private completedQuests;
|
|
17
|
+
constructor(completedQuests?: string[]);
|
|
18
|
+
get Gilman(): HunterGuildMaster;
|
|
19
|
+
get Cervus(): HunterGuildMaster;
|
|
20
|
+
get Ornus(): HunterGuildMaster;
|
|
21
|
+
get Aco(): HunterGuildMaster;
|
|
22
|
+
get Teco(): HunterGuildMaster;
|
|
23
|
+
get Wolf(): HunterGuildMaster;
|
|
24
|
+
getMasterByName(masterName: string): HunterGuildMaster | undefined;
|
|
25
|
+
getAllMasters(): HunterGuildMaster[];
|
|
26
|
+
getRumourById(rumourId: string): HunterRumour | undefined;
|
|
27
|
+
doesAnyMasterHaveRumour(rumourId: string): boolean;
|
|
28
|
+
setMasterCurrentRumour(masterName: string, rumourId: string): void;
|
|
29
|
+
assignRumourToMaster(masterName: string, rumourId: string): void;
|
|
30
|
+
getEligibleRumours(masterName: string, hunterLevel: number, completedQuests?: string[]): HunterRumour[];
|
|
31
|
+
assignRumour(masterName: string, hunterLevel: number, completedQuests?: string[], randomizer?: () => number): HunterRumourAssignment | null;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=HunterGuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HunterGuild.d.ts","sourceRoot":"","sources":["../../../../../source/runescape/model/guilds/hunter/HunterGuild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAgB/E;;;GAGG;AACH,qBAAa,WAAW;IACf,OAAO,SAA2C;IAEzD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,IAAI,CAAoB;IAEhC,OAAO,CAAC,eAAe,CAAgB;gBAE3B,eAAe,GAAE,MAAM,EAAO;IAY1C,IAAI,MAAM,IAAI,iBAAiB,CAE9B;IAED,IAAI,MAAM,IAAI,iBAAiB,CAE9B;IAED,IAAI,KAAK,IAAI,iBAAiB,CAE7B;IAED,IAAI,GAAG,IAAI,iBAAiB,CAE3B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAE5B;IAED,IAAI,IAAI,IAAI,iBAAiB,CAE5B;IAMD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIlE,aAAa,IAAI,iBAAiB,EAAE;IAIpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKzD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlD,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQ3D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOhE,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAO,GAC7B,YAAY,EAAE;IAejB,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAO,EAC9B,UAAU,GAAE,MAAM,MAAoB,GACrC,sBAAsB,GAAG,IAAI;CAqBjC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { HunterGuildMaster } from './HunterGuildMaster';
|
|
2
|
+
import { HUNTER_RUMOUR_REGISTRY } from './Rumours';
|
|
3
|
+
/**
|
|
4
|
+
* Defines the Hunter Guild Masters and their properties, including the minimum Hunter level required to receive rumours from them, whether they require the completion of "At First Light" to assign rumours, and the tier of rumours they provide. The HunterGuild class provides methods to retrieve masters by name, get all masters, retrieve rumours by ID, determine eligible rumours for a player based on their level and completed quests, and assign a rumour to a player while ensuring all eligibility criteria are met. The Hunter Guild module serves as the central hub for all logic related to the Hunter Guild, its masters, and the assignment of rumours to players.
|
|
5
|
+
* Note: The rumours are defined in a separate module to avoid circular dependencies, as HunterRumour references HunterGuildMaster and vice versa.
|
|
6
|
+
*/
|
|
7
|
+
const HUNTER_GUILD_MASTERS = [
|
|
8
|
+
new HunterGuildMaster('Gilman', 'Novice', 46),
|
|
9
|
+
new HunterGuildMaster('Cervus', 'Adept', 57),
|
|
10
|
+
new HunterGuildMaster('Ornus', 'Adept', 57),
|
|
11
|
+
new HunterGuildMaster('Aco', 'Expert', 72),
|
|
12
|
+
new HunterGuildMaster('Teco', 'Expert', 72),
|
|
13
|
+
new HunterGuildMaster('Wolf', 'Master', 91, true),
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* The Hunter Guild module encapsulates all data and logic related to the Hunter Guild, including its masters, rumours, and player progress. It provides methods to retrieve masters and rumours, determine eligibility, and assign rumours to players based on their level, completed quests, and current progress.
|
|
17
|
+
* Note: The rumours are defined in a separate module to avoid circular dependencies, as HunterRumour references HunterGuildMaster and vice versa.
|
|
18
|
+
*/
|
|
19
|
+
export class HunterGuild {
|
|
20
|
+
wikiUrl = 'https://runescape.wiki/w/Hunter_Guild';
|
|
21
|
+
gilman;
|
|
22
|
+
cervus;
|
|
23
|
+
ornus;
|
|
24
|
+
aco;
|
|
25
|
+
teco;
|
|
26
|
+
wolf;
|
|
27
|
+
completedQuests = [];
|
|
28
|
+
constructor(completedQuests = []) {
|
|
29
|
+
this.completedQuests = completedQuests ?? [];
|
|
30
|
+
this.gilman = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Gilman');
|
|
31
|
+
this.cervus = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Cervus');
|
|
32
|
+
this.ornus = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Ornus');
|
|
33
|
+
this.aco = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Aco');
|
|
34
|
+
this.teco = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Teco');
|
|
35
|
+
this.wolf = HUNTER_GUILD_MASTERS.find((master) => master.name === 'Wolf');
|
|
36
|
+
}
|
|
37
|
+
/* Getters Start */
|
|
38
|
+
get Gilman() {
|
|
39
|
+
return this.gilman;
|
|
40
|
+
}
|
|
41
|
+
get Cervus() {
|
|
42
|
+
return this.cervus;
|
|
43
|
+
}
|
|
44
|
+
get Ornus() {
|
|
45
|
+
return this.ornus;
|
|
46
|
+
}
|
|
47
|
+
get Aco() {
|
|
48
|
+
return this.aco;
|
|
49
|
+
}
|
|
50
|
+
get Teco() {
|
|
51
|
+
return this.teco;
|
|
52
|
+
}
|
|
53
|
+
get Wolf() {
|
|
54
|
+
return this.wolf;
|
|
55
|
+
}
|
|
56
|
+
/* Getters end */
|
|
57
|
+
getMasterByName(masterName) {
|
|
58
|
+
return HUNTER_GUILD_MASTERS.find((master) => master.name === masterName);
|
|
59
|
+
}
|
|
60
|
+
getAllMasters() {
|
|
61
|
+
return [...HUNTER_GUILD_MASTERS];
|
|
62
|
+
}
|
|
63
|
+
getRumourById(rumourId) {
|
|
64
|
+
return HUNTER_RUMOUR_REGISTRY.find((rumour) => rumour.id === rumourId);
|
|
65
|
+
}
|
|
66
|
+
doesAnyMasterHaveRumour(rumourId) {
|
|
67
|
+
return HUNTER_GUILD_MASTERS.some((master) => master.currentRumourId === rumourId);
|
|
68
|
+
}
|
|
69
|
+
setMasterCurrentRumour(masterName, rumourId) {
|
|
70
|
+
const master = this.getMasterByName(masterName);
|
|
71
|
+
if (master) {
|
|
72
|
+
master.currentRumourId = rumourId;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
assignRumourToMaster(masterName, rumourId) {
|
|
76
|
+
const master = this.getMasterByName(masterName);
|
|
77
|
+
if (master) {
|
|
78
|
+
master.assignRumour(rumourId);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
getEligibleRumours(masterName, hunterLevel, completedQuests = []) {
|
|
82
|
+
const master = this.getMasterByName(masterName);
|
|
83
|
+
if (!master || !master.canAssignRumour(hunterLevel, completedQuests)) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
return HUNTER_RUMOUR_REGISTRY.filter((rumour) => rumour.canBeAssignedByMaster(masterName) &&
|
|
87
|
+
rumour.isEligible(hunterLevel, completedQuests) &&
|
|
88
|
+
!this.doesAnyMasterHaveRumour(rumour.id));
|
|
89
|
+
}
|
|
90
|
+
assignRumour(masterName, hunterLevel, completedQuests = [], randomizer = Math.random) {
|
|
91
|
+
const eligibleRumours = this.getEligibleRumours(masterName, hunterLevel, completedQuests);
|
|
92
|
+
if (eligibleRumours.length === 0) {
|
|
93
|
+
// cannot assign a rumour if there are no eligible rumours available for the master, which can happen if the player does not meet the requirements for any of the rumours or if all eligible rumours are currently assigned to other masters. In this case, the method returns null to indicate that no assignment could be made.
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const index = Math.floor(randomizer() * eligibleRumours.length);
|
|
97
|
+
const selectedRumour = eligibleRumours[index];
|
|
98
|
+
const assignment = {
|
|
99
|
+
id: `${masterName}-${selectedRumour.id}-${Date.now()}`,
|
|
100
|
+
masterName,
|
|
101
|
+
rumourId: selectedRumour.id,
|
|
102
|
+
assignedAt: new Date(),
|
|
103
|
+
};
|
|
104
|
+
return assignment;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { HunterRumour } from './HunterRumour';
|
|
2
|
+
import { HunterRumourTier } from './types';
|
|
3
|
+
export declare const HunterGuildMasterName: {
|
|
4
|
+
GILMAN: {
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
CERVUS: {
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
ORNUS: {
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
ACO: {
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
TECO: {
|
|
17
|
+
name: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Represents a Hunter Guild Master, who can assign rumours to players based on their
|
|
22
|
+
* Hunter level,
|
|
23
|
+
* completed quests, and the tier of the rumour.
|
|
24
|
+
* Each master has specific requirements for assigning rumours,
|
|
25
|
+
* and some may require the completion of certain quests (e.g., "At First Light")
|
|
26
|
+
* to unlock higher-tier rumours.
|
|
27
|
+
* The HunterGuildMaster class encapsulates the properties and logic related to each master,
|
|
28
|
+
* allowing for easy retrieval and eligibility checks when assigning rumours to players.
|
|
29
|
+
*/
|
|
30
|
+
export declare class HunterGuildMaster {
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly tier: HunterRumourTier;
|
|
33
|
+
readonly minimumLevel: number;
|
|
34
|
+
readonly requiresAtFirstLight: boolean;
|
|
35
|
+
currentRumourId: string;
|
|
36
|
+
constructor(name: string, tier: HunterRumourTier, minimumLevel: number, requiresAtFirstLight?: boolean);
|
|
37
|
+
canAssignRumour(hunterLevel: number, completedQuests?: string[]): boolean;
|
|
38
|
+
get wikiUrl(): string;
|
|
39
|
+
get isAssigned(): boolean;
|
|
40
|
+
assignRumour(rumourId: string): void;
|
|
41
|
+
get rumoursThatCanBeAssigned(): HunterRumour[];
|
|
42
|
+
/**
|
|
43
|
+
* When having a master assign a Hunter Rumour, it needs to check all the current assigned rumours from the other masters;
|
|
44
|
+
* It cannot give a rumour that is already assigned from another master, even if it is eligible for assignment.
|
|
45
|
+
* This method takes in the list of eligible rumours for this master and the list of currently assigned rumours from the other masters,
|
|
46
|
+
* and returns a random rumour ID that can be assigned to this master without conflicts.
|
|
47
|
+
* @param eligibleRumours
|
|
48
|
+
* @param otherMasterRumours
|
|
49
|
+
*/
|
|
50
|
+
getRandomRumour(eligibleRumours: HunterRumour[], otherMasterRumours: HunterRumour[]): HunterRumour;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=HunterGuildMaster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HunterGuildMaster.d.ts","sourceRoot":"","sources":["../../../../../source/runescape/model/guilds/hunter/HunterGuildMaster.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;CAMjC,CAAA;AAGD;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,MAAM,EACpB,oBAAoB,UAAQ;IAUvB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,OAAO;IAUpF,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAGD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC,IAAI,wBAAwB,IAAI,YAAY,EAAE,CAE7C;IAGD;;;;;;;OAOG;IACI,eAAe,CAAC,eAAe,EAAE,YAAY,EAAE,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,YAAY;CAe1G"}
|