Jump to content
Sign in to follow this  
kratox

Can someone tell me what these rlv commands are?

Recommended Posts

I have been working on a script and I wanted it to make the avatar invisible when someone sits on it, as well as remove all abilities to touch, detach, and etc. Thing is I am having a hard time finding out how to force detach all attachments on avatars and apply a alpha mesh.

Can anyone show me how you go about doing; removal of attachments, applying of alpha layers, disable of teleporting, disable of touch. Thanks in advance and even if you can't do that could you at least give me the "@command". The wikis documentation on rlv isn't as straightforward with this stuff compared to other things.

 

This is what I have so far:

        llRegionSayTo( victim, rlvrc, "sit"+","+(string)victim+","+"@sit:"+(string)id+"=force" );
        llRegionSayTo(victim, rlvrc, "sit"+","+(string)victim+",@unsit:=n" );
        llRegionSayTo(victim, rlvrc, "detach"+","+(string)victim+",@detach:=n" );
        llRegionSayTo( victim, rlvrc, "edit"+","+(string)victim+",@edit:=n" );
        llRegionSayTo( victim, rlvrc, "rez"+","+(string)victim+",@rez:=n" );
        llRegionSayTo( victim, rlvrc, "sit"+","+(string)victim+",@detachme=force(*)" );

 

Edited by kratox

Share this post


Link to post
Share on other sites

Sorry, hit enter by accident. It'll take me a while yet to compose an adequate reply to this.

Edited by KT Kingsley

Share this post


Link to post
Share on other sites

The syntax is easy enough.    To remove attachments, you use @detach[:attachpt]=force  where attachpt is an optional argument to specify the attachment point from which to remove items.  So @detach:chest=force will take off everything attached to the chest attachment point.   @detach=force, without any points being specified, will attempt to remove all attachments.

The equivalent command for system clothes is @remoutfit[:<part>]=force.

However, this is only part of the story.   RLV was invented before we could have multiple attachments on the same point, let alone before mesh avatars were thought of, and I really don't think that what you have in mind is going to work. 

That's because you can now protect attachments and layers you don't want removing by placing them in a folder under the main #RLV folder and adding a nostrip tag.   This protects the items you don't want removing (hair, collar, tattoos and make-up layers, and so on).   I don't use a mesh body, but if I did, I would almost certainly protect that from inadvertent removal, too.

So, there's no guarantee that your attempts to remove everything is going to be successful, and you're likely to end up with disembodied hair, collars, Bento hands and feet, and miscellaneous layers floating round, which may not be the desired result.

Furthermore, you need to be sure that the victim has a whole-body alpha layer in their #RLV folder and, if there isn't one there, you need to give one into the #RLV folder and then check they victim has accepted it and it's ended up in the right place (neither or which are guaranteed) and it's there, only then can you force them to wear it.   That adds a whole new level of complexity to the task.   It's doable but -- having done it a few times myself -- I'm honestly not sure it's always worth all the effort.

If you need help with it, then ask again here, but I really would suggest you read up on shared folders in Marine's blog before you start.

Edited by Innula Zenovka
  • Thanks 1

Share this post


Link to post
Share on other sites
On 27 September 2017 at 3:55 PM, kratox said:

I have been working on a script and I wanted it to make the avatar invisible when someone sits on it, as well as remove all abilities to touch, detach, and etc.

This is actually, fairly common in the non professional end of RLV scripting, that is the people who make rlv transformation traps, for fun, rather than building 'dungeon furniture' for a Store.

Innula has already pretty much covered the stripping commands, basically, the process is sort of like this...

1. Check the victim HAS RLV/RLVa enabled and has working a rlv relay, if they don't, forget it, you can't touch them.

