Peril_Dice/Verbose_Logger.lsl
RebeccaNod1 b613452db1 fix: correct LSL syntax error in Verbose_Logger.lsl
- Fixed syntax error on line 113,0 in Verbose_Logger.lsl
- Moved function definitions before state block (LSL requirement)
- Removed duplicate function definitions at end of file
- Functions flushMessageBuffer() and reportMemoryStatus() now properly defined

Script should now compile correctly in LSL.
2025-09-14 09:45:37 -05:00

131 lines
4.5 KiB
Text

// === Verbose Logger - Dedicated Debug Output Handler ===
// This script handles all verbose logging to reduce memory usage in Main Controller
// and other core game scripts
// Verbose logging control
integer VERBOSE_LOGGING = FALSE;
// Message constants for verbose logging system
integer MSG_VERBOSE_LOG = 9020; // Request to log a message
integer MSG_VERBOSE_TOGGLE = 9010; // Toggle verbose logging on/off
integer MSG_VERBOSE_BROADCAST = 9011; // Broadcast logging state to all modules
// Memory monitoring
integer MSG_MEMORY_REPORT_VERBOSE = 9025;
// Script identification for log prefixes
list SCRIPT_PREFIXES = [
"Main", "Game", "Dialog", "Roll", "Bot", "Float", "Calc",
"Mem", "Msg", "Score", "Lead", "Dice", "Debug", "Num"
];
// Buffer for batching messages to reduce spam
list messageBuffer = [];
integer BUFFER_SIZE = 5;
float FLUSH_INTERVAL = 2.0;
// Flush all buffered messages to owner
flushMessageBuffer() {
if (llGetListLength(messageBuffer) == 0) return;
integer i;
for (i = 0; i < llGetListLength(messageBuffer); i++) {
llOwnerSay(llList2String(messageBuffer, i));
}
messageBuffer = [];
}
// 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);
llOwnerSay("🔍 [Verbose Logger] Buffer size: " + (string)llGetListLength(messageBuffer));
}
}
default {
state_entry() {
llOwnerSay("🔍 Verbose Logger initialized - ready to handle debug output");
llSetTimerEvent(FLUSH_INTERVAL);
}
on_rez(integer start_param) {
llOwnerSay("🔍 Verbose Logger rezzed - debug system ready");
VERBOSE_LOGGING = FALSE; // Default to off after rez
messageBuffer = [];
llSetTimerEvent(FLUSH_INTERVAL);
}
link_message(integer sender, integer num, string str, key id) {
// Handle verbose logging toggle
if (num == MSG_VERBOSE_TOGGLE && str == "TOGGLE_VERBOSE_LOGS") {
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");
messageBuffer = []; // Clear buffer when 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;
}
}
// Handle log message requests
if (num == MSG_VERBOSE_LOG && VERBOSE_LOGGING) {
// Format: "SCRIPT_ID|MESSAGE"
list parts = llParseString2List(str, ["|"], []);
if (llGetListLength(parts) >= 2) {
integer scriptId = llList2Integer(parts, 0);
string message = llList2String(parts, 1);
string prefix = "[Unknown]";
if (scriptId >= 0 && scriptId < llGetListLength(SCRIPT_PREFIXES)) {
prefix = "[" + llList2String(SCRIPT_PREFIXES, scriptId) + "]";
}
string logMessage = prefix + " " + message;
// Add to buffer for batched output
messageBuffer += [logMessage];
// If buffer is full, flush immediately
if (llGetListLength(messageBuffer) >= BUFFER_SIZE) {
flushMessageBuffer();
}
}
return;
}
// Handle memory report request
if (num == MSG_MEMORY_REPORT_VERBOSE) {
reportMemoryStatus();
return;
}
}
timer() {
// Periodic buffer flush
if (VERBOSE_LOGGING && llGetListLength(messageBuffer) > 0) {
flushMessageBuffer();
}
}
}