osrs-tools 2.10.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -341
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/runescape/model/slayer/core/Mortifier.d.ts +48 -0
- package/dist/runescape/model/slayer/core/Mortifier.js +100 -0
- package/dist/runescape/model/slayer/core/MortimerSlayerMaster.d.ts +71 -0
- package/dist/runescape/model/slayer/core/MortimerSlayerMaster.js +98 -0
- package/dist/runescape/model/slayer/core/SlayerMaster.d.ts +6 -1
- package/dist/runescape/model/slayer/core/SlayerMaster.js +10 -1
- package/dist/runescape/model/slayer/core/index.d.ts +4 -0
- package/dist/runescape/model/slayer/core/index.js +2 -0
- package/dist/runescape/model/slayer/core/types.d.ts +2 -0
- package/dist/runescape/model/slayer/index.d.ts +3 -3
- package/dist/runescape/model/slayer/index.js +2 -2
- package/dist/runescape/model/slayer/masters/Chaeldar.js +1 -0
- package/dist/runescape/model/slayer/masters/Duradel.js +1 -0
- package/dist/runescape/model/slayer/masters/KonarQuoMaten.js +1 -0
- package/dist/runescape/model/slayer/masters/Krystilia.js +1 -0
- package/dist/runescape/model/slayer/masters/Mazchna.js +1 -0
- package/dist/runescape/model/slayer/masters/Mortimer.d.ts +21 -0
- package/dist/runescape/model/slayer/masters/Mortimer.js +37 -0
- package/dist/runescape/model/slayer/masters/Nieve.js +1 -0
- package/dist/runescape/model/slayer/masters/Spria.js +1 -0
- package/dist/runescape/model/slayer/masters/Turael.js +1 -0
- package/dist/runescape/model/slayer/masters/Vannaka.js +1 -0
- package/dist/runescape/model/slayer/masters/index.d.ts +2 -0
- package/dist/runescape/model/slayer/masters/index.js +2 -0
- package/dist/runescape/model/slayer/masters/registry.d.ts +2 -1
- package/dist/runescape/model/slayer/masters/registry.js +1 -0
- package/dist/runescape/model/slayer/masters.d.ts +1 -1
- package/dist/runescape/model/slayer/masters.js +1 -1
- package/dist/runescape/model/slayer/task/MortimerTasks.d.ts +14 -0
- package/dist/runescape/model/slayer/task/MortimerTasks.js +227 -0
- package/dist/runescape/model/slayer/tasks/index.d.ts +1 -0
- package/dist/runescape/model/slayer/tasks/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Mortifier } from './Mortifier';
|
|
2
|
+
import { SlayerMaster } from './SlayerMaster';
|
|
3
|
+
import { Task } from './Task';
|
|
4
|
+
import { SlayerMasterConfig } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for Mortimer, extending the standard SlayerMaster config with the
|
|
7
|
+
* quirks that make him behave differently to every other Slayer Master.
|
|
8
|
+
* Reference: https://oldschool.runescape.wiki/w/Mortimer
|
|
9
|
+
*/
|
|
10
|
+
export interface MortimerSlayerMasterConfig extends SlayerMasterConfig {
|
|
11
|
+
/** Slayer points cost to skip a task offer (Mortimer: 100, vs. the usual 30). */
|
|
12
|
+
skipCost?: number;
|
|
13
|
+
/** Number of block slots Mortimer offers (Mortimer: 2, vs. the usual 6/7). */
|
|
14
|
+
blockSlots?: number;
|
|
15
|
+
/** Slayer points cost per block slot (Mortimer: 120). */
|
|
16
|
+
blockSlotCost?: number;
|
|
17
|
+
/** Number of task choices offered before the "Third Task Choice" Mortifier is unlocked. */
|
|
18
|
+
baseTaskChoiceCount?: number;
|
|
19
|
+
/** Number of task choices offered once the "Third Task Choice" Mortifier is unlocked. */
|
|
20
|
+
extendedTaskChoiceCount?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Mortimer - a planned Slayer Master for the upcoming Wyrmscraig island.
|
|
24
|
+
*
|
|
25
|
+
* Unlike other masters, Mortimer:
|
|
26
|
+
* - Offers multiple task choices per visit (2, or 3 after 50 completed tasks) rather than
|
|
27
|
+
* assigning a single task outright.
|
|
28
|
+
* - Only assigns monsters that have a superior variant.
|
|
29
|
+
* - Can assign Venators directly.
|
|
30
|
+
* - Uses the Mortifier system in place of standard Slayer point rewards as the main incentive.
|
|
31
|
+
* - Has a significantly higher skip cost and far fewer, more expensive block slots.
|
|
32
|
+
*
|
|
33
|
+
* NOTE: This content had not been released at time of writing (Player Designed Island
|
|
34
|
+
* Competition submission); values are subject to change.
|
|
35
|
+
*/
|
|
36
|
+
declare class MortimerSlayerMaster extends SlayerMaster {
|
|
37
|
+
skipCost: number;
|
|
38
|
+
blockSlots: number;
|
|
39
|
+
blockSlotCost: number;
|
|
40
|
+
baseTaskChoiceCount: number;
|
|
41
|
+
extendedTaskChoiceCount: number;
|
|
42
|
+
constructor(config: MortimerSlayerMasterConfig);
|
|
43
|
+
/**
|
|
44
|
+
* All creatures Mortimer assigns have superior variants - this is his defining trait.
|
|
45
|
+
*/
|
|
46
|
+
hasSuperiorVariants(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Mortimer is the only Slayer Master who can assign Venators directly.
|
|
49
|
+
*/
|
|
50
|
+
assignsVenatorsDirectly(): boolean;
|
|
51
|
+
getSkipCost(): number;
|
|
52
|
+
getBlockSlots(): number;
|
|
53
|
+
getBlockSlotCost(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Get the Mortifiers currently unlocked for a player, based on tasks completed with Mortimer.
|
|
56
|
+
*/
|
|
57
|
+
getAvailableMortifiers(completedTasks: number): Mortifier[];
|
|
58
|
+
/**
|
|
59
|
+
* Number of task choices offered on a given visit: 2 by default, 3 once the
|
|
60
|
+
* "Third Task Choice" Mortifier is unlocked at 50 completed tasks.
|
|
61
|
+
*/
|
|
62
|
+
getTaskChoiceCount(completedTasks: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* Get a set of distinct, weighted-random task choices for a Mortimer visit.
|
|
65
|
+
* The number of choices scales with completedTasks (see getTaskChoiceCount()).
|
|
66
|
+
* Mortimer never offers the same task twice in a single set of choices.
|
|
67
|
+
* @returns {Task[]} The offered tasks. May be shorter than requested if there aren't enough distinct unblocked tasks.
|
|
68
|
+
*/
|
|
69
|
+
getTaskChoices(completedTasks?: number): Task[];
|
|
70
|
+
}
|
|
71
|
+
export { MortimerSlayerMaster };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { getAvailableMortifiers } from './Mortifier';
|
|
2
|
+
import { SlayerMaster } from './SlayerMaster';
|
|
3
|
+
/**
|
|
4
|
+
* Mortimer - a planned Slayer Master for the upcoming Wyrmscraig island.
|
|
5
|
+
*
|
|
6
|
+
* Unlike other masters, Mortimer:
|
|
7
|
+
* - Offers multiple task choices per visit (2, or 3 after 50 completed tasks) rather than
|
|
8
|
+
* assigning a single task outright.
|
|
9
|
+
* - Only assigns monsters that have a superior variant.
|
|
10
|
+
* - Can assign Venators directly.
|
|
11
|
+
* - Uses the Mortifier system in place of standard Slayer point rewards as the main incentive.
|
|
12
|
+
* - Has a significantly higher skip cost and far fewer, more expensive block slots.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: This content had not been released at time of writing (Player Designed Island
|
|
15
|
+
* Competition submission); values are subject to change.
|
|
16
|
+
*/
|
|
17
|
+
class MortimerSlayerMaster extends SlayerMaster {
|
|
18
|
+
skipCost;
|
|
19
|
+
blockSlots;
|
|
20
|
+
blockSlotCost;
|
|
21
|
+
baseTaskChoiceCount;
|
|
22
|
+
extendedTaskChoiceCount;
|
|
23
|
+
constructor(config) {
|
|
24
|
+
super(config);
|
|
25
|
+
this.skipCost = config.skipCost ?? 100;
|
|
26
|
+
this.blockSlots = config.blockSlots ?? 2;
|
|
27
|
+
this.blockSlotCost = config.blockSlotCost ?? 120;
|
|
28
|
+
this.baseTaskChoiceCount = config.baseTaskChoiceCount ?? 2;
|
|
29
|
+
this.extendedTaskChoiceCount = config.extendedTaskChoiceCount ?? 3;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* All creatures Mortimer assigns have superior variants - this is his defining trait.
|
|
33
|
+
*/
|
|
34
|
+
hasSuperiorVariants() {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Mortimer is the only Slayer Master who can assign Venators directly.
|
|
39
|
+
*/
|
|
40
|
+
assignsVenatorsDirectly() {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
getSkipCost() {
|
|
44
|
+
return this.skipCost;
|
|
45
|
+
}
|
|
46
|
+
getBlockSlots() {
|
|
47
|
+
return this.blockSlots;
|
|
48
|
+
}
|
|
49
|
+
getBlockSlotCost() {
|
|
50
|
+
return this.blockSlotCost;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the Mortifiers currently unlocked for a player, based on tasks completed with Mortimer.
|
|
54
|
+
*/
|
|
55
|
+
getAvailableMortifiers(completedTasks) {
|
|
56
|
+
return getAvailableMortifiers(completedTasks);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Number of task choices offered on a given visit: 2 by default, 3 once the
|
|
60
|
+
* "Third Task Choice" Mortifier is unlocked at 50 completed tasks.
|
|
61
|
+
*/
|
|
62
|
+
getTaskChoiceCount(completedTasks) {
|
|
63
|
+
const thirdChoiceUnlocked = this.getAvailableMortifiers(completedTasks).some(mortifier => mortifier.name === 'Third Task Choice');
|
|
64
|
+
return thirdChoiceUnlocked ? this.extendedTaskChoiceCount : this.baseTaskChoiceCount;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a set of distinct, weighted-random task choices for a Mortimer visit.
|
|
68
|
+
* The number of choices scales with completedTasks (see getTaskChoiceCount()).
|
|
69
|
+
* Mortimer never offers the same task twice in a single set of choices.
|
|
70
|
+
* @returns {Task[]} The offered tasks. May be shorter than requested if there aren't enough distinct unblocked tasks.
|
|
71
|
+
*/
|
|
72
|
+
getTaskChoices(completedTasks = 0) {
|
|
73
|
+
const choiceCount = this.getTaskChoiceCount(completedTasks);
|
|
74
|
+
const remainingTasks = this.getAvailableTasks().slice();
|
|
75
|
+
const choices = [];
|
|
76
|
+
while (choices.length < choiceCount && remainingTasks.length > 0) {
|
|
77
|
+
const totalWeight = remainingTasks.reduce((total, task) => total + (task.weight || 0), 0);
|
|
78
|
+
if (totalWeight <= 0)
|
|
79
|
+
break;
|
|
80
|
+
const randomWeight = Math.random() * totalWeight;
|
|
81
|
+
let cumulativeWeight = 0;
|
|
82
|
+
let selectedIndex = -1;
|
|
83
|
+
for (let i = 0; i < remainingTasks.length; i++) {
|
|
84
|
+
cumulativeWeight += remainingTasks[i].weight || 0;
|
|
85
|
+
if (randomWeight <= cumulativeWeight) {
|
|
86
|
+
selectedIndex = i;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (selectedIndex === -1)
|
|
91
|
+
break;
|
|
92
|
+
choices.push(remainingTasks[selectedIndex]);
|
|
93
|
+
remainingTasks.splice(selectedIndex, 1);
|
|
94
|
+
}
|
|
95
|
+
return choices;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export { MortimerSlayerMaster };
|
|
@@ -15,11 +15,12 @@ declare class SlayerMaster {
|
|
|
15
15
|
minimumCombatLevel: number;
|
|
16
16
|
tasks: Task[];
|
|
17
17
|
wikiUrl: string;
|
|
18
|
+
imageUrl: string;
|
|
18
19
|
taskPoints: Record<number, number>;
|
|
19
20
|
eliteDiaryTaskPoints?: Record<number, number>;
|
|
20
21
|
blockedTasks: Set<string>;
|
|
21
22
|
constructor(options: SlayerMasterConfig);
|
|
22
|
-
constructor(name: string, tasks: Task[], location: string, levelRequirement: number, url: string, taskPoints: Record<number, number>, eliteDiaryTaskPoints?: Record<number, number
|
|
23
|
+
constructor(name: string, tasks: Task[], location: string, levelRequirement: number, url: string, taskPoints: Record<number, number>, eliteDiaryTaskPoints?: Record<number, number>, imageUrl?: string);
|
|
23
24
|
/**
|
|
24
25
|
* Calculate the total weight of all tasks assigned to this Slayer Master.
|
|
25
26
|
* @returns {number} The total weight of all tasks assigned to this Slayer Master.
|
|
@@ -43,6 +44,10 @@ declare class SlayerMaster {
|
|
|
43
44
|
* Get the wiki URL of the Slayer Master
|
|
44
45
|
*/
|
|
45
46
|
getWikiUrl(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Get the URL of the Slayer Master's portrait image
|
|
49
|
+
*/
|
|
50
|
+
getImageUrl(): string;
|
|
46
51
|
/**
|
|
47
52
|
* Get a random task based on the weighting system of the tasks.
|
|
48
53
|
* Tasks with higher weights have a higher chance of being selected.
|
|
@@ -13,11 +13,12 @@ class SlayerMaster {
|
|
|
13
13
|
minimumCombatLevel = 0; // Level requirement to access this Slayer Master (optional, can be set later if needed)
|
|
14
14
|
tasks; // Array of tasks assigned to this Slayer Master. This holds the actual tasks that players can be assigned to kill.
|
|
15
15
|
wikiUrl = ''; // URL for the Slayer Master (optional, can be set later if needed)
|
|
16
|
+
imageUrl = ''; // URL of the Slayer Master's portrait image, sourced from the OSRS Wiki (optional, can be set later if needed)
|
|
16
17
|
taskPoints; // Mapping of task intervals to points
|
|
17
18
|
eliteDiaryTaskPoints; // Mapping of task intervals to points
|
|
18
19
|
blockedTasks = new Set(); // Names (lowercased) of tasks this master will not assign
|
|
19
20
|
// Constructor implementation
|
|
20
|
-
constructor(nameOrOptions, tasks, location, levelRequirement, url, taskPoints, eliteDiaryTaskPoints) {
|
|
21
|
+
constructor(nameOrOptions, tasks, location, levelRequirement, url, taskPoints, eliteDiaryTaskPoints, imageUrl) {
|
|
21
22
|
// Handle options object pattern (modern API)
|
|
22
23
|
if (typeof nameOrOptions === 'object' && !Array.isArray(nameOrOptions)) {
|
|
23
24
|
const options = nameOrOptions;
|
|
@@ -26,6 +27,7 @@ class SlayerMaster {
|
|
|
26
27
|
this.location = options.location || '';
|
|
27
28
|
this.minimumCombatLevel = options.minimumCombatLevel || 0;
|
|
28
29
|
this.wikiUrl = options.wikiUrl || '';
|
|
30
|
+
this.imageUrl = options.imageUrl || '';
|
|
29
31
|
this.taskPoints = options.pointsTable || {};
|
|
30
32
|
this.eliteDiaryTaskPoints = options.eliteDiaryTaskPoints;
|
|
31
33
|
}
|
|
@@ -36,6 +38,7 @@ class SlayerMaster {
|
|
|
36
38
|
this.location = location || '';
|
|
37
39
|
this.minimumCombatLevel = levelRequirement || 0;
|
|
38
40
|
this.wikiUrl = url || '';
|
|
41
|
+
this.imageUrl = imageUrl || '';
|
|
39
42
|
this.taskPoints = taskPoints || {};
|
|
40
43
|
this.eliteDiaryTaskPoints = eliteDiaryTaskPoints;
|
|
41
44
|
}
|
|
@@ -83,6 +86,12 @@ class SlayerMaster {
|
|
|
83
86
|
getWikiUrl() {
|
|
84
87
|
return this.wikiUrl;
|
|
85
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the URL of the Slayer Master's portrait image
|
|
91
|
+
*/
|
|
92
|
+
getImageUrl() {
|
|
93
|
+
return this.imageUrl;
|
|
94
|
+
}
|
|
86
95
|
/**
|
|
87
96
|
* Get a random task based on the weighting system of the tasks.
|
|
88
97
|
* Tasks with higher weights have a higher chance of being selected.
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
* Exports the fundamental classes and types for the Slayer system
|
|
4
4
|
*/
|
|
5
5
|
export { Assignment } from './Assignment';
|
|
6
|
+
export type { MortifierConfig } from './Mortifier';
|
|
7
|
+
export { getAvailableMortifiers, getMortifierByName, Mortifier, MORTIFIERS } from './Mortifier';
|
|
8
|
+
export type { MortimerSlayerMasterConfig } from './MortimerSlayerMaster';
|
|
9
|
+
export { MortimerSlayerMaster } from './MortimerSlayerMaster';
|
|
6
10
|
export { SlayerMaster } from './SlayerMaster';
|
|
7
11
|
export type { TaskJson } from './Task';
|
|
8
12
|
export { Task } from './Task';
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Exports the fundamental classes and types for the Slayer system
|
|
4
4
|
*/
|
|
5
5
|
export { Assignment } from './Assignment';
|
|
6
|
+
export { getAvailableMortifiers, getMortifierByName, Mortifier, MORTIFIERS } from './Mortifier';
|
|
7
|
+
export { MortimerSlayerMaster } from './MortimerSlayerMaster';
|
|
6
8
|
export { SlayerMaster } from './SlayerMaster';
|
|
7
9
|
export { Task } from './Task';
|
|
8
10
|
export { POINTS_TABLE, SlayerBoss, SlayerLocation, TASK_DEFAULTS } from './types';
|
|
@@ -101,6 +101,8 @@ export interface SlayerMasterConfig {
|
|
|
101
101
|
name: string;
|
|
102
102
|
location: string;
|
|
103
103
|
wikiUrl: string;
|
|
104
|
+
/** URL of the master's portrait image, sourced from the OSRS Wiki. */
|
|
105
|
+
imageUrl?: string;
|
|
104
106
|
minimumCombatLevel: number;
|
|
105
107
|
tasks: any[];
|
|
106
108
|
pointsTable: Record<number, number>;
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Complete slayer system including masters, tasks, rewards, and utilities
|
|
4
4
|
* Reference: https://oldschool.runescape.wiki/w/Slayer
|
|
5
5
|
*/
|
|
6
|
-
export type { SlayerMasterConfig, TaskDefinition, TaskOptions, TaskQuantity } from './core';
|
|
7
|
-
export { Assignment, SlayerMaster, Task } from './core';
|
|
6
|
+
export type { MortifierConfig, MortimerSlayerMasterConfig, SlayerMasterConfig, TaskDefinition, TaskOptions, TaskQuantity, } from './core';
|
|
7
|
+
export { Assignment, getAvailableMortifiers, getMortifierByName, Mortifier, MORTIFIERS, MortimerSlayerMaster, SlayerMaster, Task, } from './core';
|
|
8
8
|
export { POINTS_TABLE, SlayerBoss, SlayerLocation, TASK_DEFAULTS } from './core';
|
|
9
9
|
export type { SlayerMasterProgression } from './masters';
|
|
10
|
-
export { Chaeldar, Duradel, getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, KonarQuoMaten, Krystilia, Mazchna, Nieve, Spria, Turael, Vannaka, } from './masters';
|
|
10
|
+
export { Chaeldar, Duradel, getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, KonarQuoMaten, Krystilia, Mazchna, Mortimer, Nieve, Spria, Turael, Vannaka, } from './masters';
|
|
11
11
|
export { SlayerBuy, SlayerExtend, SlayerUnlock } from './rewards';
|
|
12
12
|
export { SLAYER_BUYS, SLAYER_EXTENDS, SLAYER_UNLOCKS } from './rewards';
|
|
13
13
|
export { calculateBuysCost, calculateUnlocksCost, getBuyByItem, getBuysByCostRange, getBuysByRequirement, getExtendByName, getExtendsForTask, getUnlockByName, getUnlocksByCostRange, } from './rewards';
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Complete slayer system including masters, tasks, rewards, and utilities
|
|
4
4
|
* Reference: https://oldschool.runescape.wiki/w/Slayer
|
|
5
5
|
*/
|
|
6
|
-
export { Assignment, SlayerMaster, Task } from './core';
|
|
6
|
+
export { Assignment, getAvailableMortifiers, getMortifierByName, Mortifier, MORTIFIERS, MortimerSlayerMaster, SlayerMaster, Task, } from './core';
|
|
7
7
|
export { POINTS_TABLE, SlayerBoss, SlayerLocation, TASK_DEFAULTS } from './core';
|
|
8
|
-
export { Chaeldar, Duradel, getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, KonarQuoMaten, Krystilia, Mazchna, Nieve, Spria, Turael, Vannaka, } from './masters';
|
|
8
|
+
export { Chaeldar, Duradel, getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, KonarQuoMaten, Krystilia, Mazchna, Mortimer, Nieve, Spria, Turael, Vannaka, } from './masters';
|
|
9
9
|
// ===== Rewards =====
|
|
10
10
|
export { SlayerBuy, SlayerExtend, SlayerUnlock } from './rewards';
|
|
11
11
|
export { SLAYER_BUYS, SLAYER_EXTENDS, SLAYER_UNLOCKS } from './rewards';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mortimer - Slayer Master
|
|
3
|
+
* Location: Wyrmscraig
|
|
4
|
+
* Wiki: https://oldschool.runescape.wiki/w/Mortimer
|
|
5
|
+
*
|
|
6
|
+
* NOTE: Mortimer is planned content for the upcoming Wyrmscraig island (Player Designed
|
|
7
|
+
* Island Competition, designed by ScreteMonge) and had not been released at time of writing.
|
|
8
|
+
* Values here reflect the published design and may change before/if this ships live.
|
|
9
|
+
*/
|
|
10
|
+
import { MortimerSlayerMaster } from '../core/MortimerSlayerMaster';
|
|
11
|
+
/**
|
|
12
|
+
* Mortimer - Slayer Master of Wyrmscraig
|
|
13
|
+
*
|
|
14
|
+
* Rather than a standard Slayer point table, Mortimer's primary incentive is the Mortifier
|
|
15
|
+
* system (see MortimerSlayerMaster.getAvailableMortifiers()) - though one Mortifier
|
|
16
|
+
* ("Bonus Slayer Points") does award extra Slayer points on top of a task. Every monster he
|
|
17
|
+
* assigns has a superior variant, and he offers 2 task choices per visit (3 once the "Third
|
|
18
|
+
* Task Choice" Mortifier is unlocked at 50 completed tasks), instead of assigning a single task.
|
|
19
|
+
*/
|
|
20
|
+
export declare const Mortimer: MortimerSlayerMaster;
|
|
21
|
+
export default Mortimer;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mortimer - Slayer Master
|
|
3
|
+
* Location: Wyrmscraig
|
|
4
|
+
* Wiki: https://oldschool.runescape.wiki/w/Mortimer
|
|
5
|
+
*
|
|
6
|
+
* NOTE: Mortimer is planned content for the upcoming Wyrmscraig island (Player Designed
|
|
7
|
+
* Island Competition, designed by ScreteMonge) and had not been released at time of writing.
|
|
8
|
+
* Values here reflect the published design and may change before/if this ships live.
|
|
9
|
+
*/
|
|
10
|
+
import { MortimerSlayerMaster } from '../core/MortimerSlayerMaster';
|
|
11
|
+
import { mortimerTasks } from '../task/MortimerTasks';
|
|
12
|
+
import { registerMaster } from './registry';
|
|
13
|
+
/**
|
|
14
|
+
* Mortimer - Slayer Master of Wyrmscraig
|
|
15
|
+
*
|
|
16
|
+
* Rather than a standard Slayer point table, Mortimer's primary incentive is the Mortifier
|
|
17
|
+
* system (see MortimerSlayerMaster.getAvailableMortifiers()) - though one Mortifier
|
|
18
|
+
* ("Bonus Slayer Points") does award extra Slayer points on top of a task. Every monster he
|
|
19
|
+
* assigns has a superior variant, and he offers 2 task choices per visit (3 once the "Third
|
|
20
|
+
* Task Choice" Mortifier is unlocked at 50 completed tasks), instead of assigning a single task.
|
|
21
|
+
*/
|
|
22
|
+
export const Mortimer = new MortimerSlayerMaster({
|
|
23
|
+
blockSlotCost: 120,
|
|
24
|
+
blockSlots: 2,
|
|
25
|
+
// Mortimer had not been released at time of writing; this is concept art (by Mod Jerv), not an in-game portrait.
|
|
26
|
+
imageUrl: 'https://oldschool.runescape.wiki/w/Special:FilePath/Wyrmscraig%20-%20Activities%20%26%20Lock%20In%20Poll%20(5).png',
|
|
27
|
+
location: 'Wyrmscraig',
|
|
28
|
+
minimumCombatLevel: 0,
|
|
29
|
+
name: 'Mortimer',
|
|
30
|
+
pointsTable: {},
|
|
31
|
+
skipCost: 100,
|
|
32
|
+
tasks: mortimerTasks,
|
|
33
|
+
wikiUrl: 'https://oldschool.runescape.wiki/w/Mortimer',
|
|
34
|
+
});
|
|
35
|
+
// Register in the masters registry
|
|
36
|
+
registerMaster(Mortimer);
|
|
37
|
+
export default Mortimer;
|
|
@@ -11,11 +11,13 @@ import './KonarQuoMaten';
|
|
|
11
11
|
import './Nieve';
|
|
12
12
|
import './Duradel';
|
|
13
13
|
import './Krystilia';
|
|
14
|
+
import './Mortimer';
|
|
14
15
|
export { Chaeldar } from './Chaeldar';
|
|
15
16
|
export { Duradel } from './Duradel';
|
|
16
17
|
export { KonarQuoMaten } from './KonarQuoMaten';
|
|
17
18
|
export { Krystilia } from './Krystilia';
|
|
18
19
|
export { Mazchna } from './Mazchna';
|
|
20
|
+
export { Mortimer } from './Mortimer';
|
|
19
21
|
export { Nieve } from './Nieve';
|
|
20
22
|
export { Spria } from './Spria';
|
|
21
23
|
export { Turael } from './Turael';
|
|
@@ -13,6 +13,7 @@ import './KonarQuoMaten'; // Combat 75
|
|
|
13
13
|
import './Nieve'; // Combat 85
|
|
14
14
|
import './Duradel'; // Combat 50 (but elite rewards)
|
|
15
15
|
import './Krystilia'; // Combat 1 (Wilderness)
|
|
16
|
+
import './Mortimer'; // Wyrmscraig (planned/unreleased)
|
|
16
17
|
import { initializeMastersRegistry, } from './registry';
|
|
17
18
|
// Export individual masters
|
|
18
19
|
export { Chaeldar } from './Chaeldar';
|
|
@@ -20,6 +21,7 @@ export { Duradel } from './Duradel';
|
|
|
20
21
|
export { KonarQuoMaten } from './KonarQuoMaten';
|
|
21
22
|
export { Krystilia } from './Krystilia';
|
|
22
23
|
export { Mazchna } from './Mazchna';
|
|
24
|
+
export { Mortimer } from './Mortimer';
|
|
23
25
|
export { Nieve } from './Nieve';
|
|
24
26
|
export { Spria } from './Spria';
|
|
25
27
|
export { Turael } from './Turael';
|
|
@@ -45,5 +45,6 @@ export declare enum SlayerMasterProgression {
|
|
|
45
45
|
KONAR = "Konar quo Maten",// Combat 75
|
|
46
46
|
NIEVE = "Nieve",// Combat 85
|
|
47
47
|
DURADEL = "Duradel",// Combat 50
|
|
48
|
-
KRYSTILIA = "Krystilia"
|
|
48
|
+
KRYSTILIA = "Krystilia",// Combat 1 (Wilderness)
|
|
49
|
+
MORTIMER = "Mortimer"
|
|
49
50
|
}
|
|
@@ -73,4 +73,5 @@ export var SlayerMasterProgression;
|
|
|
73
73
|
SlayerMasterProgression["NIEVE"] = "Nieve";
|
|
74
74
|
SlayerMasterProgression["DURADEL"] = "Duradel";
|
|
75
75
|
SlayerMasterProgression["KRYSTILIA"] = "Krystilia";
|
|
76
|
+
SlayerMasterProgression["MORTIMER"] = "Mortimer";
|
|
76
77
|
})(SlayerMasterProgression || (SlayerMasterProgression = {}));
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Slayer Masters Module - Barrel Export
|
|
3
3
|
* Re-exports all masters and utilities from the masters directory
|
|
4
4
|
*/
|
|
5
|
-
export { Chaeldar, Duradel, KonarQuoMaten, Krystilia, Mazchna, Nieve, Spria, Turael, Vannaka } from './masters/index';
|
|
5
|
+
export { Chaeldar, Duradel, KonarQuoMaten, Krystilia, Mazchna, Mortimer, Nieve, Spria, Turael, Vannaka, } from './masters/index';
|
|
6
6
|
export type { SlayerMasterProgression as SlayerMasterProgressionType } from './masters/registry';
|
|
7
7
|
export { getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, initializeMastersRegistry, registerMaster, SlayerMasterProgression, } from './masters/registry';
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Slayer Masters Module - Barrel Export
|
|
3
3
|
* Re-exports all masters and utilities from the masters directory
|
|
4
4
|
*/
|
|
5
|
-
export { Chaeldar, Duradel, KonarQuoMaten, Krystilia, Mazchna, Nieve, Spria, Turael, Vannaka } from './masters/index';
|
|
5
|
+
export { Chaeldar, Duradel, KonarQuoMaten, Krystilia, Mazchna, Mortimer, Nieve, Spria, Turael, Vannaka, } from './masters/index';
|
|
6
6
|
export { getAllMasters, getMasterByName, getMastersByMinimumLevel, getMastersByProgression, getRandomMasterForLevel, initializeMastersRegistry, registerMaster, SlayerMasterProgression, } from './masters/registry';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Task } from '../core/Task';
|
|
2
|
+
/**
|
|
3
|
+
* Mortimer's task list.
|
|
4
|
+
* Reference: https://oldschool.runescape.wiki/w/Mortimer
|
|
5
|
+
*
|
|
6
|
+
* Every task Mortimer assigns has a superior variant (see MortimerSlayerMaster.hasSuperiorVariants()).
|
|
7
|
+
* Quantities, extended quantities and weights below are taken directly from the Wiki's task table.
|
|
8
|
+
*
|
|
9
|
+
* Gryphons, Custodian stalkers, Venators and Aquanites are Wyrmscraig-exclusive monsters with no
|
|
10
|
+
* established Slayer level requirement at time of writing, so their `requirements` are left empty.
|
|
11
|
+
* This content was planned but not yet released; details are subject to change.
|
|
12
|
+
*/
|
|
13
|
+
declare const mortimerTasks: Task[];
|
|
14
|
+
export { mortimerTasks };
|