@dreadwood-types/types 0.1.364 → 0.1.365
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/blacksmithing.d.ts.map +1 -1
- package/dist/blacksmithing.js +4 -0
- package/dist/blacksmithing.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/marksmenRange.d.ts +219 -0
- package/dist/marksmenRange.d.ts.map +1 -0
- package/dist/marksmenRange.js +280 -0
- package/dist/marksmenRange.js.map +1 -0
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +10 -0
- package/dist/quests.js.map +1 -1
- package/dist/storyQuests.d.ts +3 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +8 -0
- package/dist/storyQuests.js.map +1 -1
- package/dist/timberErrands.d.ts +33 -0
- package/dist/timberErrands.d.ts.map +1 -0
- package/dist/timberErrands.js +192 -0
- package/dist/timberErrands.js.map +1 -0
- package/dist/timberGoods.d.ts +43 -0
- package/dist/timberGoods.d.ts.map +1 -0
- package/dist/timberGoods.js +58 -0
- package/dist/timberGoods.js.map +1 -0
- package/dist/woodwork.d.ts.map +1 -1
- package/dist/woodwork.js +11 -0
- package/dist/woodwork.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// ---- Where ---------------------------------------------------------------------------------------------------------------------------------
|
|
2
|
+
export const MARKSMEN_RANGE_NAME = 'The Marksmen Range';
|
|
3
|
+
export const MARKSMEN_MASTER_NAME = 'Range-Master Edda Fenn';
|
|
4
|
+
export const MARKSMEN_MASTER_ID = 'mrange-master';
|
|
5
|
+
/** The fence line (the yard's outside); the yard is levelled to one height with the camp's and eased three tiles into the land. */
|
|
6
|
+
export const MARKSMEN_FENCE_BOX = { minX: 108, maxX: 141, minZ: 444, maxZ: 472 };
|
|
7
|
+
export const MARKSMEN_HEIGHT = 2;
|
|
8
|
+
export const MARKSMEN_EASE = 3;
|
|
9
|
+
/** The gap in the south fence (five tiles of palisade left out; the spears' footprint closes the two outer ones, so three are walkable: x 119-121) and the cleared lane from it to the camp's north edge. */
|
|
10
|
+
export const MARKSMEN_GATE = { z: 472, minX: 118, maxX: 122 };
|
|
11
|
+
export const MARKSMEN_GATE_OPEN = { minX: 119, maxX: 121 };
|
|
12
|
+
export const MARKSMEN_LANE_IN = { minX: 118, maxX: 122, minZ: 473, maxZ: 477 };
|
|
13
|
+
/** Where a player is told to stand to start (just inside the gate). */
|
|
14
|
+
export const MARKSMEN_STAND = { x: 120, z: 470 };
|
|
15
|
+
/** Every lane is shot from this row, the targets stand 12, 18 and 22 tiles north of it. */
|
|
16
|
+
export const MARKSMEN_FIRING_Z = 468;
|
|
17
|
+
/** The Range-Master stands on the firing line between the first two lanes, facing the targets. */
|
|
18
|
+
export const MARKSMEN_MASTER_SPOT = { x: 119, z: 469, faceX: 119, faceZ: 462, leash: 1 };
|
|
19
|
+
export function inMarksmenRange(x, z, pad = 0) {
|
|
20
|
+
const b = MARKSMEN_FENCE_BOX;
|
|
21
|
+
return x >= b.minX - pad && x <= b.maxX + pad && z >= b.minZ - pad && z <= b.maxZ + pad;
|
|
22
|
+
}
|
|
23
|
+
/** Distance in tiles from the fence box (0 inside it); the backend levels the ground within a few tiles of it. */
|
|
24
|
+
export function marksmenEdgeDistance(x, z) {
|
|
25
|
+
const b = MARKSMEN_FENCE_BOX;
|
|
26
|
+
return Math.hypot(Math.max(b.minX - x, 0, x - b.maxX), Math.max(b.minZ - z, 0, z - b.maxZ));
|
|
27
|
+
}
|
|
28
|
+
/** Is this tile in the cleared lane from the camp to the gate? */
|
|
29
|
+
export function inMarksmenLaneIn(x, z) {
|
|
30
|
+
const b = MARKSMEN_LANE_IN;
|
|
31
|
+
return x >= b.minX && x <= b.maxX && z >= b.minZ && z <= b.maxZ;
|
|
32
|
+
}
|
|
33
|
+
// ---- The lanes -------------------------------------------------------------------------------------------------------------------------------
|
|
34
|
+
export const MARKSMEN_LANE_ID_PREFIX = 'mrange-lane-';
|
|
35
|
+
export const MARKSMEN_MIN_ARCHERY = 30;
|
|
36
|
+
/** One band per lane (the War Camp's pattern): the near lane stops paying at 36, the middle at 38, the far one at 40, and the farther the lane the more a beat pays. */
|
|
37
|
+
export const MARKSMEN_LANES = [
|
|
38
|
+
{ id: 'mrange-lane-1', x: 115, z: 456, fx: 115, fz: MARKSMEN_FIRING_Z, distance: 12, points: 1, base: 0.85, band: { min: 30, max: 36, xp: 11 } },
|
|
39
|
+
{ id: 'mrange-lane-2', x: 124, z: 450, fx: 124, fz: MARKSMEN_FIRING_Z, distance: 18, points: 2, base: 0.62, band: { min: 30, max: 38, xp: 13 } },
|
|
40
|
+
{ id: 'mrange-lane-3', x: 133, z: 446, fx: 133, fz: MARKSMEN_FIRING_Z, distance: 22, points: 3, base: 0.42, band: { min: 30, max: 40, xp: 15 } },
|
|
41
|
+
];
|
|
42
|
+
export function marksmenLaneAt(x, z) {
|
|
43
|
+
return MARKSMEN_LANES.find((l) => l.x === x && l.z === z);
|
|
44
|
+
}
|
|
45
|
+
export function marksmenLaneById(id) {
|
|
46
|
+
return typeof id === 'string' ? MARKSMEN_LANES.find((l) => l.id === id) : undefined;
|
|
47
|
+
}
|
|
48
|
+
export function isMarksmenLaneId(id) {
|
|
49
|
+
return !!marksmenLaneById(id);
|
|
50
|
+
}
|
|
51
|
+
/** The archery band of a lane, or null when the id is not one (the backend's archeryTargetBand reads this). */
|
|
52
|
+
export function marksmenLaneBand(id) {
|
|
53
|
+
const l = marksmenLaneById(id);
|
|
54
|
+
return l ? { ...l.band } : null;
|
|
55
|
+
}
|
|
56
|
+
// ---- The timed round ---------------------------------------------------------------------------------------------------------------------
|
|
57
|
+
/** The round runs this long from the first arrow. */
|
|
58
|
+
export const MARKSMEN_ROUND_MS = 60_000;
|
|
59
|
+
/** A round taken and never started is forgotten after this long. */
|
|
60
|
+
export const MARKSMEN_SESSION_TTL_MS = 5 * 60_000;
|
|
61
|
+
export const MARKSMEN_HIT_PER_LEVEL = 0.012;
|
|
62
|
+
export const MARKSMEN_HIT_MIN = 0.1;
|
|
63
|
+
export const MARKSMEN_HIT_MAX = 0.95;
|
|
64
|
+
/** The chance one arrow lands in a lane: the lane's base at Archery 30, a little more for each level above, clamped. */
|
|
65
|
+
export function marksmenHitChance(archery, lane) {
|
|
66
|
+
const raw = lane.base + (Math.max(1, archery) - MARKSMEN_MIN_ARCHERY) * MARKSMEN_HIT_PER_LEVEL;
|
|
67
|
+
return Math.min(MARKSMEN_HIT_MAX, Math.max(MARKSMEN_HIT_MIN, raw));
|
|
68
|
+
}
|
|
69
|
+
/** Points one arrow scores: the lane's points on a hit (roll under the chance), nothing on a miss. */
|
|
70
|
+
export function marksmenArrowScore(archery, lane, roll) {
|
|
71
|
+
return roll < marksmenHitChance(archery, lane) ? lane.points : 0;
|
|
72
|
+
}
|
|
73
|
+
export const MARKSMEN_TIERS = { gold: 48, silver: 38, bronze: 28 };
|
|
74
|
+
export function marksmenPlacing(total) {
|
|
75
|
+
if (total >= MARKSMEN_TIERS.gold)
|
|
76
|
+
return 'gold';
|
|
77
|
+
if (total >= MARKSMEN_TIERS.silver)
|
|
78
|
+
return 'silver';
|
|
79
|
+
if (total >= MARKSMEN_TIERS.bronze)
|
|
80
|
+
return 'bronze';
|
|
81
|
+
return 'none';
|
|
82
|
+
}
|
|
83
|
+
export const MARKSMEN_PRIZES = {
|
|
84
|
+
gold: { coins: 120, archeryXp: 420, explorerXp: 140 },
|
|
85
|
+
silver: { coins: 80, archeryXp: 280, explorerXp: 80 },
|
|
86
|
+
bronze: { coins: 50, archeryXp: 160, explorerXp: 0 },
|
|
87
|
+
none: { coins: 10, archeryXp: 40, explorerXp: 0 },
|
|
88
|
+
};
|
|
89
|
+
/** A placing pays once a window per player; another round is always free but pays nothing more in the window. */
|
|
90
|
+
export const MARKSMEN_PRIZE_WINDOW_MS = 60 * 60_000;
|
|
91
|
+
// ---- The scoreboard --------------------------------------------------------------------------------------------------------------------------
|
|
92
|
+
export const MARKSMEN_BOARD_SIZE = 5;
|
|
93
|
+
export const MARKSMEN_BOARD_TIMER_KEY = 'marksmen-range';
|
|
94
|
+
/** The UTC ISO week a moment falls in, "2026-W43": the board starts again each Monday. */
|
|
95
|
+
export function marksmenWeekKey(nowMs) {
|
|
96
|
+
const d = new Date(nowMs);
|
|
97
|
+
const day = (d.getUTCDay() + 6) % 7; // Monday 0
|
|
98
|
+
const thursday = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate() - day + 3));
|
|
99
|
+
const yearStart = Date.UTC(thursday.getUTCFullYear(), 0, 1);
|
|
100
|
+
const week = Math.floor((thursday.getTime() - yearStart) / 86_400_000 / 7) + 1;
|
|
101
|
+
return `${thursday.getUTCFullYear()}-W${String(week).padStart(2, '0')}`;
|
|
102
|
+
}
|
|
103
|
+
export function emptyMarksmenSave(nowMs) {
|
|
104
|
+
return { week: marksmenWeekKey(nowMs), rows: [] };
|
|
105
|
+
}
|
|
106
|
+
/** The board as the world saved it, or a fresh one: nothing unreadable is trusted. */
|
|
107
|
+
export function parseMarksmenSave(raw, nowMs) {
|
|
108
|
+
const fresh = emptyMarksmenSave(nowMs);
|
|
109
|
+
if (!raw || typeof raw !== 'object')
|
|
110
|
+
return fresh;
|
|
111
|
+
const r = raw;
|
|
112
|
+
if (r.week !== fresh.week || !Array.isArray(r.rows))
|
|
113
|
+
return fresh;
|
|
114
|
+
const rows = [];
|
|
115
|
+
for (const row of r.rows.slice(0, 50)) {
|
|
116
|
+
const q = row;
|
|
117
|
+
if (!q || typeof q.name !== 'string' || !q.name || typeof q.score !== 'number' || !Number.isFinite(q.score) || q.score <= 0 || typeof q.at !== 'number')
|
|
118
|
+
continue;
|
|
119
|
+
rows.push({ name: q.name.slice(0, 40), score: Math.floor(q.score), at: q.at });
|
|
120
|
+
}
|
|
121
|
+
return { week: fresh.week, rows: rankMarksmenRows(rows) };
|
|
122
|
+
}
|
|
123
|
+
/** Best first; a tie goes to whoever scored it first. */
|
|
124
|
+
export function rankMarksmenRows(rows) {
|
|
125
|
+
return [...rows].sort((a, b) => b.score - a.score || a.at - b.at).slice(0, MARKSMEN_BOARD_SIZE);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A finished round goes on the board: one place per name (only a better round replaces a worse one), a new week starts a fresh board, and a score of nothing
|
|
129
|
+
* is never written. Returns the new board and whether this round changed it.
|
|
130
|
+
*/
|
|
131
|
+
export function recordMarksmenScore(save, name, score, nowMs) {
|
|
132
|
+
const base = save.week === marksmenWeekKey(nowMs) ? save : emptyMarksmenSave(nowMs);
|
|
133
|
+
if (score <= 0)
|
|
134
|
+
return { save: base, changed: base !== save, place: 0 };
|
|
135
|
+
const mine = base.rows.find((r) => r.name === name);
|
|
136
|
+
if (mine && mine.score >= score)
|
|
137
|
+
return { save: base, changed: base !== save, place: marksmenPlaceOf(base.rows, name) };
|
|
138
|
+
const rows = rankMarksmenRows([...base.rows.filter((r) => r.name !== name), { name, score, at: nowMs }]);
|
|
139
|
+
const place = marksmenPlaceOf(rows, name);
|
|
140
|
+
return { save: { week: base.week, rows }, changed: true, place };
|
|
141
|
+
}
|
|
142
|
+
/** 1-based place on a board, or 0 when not on it. */
|
|
143
|
+
export function marksmenPlaceOf(rows, name) {
|
|
144
|
+
const i = rows.findIndex((r) => r.name === name);
|
|
145
|
+
return i < 0 ? 0 : i + 1;
|
|
146
|
+
}
|
|
147
|
+
export function marksmenBoardText(save) {
|
|
148
|
+
if (!save.rows.length)
|
|
149
|
+
return "Nobody has put a round on this week's board yet. Sixty seconds and a steady hand will do it.";
|
|
150
|
+
return `This week's best rounds: ${save.rows.map((r, i) => `${i + 1}. ${r.name} ${r.score}`).join(', ')}. The board starts again each Monday.`;
|
|
151
|
+
}
|
|
152
|
+
// ---- The Range-Master's menu --------------------------------------------------------------------------------------------------------------
|
|
153
|
+
/** npc_action ids the Range-Master answers (the client sends them on untouched). */
|
|
154
|
+
export const MARKSMEN_ACTION_PREFIX = 'mrange:';
|
|
155
|
+
export const MARKSMEN_ACTIONS = {
|
|
156
|
+
begin: 'mrange:begin',
|
|
157
|
+
board: 'mrange:board',
|
|
158
|
+
stop: 'mrange:stop',
|
|
159
|
+
};
|
|
160
|
+
export const MARKSMEN_OPTION_LABELS = {
|
|
161
|
+
[MARKSMEN_ACTIONS.begin]: 'Run a timed round',
|
|
162
|
+
[MARKSMEN_ACTIONS.board]: "This week's board",
|
|
163
|
+
[MARKSMEN_ACTIONS.stop]: 'Call off my round',
|
|
164
|
+
};
|
|
165
|
+
/** What the range says (the customer's words, not the code's). */
|
|
166
|
+
export const MARKSMEN_LINES = {
|
|
167
|
+
tooEarly: 'These lanes want a steadier draw than yours. Practise on the War Camp butts or the Beacon Ledge until your Archery reaches the figure on the sign.',
|
|
168
|
+
capped: 'This lane has nothing more to teach you. Try the next one along, or run a timed round for the board.',
|
|
169
|
+
allCapped: 'The range has nothing more to teach you. Run a timed round for the board, or find a real target.',
|
|
170
|
+
start: 'You nock a practice arrow and draw on the target, a long way up the yard.',
|
|
171
|
+
noBow: 'You need a bow in hand to shoot the range.',
|
|
172
|
+
needArchery: `The range is for archers of Archery ${MARKSMEN_MIN_ARCHERY} and over. Practise on the War Camp butts first.`,
|
|
173
|
+
inFight: 'Finish your fight first.',
|
|
174
|
+
alreadyRunning: 'Your round is on. Shoot any lane, and the minute is out when the last arrow is.',
|
|
175
|
+
stopped: 'Round called off. Nothing is scored and nothing is paid.',
|
|
176
|
+
noRound: 'You have no round running.',
|
|
177
|
+
waiting: 'Round entered. The minute starts with your first arrow: take a firing mark and shoot any lane.',
|
|
178
|
+
};
|
|
179
|
+
export const MARKSMEN_RULES_TEXT = `A timed round is ${MARKSMEN_ROUND_MS / 1000} seconds from your first arrow, one arrow a beat at whichever lane you choose. The near lane (12 steps) scores 1 a hit and is easy, the middle (18) scores 2, the far lane (22) scores 3 and is hard; every Archery level over ${MARKSMEN_MIN_ARCHERY} helps. ${MARKSMEN_TIERS.gold} takes gold, ${MARKSMEN_TIERS.silver} silver, ${MARKSMEN_TIERS.bronze} bronze, paid once an hour. The week's five best rounds go on my board.`;
|
|
180
|
+
export const MARKSMEN_FOLK = [
|
|
181
|
+
{
|
|
182
|
+
id: MARKSMEN_MASTER_ID,
|
|
183
|
+
name: MARKSMEN_MASTER_NAME,
|
|
184
|
+
place: `${MARKSMEN_RANGE_NAME}, north of the War Camp`,
|
|
185
|
+
x: MARKSMEN_MASTER_SPOT.x, z: MARKSMEN_MASTER_SPOT.z, faceX: MARKSMEN_MASTER_SPOT.faceX, faceZ: MARKSMEN_MASTER_SPOT.faceZ, leash: MARKSMEN_MASTER_SPOT.leash,
|
|
186
|
+
speak: "Edda Fenn, range-master. Fenwick's long butts teach you to hit a thing that stands still. I teach you to hit it when it matters: three lanes, a minute on the clock, and a board with the week's best names on it. Bring your own bow.",
|
|
187
|
+
extras: [
|
|
188
|
+
{ id: 'rules', label: 'The rules', say: MARKSMEN_RULES_TEXT },
|
|
189
|
+
{ id: 'lanes', label: 'The lanes', say: 'Three lanes up the yard: twelve steps, eighteen and twenty-two. Each teaches from Archery 30; the near one stops teaching at 36, the middle at 38 and the far one at 40. A round is scored on top of the practice.' },
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
];
|
|
193
|
+
export function marksmenFolkByName(name) {
|
|
194
|
+
return name ? MARKSMEN_FOLK.find((p) => p.name === name) ?? null : null;
|
|
195
|
+
}
|
|
196
|
+
export function marksmenFolkById(id) {
|
|
197
|
+
return id ? MARKSMEN_FOLK.find((p) => p.id === id) ?? null : null;
|
|
198
|
+
}
|
|
199
|
+
/** The fence: the camp's own spear palisade on every tile of the box's edge, but the gap in the south run. */
|
|
200
|
+
export function marksmenFence() {
|
|
201
|
+
const b = MARKSMEN_FENCE_BOX;
|
|
202
|
+
const out = [];
|
|
203
|
+
for (let x = b.minX; x <= b.maxX; x++) {
|
|
204
|
+
out.push({ id: `mrange-fence-n-${x}`, kind: 'barricade', style: 'winter-spears', x, z: b.minZ });
|
|
205
|
+
if (x < MARKSMEN_GATE.minX || x > MARKSMEN_GATE.maxX)
|
|
206
|
+
out.push({ id: `mrange-fence-s-${x}`, kind: 'barricade', style: 'winter-spears', x, z: b.maxZ });
|
|
207
|
+
}
|
|
208
|
+
for (let z = b.minZ + 1; z <= b.maxZ - 1; z++) {
|
|
209
|
+
out.push({ id: `mrange-fence-w-${z}`, kind: 'barricade', style: 'winter-spears', x: b.minX, z });
|
|
210
|
+
out.push({ id: `mrange-fence-e-${z}`, kind: 'barricade', style: 'winter-spears', x: b.maxX, z });
|
|
211
|
+
}
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
/** The yard's working pieces: the lane targets (real `yardprop` entities the archery drill reads), backstops, firing marks, rack, water, braziers and the sign. */
|
|
215
|
+
export const MARKSMEN_STATIONS = [
|
|
216
|
+
...MARKSMEN_LANES.map((l) => ({ id: l.id, kind: 'yardprop', style: 'butt', x: l.x, z: l.z })),
|
|
217
|
+
...MARKSMEN_LANES.map((l, i) => ({ id: `mrange-backstop-${i + 1}`, kind: 'yardprop', style: 'trainingbackstop', x: l.x, z: l.z - 1 })),
|
|
218
|
+
...MARKSMEN_LANES.map((l, i) => ({ id: `mrange-line-${i + 1}`, kind: 'flowers', style: 'trainingline', x: l.fx, z: l.fz })),
|
|
219
|
+
{ id: 'mrange-rack', kind: 'yardprop', style: 'trainingrack', x: 111, z: 466 },
|
|
220
|
+
{ id: 'mrange-water', kind: 'yardprop', style: 'trainingwater', x: 111, z: 469 },
|
|
221
|
+
{ id: 'mrange-lantern-1', kind: 'lantern', style: 'winter-brazier', x: 110, z: 471 },
|
|
222
|
+
{ id: 'mrange-lantern-2', kind: 'lantern', style: 'winter-brazier', x: 139, z: 471 },
|
|
223
|
+
{ id: 'mrange-lantern-3', kind: 'lantern', style: 'winter-brazier', x: 139, z: 446 },
|
|
224
|
+
{ id: 'mrange-sign', kind: 'signpost', style: 'placard-ew-Marksmen Range: Archery 30-40, three lanes, timed rounds, ask the Range-Master', x: 123, z: 471 },
|
|
225
|
+
];
|
|
226
|
+
// ---- The Range-Master's quest -------------------------------------------------------------------------------------------------------------
|
|
227
|
+
export const MARKSMEN_QUEST_IDS = ['marksmenThreeLanes'];
|
|
228
|
+
const EDDA = { kind: 'resident', name: MARKSMEN_MASTER_NAME };
|
|
229
|
+
const RANGE_AT = { x: MARKSMEN_STAND.x, z: MARKSMEN_STAND.z, label: MARKSMEN_RANGE_NAME };
|
|
230
|
+
export const MARKSMEN_QUEST_GIVER_TEXT = `Range-Master Edda Fenn keeps ${MARKSMEN_RANGE_NAME}, the fenced yard just north of the garrison camp beyond the Northern Gate.`;
|
|
231
|
+
export const MARKSMEN_QUESTS = {
|
|
232
|
+
marksmenThreeLanes: {
|
|
233
|
+
giver: EDDA,
|
|
234
|
+
requires: {
|
|
235
|
+
skill: { skill: 'archery', level: MARKSMEN_MIN_ARCHERY },
|
|
236
|
+
refuse: `The range is for steady hands. Come back at Archery ${MARKSMEN_MIN_ARCHERY}, with your own bow.`,
|
|
237
|
+
},
|
|
238
|
+
offer: "New archers walk in, loose a handful at the near lane, call it a day and go home with a story. That is not a range, that is a hat on a post. Put an arrow in each of my three lanes, near to far, and learn what twenty-two steps does to a draw.",
|
|
239
|
+
accept: `Go in at the gate on the south side of the yard, take a firing mark on the line and shoot each of the three lanes up the yard, 12, 18 and 22 steps. Your own bow in hand (Archery ${MARKSMEN_MIN_ARCHERY}).`,
|
|
240
|
+
decline: 'Then the lanes stay clean, and I stay bored.',
|
|
241
|
+
steps: [
|
|
242
|
+
{
|
|
243
|
+
kind: 'shoot',
|
|
244
|
+
targets: MARKSMEN_LANES.map((l) => l.id),
|
|
245
|
+
qty: MARKSMEN_LANES.length,
|
|
246
|
+
targetLabel: 'Lane',
|
|
247
|
+
label: 'Shoot all three lanes of the Marksmen Range',
|
|
248
|
+
hint: "In the Marksmen Range north of the War Camp, stand on a firing mark on the line and click a target. The farther the lane the harder it is, and the longer it keeps teaching.",
|
|
249
|
+
notices: [
|
|
250
|
+
'The arrow thuds into the near target. Twelve steps, and it flew true. One.',
|
|
251
|
+
'The middle lane takes it low and left. Eighteen steps, and the cold bites the draw. Two.',
|
|
252
|
+
'The far target shudders. Twenty-two steps: that is a long way to be right. Three.',
|
|
253
|
+
],
|
|
254
|
+
at: RANGE_AT,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
kind: 'talk',
|
|
258
|
+
npc: EDDA,
|
|
259
|
+
label: 'Tell Range-Master Edda Fenn the lanes are holed',
|
|
260
|
+
hint: 'Edda Fenn stands on the firing line of the Marksmen Range, just inside the gate.',
|
|
261
|
+
say: `Three lanes, three holes, no bandaids needed. Now you know the range. Run a timed round with me when you want your name on the board: ${MARKSMEN_ROUND_MS / 1000} seconds, and the far lane pays the most for those who can hit it.`,
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
done: 'That is a proper arrival. Take this, and try for the board.',
|
|
265
|
+
after: 'The board has room for five. It has never had enough.',
|
|
266
|
+
rewards: { coins: 700, xp: { archery: 2600, explorer: 1800 } },
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
export const MARKSMEN_QUEST_META = {
|
|
270
|
+
marksmenThreeLanes: {
|
|
271
|
+
title: 'Three Lanes',
|
|
272
|
+
description: `Range-Master Edda Fenn wants an arrow in each of the three lanes of the Marksmen Range, near to far. Needs Archery ${MARKSMEN_MIN_ARCHERY}.`,
|
|
273
|
+
category: 'combat',
|
|
274
|
+
art: { item: 'oakbow' },
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
export const MARKSMEN_GIVER_PLACES = {
|
|
278
|
+
marksmenThreeLanes: MARKSMEN_QUEST_GIVER_TEXT,
|
|
279
|
+
};
|
|
280
|
+
//# sourceMappingURL=marksmenRange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marksmenRange.js","sourceRoot":"","sources":["../src/marksmenRange.ts"],"names":[],"mappings":"AAmBA,+IAA+I;AAE/I,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,mIAAmI;AACnI,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AAC1F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,6MAA6M;AAC7M,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAW,CAAC;AACxF,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAW,CAAC;AAC1D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,kGAAkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAElG,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,CAAC;IAC3D,MAAM,CAAC,GAAG,kBAAkB,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AAC1F,CAAC;AACD,kHAAkH;AAClH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,CAAS;IACvD,MAAM,CAAC,GAAG,kBAAkB,CAAC;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F,CAAC;AACD,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,MAAM,CAAC,GAAG,gBAAgB,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,iJAAiJ;AAEjJ,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAmBvC,wKAAwK;AACxK,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAChJ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAChJ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CACjJ,CAAC;AACF,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,EAA6B;IAC5D,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,EAA6B;IAC5D,OAAO,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AACD,+GAA+G;AAC/G,MAAM,UAAU,gBAAgB,CAAC,EAA6B;IAC5D,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,6IAA6I;AAE7I,qDAAqD;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,MAAM,CAAC;AAClD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,wHAAwH;AACxH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAgC;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAC,GAAG,sBAAsB,CAAC;IAC/F,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AACD,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,IAA2C,EAAE,IAAY;IAC3G,OAAO,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAGD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAW,CAAC;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,KAAK,IAAI,cAAc,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAChD,IAAI,KAAK,IAAI,cAAc,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpD,IAAI,KAAK,IAAI,cAAc,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAqD;IAC/E,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;IACrD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;IACrD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE;IACpD,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;CAClD,CAAC;AACF,iHAAiH;AACjH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,MAAM,CAAC;AAEpD,iJAAiJ;AAEjJ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAIzD,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;IAChD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/E,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AACD,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,KAAa;IAC3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,GAAkC,CAAC;QAC7C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YAAE,SAAS;QAClK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,CAAC;AACD,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,IAA4B;IAC3D,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAClG,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa;IAChG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACpF,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACxH,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACzG,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC;AACD,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAAC,IAA4B,EAAE,IAAY;IACxE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,8FAA8F,CAAC;IAC7H,OAAO,4BAA4B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC;AACjJ,CAAC;AAED,8IAA8I;AAE9I,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,aAAa;CACX,CAAC;AACX,MAAM,CAAC,MAAM,sBAAsB,GAAqC;IACtE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,mBAAmB;IAC7C,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,mBAAmB;IAC7C,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,mBAAmB;CAC7C,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,oJAAoJ;IAC9J,MAAM,EAAE,sGAAsG;IAC9G,SAAS,EAAE,kGAAkG;IAC7G,KAAK,EAAE,2EAA2E;IAClF,KAAK,EAAE,4CAA4C;IACnD,WAAW,EAAE,uCAAuC,oBAAoB,kDAAkD;IAC1H,OAAO,EAAE,0BAA0B;IACnC,cAAc,EAAE,iFAAiF;IACjG,OAAO,EAAE,0DAA0D;IACnE,OAAO,EAAE,4BAA4B;IACrC,OAAO,EAAE,gGAAgG;CACjG,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAC9B,oBAAoB,iBAAiB,GAAG,IAAI,kOAAkO,oBAAoB,WAAW,cAAc,CAAC,IAAI,gBAAgB,cAAc,CAAC,MAAM,YAAY,cAAc,CAAC,MAAM,yEAAyE,CAAC;AAeld,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,GAAG,mBAAmB,yBAAyB;QACtD,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,oBAAoB,CAAC,KAAK;QAC7J,KAAK,EAAE,wOAAwO;QAC/O,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,mBAAmB,EAAE;YAC7D,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,oNAAoN,EAAE;SAC/P;KACF;CACF,CAAC;AACF,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,EAAsB;IACrD,OAAO,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AAMD,8GAA8G;AAC9G,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,kBAAkB,CAAC;IAC7B,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzJ,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACjG,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mKAAmK;AACnK,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5G,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrJ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1I,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9E,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IAChF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpF,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,2FAA2F,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;CAC5J,CAAC;AAEF,8IAA8I;AAE9I,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AAGlE,MAAM,IAAI,GAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;AAC3E,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAW,CAAC;AACnG,MAAM,CAAC,MAAM,yBAAyB,GAAG,gCAAgC,mBAAmB,6EAA6E,CAAC;AAE1K,MAAM,CAAC,MAAM,eAAe,GAAqD;IAC/E,kBAAkB,EAAE;QAClB,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE;YACxD,MAAM,EAAE,uDAAuD,oBAAoB,sBAAsB;SAC1G;QACD,KAAK,EACH,mPAAmP;QACrP,MAAM,EAAE,qLAAqL,oBAAoB,IAAI;QACrN,OAAO,EAAE,8CAA8C;QACvD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,GAAG,EAAE,cAAc,CAAC,MAAM;gBAC1B,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,6CAA6C;gBACpD,IAAI,EAAE,8KAA8K;gBACpL,OAAO,EAAE;oBACP,4EAA4E;oBAC5E,0FAA0F;oBAC1F,mFAAmF;iBACpF;gBACD,EAAE,EAAE,QAAQ;aACb;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,IAAI;gBACT,KAAK,EAAE,iDAAiD;gBACxD,IAAI,EAAE,kFAAkF;gBACxF,GAAG,EAAE,yIAAyI,iBAAiB,GAAG,IAAI,oEAAoE;aAC3O;SACF;QACD,IAAI,EAAE,6DAA6D;QACnE,KAAK,EAAE,uDAAuD;QAC9D,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;KAC/D;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAE5B;IACF,kBAAkB,EAAE;QAClB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,sHAAsH,oBAAoB,GAAG;QAC1J,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACxB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA8C;IAC9E,kBAAkB,EAAE,yBAAyB;CAC9C,CAAC"}
|
package/dist/quests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quests.d.ts","sourceRoot":"","sources":["../src/quests.ts"],"names":[],"mappings":"AAYA,OAAO,EAAkD,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"quests.d.ts","sourceRoot":"","sources":["../src/quests.ts"],"names":[],"mappings":"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"}
|
package/dist/quests.js
CHANGED
|
@@ -19,7 +19,9 @@ import { NOBLE_INTRIGUE_META } from './nobleIntrigue.js';
|
|
|
19
19
|
import { CLOISTER_ROUND_META } from './cloisterRound.js';
|
|
20
20
|
import { THAW_FISHING_META } from './thawFishing.js';
|
|
21
21
|
import { ROAD_TABLE_META } from './longRoadTable.js';
|
|
22
|
+
import { TIMBER_ERRAND_META } from './timberErrands.js';
|
|
22
23
|
import { WAR_CAMP_META } from './warCampDrill.js';
|
|
24
|
+
import { MARKSMEN_QUEST_META } from './marksmenRange.js';
|
|
23
25
|
import { WARDENS_WRIT_META } from './wardensBounty.js';
|
|
24
26
|
import { EARLY_WRIT_META } from './earlyWrits.js';
|
|
25
27
|
import { BORDER_JOB_META } from './borderJobs.js';
|
|
@@ -1582,10 +1584,18 @@ export const QUEST_META = {
|
|
|
1582
1584
|
cloudberriesForHask: storyMeta('cloudberriesForHask', ROAD_TABLE_META.cloudberriesForHask),
|
|
1583
1585
|
charWithJuniper: storyMeta('charWithJuniper', ROAD_TABLE_META.charWithJuniper),
|
|
1584
1586
|
theLongRoadSupper: storyMeta('theLongRoadSupper', ROAD_TABLE_META.theLongRoadSupper),
|
|
1587
|
+
// Woodwork 31-40 (timberErrands.ts, wave 3).
|
|
1588
|
+
spokesForTheSpur: storyMeta('spokesForTheSpur', TIMBER_ERRAND_META.spokesForTheSpur),
|
|
1589
|
+
aWheelForThePass: storyMeta('aWheelForThePass', TIMBER_ERRAND_META.aWheelForThePass),
|
|
1590
|
+
duckboardsForTheRim: storyMeta('duckboardsForTheRim', TIMBER_ERRAND_META.duckboardsForTheRim),
|
|
1591
|
+
stavesForTheFletcher: storyMeta('stavesForTheFletcher', TIMBER_ERRAND_META.stavesForTheFletcher),
|
|
1592
|
+
casksForTheGalley: storyMeta('casksForTheGalley', TIMBER_ERRAND_META.casksForTheGalley),
|
|
1585
1593
|
// Fenwick's War Camp drill chain (warCampDrill.ts, T108).
|
|
1586
1594
|
warCampLongLane: storyMeta('warCampLongLane', WAR_CAMP_META.warCampLongLane),
|
|
1587
1595
|
warCampFallIn: storyMeta('warCampFallIn', WAR_CAMP_META.warCampFallIn),
|
|
1588
1596
|
warCampIronDrill: storyMeta('warCampIronDrill', WAR_CAMP_META.warCampIronDrill),
|
|
1597
|
+
// Edda Fenn's Marksmen Range (marksmenRange.ts, wave 3).
|
|
1598
|
+
marksmenThreeLanes: storyMeta('marksmenThreeLanes', MARKSMEN_QUEST_META.marksmenThreeLanes),
|
|
1589
1599
|
// Contract work 21-30 (wardensBounty.ts, T103).
|
|
1590
1600
|
wardensCrowWrit: storyMeta('wardensCrowWrit', WARDENS_WRIT_META.wardensCrowWrit),
|
|
1591
1601
|
wardensCoastWrit: storyMeta('wardensCoastWrit', WARDENS_WRIT_META.wardensCoastWrit),
|