fix incorrect KD caused by weapon processing

This commit is contained in:
2023-04-20 19:06:48 +02:00
parent ebbc2c646f
commit 9caeb0fd57
3 changed files with 32 additions and 16 deletions
+12 -9
View File
@@ -73,20 +73,23 @@ router.get(
allData allData
.filter((e) => filters(e, req.query)) .filter((e) => filters(e, req.query))
.forEach((e) => { .forEach((e) => {
if (!data[e[index]]) if (!e.cause_of_death || !e.attacker_id || !e.map || !e.servername || !e.game_mode) return
data[e[index]] = { const requestIndex = e[index]
if (!requestIndex) return
if (!data[requestIndex])
data[requestIndex] = {
deaths: 0, deaths: 0,
kills: 0, kills: 0,
max_distance: 0, max_distance: 0,
total_distance: 0 total_distance: 0
} }
if (index === 'attacker_id') data[e[index]].username = e.attacker_name if (index === 'attacker_id') data[requestIndex].username = e.attacker_name
if (index === 'servername') data[e[index]].host = e.host if (index === 'servername') data[requestIndex].host = e.host
data[e[index]].deaths += Number(e.deaths) data[requestIndex].deaths += Number(e.deaths)
data[e[index]].kills += Number(e.kills) data[requestIndex].kills += Number(e.kills)
data[e[index]].total_distance += Number(e.total_distance) data[requestIndex].total_distance += Number(e.total_distance)
data[e[index]].max_distance = Math.max( data[requestIndex].max_distance = Math.max(
data[e[index]].max_distance, data[requestIndex].max_distance,
Number(e.max_distance) Number(e.max_distance)
) )
}) })
+1 -1
View File
@@ -69,7 +69,7 @@ export default async function listenKills() {
killEntry.kills++ killEntry.kills++
killEntry.total_distance += payload.distance killEntry.total_distance += payload.distance
killEntry.max_distance = Math.max(killEntry.max_distance, payload.distance) killEntry.max_distance = Math.max(killEntry.max_distance || 0, payload.distance)
deathEntry.deaths++ deathEntry.deaths++
}) })
return pgClient return pgClient
+19 -6
View File
@@ -62,7 +62,8 @@ async function processGlobalStats() {
.select([ .select([
count<number>('id').as('deaths'), count<number>('id').as('deaths'),
'victim_id', 'victim_id',
'victim_current_weapon', sql<string>`last(victim_name)`.as('victim_name'),
'cause_of_death',
'map', 'map',
'game_mode', 'game_mode',
'servername', 'servername',
@@ -70,7 +71,7 @@ async function processGlobalStats() {
]) ])
.groupBy([ .groupBy([
'victim_id', 'victim_id',
'victim_current_weapon', 'cause_of_death',
'map', 'map',
'servername', 'servername',
'host', 'host',
@@ -78,17 +79,29 @@ async function processGlobalStats() {
]) ])
) )
.selectFrom('kills') .selectFrom('kills')
.leftJoin('deaths', (join) => .fullJoin('deaths', (join) =>
join join
.onRef('deaths.victim_id', '=', 'kills.attacker_id') .onRef('deaths.victim_id', '=', 'kills.attacker_id')
.onRef('deaths.victim_current_weapon', '=', 'kills.cause_of_death') .onRef('deaths.cause_of_death', '=', 'kills.cause_of_death')
.onRef('deaths.servername', '=', 'kills.servername') .onRef('deaths.servername', '=', 'kills.servername')
.onRef('deaths.host', '=', 'kills.host') .onRef('deaths.host', '=', 'kills.host')
.onRef('deaths.game_mode', '=', 'kills.game_mode') .onRef('deaths.game_mode', '=', 'kills.game_mode')
.onRef('deaths.map', '=', 'kills.map') .onRef('deaths.map', '=', 'kills.map')
) )
.selectAll('kills') //.selectAll('kills')
.select(sql<number>`COALESCE(deaths.deaths, 0)`.as('deaths')) .select([
sql<string>`COALESCE(kills.attacker_name, deaths.victim_name)`.as('attacker_name'),
sql<string>`COALESCE(kills.attacker_id, deaths.victim_id)`.as('attacker_id'),
sql<number>`COALESCE(kills.kills, 0)`.as('kills'),
sql<number>`COALESCE(kills.total_distance, 0)`.as('total_distance'),
sql<number>`COALESCE(kills.max_distance, 0)`.as('max_distance'),
sql<number>`COALESCE(deaths.deaths, 0)`.as('deaths'),
sql<string>`COALESCE(kills.servername, deaths.servername)`.as('servername'),
sql<number>`COALESCE(kills.host, deaths.host)`.as('host'),
sql<string>`COALESCE(kills.cause_of_death, deaths.cause_of_death)`.as('cause_of_death'),
sql<string>`COALESCE(kills.map, deaths.map)`.as('map'),
sql<string>`COALESCE(kills.game_mode, deaths.game_mode)`.as('game_mode'),
])
.execute() .execute()
} }
export default processAll export default processAll