blog:opensim:scripts:prim_inv_trans
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
blog:opensim:scripts:prim_inv_trans [2025/06/03 11:38] – created Phil Ide | blog:opensim:scripts:prim_inv_trans [2025/06/03 12:25] (current) – [Prim Inventory Transfer] Phil Ide | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Prim Inventory Transfer ====== | ====== Prim Inventory Transfer ====== | ||
+ | These are the OpenSimulator scripts used in the demonstration video [[https:// | ||
+ | |||
+ | ===== How They Work ===== | ||
+ | |||
+ | Place the sender prim within 10m of the receiver and touch the receiver. The receiver will now be in a listening state on a specific channel. | ||
+ | |||
+ | Touch the sender. This will now send a message on the channel. | ||
+ | |||
+ | The receiver hears the message and gets the UUID of the sender. It sends a message back that only the sender can hear. | ||
+ | |||
+ | The sender receives the message from the receiver, and learns its UUID. It sends a list of inventory containing everything it wants to send except the scripts. | ||
+ | |||
+ | The sender now sends the scripts it wants to give, using the special function '' | ||
+ | |||
+ | Note that each script sent by '' | ||
+ | |||
+ | The scripts below use the less efficient method as they are only intended to demonstrate the setting of a PIN and the transfer of inventory. | ||
===== Receiver ===== | ===== Receiver ===== | ||
<code lsl2 receiver.ossl> | <code lsl2 receiver.ossl> | ||
Line 55: | Line 72: | ||
</ | </ | ||
+ | |||
+ | ===== Sender ===== | ||
+ | <code lsl2 sender.ossl> | ||
+ | //YEngine: | ||
+ | yoptions; | ||
+ | |||
+ | constant __DEBUG__ = TRUE; | ||
+ | |||
+ | constant SCRIPT_PIN = 72743825; | ||
+ | constant updateChan = -4744320; | ||
+ | |||
+ | integer lhandle; | ||
+ | |||
+ | debug( string text ){ | ||
+ | if( __DEBUG__ ){ | ||
+ | llOwnerSay( text ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | endListen(){ | ||
+ | if( lhandle != 0 ){ | ||
+ | llListenRemove( lhandle ); | ||
+ | lhandle = 0; | ||
+ | } | ||
+ | llSetTimerEvent(0.0); | ||
+ | } | ||
+ | |||
+ | // Get inventory list | ||
+ | // remove this script from list | ||
+ | integer deliverItems( key id ){ | ||
+ | list items = osGetInventoryNames( INVENTORY_ALL ); | ||
+ | integer l = llGetListLength( items ); | ||
+ | integer sent = 0; | ||
+ | list results; | ||
+ | list scripts; | ||
+ | | ||
+ | for( integer i = 0; i < l; i++ ){ | ||
+ | string name = llList2String( items, i ); | ||
+ | |||
+ | if( llGetInventoryType( name ) != INVENTORY_SCRIPT ){ | ||
+ | results += [name]; | ||
+ | } | ||
+ | else if( name != llGetScriptName() ){ | ||
+ | scripts += [name]; | ||
+ | } | ||
+ | } | ||
+ | // make sure we deliver items before scripts | ||
+ | if( results != [] ){ | ||
+ | // deliver everything except the scripts | ||
+ | // We need to give a folder name, but no folder is created in an object | ||
+ | llGiveInventoryList( id, " | ||
+ | sent = llGetListLength( results ); | ||
+ | } | ||
+ | if( scripts != [] ){ | ||
+ | l = llGetListLength( scripts ); | ||
+ | for( integer i = 0; i < l; i++ ){ | ||
+ | debug(" | ||
+ | llRemoteLoadScriptPin( id, llList2String( scripts, i ), SCRIPT_PIN, TRUE, 15 ); | ||
+ | sent++; | ||
+ | } | ||
+ | } | ||
+ | return sent; | ||
+ | } | ||
+ | |||
+ | default { | ||
+ | state_entry() { | ||
+ | llSetText(" | ||
+ | debug(" | ||
+ | } | ||
+ | touch_start(integer num){ | ||
+ | if( llDetectedKey(0) == llGetOwner() ){ | ||
+ | lhandle = llListen( updateChan, "", | ||
+ | llSetTimerEvent(5.0); | ||
+ | | ||
+ | debug(" | ||
+ | llWhisper( updateChan, " | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | timer(){ | ||
+ | endListen(); | ||
+ | } | ||
+ | listen(integer channel, string name, key id, string msg){ | ||
+ | if( llGetOwnerKey( id ) == llGetOwner() ){ | ||
+ | if( msg == " | ||
+ | debug(" | ||
+ | endListen(); | ||
+ | integer sent = deliverItems( id ); | ||
+ | debug(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ |
blog/opensim/scripts/prim_inv_trans.1748950714.txt.gz · Last modified: by Phil Ide