Skip to content
lsl.devlsl.devLSL Dev

llRemoteLoadScriptPin

function
Function syntax
llRemoteLoadScriptPin(
  1. key target,// UUID of the target prim in the same region.
  2. string script,// Name of the script in the prim's inventory.
  3. integer pin,// Integer PIN code (must match the PIN set on the ObjectID via llSetRemoteScriptAccessPin).
  4. integer running,// Boolean. If TRUE, sets the copied script to run immediately; if FALSE, leaves it stopped.
  5. integer start_param// Integer start parameter passed to the copied script (readable via llGetStartParameter).
);
Delay
3 s
Energy
10

Copies the script into target, setting it running (if running is TRUE) with the start_param, provided the script owner has modify permissions on target and target's PIN matches pin (set via llSetRemoteScriptAccessPin).

Copy script name into target and set to running with a start_param only if target’s pin matches pin

Only works if the script owner can modify target.

How to use
llRemoteLoadScriptPin(NULL_KEY, "", 0, 0, 0);
  • If name is present in the target prim’s inventory then it is silently replaced.
  • start_param only lasts until the script is reset.
  • Only the owner of an attachment can modify it while it is being worn.
  • If target is an attachment owned by a different user, regardless of object modify rights granted, this function will silently fail.
  • If target is owned by a different user and modify permission has been granted to the script owner via Edit, delete, or take my objects, the script owner must be connected to the sim for this function to succeed.
  • If pin fails to match, the error “Task Prim trying to illegally load script onto task Other_Prim!” is shouted on DEBUG_CHANNEL. “Prim” and “Other_Prim” are substituted with the applicable prim names.
  • If target is the script’s parent (target == llGetKey()) then “Unable to add item!” is shouted on DEBUG_CHANNEL.
  • If the object containing this script is deeded to a group, then script name needs transfer permissions; even if target is deeded to the same group.
  • When the script is set to run (with running, the running checkbox or llSetScriptState) state_entry will be queued.
Example 1
//Copy a script to the second prim
integer PIN=1341134;
default {
state_entry() {
llRemoteLoadScriptPin( llGetLinkKey(2), "some script", PIN, TRUE, 0xBEEEEEEF );
}
}
Example 2

Simple script used for setting the pin for a prim, so you can later send scripts to it with llRemoteLoadScriptPin.

//Child Prim PIN setter
integer PIN=1341134;
default {
state_entry() {
llOwnerSay(llGetObjectName()+" : "+(string)llGetKey()+" is ready to accept a describer script using the agreed upon PIN.");
llSetRemoteScriptAccessPin(PIN);
}
}
Example 3

Notes: There is currently no signing on the starting messages only the owner is checked.

this example rezs a prim from inventory that has a basic control file inside of it and does a basic handshake to setup the

pin and transfer the script.

after the transfert the helper script in the rezzed prim deletes itself.

57 collapsed lines
integer controlchan = 0;
integer controlid = -1;
start()
{
llSetTimerEvent(0);
talkingto = NULL_KEY;
integer a = (integer)llFrand(43);
controlchan = a * a;
controlchan -= controlchan * 3;
controlid = llListen(controlchan,"","","set-connect");
llRezObject("card",llGetPos()+<0,0,0.1>,<0,0,0>,ZERO_ROTATION,a);
llSetTimerEvent(60);
}
key talkingto = NULL_KEY;
integer busy = FALSE;
integer accesspin = 0;
default
{
timer()
{
llSetTimerEvent(0);
llOwnerSay("Lost connection!");
llListenRemove(controlid);
busy = FALSE;
}
listen(integer chan,string name,key id,string message)
{
if(chan == controlchan)
{
if(llGetOwnerKey(id) == llGetOwner())
{
if(talkingto == NULL_KEY)
{
if(message == "set-connect")
{
llSetTimerEvent(0);
talkingto = id;
llListenRemove(controlid);
controlid = llListen(controlchan,"",talkingto,"ready");
llRegionSayTo(id,controlchan,"auto-connect");
llSetTimerEvent(60);
}
}
else if(id == talkingto)
{
if(message == "ready")
{
llSetTimerEvent(0);
accesspin = (integer)llFrand(2345)+213;
llListenRemove(controlid);
controlid = llListen(controlchan,"",talkingto,"pinset");
llSleep(1);
llRegionSayTo(talkingto,controlchan,(string)accesspin);
llSetTimerEvent(60);
}
else if(message == "pinset")
{
llSetTimerEvent(0);
llListenRemove(controlid);
llRemoteLoadScriptPin(talkingto,"demo.lsl",accesspin,1,0);
llSleep(3);
llRegionSayTo(talkingto,controlchan,"finished");
19 collapsed lines
llOwnerSay("Transfer of file finished - control file should have auto deleted itself!");
busy = FALSE;
}
}
}
}
}
touch_end(integer a)
{
if(busy == FALSE)
{
busy = TRUE;
if(llGetOwner() == llDetectedKey(0))
{
start();
}
}
}
}
Example 4
integer listen_id = -1;
integer listen_chan = -1;
key details_from = NULL_KEY;
default
{
on_rez(integer a)
{
if(a == 0)
{
llOwnerSay("- Direct rez -");
}
else
{
llOwnerSay("- Awaiting config connection -");
listen_chan = a * a;
listen_chan -= listen_chan * 3;
listen_id = llListen(listen_chan,"","","auto-connect");
llWhisper(listen_chan,"set-connect");
llSetTimerEvent(30);
}
}
timer()
{
llOwnerSay("Failed to connect to rezzer deleting myself!");
llSetTimerEvent(0);
llDie();
}
listen(integer chan,string name,key id,string message)
{
if(llGetOwnerKey(id) == llGetOwner())
{
if(message == "auto-connect")
{
llSetTimerEvent(0);
llListenRemove(listen_id);
listen_id = llListen(listen_chan,"",id,"");
llRegionSayTo(id,listen_chan,"ready");
details_from = id;
llSetTimerEvent(30);
}
else if(details_from != NULL_KEY)
{
llSetTimerEvent(0);
if(message == "finished")
{
llSetRemoteScriptAccessPin((integer)message);
llRemoveInventory(llGetScriptName());
}
else
{
llSetRemoteScriptAccessPin((integer)message);
llRegionSayTo(id,listen_chan,"pinset");
}
llSetTimerEvent(30);
}
}
}
}
  • Added in 1.2.6
  • In SL 1.25.4 this function will not copy/move any script into an attachment unless the script is full perm. (SVC-3725)
  • SL 1.25.5 will allow this function to copy/move a script into an attachment so long as the target has matching (or more restrictive) copy and transfer permissions. (SVC-3738)

From the issue templates included by the wiki article:

  • SVC-3321 (bug): stack trace error while running scripts after llRemoteLoadScriptPin
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.