@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.
- package/LICENSE +21 -0
- package/dist/src/analytics.d.ts +176 -0
- package/dist/src/analytics.js +431 -0
- package/dist/src/analytics.js.map +1 -0
- package/dist/src/assistant.d.ts +87 -0
- package/dist/src/assistant.js +310 -0
- package/dist/src/assistant.js.map +1 -0
- package/dist/src/battle.d.ts +280 -0
- package/dist/src/battle.js +1249 -0
- package/dist/src/battle.js.map +1 -0
- package/dist/src/combat-long.d.ts +42 -0
- package/dist/src/combat-long.js +146 -0
- package/dist/src/combat-long.js.map +1 -0
- package/dist/src/combat-quality.d.ts +101 -0
- package/dist/src/combat-quality.js +253 -0
- package/dist/src/combat-quality.js.map +1 -0
- package/dist/src/evaluation-fixtures.d.ts +13 -0
- package/dist/src/evaluation-fixtures.js +144 -0
- package/dist/src/evaluation-fixtures.js.map +1 -0
- package/dist/src/evaluation-replay.d.ts +5 -0
- package/dist/src/evaluation-replay.js +107 -0
- package/dist/src/evaluation-replay.js.map +1 -0
- package/dist/src/evaluation.d.ts +140 -0
- package/dist/src/evaluation.js +180 -0
- package/dist/src/evaluation.js.map +1 -0
- package/dist/src/experiment-store.d.ts +56 -0
- package/dist/src/experiment-store.js +159 -0
- package/dist/src/experiment-store.js.map +1 -0
- package/dist/src/field.d.ts +103 -0
- package/dist/src/field.js +298 -0
- package/dist/src/field.js.map +1 -0
- package/dist/src/fights.d.ts +89 -0
- package/dist/src/fights.js +238 -0
- package/dist/src/fights.js.map +1 -0
- package/dist/src/highlights.d.ts +44 -0
- package/dist/src/highlights.js +153 -0
- package/dist/src/highlights.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/insights.d.ts +44 -0
- package/dist/src/insights.js +343 -0
- package/dist/src/insights.js.map +1 -0
- package/dist/src/intent.d.ts +40 -0
- package/dist/src/intent.js +119 -0
- package/dist/src/intent.js.map +1 -0
- package/dist/src/landing.d.ts +74 -0
- package/dist/src/landing.js +195 -0
- package/dist/src/landing.js.map +1 -0
- package/dist/src/lobby.d.ts +48 -0
- package/dist/src/lobby.js +209 -0
- package/dist/src/lobby.js.map +1 -0
- package/dist/src/match-insight.d.ts +165 -0
- package/dist/src/match-insight.js +542 -0
- package/dist/src/match-insight.js.map +1 -0
- package/dist/src/match-relative.d.ts +73 -0
- package/dist/src/match-relative.js +145 -0
- package/dist/src/match-relative.js.map +1 -0
- package/dist/src/match-story.d.ts +155 -0
- package/dist/src/match-story.js +636 -0
- package/dist/src/match-story.js.map +1 -0
- package/dist/src/profiles.d.ts +41 -0
- package/dist/src/profiles.js +136 -0
- package/dist/src/profiles.js.map +1 -0
- package/dist/src/raw-telemetry-archive.d.ts +29 -0
- package/dist/src/raw-telemetry-archive.js +340 -0
- package/dist/src/raw-telemetry-archive.js.map +1 -0
- package/dist/src/raw-telemetry-backfill.d.ts +28 -0
- package/dist/src/raw-telemetry-backfill.js +144 -0
- package/dist/src/raw-telemetry-backfill.js.map +1 -0
- package/dist/src/research.d.ts +89 -0
- package/dist/src/research.js +376 -0
- package/dist/src/research.js.map +1 -0
- package/dist/src/rhythm.d.ts +104 -0
- package/dist/src/rhythm.js +260 -0
- package/dist/src/rhythm.js.map +1 -0
- package/dist/src/streaks.d.ts +117 -0
- package/dist/src/streaks.js +367 -0
- package/dist/src/streaks.js.map +1 -0
- package/dist/src/style.d.ts +304 -0
- package/dist/src/style.js +1461 -0
- package/dist/src/style.js.map +1 -0
- package/dist/src/tactics.d.ts +88 -0
- package/dist/src/tactics.js +1221 -0
- package/dist/src/tactics.js.map +1 -0
- package/package.json +49 -3
- 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;
|