diff --git a/AutoTrackR2/HomePage.xaml.cs b/AutoTrackR2/HomePage.xaml.cs index 84ee0f7..165dffe 100644 --- a/AutoTrackR2/HomePage.xaml.cs +++ b/AutoTrackR2/HomePage.xaml.cs @@ -192,7 +192,8 @@ public partial class HomePage : UserControl TrackRver = "2.10", Enlisted = playerData?.JoinDate, KillTime = ((DateTimeOffset)DateTime.ParseExact(actorDeathData.Timestamp, "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)).ToUnixTimeSeconds().ToString(), - PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg" + PFP = playerData?.PFPURL ?? "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg", + Hash = WebHandler.GenerateKillHash(actorDeathData.VictimPilot, ((DateTimeOffset)DateTime.ParseExact(actorDeathData.Timestamp, "yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal)).ToUnixTimeSeconds()) }; switch (LocalPlayerData.CurrentGameMode) @@ -205,6 +206,13 @@ public partial class HomePage : UserControl break; } + // Check if this is a duplicate kill + if (WebHandler.IsDuplicateKill(killData.Hash)) + { + Console.WriteLine("Duplicate kill detected, skipping..."); + return; + } + // Add kill to UI Dispatcher.Invoke(() => { diff --git a/AutoTrackR2/KillHistoryManager.cs b/AutoTrackR2/KillHistoryManager.cs index eb6c3a2..65f33ad 100644 --- a/AutoTrackR2/KillHistoryManager.cs +++ b/AutoTrackR2/KillHistoryManager.cs @@ -7,8 +7,8 @@ namespace AutoTrackR2; public class KillHistoryManager { private string _killHistoryPath; - private readonly string _headers = "KillTime,EnemyPilot,EnemyShip,Enlisted,RecordNumber,OrgAffiliation,Player,Weapon,Ship,Method,Mode,GameVersion,TrackRver,Logged,PFP\n"; - + private readonly string _headers = "KillTime,EnemyPilot,EnemyShip,Enlisted,RecordNumber,OrgAffiliation,Player,Weapon,Ship,Method,Mode,GameVersion,TrackRver,Logged,PFP,Hash\n"; + public KillHistoryManager(string logPath) { _killHistoryPath = logPath; @@ -89,8 +89,8 @@ public class KillHistoryManager // Append the new kill data to the CSV file var csv = new StringBuilder(); - csv.AppendLine($"\"{killData.KillTime}\",\"{killData.EnemyPilot}\",\"{killData.EnemyShip}\",\"{killData.Enlisted}\",\"{killData.RecordNumber}\",\"{killData.OrgAffiliation}\",\"{killData.Player}\",\"{killData.Weapon}\",\"{killData.Ship}\",\"{killData.Method}\",\"{killData.Mode}\",\"{killData.GameVersion}\",\"{killData.TrackRver}\",\"{killData.Logged}\",\"{killData.PFP}\""); - + csv.AppendLine($"\"{killData.KillTime}\",\"{killData.EnemyPilot}\",\"{killData.EnemyShip}\",\"{killData.Enlisted}\",\"{killData.RecordNumber}\",\"{killData.OrgAffiliation}\",\"{killData.Player}\",\"{killData.Weapon}\",\"{killData.Ship}\",\"{killData.Method}\",\"{killData.Mode}\",\"{killData.GameVersion}\",\"{killData.TrackRver}\",\"{killData.Logged}\",\"{killData.PFP}\",\"{killData.Hash}\""); + // Check file can be written to try { @@ -138,7 +138,8 @@ public class KillHistoryManager GameVersion = data?[11], TrackRver = data?[12], Logged = data?[13], - PFP = data?[14] + PFP = data?[14], + Hash = data?[15] }); } diff --git a/AutoTrackR2/Util.cs b/AutoTrackR2/Util.cs index f783330..1ba1ada 100644 --- a/AutoTrackR2/Util.cs +++ b/AutoTrackR2/Util.cs @@ -29,4 +29,5 @@ public struct KillData public string? TrackRver; public string? Logged; public string? PFP; + public string? Hash; } \ No newline at end of file diff --git a/AutoTrackR2/WebHandler.cs b/AutoTrackR2/WebHandler.cs index 0d93b48..244d24b 100644 --- a/AutoTrackR2/WebHandler.cs +++ b/AutoTrackR2/WebHandler.cs @@ -6,11 +6,19 @@ using System.Text.RegularExpressions; using AutoTrackR2.LogEventHandlers; using System.Globalization; using System.Security.Cryptography; +using System.Collections.Generic; namespace AutoTrackR2; public static class WebHandler { + private static HashSet<string> _recordedKillHashes = new HashSet<string>(); + + public static bool IsDuplicateKill(string hash) + { + return _recordedKillHashes.Contains(hash); + } + class APIKillData { public string? victim_ship { get; set; } @@ -28,7 +36,7 @@ public static class WebHandler public string hash { get; set; } = string.Empty; } - private static string GenerateKillHash(string victimName, long timestamp) + public static string GenerateKillHash(string victimName, long timestamp) { // Combine victim name and timestamp string combined = $"{victimName}_{timestamp}"; @@ -105,6 +113,15 @@ public static class WebHandler public static async Task SubmitKill(KillData killData) { var timestamp = long.Parse(killData.KillTime!); + var hash = GenerateKillHash(killData.EnemyPilot!, timestamp); + + // Check if this kill has already been recorded + if (_recordedKillHashes.Contains(hash)) + { + Console.WriteLine("Duplicate kill detected, skipping..."); + return; + } + var apiKillData = new APIKillData { victim_ship = killData.EnemyShip, @@ -119,7 +136,7 @@ public static class WebHandler trackr_version = killData.TrackRver, location = killData.Location, time = timestamp, - hash = GenerateKillHash(killData.EnemyPilot!, timestamp) + hash = hash }; if (string.IsNullOrEmpty(apiKillData.rsi)) @@ -175,6 +192,9 @@ public static class WebHandler var responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Response: {responseContent}"); + // Add the hash to our recorded hashes + _recordedKillHashes.Add(hash); + // Only process streamer data if streamlink is enabled if (ConfigManager.StreamlinkEnabled == 1) {