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.
50 lines
1.6 KiB
Text
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 + ")");
|
|
}
|
|
}
|