From 5816e7cce2bbdf426ebb02d987c91721f407832b Mon Sep 17 00:00:00 2001 From: RebeccaNod1 Date: Sun, 5 Apr 2026 20:14:15 -0600 Subject: [PATCH] switched timeing configs to Peril_Constants file --- Bot_Manager.lsl | 2 +- Enhanced_LinkScanner.lsl | 4 ++- FURWARE_Leaderboard_Communication_Linkset.lsl | 4 +-- FURWARE_Status_Bridge_Linkset.lsl | 2 +- Floater_Manager.lsl | 4 +-- Game_Manager.lsl | 31 ++++++++---------- Game_Scoreboard_Manager_Linkset.lsl | 4 +-- Main_Controller_Linkset.lsl | 26 +++++++-------- Peril_Constants.lsl | 32 +++++++++++++++++++ PlayerStatus_Float.lsl | 2 +- Player_DialogHandler.lsl | 4 +-- Roll_ConfettiModule.lsl | 16 +++++----- 12 files changed, 78 insertions(+), 53 deletions(-) diff --git a/Bot_Manager.lsl b/Bot_Manager.lsl index 6ed32b2..64e6729 100644 --- a/Bot_Manager.lsl +++ b/Bot_Manager.lsl @@ -41,7 +41,7 @@ integer LISTEN_CHANNEL; // Will be set dynamically integer listenHandle = -1; // Bot timing configuration to prevent dialog system overload -#define BOT_RESPONSE_DELAY 1.5 // Delay before bot responds to commands +// BOT_RESPONSE_DELAY defined in Peril_Constants.lsl // Memory monitoring #define MEMORY_WARNING_THRESHOLD 0.8 // Warn when using >80% of memory diff --git a/Enhanced_LinkScanner.lsl b/Enhanced_LinkScanner.lsl index 4a70203..8130f06 100644 --- a/Enhanced_LinkScanner.lsl +++ b/Enhanced_LinkScanner.lsl @@ -1,3 +1,5 @@ +#include "Peril_Constants.lsl" + // ==================================================================== // Enhanced Link Scanner for Peril Dice Linkset // ==================================================================== @@ -65,7 +67,7 @@ performFullScan() { // Add delays to prevent spam if (i % 15 == 0) { - llSleep(1.5); + llSleep(DELAY_SCAN_LINKSET); } } diff --git a/FURWARE_Leaderboard_Communication_Linkset.lsl b/FURWARE_Leaderboard_Communication_Linkset.lsl index c1ded8f..9d0238f 100644 --- a/FURWARE_Leaderboard_Communication_Linkset.lsl +++ b/FURWARE_Leaderboard_Communication_Linkset.lsl @@ -31,7 +31,7 @@ default { dbg("๐Ÿ“‹ [Leaderboard] Leaderboard Communication Script ready! (Virtual Multi-Column)"); // Wait for engine to be ready, then register virtual columns - llSleep(1.0); + llSleep(DELAY_LEADERBOARD_SYNC); // Registering virtual columns inside the physical "Leaderboard" mesh // Format: fw_addbox:NewName:ParentName:x,y,w,h @@ -43,7 +43,7 @@ default { // --- STARTUP HANDSHAKE --- // Wait a moment for the engine to process ADD_BOX, then ask Scoreboard for a fresh update - llSleep(0.5); + llSleep(DELAY_LEADERBOARD_READY); llMessageLinked(LINK_SET, MSG_DISPLAY_LEADERBOARD, "REFRESH_STARTUP", NULL_KEY); // Start with blank display diff --git a/FURWARE_Status_Bridge_Linkset.lsl b/FURWARE_Status_Bridge_Linkset.lsl index 8b6a5ea..2f53fac 100644 --- a/FURWARE_Status_Bridge_Linkset.lsl +++ b/FURWARE_Status_Bridge_Linkset.lsl @@ -26,7 +26,7 @@ default { dbg("๐Ÿ“Š [Status Bridge] Status Display Bridge ready!"); // Wait a tiny bit for Furware to be ready, then set initial text - llSleep(1.0); + llSleep(DELAY_BRIDGE_READY); updateStatusDisplay("PERIL DICE GAME\nWaiting for players..."); } diff --git a/Floater_Manager.lsl b/Floater_Manager.lsl index 4d03a20..16dbdd1 100644 --- a/Floater_Manager.lsl +++ b/Floater_Manager.lsl @@ -173,7 +173,7 @@ default { integer ch = FLOATER_BASE_CHANNEL + channelIdx; llRezObject("StatFloat", pos, ZERO_VECTOR, ZERO_ROTATION, ch); - llSleep(0.2); + llSleep(DELAY_FLOATER_REZ); llRegionSay(ch, "SET_NAME:" + name); // --- HUD UPGRADE: Attach to Humans --- @@ -363,7 +363,7 @@ default { // Redundant broadcast for total coverage llRegionSay(chTarget, "CLEANUP"); - llSleep(0.05); + llSleep(DELAY_FLOATER_UPDATE); } // Clear ALL registries to allow fresh re-registration via Rez Guard allPlayerNames = []; diff --git a/Game_Manager.lsl b/Game_Manager.lsl index 1ebe2f7..efa300e 100644 --- a/Game_Manager.lsl +++ b/Game_Manager.lsl @@ -12,11 +12,6 @@ string getPlayerName(key id) { return displayName; } -// Game timing settings -#define BOT_PICK_DELAY 2.0 -#define HUMAN_PICK_DELAY 1.0 -#define DIALOG_DELAY 1.5 -#define STATUS_DISPLAY_TIME 8.0 // Game state - synced from Main Controller list players = []; list names = []; @@ -163,13 +158,13 @@ integer continueCurrentRound() { llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "PREPARING ROUND...\nCalculating dice size...", NULL_KEY); // Dramatic pause to let the preparation message be read - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); // NEW: Update status bar for new round with colored highlight llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "NEW ROUND STARTING!\nPeril: " + perilPlayer, NULL_KEY); // Dramatic pause to let the peril player be seen before the dice type is shown - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); // Note: showNextPickerDialog() will be called when dice type result is received return 0; @@ -224,7 +219,7 @@ integer startNextRound() { // Sync state to floater manager first, then update floaters to show new peril player immediately dbg("๐Ÿ”„ [Game Manager] Syncing state and updating floaters for new peril player: " + perilPlayer); syncStateToMain(); // Sync the peril player to all modules first - llSleep(0.1); // Brief delay to ensure sync propagates + llSleep(DELAY_SHORT_SYNC); // Brief delay to ensure sync propagates integer startJ; for (startJ = 0; startJ < llGetListLength(names); startJ++) { string startPlayerName = llList2String(names, startJ); @@ -235,7 +230,7 @@ integer startNextRound() { llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "ROUND STARTING!\nPeril: " + perilPlayer, NULL_KEY); // Dramatic pause to let the first peril player be seen before round prep begins - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); } picksData = []; @@ -261,7 +256,7 @@ integer startNextRound() { llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "PREPARING ROUND...\nCalculating dice size...", NULL_KEY); // Dramatic pause to let the preparation message be read - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); dbg("๐ŸŽฏ Game Manager round setup complete, requesting dice type..."); return 0; @@ -406,7 +401,7 @@ integer showNextPickerDialog() { string dialogPayload = firstName + "|" + (string)diceType + "|" + (string)humanPicksNeeded + "|" + humanAvoidListStr; dbg("๐ŸŽฏ Showing pick dialog for " + firstName); - llSleep(0.5); // Brief delay to prevent spam + llSleep(DELAY_ANTI_SPAM); // Brief delay to prevent spam // Send dialog request through Player_RegistrationManager (it has the correct player keys) string dialogRequest = "SHOW_DIALOG|" + firstName + "|" + dialogPayload; @@ -677,7 +672,7 @@ default { llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DICE READY!\nRolling a d" + str + " this round", NULL_KEY); // Dramatic pause to let players see the dice type before picking starts - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); // Start dialog if round has been started and we have a queue if (roundStarted && currentPickerIdx < llGetListLength(pickQueue) && llGetListLength(pickQueue) > 0 && diceType > 0) { @@ -697,7 +692,7 @@ default { if (!alreadyHasPicks) { dbg("๐ŸŽฏ Starting picks for " + currentPlayerName); - llSleep(0.5); + llSleep(DELAY_ANTI_SPAM); showNextPickerDialog(); } } @@ -820,7 +815,7 @@ default { llList2CSV(names), NULL_KEY); // Brief delay to ensure sync reaches Floater Manager before update request - llSleep(0.1); + llSleep(DELAY_SHORT_SYNC); // Now update the floater llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, playerName, llList2Key(players, idx)); @@ -840,7 +835,7 @@ default { // CRITICAL: Sync the updated picks data to all modules before roll phase dbg("๐Ÿ”„ [Game Manager] Syncing final picks data before roll phase..."); syncStateToMain(); - llSleep(1.0); // Longer delay to ensure sync propagates to all modules + llSleep(DELAY_MEDIUM_SYNC); // Longer delay to ensure sync propagates to all modules // Send roll dialog through Player_RegistrationManager dbg("๐ŸŽฏ [Game Manager] Sending roll dialog request for: " + perilPlayer); @@ -896,7 +891,7 @@ default { // CRITICAL: Sync the updated picks data to all modules before roll phase dbg("๐Ÿ”„ [Game Manager] Syncing final picks data before roll phase..."); syncStateToMain(); - llSleep(1.0); // Longer delay to ensure sync propagates to all modules + llSleep(DELAY_MEDIUM_SYNC); // Longer delay to ensure sync propagates to all modules // Force close any active number picker dialogs dbg("๐Ÿšซ [Game Manager] Sending CLOSE_ALL_DIALOGS command"); @@ -969,7 +964,7 @@ default { llList2CSV(names), NULL_KEY); // Brief delay to ensure sync reaches Floater Manager before update request - llSleep(0.1); + llSleep(DELAY_SHORT_SYNC); // Now update the floater llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, playerName, NULL_KEY); @@ -1006,7 +1001,7 @@ default { // CRITICAL: Sync the updated picks data to all modules before roll phase dbg("๐Ÿ”„ [Game Manager] Syncing final picks data before roll phase..."); syncStateToMain(); - llSleep(0.2); // Brief delay to ensure sync propagates + llSleep(DELAY_DIALOG_REFRESH); // Brief delay to ensure sync propagates // Force close any active number picker dialogs dbg("๐Ÿšซ [Game Manager] Sending CLOSE_ALL_DIALOGS command"); diff --git a/Game_Scoreboard_Manager_Linkset.lsl b/Game_Scoreboard_Manager_Linkset.lsl index c6a2e24..58fdb0b 100644 --- a/Game_Scoreboard_Manager_Linkset.lsl +++ b/Game_Scoreboard_Manager_Linkset.lsl @@ -698,7 +698,7 @@ integer updatePlayerDisplay(string playerName, integer lives, string profileUUID ]); // Remove the glow after a moment to make it normal - llSleep(0.1); + llSleep(DELAY_SCOREBOARD_REFRESH); llSetLinkPrimitiveParamsFast(updateProfilePrimIndex, [ PRIM_GLOW, ALL_SIDES, 0.0 // Remove glow ]); @@ -903,7 +903,7 @@ default { ]); // Remove the glow after a moment to make it normal - llSleep(0.1); + llSleep(DELAY_SCOREBOARD_REFRESH); llSetLinkPrimitiveParamsFast(profilePrimIndex, [ PRIM_GLOW, ALL_SIDES, 0.0 // Remove glow ]); diff --git a/Main_Controller_Linkset.lsl b/Main_Controller_Linkset.lsl index fff9809..2896ec0 100644 --- a/Main_Controller_Linkset.lsl +++ b/Main_Controller_Linkset.lsl @@ -91,10 +91,6 @@ list pendingRegistrations = []; // Keys of players who have registration in pro key currentPicker; -// Game timing settings -#define BOT_PICK_DELAY 2.0 -#define HUMAN_PICK_DELAY 1.0 -#define DIALOG_DELAY 1.5 integer gameTimer = 0; // Dynamic channel system for floaters and dialogs (still needed for external communication) @@ -295,9 +291,9 @@ resetGame() { // Let Floater Manager handle cleanup intelligently // Always request cleanup on a reset to ensure no orphans are left behind llMessageLinked(LINK_SET, MSG_CLEANUP_ALL_FLOATERS, "RESET", NULL_KEY); - llSleep(0.5); + llSleep(DELAY_STATE_TRANSITION); - llSleep(0.5); + llSleep(DELAY_STATE_TRANSITION); players = names = lives = picksData = globalPickedNumbers = readyPlayers = []; floaterChannels = []; @@ -330,7 +326,7 @@ resetGame() { // NEW: Update status bar for idle state sendStatusMessage("PERIL DICE GAME\nTouch to Join!"); - llSleep(0.5); + llSleep(DELAY_STATE_TRANSITION); llSetTimerEvent(0); initListeners(); @@ -659,11 +655,11 @@ default { // Direct floater update to ensure eliminated status is displayed llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, eliminatedPlayer, llList2Key(players, idx)); - llSleep(2.0); // Give floater time to show eliminated status with red display + llSleep(DELAY_ELIMINATION_NOTICE); // Give floater time to show eliminated status with red display if (willCauseVictory) { // If this elimination will cause victory, give extra time for 0 hearts display - llSleep(1.5); // Additional time for victory scenarios + llSleep(DELAY_VICTORY_NOTICE); // Additional time for victory scenarios } // CHANGED: Don't cleanup floaters during elimination - let them show eliminated status @@ -713,7 +709,7 @@ default { // ENHANCED: Give eliminated player's floater time to show eliminated status // before declaring victory and cleaning up dbg("โณ [Main Controller] Final elimination detected - allowing display time before victory"); - llSleep(2.0); // Give final eliminated player time to show red eliminated status + llSleep(DELAY_ELIMINATION_NOTICE); // Give final eliminated player time to show red eliminated status // CRITICAL: Set victory flag immediately to prevent sync processing victoryInProgress = TRUE; @@ -783,7 +779,7 @@ default { // Optimized to avoid large temporary string variables llMessageLinked(LINK_SET, MSG_SYNC_GAME_STATE, llList2CSV(lives) + "~EMPTY~" + perilPlayer + "~" + llList2CSV(names), NULL_KEY); - llSleep(0.5); // Give sync time to propagate + llSleep(DELAY_SYNC_PROPAGATION); // Give sync time to propagate // Continue the game with the new peril player - delegate to Game Manager llMessageLinked(LINK_SET, 998, perilPlayer, NULL_KEY); @@ -801,7 +797,7 @@ default { dbg("๐Ÿšจ [Main Controller] Emergency reset triggered - sending emergency reset to all scripts"); // Signal all scripts to emergency reset llMessageLinked(LINK_SET, MSG_EMERGENCY_RESET, "EMERGENCY_RESET", NULL_KEY); - llSleep(0.5); + llSleep(DELAY_SYNC_PROPAGATION); // Then do full reset resetGame(); return; @@ -814,7 +810,7 @@ default { string winner = llList2String(parts, 1); // Send dice roll winner message using LINK_SET llMessageLinked(LINK_SET, MSG_DICE_ROLL, winner + "|WON", NULL_KEY); - llSleep(2.0); + llSleep(DELAY_GAME_RESET); resetGame(); } return; @@ -1165,7 +1161,7 @@ default { string playerName = llList2String(names, i); key playerKey = llList2Key(players, i); llMessageLinked(LINK_SET, MSG_REZ_FLOAT, playerName, playerKey); - llSleep(0.3); + llSleep(DELAY_GENERIC_TICK); } dbg("โœ… Floater creation requests sent for all players!"); @@ -1249,7 +1245,7 @@ default { sendStatusMessage("GAME STARTING!\nAll players are ready!"); // Dramatic pause to let the start announcement be read before round prep begins - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); // For game start, use empty peril player - Game Manager will select one llMessageLinked(LINK_SET, 998, "", NULL_KEY); diff --git a/Peril_Constants.lsl b/Peril_Constants.lsl index b48db1c..eefaeac 100644 --- a/Peril_Constants.lsl +++ b/Peril_Constants.lsl @@ -149,3 +149,35 @@ key EXPERIENCE_ID = "06926390-26e6-11f1-a452-0242ac110003"; // Final Girlz I.N.C // --- Helper Functions Support --- #define MSG_GET_PICKS_REQUIRED 1002 #define MSG_GET_PICKER_INDEX 1003 + +// --- Timing & Delays --- +#define DELAY_SCAN_LINKSET 1.5 // Link scanner delay +#define DELAY_DIALOG_REFRESH 0.2 // Brief delay before refreshing/showing dialog (0.2s) +#define DELAY_BRIDGE_READY 1.0 // Delay for bridge initialization (1.0s) +#define DELAY_LEADERBOARD_SYNC 1.0 // Delay for leaderboard synchronization (1.0s) +#define DELAY_LEADERBOARD_READY 0.5 // Delay for leaderboard system readiness (0.5s) +#define DELAY_FLOATER_REZ 0.2 // Delay between floater rezzing (0.2s) +#define DELAY_FLOATER_UPDATE 0.05 // Very brief delay for floater updates (0.05s) +#define DELAY_SCOREBOARD_REFRESH 0.1 // Scoreboard refresh delay (0.1s) +#define DELAY_STATE_TRANSITION 0.5 // Generic state transition sleep (0.5s) +#define DELAY_ELIMINATION_NOTICE 2.0 // Time given to show eliminated status (2.0s) +#define DELAY_VICTORY_NOTICE 1.5 // Additional time for victory scenarios (1.5s) +#define DELAY_SYNC_PROPAGATION 0.5 // Time for linked messages to propagate (0.5s) +#define DELAY_GAME_RESET 2.0 // Delay during full system reset (2.0s) +#define DELAY_GENERIC_TICK 0.3 // Generic tick delay (0.3s) +#define DELAY_LONG_SYNC 4.0 // Long dramatic pause or heavy sync (4.0s) +#define DELAY_SHORT_SYNC 0.1 // Very short sync buffer (0.1s) +#define DELAY_MEDIUM_SYNC 1.0 // Medium sync buffer (1.0s) +#define DELAY_ANTI_SPAM 0.5 // Delay to prevent message loops/spam (0.5s) +#define DELAY_CONFETTI_START 2.0 // Delay before confetti effects (2.0s) +#define DELAY_CONFETTI_DURATION 4.0 // Duration confetti stays active (4.0s) +#define DELAY_CONFETTI_TICK 0.2 // Confetti particle interval (0.2s) +#define DELAY_CONFETTI_PREP 0.5 // Confetti preparation delay (0.5s) +#define DELAY_FLOAT_UPDATE 0.1 // Floater status update delay (0.1s) + +// --- Game Timing Settings (Originals relocated here) --- +#define BOT_PICK_DELAY 2.0 // Bot picking decision time (2.0s) +#define HUMAN_PICK_DELAY 1.0 // Human picking buffer (1.0s) +#define DIALOG_DELAY 1.5 // Base dialog presentation delay (1.5s) +#define STATUS_DISPLAY_TIME 8.0 // How long status text stays on display (8.0s) +#define BOT_RESPONSE_DELAY 1.5 // Bot response timing (1.5s) diff --git a/PlayerStatus_Float.lsl b/PlayerStatus_Float.lsl index 279b04c..624c400 100644 --- a/PlayerStatus_Float.lsl +++ b/PlayerStatus_Float.lsl @@ -93,7 +93,7 @@ default { dbg("๐Ÿงน [Status Float] CLEANUP signal received. Detaching from avatar..."); llDetachFromAvatar(); // Fallback for non-attachments - llSleep(0.1); + llSleep(DELAY_FLOAT_UPDATE); llDie(); } else if (llSubStringIndex(message, "ATTACH_TO:") == 0) { diff --git a/Player_DialogHandler.lsl b/Player_DialogHandler.lsl index 508f7a5..5524cef 100644 --- a/Player_DialogHandler.lsl +++ b/Player_DialogHandler.lsl @@ -681,7 +681,7 @@ default { string pick = llGetSubString(msg, 8, -1); string payload = "REMOVE_PICK~" + currentPickTarget + "|" + pick; llMessageLinked(LINK_THIS, MSG_PICK_ACTION, payload, id); - llSleep(0.2); + llSleep(DELAY_DIALOG_REFRESH); llMessageLinked(LINK_THIS, MSG_OWNER_PICK_MANAGER, currentPickTarget, id); } // Handle kick player selection @@ -720,7 +720,7 @@ default { } string payload = "ADD_PICK~" + currentPickTarget + "|" + msg; llMessageLinked(LINK_THIS, MSG_PICK_ACTION, payload, id); - llSleep(0.2); + llSleep(DELAY_DIALOG_REFRESH); llMessageLinked(LINK_THIS, MSG_OWNER_PICK_MANAGER, currentPickTarget, id); } // Handle position scan responses from follower displays diff --git a/Roll_ConfettiModule.lsl b/Roll_ConfettiModule.lsl index ce64796..8be39b8 100644 --- a/Roll_ConfettiModule.lsl +++ b/Roll_ConfettiModule.lsl @@ -267,7 +267,7 @@ default { dbg("๐ŸŽฒ [Roll Module] ๐Ÿค– " + str + " (bot) is requesting dice type for auto-roll..."); // Give a moment for "DICE IN THE AIR" message to be seen for bots - llSleep(2.0); + llSleep(DELAY_CONFETTI_START); rollInProgress = TRUE; // Set roll in progress for bot shouldRoll = TRUE; // Set flag to perform roll when dice type is received @@ -343,7 +343,7 @@ default { llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DICE SETTLED!\n" + perilPlayer + " rolled a " + resultStr + "!", NULL_KEY); // Dramatic pause to let the roll result be seen before the win/loss outcome pops up - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); string newPeril = ""; integer matched = FALSE; @@ -389,7 +389,7 @@ default { llMessageLinked(LINK_SCOREBOARD, MSG_UPDATE_PERIL_PLAYER, newPeril, NULL_KEY); // MSG_UPDATE_PERIL_PLAYER // Add delay to let status display before next phase - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); // Update floaters immediately to show correct peril player before sync llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, newPeril, NULL_KEY); @@ -425,20 +425,20 @@ default { llMessageLinked(LINK_SCOREBOARD, MSG_GAME_STATUS, "Direct Hit", NULL_KEY); llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "DIRECT HIT!\n" + perilPlayer + " matched!", NULL_KEY); // Add delay to let status display before next phase - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); } else if (!matched) { llSay(0, "๐Ÿฉธ NO SHIELD! Nobody picked " + resultStr + " - " + perilPlayer + " takes the hit from the d" + (string)diceType + "! ๐Ÿฉธ"); // Direct scoreboard status update (texture and text) llMessageLinked(LINK_SCOREBOARD, MSG_GAME_STATUS, "No Shield", NULL_KEY); llMessageLinked(LINK_SET, MSG_STATUS_TEXT, "NO SHIELD!\n" + perilPlayer + " took the hit!", NULL_KEY); // Add delay to let status display before next phase - llSleep(4.0); + llSleep(DELAY_LONG_SYNC); } else { // This should never happen in normal game flow since Plot Twist case is handled above // But if it does, it means someone else picked it - this should have been Plot Twist dbg("๐ŸŽฒ [Roll Module] โš ๏ธ LOGIC ERROR: Someone picked " + resultStr + " but not handled as Plot Twist!"); llSay(0, "๐Ÿฉธ SHIELD FAILED! " + perilPlayer + " takes the hit despite someone picking " + resultStr + "! ๐Ÿฉธ"); - llSleep(2.0); + llSleep(DELAY_ELIMINATION_NOTICE); } llMessageLinked(LINK_SET, MSG_UPDATE_FLOAT, perilPlayer, NULL_KEY); @@ -490,7 +490,7 @@ default { llDumpList2String(picksData, "^") + "~" + perilForSync + "~" + llList2CSV(names), NULL_KEY); - llSleep(0.2); + llSleep(DELAY_DIALOG_REFRESH); // Additional floater updates to ensure correct peril player display dbg("๐ŸŽฒ [Roll Module] ๐Ÿ”„ Updating all floaters with new peril player: " + perilPlayer); @@ -504,7 +504,7 @@ default { dbg("๐ŸŽฒ [Roll Module] ๐ŸŽฏ Round complete - sending continuation directly to Game Manager"); // Brief delay to ensure sync propagates - llSleep(0.5); + llSleep(DELAY_SYNC_PROPAGATION); // Send continuation directly to Game Manager (more efficient than through Main Controller) // For non-elimination cases, continue with current peril player