dice fix
This commit is contained in:
parent
11a4888566
commit
23d02080ca
1 changed files with 31 additions and 1 deletions
|
|
@ -61,6 +61,8 @@ list picksData = [];
|
||||||
string perilPlayer = "";
|
string perilPlayer = "";
|
||||||
integer diceType = 6; // Store the dice type for rolling
|
integer diceType = 6; // Store the dice type for rolling
|
||||||
integer shouldRoll = FALSE; // Flag to trigger roll after dice type is received
|
integer shouldRoll = FALSE; // Flag to trigger roll after dice type is received
|
||||||
|
integer rollInProgress = FALSE; // Prevent multiple simultaneous rolls
|
||||||
|
integer lastRollTime = 0; // Track when last roll happened
|
||||||
|
|
||||||
list getPicksFor(string nameInput) {
|
list getPicksFor(string nameInput) {
|
||||||
integer i;
|
integer i;
|
||||||
|
|
@ -203,6 +205,9 @@ default {
|
||||||
// Request dice type directly from Calculator
|
// Request dice type directly from Calculator
|
||||||
llMessageLinked(LINK_SET, 1001, (string)llGetListLength(names), NULL_KEY);
|
llMessageLinked(LINK_SET, 1001, (string)llGetListLength(names), NULL_KEY);
|
||||||
} else {
|
} else {
|
||||||
|
// Reset any previous roll state before showing dialog
|
||||||
|
rollInProgress = FALSE;
|
||||||
|
shouldRoll = FALSE;
|
||||||
// Show dialog for human players
|
// Show dialog for human players
|
||||||
llDialog(id, "🎲 THE MOMENT OF TRUTH! You're in ultimate peril. Will you face your fate?", ["ROLL THE DICE OF FATE"], rollDialogChannel);
|
llDialog(id, "🎲 THE MOMENT OF TRUTH! You're in ultimate peril. Will you face your fate?", ["ROLL THE DICE OF FATE"], rollDialogChannel);
|
||||||
}
|
}
|
||||||
|
|
@ -223,21 +228,31 @@ default {
|
||||||
llOwnerSay("🎲 [Roll Module] Received dice type: d" + (string)diceType);
|
llOwnerSay("🎲 [Roll Module] Received dice type: d" + (string)diceType);
|
||||||
|
|
||||||
// If roll was requested from listen handler, perform it now
|
// If roll was requested from listen handler, perform it now
|
||||||
if (shouldRoll) {
|
if (shouldRoll && rollInProgress) {
|
||||||
shouldRoll = FALSE; // Reset flag
|
shouldRoll = FALSE; // Reset flag
|
||||||
llOwnerSay("🎲 [Roll Module] Performing requested roll with d" + (string)diceType);
|
llOwnerSay("🎲 [Roll Module] Performing requested roll with d" + (string)diceType);
|
||||||
|
|
||||||
// Use MSG_ROLL_RESULT handler to perform the actual roll
|
// Use MSG_ROLL_RESULT handler to perform the actual roll
|
||||||
llMessageLinked(LINK_THIS, MSG_ROLL_RESULT, (string)diceType, NULL_KEY);
|
llMessageLinked(LINK_THIS, MSG_ROLL_RESULT, (string)diceType, NULL_KEY);
|
||||||
|
} else if (shouldRoll && !rollInProgress) {
|
||||||
|
llOwnerSay("⚠️ [Roll Module] Roll was cancelled or already completed, ignoring dice type");
|
||||||
|
shouldRoll = FALSE; // Clear stale flag
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Legacy MSG_ROLL_RESULT handler (if still used somewhere)
|
// Legacy MSG_ROLL_RESULT handler (if still used somewhere)
|
||||||
else if (num == MSG_ROLL_RESULT) {
|
else if (num == MSG_ROLL_RESULT) {
|
||||||
|
// Additional safety check
|
||||||
|
if (!rollInProgress) {
|
||||||
|
llOwnerSay("⚠️ [Roll Module] Ignoring roll request - no roll in progress");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
integer diceType = (integer)str;
|
integer diceType = (integer)str;
|
||||||
integer result = rollDice(diceType);
|
integer result = rollDice(diceType);
|
||||||
string resultStr = (string)result;
|
string resultStr = (string)result;
|
||||||
|
lastRollTime = llGetUnixTime(); // Record roll time
|
||||||
llSay(0, "🎲 THE D" + (string)diceType + " OF FATE! " + perilPlayer + " rolled a " + resultStr + " on the " + (string)diceType + "-sided die! 🎲");
|
llSay(0, "🎲 THE D" + (string)diceType + " OF FATE! " + perilPlayer + " rolled a " + resultStr + " on the " + (string)diceType + "-sided die! 🎲");
|
||||||
|
|
||||||
// Send dice roll to scoreboard for display on dice screen
|
// Send dice roll to scoreboard for display on dice screen
|
||||||
|
|
@ -368,13 +383,28 @@ default {
|
||||||
// Let Main Controller handle next round logic to avoid loops
|
// Let Main Controller handle next round logic to avoid loops
|
||||||
// Don't immediately trigger next round dialog - let game flow naturally
|
// Don't immediately trigger next round dialog - let game flow naturally
|
||||||
llOwnerSay("🎯 Round complete, waiting for Main Controller to handle next phase...");
|
llOwnerSay("🎯 Round complete, waiting for Main Controller to handle next phase...");
|
||||||
|
|
||||||
|
// Clear roll protection after processing is complete
|
||||||
|
rollInProgress = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
listen(integer channel, string name, key id, string msg) {
|
listen(integer channel, string name, key id, string msg) {
|
||||||
if (msg == "Roll" || msg == "ROLL THE DICE OF FATE") {
|
if (msg == "Roll" || msg == "ROLL THE DICE OF FATE") {
|
||||||
|
// Prevent multiple rolls within 3 seconds
|
||||||
|
integer currentTime = llGetUnixTime();
|
||||||
|
if (rollInProgress) {
|
||||||
|
llOwnerSay("⚠️ Roll already in progress, ignoring duplicate click by " + name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (currentTime - lastRollTime < 3) {
|
||||||
|
llOwnerSay("⚠️ Roll too soon after previous roll, ignoring click by " + name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle dice roll - need to get dice type from Calculator
|
// Handle dice roll - need to get dice type from Calculator
|
||||||
llOwnerSay("🎲 Roll button clicked by " + name + " (key: " + (string)id + ")");
|
llOwnerSay("🎲 Roll button clicked by " + name + " (key: " + (string)id + ")");
|
||||||
|
rollInProgress = TRUE; // Lock out other rolls
|
||||||
shouldRoll = TRUE; // Set flag to perform roll when dice type is received
|
shouldRoll = TRUE; // Set flag to perform roll when dice type is received
|
||||||
// Request dice type directly from Calculator
|
// Request dice type directly from Calculator
|
||||||
llMessageLinked(LINK_SET, 1001, (string)llGetListLength(names), NULL_KEY);
|
llMessageLinked(LINK_SET, 1001, (string)llGetListLength(names), NULL_KEY);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue