Peril_Dice/DialogHandler.lsl
RebeccaNod1 89a364d2ec Summary of Today’s Work:
Issue Identified:

The main issue was that the floater was showing 0 as the player's pick even after they made a selection, and the correct pick was not being reflected in the float.

Steps Taken:

Improved Data Synchronization: We ensured that the picksData list, which holds player choices, was properly updated and synchronized across all parts of the system.

State Serialization: The game state, including updated picksData, was serialized correctly using the serializeGameState() function. This ensured that the floater was aware of the new state whenever a player's pick changed.

Immediate Float Updates: After updating a player's pick, we immediately sent the new game state (gameSync) to all linked objects to update their floats, ensuring the pick was reflected in the UI.

Key Modifications:

Main Peril Dice Controller: We improved the way we updated picksData and immediately synchronized this update with the floater using MSG_SYNC_GAME_STATE.

StatFloat: Adjustments were made to handle receiving and displaying updated pick data, ensuring that picks were displayed correctly on the float after each update.

Dialog Handling: Proper dialogs were shown to players for pick choices, and feedback on their picks was sent back to update the floats in real-time.

Outcome:

The game now correctly updates and displays the player’s picks on their respective floats immediately after making a choice.

The picks are reflected in the logs as well, with the correct updated pick being shown rather than 0.

Final Result:

The issue of picks not being displayed correctly has been resolved, and the flow of data between the scripts (game state synchronization, float updates, etc.) is working as intended.
2025-07-26 03:52:29 -05:00

50 lines
1.6 KiB
Text

// === Dialog Handler (Updated for Peril Dice) ===
integer MSG_SHOW_DIALOG = 101;
integer numberPickChannel = -77888;
list getDialogButtons(integer diceType) {
list buttons = [];
integer i;
for (i = 1; i <= diceType; i++) {
buttons += [(string)i];
}
return buttons;
}
showPickDialog(string name, key id, integer diceType) {
if (diceType <= 0) {
llOwnerSay("⚠️ Cannot show dialog: diceType is 0 or invalid.");
return;
}
list options = getDialogButtons(diceType);
llOwnerSay("🗨️ Showing dialog to: " + name);
llOwnerSay("📋 Page: 0, DiceType: " + (string)diceType);
llOwnerSay("🔢 Options: " + llList2CSV(options));
llDialog(id, "Choose a number (1 - " + (string)diceType + "):", options, numberPickChannel);
}
default {
state_entry() {
llListen(numberPickChannel, "", NULL_KEY, "");
}
link_message(integer sender, integer num, string str, key id) {
if (num == MSG_SHOW_DIALOG) {
list parts = llParseString2List(str, ["|"], []);
if (llGetListLength(parts) < 2) {
llOwnerSay("⚠️ Malformed MSG_SHOW_DIALOG input: " + str);
return;
}
string name = llList2String(parts, 0);
integer diceType = (integer)llList2String(parts, 1);
showPickDialog(name, id, diceType);
}
}
listen(integer channel, string name, key id, string message) {
llOwnerSay("🔊 Listen triggered on channel: " + (string)channel + ", msg: " + message + ", from: " + name + " (" + (string)id + ")");
}
}