External script memory
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
| Note! Under Construction | |
|
More examples need to be added. |
There are a few ways in LSL to store data for later use, other than within the script itself. These methods can help to protect data if a script gets inadvertently reset. This page shows some examples of methods that can be used.. Where highly important data is to be held long term, an off-world web-based database is to be preferred.
One way of storing data for later use is llGetObjectDesc and llSetObjectDesc.
<lsl>
default {
state_entry()
{
string data = llGetObjectDesc();
if (data)
llSay(0, "I was last touched by " + data);
else
llSay(0, "I have not been touched yet");
}
touch_start(integer total_number)
{
string username = llDetectedName(0);
llSetObjectDesc(username);
llResetScript();
}
} </lsl>
To create a Boolean constant you can use a method like this:-
<lsl> //These functions should only be used if your script is not going to be using llSetText SetConstant(integer tof){
if(tof == TRUE)
llSetPrimitiveParams([ PRIM_TEXT, " ",<1,0,0>, 1.0 ]);
if(tof == FALSE)
llSetPrimitiveParams([ PRIM_TEXT, "",<1,0,0>, 1.0 ]);
}
integer GetConstant(){
list params = llGetPrimitiveParams([PRIM_TEXT]);
if (llList2String(params,0))
return TRUE;
return FALSE;
}
default {
state_entry()
{
llSay(0,(string)GetConstant()); //First time should output 0, then once you click and it restarts, it will output 1
}
touch_start(integer total_number)
{
SetConstant(TRUE);
llResetScript();
}
}
</lsl>
Or perhaps more obviously, using the alpha parameter:-
<lsl> //These functions should only be used if your script is not going to be using llSetText SetConstant(integer tof) {
llSetPrimitiveParams([ PRIM_TEXT, "", <1,1,1>, tof ]);
}
integer GetConstant() {
list params = llGetPrimitiveParams([PRIM_TEXT]); return ( (integer) llList2Float(params, 2) );
}
default {
state_entry()
{
llSay(0, (string) GetConstant()); // First time will output 1, then on each touch, it toggles between 0 then 1 ...
}
touch_start(integer total_number)
{
integer status = GetConstant();
SetConstant(!status);
llResetScript();
}
} </lsl>
Similarly the colour vector could be used to hold more data, but the restrictions on valid colour values will apply (each component in the range 0.0 to 1.0)