39 lines
1.3 KiB
Text
39 lines
1.3 KiB
Text
key target;
|
|
string displayText;
|
|
|
|
default {
|
|
state_entry() {
|
|
llOwnerSay("🧭 StatFloat active");
|
|
llSetText("", <1,1,1>, 1.0);
|
|
llSetTimerEvent(1.0); // track every second
|
|
}
|
|
|
|
listen(integer channel, string name, key id, string message) {
|
|
if (llSubStringIndex(message, "FLOAT:") == 0) {
|
|
list parts = llParseString2List(message, ["|"], []);
|
|
if (llGetListLength(parts) >= 2) {
|
|
target = (key)llGetSubString(llList2String(parts, 0), 6, -1);
|
|
displayText = llList2String(parts, 1);
|
|
llSetText(displayText, <1,1,1>, 1.0);
|
|
llOwnerSay("✅ Received FLOAT for: " + (string)target);
|
|
}
|
|
} else if (message == "CLEANUP") {
|
|
llOwnerSay("🧹 Cleaning up...");
|
|
llDie();
|
|
}
|
|
}
|
|
|
|
on_rez(integer start_param) {
|
|
llListen(start_param, "", NULL_KEY, "");
|
|
llOwnerSay("📡 Listening on channel " + (string)start_param);
|
|
}
|
|
|
|
timer() {
|
|
if (target != NULL_KEY && llKey2Name(target) != "") {
|
|
vector pos = llList2Vector(llGetObjectDetails(target, [OBJECT_POS]), 0) + <1,0,1>;
|
|
llSetRegionPos(pos);
|
|
} else {
|
|
llOwnerSay("⚠️ Target key invalid or avatar not found.");
|
|
}
|
|
}
|
|
}
|