broad 0.5.5 update
parent
8bb70f04dd
commit
4c4aea4663
4
ARES/a
4
ARES/a
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2023 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
#define ARES
|
||||
|
||||
// version that OS components will report:
|
||||
#define ARES_VERSION "0.5.3"
|
||||
#define ARES_VERSION "0.5.5"
|
||||
#define ARES_VERSION_TAGS "beta 3"
|
||||
|
||||
// copyright year for the OS:
|
||||
|
|
|
|||
|
|
@ -46,13 +46,13 @@
|
|||
#define http_get(_url, _outs, _user) notify_program("proc fetch " + _url, _outs, NULL_KEY, _user)
|
||||
|
||||
// http_get but with headers (use llHTTPRequest() format):
|
||||
#define http_get_extended(_url, _outs, _user, ...) notify_program("proc fetch " + _url + " " + jsarray((list)(__VA_ARGS__)), _outs, NULL_KEY, _user)
|
||||
#define http_get_extended(_url, _outs, _user, ...) notify_program("proc fetch " + _url + " " + jsarray(__VA_ARGS__), _outs, NULL_KEY, _user)
|
||||
|
||||
// http_post(): POSTs the input stream to a web address - use pipe_write() with a generated key to populate the input stream
|
||||
#define http_post(_url, _outs, _ins, _user) notify_program("proc fetch " + _url, _outs, _ins, _user)
|
||||
|
||||
// http_post() but with headers (use llHTTPRequest() format):
|
||||
#define http_post_extended(_url, _outs, _ins, _user, ...) notify_program("proc fetch " + _url + " " + jsarray((list)(__VA_ARGS__)), _outs, _ins, _user)
|
||||
#define http_post_extended(_url, _outs, _ins, _user, ...) notify_program("proc fetch " + _url + " " + jsarray(__VA_ARGS__), _outs, _ins, _user)
|
||||
|
||||
// request_uuid(): returns agent key
|
||||
#define request_uuid(_agent, _outs, _user) notify_program("proc uuid " + _agent, _outs, NULL_KEY, _user)
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ string tasks_queue = "{}";
|
|||
// [DEPRECATED] send a receipt for a completed task, without shutting down:
|
||||
#define resolve(_R) if(_R) system(SIGNAL_DONE, ares_encode(_R) + NULL_KEY + " " + PROGRAM_NAME)
|
||||
|
||||
// [DEPRECATED] send a receipt for a completed task (with callback), without shutting down - deprecated:
|
||||
// send a receipt for a completed task (with callback), without shutting down - suitable for modern NV jobs:
|
||||
#define resolvec(_R, _ins) if(_R) system(SIGNAL_DONE, ares_encode(_R) + (string)(_ins) + " " + PROGRAM_NAME)
|
||||
|
||||
// [QUESTIONABLE] send a receipt for a completed task, including callback, and close streams (if they are volatile invoke pipes):
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
#include <ARES/a>
|
||||
#define CLIENT_VERSION "1.1.1"
|
||||
#define CLIENT_VERSION "1.1.2"
|
||||
#define CLIENT_VERSION_TAGS "release"
|
||||
|
||||
string DEFAULT_DOMAIN = "en.wikipedia.org";
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@
|
|||
*/
|
||||
|
||||
#include <ARES/a>
|
||||
#define CLIENT_VERSION "0.2.1"
|
||||
#define CLIENT_VERSION "0.2.2"
|
||||
#define CLIENT_VERSION_TAGS "alpha"
|
||||
|
||||
main(integer src, integer n, string m, key outs, key ins, key user) {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
#include <ARES/a>
|
||||
#include <lslisp.lsl>
|
||||
#define CLIENT_VERSION "0.2.5"
|
||||
#define CLIENT_VERSION "0.2.6"
|
||||
#define CLIENT_VERSION_TAGS "lang " + INTERPRETER_VERSION
|
||||
|
||||
integer file_offset;
|
||||
|
|
|
|||
|
|
@ -817,7 +817,7 @@ integer UThread;
|
|||
key IsRestoring;
|
||||
key Library;
|
||||
key IsSaveDue;
|
||||
integer G;
|
||||
integer G = 2;
|
||||
|
||||
default
|
||||
{
|
||||
|
|
@ -828,12 +828,20 @@ default
|
|||
K = llGetLinkKey(3);
|
||||
LslUserScript = llGetScriptName();
|
||||
edefaultrez = llListen(2046820352, "", E, "");
|
||||
llMessageLinked(1, 3840, LslUserScript + "\n" + "0.2.5" + " " + "lang " + "0.2.3", "");
|
||||
llMessageLinked(1, 3840, LslUserScript + "\n" + "0.2.6" + " " + "lang " + "0.2.3", "");
|
||||
}
|
||||
|
||||
on_rez(integer llJsonValueType)
|
||||
{
|
||||
llResetScript();
|
||||
E = llGetLinkKey(1);
|
||||
gC = llGetLinkKey(2);
|
||||
K = llGetLinkKey(3);
|
||||
LslUserScript = llGetScriptName();
|
||||
llListenRemove(edefaultrez);
|
||||
edefaultrez = llListen(2046820352, "", E, "");
|
||||
g_ = 0;
|
||||
H = "";
|
||||
llMessageLinked(1, 3840, LslUserScript + "\n" + "0.5.4" + " " + "beta 3", "");
|
||||
}
|
||||
|
||||
listen(integer llListen, string llFrand, key llGetListEntryType, string llJsonValueType)
|
||||
|
|
@ -857,22 +865,8 @@ default
|
|||
}
|
||||
if (UThread & -(llJsonGetValue(System, (list)((string)IsRestoring)) == ""))
|
||||
llRegionSayTo(gC, 2046828547, "%3" + H + "V" + llList2Json("", (list)IsRestoring));
|
||||
if (llList2ListStrided(llJson2List(System), 0, ((integer)-1), 2) == [])
|
||||
{
|
||||
{
|
||||
if (UThread)
|
||||
llMessageLinked(1, 4, llChar(33 + ((UThread & 4032) >> 6)) + llChar(33 + (UThread & 63)) + (string)IsRestoring + " " + LslUserScript, "");
|
||||
llMessageLinked(1, 3849, LslUserScript, "");
|
||||
G = G & ((integer)-2);
|
||||
llSetScriptState(LslUserScript, 0);
|
||||
llSleep(0.022);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UThread)
|
||||
llMessageLinked(1, 4, llChar(33 + ((UThread & 4032) >> 6)) + llChar(33 + (UThread & 63)) + (string)IsRestoring + " " + LslUserScript, "");
|
||||
}
|
||||
if (UThread)
|
||||
llMessageLinked(1, 4, llChar(33 + ((UThread & 4032) >> 6)) + llChar(33 + (UThread & 63)) + (string)IsRestoring + " " + LslUserScript, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
#include <ARES/a>
|
||||
#include <ARES/api/interface.consts.h.lsl>
|
||||
|
||||
#define CLIENT_VERSION "1.0.1"
|
||||
#define CLIENT_VERSION "1.0.2"
|
||||
#define CLIENT_VERSION_TAGS "release"
|
||||
|
||||
string fg_image = "947c7a17-4e88-2f96-b419-dc37b647127d";
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
#include <ARES/a>
|
||||
#define CLIENT_VERSION "0.2.2"
|
||||
#define CLIENT_VERSION "0.2.3"
|
||||
#define CLIENT_VERSION_TAGS "alpha"
|
||||
|
||||
list feeds;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
#include <ARES/a>
|
||||
#include <ARES/api/interface.consts.h.lsl>
|
||||
|
||||
#define CLIENT_VERSION "1.0.1"
|
||||
#define CLIENT_VERSION "1.0.2"
|
||||
#define CLIENT_VERSION_TAGS "release"
|
||||
|
||||
#define call_interface(_outs, _user, _msg) \
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
#include <ARES/a>
|
||||
#define CLIENT_VERSION "0.2.1"
|
||||
#define CLIENT_VERSION "0.2.2"
|
||||
#define CLIENT_VERSION_TAGS "alpha"
|
||||
|
||||
string DEFAULT_DOMAIN = "eutils.ncbi.nlm.nih.gov";
|
||||
|
|
|
|||
|
|
@ -117,6 +117,12 @@
|
|||
|
||||
// most of the above are untested; feel free to experiment and file bug reports or submit fixes
|
||||
|
||||
// #define GAUGE_TEX_SCALE 1
|
||||
// resize the gauge texture (added for Federator)
|
||||
|
||||
// #define GAUGE_TEX_ROT 0
|
||||
// rotate the gauge texture (added for Federator)
|
||||
|
||||
// #define FAN_AXIS
|
||||
// set the direction that the fan prim should spin around (default: <0, 0, 1>) - can also be calculated during extra_startup() by setting fan_axis variable
|
||||
// #define MAX_FAN_SPEED
|
||||
|
|
@ -304,6 +310,12 @@ vector fan_axis;
|
|||
#ifndef METER_TEX
|
||||
#define METER_TEX "e8d9ff28-cd08-f792-cdc6-95533ee8d360"
|
||||
#endif
|
||||
#ifndef GAUGE_TEX_SCALE
|
||||
#define GAUGE_TEX_SCALE 1.0
|
||||
#endif
|
||||
#ifndef GAUGE_TEX_ROT
|
||||
#define GAUGE_TEX_ROT 0
|
||||
#endif
|
||||
#ifndef IMPACT_SOUNDS
|
||||
#define IMPACT_SOUNDS ["f5fd6f18-ef7d-85e3-4d5c-e56bd8e0e16a", "1b534a6e-e89b-3e11-ec5a-2da94f845b89", "b687ed67-61fc-bf07-8382-b07aba752df6"]
|
||||
#define IMPACT_SOUND_COUNT 3
|
||||
|
|
@ -445,7 +457,7 @@ lights() {
|
|||
|
||||
actions += [
|
||||
PRIM_LINK_TARGET, POWER_GAUGE,
|
||||
PRIM_TEXTURE, ALL_SIDES, METER_TEX, <0.25, 1.0, 0>, <power * -0.25 + 0.125, 0.125, 0>, 0,
|
||||
PRIM_TEXTURE, ALL_SIDES, METER_TEX, <0.25, 1.0, 0> / GAUGE_TEX_SCALE, <power * -0.25 + 0.125, 0.125, 0>, GAUGE_TEX_ROT,
|
||||
PRIM_COLOR, ALL_SIDES, pc * power_factor, 1
|
||||
];
|
||||
}
|
||||
|
|
@ -466,7 +478,7 @@ lights() {
|
|||
}
|
||||
actions += [
|
||||
PRIM_LINK_TARGET, RATE_GAUGE,
|
||||
PRIM_TEXTURE, ALL_SIDES, METER_TEX, <0.25, 1.0, 0>, <p_rate * -0.25 + 0.125, 0.375, 0>, 0,
|
||||
PRIM_TEXTURE, ALL_SIDES, METER_TEX, <0.25, 1.0, 0> / GAUGE_TEX_SCALE, <p_rate * -0.25 + 0.125, 0.375, 0>, GAUGE_TEX_ROT,
|
||||
PRIM_COLOR, ALL_SIDES, rc * power_factor, 1
|
||||
];
|
||||
// echo("Rate now: " + (string)rate);
|
||||
|
|
@ -901,7 +913,9 @@ default {
|
|||
tell(system, c, "color-q");
|
||||
llSleep(0.1);
|
||||
tell(system, c, "conf-get id.callsign");
|
||||
llSleep(0.2);
|
||||
tell(system, c, "conf-get interface.sound");
|
||||
llSleep(0.2);
|
||||
tell(system, c, "conf-get hardware.controller");
|
||||
#ifndef OVERRIDE_TOUCH
|
||||
#if SCREEN_TYPE != SCREEN_NONE && SCREEN_TYPE != SCREEN_DAYBREAK
|
||||
|
|
@ -1225,15 +1239,20 @@ default {
|
|||
} else if(cmd == "temperature") {
|
||||
temperature = (float)gets(argv, 1);
|
||||
} else if(cmd == "conf") {
|
||||
string a1 = gets(argv, 1);
|
||||
string p = concat(delrange(argv, 0, 1), " ");
|
||||
if(a1 == "hardware.controller") {
|
||||
soothe = (integer)getjs(p, ["soothe"]);
|
||||
} else if(a1 == "id.callsign") {
|
||||
llSetObjectName(p + " (controller)");
|
||||
} else if(a1 == "interface.sound") {
|
||||
sounds = p;
|
||||
}
|
||||
/*list lines = split(delstring(m, 0, 4), "\n"); // remove 'conf '
|
||||
integer i = count(lines);
|
||||
while(i--) {
|
||||
argv = split(gets(lines, i), " ");*/
|
||||
string a1 = gets(argv, 1);
|
||||
string p = concat(delrange(argv, 0, 1), " ");
|
||||
if(a1 == "hardware.controller") {
|
||||
soothe = (integer)getjs(p, ["soothe"]);
|
||||
} else if(a1 == "id.callsign") {
|
||||
llSetObjectName(p + " (controller)");
|
||||
} else if(a1 == "interface.sound") {
|
||||
sounds = p;
|
||||
}
|
||||
// }
|
||||
#if SCREEN_TYPE != SCREEN_NONE
|
||||
} else if(cmd == "menu" && power_on) {
|
||||
current_menu = m;
|
||||
|
|
@ -1509,8 +1528,10 @@ default {
|
|||
LID_LEFT = pi;
|
||||
else if(pn == "lidr")
|
||||
LID_RIGHT = pi;
|
||||
/*else
|
||||
echo("part " + (string)pi + ": " + pn);*/
|
||||
|
||||
#ifdef DEBUG_LINKS
|
||||
echo("found " + pn + " at link address :" + (string)pi);
|
||||
#endif
|
||||
}
|
||||
|
||||
integer pc;
|
||||
|
|
|
|||
34
ARES/program
34
ARES/program
|
|
@ -54,6 +54,20 @@ key _input_s;
|
|||
key _output_s;
|
||||
key _user;
|
||||
|
||||
/*
|
||||
* FORCE NON-VOLATILE (0.5.4)
|
||||
*
|
||||
* A new development experiment to ensure all jobs are NV.
|
||||
* Jobs that (for some reason) can't be converted to NV can use #define VOLATILE
|
||||
* to force the old behavior.
|
||||
*/
|
||||
|
||||
#ifndef VOLATILE
|
||||
#ifndef NON_VOLATILE
|
||||
#define NON_VOLATILE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* CURRENT JOB MODE
|
||||
*
|
||||
|
|
@ -258,7 +272,6 @@ default {
|
|||
main(_resolved = 0, n, remainder, NULL_KEY, NULL_KEY, NULL_KEY);
|
||||
}
|
||||
|
||||
#ifndef NON_VOLATILE
|
||||
/*
|
||||
PROBLEM: unlike linked messages, listeners can accumulate requests
|
||||
while the program is hibernating, causing it to sleep while there
|
||||
|
|
@ -271,14 +284,19 @@ default {
|
|||
if(_resolved && getjs(tasks_queue, [(string)_input_s]) == JSON_INVALID)
|
||||
pipe_close_volatile([_input_s]);
|
||||
|
||||
if(!task_count()) {
|
||||
#ifdef DEBUG
|
||||
echo("[" + PROGRAM_NAME + "] finished " + (string)n + ": " + remainder);
|
||||
#endif
|
||||
exitc(_input_s); // also performs resolve(_resolved)
|
||||
} else {
|
||||
#ifdef NON_VOLATILE
|
||||
#ifndef LEGACY_NON_VOLATILE
|
||||
resolvec(_resolved, _input_s);
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
if(!task_count()) {
|
||||
#ifdef DEBUG
|
||||
echo("[" + PROGRAM_NAME + "] finished " + (string)n + ": " + remainder);
|
||||
#endif
|
||||
exitc(_input_s); // also performs resolve(_resolved)
|
||||
} else {
|
||||
resolvec(_resolved, _input_s);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,14 @@ string config_parameter = "(uninitialized)";
|
|||
vector config_value;
|
||||
vector config_backup;
|
||||
|
||||
integer weapon_active;
|
||||
key weapon;
|
||||
float weapon_charge;
|
||||
float weapon_capacity;
|
||||
float weapon_shot_cost;
|
||||
|
||||
string BIGNUM_TEX;
|
||||
|
||||
position_all(integer only_devices) {
|
||||
in_mlook = TRUE && (llGetAgentInfo(avatar) & AGENT_MOUSELOOK);
|
||||
if(in_mlook) {
|
||||
|
|
@ -543,6 +551,90 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
if(!heat_alarm)
|
||||
llLinkStopSound(HEAT_GAUGE);
|
||||
}
|
||||
} else if(n == SIGNAL_NOTIFY) {
|
||||
list argv = splitnulls(m, " ");
|
||||
string action = gets(argv, 1);
|
||||
|
||||
if(action == "weapon") {
|
||||
integer update_display;
|
||||
|
||||
// echo("weapon: " + m);
|
||||
|
||||
weapon = outs;
|
||||
string subaction = gets(argv, 2);
|
||||
if(subaction == "active") {
|
||||
weapon_active = 1;
|
||||
update_display = 1;
|
||||
weapon_shot_cost = (float)gets(argv, 3);
|
||||
weapon_capacity = (float)gets(argv, 4);
|
||||
weapon_charge = (float)gets(argv, 5);
|
||||
} else if(subaction == "inactive") {
|
||||
weapon_active = 0;
|
||||
update_display = 1;
|
||||
} else if(subaction == "info") {
|
||||
float new_weapon_charge = (float)gets(argv, 5);
|
||||
float new_weapon_capacity = (float)gets(argv, 4);
|
||||
float new_weapon_shot_cost = (float)gets(argv, 3);
|
||||
if(new_weapon_charge != weapon_charge
|
||||
|| new_weapon_shot_cost != weapon_shot_cost
|
||||
|| new_weapon_capacity != weapon_capacity) {
|
||||
weapon_capacity = new_weapon_capacity;
|
||||
weapon_shot_cost = new_weapon_shot_cost;
|
||||
weapon_charge = new_weapon_charge;
|
||||
update_display = 1;
|
||||
}
|
||||
} else if(subaction == "fire") {
|
||||
weapon_charge -= weapon_shot_cost;
|
||||
if(weapon_charge < 0)
|
||||
weapon_charge = 0;
|
||||
update_display = 1;
|
||||
}
|
||||
|
||||
if(update_display) {
|
||||
if(weapon != "" && weapon != NULL_KEY && llGetOwnerKey(weapon) != weapon) {
|
||||
if(weapon_shot_cost == 0)
|
||||
return;
|
||||
|
||||
integer total_ammo = (integer)(weapon_charge / weapon_shot_cost);
|
||||
integer total_ammo_max = (integer)(weapon_capacity / weapon_shot_cost);
|
||||
|
||||
string ammo_string = (string)total_ammo + ":" + (string)total_ammo_max;
|
||||
ammo_string = delstring(";;;;;;;;", 8 - strlen(ammo_string), LAST) + ammo_string;
|
||||
|
||||
#define BIGNUM(_face, _index, _color) PRIM_TEXTURE, _face, BIGNUM_TEX, <0.0625, 1, 0>, <-0.46875 + 0.0625 * (float)(_index), 0, 0>, 0, PRIM_COLOR, _face, _color, 1
|
||||
|
||||
vector ammo_color = color;
|
||||
if(weapon_charge < weapon_shot_cost)
|
||||
ammo_color = color_bad;
|
||||
else if(weapon_charge <= 0.25 * weapon_capacity)
|
||||
ammo_color = color_bad * 0.5 + color * 0.5;
|
||||
|
||||
integer i = 8;
|
||||
while(i--)
|
||||
setp(AMMO, [BIGNUM(i, llOrd(ammo_string, i) - 0x30, ammo_color)]);
|
||||
|
||||
}
|
||||
|
||||
if(in_mlook && weapon_active && (weapon != "" && weapon != NULL_KEY && llGetOwnerKey(weapon) != weapon)) {
|
||||
setp(AMMO, [
|
||||
PRIM_ROTATION, VISIBLE,
|
||||
PRIM_LINK_TARGET, AMMO_LABEL,
|
||||
PRIM_ROTATION, VISIBLE
|
||||
]);
|
||||
} else {
|
||||
setp(AMMO, [
|
||||
PRIM_ROTATION, INVISIBLE,
|
||||
PRIM_TEXT, "", ZV, 0,
|
||||
PRIM_LINK_TARGET, AMMO_LABEL,
|
||||
PRIM_ROTATION, INVISIBLE
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
echo("? " + m);
|
||||
}
|
||||
|
||||
} else if(n == SIGNAL_INIT) {
|
||||
#ifdef DEBUG
|
||||
echo("[" + PROGRAM_NAME + "] init event");
|
||||
|
|
@ -561,6 +653,8 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
{
|
||||
string s_interface = llLinksetDataRead("interface");
|
||||
|
||||
BIGNUM_TEX = getjs(s_interface, ["combat", "nums"]);
|
||||
|
||||
screen_height = (integer)getjs(s_interface, ["height"]);
|
||||
if(!screen_height) screen_height = 1008;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
|
||||
// it's good enough for real computers:
|
||||
#define NON_VOLATILE
|
||||
#define LEGACY_NON_VOLATILE
|
||||
#define DAEMON_LISTEN
|
||||
|
||||
#ifdef TRACE
|
||||
|
|
@ -358,6 +359,16 @@ integer process_input(key outs, key handle, key user, string cml, integer in_scr
|
|||
script_trigger_resolve = _resolved;
|
||||
|
||||
return TRUE; // do not continue_script();
|
||||
} else if(prog == "nudge") {
|
||||
string msg;
|
||||
if(!count(script_lines)) {
|
||||
msg = "exec: not in a script";
|
||||
} else {
|
||||
msg = "exec: bypassing line " + gets(script_lines, script_li);
|
||||
llSetTimerEvent(0.1);
|
||||
}
|
||||
print(outs, user, msg);
|
||||
|
||||
} else if(prog == "exit") {
|
||||
// not checking in_script; allow manual interruption
|
||||
if(script_lines != []) {
|
||||
|
|
@ -624,7 +635,7 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
if(_mode & MODE_ACCEPT_DONE && ins == script_handle) {
|
||||
continue_script();
|
||||
} else {
|
||||
echo("[_exec] script '" + file_name + "' still running; use 'exit' to abort");
|
||||
echo("[_exec] script '" + file_name + "' still running; type '@exit' to abort");
|
||||
// echo("(got " + (string)ins + " instead of " + (string)script_handle);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,14 @@ integer initialized = FALSE;
|
|||
set_radio_policy() {
|
||||
string policy_radio = getdbl("policy", ["radio"]);
|
||||
integer pri = llListFindList(["open", "closed", "receive", "transmit"], [policy_radio]);
|
||||
if(!~pri)
|
||||
pri = 0;
|
||||
|
||||
effector_release("policy_radio");
|
||||
if(pri) {
|
||||
string users = getdbl("security", ["user"]);
|
||||
list user_keys = jskeys(users);
|
||||
}
|
||||
}
|
||||
|
||||
main(integer src, integer n, string m, key outs, key ins, key user) {
|
||||
|
|
@ -412,7 +419,7 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
integer argi = ((count(argv) - 1) >> 1);
|
||||
while(argi--) {
|
||||
topic = gets(argv, (argi << 1) + 1);
|
||||
value = gets(argv, (argi << 1) + 2);
|
||||
string value = gets(argv, (argi << 1) + 2);
|
||||
|
||||
if(topic == "receive") {
|
||||
// obsolete
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Nanite Systems Advanced Research Encapsulation System
|
||||
*
|
||||
* Copyright (c) 2022–2024 Nanite Systems Corporation
|
||||
* Copyright (c) 2022–2025 Nanite Systems Corporation
|
||||
*
|
||||
* =========================================================================
|
||||
*
|
||||
|
|
@ -42,6 +42,7 @@ integer EPS_active = 0;
|
|||
integer power_on = 1;
|
||||
integer max_state;
|
||||
integer power_state;
|
||||
integer forbidden_state;
|
||||
string power_systems;
|
||||
string power_system_names = "{}";
|
||||
float power_draw = 0;
|
||||
|
|
@ -62,25 +63,44 @@ apply_state(integer update, integer report_state) {
|
|||
list enabled_systems;
|
||||
list masked_systems;
|
||||
list disabled_systems;
|
||||
list forbidden_systems;
|
||||
|
||||
notify_cmds = "{}";
|
||||
|
||||
while((ps = getjs(power_systems, [(string)psi])) != JSON_INVALID) {
|
||||
integer system_enabled = ((power_state & (1 << psi)) != FALSE) && power_on;
|
||||
integer system_forbidden = (forbidden_state & (1 << psi)) != FALSE;
|
||||
integer system_enabled = (((power_state & (1 << psi)) != FALSE) && power_on);
|
||||
integer raw_se = system_enabled;
|
||||
|
||||
string psname = getjs(ps, ["name"]);
|
||||
|
||||
if(system_enabled) {
|
||||
// echo("system #" + (string)psi + " (" + (string)(1 << psi) + ") '" + psname + "'");
|
||||
|
||||
if(system_forbidden) {
|
||||
system_enabled = FALSE;
|
||||
// echo("...is forbidden");
|
||||
} else if(system_enabled) {
|
||||
// echo("...is enabled");
|
||||
|
||||
list psreqs = js2list(getjs(ps, ["req"]));
|
||||
integer psri = count(psreqs);
|
||||
while(psri--) {
|
||||
integer psreq = geti(psreqs, psri);
|
||||
system_enabled = (system_enabled && (power_state & (1 << psreq)));
|
||||
system_enabled = (system_enabled && (power_state & (1 << psreq)) && !(forbidden_state & (1 << psreq)));
|
||||
if(!system_enabled) {
|
||||
// echo("...but inhibited due to inavailability of system " + (string)psreq);
|
||||
jump brk;
|
||||
}
|
||||
}
|
||||
}
|
||||
@brk;
|
||||
} /*else {
|
||||
echo("...is disabled");
|
||||
}*/
|
||||
|
||||
if(report_state) {
|
||||
if(system_enabled)
|
||||
if(system_forbidden)
|
||||
forbidden_systems += psname;
|
||||
else if(system_enabled)
|
||||
enabled_systems += psname;
|
||||
else if(raw_se)
|
||||
masked_systems += psname;
|
||||
|
|
@ -143,6 +163,7 @@ apply_state(integer update, integer report_state) {
|
|||
string e = concat(enabled_systems, ", ");
|
||||
string m = concat(masked_systems, ", ");
|
||||
string d = concat(disabled_systems, ", ");
|
||||
string f = concat(forbidden_systems, ", ");
|
||||
|
||||
integer sl = strlen(s);
|
||||
|
||||
|
|
@ -156,15 +177,17 @@ apply_state(integer update, integer report_state) {
|
|||
|
||||
print(cmd_outs, cmd_user, "[" + PROGRAM_NAME + "] system status\n"
|
||||
+ "\nsupported subsystems: " + s
|
||||
+ "\nfunctioning subsystems: " + e
|
||||
+ "\nblocked subsystems: " + m
|
||||
+ "\ndisabled subsystems: " + d
|
||||
+ "\nonline: " + e
|
||||
+ "\ndisabled explicitly: " + d
|
||||
+ "\ndisabled due to policy or hardware limitations: " + f
|
||||
+ "\ndisabled due to unmet dependencies: " + m
|
||||
+ "\n\nsubsystem draw: " + (string)((integer)power_draw) + " W");
|
||||
}
|
||||
|
||||
if(update) {
|
||||
s_status = setjs(setjs(setjs(s_status,
|
||||
s_status = setjs(setjs(setjs(setjs(s_status,
|
||||
["state"], (string)power_state),
|
||||
["forbidden"], (string)forbidden_state),
|
||||
["draw"], (string)power_draw),
|
||||
["on"], (string)power_on);
|
||||
llLinksetDataWrite("status", s_status);
|
||||
|
|
@ -459,8 +482,11 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
|
||||
apply_state(1, 0);
|
||||
} else if((pss = getjs(power_system_names, [sys])) != JSON_INVALID) {
|
||||
integer system_forbidden = (forbidden_state & (1 << (integer)pss)) != FALSE;
|
||||
|
||||
integer mask = 1 << (integer)pss;
|
||||
// echo("Power state starts at " + (string)power_state);
|
||||
|
||||
if(act == "toggle" || act == "") {
|
||||
integer new_power_state = power_state ^ mask;
|
||||
if(new_power_state > power_state)
|
||||
|
|
@ -477,6 +503,11 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
ann = "subsystem-0";
|
||||
}
|
||||
|
||||
if(system_forbidden) {
|
||||
ann = "critical-error";
|
||||
msg = "power operation failed: " + sys + " is unavailable due to hardware or policy limitations";
|
||||
}
|
||||
|
||||
// echo("Changing " + pss + " #?# " + (string)mask + " -> " + (string)power_state);
|
||||
|
||||
apply_state(1, 0);
|
||||
|
|
@ -506,7 +537,11 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
string status = gets(argv, ci + 1);
|
||||
// echo("POWER notify: " + cmd + " " + status);
|
||||
|
||||
if(cmd == "charged") {
|
||||
if(cmd == "forbidden") {
|
||||
// change in forbidden rules
|
||||
forbidden_state = (integer)getdbl("status", ["forbidden"]);
|
||||
apply_state(1, 0);
|
||||
} else if(cmd == "charged") {
|
||||
// integer charge_bootable = (status == "y");
|
||||
// no code required here - will occur automatically
|
||||
|
||||
|
|
@ -744,6 +779,7 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
|||
string s_status = llLinksetDataRead("status");
|
||||
string s_power = llLinksetDataRead("power");
|
||||
power_on = (integer)getjs(s_status, ["on"]);
|
||||
forbidden_state = (integer)getjs(s_status, ["forbidden"]);
|
||||
power_state = (integer)getjs(s_status, ["state"]);
|
||||
power_draw = (float)getjs(s_status, ["draw"]);
|
||||
power_systems = getjs(s_power, ["system"]);
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -117,7 +117,7 @@
|
|||
#define js2list llJson2List
|
||||
|
||||
// string jsarray(list x): returns a JSON string containing the elements of list x. All types other than integers and floats will be converted into quoted strings, but strings that resemble JSON (due to starting and ending with [] or {}) will be interpreted as JSON.
|
||||
#define jsarray(...) llList2Json(JSON_ARRAY, (list)__VA_ARGS__)
|
||||
#define jsarray(...) llList2Json(JSON_ARRAY, (list)(__VA_ARGS__))
|
||||
|
||||
// string jsobject(list x): eturns a string that is a representation of the values in list x encoded into a JSON object. The source list will be interpreted as having a stride of 2, with even-numbered elements becoming the keys of the new object, and odd-numbered elements becoming values. For values, all types other than integers and floats will be converted into quoted strings, but strings that resemble JSON (due to starting and ending with [] or {}) will be interpreted as JSON.
|
||||
#define jsobject(...) llList2Json(JSON_OBJECT, (list)(__VA_ARGS__))
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ float pixel_scale;
|
|||
#define IGNEOUS_EXTRUSIVE 2
|
||||
#define MURKY_TRUTH 3
|
||||
#define CLOCK_SKEW 4
|
||||
#define CHICANERY 5
|
||||
|
||||
#if VT_FONT == PSYCHIC_INSTABILITY
|
||||
// Psychic Instability
|
||||
|
|
@ -75,6 +76,14 @@ list FONT = [TEXTURE_TRANSPARENT, "b17c85ad-dbb4-5e08-0bcd-f9bcc911958d", "63d0b
|
|||
// Murky Truth uses a different character width table from PI and IX. The capital N is only 2 cells wide instead of 3.
|
||||
#define FONT_charwidths "21111111111111111111111111111111111222211122121122222222221122222222222221222322222222232221112212222212211213222212122322211121"
|
||||
|
||||
#elif VT_FONT == CHICANERY
|
||||
|
||||
list FONT = [TEXTURE_TRANSPARENT, "aa087ee9-ede1-5bdc-4196-5a8f7122ca34",
|
||||
"74b13ca9-8b7f-1cf8-41b8-5d562a902dc0", "d916241c-454b-e3f3-7442-43d1e78a522d",
|
||||
TEXTURE_TRANSPARENT, "25b236b4-6df8-a01f-9b17-a42e2cf05650",
|
||||
"57e6d2a4-2a8a-65b4-d98f-be103b43268e", "37d32009-0445-bd48-5a8c-33d798376212"];
|
||||
#define FONT_charwidths "21111111111111111111111111111111111222211122121122222222221122222222222221222322222222232221112212222212211213222222222322211121"
|
||||
|
||||
#elif VT_FONT == CLOCK_SKEW || !defined(VT_FONT)
|
||||
// Clock Skew
|
||||
list FONT = ["8dcd4a48-2d37-4909-9f78-f7a9eb4ef903", "66f0c644-a340-9772-f870-9b30051db9d9", "57b9b8a5-ccb1-72e0-2429-916d25ace382", "d8903765-b390-4707-0397-18d558fcdfa5",
|
||||
|
|
|
|||
Loading…
Reference in New Issue