2. Send your strip commands (and optionally, restrict commands (for an 'on sit' trap, you will NOT want @detach=n as thats going to stop stuff getting stripped, the opposite of what you want)

3. Send the folder containing the alpha layer to their #RLV folder, if they do not HAVE a #RLV folder, then the trap fails, if they do not accept the folder offer, the trap fails

4. Attempt to force them to wear/add the contents of the sent folder with an @attach or @attachover command.

Many things can go wrong in this process, ranging from...

No rlv

No relay

A bad relay (some of the 'smart' relays can decide all by themselves that attempting to send a whole bunch of rlv commands or stripping a whole avatar is 'rlv command spam' and just dump the whole command list in the digital toilet)

No #RLV folder

No acceptance of offered folder

Too many subfolders in #RLV

This is an old "strip give wear' script designed to trigger on touch, you can probably edit it do work as an on sit...

integer RELAY_CH = -1812221819;
integer CH;
integer CH_LS;
string Folder = "~tf_name";
key target;
list inventory;
string CheckFolders;
integer i;
integer num;
string name;
float lockTime = 10.0; //sec
    
default
{
    state_entry()
        {
    CH=(integer) (llFrand(100000)+100000);    

    num = llGetInventoryNumber(INVENTORY_ALL);
            for (i=0;i<num;i++){
                name = llGetInventoryName(INVENTORY_ALL, i);
                if(llGetInventoryPermMask(name,MASK_OWNER) & PERM_COPY){
                    inventory += name;
                }
            }
            i = llListFindList(inventory, [llGetScriptName()]);
            if(~i){
                inventory = llDeleteSubList(inventory,i,i);
            }      
        }
    on_rez(integer param){
            llResetScript();
        }
    changed(integer change){
            llResetScript();
        }

    touch_start(integer total_number)
 {
        llSetTimerEvent(lockTime);

        llSay(0, "Lest we forget...");
            
    CH_LS = llListen(CH,"",NULL_KEY,"");
    target = llDetectedKey(0);
// Clothing    
    llSay(RELAY_CH, "strip," + (string)target + ",@remoutfit=force");
// Attachments    
// All
    llSay(RELAY_CH, "detach," + (string)target +",@detach=force"); 
// Head & Neck
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:skull=force|@detach:mouth=force|@detach:chin=force|@detach:left ear=force|@detach:right ear=force|@detach:left eyeball=force|@detach:right eyeball=force|@detach:nose=force|@detach:neck=force"); 
// Torso
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:spine=force|@detach:chest=force|@detach:stomach=force|@detach:pelvis=force|@detach:left pec=force|@detach:right pec=force"); 
// Arms
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:left shoulder=force|@detach:l upper arm=force|@detach:l forearm=force|@detach:left hand=force|@detach:right shoulder=force|@detach:r upper arm=force|@detach:r forearm=force|@detach:right hand=force"); 
// Legs        
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:left hip=force|@detach:l upper leg=force|@detach:l lower leg=force|@detach:left foot=force|@detach:right hip=force|@detach:r upper leg=force|@detach:r lower leg=force|@detach:right foot=force"); 
// Other
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:root=force"); 
// Huds
//    llSay(RELAY_CH, "detach," + (string)target + ",@detach:center=force|@detach:center 2=force|@detach:top=force|@detach:top left=force|@detach:top right=force|@detach:bottom=force|@detach:bottom left=force|@detach:bottom right=force"); 
    
    llSay(RELAY_CH, "Checker,"+(string)target+",@getinv="+(string) CH); 
    }
    listen(integer channel, string name, key id, string message)
    {
        if(channel == CH)
        {
        llListenRemove(CH_LS);
        CheckFolders = message;  
        if(llSubStringIndex(CheckFolders,Folder) != -1) 
                {
                llSay(0,"TF Reworn!");
                llSay(RELAY_CH, "WearTrap,"+(string)target+",@attachover:"+Folder+"=force");    
                }
        else
            {
            llGiveInventoryList(target, "#RLV/"+Folder, inventory);
            llSay(0,"Cool TF Message!");
            llSleep(10);
            llSay(RELAY_CH, "WearTrap,"+(string)target+",@attachover:"+Folder+"=force");
            }
        }   
        }
    
}

This also has commented out blocks for partial stripping of attachments, and this versions designed to ADD not WEAR the target folder.


 



 

  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...