53 lines
2 KiB
Text
53 lines
2 KiB
Text
// Bot Manager for Peril Dice
|
|
// Handles logic for test players (bots): picking numbers and rolling dice
|
|
|
|
// Configuration
|
|
integer LISTEN_CHANNEL = -9999; // Change if needed to match main controller
|
|
|
|
// Helper to parse and respond to pick commands
|
|
doBotPick(string botName, integer count, integer diceMax) {
|
|
list picks;
|
|
while (llGetListLength(picks) < count) {
|
|
integer roll = 1 + (integer)(llFrand((float)diceMax));
|
|
if (llListFindList(picks, [roll]) == -1) {
|
|
picks += roll;
|
|
}
|
|
}
|
|
string pickString = llDumpList2String(picks, ",");
|
|
llRegionSay(LISTEN_CHANNEL, "BOT_PICKED:" + botName + ":" + pickString);
|
|
}
|
|
|
|
// Helper to respond to peril roll commands
|
|
doBotRoll(string botName, integer diceMax) {
|
|
integer roll = 1 + (integer)(llFrand((float)diceMax));
|
|
llRegionSay(LISTEN_CHANNEL, "BOT_ROLL:" + botName + ":" + (string)roll);
|
|
}
|
|
|
|
default {
|
|
state_entry() {
|
|
llListen(LISTEN_CHANNEL, "", NULL_KEY, "");
|
|
llOwnerSay("[Bot Manager] Ready and listening on channel " + (string)LISTEN_CHANNEL);
|
|
}
|
|
|
|
listen(integer channel, string name, key id, string message) {
|
|
if (llSubStringIndex(message, "BOT_PICK:") == 0) {
|
|
// Format: BOT_PICK:bot_1:3:20
|
|
list parts = llParseStringKeepNulls(message, [":"], []);
|
|
if (llGetListLength(parts) == 4) {
|
|
string botName = llList2String(parts, 1);
|
|
integer count = (integer)llList2String(parts, 2);
|
|
integer diceMax = (integer)llList2String(parts, 3);
|
|
doBotPick(botName, count, diceMax);
|
|
}
|
|
}
|
|
else if (llSubStringIndex(message, "BOT_PERIL_ROLL:") == 0) {
|
|
// Format: BOT_PERIL_ROLL:bot_1:20
|
|
list parts = llParseStringKeepNulls(message, [":"], []);
|
|
if (llGetListLength(parts) == 3) {
|
|
string botName = llList2String(parts, 1);
|
|
integer diceMax = (integer)llList2String(parts, 2);
|
|
doBotRoll(botName, diceMax);
|
|
}
|
|
}
|
|
}
|
|
}
|