@rine-kit/pubg-intelligence 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/analytics.d.ts +176 -0
  3. package/dist/src/analytics.js +431 -0
  4. package/dist/src/analytics.js.map +1 -0
  5. package/dist/src/assistant.d.ts +87 -0
  6. package/dist/src/assistant.js +310 -0
  7. package/dist/src/assistant.js.map +1 -0
  8. package/dist/src/battle.d.ts +280 -0
  9. package/dist/src/battle.js +1249 -0
  10. package/dist/src/battle.js.map +1 -0
  11. package/dist/src/combat-long.d.ts +42 -0
  12. package/dist/src/combat-long.js +146 -0
  13. package/dist/src/combat-long.js.map +1 -0
  14. package/dist/src/combat-quality.d.ts +101 -0
  15. package/dist/src/combat-quality.js +253 -0
  16. package/dist/src/combat-quality.js.map +1 -0
  17. package/dist/src/evaluation-fixtures.d.ts +13 -0
  18. package/dist/src/evaluation-fixtures.js +144 -0
  19. package/dist/src/evaluation-fixtures.js.map +1 -0
  20. package/dist/src/evaluation-replay.d.ts +5 -0
  21. package/dist/src/evaluation-replay.js +107 -0
  22. package/dist/src/evaluation-replay.js.map +1 -0
  23. package/dist/src/evaluation.d.ts +140 -0
  24. package/dist/src/evaluation.js +180 -0
  25. package/dist/src/evaluation.js.map +1 -0
  26. package/dist/src/experiment-store.d.ts +56 -0
  27. package/dist/src/experiment-store.js +159 -0
  28. package/dist/src/experiment-store.js.map +1 -0
  29. package/dist/src/field.d.ts +103 -0
  30. package/dist/src/field.js +298 -0
  31. package/dist/src/field.js.map +1 -0
  32. package/dist/src/fights.d.ts +89 -0
  33. package/dist/src/fights.js +238 -0
  34. package/dist/src/fights.js.map +1 -0
  35. package/dist/src/highlights.d.ts +44 -0
  36. package/dist/src/highlights.js +153 -0
  37. package/dist/src/highlights.js.map +1 -0
  38. package/dist/src/index.d.ts +24 -0
  39. package/dist/src/index.js +25 -0
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/src/insights.d.ts +44 -0
  42. package/dist/src/insights.js +343 -0
  43. package/dist/src/insights.js.map +1 -0
  44. package/dist/src/intent.d.ts +40 -0
  45. package/dist/src/intent.js +119 -0
  46. package/dist/src/intent.js.map +1 -0
  47. package/dist/src/landing.d.ts +74 -0
  48. package/dist/src/landing.js +195 -0
  49. package/dist/src/landing.js.map +1 -0
  50. package/dist/src/lobby.d.ts +48 -0
  51. package/dist/src/lobby.js +209 -0
  52. package/dist/src/lobby.js.map +1 -0
  53. package/dist/src/match-insight.d.ts +165 -0
  54. package/dist/src/match-insight.js +542 -0
  55. package/dist/src/match-insight.js.map +1 -0
  56. package/dist/src/match-relative.d.ts +73 -0
  57. package/dist/src/match-relative.js +145 -0
  58. package/dist/src/match-relative.js.map +1 -0
  59. package/dist/src/match-story.d.ts +155 -0
  60. package/dist/src/match-story.js +636 -0
  61. package/dist/src/match-story.js.map +1 -0
  62. package/dist/src/profiles.d.ts +41 -0
  63. package/dist/src/profiles.js +136 -0
  64. package/dist/src/profiles.js.map +1 -0
  65. package/dist/src/raw-telemetry-archive.d.ts +29 -0
  66. package/dist/src/raw-telemetry-archive.js +340 -0
  67. package/dist/src/raw-telemetry-archive.js.map +1 -0
  68. package/dist/src/raw-telemetry-backfill.d.ts +28 -0
  69. package/dist/src/raw-telemetry-backfill.js +144 -0
  70. package/dist/src/raw-telemetry-backfill.js.map +1 -0
  71. package/dist/src/research.d.ts +89 -0
  72. package/dist/src/research.js +376 -0
  73. package/dist/src/research.js.map +1 -0
  74. package/dist/src/rhythm.d.ts +104 -0
  75. package/dist/src/rhythm.js +260 -0
  76. package/dist/src/rhythm.js.map +1 -0
  77. package/dist/src/streaks.d.ts +117 -0
  78. package/dist/src/streaks.js +367 -0
  79. package/dist/src/streaks.js.map +1 -0
  80. package/dist/src/style.d.ts +304 -0
  81. package/dist/src/style.js +1461 -0
  82. package/dist/src/style.js.map +1 -0
  83. package/dist/src/tactics.d.ts +88 -0
  84. package/dist/src/tactics.js +1221 -0
  85. package/dist/src/tactics.js.map +1 -0
  86. package/package.json +49 -3
  87. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/research.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { type RateEstimate } from './analytics.js';
