From 43a13a88f47d899ca8efcc8a2093f5bd4191cd48 Mon Sep 17 00:00:00 2001 From: Linrador <68631622+Linrador@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:33:02 +0200 Subject: [PATCH] updated --- .../CS2WebSocketTelemetryPlugin.cs | 1129 +++++++++++++++-- .../net8.0/CS2WebSocketTelemetryPlugin.dll | Bin 40960 -> 92160 bytes .../net8.0/CS2WebSocketTelemetryPlugin.pdb | Bin 19628 -> 26660 bytes .../bin/Release/net8.0/config.json | 6 + ...S2WebSocketTelemetryPlugin.AssemblyInfo.cs | 2 +- ...etTelemetryPlugin.AssemblyInfoInputs.cache | 2 +- ...S2WebSocketTelemetryPlugin.AssemblyInfo.cs | 2 +- ...etTelemetryPlugin.AssemblyInfoInputs.cache | 2 +- .../net8.0/CS2WebSocketTelemetryPlugin.dll | Bin 40960 -> 92160 bytes .../net8.0/CS2WebSocketTelemetryPlugin.pdb | Bin 19628 -> 26660 bytes .../ref/CS2WebSocketTelemetryPlugin.dll | Bin 10752 -> 16896 bytes .../refint/CS2WebSocketTelemetryPlugin.dll | Bin 10752 -> 16896 bytes 12 files changed, 1062 insertions(+), 81 deletions(-) create mode 100644 CS2WebSocketTelemetryPlugin/bin/Release/net8.0/config.json diff --git a/CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs b/CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs index 5d6d69a..b5dd042 100644 --- a/CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs +++ b/CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs @@ -1,9 +1,15 @@ -using System; +// CS2WebSocketTelemetryPlugin.cs + +using System; +using System.Collections; using System.Collections.Concurrent; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Net.Sockets; using System.Net.Security; +using System.Reflection; using System.Security.Authentication; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; @@ -25,16 +31,16 @@ namespace WsTelemetry; public class WebSocketTelemetryPlugin : BasePlugin { public override string ModuleName => "WS Telemetry"; - public override string ModuleVersion => "1.2.0"; + public override string ModuleVersion => "1.5.2"; public override string ModuleAuthor => "you + ChatGPT"; - public override string ModuleDescription => "WS(S)-Server: broadcastet Spieler-Position/ViewAngles + Nade-Events"; + public override string ModuleDescription => "WS(S)-Server: Spielerpos/aim + Granaten (Tick-Trace/Bounce/Detonate/Path) + Map + Smoke/Fire-Status"; // --- Konfiguration --- private volatile bool _enabled = false; private volatile int _sendHz = 10; private volatile string _mapName = ""; - // Bind-Info: ws://host:port/path oder wss://host:port/path + // WS Bind-Info private volatile string _bindHost = "0.0.0.0"; private volatile int _bindPort = 8081; private volatile string _bindPath = "/telemetry"; @@ -51,6 +57,135 @@ public class WebSocketTelemetryPlugin : BasePlugin private Task? _acceptTask; private volatile bool _serverRunning = false; + // --- Konfigurations-Laden --- + private const string ConfigFileName = "config.json"; + + private sealed class Cfg + { + public string? Url { get; set; } + public string? CertPath { get; set; } + public string? CertPassword { get; set; } + public int? SendHz { get; set; } + } + + + private void LoadAndApplyConfig(bool generateIfMissing = true) + { + try + { + var path = Path.Combine(ModuleDirectory, ConfigFileName); + + if (!File.Exists(path) && generateIfMissing) + { + var example = new Cfg + { + Url = $"{(_useTls ? "wss" : "ws")}://{_bindHost}:{_bindPort}{_bindPath}", + CertPath = string.IsNullOrWhiteSpace(_certPath) ? "cert.pfx" : _certPath, + CertPassword = _certPassword, + SendHz = _sendHz + }; + var jsonEx = JsonSerializer.Serialize(example, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(path, jsonEx, Encoding.UTF8); + Logger.LogInformation($"[WS] Beispiel-Konfiguration erzeugt: {path}"); + } + + if (!File.Exists(path)) + { + Logger.LogWarning($"[WS] Keine {ConfigFileName} gefunden. Verwende Defaults."); + return; + } + + var json = File.ReadAllText(path, Encoding.UTF8); + var cfg = JsonSerializer.Deserialize( + json, + new JsonSerializerOptions { PropertyNameCaseInsensitive = true } + ) ?? new Cfg(); + + // URL anwenden + if (!string.IsNullOrWhiteSpace(cfg.Url)) + { + if (Uri.TryCreate(cfg.Url, UriKind.Absolute, out var uri) && (uri.Scheme == "ws" || uri.Scheme == "wss")) + { + _useTls = uri.Scheme == "wss"; + _bindHost = string.IsNullOrWhiteSpace(uri.Host) ? "0.0.0.0" : uri.Host; + _bindPort = uri.IsDefaultPort ? (_useTls ? 443 : 80) : uri.Port; + _bindPath = string.IsNullOrEmpty(uri.AbsolutePath) ? "/" : uri.AbsolutePath; + if (_bindHost == "127.0.0.1") _bindHost = "0.0.0.0"; + } + else + { + Logger.LogWarning($"[WS] Ungültige URL in {ConfigFileName}: '{cfg.Url}'"); + } + } + + // Zertifikat anwenden + if (!string.IsNullOrWhiteSpace(cfg.CertPath)) + { + _certPath = Path.IsPathRooted(cfg.CertPath) + ? cfg.CertPath + : Path.Combine(ModuleDirectory, cfg.CertPath); + _serverCert = null; // beim nächsten Start neu laden + } + if (cfg.CertPassword != null) + { + _certPassword = cfg.CertPassword; + _serverCert = null; + } + + // Sendefrequenz + if (cfg.SendHz is int hz && hz >= 1 && hz <= 128) _sendHz = hz; + + // Durations bleiben hart verdrahtet + _smokeDurationSec = SMOKE_DURATION_SEC; + _fireDurationSec = FIRE_DURATION_SEC; + + Logger.LogInformation($"[WS] Konfiguration geladen ({_bindHost}:{_bindPort}{_bindPath}, tls={_useTls}, hz={_sendHz})"); + } + catch (Exception ex) + { + Logger.LogError($"[WS] Konnte {ConfigFileName} nicht laden/anwenden: {ex.Message}"); + } + } + + private void SaveConfig() + { + try + { + var path = Path.Combine(ModuleDirectory, ConfigFileName); + + // URL aus aktuellen Feldern zusammensetzen + var url = $"{(_useTls ? "wss" : "ws")}://{_bindHost}:{_bindPort}{_bindPath}"; + + // CertPath möglichst relativ speichern + var cp = _certPath; + try + { + if (!string.IsNullOrWhiteSpace(cp)) + { + if (Path.IsPathRooted(cp) && cp.StartsWith(ModuleDirectory, StringComparison.OrdinalIgnoreCase)) + cp = Path.GetRelativePath(ModuleDirectory, cp); + } + } + catch { /* not fatal */ } + + var cfg = new Cfg + { + Url = url, + CertPath = cp, + CertPassword = _certPassword, + SendHz = _sendHz + }; + + var json = JsonSerializer.Serialize(cfg, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(path, json, Encoding.UTF8); + Logger.LogInformation($"[WS] Konfiguration gespeichert: {path}"); + } + catch (Exception ex) + { + Logger.LogError($"[WS] Konnte Konfiguration nicht speichern: {ex.Message}"); + } + } + private class ClientState { public required TcpClient Tcp; @@ -62,7 +197,7 @@ public class WebSocketTelemetryPlugin : BasePlugin private readonly ConcurrentDictionary _clients = new(); private int _clientSeq = 0; - // --- Outgoing Queue (für Events) --- + // --- Outgoing Queue --- private readonly ConcurrentQueue _outbox = new(); private readonly AutoResetEvent _sendSignal = new(false); @@ -71,16 +206,241 @@ public class WebSocketTelemetryPlugin : BasePlugin private const double MaxFrameDt = 0.25; private DateTime _lastTick = DateTime.UtcNow; - public override void Load(bool hotReload) - { - Logger.LogInformation("[WS] Plugin geladen. Kommandos: css_ws_enable, css_ws_url, css_ws_rate, css_ws_cert, css_ws_certpwd"); - RegisterListener(OnTick); + // --- Nade Runtime-Status --- + private int _seq = 0; // globale Sequenz (für Nade/Trace IDs) - // Mapname initial erfassen und auf Mapwechsel reagieren - _mapName = Server.MapName ?? ""; - RegisterListener(OnMapStart); + // Fest verdrahtete Zeiten (nicht änderbar) + private const double SMOKE_DURATION_SEC = 20.0; + private const double FIRE_DURATION_SEC = 7.0; + + // interner Zugriff bleibt über Felder, die auf die Konstanten gesetzt werden + private double _smokeDurationSec = SMOKE_DURATION_SEC; + private double _fireDurationSec = FIRE_DURATION_SEC; + + private class AoeState + { + public required DateTimeOffset EndAt; + public required float X; + public required float Y; + public required float Z; } + private readonly ConcurrentDictionary _activeSmokes = new(); + private readonly ConcurrentDictionary _activeFires = new(); + + // --- Trajektorien-Tracking --- + private class NadeTrack + { + public int Id; + public ulong SteamId; + public string Nade = ""; + public DateTimeOffset Start; + public DateTimeOffset Last; + public bool Finalized; + + public object? BoundEntity; + public string? BoundName; + public float LastX, LastY, LastZ; + + public int Sent = 0; // bereits gesendete Punkte + public int CurrentSeg = 0; // aktuelle Segment-ID (0-basiert) + + public readonly List Points = new(); + public class Point { public float X; public float Y; public float Z; public long T; public int S; } + } + + // Alle Tracks by id + private readonly ConcurrentDictionary _tracks = new(); + // Letzter aktiver Track je Spieler (für grenade_bounce ohne Typ) + private readonly ConcurrentDictionary _lastTrackByPlayer = new(); + // Aktiver Track je Spieler+Nade (für eindeutiges Finalisieren) + private readonly ConcurrentDictionary _activeTrackByPlayerNade = new(); + + private static string PNKey(ulong steamId, string nade) => $"{steamId}:{nade}"; + + // --- Entity-Suche via Reflection --- + private static MethodInfo? _miFindByDesigner; + private static MethodInfo? _miFindByClass; + + private static IEnumerable FindEntitiesByName(string name) + { + _miFindByDesigner ??= typeof(Utilities).GetMethod("FindAllEntitiesByDesignerName", BindingFlags.Public | BindingFlags.Static); + _miFindByClass ??= typeof(Utilities).GetMethod("FindAllEntitiesByClassname", BindingFlags.Public | BindingFlags.Static); + + IEnumerable? ie = null; + try + { + if (_miFindByDesigner != null) + ie = _miFindByDesigner.Invoke(null, new object[] { name }) as IEnumerable; + if (ie == null && _miFindByClass != null) + ie = _miFindByClass.Invoke(null, new object[] { name }) as IEnumerable; + } + catch { } + + if (ie == null) yield break; + foreach (var e in ie) if (e != null) yield return e; + } + + private static bool TryGetPos(object ent, out float x, out float y, out float z) + { + try + { + dynamic d = ent; + var pos = d.AbsOrigin; + x = (float)pos.X; y = (float)pos.Y; z = (float)pos.Z; + return true; + } + catch + { + x = y = z = 0; + return false; + } + } + private static bool IsEntValid(object ent) + { + try { dynamic d = ent; return d != null && d.IsValid; } + catch { return ent != null; } + } + + // --- Stabiler Aim --- + private readonly ConcurrentDictionary _lastAimByPlayer = new(); + + private static long NowMs() => DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + private static bool IsFinite(float v) => !(float.IsNaN(v) || float.IsInfinity(v)) && Math.Abs(v) < 1e6; + + private static float NormalizeYaw(float yaw) + { + yaw %= 360f; + if (yaw < 0) yaw += 360f; + return yaw; + } + private static float ClampPitch(float pitch) + { + if (pitch < -89f) pitch = -89f; + if (pitch > 89f) pitch = 89f; + return pitch; + } + + // -- Camera-gesteuerte Blickrichtung -- + private static bool TryReadAngles(dynamic src, out float pitch, out float yaw, out float roll) + { + // Fallback-Init, damit out immer gesetzt ist + pitch = 0f; yaw = 0f; roll = 0f; + + try { var a = src.EyeAngles; pitch = (float)a.X; yaw = (float)a.Y; roll = (float)a.Z; if (IsFinite(pitch) && IsFinite(yaw)) return true; } catch { } + try { var a = src.AbsRotation; pitch = (float)a.X; yaw = (float)a.Y; roll = (float)a.Z; if (IsFinite(pitch) && IsFinite(yaw)) return true; } catch { } + try { var a = src.ViewAngles; pitch = (float)a.X; yaw = (float)a.Y; roll = (float)a.Z; if (IsFinite(pitch) && IsFinite(yaw)) return true; } catch { } + try { pitch = (float)src.Pitch; yaw = (float)src.Yaw; roll = 0f; if (IsFinite(pitch) && IsFinite(yaw)) return true; } catch { } + + // bleibt false; out sind bereits gesetzt + return false; + } + + private static bool TryGetCameraAnglesFromRoot(dynamic root, out float pitch, out float yaw, out float roll) + { + // out-Parameter VOR jeglicher Logik initialisieren (fix für CS0177) + pitch = 0f; yaw = 0f; roll = 0f; + + // 1) Aktive Kamera-Entity über CameraServices + try + { + dynamic cs = root.CameraServices; + dynamic h = (cs != null) ? cs.m_hActiveCamera : null; + dynamic cam = (h != null ? h.Value : null) ?? cs?.ActiveCamera ?? root.Camera; + if (cam != null && TryReadAngles(cam, out pitch, out yaw, out roll)) + return true; + } + catch { } + + // 2) Winkel direkt aus CameraServices + try + { + dynamic cs = root.CameraServices; + if (cs != null && TryReadAngles(cs, out pitch, out yaw, out roll)) + return true; + } + catch { } + + // 3) Letzter Versuch: direkt am Root + return TryReadAngles(root, out pitch, out yaw, out roll); + } + + private static bool TryGetCameraAngles(CCSPlayerController p, dynamic pawn, out float pitch, out float yaw, out float roll) + { + // out-Defaults + pitch = 0f; yaw = 0f; roll = 0f; + + if (pawn != null && TryGetCameraAnglesFromRoot(pawn, out pitch, out yaw, out roll)) + return true; + + if (TryGetCameraAnglesFromRoot(p, out pitch, out yaw, out roll)) + return true; + + return false; + } + + private (float pitch, float yaw) StoreAim(CCSPlayerController p, float pitch, float yaw) + { + var sid = p.AuthorizedSteamID?.SteamId64 ?? 0UL; + _lastAimByPlayer[sid] = (pitch, yaw); + return (pitch, yaw); + } + + private (float pitch, float yaw) GetStableAim(CCSPlayerController p, dynamic pawn) + { + // 0) Kamera-Winkel bevorzugen + float cp, cy, cr; + if (TryGetCameraAngles(p, pawn, out cp, out cy, out cr)) + return StoreAim(p, ClampPitch(cp), NormalizeYaw(cy)); + + // 1) Fallback: Pawn EyeAngles + try + { + dynamic a = pawn?.EyeAngles; + float px = (float)a.X, py = (float)a.Y; + if (IsFinite(px) && IsFinite(py)) + return StoreAim(p, ClampPitch(px), NormalizeYaw(py)); + } + catch { } + + // 2) Fallback: AbsRotation (Yaw), Pitch aus letztem Wert + try + { + dynamic r = pawn?.AbsRotation; + float yaw = (float)r.Y; + if (IsFinite(yaw)) + { + var sid = p.AuthorizedSteamID?.SteamId64 ?? 0UL; + float pitch = _lastAimByPlayer.TryGetValue(sid, out var last) ? last.pitch : 0f; + return StoreAim(p, pitch, NormalizeYaw(yaw)); + } + } + catch { } + + // 3) Letzter gültiger Aim oder neutral + { + var sid = p.AuthorizedSteamID?.SteamId64 ?? 0UL; + if (_lastAimByPlayer.TryGetValue(sid, out var last)) return last; + return (0f, 0f); + } + } + + public override void Load(bool hotReload) + { + Logger.LogInformation("[WS] Plugin geladen. Kommandos: css_ws_enable, css_ws_reloadcfg, css_ws_url, css_ws_rate, css_ws_cert, css_ws_certpwd, css_ws_sendmap"); + + RegisterListener(OnTick); + + _mapName = Server.MapName ?? ""; + RegisterListener(OnMapStart); + + // Konfiguration einlesen (ohne enabled) … + LoadAndApplyConfig(); + + // … und automatisch starten (abschaltbar per css_ws_enable 0) + _enabled = true; + StartWebSocket(); + } public override void Unload(bool hotReload) { @@ -94,13 +454,12 @@ public class WebSocketTelemetryPlugin : BasePlugin { type = "map", name = _mapName, - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + t = NowMs() }); Broadcast(payload); Logger.LogInformation($"[WS] Map gewechselt: '{_mapName}' – an Clients gesendet."); } - // ========================= // Konsolen-Kommandos // ========================= @@ -125,6 +484,25 @@ public class WebSocketTelemetryPlugin : BasePlugin else StopWebSocket(); } + [ConsoleCommand("css_ws_reloadcfg", "Lädt die config.json neu und startet den WS(S)-Server ggf. neu")] + public void CmdReloadCfg(CCSPlayerController? caller, CommandInfo cmd) + { + var wasEnabled = _enabled; + + LoadAndApplyConfig(generateIfMissing: false); + + if (wasEnabled) + { + StopWebSocket(); + StartWebSocket(); + cmd.ReplyToCommand("[WS] Konfiguration neu geladen und Server neu gestartet."); + } + else + { + cmd.ReplyToCommand("[WS] Konfiguration neu geladen. Server ist deaktiviert (css_ws_enable 1 zum Starten)."); + } + } + [ConsoleCommand("css_ws_sendmap", "Sendet die aktuelle Karte an alle verbundenen Clients")] public void CmdSendMap(CCSPlayerController? caller, CommandInfo cmd) { @@ -132,13 +510,12 @@ public class WebSocketTelemetryPlugin : BasePlugin { type = "map", name = _mapName, - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + t = NowMs() }); Broadcast(payload); cmd.ReplyToCommand($"[WS] Map '{_mapName}' an Clients gesendet."); } - [ConsoleCommand("css_ws_url", "Setzt Bind-Host/Port/Pfad als ws[s]://host:port/path")] [CommandHelper(minArgs: 1, usage: "")] public void CmdUrl(CCSPlayerController? caller, CommandInfo cmd) @@ -159,6 +536,7 @@ public class WebSocketTelemetryPlugin : BasePlugin var scheme = _useTls ? "wss" : "ws"; cmd.ReplyToCommand($"[WS] Bind = {scheme}://{_bindHost}:{_bindPort}{_bindPath}"); + SaveConfig(); if (_enabled) { StopWebSocket(); StartWebSocket(); } } @@ -169,6 +547,7 @@ public class WebSocketTelemetryPlugin : BasePlugin if (int.TryParse(cmd.GetArg(1), out var hz) && hz > 0 && hz <= 128) { _sendHz = hz; + SaveConfig(); cmd.ReplyToCommand($"[WS] Sendefrequenz = {_sendHz} Hz"); } else cmd.ReplyToCommand("[WS] Ungültig. Bereich: 1..128"); @@ -182,6 +561,7 @@ public class WebSocketTelemetryPlugin : BasePlugin _certPath = Path.IsPathRooted(input) ? input : Path.Combine(ModuleDirectory, input); _serverCert = null; // neu laden beim Start cmd.ReplyToCommand($"[WS] Zertifikatspfad gesetzt: '{_certPath}'"); + SaveConfig(); if (_enabled && _useTls) { StopWebSocket(); StartWebSocket(); } } @@ -193,6 +573,7 @@ public class WebSocketTelemetryPlugin : BasePlugin _certPassword = pwd == "-" ? "" : pwd; _serverCert = null; // neu laden beim Start cmd.ReplyToCommand($"[WS] Zertifikatspasswort {(string.IsNullOrEmpty(_certPassword) ? "gelöscht" : "gesetzt")}."); + SaveConfig(); if (_enabled && _useTls) { StopWebSocket(); StartWebSocket(); } } @@ -214,8 +595,18 @@ public class WebSocketTelemetryPlugin : BasePlugin if (_accumulator < targetDt) return; _accumulator = 0; - var list = new System.Collections.Generic.List(); + // verwaiste Tracks aufräumen (Failsafe, 15s) + foreach (var kv in _tracks) + { + var tr = kv.Value; + if (!tr.Finalized && (DateTimeOffset.UtcNow - tr.Last).TotalSeconds > 15) + { + TryFinalizeTrackById(tr.Id, sendEvenIfEmpty: true, nadeOverride: tr.Nade); + } + } + // --- Spieler sammeln --- + var playersList = new List(); foreach (var p in Utilities.GetPlayers()) { try @@ -229,62 +620,577 @@ public class WebSocketTelemetryPlugin : BasePlugin if (pawn == null) continue; var pos = pawn.AbsOrigin; - var ang = pawn.EyeAngles; - list.Add(new + // stabile Blickrichtung + var (aimPitch, aimYaw) = GetStableAim(p, pawn); + + // Bewegungsrichtung aus Velocity (2D) + float dirYaw = 0f, speed2D = 0f; + float vx = 0f, vy = 0f, vz = 0f; + try + { + var vel = pawn.AbsVelocity; + vx = vel.X; vy = vel.Y; vz = vel.Z; + speed2D = MathF.Sqrt(vx * vx + vy * vy); + if (speed2D > 1f) + dirYaw = NormalizeYaw((float)(Math.Atan2(vy, vx) * 180.0 / Math.PI)); + } + catch { } + + // rohe Pawn-Angles (Debug/Kompat) + float rawPitch = 0f, rawYaw = 0f, rawRoll = 0f; + try + { + var ar = pawn.EyeAngles; + rawPitch = ar.X; rawYaw = ar.Y; rawRoll = ar.Z; + } + catch { } + + playersList.Add(new { steamId = p.AuthorizedSteamID?.SteamId64 ?? 0UL, name = p.PlayerName, team = p.TeamNum, pos = new { x = pos.X, y = pos.Y, z = pos.Z }, - view = new { pitch = ang.X, yaw = ang.Y, roll = ang.Z } + + // stabilisierte Blickrichtung (nutzen!) + view = new { pitch = aimPitch, yaw = aimYaw, roll = 0f }, + aim = new { pitch = aimPitch, yaw = aimYaw }, + + // optional: rohe Werte + viewRaw = new { pitch = rawPitch, yaw = rawYaw, roll = rawRoll }, + + move = new + { + dirYaw = speed2D > 1f ? dirYaw : (float?)null, + speed = speed2D, + vel = new { x = vx, y = vy, z = vz } + } }); } catch { } } - if (list.Count == 0) return; + // --- Nade-Trace pro Tick sammeln --- + var traceList = new List(); + + // Sammeln/Updaten der aktiven Projektile (füllt nur Track-Punkte) + SampleActiveNadeTracks(); + + // --- Nade-Path Realtime-Streaming pro Tick --- + foreach (var tr in _tracks.Values) + { + if (tr.Finalized) continue; + + int from, to; + List delta = null!; + lock (tr.Points) + { + from = tr.Sent; + to = tr.Points.Count; + if (to > from) + { + delta = new List(to - from); + for (int i = from; i < to; i++) + { + var p = tr.Points[i]; + delta.Add(new { x = p.X, y = p.Y, z = p.Z, t = p.T, s = p.S }); + } + tr.Sent = to; + } + } + + if (delta != null && delta.Count > 0) + { + Enqueue(new + { + type = "nade", + sub = "path", + id = tr.Id, + nade = tr.Nade, + steamId = tr.SteamId, + t = NowMs(), + points = delta, + final = false + }); + } + } + + // aktive Nades (letzte bekannte Position) + var activeList = new List(); + foreach (var tr in _tracks.Values) + { + if (tr.Finalized) continue; + activeList.Add(new + { + id = tr.Id, + nade = tr.Nade, + steamId = tr.SteamId, + pos = new { x = tr.LastX, y = tr.LastY, z = tr.LastZ } + }); + } + + if (playersList.Count == 0 && traceList.Count == 0 && activeList.Count == 0) return; var payload = new { type = "tick", - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), - players = list + t = NowMs(), + players = playersList, + nades = (activeList.Count > 0 || traceList.Count > 0) + ? new { trace = traceList, active = activeList } + : null }; Broadcast(JsonSerializer.Serialize(payload)); } + // ========================= + // Sampling der aktiven Projektile + // ========================= + + private static readonly Dictionary _kindToNames = new() + { + ["he"] = new[] { "hegrenade_projectile" }, + ["flash"] = new[] { "flashbang_projectile" }, + ["smoke"] = new[] { "smokegrenade_projectile" }, + ["decoy"] = new[] { "decoy_projectile" }, + ["molotov"] = new[] { "molotov_projectile", "incgrenade_projectile" }, + ["other"] = new[] { "grenade_projectile" } // Fallback + }; + + private IEnumerable<(object ent, string name, float x, float y, float z)> EnumerateProjectilesFor(string kind) + { + if (!_kindToNames.TryGetValue(kind, out var names)) names = _kindToNames["other"]; + + foreach (var nm in names) + { + foreach (var e in FindEntitiesByName(nm)) + { + if (e == null || !IsEntValid(e)) continue; + if (TryGetPos(e, out var x, out var y, out var z)) + yield return (e, nm, x, y, z); + } + } + } + + private void SampleActiveNadeTracks() + { + var neededKinds = _tracks.Values.Where(t => !t.Finalized).Select(t => t.Nade).Distinct().ToList(); + var poolByKind = new Dictionary>(); + foreach (var k in neededKinds) + poolByKind[k] = EnumerateProjectilesFor(k).ToList(); + + var usedEnts = new HashSet(ReferenceEqualityComparer.Instance); + + foreach (var kv in _tracks) + { + var tr = kv.Value; + if (tr.Finalized) continue; + + if (tr.BoundEntity == null) + { + if (!poolByKind.TryGetValue(tr.Nade, out var list) || list.Count == 0) continue; + + var best = list + .Where(tpl => !usedEnts.Contains(tpl.ent)) + .Select(tpl => new { tpl.ent, tpl.name, tpl.x, tpl.y, tpl.z, dist2 = Dist2(tr.LastX, tr.LastY, tr.LastZ, tpl.x, tpl.y, tpl.z) }) + .OrderBy(a => a.dist2) + .FirstOrDefault(); + + // NEU: altersabhängiger Fangradius + sanfter Fallback + var ageSec = (float)(DateTimeOffset.UtcNow - tr.Start).TotalSeconds; + + // wächst schnell an, deckelt bei 4500u (ca. halbe Mapbreite) + var maxDist = MathF.Min(4500f, 300f + ageSec * 2500f); + var maxDist2 = maxDist * maxDist; + + if (best != null && best.dist2 <= maxDist2) + { + tr.BoundEntity = best.ent; + tr.BoundName = best.name; + tr.LastX = best.x; tr.LastY = best.y; tr.LastZ = best.z; + tr.Last = DateTimeOffset.UtcNow; + + var tms = NowMs(); + lock (tr.Points) + tr.Points.Add(new NadeTrack.Point { X = best.x, Y = best.y, Z = best.z, T = tms, S = tr.CurrentSeg }); + + usedEnts.Add(best.ent); + } + else if (best != null && tr.Points.Count <= 1) + { + // Fallback: ganz am Anfang binden wir notfalls trotzdem den nächsten Kandidaten, + // damit sofort Bewegungsdaten fließen (vermeidet "nur Wurf+Detonate"). + tr.BoundEntity = best.ent; + tr.BoundName = best.name; + tr.LastX = best.x; tr.LastY = best.y; tr.LastZ = best.z; + tr.Last = DateTimeOffset.UtcNow; + + var tms = NowMs(); + lock (tr.Points) + tr.Points.Add(new NadeTrack.Point { X = best.x, Y = best.y, Z = best.z, T = tms, S = tr.CurrentSeg }); + + usedEnts.Add(best.ent); + } + } + else + { + var ent = tr.BoundEntity; + if (ent == null || !IsEntValid(ent)) continue; + + if (TryGetPos(ent, out var ex, out var ey, out var ez)) + { + if (Dist2(tr.LastX, tr.LastY, tr.LastZ, ex, ey, ez) > 0.1f * 0.1f) + { + var tms = NowMs(); + lock (tr.Points) + tr.Points.Add(new NadeTrack.Point { X = ex, Y = ey, Z = ez, T = tms, S = tr.CurrentSeg }); + + tr.LastX = ex; tr.LastY = ey; tr.LastZ = ez; + tr.Last = DateTimeOffset.UtcNow; + } + } + } + } + } + + private static float Dist2(float ax, float ay, float az, float bx, float by, float bz) + { + float dx = ax - bx, dy = ay - by, dz = az - bz; + return dx * dx + dy * dy + dz * dz; + } + + private static bool LooksAirburst(NadeTrack tr) + { + if (tr.Points.Count < 2) return false; + var a = tr.Points[^1]; + var b = tr.Points[^2]; + var dtMs = Math.Max(1, a.T - b.T); + var dist = MathF.Sqrt(Dist2(a.X, a.Y, a.Z, b.X, b.Y, b.Z)); + var speed3D = 1000f * dist / dtMs; // units/s + var vz = 1000f * Math.Abs(a.Z - b.Z) / dtMs; // vertikale speed + return speed3D > 250f || vz > 120f; + } + // ========================= // Game-Events: Granaten // ========================= + private static string WeaponToKind(string weapon) + { + var w = (weapon ?? "").ToLowerInvariant(); + return w switch + { + "hegrenade" or "weapon_hegrenade" => "he", + "flashbang" or "weapon_flashbang" => "flash", + "smokegrenade" or "weapon_smokegrenade" => "smoke", + "decoy" or "weapon_decoy" => "decoy", + "molotov" or "weapon_molotov" or "incgrenade" or "weapon_incgrenade" => "molotov", + _ => "other" + }; + } + + private int StartTrack(ulong steamId, string nade, float x, float y, float z) + { + var id = Interlocked.Increment(ref _seq); + var tr = new NadeTrack + { + Id = id, + SteamId = steamId, + Nade = nade, + Start = DateTimeOffset.UtcNow, + Last = DateTimeOffset.UtcNow, + LastX = x, LastY = y, LastZ = z, + Sent = 0, + CurrentSeg = 0 + }; + tr.Points.Add(new NadeTrack.Point { X = x, Y = y, Z = z, T = NowMs(), S = tr.CurrentSeg }); + _tracks[id] = tr; + _lastTrackByPlayer[steamId] = id; + _activeTrackByPlayerNade[PNKey(steamId, nade)] = id; + return id; + } + + private void AppendPointByPlayer(ulong steamId, float x, float y, float z) + { + if (_lastTrackByPlayer.TryGetValue(steamId, out var id) && + _tracks.TryGetValue(id, out var tr) && !tr.Finalized) + { + lock (tr.Points) + { + var tms = NowMs(); + tr.Points.Add(new NadeTrack.Point { X = x, Y = y, Z = z, T = tms, S = tr.CurrentSeg }); + tr.LastX = x; tr.LastY = y; tr.LastZ = z; + tr.Last = DateTimeOffset.UtcNow; + } + } + } + + private void AppendPointByPlayerBounce(ulong steamId, float x, float y, float z) + { + if (_lastTrackByPlayer.TryGetValue(steamId, out var id) && + _tracks.TryGetValue(id, out var tr) && !tr.Finalized) + { + lock (tr.Points) + { + tr.CurrentSeg++; // neues Liniensegment beginnen + var tms = NowMs(); + tr.Points.Add(new NadeTrack.Point { X = x, Y = y, Z = z, T = tms, S = tr.CurrentSeg }); + tr.LastX = x; tr.LastY = y; tr.LastZ = z; + tr.Last = DateTimeOffset.UtcNow; + } + } + } + + private void TryFinalizeTrack(ulong steamId, string nade, float? x, float? y, float? z) + { + var key = PNKey(steamId, nade); + if (!_activeTrackByPlayerNade.TryRemove(key, out var id)) return; + TryFinalizeTrackById(id, true, nade, x, y, z); + _lastTrackByPlayer.TryGetValue(steamId, out var lastId); + if (lastId == id) _lastTrackByPlayer.TryRemove(steamId, out _); + } + + private void TryFinalizeTrackById(int id, bool sendEvenIfEmpty, string? nadeOverride = null, float? x = null, float? y = null, float? z = null) + { + if (!_tracks.TryGetValue(id, out var tr) || tr.Finalized) return; + + if (x.HasValue && y.HasValue && z.HasValue) + { + lock (tr.Points) + { + tr.Points.Add(new NadeTrack.Point { X = x.Value, Y = y.Value, Z = z.Value, T = NowMs(), S = tr.CurrentSeg }); + } + } + + // Rest-Delta senden (falls noch nicht raus) + List? delta = null; + lock (tr.Points) + { + if (tr.Points.Count > tr.Sent) + { + delta = new List(tr.Points.Count - tr.Sent); + for (int i = tr.Sent; i < tr.Points.Count; i++) + { + var p = tr.Points[i]; + delta.Add(new { x = p.X, y = p.Y, z = p.Z, t = p.T, s = p.S }); + } + tr.Sent = tr.Points.Count; + } + } + + tr.Finalized = true; + + // Finale Nachricht + Enqueue(new + { + type = "nade", + sub = "path", + id = tr.Id, + nade = nadeOverride ?? tr.Nade, + steamId = tr.SteamId, + t = NowMs(), + points = (delta != null && delta.Count > 0) ? delta : null, + final = true + }); + + _tracks.TryRemove(id, out _); + } + [GameEventHandler] public HookResult OnGrenadeThrown(EventGrenadeThrown ev, GameEventInfo info) { try { var p = ev.Userid; + var pawn = p?.PlayerPawn?.Value; + var pos = pawn?.AbsOrigin; + var (gaPitch, gaYaw) = GetStableAim(p, pawn); + + string weapon = ev.Weapon ?? ""; + string kind = WeaponToKind(weapon); + + float tx = pos?.X ?? 0f, ty = pos?.Y ?? 0f, tz = pos?.Z ?? 0f; + var id = StartTrack(p?.AuthorizedSteamID?.SteamId64 ?? 0UL, kind, tx, ty, tz); + + try { SampleActiveNadeTracks(); } catch { } + Enqueue(new { type = "nade", sub = "thrown", - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + id, + nade = kind, + t = NowMs(), steamId = p?.AuthorizedSteamID?.SteamId64 ?? 0UL, name = p?.PlayerName ?? "", - weapon = ev.Weapon + weapon = weapon, + throwPos = new { x = tx, y = ty, z = tz }, + throwAim = new { pitch = gaPitch, yaw = NormalizeYaw(gaYaw) } }); } catch { } return HookResult.Continue; } - [GameEventHandler] public HookResult OnHeDetonate (EventHegrenadeDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "he"); - [GameEventHandler] public HookResult OnFlashDetonate (EventFlashbangDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "flash"); - [GameEventHandler] public HookResult OnSmokeDetonate (EventSmokegrenadeDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "smoke"); - [GameEventHandler] public HookResult OnDecoyDetonate (EventDecoyDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "decoy"); - [GameEventHandler] public HookResult OnMolotovDetonate (EventMolotovDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "molotov"); + // Bounces -> Trajektorie weiter aufzeichnen (Punkt erscheint im nächsten Tick) + [GameEventHandler] + public HookResult OnGrenadeBounce(EventGrenadeBounce ev, GameEventInfo info) + { + try + { + dynamic d = ev; + var p = d.Userid as CCSPlayerController; + AppendPointByPlayerBounce(p?.AuthorizedSteamID?.SteamId64 ?? 0UL, (float)d.X, (float)d.Y, (float)d.Z); + } + catch { } + return HookResult.Continue; + } + + [GameEventHandler] public HookResult OnHeDetonate (EventHegrenadeDetonate ev, GameEventInfo info) + { TryFinalizeDet(ev, "he"); return EnqueueNadeDet(ev, "he"); } + + [GameEventHandler] public HookResult OnFlashDetonate (EventFlashbangDetonate ev, GameEventInfo info) + { TryFinalizeDet(ev, "flash"); return EnqueueNadeDet(ev, "flash"); } + + [GameEventHandler] public HookResult OnDecoyDetonate (EventDecoyDetonate ev, GameEventInfo info) + { TryFinalizeDet(ev, "decoy"); return EnqueueNadeDet(ev, "decoy"); } + + private void TryFinalizeDet(GameEvent ev, string kind) + { + try + { + dynamic d = ev; + var p = d.Userid as CCSPlayerController; + TryFinalizeTrack(p?.AuthorizedSteamID?.SteamId64 ?? 0UL, kind, (float)d.X, (float)d.Y, (float)d.Z); + } + catch { } + } + + // Smoke: Detonate + start/end mit ETA (+ Pfadabschluss) + [GameEventHandler] + public HookResult OnSmokeDetonate(EventSmokegrenadeDetonate ev, GameEventInfo info) + { + try + { + dynamic d = ev; + var p = d.Userid as CCSPlayerController; + + TryFinalizeTrack(p?.AuthorizedSteamID?.SteamId64 ?? 0UL, "smoke", (float)d.X, (float)d.Y, (float)d.Z); + + Enqueue(new + { + type = "nade", + sub = "detonate", + nade = "smoke", + t = NowMs(), + steamId = p?.AuthorizedSteamID?.SteamId64 ?? 0UL, + name = p?.PlayerName ?? "", + pos = new { x = (float)d.X, y = (float)d.Y, z = (float)d.Z } + }); + + var id = Interlocked.Increment(ref _seq); + var endAt = DateTimeOffset.UtcNow.AddSeconds(_smokeDurationSec); + var state = new AoeState { EndAt = endAt, X = (float)d.X, Y = (float)d.Y, Z = (float)d.Z }; + _activeSmokes[id] = state; + + Enqueue(new + { + type = "smoke", + state = "start", + id, + t = NowMs(), + endAt = endAt.ToUnixTimeMilliseconds(), + pos = new { x = state.X, y = state.Y, z = state.Z } + }); + + var token = _serverCts?.Token ?? CancellationToken.None; + _ = Task.Run(async () => + { + try + { + await Task.Delay(TimeSpan.FromSeconds(_smokeDurationSec), token); + if (_activeSmokes.TryRemove(id, out _)) + { + Enqueue(new { type = "smoke", state = "end", id, t = NowMs() }); + } + } + catch { } + }, token); + } + catch { } + return HookResult.Continue; + } + + // Molotov: Detonate + start/end mit ETA (+ Pfadabschluss) – nur start, wenn kein Airburst + [GameEventHandler] + public HookResult OnMolotovDetonate(EventMolotovDetonate ev, GameEventInfo info) + { + try + { + dynamic d = ev; + var p = d.Userid as CCSPlayerController; + var sid = p?.AuthorizedSteamID?.SteamId64 ?? 0UL; + + bool airburst = false; + if (_activeTrackByPlayerNade.TryGetValue(PNKey(sid, "molotov"), out var tid) && + _tracks.TryGetValue(tid, out var trProbe)) + { + airburst = LooksAirburst(trProbe); + } + + TryFinalizeTrack(sid, "molotov", (float)d.X, (float)d.Y, (float)d.Z); + + Enqueue(new + { + type = "nade", + sub = "detonate", + nade = "molotov", + t = NowMs(), + steamId = sid, + name = p?.PlayerName ?? "", + pos = new { x = (float)d.X, y = (float)d.Y, z = (float)d.Z } + }); + + if (!airburst) + { + var id = Interlocked.Increment(ref _seq); + var endAt = DateTimeOffset.UtcNow.AddSeconds(_fireDurationSec); + var state = new AoeState { EndAt = endAt, X = (float)d.X, Y = (float)d.Y, Z = (float)d.Z }; + _activeFires[id] = state; + + Enqueue(new + { + type = "fire", + state = "start", + id, + t = NowMs(), + endAt = endAt.ToUnixTimeMilliseconds(), + pos = new { x = state.X, y = state.Y, z = state.Z } + }); + + var token = _serverCts?.Token ?? CancellationToken.None; + _ = Task.Run(async () => + { + try + { + await Task.Delay(TimeSpan.FromSeconds(_fireDurationSec), token); + if (_activeFires.TryRemove(id, out _)) + { + Enqueue(new { type = "fire", state = "end", id, t = NowMs() }); + } + } + catch { } + }, token); + } + } + catch { } + return HookResult.Continue; + } + + // Generischer Detonate-Helper für HE/Flash/Decoy (Einzel-Event bleibt) private HookResult EnqueueNadeDet(GameEvent ev, string kind) { try @@ -297,7 +1203,7 @@ public class WebSocketTelemetryPlugin : BasePlugin type = "nade", sub = "detonate", nade = kind, - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + t = NowMs(), steamId = p?.AuthorizedSteamID?.SteamId64 ?? 0UL, name = p?.PlayerName ?? "", pos = new { x = (float)d.X, y = (float)d.Y, z = (float)d.Z } @@ -315,14 +1221,25 @@ public class WebSocketTelemetryPlugin : BasePlugin return HookResult.Continue; } + private static bool LooksWrongPfxPassword(Exception ex) + { + try + { + var s = (ex?.Message ?? "").ToLowerInvariant(); + return s.Contains("password") || s.Contains("kennwort"); + } + catch { return false; } + } + private bool TryLoadCertificate(out string usedPath) { usedPath = _certPath; try { - string pluginDir = ModuleDirectory; // CSS stellt das bereit - // Wenn kein Pfad konfiguriert: im Plugin-Ordner suchen + string pluginDir = ModuleDirectory; + + // Pfad ermitteln if (string.IsNullOrWhiteSpace(usedPath)) { var def = Path.Combine(pluginDir, "cert.pfx"); @@ -333,35 +1250,58 @@ public class WebSocketTelemetryPlugin : BasePlugin else { var files = Directory.GetFiles(pluginDir, "*.pfx", SearchOption.TopDirectoryOnly); - if (files.Length > 0) - usedPath = files[0]; + if (files.Length > 0) usedPath = files[0]; } } - else + else if (!Path.IsPathRooted(usedPath)) { - // Relativen Pfad relativ zum Plugin-Ordner interpretieren - if (!Path.IsPathRooted(usedPath)) - usedPath = Path.Combine(pluginDir, usedPath); + usedPath = Path.Combine(pluginDir, usedPath); } if (string.IsNullOrWhiteSpace(usedPath) || !File.Exists(usedPath)) { - Logger.LogWarning($"[WS] Kein PFX gefunden im Plugin-Ordner ({pluginDir}). " + - "Lege z.B. 'cert.pfx' dort ab oder setze mit css_ws_cert ."); + Logger.LogWarning($"[WS] Kein PFX gefunden im Plugin-Ordner ({pluginDir}). Lege z.B. 'cert.pfx' dort ab oder setze mit css_ws_cert ."); return false; } - _serverCert = new X509Certificate2( - usedPath, - string.IsNullOrEmpty(_certPassword) ? null : _certPassword, - X509KeyStorageFlags.EphemeralKeySet | X509KeyStorageFlags.Exportable - ); - - // Erfolgs-Hinweis try { - Logger.LogInformation($"[WS] TLS-Zertifikat geladen: {Path.GetFileName(usedPath)} | " + - $"Subject: {_serverCert.Subject} | Gültig bis: {_serverCert.NotAfter:u}"); + _serverCert = new X509Certificate2( + usedPath, + string.IsNullOrEmpty(_certPassword) ? null : _certPassword, + X509KeyStorageFlags.EphemeralKeySet | X509KeyStorageFlags.Exportable + ); + } + catch (CryptographicException cex) when (LooksWrongPfxPassword(cex)) + { + var pwdState = string.IsNullOrEmpty(_certPassword) ? "leer" : "gesetzt"; + Logger.LogError($"[WS] TLS-PFX konnte nicht geöffnet werden: vermutlich falsches Passwort. " + + $"Pfad: {usedPath}. CertPassword (aus config.json) ist {pwdState}. " + + $"Setze es mit 'css_ws_certpwd ' oder trage es in {ConfigFileName} unter 'CertPassword' ein."); + _serverCert = null; + return false; + } + catch (CryptographicException cex) + { + Logger.LogError($"[WS] TLS-PFX Fehler ({usedPath}): {cex.Message}"); + _serverCert = null; + return false; + } + + if (_serverCert == null) + return false; + + if (!_serverCert.HasPrivateKey) + { + Logger.LogError($"[WS] Zertifikat geladen, aber ohne Private Key: {Path.GetFileName(usedPath)}. " + + $"Bitte PFX mit privatem Schlüssel verwenden."); + _serverCert = null; + return false; + } + + try + { + Logger.LogInformation($"[WS] TLS-Zertifikat geladen: {Path.GetFileName(usedPath)} | Subject: {_serverCert.Subject} | Gültig bis: {_serverCert.NotAfter:u}"); } catch { @@ -390,7 +1330,7 @@ public class WebSocketTelemetryPlugin : BasePlugin { if (_useTls) { - if (!TryLoadCertificate(out var usedPath)) + if (!TryLoadCertificate(out var _)) throw new Exception("TLS aktiv, aber kein funktionsfähiges PFX gefunden."); } @@ -406,15 +1346,8 @@ public class WebSocketTelemetryPlugin : BasePlugin var scheme = _useTls ? "wss" : "ws"; Logger.LogInformation($"[WS] Server lauscht auf {scheme}://{_bindHost}:{_bindPort}{_bindPath}"); - // beim Start aktuelle Map an bereits verbundene (falls Hot-Reload) senden _mapName = string.IsNullOrEmpty(Server.MapName) ? _mapName : Server.MapName!; - var startPayload = JsonSerializer.Serialize(new - { - type = "map", - name = _mapName, - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - }); - Broadcast(startPayload); + Broadcast(JsonSerializer.Serialize(new { type = "map", name = _mapName, t = NowMs() })); _acceptTask = Task.Run(async () => { @@ -437,7 +1370,6 @@ public class WebSocketTelemetryPlugin : BasePlugin } }); - // Sender, der die Outbox entleert _ = Task.Run(async () => { var ct = _serverCts!.Token; @@ -503,12 +1435,10 @@ public class WebSocketTelemetryPlugin : BasePlugin var id = Interlocked.Increment(ref _clientSeq); tcp.NoDelay = true; - // Basis-Stream var baseStream = tcp.GetStream(); baseStream.ReadTimeout = 10000; baseStream.WriteTimeout = 10000; - // Optional TLS Stream stream = baseStream; SslStream? ssl = null; @@ -517,12 +1447,21 @@ public class WebSocketTelemetryPlugin : BasePlugin if (_useTls) { ssl = new SslStream(baseStream, leaveInnerStreamOpen: false); - await ssl.AuthenticateAsServerAsync( - _serverCert!, - clientCertificateRequired: false, - enabledSslProtocols: SslProtocols.Tls13 | SslProtocols.Tls12, - checkCertificateRevocation: false - ); + try + { + await ssl.AuthenticateAsServerAsync( + _serverCert!, + clientCertificateRequired: false, + enabledSslProtocols: SslProtocols.Tls13 | SslProtocols.Tls12, + checkCertificateRevocation: false + ); + } + catch (AuthenticationException aex) + { + Logger.LogError($"[WS] TLS-Handshake fehlgeschlagen: {aex.Message}. " + + $"Tipp: Stimmt das PFX und das CertPassword aus {ConfigFileName}?"); + throw; + } stream = ssl; } @@ -537,18 +1476,46 @@ public class WebSocketTelemetryPlugin : BasePlugin Logger.LogInformation($"[WS] Client #{id} verbunden. Aktive: {_clients.Count}"); - // Dem neuen Client die aktuelle Map sofort schicken try { - var mapPayload = JsonSerializer.Serialize(new + var nowMs = NowMs(); + SendTextFrame(state, JsonSerializer.Serialize(new { type = "map", name = _mapName, t = nowMs })); + + foreach (var kv in _activeSmokes) { - type = "map", - name = _mapName, - t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - }); - SendTextFrame(state, mapPayload); + var aoe = kv.Value; + if (aoe.EndAt > DateTimeOffset.UtcNow) + { + SendTextFrame(state, JsonSerializer.Serialize(new + { + type = "smoke", + state = "start", + id = kv.Key, + t = nowMs, + endAt = aoe.EndAt.ToUnixTimeMilliseconds(), + pos = new { x = aoe.X, y = aoe.Y, z = aoe.Z } + })); + } + } + + foreach (var kv in _activeFires) + { + var aoe = kv.Value; + if (aoe.EndAt > DateTimeOffset.UtcNow) + { + SendTextFrame(state, JsonSerializer.Serialize(new + { + type = "fire", + state = "start", + id = kv.Key, + t = nowMs, + endAt = aoe.EndAt.ToUnixTimeMilliseconds(), + pos = new { x = aoe.X, y = aoe.Y, z = aoe.Z } + })); + } + } } - catch { /* wenn der Client beim Connect gleich schließt, ignorieren */ } + catch { } await ReceiveLoop(state, serverCt); } @@ -602,7 +1569,7 @@ public class WebSocketTelemetryPlugin : BasePlugin return false; var firstLineEnd = header.IndexOf("\r\n", StringComparison.Ordinal); - var firstLine = firstLineEnd > 0 ? header[..firstLineEnd] : header; + var firstLine = firstLineEnd > 0 ? header[..firstLineEnd] : header; var parts = firstLine.Split(' '); if (parts.Length < 2) return false; @@ -804,4 +1771,12 @@ public class WebSocketTelemetryPlugin : BasePlugin } return Task.CompletedTask; } + + // --- Hilfsklasse für Referenz-HashSet --- + private sealed class ReferenceEqualityComparer : IEqualityComparer + { + public static readonly ReferenceEqualityComparer Instance = new(); + public new bool Equals(object x, object y) => ReferenceEquals(x, y); + public int GetHashCode(object obj) => System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj); + } } diff --git a/CS2WebSocketTelemetryPlugin/bin/Release/net8.0/CS2WebSocketTelemetryPlugin.dll b/CS2WebSocketTelemetryPlugin/bin/Release/net8.0/CS2WebSocketTelemetryPlugin.dll index 305923ec97483b44929b101cda471c6af4916e20..d25d40ae62548343593baa4b78b0d462ef92e2ca 100644 GIT binary patch literal 92160 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 us%n1*w4DRqG|`rpQC{<$?if&331hiBjb delta 4011 zcmZu!3s6+o8UD}Za(6E*hzrPLm8Sxth(v?(CV+2L#0RK|EbaoUuq?Yv5R2JeXcBE3 zHMudSO=j9=Y-&bl9AMH!O&Z2Lni(e*B&s#i^BnMwKY{A)?9{qJ;wTcE8ufD{%$pP8J z^17WH8c_cM{AMk9U2lIU__rfvM+$#%V#~P?fB*3KL$A*nX?XF!P*Y3hbFpeX5kk{X z04s15=m)xp%E<&_1+47wTc7|i133oJmR197XBp$A3?TFIzh|a#lqO&uzz$IW2TYh; zBw~ejDoP1ttQ52eSPHBFwg7v8L0}ws8?fCks2p$tr+^Kmf(`;+;0Q1Z{0MjgxB|Qn zbgdF}3mD_U-Tett%fbZl%0z%ZD-$$OF6im<8N&_m4|FalSiyP(GwKg2r+H)bbbZdK zYipQS;2VYhtwaiVG)FB+@^k1;rB!g}yngWp5|<_X}>!}f_`p9_8w@_WDr*pm(a z&@6rgd?W1h40{~DHJ@# z+<+|8j5{AI*bh{|fLxEEGJYJy28| z0q?`99_Ek0wh}(fYhcfTTw?gwg1=_8KM4B+MtcK(aXBb%PrAWl+l#JeFf+R-N1v8^xYjrCm}1kS&&5^1eX#Lk_W*T-1K({ z`V%CH-bNXvmkN!sk;VaBJt!ls$P8#qdSr=y3^|Gd>?$MGctoF~R45&tndlB=GhINb z>Pr$!Rgf+8N0e4fHc=ua!ZS%sPNrKZAApib6W_ zgvd}WA)9_N3c9%h8HN3@A35KFJZ(Yh?L<25LCWkx$Ga&X<9jms4j6Msa}p?4Bn3aBsieK|a6T>kku;q3j-XIjGC!_4ylJZs!`egWUc8wf%z- zJVOrc{glFHwDUXZL3{6@lN`=2>KyDMyStnEeBCtYb2^&r{vI0iy4VGEFL~@kZgP3Z z>-2f3$7y#sz2xZ~>~^^uTwZk6t6fQ*U)Sd&Pd|V``3OVncKRFq9lw1 zcmDXP_B+<^&z&`Y{hue3)X8h*MD*O@b2SZ{PoSEi@WOYq`!Ijkxw7~ z%b_o0|2FmV5))5~iK}AbT`}>InE1Dtw2H|xG1(_3Pm9Sbe3zN#7jZRb!BVc) zWR&m)d9+bYrX><`GE2e!LGoBhNW+|h2`#FEN2@fPZXqgcQ*F_TM0u2GK_YIKkVY_7 z#Nj;kXm2%_X3Votv=SUs4UamB7O+P%Zn@Op6WaRiRe>1Xq3C8VU*y9c|H$a#NX%{Wee59@|lZqbyC{r&5|ks!5TtZA8Mb zMA7^@!{slLv`xXc#8Xn~0W*eDD57P##YRQ((BVU~@b+3|$1p+R$3Enx%bA$-rGR z`n`6#eMHG5${WknQub#ltMOSmIa<~JoWdL&hGk|h__K;)^s}*`T#e;R)tduHEJ+Ne z^H*AGM^_c!medD43Us#O1oZ)(sjLqF__?qQWC(R7-)D%RAi@>x)sE#GkKb4+7M+tJVFZ>!4*BoR2=$Boy*B=p={3eOo{go7d9*f&EpM$)WnX( zy2MeHY_>+@fr3fhN^ur=EYrpgWM)PyG3ElSIR8zMW|Am)LZV#xHJ=vecxD%7fBO0V z57a#y5Yz$m9L3Pi06qLJy8Gkz4gdaMU6}_1h80DY(d(LUE?=t8Xb-fbz`=WFlpi{t z{BVP`(HgDY>4?`G9E6sap;x=%v{|@&1kIu3(UaQO&hHxPp`a1qDZq{Yl(ZFae}v*2 g7M{hRe*?H{Ft57-_iYp=4BYKN5nw^9>Bfit4-MTFjQ{`u diff --git a/CS2WebSocketTelemetryPlugin/bin/Release/net8.0/config.json b/CS2WebSocketTelemetryPlugin/bin/Release/net8.0/config.json new file mode 100644 index 0000000..47804f2 --- /dev/null +++ b/CS2WebSocketTelemetryPlugin/bin/Release/net8.0/config.json @@ -0,0 +1,6 @@ +{ + "url": "wss://ws.ironieopen.de:8081/telemetry", + "certPath": "cert.pfx", + "certPassword": "Timmy0104199?", + "sendHz": 10 +} diff --git a/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs b/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs index c3d6012..c296190 100644 --- a/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs +++ b/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+08276e22250976ff18ae026798b2df874d63f90e")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+612f8d5be47e3677a339fa180b79358a0e275fa9")] [assembly: System.Reflection.AssemblyProductAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyTitleAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache b/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache index b56aeb4..3a2c5be 100644 --- a/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache +++ b/CS2WebSocketTelemetryPlugin/obj/Debug/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -68f13c78af2a58422b82cfaa263d9b46172a592b61c37cbd97fab317d2314a32 +4e5ece0659d7221baa43c2c4dd2c6c38941819653cdedff805ef4e8598d48d5b diff --git a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs index e79af2f..0f606c7 100644 --- a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs +++ b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+08276e22250976ff18ae026798b2df874d63f90e")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+612f8d5be47e3677a339fa180b79358a0e275fa9")] [assembly: System.Reflection.AssemblyProductAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyTitleAttribute("CS2WebSocketTelemetryPlugin")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache index 79be6c3..d932ffe 100644 --- a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache +++ b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache @@ -1 +1 @@ -0ad44a906a3869e34c4dff4559f2e11887b2e69d68c7294d8bcab8fc4b86a6ab +4806324ce3160c37004a41ae85c8c6e06de1aaed85bc7956669d94d6c6918040 diff --git a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.dll b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/CS2WebSocketTelemetryPlugin.dll index 305923ec97483b44929b101cda471c6af4916e20..d25d40ae62548343593baa4b78b0d462ef92e2ca 100644 GIT binary patch literal 92160 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 us%n1*w4DRqG|`rpQC{<$?if&331hiBjb delta 4011 zcmZu!3s6+o8UD}Za(6E*hzrPLm8Sxth(v?(CV+2L#0RK|EbaoUuq?Yv5R2JeXcBE3 zHMudSO=j9=Y-&bl9AMH!O&Z2Lni(e*B&s#i^BnMwKY{A)?9{qJ;wTcE8ufD{%$pP8J z^17WH8c_cM{AMk9U2lIU__rfvM+$#%V#~P?fB*3KL$A*nX?XF!P*Y3hbFpeX5kk{X z04s15=m)xp%E<&_1+47wTc7|i133oJmR197XBp$A3?TFIzh|a#lqO&uzz$IW2TYh; zBw~ejDoP1ttQ52eSPHBFwg7v8L0}ws8?fCks2p$tr+^Kmf(`;+;0Q1Z{0MjgxB|Qn zbgdF}3mD_U-Tett%fbZl%0z%ZD-$$OF6im<8N&_m4|FalSiyP(GwKg2r+H)bbbZdK zYipQS;2VYhtwaiVG)FB+@^k1;rB!g}yngWp5|<_X}>!}f_`p9_8w@_WDr*pm(a z&@6rgd?W1h40{~DHJ@# z+<+|8j5{AI*bh{|fLxEEGJYJy28| z0q?`99_Ek0wh}(fYhcfTTw?gwg1=_8KM4B+MtcK(aXBb%PrAWl+l#JeFf+R-N1v8^xYjrCm}1kS&&5^1eX#Lk_W*T-1K({ z`V%CH-bNXvmkN!sk;VaBJt!ls$P8#qdSr=y3^|Gd>?$MGctoF~R45&tndlB=GhINb z>Pr$!Rgf+8N0e4fHc=ua!ZS%sPNrKZAApib6W_ zgvd}WA)9_N3c9%h8HN3@A35KFJZ(Yh?L<25LCWkx$Ga&X<9jms4j6Msa}p?4Bn3aBsieK|a6T>kku;q3j-XIjGC!_4ylJZs!`egWUc8wf%z- zJVOrc{glFHwDUXZL3{6@lN`=2>KyDMyStnEeBCtYb2^&r{vI0iy4VGEFL~@kZgP3Z z>-2f3$7y#sz2xZ~>~^^uTwZk6t6fQ*U)Sd&Pd|V``3OVncKRFq9lw1 zcmDXP_B+<^&z&`Y{hue3)X8h*MD*O@b2SZ{PoSEi@WOYq`!Ijkxw7~ z%b_o0|2FmV5))5~iK}AbT`}>InE1Dtw2H|xG1(_3Pm9Sbe3zN#7jZRb!BVc) zWR&m)d9+bYrX><`GE2e!LGoBhNW+|h2`#FEN2@fPZXqgcQ*F_TM0u2GK_YIKkVY_7 z#Nj;kXm2%_X3Votv=SUs4UamB7O+P%Zn@Op6WaRiRe>1Xq3C8VU*y9c|H$a#NX%{Wee59@|lZqbyC{r&5|ks!5TtZA8Mb zMA7^@!{slLv`xXc#8Xn~0W*eDD57P##YRQ((BVU~@b+3|$1p+R$3Enx%bA$-rGR z`n`6#eMHG5${WknQub#ltMOSmIa<~JoWdL&hGk|h__K;)^s}*`T#e;R)tduHEJ+Ne z^H*AGM^_c!medD43Us#O1oZ)(sjLqF__?qQWC(R7-)D%RAi@>x)sE#GkKb4+7M+tJVFZ>!4*BoR2=$Boy*B=p={3eOo{go7d9*f&EpM$)WnX( zy2MeHY_>+@fr3fhN^ur=EYrpgWM)PyG3ElSIR8zMW|Am)LZV#xHJ=vecxD%7fBO0V z57a#y5Yz$m9L3Pi06qLJy8Gkz4gdaMU6}_1h80DY(d(LUE?=t8Xb-fbz`=WFlpi{t z{BVP`(HgDY>4?`G9E6sap;x=%v{|@&1kIu3(UaQO&hHxPp`a1qDZq{Yl(ZFae}v*2 g7M{hRe*?H{Ft57-_iYp=4BYKN5nw^9>Bfit4-MTFjQ{`u diff --git a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/ref/CS2WebSocketTelemetryPlugin.dll b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/ref/CS2WebSocketTelemetryPlugin.dll index 6e680eb8caf652ab61470f2755340398462109ba..6c5d888ded4ae9102c34439da7f3344958bd5d76 100644 GIT binary patch literal 16896 zcmeHOdw5)BnSaljOOi=4O+xRP!bvaC(sr6_ZJyG|7()~nT z-*C*-Qt9MSS|8OSdLoguv;jj)XA)X0p|$Vm)kc$1BUoAKTk5#(=^*M>+%$V(*X_C7 zj?-eTT&X8&hQwz}Up5i9B4`LiRT8Uqxmm#Fm+L6dVO-RI1Do=HA$C|6;ra~x?qFh^ zXldRF3!LjPQ3c4GVHe2B-bma^R9a+L3cj<55037QMZrtaG!UpuuH2yHY9-ndw2b{0 zbKDjXNbE&ibZJEW!L*rcnGGAcoK$OCpwJ4`L-eyU9HHsh<%%U z3%5YmC+7XlD z`v7g}y=05xc;IzrZ*#Cd*i_%tuz?+VC=R@1A<>feV*RTn`cEu^OM0zzEHNadd1a-& z6fW7_OSH;fBbQvfyQ>}Ps=zNVf&G?va)908!V;$JnRmFn38wK_TH|A$C1qvTRC?({f_ImMDreDORkHk@ zB6+#w`7$rXDLbDt+{l?{46ieDz)*-C9EB zKKhua50Xbp8J{g@`E}(?-|S)f&Qi9y&d+pQv^NR%i1r#U%O4i3En)grp??kZQoH{a zpO^L{UoX8vOn(sN@zaO=HGVH0^euOLDdKqwb@@pNYxjs{3aM&nztRou2ElW^to^lz z{oGg1c$<$?ZBv+@Rl#^xX$bgl$}QNzSK^3KLkUUylC*%wb&GE<%@O-8D%0B~uVbKz zqOeCBA{V0Dgx17zm!MDlKj7gqtg84Oa_JY(C4%>Oeuo+j`fB_O$@1M_<)!zcUfheN zf;=)6^!cN{&s22??NX}f+hs(Dz|F;JsEXEMgfVxHa6#cb7$d9;piGCT3?qco{i2+? zd9+x#A>{BN&8KC;eOb6VI*(j+Rn!UY5S>daM3+K&4$=AeV=ww1K%2Y)@d^Mz}opm1LnZll9pf|fc&7dhND!d>og|14a>;l3*AOow|8^X3p;>u^tr z7@;&$u6gBU&K0teb>jx;_W1zC`$Fyd@9@Ku<{)IuT+02xfEOS>eN~C z8`#@r`&)&}<5AiE4)qn_kJV$4EOb2r+~s2VLBW&s8tC5$ZLeLYuCC4Q64gtMvi{_1 zWUq%l)vj-$rncPg$a`9`8PGRMzvbzKB*#7LE9Pn|in*=jMI3$K-CamWKLMvYUT&mM zd3LIq?<&7Stx8pJa>E5_5xS-{#g&G1>L1MWv|RxmR(jgRN$2L701+7Ih|5oc>_*- zb`ExaInK^6n78Eo@?6<$_{?((=a=UszdWb>W5xH>HF+zbzNa-7{`&3PSL7C6qKz_G3+Z^=5ot5fLTasJEU(>Rl>^omISSo9H` zJyp65o)!9I(f8t>L!ndgF3IajphEL;x1rDiY%SBV4fiCcUJCY%>C)+`PW7|ETY}ZU zlpe+%&BNHiAEsLJBh)Fic=TF}JG5G=RsuL{1|SRIE-nCB0J24}JsaU11Px&^!V-is z;@MFR^wI*L4>N`724EF!5DW=+3GNiULQofs0TsFmIETgrvm*Hja3M_qHJSu2rv(ao zULn{84AM?um85E>FE9Gi8OE!R!gp`IT2w zNIf4jVyS3XiKLE>&>Gh=`U=&k=TU?LB|$3388S#`QHd*vwmKKM1U5m;>SkaQrGXdF zt-v-q47`-?1@?;koxqUzY@-o6;cX+67O8D?HT~S%A#?=t7rhaoqrexvhS1kL$mO{~ z=n3(21on&6BSPOH_IJ_`Xo-3!%6x%3De_0f=9r{9PS?|v>p0y+7r3WHdqU*TOWGGC z?F*8Yla-SahVvhx`gp zKjb%ibVyEkBchE;T0?BcVe?7PIBdS_xn8t4i2N|*zwjJ}yu*7$2B*#TEB{nBS{=CpHh?Z2gS5z*uOO+adMvX+iL?p{Z(khZRk#vZpUnCKc7$O-L z$@L<+K_o|nJ}Ni~$qDbHLLV1AAxJLH*CnV4E)i@M47p@H2;DCj5gZrHiuQV;4+~C+ zo)mgYkUT6=Jglt~ z40+g3yNAbBJLundb)j|9Mg_Bi2St7mHtv!Mk$he7xcGb?@@gzS;@>MRFLb}4E|PJf zvqB#hdP3-w@DV$qGFoI4L+KsQ4tU zU`S9G%nD8jP6|#5D&=A?7!uS4vw{xxIDL5sl_{Cl@B&Z8!1t$b21*Zg+Sz<3364V8=f)j$1f>VM@mDmf01a-lz;Dq3$ z;FO?JE%t&TL0vE_I3YMGI3=jmh`nG)P#4S!P6$p4P6;Y!iM?P*P#4S!P6$p4P6;Zr z#a=KZs0(HVCj=)2rv#NbVlNmH)CIGG6M~b1Q-aD|u@?*p>VjFp3BgIhDZ#pVY#$QL z3Qo-9xv$I@KZ04o2|;Cn$OS`!S;0xcDM4i++e`>f2`aUci=Zx;6`T^R3y4;5QgBL8 zStNN0hR$YsQc%Sy$%W_mwK#0O`~(tAMH(g03RwG>6VT0H-| z5IBsdy|r{Dg@AFKF={D69mp>Y%K%xh4A5S>7`Pvn0XhK709}J;rU7~{EEmx@{4b*S z!T;HG5cJu2Ue$y%-JgLzhduyWqnkl%^yi=#(=DJE(?>xsp}zpVggy>>BkjVu;wEU_ z<9t#rzK-GqTl^;cHu^EYXc4QPylFK~>oe_Y{HMx(hqo>>?M|FVc0W$fgr4GlvU|;o znES01fqTw}z`a(1z&++i;NGf2;GU{M;J%uTz`ZpWf%|Jd!UBYa2(<_SghdEvBbmzy9_tM*4fXZ3X>*DRJ8tAS84kBN@dl0~;c$D* zOvUxFwzzJZ8|uTSlQxKSLpZ#y<#c*SioB4xJ=v)zqUNwZVic97!6}OqH*(BnapJX3 zyn$moAEsuM4*9T@>x3x7(e_L{t`EeG{s!vmNMuHhw8ORO@px~{Vuci=Pd7)l8P;$z zx+N2fqopLpRT(`Vv&PzzqbWTtvdi>%#$e;nJ{`$zGuyG1WUf;;hkFeRRCmne$SzQ$ z9XE1}ifup~i*9ZShd~Tv1|7Ikez%ArQ31Wq!J(27lVKFqBPhxeuR6i6OY9sBi& zRn&>iPOeVeh}da!%jiibuQVc7EN+-vlW8vHIySTW5>zr3!KXP~3NU8AaBPGAY_^NQ zoKplx(a-`B+H*bPQS^!-Z3@OTG(gxB^vV!Wl^v^AE9b|kEr6*J5&W83vngBz?F8krPMydE*nrMS@+j~R(V zPi$ZVgn{*3MrM#5qHW1&CT?t|wqz!Oq06tlM~vQKJ)H`Mdb+50%(RTrVAl@nr9SG` zP3v;OD+J#GH<6r8TQVN!-b^OU;KfG5NXH_yX;ZJIr>#B4KyNZKVpy98km=fR{pKiC zI}*L4$q}R7u#ySgGFX>WY)i(IR&wvDs?)k_fV*A`L$@nR-Dpr6PFlP0O%bTw35n2n zn6w9sDB%mI$S88(+!PLvph;=Su)=Ld+UmhlwlA5+P3=rU+h|k__C={HVOn}3V$hDn z#c3mf)pHBl4SdI5H1>2+8yjM!;TGvbJrljjOd6)!k%}%hEM64aFutiXnH)hk80dr1 zQS{wzQy&5|itgrxsd$m1E?#+)rpP(#C=UdwgWZwBO63x)aJp|7`Zfl(OC~1T&@#5^ zk>OYZ7KSyANBs&)dxBuZzs~Rowk6Z~Op1yYv`ZtkCi zBVwjz#z3(xw_@)Z9?%m*c?UZZA}iu&3?n_N21u zO`99SVQDVPZ5-T#DJ*B{t%h!8(#9_1s!S|xL_-#))j)o^N(qdO|l53`IsDY6#$S+12 zr8n#qtw`fEQl}A56(`tb4EE}ShBdYeYnoYb)W>UlN8A|2B;^@Wq_R6i3WOy?-!D{= zK399}RnZJ~wtP?Kx&U?J?;#5c6vDvJj^HR`cS%8&lW?YbVyvKWCaB1**g%XA7zOQK zK3`CBaFDQJQ(Gnt_g1el#A}4T&b18=<>q?dFgEchzFW!(9N$5wS6EY6^Q_^b^$tvO z;7VDb`qFx21dBr=+Kq*q+Ik!FYj~f*4QZvvdg7U(SRxpW$Hn39bX9LAK5-6<`m(u`G;EM7YayE1LT8O6@@Oa&@h4V@~}wpb!Ini&nH zVmZm_w>w$Sg87CwgS(6&9N6sfnr}~I(AnpTa%wlsNII6{wZ5=7pevI5aQ9QRH#j0^ z{PL`!{3sVL#v(KyH~ls}MSYPJ;VAYx2U6@~RyaIhpH3-)^Q)1jwzl3L9L|k256v|1 z%4y0E%8nVwSLYB^IJ_2BDwM(5H=W;qaF)%r!D;sTV9{B6le6y>4p=$KjsZULt#b4j z0T_;X4s_f&6SsLYP8L?~{P+hK$Iko>_$aE%j0}SjZUrmf5bZI2D3LU+Sj2q2J<{Ho zO^hws-OXGZ=H?|&dfqd7jr87F#4yQTh|w5)D0p4By!93hRg8q@aM;4f?j&8D&!#(; zxGLDOKb1C2Ub^%0qAsL1D=)^B4cccllQO2kM^2M^k}-}t64dfmlrnJ)y6W+Nf(~w~ z$De?FxtKq#*37pPGUcyf7f-8z?|Y@>6%{2c`k@l2c2xOFsc>Qn(^NU&}e~qIdN7gWpQcEZjqxz)me|CN?eAn@>XXn z(JI+x3@aS5t@fZ}y^B07L-k9Yq)1YeU5)Zrsb0}#%M`Su50Ykt_4uqB&sXIcphq47 z&cpXc;9Xds+{rH=1Nb~!k*~C22{UxC3>&os!=`3;%@w7ZT5Z(CYDR71svMEY z5o0;x+M3ZaF&@w6sT){HDECK{(lU%No5Ju@0|AWA(m;i1ogr53j3ih&5>70m$+evP zrOO>p6+$>B&;&{q=ke#+{M~V%I(H8q;A~GOI`&5lIm5^?#Z+J?Z9;BtkqhzaKe)Z4 zk9VF>Dz(ZvOI^5keXt&0{Il~n70%;9K5Cb83Jn$-9zCDo7%A;qg43*lL!Qkv;1hlP z5j80k6lUexhQ`75(Ut+Dd7aU;cHKI?scFNY-mt!YVBLnMmi2nQ(YUTw!)gFkl*oYVp$v2Q!TuvaUwWH6*73dU}%@JBTY|eeEQQ+>H+x2 z^OuBXZ>jkGLc2mf$5SR9Z^k|U0ZZG0ryr|3aduhLlSHHR4C+z1FtvT=JI!}*T(f2v zs*NdDrF7gG&@#K;^EaK|z-fv`h01eHfjz%YN<5gxjj)k8z`wZbJfJPdvY&|R>8RFF zzk=}HhBT;q)9?YuNlU>=1iiAS&gc zHu(My87{ChtiXdj+rc%fo$N4iWDOxhp)ii&xQD>aV=`@O$wAG+0~IuL%o^6XUHAck zHY&HiriLfV8vjDk%%r&Kp+S@Jsg66A&u{Et3=fhpsO)275E;!@Xx8+bXmmPOF{pr; z!YI$@Wu%t#%P3sDb~y_f%)mIyA1F5F*Houm^7^7k`Y-a!7+dfkOt%&(i^yk-?1-Bq z-5!r`(_;x5H6vI{47r8m1g|ZFj~UtU?;;3qIPh9%+GV#e=Hn@HHsjw8T@KA-Qd^cV z%|BSY3{Nt{zz)10>cv~99eB4DM!X$g^vka<>0$TJUzL5p=|h_)ysfe?el27#i;e(M zJAwkQI^J__r5N6P;b|M*d<{}kjF!rt(Fd&#sR_M~cVRJT6ONNFxR;}>3d&@`DhBz` zX*{{brXJtE*?-M=1BW)C%kjo-^cY`sT_J#2d^w{_s04^sIt+o_MAzp1DO+XceyU5Z-NC zu+b2Pr5rmPIky#;BiByM*)9KnEsx!=J;*1CGG@^BR#9!=e80Yr)}Wr#{myLtLffyT zwbX#|Gl*ZyMDeD00PWLE>wrzrtizuUstIp+2SMShI`r89q#Gb>0jGmEkbWIFwvZp) xLC$?2LVugkjv_@IEv;b|O&lZAlmz31#CbMx2&|Bi21qC?V{;t)2C_VyCJqmc zVW*U8rL9JEH+34Lf(0gpsat7QLAO;RtAMRtwm#Ges;-JxHt42~YFk@DQMK><4i4#B zP1CM*zVrRx_n-fq`#QE`4~tmK;cw+mENebYlg9+*=A;M@Q8ol;Lj3-=p;ODmv7y)8 zsq3~8HA%IVXt6frnmHpzGy`!VjBLxL6j~36Cg-tvkbG#_*0Und(F&%cp@YY~R0zZ+^6W^)tUt`RYU0x2+k?(5{Plv=0U4u?|fk8@2d|F3lwpn54|w zsOLv-VR?D`iFT$CwK%|=BYhn`JNo6QU(O=Z(C2MwrgPxwlHa>!{TlSIAU14>S9gWm z5X%GW5nJaRQyp?)H^nNN4FR+q4dtl;Ef>v&W=F&MMQJC9Op+7HmO2@uHeo$DzNSlG zp8S4Wm!XrUORUn0j5K=OkoqgEAJVFHo&IKPwCnVVCh-@Hml&U7J;1!3^UnaIIyGrs zhLh~}Bf#J3R}?4ZX>;vP8c^0iX|hTDz%KRg*(L8%BrmneoD_%T2iZNrn59bPe#Sz^ zpD}(LsMCVP2{=ycsWjVh&CsJXtX~&8wJ6K6_C4BZ;8j(gpMhoR^rj+}Q;Os-*(ILU zWo9Kwo@z)O#+As#wU+!NI<05Y+g!oLN-d)UnW=P8zh=xPOZPc+I*NJa^{3zS)fKo2 z0(bZ=y~MGWxr*qbO7tkAS)__|x`E7-c#5((nuWW361Qs(9e~#f?@^jbbJ=rn=Df+M z5jXE7?)-fAo@8$YEs#-^e#oYm7O~mS<~?{sbo!OO0XVET(Nfx?w*apgTcNzJZU@Hg zewky0u)IM$MS}i74Zu&R1-M#l2c}Us@Cfbx+)+`Pv>O*s&_1BS_#Juz{9Wc%Lh_K1 z?qTq$>7N2Wg~j1kId%dQOG%?2@svLSzWvVxn>|+Cqj#4|xm7b?jpj$Knw~4br zxh%Q%7w(wyJopVmPPtSc2j=SXO1#7<7a`~nS4*Q;q2Invm%$UG5;67p?bxfWb{q7R?NK}-Bo~B za{gyVagmRgaDH^sjEfhPl4NSa%%0{=MRMSRY2H*My@k`fsYrT@rg@7fnz&Di33H~I zQ;{6#n&!E1Zv~ZL2e^%Y$A+%ZT2}rC9{rC2McDKedKTpb{Xcx1EB`l)YBYi!Z3N#( zBY68q@Rc)yZ|o6#UrAnI2+9EJ*vSg8_utLD2$)V4jCG9b883Zh01jUmVEA%JT zR_Nnukd+YU$DqHf#-P_|gW_d+ON$;87JXSe!S*@k6O5!tT_|$O9Ogd804p(Nm;zc% z`7vG823a}Icusj8iymVhXCzfBLX~w~j6PNZ%wtgw201v#e2jTqm8&C74)!q)YO=&} zMq%S}jCG8IjAM*(Mxk>)W1LagrBcTjU>vkZr4;ADWw6aS#u#T54yn5s6}*&0hn4l{ zZs-yh8WMx{_1K;Tsd#ne?@R^E4%F}tX|$YH0t=}KjvL%Y9&kGq)5<8i5(EZ$VHo(S zScD;!;0~$=cTx?wlYHPQv>H5x)_`j{1{9gc$BdNB(gRpQ!g=_%5xLd z(KU{zM5+DuGc=#WdNU{gE}o*grq}QH5O+oB2K;_&ckWW_bnZ;6cFAl}YTd{!&P7gf z!bG>(420I9nSK3r{d;?YH6g#h)Y_4^+4_fT76#~x^PJT+Wq$wezCdq@)v$O`YjsW7 z?=SJnu|czAm$@Mv?&V>Sy3C%MQokQeE`@Ufp|yJg!N^qgGOF$l^mocU(B8n_u5chE zqjIWlE3YZFb}n&8tE-zMfxgIAv#mKC>@*`aZJ4vd@2LsV=U7FsHlPyi3`aJbvL}d`U^aV{?7Y=tehC?RRhr6v?OJ}9* zFe82l16}5Q*1gL*te2Nv96geMMp)g;PuRol?bJ5VZg~p|twRNOTQ3%D7|klI6;{uR zT+JPfgsoxs(V5MA`y*zzdqYRhgYLC^di%`&eye+Bc6qcv)nWETZm*dd!@JD;%smk@cUdXLF8s+M`t*M*D^y$()pLZ%jE&gPEwCBS z)cT_tZ#XM8Ju~)%gds)Gmi>1X-O%)m*wd<>$>g*{&&r5Bhq1`Zh&`XKXJy951mL`y z8T(Ck_NRpzb~#{NDBQm)QsuBWHpt?aCH!$xPx#})Q1t~i)}9l_Gd2yN7EG{lC^;DF3+uMuE1E#0gTUJrtRvc9mC#q!MF$v>h}JS4eq$TeHp zx6OL3qIz_t(kiUf$|})1+ECe`HhHiO6jK?t1QWgdlw!xIV5J>Dn2X>C;CbM9p;jPn l0}sI~M_dBtrB#S3kYkR%bI(G>u`%%%`v;Z$*LcWd|2N!&4D0{^ diff --git a/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/refint/CS2WebSocketTelemetryPlugin.dll b/CS2WebSocketTelemetryPlugin/obj/Release/net8.0/refint/CS2WebSocketTelemetryPlugin.dll index 6e680eb8caf652ab61470f2755340398462109ba..6c5d888ded4ae9102c34439da7f3344958bd5d76 100644 GIT binary patch literal 16896 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