@dreadwood-types/types 0.1.307 → 0.1.308
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/campKitchens.d.ts +100 -0
- package/dist/campKitchens.d.ts.map +1 -0
- package/dist/campKitchens.js +230 -0
- package/dist/campKitchens.js.map +1 -0
- package/dist/dailyHooks.d.ts +4 -0
- package/dist/dailyHooks.d.ts.map +1 -1
- package/dist/dailyHooks.js +5 -0
- package/dist/dailyHooks.js.map +1 -1
- package/dist/explorerLedger.d.ts +2 -1
- package/dist/explorerLedger.d.ts.map +1 -1
- package/dist/explorerLedger.js +9 -1
- package/dist/explorerLedger.js.map +1 -1
- package/dist/fishCookQuests.d.ts +37 -0
- package/dist/fishCookQuests.d.ts.map +1 -0
- package/dist/fishCookQuests.js +175 -0
- package/dist/fishCookQuests.js.map +1 -0
- package/dist/fishingDerby.d.ts +28 -2
- package/dist/fishingDerby.d.ts.map +1 -1
- package/dist/fishingDerby.js +38 -4
- package/dist/fishingDerby.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/quests.d.ts.map +1 -1
- package/dist/quests.js +6 -0
- package/dist/quests.js.map +1 -1
- package/dist/riverFishing.d.ts +9 -0
- package/dist/riverFishing.d.ts.map +1 -1
- package/dist/riverFishing.js +9 -0
- package/dist/riverFishing.js.map +1 -1
- package/dist/storyQuests.d.ts +2 -1
- package/dist/storyQuests.d.ts.map +1 -1
- package/dist/storyQuests.js +4 -0
- package/dist/storyQuests.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** The two menu options a cook who keeps a kitchen order shows (ids sent as the dialog option). */
|
|
2
|
+
export declare const CAMP_KITCHEN_READ_ACTION = "kitchen:read";
|
|
3
|
+
export declare const CAMP_KITCHEN_HAND_ACTION = "kitchen:hand";
|
|
4
|
+
export declare const CAMP_KITCHEN_OPTION_LABELS: Readonly<Record<string, string>>;
|
|
5
|
+
export type CampDish = {
|
|
6
|
+
/** The cooked item kind. */
|
|
7
|
+
kind: string;
|
|
8
|
+
label: string;
|
|
9
|
+
};
|
|
10
|
+
export type CampKitchen = {
|
|
11
|
+
/** Stable id: the Ledger mark is `kitchen:<id>`, the saved record keys on it. */
|
|
12
|
+
id: string;
|
|
13
|
+
/** The cook's name (a resident of that name; the CampTrader's, or Calverton's Cook Dorcas Marsh). */
|
|
14
|
+
cook: string;
|
|
15
|
+
place: string;
|
|
16
|
+
/** Roughly where players of this kitchen's levels are: the guide and the Ledger line say it. */
|
|
17
|
+
band: string;
|
|
18
|
+
/** The day's dish is drawn from these. */
|
|
19
|
+
dishes: readonly CampDish[];
|
|
20
|
+
/** How many of the day's dish the order wants. */
|
|
21
|
+
qty: number;
|
|
22
|
+
};
|
|
23
|
+
export declare const CAMP_KITCHENS: readonly CampKitchen[];
|
|
24
|
+
export declare const CAMP_KITCHEN_IDS: readonly string[];
|
|
25
|
+
export declare function campKitchenById(id: unknown): CampKitchen | null;
|
|
26
|
+
/** The kitchen a cook keeps, by the name they are known by (null for anybody else). */
|
|
27
|
+
export declare function campKitchenByCook(name: string | null | undefined): CampKitchen | null;
|
|
28
|
+
/** Every dish kind any kitchen can ask for (what the cooking counter tracks). */
|
|
29
|
+
export declare const CAMP_ORDER_DISH_KINDS: ReadonlySet<string>;
|
|
30
|
+
export declare const CAMP_DAY_MS: number;
|
|
31
|
+
/** The UTC day a moment falls in (the same number as dailyHooks.ts dailyDay, so Bruce's day and the cooks' agree). */
|
|
32
|
+
export declare function campOrderDay(nowMs: number): number;
|
|
33
|
+
export type CampOrder = {
|
|
34
|
+
kitchenId: string;
|
|
35
|
+
cook: string;
|
|
36
|
+
day: number;
|
|
37
|
+
dish: string;
|
|
38
|
+
label: string;
|
|
39
|
+
qty: number;
|
|
40
|
+
/** The Cooking level the dish is cooked at (what the cook tells a hand who cannot yet). */
|
|
41
|
+
level: number;
|
|
42
|
+
coins: number;
|
|
43
|
+
cookingXp: number;
|
|
44
|
+
};
|
|
45
|
+
/** Coins a dish adds to an order: about twice what a counter pays for it (PLACEHOLDER). */
|
|
46
|
+
export declare function campOrderCoinsPerDish(level: number): number;
|
|
47
|
+
/** Today's order at one kitchen. A pure function of the kitchen and the day. */
|
|
48
|
+
export declare function campOrderFor(kitchenId: string, day: number): CampOrder | null;
|
|
49
|
+
/** `day`: the UTC day this is for (0 = never). `cooked`: dishes this character cooked that day, by kind, not yet spent. `claimed`: kitchens filled that day. */
|
|
50
|
+
export type CampOrdersState = {
|
|
51
|
+
day: number;
|
|
52
|
+
cooked: Record<string, number>;
|
|
53
|
+
claimed: string[];
|
|
54
|
+
};
|
|
55
|
+
export declare const EMPTY_CAMP_ORDERS: CampOrdersState;
|
|
56
|
+
/** The most of one dish the pool will hold: more than a day's orders could spend (ten kitchens, six each). */
|
|
57
|
+
export declare const CAMP_COOKED_CAP = 99;
|
|
58
|
+
/** Whatever the database held, made safe: whole days, only known dishes with whole positive counts (capped), only known kitchens, once each. */
|
|
59
|
+
export declare function normalizeCampOrders(raw: unknown): CampOrdersState;
|
|
60
|
+
/** The record as it stands on `day`: yesterday's is cleared (the midnight turnover), today's is kept. Pure. */
|
|
61
|
+
export declare function campOrdersOn(state: CampOrdersState, day: number): CampOrdersState;
|
|
62
|
+
/** One more of a dish cooked by this character, today. Dishes no kitchen asks for are not tracked. Pure. */
|
|
63
|
+
export declare function campOrdersWithCooked(state: CampOrdersState, dishKind: string, day: number): CampOrdersState;
|
|
64
|
+
export declare function campOrderClaimed(state: CampOrdersState, kitchenId: string, day: number): boolean;
|
|
65
|
+
/** How many kitchens' orders are filled today. */
|
|
66
|
+
export declare function campOrdersFilled(state: CampOrdersState, day: number): number;
|
|
67
|
+
export type CampHandInCheck = {
|
|
68
|
+
ok: true;
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
why: 'claimed' | 'not-cooked' | 'bag';
|
|
72
|
+
have: number;
|
|
73
|
+
need: number;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Can this character fill the kitchen's order now? Every refusal before anything moves: already filled today; fewer cooked by them today than
|
|
77
|
+
* the order wants (a bought dish never counts); or fewer in the bag than it wants (they cooked them, then dropped, sold or ate them).
|
|
78
|
+
*/
|
|
79
|
+
export declare function campOrderCheck(state: CampOrdersState, order: CampOrder, bagCount: number): CampHandInCheck;
|
|
80
|
+
/** The record after a hand-in: the dishes are spent from the pool and the kitchen is marked filled. Call only after campOrderCheck said ok. Pure. */
|
|
81
|
+
export declare function campOrdersAfterHandIn(state: CampOrdersState, order: CampOrder): CampOrdersState;
|
|
82
|
+
export declare function campOrderLine(order: CampOrder): string;
|
|
83
|
+
/** The cook's answer to "Today's order": what is wanted, and where the character stands. */
|
|
84
|
+
export declare function campOrderReadText(order: CampOrder, state: CampOrdersState): string;
|
|
85
|
+
export declare function campOrderRefuseText(check: Extract<CampHandInCheck, {
|
|
86
|
+
ok: false;
|
|
87
|
+
}>, order: CampOrder): string;
|
|
88
|
+
export declare function campOrderPaidText(order: CampOrder): string;
|
|
89
|
+
/** Ledger marks a filled order writes: one per kitchen. */
|
|
90
|
+
export declare const CAMP_KITCHEN_MARK_PREFIX = "kitchens:";
|
|
91
|
+
export declare function campKitchenMark(kitchenId: string): string;
|
|
92
|
+
export declare const LEDGER_KITCHEN_LINES: readonly {
|
|
93
|
+
id: string;
|
|
94
|
+
label: string;
|
|
95
|
+
}[];
|
|
96
|
+
/** A character with this much Cooking hears of the kitchens in the login line. */
|
|
97
|
+
export declare const CAMP_ORDERS_LINE_COOKING = 10;
|
|
98
|
+
/** The login line's piece: "the camp cooks have orders up (3 of 8 filled)", or null below the Cooking level that cares. */
|
|
99
|
+
export declare function campOrdersTodayText(cooking: number, state: CampOrdersState, now: number): string | null;
|
|
100
|
+
//# sourceMappingURL=campKitchens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campKitchens.d.ts","sourceRoot":"","sources":["../src/campKitchens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE CAMP KITCHENS' DAILY ORDERS (T104, 2026-10-14; COVERAGE_1_40.md slice 8, "Cooking 11-40"). Each of the camp cooks (the cooks of
|
|
3
|
+
* campTraders.ts and Cook Dorcas Marsh at Calverton's cookhouse; ten in all) puts one order up a day: cook N of a dish and hand them in for coins and
|
|
4
|
+
* Cooking XP. Modelled on Bruce's daily contract (dailyHooks.ts): the order is a PURE function of the UTC day and the kitchen, so a restart,
|
|
5
|
+
* a relog or a second server shows the same order and nothing about it is stored on the server.
|
|
6
|
+
*
|
|
7
|
+
* What a character carries is one small saved record (`CampOrdersState`): the day it is for, how many of each dish they COOKED that day, and
|
|
8
|
+
* the kitchens they have already filled that day. The cooked count is the abuse guard (James, 2026-10-05 onward, abuse first): a dish bought
|
|
9
|
+
* at a counter, picked up off the floor or received in a trade never raises it, so only a dish the character cooked themselves can fill an
|
|
10
|
+
* order. The count is one pool per dish for the whole day, spent by each hand-in, so the same four trout cannot fill two kitchens. At UTC
|
|
11
|
+
* midnight the record is for yesterday and is cleared the next time it is read: nothing carries over, nothing is lost that was still owed
|
|
12
|
+
* (an order is filled or it is not; a day's cooking that was not handed in simply was not an order).
|
|
13
|
+
*
|
|
14
|
+
* Amounts are PLACEHOLDERS for the balance pass: coins are about twice a counter's price for the dish, the Cooking XP doubles the XP the cooking
|
|
15
|
+
* itself paid. Every dish is an existing cooked dish (cooking.ts COOKING_RECIPES) and every cook an existing person.
|
|
16
|
+
*/
|
|
17
|
+
import { COOKING_RECIPES } from './cooking.js';
|
|
18
|
+
/** The two menu options a cook who keeps a kitchen order shows (ids sent as the dialog option). */
|
|
19
|
+
export const CAMP_KITCHEN_READ_ACTION = 'kitchen:read';
|
|
20
|
+
export const CAMP_KITCHEN_HAND_ACTION = 'kitchen:hand';
|
|
21
|
+
export const CAMP_KITCHEN_OPTION_LABELS = {
|
|
22
|
+
[CAMP_KITCHEN_READ_ACTION]: "Today's order",
|
|
23
|
+
[CAMP_KITCHEN_HAND_ACTION]: 'Hand in the order',
|
|
24
|
+
};
|
|
25
|
+
const d = (kind, label) => ({ kind, label });
|
|
26
|
+
export const CAMP_KITCHENS = [
|
|
27
|
+
{
|
|
28
|
+
id: 'battlefield', cook: 'Hob Tasker', place: "the Captain's Muster, the Battlefield", band: '6-14', qty: 4,
|
|
29
|
+
dishes: [d('cookedperch', 'Cooked Perch'), d('cookedgame', 'Cooked Game'), d('cookedtidesnapper', 'Grilled Tide Snapper')],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'toll-house', cook: 'Dell Marrick', place: "the Ridge Toll House, Highwayman's Ridge", band: '11-20', qty: 4,
|
|
33
|
+
dishes: [d('cookedgame', 'Cooked Game'), d('cookedtidesnapper', 'Grilled Tide Snapper'), d('cookedtench', 'Cooked Tench')],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'webfen', cook: 'Bess Marrow', place: 'Reedwick island, Webfen Causeway', band: '12-28', qty: 4,
|
|
37
|
+
dishes: [d('cookedtidesnapper', 'Grilled Tide Snapper'), d('cookedtench', 'Cooked Tench'), d('cookedhare', 'Roast Hare')],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'calverton', cook: 'Cook Dorcas Marsh', place: "Marsh's Cookhouse, Smiths' Row, Calverton", band: '10-30', qty: 5,
|
|
41
|
+
dishes: [d('cookedperch', 'Cooked Perch'), d('cookedtidesnapper', 'Grilled Tide Snapper'), d('cookedtench', 'Cooked Tench'), d('cookedgame', 'Cooked Game')],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'greenwood', cook: 'Tilda Ash', place: 'the Old Hunter Camp, Greenwood Wilds', band: '15-30', qty: 5,
|
|
45
|
+
dishes: [d('cookedtench', 'Cooked Tench'), d('cookedhare', 'Roast Hare'), d('cookedgrayling', 'Cooked Grayling')],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'gullhook', cook: 'Marta Pell', place: 'the cookhouse at the landing, Gullhook Head', band: '18-30', qty: 5,
|
|
49
|
+
dishes: [d('cookedtidesnapper', 'Grilled Tide Snapper'), d('cookedtench', 'Cooked Tench'), d('cookedconger', 'Cooked Conger')],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: 'last-signal', cook: 'Nella Greaves', place: "the cookhouse at the Warden's Post, The Last Signal", band: '23-30', qty: 5,
|
|
53
|
+
dishes: [d('cookedhare', 'Roast Hare'), d('cookedgrayling', 'Cooked Grayling'), d('cookedtrout', 'Cooked Trout')],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'emberdeep', cook: 'Corvin Dray', place: "Ilsa Cray's camp, Emberdeep Ruins", band: '25-35', qty: 6,
|
|
57
|
+
dishes: [d('cookedgrayling', 'Cooked Grayling'), d('cookedtrout', 'Cooked Trout'), d('cookedconger', 'Cooked Conger')],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: 'ironjaw-watch', cook: 'Hettie Lund', place: 'the cook fire at the Ironjaw Watch, the ogre approaches', band: '31-40', qty: 6,
|
|
61
|
+
dishes: [d('cookedtrout', 'Cooked Trout'), d('cookedchar', 'Cooked Arctic Char'), d('cookedconger', 'Cooked Conger')],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'dwarf-road', cook: 'Hobb Gantry', place: 'the Old Quarry, Dwarf Road', band: '30-40', qty: 6,
|
|
65
|
+
dishes: [d('cookedtrout', 'Cooked Trout'), d('cookedconger', 'Cooked Conger'), d('cookedchar', 'Cooked Arctic Char')],
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
export const CAMP_KITCHEN_IDS = CAMP_KITCHENS.map((k) => k.id);
|
|
69
|
+
export function campKitchenById(id) {
|
|
70
|
+
return CAMP_KITCHENS.find((k) => k.id === id) ?? null;
|
|
71
|
+
}
|
|
72
|
+
/** The kitchen a cook keeps, by the name they are known by (null for anybody else). */
|
|
73
|
+
export function campKitchenByCook(name) {
|
|
74
|
+
return name ? CAMP_KITCHENS.find((k) => k.cook === name) ?? null : null;
|
|
75
|
+
}
|
|
76
|
+
/** Every dish kind any kitchen can ask for (what the cooking counter tracks). */
|
|
77
|
+
export const CAMP_ORDER_DISH_KINDS = new Set(CAMP_KITCHENS.flatMap((k) => k.dishes.map((x) => x.kind)));
|
|
78
|
+
// ---- the day ----------------------------------------------------------------------------------------------------------------
|
|
79
|
+
export const CAMP_DAY_MS = 24 * 60 * 60_000;
|
|
80
|
+
/** The UTC day a moment falls in (the same number as dailyHooks.ts dailyDay, so Bruce's day and the cooks' agree). */
|
|
81
|
+
export function campOrderDay(nowMs) {
|
|
82
|
+
return Math.floor(nowMs / CAMP_DAY_MS);
|
|
83
|
+
}
|
|
84
|
+
function mix(day, salt) {
|
|
85
|
+
let seed = (Math.imul(day + 1, 2654435761) + Math.imul(salt + 7, 40503) + 131) >>> 0;
|
|
86
|
+
seed = (Math.imul(seed ^ (seed >>> 15), 2246822519) + 3266489917) >>> 0;
|
|
87
|
+
seed = (Math.imul(seed ^ (seed >>> 13), 3266489917) + 668265263) >>> 0;
|
|
88
|
+
return seed >>> 0;
|
|
89
|
+
}
|
|
90
|
+
function recipeFor(kind) {
|
|
91
|
+
return COOKING_RECIPES.find((r) => r.output === kind) ?? null;
|
|
92
|
+
}
|
|
93
|
+
/** Coins a dish adds to an order: about twice what a counter pays for it (PLACEHOLDER). */
|
|
94
|
+
export function campOrderCoinsPerDish(level) {
|
|
95
|
+
return Math.round(10 + 2 * Math.max(1, level));
|
|
96
|
+
}
|
|
97
|
+
/** Today's order at one kitchen. A pure function of the kitchen and the day. */
|
|
98
|
+
export function campOrderFor(kitchenId, day) {
|
|
99
|
+
const kitchen = campKitchenById(kitchenId);
|
|
100
|
+
if (!kitchen)
|
|
101
|
+
return null;
|
|
102
|
+
const salt = kitchen.id.length * 31 + kitchen.qty;
|
|
103
|
+
const dish = kitchen.dishes[mix(day, salt) % kitchen.dishes.length];
|
|
104
|
+
const recipe = recipeFor(dish.kind);
|
|
105
|
+
const level = recipe?.level ?? 1;
|
|
106
|
+
return {
|
|
107
|
+
kitchenId: kitchen.id,
|
|
108
|
+
cook: kitchen.cook,
|
|
109
|
+
day,
|
|
110
|
+
dish: dish.kind,
|
|
111
|
+
label: dish.label,
|
|
112
|
+
qty: kitchen.qty,
|
|
113
|
+
level,
|
|
114
|
+
coins: kitchen.qty * campOrderCoinsPerDish(level),
|
|
115
|
+
cookingXp: kitchen.qty * (recipe?.xp ?? 0),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export const EMPTY_CAMP_ORDERS = { day: 0, cooked: {}, claimed: [] };
|
|
119
|
+
/** The most of one dish the pool will hold: more than a day's orders could spend (ten kitchens, six each). */
|
|
120
|
+
export const CAMP_COOKED_CAP = 99;
|
|
121
|
+
/** Whatever the database held, made safe: whole days, only known dishes with whole positive counts (capped), only known kitchens, once each. */
|
|
122
|
+
export function normalizeCampOrders(raw) {
|
|
123
|
+
if (!raw || typeof raw !== 'object')
|
|
124
|
+
return { day: 0, cooked: {}, claimed: [] };
|
|
125
|
+
const r = raw;
|
|
126
|
+
const day = typeof r.day === 'number' && Number.isFinite(r.day) && r.day > 0 ? Math.floor(r.day) : 0;
|
|
127
|
+
const cooked = {};
|
|
128
|
+
if (r.cooked && typeof r.cooked === 'object' && !Array.isArray(r.cooked)) {
|
|
129
|
+
for (const [kind, n] of Object.entries(r.cooked)) {
|
|
130
|
+
if (!CAMP_ORDER_DISH_KINDS.has(kind) || typeof n !== 'number' || !Number.isFinite(n))
|
|
131
|
+
continue;
|
|
132
|
+
const whole = Math.min(CAMP_COOKED_CAP, Math.floor(n));
|
|
133
|
+
if (whole > 0)
|
|
134
|
+
cooked[kind] = whole;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const claimed = Array.isArray(r.claimed)
|
|
138
|
+
? [...new Set(r.claimed.filter((id) => typeof id === 'string' && CAMP_KITCHEN_IDS.includes(id)))]
|
|
139
|
+
: [];
|
|
140
|
+
return day === 0 ? { day: 0, cooked: {}, claimed: [] } : { day, cooked, claimed };
|
|
141
|
+
}
|
|
142
|
+
/** The record as it stands on `day`: yesterday's is cleared (the midnight turnover), today's is kept. Pure. */
|
|
143
|
+
export function campOrdersOn(state, day) {
|
|
144
|
+
return state.day === day ? state : { day, cooked: {}, claimed: [] };
|
|
145
|
+
}
|
|
146
|
+
/** One more of a dish cooked by this character, today. Dishes no kitchen asks for are not tracked. Pure. */
|
|
147
|
+
export function campOrdersWithCooked(state, dishKind, day) {
|
|
148
|
+
if (!CAMP_ORDER_DISH_KINDS.has(dishKind))
|
|
149
|
+
return state;
|
|
150
|
+
const base = campOrdersOn(state, day);
|
|
151
|
+
const have = base.cooked[dishKind] ?? 0;
|
|
152
|
+
if (have >= CAMP_COOKED_CAP)
|
|
153
|
+
return base;
|
|
154
|
+
return { ...base, cooked: { ...base.cooked, [dishKind]: have + 1 } };
|
|
155
|
+
}
|
|
156
|
+
export function campOrderClaimed(state, kitchenId, day) {
|
|
157
|
+
return state.day === day && state.claimed.includes(kitchenId);
|
|
158
|
+
}
|
|
159
|
+
/** How many kitchens' orders are filled today. */
|
|
160
|
+
export function campOrdersFilled(state, day) {
|
|
161
|
+
return state.day === day ? state.claimed.length : 0;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Can this character fill the kitchen's order now? Every refusal before anything moves: already filled today; fewer cooked by them today than
|
|
165
|
+
* the order wants (a bought dish never counts); or fewer in the bag than it wants (they cooked them, then dropped, sold or ate them).
|
|
166
|
+
*/
|
|
167
|
+
export function campOrderCheck(state, order, bagCount) {
|
|
168
|
+
if (campOrderClaimed(state, order.kitchenId, order.day))
|
|
169
|
+
return { ok: false, why: 'claimed', have: 0, need: order.qty };
|
|
170
|
+
const cooked = state.day === order.day ? (state.cooked[order.dish] ?? 0) : 0;
|
|
171
|
+
if (cooked < order.qty)
|
|
172
|
+
return { ok: false, why: 'not-cooked', have: cooked, need: order.qty };
|
|
173
|
+
if (bagCount < order.qty)
|
|
174
|
+
return { ok: false, why: 'bag', have: bagCount, need: order.qty };
|
|
175
|
+
return { ok: true };
|
|
176
|
+
}
|
|
177
|
+
/** The record after a hand-in: the dishes are spent from the pool and the kitchen is marked filled. Call only after campOrderCheck said ok. Pure. */
|
|
178
|
+
export function campOrdersAfterHandIn(state, order) {
|
|
179
|
+
const base = campOrdersOn(state, order.day);
|
|
180
|
+
const left = (base.cooked[order.dish] ?? 0) - order.qty;
|
|
181
|
+
const cooked = { ...base.cooked };
|
|
182
|
+
if (left > 0)
|
|
183
|
+
cooked[order.dish] = left;
|
|
184
|
+
else
|
|
185
|
+
delete cooked[order.dish];
|
|
186
|
+
return { day: order.day, cooked, claimed: [...new Set([...base.claimed, order.kitchenId])] };
|
|
187
|
+
}
|
|
188
|
+
// ---- what the cook says --------------------------------------------------------------------------------------------------------
|
|
189
|
+
export function campOrderLine(order) {
|
|
190
|
+
return `${order.qty} ${order.label}${order.qty === 1 ? '' : 's'}, for ${order.coins} coins and ${order.cookingXp} Cooking XP (Cooking ${order.level})`;
|
|
191
|
+
}
|
|
192
|
+
/** The cook's answer to "Today's order": what is wanted, and where the character stands. */
|
|
193
|
+
export function campOrderReadText(order, state) {
|
|
194
|
+
if (campOrderClaimed(state, order.kitchenId, order.day))
|
|
195
|
+
return `Today's order is filled, and well done. Come back after midnight (UTC) for another.`;
|
|
196
|
+
const cooked = state.day === order.day ? (state.cooked[order.dish] ?? 0) : 0;
|
|
197
|
+
return `Today I want ${campOrderLine(order)}. Cook them yourself, here or anywhere there's a fire, and hand them over. You have cooked ${Math.min(cooked, order.qty)} of ${order.qty} today.`;
|
|
198
|
+
}
|
|
199
|
+
export function campOrderRefuseText(check, order) {
|
|
200
|
+
if (check.why === 'claimed')
|
|
201
|
+
return 'You have filled my order today. Come back after midnight (UTC).';
|
|
202
|
+
if (check.why === 'not-cooked') {
|
|
203
|
+
return `I only count what you have cooked yourself today: ${check.have} of ${check.need} ${order.label}. A dish off a counter, a trade or the floor is not an order.`;
|
|
204
|
+
}
|
|
205
|
+
return `You cooked them, but I see only ${check.have} ${order.label} in your bag, and I want ${check.need}.`;
|
|
206
|
+
}
|
|
207
|
+
export function campOrderPaidText(order) {
|
|
208
|
+
return `Order filled: ${order.qty} ${order.label}. +${order.coins} coins, +${order.cookingXp} Cooking XP.`;
|
|
209
|
+
}
|
|
210
|
+
/** Ledger marks a filled order writes: one per kitchen. */
|
|
211
|
+
export const CAMP_KITCHEN_MARK_PREFIX = 'kitchens:';
|
|
212
|
+
export function campKitchenMark(kitchenId) {
|
|
213
|
+
return `${CAMP_KITCHEN_MARK_PREFIX}${kitchenId}`;
|
|
214
|
+
}
|
|
215
|
+
export const LEDGER_KITCHEN_LINES = CAMP_KITCHENS.map((k) => ({
|
|
216
|
+
id: campKitchenMark(k.id),
|
|
217
|
+
label: `Filled ${k.cook}'s order (${k.place})`,
|
|
218
|
+
}));
|
|
219
|
+
/** A character with this much Cooking hears of the kitchens in the login line. */
|
|
220
|
+
export const CAMP_ORDERS_LINE_COOKING = 10;
|
|
221
|
+
/** The login line's piece: "the camp cooks have orders up (3 of 8 filled)", or null below the Cooking level that cares. */
|
|
222
|
+
export function campOrdersTodayText(cooking, state, now) {
|
|
223
|
+
if (cooking < CAMP_ORDERS_LINE_COOKING)
|
|
224
|
+
return null;
|
|
225
|
+
const filled = campOrdersFilled(state, campOrderDay(now));
|
|
226
|
+
if (filled >= CAMP_KITCHENS.length)
|
|
227
|
+
return 'the camp cooks have nothing left to ask today';
|
|
228
|
+
return `the camp cooks want a dish apiece (${filled} of ${CAMP_KITCHENS.length} orders filled)`;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=campKitchens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campKitchens.js","sourceRoot":"","sources":["../src/campKitchens.ts"],"names":[],"mappings":"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"}
|
package/dist/dailyHooks.d.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { type BountyOffer, type BountyTargetKind } from './bounty.js';
|
|
16
16
|
import { FAIR_DEMAND_POOL } from './fairFolk.js';
|
|
17
|
+
import { type CampOrdersState } from './campKitchens.js';
|
|
17
18
|
export declare const DAILY_MS: number;
|
|
18
19
|
/** The day a moment falls in (UTC). */
|
|
19
20
|
export declare function dailyDay(nowMs: number): number;
|
|
@@ -47,6 +48,9 @@ export type TodayInput = {
|
|
|
47
48
|
cartOpen: boolean;
|
|
48
49
|
/** The week the character last handed in a hunt of the week (weeklyHunt.ts); 0 = never. */
|
|
49
50
|
weeklyClaimed?: number;
|
|
51
|
+
/** The character's Cooking level and saved camp-order record (campKitchens.ts): the camp cooks join the line from Cooking 10. */
|
|
52
|
+
cooking?: number;
|
|
53
|
+
campOrders?: CampOrdersState;
|
|
50
54
|
};
|
|
51
55
|
/** A higher ring is named in the login line from this many levels below its band (Highstone from Combat 15, Fenstone from 25). */
|
|
52
56
|
export declare const HIGHSTONE_LINE_LEAD = 5;
|
package/dist/dailyHooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dailyHooks.d.ts","sourceRoot":"","sources":["../src/dailyHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAmE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvI,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"dailyHooks.d.ts","sourceRoot":"","sources":["../src/dailyHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAmE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvI,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKjD,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOjG,eAAO,MAAM,QAAQ,QAAmB,CAAC;AAEzC,uCAAuC;AACvC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAUD,qHAAqH;AACrH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE,CAE1E;AAED,wHAAwH;AACxH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAMrF;AAED,iFAAiF;AACjF,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,oEAAoE;AACpE,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAIhH;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAE5E;AAED,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAUD,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAC;IAClB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iIAAiI;IACjI,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF,kIAAkI;AAClI,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAS3C,yHAAyH;AACzH,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,qGAAqG;AACrG,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAgCnD"}
|
package/dist/dailyHooks.js
CHANGED
|
@@ -18,6 +18,7 @@ import { harvestCartDay, harvestCartOrdersForDay } from './southFieldsQuests.js'
|
|
|
18
18
|
import { derbyTodayText } from './fishingDerby.js';
|
|
19
19
|
import { huntTodayText } from './heartwoodHunt.js';
|
|
20
20
|
import { weeklyTodayText } from './weeklyHunt.js';
|
|
21
|
+
import { campOrdersTodayText, EMPTY_CAMP_ORDERS } from './campKitchens.js';
|
|
21
22
|
/** A character this close to the Grove's Combat band (22) hears of the Heartwood Hunt in the login line. */
|
|
22
23
|
const HUNT_LINE_COMBAT = 18;
|
|
23
24
|
import { bossForSlot, nextEventAt, slotAt, BRACKENSTONE, FENSTONE, HIGHSTONE, RING_BOSSES } from './worldBossRing.js';
|
|
@@ -129,6 +130,10 @@ export function todayLine(input) {
|
|
|
129
130
|
if (input.combat >= LAIR_LINE_COMBAT)
|
|
130
131
|
parts.push(lairTodayText(input.now));
|
|
131
132
|
parts.push(derbyTodayText(input.now));
|
|
133
|
+
// The camp kitchens' daily orders (campKitchens.ts, T104) join the line from Cooking 10.
|
|
134
|
+
const kitchens = campOrdersTodayText(input.cooking ?? 0, input.campOrders ?? EMPTY_CAMP_ORDERS, input.now);
|
|
135
|
+
if (kitchens)
|
|
136
|
+
parts.push(kitchens);
|
|
132
137
|
// The Heartwood Hunt (heartwoodHunt.ts, T74) joins the line once a character is within sight of its band (Woodwork 24 to cut the tree).
|
|
133
138
|
if (input.combat >= HUNT_LINE_COMBAT)
|
|
134
139
|
parts.push(huntTodayText(input.now));
|
package/dist/dailyHooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dailyHooks.js","sourceRoot":"","sources":["../src/dailyHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAA2C,MAAM,aAAa,CAAC;AACvI,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"dailyHooks.js","sourceRoot":"","sources":["../src/dailyHooks.ts"],"names":[],"mappings":"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"}
|
package/dist/explorerLedger.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type LedgerSection = 'places' | 'quests' | 'fish' | 'bosses' | 'events' | 'ring' | 'yard' | 'derby' | 'sled' | 'fort' | 'hunt' | 'mire' | 'road' | 'field' | 'lean' | 'wanted' | 'delve' | 'arcane' | 'voyage' | 'weekly';
|
|
1
|
+
export type LedgerSection = 'places' | 'quests' | 'fish' | 'bosses' | 'events' | 'ring' | 'yard' | 'derby' | 'sled' | 'fort' | 'hunt' | 'mire' | 'road' | 'field' | 'lean' | 'wanted' | 'delve' | 'arcane' | 'voyage' | 'weekly' | 'kitchens';
|
|
2
2
|
export declare const LEDGER_SECTIONS: readonly {
|
|
3
3
|
id: LedgerSection;
|
|
4
4
|
label: string;
|
|
@@ -29,6 +29,7 @@ export declare const LEDGER_FIELD_XP = 50;
|
|
|
29
29
|
export declare const LEDGER_DELVE_XP = 50;
|
|
30
30
|
export declare const LEDGER_ARCANE_XP = 60;
|
|
31
31
|
export declare const LEDGER_VOYAGE_XP = 40;
|
|
32
|
+
export declare const LEDGER_KITCHEN_XP = 40;
|
|
32
33
|
export declare const LEDGER_PAGE_BONUS_XP: Readonly<Record<LedgerSection, number>>;
|
|
33
34
|
/** The named bosses (NpcKinds) whose fall is written in the book. Labels are what the book shows. */
|
|
34
35
|
export declare const LEDGER_BOSSES: readonly {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorerLedger.d.ts","sourceRoot":"","sources":["../src/explorerLedger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"explorerLedger.d.ts","sourceRoot":"","sources":["../src/explorerLedger.ts"],"names":[],"mappings":"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"}
|
package/dist/explorerLedger.js
CHANGED
|
@@ -27,6 +27,7 @@ import { LEDGER_LEAN_LINES, LEDGER_LEAN_XP } from './leanRules.js';
|
|
|
27
27
|
import { LEDGER_WANTED_LINES, LEDGER_WANTED_XP } from './wantedBoard.js';
|
|
28
28
|
import { LEDGER_DELVE_LINES } from './delversLadder.js';
|
|
29
29
|
import { LEDGER_ARCANE_LINES } from './arcaneRealmsContent.js';
|
|
30
|
+
import { LEDGER_KITCHEN_LINES } from './campKitchens.js';
|
|
30
31
|
import { FIELD_GUIDE_BONUS_IDS } from './fieldGuide.js';
|
|
31
32
|
import { LEDGER_WEEKLY_LINES, LEDGER_WEEKLY_XP } from './weeklyHunt.js';
|
|
32
33
|
import { LEDGER_VOYAGE_LINES } from './voyages.js';
|
|
@@ -38,7 +39,7 @@ export const LEDGER_SECTIONS = [
|
|
|
38
39
|
{ id: 'events', label: 'Events cleared', blurb: 'Every doorway the world opens, seen to its chest.' },
|
|
39
40
|
{ id: 'ring', label: 'Ringstone', blurb: 'The crowd bosses of Ringstone, Brackenstone, Highstone and Fenstone, and the four lairs that wake in the Dreadwoods.' },
|
|
40
41
|
{ id: 'yard', label: 'The sparring yard', blurb: "Bouts won against the Capital's drill sergeants and the War Camp's." },
|
|
41
|
-
{ id: 'derby', label: 'The Fishing Derby', blurb: 'Ribbons won on the best-catch and most-fish boards, at all
|
|
42
|
+
{ id: 'derby', label: 'The Fishing Derby', blurb: 'Ribbons won on the best-catch and most-fish boards, at all five waters.' },
|
|
42
43
|
{ id: 'sled', label: "Hask's Sled Run", blurb: "The run down the snowfield hill behind Old Hask's cabin." },
|
|
43
44
|
{ id: 'hunt', label: 'The Heartwood Hunt', blurb: "The Rotwood Grove's three-hourly hunt: cuts, the Ent's brood, ribbons and a felled heartwood." },
|
|
44
45
|
{ id: 'fort', label: 'Fort Rook', blurb: "Captain Rowena's yard: her whistle, her crew, her hoard and her gear." },
|
|
@@ -48,6 +49,7 @@ export const LEDGER_SECTIONS = [
|
|
|
48
49
|
{ id: 'lean', label: 'The Lean Rules', blurb: 'The woods let nobody eat mid-fight. Lairs felled and outings walked with no healing, and the ranks they earn.' },
|
|
49
50
|
{ id: 'wanted', label: 'The Wanted Board', blurb: "Bounties put on a killer's head in the woods, and collected." },
|
|
50
51
|
{ id: 'voyage', label: 'Voyages', blurb: "Branson's log across the ports: corsair boardings held, freight delivered, a passenger and a squall." },
|
|
52
|
+
{ id: 'kitchens', label: 'The Camp Kitchens', blurb: "The camp cooks' daily orders: a dish cooked by your own hand for each camp kitchen, from the Toll House to the Old Quarry." },
|
|
51
53
|
{ id: 'weekly', label: 'The Hunt of the Week', blurb: "Bruce's weekly hunt: one creature a week for each level band, handed in during its week." },
|
|
52
54
|
{ id: 'delve', label: "The Delvers' Ladder", blurb: "The older dungeons: each boss's telegraphed move stepped clear of, and a wolf den's chest opened." },
|
|
53
55
|
{ id: 'arcane', label: 'The Arcane Realms', blurb: "The members' land north of the Capital: the blue door, the ward stones, the library's folios and the Runebound Warden." },
|
|
@@ -67,6 +69,7 @@ export const LEDGER_FIELD_XP = 50;
|
|
|
67
69
|
export const LEDGER_DELVE_XP = 50;
|
|
68
70
|
export const LEDGER_ARCANE_XP = 60;
|
|
69
71
|
export const LEDGER_VOYAGE_XP = 40;
|
|
72
|
+
export const LEDGER_KITCHEN_XP = 40;
|
|
70
73
|
export const LEDGER_PAGE_BONUS_XP = {
|
|
71
74
|
places: 1500,
|
|
72
75
|
quests: 1500,
|
|
@@ -88,6 +91,7 @@ export const LEDGER_PAGE_BONUS_XP = {
|
|
|
88
91
|
weekly: 400,
|
|
89
92
|
arcane: 400,
|
|
90
93
|
voyage: 400,
|
|
94
|
+
kitchens: 400,
|
|
91
95
|
};
|
|
92
96
|
/** The named bosses (NpcKinds) whose fall is written in the book. Labels are what the book shows. */
|
|
93
97
|
export const LEDGER_BOSSES = [
|
|
@@ -139,6 +143,8 @@ export const LEDGER_DERBY_LINES = [
|
|
|
139
143
|
{ id: 'derby:pier', label: 'A ribbon at the Long Pier' },
|
|
140
144
|
{ id: 'derby:pond', label: 'A ribbon at Henson Pond' },
|
|
141
145
|
{ id: 'derby:lake', label: 'A ribbon on the Frozen Lake' },
|
|
146
|
+
{ id: 'derby:cove', label: "A ribbon in Gullhook's pier cove" },
|
|
147
|
+
{ id: 'derby:jetty', label: "A ribbon off Saltmere's jetty" },
|
|
142
148
|
{ id: 'derby:cup', label: "The Angler's Cup: the best catch of a round" },
|
|
143
149
|
];
|
|
144
150
|
/** The Heartwood Hunt's lines (marked by the server from a finished round, heartwoodHunt.ts). Ids are the marks it writes. */
|
|
@@ -205,6 +211,8 @@ function build() {
|
|
|
205
211
|
lines.push({ id: d.id, section: 'arcane', label: d.label, xp: LEDGER_ARCANE_XP, marked: true });
|
|
206
212
|
for (const d of LEDGER_VOYAGE_LINES)
|
|
207
213
|
lines.push({ id: d.id, section: 'voyage', label: d.label, xp: LEDGER_VOYAGE_XP, marked: true });
|
|
214
|
+
for (const d of LEDGER_KITCHEN_LINES)
|
|
215
|
+
lines.push({ id: d.id, section: 'kitchens', label: d.label, xp: LEDGER_KITCHEN_XP, marked: true });
|
|
208
216
|
return lines;
|
|
209
217
|
}
|
|
210
218
|
export const LEDGER_LINES = build();
|