2
+ export declare const RHYTHM_SCHEMA_VERSION: 1;
3
+ /** A gap this long between two matches starts a new session. */
4
+ export declare const SESSION_GAP_MINUTES = 40;
5
+ export declare const RHYTHM_MIN_SESSIONS = 15;
6
+ export declare const RHYTHM_BOOTSTRAP = 2000;
7
+ /** Placements at or beyond this count as an early exit when looking for tilt. */
8
+ export declare const BAD_PLACEMENT = 15;
9
+ /** Sessions at least this long are used to compare their first and last games. */
10
+ export declare const LONG_SESSION_GAMES = 8;
11
+ export declare const RHYTHM_MIN_HOUR_MATCHES = 12;
12
+ export declare const RHYTHM_HOUR_TIMEZONE = "Asia/Shanghai";
13
+ /** One match as the rhythm analysis sees it: when, how the squad placed and what a member did on average. */
14
+ export interface RhythmMatch {
15
+ timestamp: number;
16
+ rank: number | null;
17
+ /** Mean damage of the squad members present (so a missing member does not look like a bad game). */
18
+ damage: number;
19
+ }
20
+ export interface Interval {
21
+ mean: number | null;
22
+ low: number | null;
23
+ high: number | null;
24
+ }
25
+ export interface Contrast {
26
+ /** Group A minus group B, with a 95% interval from resampling whole sessions. */
27
+ diff: number | null;
28
+ low: number | null;
29
+ high: number | null;
30
+ a: number | null;
31
+ b: number | null;
32
+ nA: number;
33
+ nB: number;
34
+ /** True when the interval excludes zero. */
35
+ clear: boolean;
36
+ }
37
+ export interface GameIndexRow {
38
+ /** 1-based game number within the session; the last row is "this number or later". */
39
+ index: number;
40
+ orMore: boolean;
41
+ matches: number;
42
+ damage: Interval;
43
+ top10: RateEstimate;
44
+ medianPlacement: number | null;
45
+ }
46
+ export interface HourRow {
47
+ hour: number;
48
+ matches: number;
49
+ top10: RateEstimate;
50
+ meanDamage: number | null;
51
+ }
52
+ export interface CurrentSession {
53
+ /** Number of the game the squad is about to play (games so far + 1). */
54
+ nextGame: number;
55
+ gamesSoFar: number;
56
+ minutesSinceLast: number;
57
+ startedAt: number;
58
+ }
59
+ export interface RhythmAnalysis {
60
+ schemaVersion: typeof RHYTHM_SCHEMA_VERSION;
61
+ matches: number;
62
+ sessions: number;
63
+ sessionStats: {
64
+ medianGames: number | null;
65
+ longShare: number | null;
66
+ medianMinutes: number | null;
67
+ };
68
+ byIndex: GameIndexRow[];
69
+ byHour: HourRow[];
70
+ warmup: {
71
+ damage: Contrast;
72
+ top10: Contrast;
73
+ } | null;
74
+ /** Late versus early games of long sessions: negative = worse late. */
75
+ fatigue: {
76
+ damage: Contrast;
77
+ top10: Contrast;
78
+ sessions: number;
79
+ } | null;
80
+ /** The game after an early exit versus after any other game of the same session. */
81
+ tilt: {
82
+ damage: Contrast;
83
+ top10: Contrast;
84
+ } | null;
85
+ bestHour: {
86
+ hour: number;
87
+ top10: number;
88
+ matches: number;
89
+ } | null;
90
+ current: CurrentSession | null;
91
+ insights: string[];
92
+ notes: string[];
93
+ }
94
+ interface Game extends RhythmMatch {
95
+ index: number;
96
+ hour: number;
97
+ top10: boolean;
98
+ }
99
+ export declare function splitSessions(matches: readonly RhythmMatch[]): Game[][];
100
+ export declare function analyzeRhythm(input: {
101
+ matches: readonly RhythmMatch[];
102
+ now?: number;
103
+ }): RhythmAnalysis;
104
+ export {};
@@ -0,0 +1,260 @@
1
+ import { wilsonInterval } from './analytics.js';
2
+ import { mulberry32, percentile, STYLE_BOOTSTRAP_SEED } from './style.js';
3
+ export const RHYTHM_SCHEMA_VERSION = 1;
4
+ /** A gap this long between two matches starts a new session. */
5
+ export const SESSION_GAP_MINUTES = 40;
6
+ export const RHYTHM_MIN_SESSIONS = 15;
7
+ export const RHYTHM_BOOTSTRAP = 2000;
8
+ /** Placements at or beyond this count as an early exit when looking for tilt. */
9
+ export const BAD_PLACEMENT = 15;
10
+ /** Sessions at least this long are used to compare their first and last games. */
11
+ export const LONG_SESSION_GAMES = 8;
12
+ export const RHYTHM_MIN_HOUR_MATCHES = 12;
13
+ export const RHYTHM_HOUR_TIMEZONE = 'Asia/Shanghai';
14
+ function hourOf(timestamp) {
15
+ const parts = new Intl.DateTimeFormat('en-GB', {
16
+ hour: '2-digit',
17
+ hourCycle: 'h23',
18
+ timeZone: RHYTHM_HOUR_TIMEZONE,
19
+ }).formatToParts(timestamp);
20
+ return Number(parts.find((part) => part.type === 'hour')?.value ?? 0);
21
+ }
22
+ const mean = (values) => values.length ? values.reduce((sum, value) => sum + value, 0) / values.length : null;
23
+ function median(values) {
24
+ if (!values.length)
25
+ return null;
26
+ const sorted = [...values].sort((left, right) => left - right);
27
+ const mid = Math.floor(sorted.length / 2);
28
+ return sorted.length % 2 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
29
+ }
30
+ export function splitSessions(matches) {
31
+ const ordered = [...matches]
32
+ .filter((match) => Number.isFinite(match.timestamp))
33
+ .sort((left, right) => left.timestamp - right.timestamp);
34
+ const sessions = [];
35
+ let current = [];
36
+ for (const match of ordered) {
37
+ const previous = current.at(-1);
38
+ if (previous && match.timestamp - previous.timestamp > SESSION_GAP_MINUTES * 60_000) {
39
+ sessions.push(current);
40
+ current = [];
41
+ }
42
+ current.push({
43
+ ...match,
44
+ index: current.length + 1,
45
+ hour: hourOf(match.timestamp),
46
+ top10: match.rank !== null && match.rank > 0 && match.rank <= 10,
47
+ });
48
+ }
49
+ if (current.length)
50
+ sessions.push(current);
51
+ return sessions;
52
+ }
53
+ /** Interval of a statistic over sessions resampled with replacement, so games of one night are not treated as independent. */
54
+ function sessionBootstrap(sessions, statistic, seed) {
55
+ if (sessions.length < RHYTHM_MIN_SESSIONS)
56
+ return { low: null, high: null };
57
+ const rng = mulberry32(seed);
58
+ const draws = [];
59
+ for (let round = 0; round < RHYTHM_BOOTSTRAP; round += 1) {
60
+ const sample = Array.from({ length: sessions.length }, () => sessions[Math.floor(rng() * sessions.length)]);
61
+ const value = statistic(sample);
62
+ if (value !== null && Number.isFinite(value))
63
+ draws.push(value);
64
+ }
65
+ if (draws.length < RHYTHM_BOOTSTRAP * 0.8)
66
+ return { low: null, high: null };
67
+ draws.sort((left, right) => left - right);
68
+ return { low: percentile(draws, 0.025), high: percentile(draws, 0.975) };
69
+ }
70
+ function contrast(sessions, pick, measure, seed) {
71
+ const statistic = (sample) => {
72
+ const a = [];
73
+ const b = [];
74
+ for (const session of sample) {
75
+ const picked = pick(session);
76
+ a.push(...picked.a);
77
+ b.push(...picked.b);
78
+ }
79
+ const left = measure(a);
80
+ const right = measure(b);
81
+ return left !== null && right !== null ? left - right : null;
82
+ };
83
+ const all = { a: [], b: [] };
84
+ for (const session of sessions) {
85
+ const picked = pick(session);
86
+ all.a.push(...picked.a);
87
+ all.b.push(...picked.b);
88
+ }
89
+ const a = measure(all.a);
90
+ const b = measure(all.b);
91
+ const diff = a !== null && b !== null ? a - b : null;
92
+ const { low, high } = sessionBootstrap(sessions, statistic, seed);
93
+ return {
94
+ diff,
95
+ low,
96
+ high,
97
+ a,
98
+ b,
99
+ nA: all.a.length,
100
+ nB: all.b.length,
101
+ clear: low !== null && high !== null && (low > 0 || high < 0),
102
+ };
103
+ }
104
+ const damageOf = (games) => mean(games.map((game) => game.damage));
105
+ const top10Of = (games) => games.length ? games.filter((game) => game.top10).length / games.length : null;
106
+ export function analyzeRhythm(input) {
107
+ const sessions = splitSessions(input.matches);
108
+ const games = sessions.flat();
109
+ const result = {
110
+ schemaVersion: RHYTHM_SCHEMA_VERSION,
111
+ matches: games.length,
112
+ sessions: sessions.length,
113
+ sessionStats: {
114
+ medianGames: median(sessions.map((session) => session.length)),
115
+ longShare: sessions.length
116
+ ? sessions.filter((session) => session.length >= LONG_SESSION_GAMES).length /
117
+ sessions.length
118
+ : null,
119
+ medianMinutes: median(sessions
120
+ .filter((session) => session.length >= 2)
121
+ .map((session) => (session.at(-1).timestamp - session[0].timestamp) / 60_000)),
122
+ },
123
+ byIndex: [],
124
+ byHour: [],
125
+ warmup: null,
126
+ fatigue: null,
127
+ tilt: null,
128
+ bestHour: null,
129
+ current: null,
130
+ insights: [],
131
+ notes: [
132
+ `一个时段 = 相邻两局间隔不超过 ${SESSION_GAP_MINUTES} 分钟的连续对局。`,
133
+ '区间按「整个时段」重抽样得到(同一晚的几局互相有关联,不能当作独立样本);区间不含 0 才算有把握。',
134
+ '使用全部排位战绩,不受「仅看完整遥测」影响(时段需要连续的对局);伤害是在场队员的人均伤害。',
135
+ ],
136
+ };
137
+ if (!games.length)
138
+ return result;
139
+ const maxIndex = 8;
140
+ for (let index = 1; index <= maxIndex; index += 1) {
141
+ const group = games.filter((game) => index === maxIndex ? game.index >= maxIndex : game.index === index);
142
+ if (!group.length)
143
+ continue;
144
+ const draws = (() => {
145
+ if (group.length < 20)
146
+ return { low: null, high: null };
147
+ const rng = mulberry32(STYLE_BOOTSTRAP_SEED + index);
148
+ const means = [];
149
+ for (let round = 0; round < 500; round += 1)
150
+ means.push(mean(Array.from({ length: group.length }, () => group[Math.floor(rng() * group.length)].damage)));
151
+ means.sort((left, right) => left - right);
152
+ return { low: percentile(means, 0.025), high: percentile(means, 0.975) };
153
+ })();
154
+ result.byIndex.push({
155
+ index,
156
+ orMore: index === maxIndex,
157
+ matches: group.length,
158
+ damage: { mean: damageOf(group), ...draws },
159
+ top10: wilsonInterval(group.filter((game) => game.top10).length, group.length),
160
+ medianPlacement: median(group.map((game) => game.rank).filter((rank) => rank !== null && rank > 0)),
161
+ });
162
+ }
163
+ const hours = new Map();
164
+ for (const game of games)
165
+ hours.set(game.hour, [...(hours.get(game.hour) ?? []), game]);
166
+ result.byHour = [...hours.entries()]
167
+ .sort((left, right) => left[0] - right[0])
168
+ .map(([hour, group]) => ({
169
+ hour,
170
+ matches: group.length,
171
+ top10: wilsonInterval(group.filter((game) => game.top10).length, group.length),
172
+ meanDamage: damageOf(group),
173
+ }));
174
+ const eligibleHours = result.byHour.filter((row) => row.matches >= RHYTHM_MIN_HOUR_MATCHES && row.top10.rate !== null);
175
+ const best = [...eligibleHours].sort((left, right) => right.top10.rate - left.top10.rate)[0];
176
+ result.bestHour = best
177
+ ? { hour: best.hour, top10: best.top10.rate, matches: best.matches }
178
+ : null;
179
+ if (sessions.length >= RHYTHM_MIN_SESSIONS) {
180
+ const warmPick = (session) => ({ a: session.slice(0, 1), b: session.slice(1) });
181
+ result.warmup = {
182
+ damage: contrast(sessions, warmPick, damageOf, STYLE_BOOTSTRAP_SEED + 101),
183
+ top10: contrast(sessions, warmPick, top10Of, STYLE_BOOTSTRAP_SEED + 103),
184
+ };
185
+ const long = sessions.filter((session) => session.length >= LONG_SESSION_GAMES);
186
+ if (long.length >= RHYTHM_MIN_SESSIONS) {
187
+ const latePick = (session) => ({ a: session.slice(-3), b: session.slice(0, 3) });
188
+ result.fatigue = {
189
+ sessions: long.length,
190
+ damage: contrast(long, latePick, damageOf, STYLE_BOOTSTRAP_SEED + 107),
191
+ top10: contrast(long, latePick, top10Of, STYLE_BOOTSTRAP_SEED + 109),
192
+ };
193
+ }
194
+ const tiltPick = (session) => ({
195
+ a: session.slice(1).filter((game, position) => {
196
+ const before = session[position];
197
+ return before.rank !== null && before.rank >= BAD_PLACEMENT;
198
+ }),
199
+ b: session.slice(1).filter((game, position) => {
200
+ const before = session[position];
201
+ return before.rank !== null && before.rank > 0 && before.rank < BAD_PLACEMENT;
202
+ }),
203
+ });
204
+ const tilt = {
205
+ damage: contrast(sessions, tiltPick, damageOf, STYLE_BOOTSTRAP_SEED + 113),
206
+ top10: contrast(sessions, tiltPick, top10Of, STYLE_BOOTSTRAP_SEED + 127),
207
+ };
208
+ if (tilt.damage.nA >= 20)
209
+ result.tilt = tilt;
210
+ }
211
+ const last = sessions.at(-1);
212
+ const now = input.now ?? Date.now();
213
+ const sinceLast = (now - last.at(-1).timestamp) / 60_000;
214
+ if (sinceLast >= 0 && sinceLast <= SESSION_GAP_MINUTES + 20)
215
+ result.current = {
216
+ nextGame: last.length + 1,
217
+ gamesSoFar: last.length,
218
+ minutesSinceLast: Math.round(sinceLast),
219
+ startedAt: last[0].timestamp,
220
+ };
221
+ // Findings: only what the intervals support, including the negative ones.
222
+ const pct = (value) => (value === null ? '—' : `${(value * 100).toFixed(0)}%`);
223
+ const warm = result.warmup;
224
+ if (warm) {
225
+ if (warm.damage.clear && warm.damage.diff !== null && warm.damage.diff < 0 && warm.damage.b) {
226
+ result.insights.push(`每个时段的第一局明显偏弱:人均伤害 ${Math.round(warm.damage.a ?? 0)},之后各局 ${Math.round(warm.damage.b)}(低 ${Math.round((-warm.damage.diff / warm.damage.b) * 100)}%,区间 ${Math.round(warm.damage.low)} 到 ${Math.round(warm.damage.high)})。建议先打一局低压力的对局热热手。`);
227
+ }
228
+ else if (warm.damage.low !== null)
229
+ result.insights.push('第一局的伤害和之后各局没有可靠差别,看不出需要热身。');
230
+ if (warm.top10.clear && warm.top10.diff !== null)
231
+ result.insights.push(`第一局的前十率 ${pct(warm.top10.a)},之后各局 ${pct(warm.top10.b)}(差距区间 ${(warm.top10.low * 100).toFixed(0)} 到 ${(warm.top10.high * 100).toFixed(0)} 个百分点)。`);
232
+ else if (warm.top10.diff !== null &&
233
+ warm.top10.diff <= -0.05 &&
234
+ warm.top10.high !== null &&
235
+ warm.top10.high < 0.05)
236
+ result.insights.push(`第一局的前十率偏低(${pct(warm.top10.a)} 对 ${pct(warm.top10.b)}),但差距区间 ${(warm.top10.low * 100).toFixed(0)} 到 ${(warm.top10.high * 100).toFixed(0)} 个百分点刚好碰到 0,证据还不够,需要更多场次再下结论。`);
237
+ }
238
+ if (result.fatigue) {
239
+ const fatigue = result.fatigue;
240
+ if (fatigue.damage.clear || fatigue.top10.clear)
241
+ result.insights.push(`长时段(${LONG_SESSION_GAMES} 局以上)的最后 3 局${(fatigue.damage.diff ?? 0) < 0 ? '比前 3 局弱' : '比前 3 局强'}:人均伤害 ${Math.round(fatigue.damage.a ?? 0)} 对 ${Math.round(fatigue.damage.b ?? 0)}${(fatigue.damage.diff ?? 0) > 0 ? '(打得顺才会一直打下去,所以这不等于越打越强)' : ''}。`);
242
+ else if (fatigue.damage.low !== null)
243
+ result.insights.push(`没有发现疲劳效应:长时段(${fatigue.sessions} 个)的最后 3 局和前 3 局人均伤害 ${Math.round(fatigue.damage.a ?? 0)} 对 ${Math.round(fatigue.damage.b ?? 0)},差距在误差内。`);
244
+ }
245
+ if (result.tilt) {
246
+ const tilt = result.tilt;
247
+ if (tilt.damage.clear || tilt.top10.clear)
248
+ result.insights.push(`早死(第 ${BAD_PLACEMENT} 名之后)的下一局${(tilt.damage.diff ?? 0) < 0 ? '更差' : '更好'}:人均伤害 ${Math.round(tilt.damage.a ?? 0)} 对 ${Math.round(tilt.damage.b ?? 0)}。`);
249
+ else if (tilt.damage.low !== null)
250
+ result.insights.push(`没有发现「上头」:早死后的下一局人均伤害 ${Math.round(tilt.damage.a ?? 0)},其他局 ${Math.round(tilt.damage.b ?? 0)},差距在误差内。`);
251
+ }
252
+ if (result.bestHour && eligibleHours.length >= 3) {
253
+ const overall = games.filter((game) => game.top10).length / games.length;
254
+ const bestRow = eligibleHours.find((row) => row.hour === result.bestHour.hour);
255
+ if (bestRow.top10.low !== null && bestRow.top10.low > overall)
256
+ result.insights.push(`${String(result.bestHour.hour).padStart(2, '0')}:00 前后状态最好:前十率 ${pct(result.bestHour.top10)}(${result.bestHour.matches} 场),高于全部时段的 ${pct(overall)}。`);
257
+ }
258
+ return result;
259
+ }
260
+ //# sourceMappingURL=rhythm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rhythm.js","sourceRoot":"","sources":["../../src/rhythm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { type RateEstimate } from './analytics.js';
2
+ export declare const STREAK_SCHEMA_VERSION: 1;
3
+ /** Two takedowns by the same player at most this far apart belong to one streak (one engagement). */
4
+ export declare const STREAK_GAP_SECONDS = 60;
5
+ /** Takedowns of one team at most this far apart belong to the same final push. */
6
+ export declare const WIPE_GAP_SECONDS = 60;
7
+ export declare const STREAK_MIN_MATCHES = 10;
8
+ /** Exact source events for a detected chain/wipe; absolute seconds are converted to replay time by the caller. */
9
+ export interface StreakMoment {
10
+ kind: 'streak' | 'wipe';
11
+ playerIds: string[];
12
+ start: number;
13
+ end: number;
14
+ eventIds: string[];
15
+ count: number;
16
+ observedTeamSize: number | null;
17
+ }
18
+ /** Multi-kill counts for one member in one match; a streak of n distinct victims lands in bucket min(n, 4). */
19
+ export interface PlayerStreakMatch {
20
+ takedowns: number;
21
+ streaks: {
22
+ two: number;
23
+ three: number;
24
+ fourPlus: number;
25
+ };
26
+ /** Takedowns that were part of a streak of two or more. */
27
+ chainedTakedowns: number;
28
+ longest: number;
29
+ /** Members of wiped enemy teams this player took down, and wipes where this player took down every member. */
30
+ wipeTakedowns: number;
31
+ soloWipes: number;
32
+ }
33
+ export interface TeamWipe {
34
+ /** Members taken down in the final push and how many players the team had. */
35
+ wiped: number;
36
+ teamSize: number;
37
+ /** Tracked member who took down the most of them, and how many. */
38
+ lead: string;
39
+ leadCount: number;
40
+ solo: boolean;
41
+ phase: number | null;
42
+ durationSeconds: number;
43
+ }
44
+ export interface SquadWipedRecord {
45
+ /** Squad members taken down in our own final push. */
46
+ wiped: number;
47
+ /** True when every one of them was taken down by the same enemy team, or by one enemy player. */
48
+ singleTeam: boolean;
49
+ singlePlayer: boolean;
50
+ }
51
+ export interface StreakMatchStats {
52
+ players: Record<string, PlayerStreakMatch>;
53
+ wipes: TeamWipe[];
54
+ /** Null when the squad was not eliminated (won, or the end is not observed). */
55
+ squadWiped: SquadWipedRecord | null;
56
+ moments?: StreakMoment[];
57
+ }
58
+ /**
59
+ * Multi-kill streaks and team wipes from one raw payload. A takedown is a knock, or a kill without a prior knock;
60
+ * a team wipe is an enemy team whose final push (takedowns at most WIPE_GAP_SECONDS apart up to its last death)
61
+ * was taken down entirely by the tracked squad. Team kills and self-inflicted deaths are ignored.
62
+ */
63
+ export declare function analyzeStreaks(payload: unknown, trackedIds: ReadonlySet<string>): StreakMatchStats;
64
+ export interface StreakPlayerSummary {
65
+ accountId: string;
66
+ name: string;
67
+ matches: number;
68
+ takedowns: number;
69
+ two: number;
70
+ three: number;
71
+ fourPlus: number;
72
+ longest: number;
73
+ /** Share of takedowns that came inside a streak; how often one takedown leads straight into the next. */
74
+ chainedShare: RateEstimate | null;
75
+ /** Multi-kills (streaks of two or more) per ten matches. */
76
+ multiPerTen: number | null;
77
+ wipeTakedowns: number;
78
+ soloWipes: number;
79
+ }
80
+ export interface StreakSummary {
81
+ schemaVersion: typeof STREAK_SCHEMA_VERSION;
82
+ matches: number;
83
+ players: StreakPlayerSummary[];
84
+ wipes: {
85
+ total: number;
86
+ perMatch: number | null;
87
+ /** Matches with at least one wipe. */
88
+ matchShare: RateEstimate | null;
89
+ fullTeam: number;
90
+ solo: number;
91
+ bySize: Array<{
92
+ wiped: number;
93
+ count: number;
94
+ }>;
95
+ byStage: Array<{
96
+ stage: 'early' | 'mid' | 'late';
97
+ count: number;
98
+ }>;
99
+ medianSeconds: number | null;
100
+ /** Who took down the most players across wipes, and who led them. */
101
+ leaders: Array<{
102
+ accountId: string;
103
+ name: string;
104
+ wipeTakedowns: number;
105
+ led: number;
106
+ solo: number;
107
+ }>;
108
+ };
109
+ wiped: {
110
+ observed: number;
111
+ singleTeam: RateEstimate | null;
112
+ singlePlayer: number;
113
+ };
114
+ highlights: string[];
115
+ notes: string[];
116
+ }
117
+ export declare function summarizeStreaks(items: readonly StreakMatchStats[], names: ReadonlyMap<string, string>): StreakSummary;