@dreadwood-types/types 0.1.378 → 0.1.380
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/bossSignatures.js +8 -8
- package/dist/bossSignatures.js.map +1 -1
- package/dist/dailyHooks.js +4 -4
- package/dist/dailyHooks.js.map +1 -1
- package/dist/explorerLedger.js +3 -3
- package/dist/explorerLedger.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/windfall.d.ts +265 -0
- package/dist/windfall.d.ts.map +1 -0
- package/dist/windfall.js +463 -0
- package/dist/windfall.js.map +1 -0
- package/dist/worldBossRing.d.ts +51 -4
- package/dist/worldBossRing.d.ts.map +1 -1
- package/dist/worldBossRing.js +102 -35
- package/dist/worldBossRing.js.map +1 -1
- package/package.json +43 -43
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/** Time from one event's start to the next. */
|
|
2
|
+
export declare const WINDFALL_PERIOD_MS: number;
|
|
3
|
+
/**
|
|
4
|
+
* Event n starts at n * WINDFALL_PERIOD_MS + this. 150 minutes keeps the open node (150-180, the gap between the Heartwood Hunt and Ringstone) clear of every other
|
|
5
|
+
* timer in the 3 hour cycle: Ringstone 0-10, Brackenstone 30-40, Fenstone 60-70, Highstone 90-100, the lairs 130-140 and the
|
|
6
|
+
* Hunt 130-150. The 5 minute spent phase after it is scenery only and may run into Ringstone's first minutes.
|
|
7
|
+
*/
|
|
8
|
+
export declare const WINDFALL_OFFSET_MS: number;
|
|
9
|
+
/** The node stands at most this long from its start, whatever the pool says. */
|
|
10
|
+
export declare const WINDFALL_OPEN_CAP_MS: number;
|
|
11
|
+
/** With three or more workers working steadily the pool takes this long. */
|
|
12
|
+
export declare const WINDFALL_FULL_MS: number;
|
|
13
|
+
/** After the node is spent the site stays dressed (trunk or rubble) this long and the board line stays up. */
|
|
14
|
+
export declare const WINDFALL_SPENT_MS: number;
|
|
15
|
+
/** Countdown lead times: soon (the site is named in chat), near, imminent. */
|
|
16
|
+
export declare const WINDFALL_SOON_MS: number;
|
|
17
|
+
export declare const WINDFALL_NEAR_MS: number;
|
|
18
|
+
export declare const WINDFALL_IMMINENT_MS: number;
|
|
19
|
+
/** The world-timer keys the backend saves under (like `ringstone` and `ringstone-fight`). */
|
|
20
|
+
export declare const WINDFALL_TIMER_KEY = "windfall";
|
|
21
|
+
export declare const WINDFALL_OPEN_TIMER_KEY = "windfall-open";
|
|
22
|
+
export type WindfallKind = 'wood' | 'ore';
|
|
23
|
+
export type WindfallTierId = 1 | 2 | 3 | 4;
|
|
24
|
+
export declare const WINDFALL_TIER_IDS: readonly WindfallTierId[];
|
|
25
|
+
/** Eight combinations a day: `combo = (slot * 3) mod 8` walks all of them and alternates wood and ore (3 is coprime with 8). */
|
|
26
|
+
export declare const WINDFALL_COMBO_COUNT = 8;
|
|
27
|
+
export type WindfallCombo = {
|
|
28
|
+
index: number;
|
|
29
|
+
kind: WindfallKind;
|
|
30
|
+
tier: WindfallTierId;
|
|
31
|
+
};
|
|
32
|
+
export declare function windfallStartOf(slot: number): number;
|
|
33
|
+
/** The most recent slot whose start is at or before `now`. */
|
|
34
|
+
export declare function windfallSlotAt(now: number): number;
|
|
35
|
+
export declare function windfallComboIndex(slot: number): number;
|
|
36
|
+
export declare function windfallComboOf(slot: number): WindfallCombo;
|
|
37
|
+
export declare function windfallComboByIndex(index: number): WindfallCombo;
|
|
38
|
+
/**
|
|
39
|
+
* idle: more than WINDFALL_SOON_MS out (nothing announced); soon, near, imminent: the countdown stages (one chat line each);
|
|
40
|
+
* open: the node stands; spent: the node is done and the site is dressed. The wall clock alone cannot know the node ended early
|
|
41
|
+
* (that is the pool), so `open` here is "inside the cap"; `windfallPhase` folds the real end in.
|
|
42
|
+
*/
|
|
43
|
+
export type WindfallStage = 'idle' | 'soon' | 'near' | 'imminent' | 'open' | 'spent';
|
|
44
|
+
export declare const WINDFALL_STAGES: readonly WindfallStage[];
|
|
45
|
+
export declare function isWindfallStage(s: unknown): s is WindfallStage;
|
|
46
|
+
export type WindfallClock = {
|
|
47
|
+
/** The event the clock is counting towards (or running). */
|
|
48
|
+
slot: number;
|
|
49
|
+
stage: WindfallStage;
|
|
50
|
+
/** Time to the start (0 once open). */
|
|
51
|
+
msToStart: number;
|
|
52
|
+
/** Time left to the hard cap while open (0 otherwise). */
|
|
53
|
+
msToCap: number;
|
|
54
|
+
};
|
|
55
|
+
export declare function windfallClockAt(now: number): WindfallClock;
|
|
56
|
+
/** The next event start strictly after `now` (for a login or panel line). */
|
|
57
|
+
export declare function windfallNextStart(now: number): {
|
|
58
|
+
slot: number;
|
|
59
|
+
startsAt: number;
|
|
60
|
+
};
|
|
61
|
+
export type WindfallTier = {
|
|
62
|
+
id: WindfallTierId;
|
|
63
|
+
band: string;
|
|
64
|
+
/** What the node is called in chat and on the sign (spec section 4). */
|
|
65
|
+
woodName: string;
|
|
66
|
+
oreName: string;
|
|
67
|
+
/** Wood: the tree the node counts as in the felling roll (types woodwork.ts), the Woodwork level to work it, and what it yields. */
|
|
68
|
+
wood: {
|
|
69
|
+
counts: string;
|
|
70
|
+
treeLevel: number;
|
|
71
|
+
gate: number;
|
|
72
|
+
kind: string;
|
|
73
|
+
rare: string;
|
|
74
|
+
};
|
|
75
|
+
/** Ore: the Mining level to work it, what it yields (a weighted list) and its rare piece. */
|
|
76
|
+
ore: {
|
|
77
|
+
gate: number;
|
|
78
|
+
yields: ReadonlyArray<{
|
|
79
|
+
kind: string;
|
|
80
|
+
level: number;
|
|
81
|
+
weight: number;
|
|
82
|
+
}>;
|
|
83
|
+
rare: string;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
export declare const WINDFALL_TIERS: Record<WindfallTierId, WindfallTier>;
|
|
87
|
+
export declare function windfallTier(id: number): WindfallTier;
|
|
88
|
+
export declare function windfallNodeName(combo: WindfallCombo): string;
|
|
89
|
+
/** The Woodwork or Mining level needed to work the node of this combination. */
|
|
90
|
+
export declare function windfallGate(combo: WindfallCombo): number;
|
|
91
|
+
/** Null when `skillLevel` may work it, else the line the player reads. */
|
|
92
|
+
export declare function windfallGateLine(combo: WindfallCombo, skillLevel: number): string | null;
|
|
93
|
+
/** What one success gives the worker bag: an ore node picks by weight among the ores the worker's own Mining level allows. */
|
|
94
|
+
export declare function windfallPickYield(combo: WindfallCombo, skillLevel: number, random?: () => number): string;
|
|
95
|
+
/** The kind a bundle on the floor holds for this combination (the tier's main resource: the first yield for ore). */
|
|
96
|
+
export declare function windfallBundleKind(combo: WindfallCombo, random?: () => number): string;
|
|
97
|
+
export declare function windfallRareKind(combo: WindfallCombo): string;
|
|
98
|
+
/** One success pays this many items (James: "extra rewards"; the second one is the bonus). A placeholder, balance last. */
|
|
99
|
+
export declare const WINDFALL_YIELD_MULTIPLIER = 2;
|
|
100
|
+
/** Skill XP per success is this much of the normal value. */
|
|
101
|
+
export declare const WINDFALL_XP_MULTIPLIER = 1.25;
|
|
102
|
+
/** The gem chance on a vein is this many times the normal `GEM_MINING_CHANCE`. */
|
|
103
|
+
export declare const WINDFALL_GEM_MULTIPLIER = 4;
|
|
104
|
+
/** A success on a tree has this chance to put one bonus log of the next tier's wood in the bag. */
|
|
105
|
+
export declare const WINDFALL_RARE_LOG_CHANCE = 0.01;
|
|
106
|
+
export declare function windfallYieldQty(base?: number): number;
|
|
107
|
+
export declare function windfallXp(base: number): number;
|
|
108
|
+
/** A steady worker's successes a minute at the node's own level (a wood swing is 2400 ms, a pick attempt 4200 ms): the pool's yardstick. */
|
|
109
|
+
export declare const WINDFALL_REF_RATE = 15;
|
|
110
|
+
/** The pool is sized for at least this many workers, so a lone worker still reaches the first burst. */
|
|
111
|
+
export declare const WINDFALL_MIN_ACTIVE = 3;
|
|
112
|
+
/** And counts at most this many, so a huge crowd cannot make the pool unbounded. */
|
|
113
|
+
export declare const WINDFALL_ACTIVE_CAP = 30;
|
|
114
|
+
/** A worker is active with a success inside this window. */
|
|
115
|
+
export declare const WINDFALL_ACTIVE_WINDOW_MS: number;
|
|
116
|
+
/** A player's progress credit a minute is capped at this times the reference rate; the yield is not capped (a faster client earns yield, not progress). */
|
|
117
|
+
export declare const WINDFALL_PLAYER_RATE_FACTOR = 1.25;
|
|
118
|
+
export declare const WINDFALL_PLAYER_CREDITS_PER_MINUTE: number;
|
|
119
|
+
/** Where it bursts, as a share of the pool. The last is the fall (or cave-in). */
|
|
120
|
+
export declare const WINDFALL_BURST_AT: readonly number[];
|
|
121
|
+
/** If the hard cap arrives first, the final burst still fires at no less than this share of its full size. */
|
|
122
|
+
export declare const WINDFALL_MIN_FINAL_SCALE = 0.5;
|
|
123
|
+
/** How much of the pool one credited success removes with `active` workers. */
|
|
124
|
+
export declare function windfallStep(active: number): number;
|
|
125
|
+
/** One worker's tally on the node. `successes` counts every success (the satchels); `credited` the ones that moved the pool. */
|
|
126
|
+
export type WindfallWorker = {
|
|
127
|
+
key: string;
|
|
128
|
+
/** The account, when the backend has one (for a one-satchel-per-account rule, spec section 12). */
|
|
129
|
+
account?: string;
|
|
130
|
+
successes: number;
|
|
131
|
+
credited: number;
|
|
132
|
+
lastAt: number;
|
|
133
|
+
/** The start of the progress-credit window and the credits inside it. */
|
|
134
|
+
winStart: number;
|
|
135
|
+
winCredits: number;
|
|
136
|
+
};
|
|
137
|
+
export type WindfallEnd = null | {
|
|
138
|
+
at: number;
|
|
139
|
+
how: 'depleted' | 'timeout';
|
|
140
|
+
scale: number;
|
|
141
|
+
};
|
|
142
|
+
export type WindfallNode = {
|
|
143
|
+
v: 1;
|
|
144
|
+
slot: number;
|
|
145
|
+
/** 0 to 1. */
|
|
146
|
+
progress: number;
|
|
147
|
+
/** How many of WINDFALL_BURST_AT have fired. */
|
|
148
|
+
bursts: number;
|
|
149
|
+
workers: WindfallWorker[];
|
|
150
|
+
end: WindfallEnd;
|
|
151
|
+
};
|
|
152
|
+
export declare function emptyWindfallNode(slot: number): WindfallNode;
|
|
153
|
+
/** Active workers at `now`: a success inside the window, capped. */
|
|
154
|
+
export declare function windfallActiveCount(node: WindfallNode, now: number): number;
|
|
155
|
+
export type WindfallHit = {
|
|
156
|
+
node: WindfallNode;
|
|
157
|
+
/** The success moved the pool (false once the node has ended, or when the worker is over their credit window). */
|
|
158
|
+
credited: boolean;
|
|
159
|
+
/** Burst indices (0 to 3) that fired because of this hit, in order. Usually none or one. */
|
|
160
|
+
burstsDue: number[];
|
|
161
|
+
/** Set the first time the pool reaches 100 percent. */
|
|
162
|
+
ended: boolean;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* A worker's successful gather on the node at `now`. Pure: returns the next node. Level does not matter (the step uses the reference rate); a
|
|
166
|
+
* hit after the node has ended, or after the cap, does not credit. The first success also counts the worker as active for this very step, so
|
|
167
|
+
* a lone first hit uses an active count of one (and so the floor of three).
|
|
168
|
+
*/
|
|
169
|
+
export declare function windfallApplyHit(node: WindfallNode, who: {
|
|
170
|
+
key: string;
|
|
171
|
+
account?: string;
|
|
172
|
+
}, now: number): WindfallHit;
|
|
173
|
+
/** The burst indices reached at `progress` that have not fired (`fired` already have): a stalled server fires each missed one once. */
|
|
174
|
+
export declare function windfallBurstsDue(progress: number, fired: number): number[];
|
|
175
|
+
/**
|
|
176
|
+
* The hard cap: a node still open `WINDFALL_OPEN_CAP_MS` after its start ends as a timeout. Its final burst (index 3) still fires if it has
|
|
177
|
+
* not, at `max(WINDFALL_MIN_FINAL_SCALE, progress)` of its size. Idempotent: a node that has ended is returned unchanged.
|
|
178
|
+
*/
|
|
179
|
+
export declare function windfallExpire(node: WindfallNode, now: number): {
|
|
180
|
+
node: WindfallNode;
|
|
181
|
+
finalScale: number | null;
|
|
182
|
+
};
|
|
183
|
+
/** The phase for the panel and the chat: the clock's, with the node's real end folded in. */
|
|
184
|
+
export declare function windfallPhase(clock: WindfallClock, node: WindfallNode | null, now: number): WindfallStage;
|
|
185
|
+
/** The thrown pieces lie this long (Ringstone's `RING_FLOOR_ITEM_MS`), free for anyone, then vanish. */
|
|
186
|
+
export declare const WINDFALL_FLOOR_ITEM_MS: number;
|
|
187
|
+
/** At most this many pieces from one burst go to one character. */
|
|
188
|
+
export declare const WINDFALL_PICKUP_CAP = 3;
|
|
189
|
+
/** Pieces land this far from the node's footprint edge. */
|
|
190
|
+
export declare const WINDFALL_SCATTER_MIN = 2;
|
|
191
|
+
export declare const WINDFALL_SCATTER_MAX = 6;
|
|
192
|
+
/** A bundle on the floor is this many logs or ore. */
|
|
193
|
+
export declare const WINDFALL_BUNDLE_QTY = 5;
|
|
194
|
+
/** Work range from the footprint edge (the normal range is 1). */
|
|
195
|
+
export declare const WINDFALL_WORK_RANGE = 2;
|
|
196
|
+
export type WindfallBurst = {
|
|
197
|
+
bundles: number;
|
|
198
|
+
smallSatchels: number;
|
|
199
|
+
largeSatchels: number;
|
|
200
|
+
rare: number;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* What a burst throws, for `active` workers at that moment. Bursts 0 to 2 (25, 50, 75 percent) throw bundles and small satchels; burst 3
|
|
204
|
+
* (the fall) adds large satchels and rare pieces. `scale` shrinks the final of a timed-out node (not below its floor, see the table).
|
|
205
|
+
*/
|
|
206
|
+
export declare function windfallBurstCounts(active: number, burst: number, scale?: number): WindfallBurst;
|
|
207
|
+
export declare const WINDFALL_SATCHEL_KIND = "windfallsatchel";
|
|
208
|
+
export declare const WINDFALL_SATCHEL_LARGE_KIND = "windfallsatchellarge";
|
|
209
|
+
export declare function isWindfallSatchelKind(kind: string): boolean;
|
|
210
|
+
/** A satchel's coins by tier: [small min, small max, large min, large max] (Ringstone's tier 1 is 120-240; placeholders). */
|
|
211
|
+
export declare const WINDFALL_SATCHEL_COINS: Record<WindfallTierId, readonly [number, number, number, number]>;
|
|
212
|
+
/** The small things a satchel may hold besides coins and the tier's resource; a small satchel gets one, a large two different ones. */
|
|
213
|
+
export declare const WINDFALL_SATCHEL_EXTRAS: Record<WindfallTierId, ReadonlyArray<{
|
|
214
|
+
kind: string;
|
|
215
|
+
min: number;
|
|
216
|
+
max: number;
|
|
217
|
+
}>>;
|
|
218
|
+
/** What opening a satchel gives: coins, then the tier's resource, then one (small) or two different (large) extras. */
|
|
219
|
+
export declare function windfallSatchelContents(combo: WindfallCombo, large: boolean, random?: () => number): Array<{
|
|
220
|
+
kind: string;
|
|
221
|
+
qty: number;
|
|
222
|
+
}>;
|
|
223
|
+
/** The satchel a worker is owed at the end for this many successes: none under 20, small at 20, large at 100. */
|
|
224
|
+
export declare const WINDFALL_SATCHEL_MIN_SUCCESSES = 20;
|
|
225
|
+
export declare const WINDFALL_SATCHEL_LARGE_SUCCESSES = 100;
|
|
226
|
+
export declare function windfallContribution(successes: number): 'none' | 'small' | 'large';
|
|
227
|
+
export type WindfallSite = {
|
|
228
|
+
id: string;
|
|
229
|
+
combo: number;
|
|
230
|
+
/** What the chat says: "near Hopewood Common". */
|
|
231
|
+
where: string;
|
|
232
|
+
/** An anchor from the data, not a walked tile: the backend's site finder (scripts/windfall-sites.ts) picks the tile within `searchRadius`. */
|
|
233
|
+
anchor: {
|
|
234
|
+
x: number;
|
|
235
|
+
z: number;
|
|
236
|
+
};
|
|
237
|
+
searchRadius: number;
|
|
238
|
+
};
|
|
239
|
+
/** Eight anchors, one per combination (spec section 7). Wood is the even combo index, ore the odd; tier = floor(index / 2) + 1. */
|
|
240
|
+
export declare const WINDFALL_SITES: readonly WindfallSite[];
|
|
241
|
+
export declare function windfallSiteFor(combo: number): WindfallSite;
|
|
242
|
+
export type WindfallLineKind = 'soon' | 'near' | 'imminent' | 'open' | 'burst' | 'spent' | 'timeout';
|
|
243
|
+
/** The world-chat lines (one place, so the backend and the tests read the same words). `burst` is the 0-3 index of the burst that fired. */
|
|
244
|
+
export declare function windfallLine(kind: WindfallLineKind, combo: WindfallCombo, where: string, extra?: {
|
|
245
|
+
burst?: number;
|
|
246
|
+
}): string;
|
|
247
|
+
/** One line for the "Today in Dreadwoods" panel and the login: the next event and where. */
|
|
248
|
+
export declare function windfallTodayLine(now: number): string;
|
|
249
|
+
/** What the backend keeps under WINDFALL_OPEN_TIMER_KEY: the open node, so a restart rebuilds it (spec section 8). */
|
|
250
|
+
export type WindfallSave = {
|
|
251
|
+
v: 1;
|
|
252
|
+
node: WindfallNode | null;
|
|
253
|
+
announced: {
|
|
254
|
+
slot: number;
|
|
255
|
+
stage: WindfallStage;
|
|
256
|
+
} | null;
|
|
257
|
+
collected: string[];
|
|
258
|
+
};
|
|
259
|
+
export declare const WINDFALL_COLLECTED_MAX = 600;
|
|
260
|
+
export declare function emptyWindfallSave(): WindfallSave;
|
|
261
|
+
/** Defensive parse of the saved state (a corrupt save is an empty one, never a crash). */
|
|
262
|
+
export declare function parseWindfallSave(raw: unknown): WindfallSave;
|
|
263
|
+
/** The key a collected contribution satchel is saved under: one per character per event. */
|
|
264
|
+
export declare function windfallCollectedKey(slot: number, characterKey: string): string;
|
|
265
|
+
//# sourceMappingURL=windfall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windfall.d.ts","sourceRoot":"","sources":["../src/windfall.ts"],"names":[],"mappings":"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"}
|