/
amq-display-answer-time-2.ts
77 lines (63 loc) · 2.35 KB
/
amq-display-answer-time-2.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { onReady } from '../lib/amq/onReady'
import { PlayerAnswerTimeManager } from '../lib/amq/PlayerAnswerTimeManager'
onReady(() => {
const ignoredPlayerIds: number[] = []
const playerAnswers = new PlayerAnswerTimeManager()
const formatAnswerTime = (playerId: number): string | null => {
const time = playerAnswers.query(playerId)
if (time === null) {
return null
}
const isLightning = playerAnswers.isFirst(playerId)
return `${isLightning ? '⚡ ' : ''}${(time / 1000).toFixed(2)} s`
}
new Listener('Game Starting', ({ players }) => {
ignoredPlayerIds.splice(0)
const player = players.find((p) => p.name === unsafeWindow.selfName)
if (player === undefined) {
return
}
// チーム戦ではなければプレイヤーを除外しない
const { teamNumber } = player
if (teamNumber === null) {
return
}
const teamMates = players.filter((p) => p.teamNumber === teamNumber)
if (teamMates.length > 1) {
ignoredPlayerIds.push(...teamMates.map((p) => p.gamePlayerId))
}
}).bindListener()
new Listener('player answered', (event) => {
for (const playerId of event.filter((id) => !ignoredPlayerIds.includes(id))) {
const time = formatAnswerTime(playerId)
if (time !== null) {
const player = unsafeWindow.quiz.players[playerId]
if (player !== undefined) {
player.answer = time
}
}
}
}).bindListener()
unsafeWindow.quiz._playerAnswerListner = new Listener('player answers', (event) => {
for (const answer of event.answers) {
const time = formatAnswerTime(answer.gamePlayerId)
const text = time !== null ? `${answer.answer} (${time})` : answer.answer
const player = unsafeWindow.quiz.players[answer.gamePlayerId]
if (player !== undefined) {
player.answer = text
player.unknownAnswerNumber = answer.answerNumber
player.toggleTeamAnswerSharing(false)
}
}
if (!unsafeWindow.quiz.isSpectator) {
unsafeWindow.quiz.answerInput?.showSubmitedAnswer()
unsafeWindow.quiz.answerInput?.resetAnswerState()
}
unsafeWindow.quiz.videoTimerBar.updateState(event.progressBarState)
})
AMQ_addScriptData({
name: 'Display Answer Time 2',
author: 'SlashNephy <spica@starry.blue>',
description: 'Display player answer time in seconds.',
})
})