llRemoteLoadScriptPin(key target,// UUID of the target prim in the same region.string script,// Name of the script in the prim's inventory.integer pin,// Integer PIN code (must match the PIN set on the ObjectID viallSetRemoteScriptAccessPin).integer running,// Boolean. IfTRUE, sets the copied script to run immediately; ifFALSE, leaves it stopped.integer start_param// Integer start parameter passed to the copied script (readable viallGetStartParameter).
);- 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.
llRemoteLoadScriptPin(NULL_KEY, "", 0, 0, 0);Caveats
Section titled “Caveats”- If
nameis 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
Primtrying to illegally load script onto taskOther_Prim!” is shouted onDEBUG_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 onDEBUG_CHANNEL. - If the object containing this script is deeded to a group, then script
nameneeds 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_entrywill be queued.
Examples
Section titled “Examples”Example 1
Basic Example
Section titled “Basic Example”Script copier
Section titled “Script copier”//Copy a script to the second priminteger PIN=1341134;
default { state_entry() { llRemoteLoadScriptPin( llGetLinkKey(2), "some script", PIN, TRUE, 0xBEEEEEEF ); }}Example 2
Pin setter
Section titled “Pin setter”Simple script used for setting the pin for a prim, so you can later send scripts to it with llRemoteLoadScriptPin.
//Child Prim PIN setterinteger 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
Rez and copy a file from a control object
Section titled “Rez and copy a file from a control object”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.
Control prim
Section titled “Control prim”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
rezzed prim
Section titled “rezzed prim”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); } } }}History
Section titled “History”- 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)
Known issues
Section titled “Known issues”From the issue templates included by the wiki article:
- SVC-3321 (bug): stack trace error while running scripts after llRemoteLoadScriptPin
See also
Section titled “See also”Functions
Section titled “Functions”llSetRemoteScriptAccessPin— Used to setup a prim for remote loadingllSetScriptState— Set a scripts running statellResetOtherScript— Reset another script in the prim
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.