// === Verbose Logger - Simple Debug Toggle Controller === // Provides system-wide verbose logging toggle functionality // Scripts use their own VERBOSE_LOGGING flags, this just coordinates the toggle // Verbose logging control integer VERBOSE_LOGGING = FALSE; // Loop protection - prevent rapid toggle spam float lastToggleTime = 0.0; #define TOGGLE_COOLDOWN 2.0 // Minimum 2 seconds between toggles // Message constants for verbose logging system #define MSG_VERBOSE_TOGGLE 9010 // Toggle verbose logging on/off #define MSG_VERBOSE_BROADCAST 9011 // Broadcast logging state to all modules // Report memory status of this script reportMemoryStatus() { if (VERBOSE_LOGGING) { integer free = llGetFreeMemory(); integer used = llGetUsedMemory(); llOwnerSay("🔍 [Verbose Logger] Memory - Free: " + (string)free + " Used: " + (string)used); } } default { state_entry() { llOwnerSay("🔍 Verbose Logger initialized - ready to handle debug toggle"); } on_rez(integer start_param) { llOwnerSay("🔍 Verbose Logger rezzed - debug system ready"); VERBOSE_LOGGING = FALSE; // Default to off after rez } link_message(integer sender, integer num, string str, key id) { // Handle verbose logging toggle - FIXED to prevent loops if (num == MSG_VERBOSE_TOGGLE && str == "TOGGLE_VERBOSE_LOGS") { // Only respond if sender is NOT the Main Controller (prevent forwarding loop) if (sender == 1) { // This came from Main Controller forwarding - ignore to prevent loop return; } // Loop protection - prevent rapid toggle spam float currentTime = llGetTime(); if (currentTime - lastToggleTime < TOGGLE_COOLDOWN) { return; // Silent ignore during cooldown } lastToggleTime = currentTime; VERBOSE_LOGGING = !VERBOSE_LOGGING; string status = "OFF"; if (VERBOSE_LOGGING) { status = "ON"; llOwnerSay("🔍 [Verbose Logger] Debug logging: ENABLED"); } else { llOwnerSay("🔍 [Verbose Logger] Debug logging: DISABLED"); } // Public announcement llSay(0, "🔍 Verbose logging system-wide: " + status); // Broadcast the new setting to all modules llMessageLinked(LINK_SET, MSG_VERBOSE_BROADCAST, "VERBOSE_LOGGING|" + (string)VERBOSE_LOGGING, id); return; } // Handle verbose logging broadcast from other scripts if (num == MSG_VERBOSE_BROADCAST) { list parts = llParseString2List(str, ["|"], []); if (llList2String(parts, 0) == "VERBOSE_LOGGING") { VERBOSE_LOGGING = llList2Integer(parts, 1); return; } } } }