Team-Silver-Sphere / SquadJS

Squad Server Script Framework
Boost Software License 1.0
166 stars 124 forks source link

DBLog stats revives and teamkills seem wrong in v3 #244

Closed SignalWhisperer closed 2 years ago

SignalWhisperer commented 2 years ago

Description of Issue

We've recently added SquadJS and DBLog to keep track of stats of our players. After adding a leaderboard to our Discord, we noticed something strange. The top #1 teamkiller has 36 teamkills, yet only a single one shows up on BattleMetrics. As I was investigating what was wrong, I noticed a lot of entries in the wounds table for way over 100 damage where teamkill = 1, yet no teamkill on BM. I then looked at the revives table and saw something troubling. Some entries show the players being "revived" by frag grenades, LAVs, and even have "damage" entered. Am I misinterpreting the data or is there something wrong?

Squad Information

System Information

SignalWhisperer commented 2 years ago

Upon further inspection, the top teamkiller had 35 kills in a seeding layer that I have blacklisted for stats, yet it got recorded anyway. They really only have a single TK during a live match, which was caught on BattleMetrics. Still puzzled about the revives.

ect0s commented 2 years ago

This is very likely due to the squad logs missing data.

Under certain circumstances the wound/kill/death log lines will print 'nullptr' instead of a player reference.

What I suspect happened, is these events got misattributed due to a lack of context.

When you look at these entries, is it possible that either the victim or attacker is null?

SignalWhisperer commented 2 years ago

Here are some entries that show the issue:

# dblog_revives
# id, time, woundTime, victimName, victimTeamID, victimSquadID, attackerName, attackerTeamID, attackerSquadID, damage, weapon, teamkill, reviverName, reviverTeamID, reviverSquadID, server, attacker, victim, reviver, match
'48', '2022-06-22 19:03:28', '2022-06-22 18:58:43', 'redacted', '1', '3', NULL, NULL, NULL, '300', 'BP_Soldier_USMC_Marksman_Woodland', '0', 'redacted', '1', '3', '3', NULL, 'redacted', 'redacted', '5'
'49', '2022-06-22 19:03:34', NULL, 'redacted', '1', '2', NULL, NULL, NULL, NULL, NULL, NULL, 'redacted', '1', '5', '3', NULL, 'redacted', 'redacted', '5'
'50', '2022-06-22 19:03:41', NULL, 'redacted', '2', '2', NULL, NULL, NULL, '31', 'BP_M38_DMR_Optic', '0', 'redacted', '2', '4', '3', NULL, 'redacted', 'redacted', '5'
'51', '2022-06-22 19:03:43', NULL, 'redacted', '2', '7', NULL, NULL, NULL, '36.12', 'BP_M240_MGO', '0', 'redacted', '2', '7', '3', NULL, 'redacted', 'redacted', '5'
'52', '2022-06-22 19:03:43', NULL, 'redacted', '1', '5', NULL, NULL, NULL, '60', 'BP_AK74M_1P78', '0', 'redacted', '1', '2', '3', NULL, 'redacted', 'redacted', '5'
'53', '2022-06-22 19:03:43', NULL, 'redacted', '1', '9', NULL, NULL, NULL, '110.661', 'BP_Projectile_30mm_HE_Green', '0', 'redacted', '1', '9', '3', NULL, 'redacted', 'redacted', '5'
'54', '2022-06-22 19:03:55', NULL, 'redacted', '2', '3', NULL, NULL, NULL, '36.12', 'BP_M240_MGO', '0', 'redacted', '2', '7', '3', NULL, 'redacted', 'redacted', '5'
'55', '2022-06-22 19:04:13', NULL, 'redacted', '2', '2', NULL, NULL, NULL, '36.12', 'BP_M240_MGO', '0', 'redacted', '2', '7', '3', NULL, 'redacted', 'redacted', '5'
'56', '2022-06-22 19:04:28', NULL, 'redacted', '1', '5', NULL, NULL, NULL, '60', 'BP_AK74M_1P78', '0', 'redacted', '1', '2', '3', NULL, 'redacted', 'redacted', '5'
'57', '2022-06-22 19:04:55', NULL, 'redacted', '1', '2', NULL, NULL, NULL, '60', 'BP_AK74M_1P78', '0', 'redacted', '1', '2', '3', NULL, 'redacted', 'redacted', '5'
'58', '2022-06-22 19:05:05', NULL, 'redacted', '2', '7', NULL, NULL, NULL, '26.04', 'BP_M16A4_M150_Foregrip_Tracer', '0', 'redacted', '2', '4', '3', NULL, 'redacted', 'redacted', '5'
'59', '2022-06-22 19:05:17', '2022-06-22 19:02:50', 'redacted', '1', '3', NULL, NULL, NULL, '60', 'BP_AK74M_1P78', NULL, 'redacted', '1', '5', '3', NULL, 'redacted', 'redacted', '5'
'60', '2022-06-22 19:05:29', NULL, 'redacted', '1', '5', NULL, NULL, NULL, '60', 'BP_AK74M_1P78', '0', 'redacted', '1', '2', '3', NULL, 'redacted', 'redacted', '5'
'61', '2022-06-22 19:05:36', NULL, 'redacted', '2', '2', NULL, NULL, NULL, '36.12', 'BP_M240_MGO', '0', 'redacted', '2', '7', '3', NULL, 'redacted', 'redacted', '5'

# dblog_matches
# id, dlc, mapClassname, layerClassname, map, layer, startTime, endTime, winner, server
'5', 'BlackCoast', 'Gameplay_Layers', 'Black_Coast_Invasion_v1', NULL, NULL, '2022-06-22 18:42:18', '2022-06-22 19:31:09', NULL, '3'
ect0s commented 2 years ago

So, I had to count the columns,

But the weapon field here, is trying to show what downed the player.

weapon,
 'BP_Soldier_USMC_Marksman_Woodland'
 NULL
 'BP_M38_DMR_Optic'
 'BP_M240_MGO'
 'BP_AK74M_1P78'
 'BP_Projectile_30mm_HE_Green'
 'BP_M240_MGO'
 'BP_M240_MGO'
 'BP_AK74M_1P78'
 'BP_AK74M_1P78'
 'BP_M16A4_M150_Foregrip_Tracer'
 'BP_AK74M_1P78'
 'BP_AK74M_1P78'
 'BP_M240_MGO'

This is the last known source of damage on a player before they get revived, however, in cases where we do not have an attributable source of damage this field can be confusing or incorrect; again because the chain for damage and downs is multiple log lines and squad itself doesn't provide context.

Please correct me if I am misunderstanding you.

SignalWhisperer commented 2 years ago

Makes sense. Thanks a lot for the clarification. It's all good then :)