local lastReportAt = {} local function emitTelemetry(eventName, payload) local event = { protocol_version = Config.ProtocolVersion, source = "rv-ai-test-tools", event = eventName, timestamp_ms = os.time() * 1000, payload = payload or {}, } print(("[AI_TEST_TELEMETRY] %s"):format(json.encode(event))) end AddEventHandler("onResourceStart", function(resourceName) if resourceName == GetCurrentResourceName() then emitTelemetry("resource_started", { resource_state = GetResourceState(resourceName), }) end end) RegisterNetEvent("rv-ai-test-tools:server:clientState", function(payload) local sourceId = source local now = GetGameTimer() local previous = lastReportAt[sourceId] or 0 if now - previous < Config.MinimumReportIntervalMs then return end lastReportAt[sourceId] = now payload = type(payload) == "table" and payload or {} emitTelemetry("client_state", { client_id = sourceId, reason = tostring(payload.reason or "unknown"):sub(1, 80), resource_state = tostring(payload.resource_state or "unknown"):sub(1, 40), }) end) AddEventHandler("playerDropped", function() lastReportAt[source] = nil end)