Monday, October 10, 2011

Prim Count Halver - COOL!

My friend Sei and her pet Angel have released one of the coolest things I've seen in SL.  It's a Prim Count Halver that does some really neat voodoo magic and can cut a linkset's prim count down by up to half.

The script Sei sell is copy, no-trans.  You simply drag a copy of the script into your build and *POOF* it's about 1/2 the prims on your land.

Sounds too good to be true?  Well, everything has a catch, unfortunately.  Two things happen to the linkset that are unavoidable.
  • The linkset becomes phantom.  The root prim can be set non-phantom, but the rest of the build is phantom.
  • No scripts may exist in the object.  None.  Zip.  Zero.
 Another thing to note is that the prim savings you won't see in the object.  The library chair, for example, reports it's 21 prims before and after.  But, if you look at the land use of prims, that's the number that magically goes down.

This script is perfect for those who are trying to save prim counts on static objects, such as walls or store fronts.  Remember, the root prim can be set non-phantom, so it's possible to put an invisible solid box around whatever you've made to keep people from walking thru it.

Tuesday, October 4, 2011

Just some random thoughts

  • I really need to move to some adult land.  I'm working on some furniture that will use RLVibe and my little in-world place is rated Mature.  It's ...unwise... to even think of demoing any products at my current in-world store.  But it's so expensive!  :(
  • Having a cold sucks!  And I think I just might suffer from SAD.  It's starting to rain again and I'm really, really dreading the upcoming weeks without sunshine.
  • I need to get back to work on RLVibe.  I've kind of stalled because I've too many things I want to do and can't seem to focus on just one.
  • I can't wait for NaNoWriMo.  I'm also dreading it.
  • My other love, Anarchy Online, seems to be dying.  I logged in after being away for a bit and it was a ghost town.  So sad...

Friday, September 9, 2011

RLV Scripting - Determine RLV version

Updated 9/15 - Thanks, Sei!

As I start to work with LSL a bit more, specifically with RLV, I thought I might share some scripts.

These first scripts will be for objects that are owned and worn by the avatar.  Interacting with furniture requires a relay and a slightly different way of doing things.

First thing, you should learn how to determine if RLV is present and enabled on the client.  The quickest way for one avatar to ask another avatar if they have RLV is to IM them "@version" (without the quotes).  If they have RLV on, they will auto-respond with the version number -- it won't even show up on their client.  If they don't have RLV, they're going to see that you sent them that message and probably ask what you're doing.

Scripts do this the same way, but they use llOwnerSay("@version=<channel>"); where channel is a channel your script is listening on.

This first script I call rlvCheck and it's meant to be called by another script wishing to know whether or not RLV is enabled and what version.  NOTE: This is an example script.  Bundle this into a larger script, or do more in just a single script to keep script counts down.

integer RLV_VERSION = 24767;
integer RLV_VERSION_REQUEST = 24768;
integer rlvCheckCount = 0;
integer rlvMaxCheck = 3;
float rlvCheckDelay = 30.0f;
integer rlvHandle;

    rlvCheckCount = 0;
    rlvHandle = llListen(RLV_VERSION, "", llGetOwner(), "");
    llOwnerSay("@version=" + (string)RLV_VERSION);

        checkRLV(); // Do this to announce the RLV version to listening scripts in the same object

    if (++rlvCheckCount >= rlvMaxCheck)
        llOwnerSay("@version=" +  (string)RLV_VERSION);

    listen(integer channel, string name, key id, string message)
        if (channel == RLV_VERSION)

            string version = llList2String(llParseString2List(message, [" "], []), 2);
            list lTemp = llParseString2List(version, ["."], []);
            string major = llGetSubString(llList2String(lTemp, 0), -1, -1);
            string minor = llList2String(lTemp, 1);
            llMessageLinked(LINK_THIS, RLV_VERSION, major + minor, NULL_KEY);

    attach(key attached)
        if (attached != NULL_KEY)

    link_message(integer sender, integer msgType, string message, key id)
        if (msgType == RLV_VERSION_REQUEST)
A caller script that would use this might do something like:
integer RLV_VERSION = 24767;
integer RLV_VERSION_REQUEST = 24768;
integer rlvCapable = FALSE;
        llMessageLinked(LINK_THIS, RLV_VERSION_REQUEST, "", NULL_KEY);

    link_message(integer sender_num, integer num, string message, key id)
        if (num == RLV_VERSION)
            rlvCapable = TRUE;
            llOwnerSay("Restrained Love v." + message + " detected");
            restoreRestrictions(); // a function to re-apply any restrictions
 Now at this point, the script will know if RLV is available after one and a half minutes.  What I usually do is cause RLV restrictions to be restored as soon as I know what the version is.

And the numbers I chose for the communication channel are just random ones I thought of -- there's nothing special or reserved about them.  I did found out that they can't be negative.

Thursday, July 28, 2011

How to turn on RLV in Firestorm

 Several people have asked me how to turn on RLV in Firestorm.  It isn't on by default.  There are a couple of ways to do it.

If you find this page helpful, please click the +1 button at the bottom.  =^.^=

From the menu, Avatar -> Preferences -> Firestorm -> General -> Allow Remote Scripted Viewer Controls (RLVa), then restart Firestorm.

  1. Turn on your Advanced menu.  You can turn them both on by going to Avatar -> Preferences -> Advanced and then check "Show Advanced Menu"
  2. On your Advanced menu, near the bottom, tick "RestrainedLove API (RLVa)".
  3. Near the middle is a section for RLVA and if you expand out that menu you can:
  •  List restrictions
  • Enable objects to give to your #RLV folder (great for traps, being forced to wear items, etc.) -- some traps will give you an outfit and force you to wear them.  One that comes to mind is in Kitten's Castle where you're turned into a marble statue.
  • Show debug messages - this is really useful when writing RLV scripts.  It's also nice to have on just so you know when something RLV is being done to you by either a person or object.
A quick and easy way to check if you've got RLV enabled is to ask someone to IM you with just the text: "@version" (without quotes).  If RLV is enabled, you won't see it, but they'll see something like:
Kittin Ninetails (busy response): RestrainedLove viewer v2.7.0 (Firestorm - RLVa 1.4.0)

Remember, you'll need a relay to interact with objects.  Take a look at my Quick RLV tutorial.  And if you want to try something really fun, go to Marine's maze and try to find your way out.  And don't cheat! =^.^=

Also, here's a link to a video for Installing and Activating RLV in Various Third Party Viewers.  The first part of the video covers installing Marine's RLV on Windows and how to copy the voice files over.  If you install my Linux or Mac builds, these are installed for you.  At about 7 minutes into the video, Trix explains how to turn on RLVa in Phoenix and Imprudence.  Trix has another good video on the #RLV folder.  Actually, Trix has quite a lot of good videos, but those are the two I saw that relate to this page.

Friday, July 8, 2011


Ok, I don't normally like to point fingers. It degrades into a "he said she said" useless argument that no one can prove. But, I've been scammed and I want to warn everyone I can about it so they're not ripped off, too.

In April, 2011, I asked this guy to do some graphic work for me. We did some discussion of design and price and we agreed on L$3000 to come up with a heart-shaped locket I could use for a logo for my Ninetails products. He asked for 50% up-front, which I thought was reasonable. Needless to say, he never delivered. My dear friend Sei ended up making the logo for me, where I showed it off in A Makeover.

I wouldn't even bother mentioning it, except Sal has returned to SL and, after defriending me, has made it pretty clear he does not intend to return the money -- but moreover comes to the areas I go (specifically Shy Submissives) to and wants to "play" with me as a Dom.

I think not.

Well, it's only my word against his and it's my own damned fault for giving him any money. But I wanted to post this so others would be, at least, made aware that there is a dodgy situation regarding him. Please don't get taken like I did.

Friday, May 20, 2011

Unable to connect to Second Life. DNS could not resolve the host name.

Unable to connect to Second Life.
DNS could not resolve the host name.
Please verify that you can connect to
web site. If you can, but continue to receive this error,
please go to the support section and and report this problem.
Are you seeing this error? Well, the good news is there's nothing wrong with the viewer you downloaded. The bad news is that the Domain Name Service (DNS) you use can't figure out the internet address of some URL inside the viewer that it's trying to access.

LL has a wiki page on it here that is marginally helpful.

Anubis Vlad Tepas left a comment on my 2.6.1 posting that is very helpful. It's sort of buried now, so I wanted to bring it back up to the forefront.

Anubis Vlad Tepas said...

For those who have DNS errors, there's a solution that worked (for me, at least).

Go the System Preference -> Network -> Airport (if you're using Airport, otherwise I guess it should be the same with Ethernet) -> DNS.
There, add two adresses :
I have no idea why this new version of SL messes with DNS servers. And I don't like playing with these settings. But oh well, it's likely to be temporary only.

Hope it works for you as well.

On Linux, you'd add these to your /etc/resolv.conf file like this. The part with the # is just a comment, don't include it.

sudo cp /etc/resolv.conf /etc/resolve.conf.pre-kittin # Make sure you back it up first!
sudo echo "nameserver" >> /etc/resolv.conf # Add the first DNS
sudo echo "nameserver" >> /etc/resolv.conf # Add the second DNS

Saturday, April 9, 2011

RLV - A Quick Tutorial

(updated 9/8/2011)

If you find this page helpful, please click the +1 button at the bottom.  =^.^=

What is RLV?  
RLV stands for Restrained Love Viewer, which is Marine Kelley's enhancements to the Second Life Viewer.  A few years back, she wrote a great overview here.  RLV features are also in Phoenix, Firestorm, Imprudence, and several other viewers.  Marine is the owner of the Restrained Love API and, naturally, her viewer will always have the latest RLV features.  The other viewers may or may not choose to implement the latest RLV specification.

What do I need to run RLV?
First, you need a viewer that has RLV (or RLVa) built into it.  You can only get this in TPVs (Third Party Viewers) such as Marine's, Phoenix, Firestorm, Impurdence, etc.  Be sure you look to see if the viewer you choose has it.

Second, unless you're using Marine's RestrainedLove Viewer, You will need to turn RLV on.  I've written a short guide on How to Turn On RLV in Firestorm and at the bottom of the page is some information on how to do it for other viewers.

Once you've gotten this far, some RLV things will work.  Specifically, any RLV item that you own can place restrictions on you.  Collars fit into this category.

But the real fun comes when you add in a Relay.  Without a relay, the viewer won't listen to objects in the world.  It's the job of the relay to pass on requests from in-world objects to your viewer to apply or remove restrictions.  Your relay will typically give you all sorts of choices here as to whether to trust the landowner, to ask first before imposing a restriction, etc.  A relay is needed for if you want to be able to be trapped by something such as a cage or tied to some piece of furniture.  There are several free items in Second Life that will do the job of an RLV relay.  The ones that immediately come to mind are:
  • OpenCollar - The collar has a relay script inside of it.  Just turn it on.
  • ThinkKink - They offer a free relay HUD.
  • Susan's RLV Relay Ring - One place to get this is to find Marine's little shop in my profile picks.  Susan's shop is just behind Marine's.  You could wear the ring on your finger, or use it as a HUD.
Who should run RLV?
Submissives who would like to get an extra thrill by feeling the restrictions is "real" in the context of Second Life.  Dominates should learn how to use the RLV tools that exist for them in Second Life.

But I'm scared!
Don't be.  There is nothing anyone can do to you that you can't undo.  Sometimes, it may take a bit of clever thinking to get out of your situation.  Often, a friend can help you because you're locked out of a menu byt they may not be.  Many relays and collars support the idea of a 'SAFEWORD' that will instantly remove all restrictions.

But, I have to ask you...where's the fun in that?  Personally, I love to be tied up and role-playing the situation.  The only time I break out of my bonds unfairly is when someone has caught me and tied me up for some ridiculous amount of time -- like setting a timed lock for a month.

If all else fails and you don't want to be under the restriction anymore, simply turn off RLV in your viewer or log in with the official Second Life viewer which doesn't support RLV.    I think only once in three years did I ever get caught in something so badly I had to turn off RLV to get the thing off of me.

There is a RestrainedLove Support group that's free to join that you can ask questions in.

Sunday, January 30, 2011

Patch for sl_proxy 1.9.3 for Mac and Cygwin

If you're comfortable with patch and make, you shouldn't have much trouble installing this. The instructions to compile are the same on both Mac and Cygwin. Linux users shouldn't have to make any changes, since this software was originally written for linux.
  1. Download sl_proxy-1.9.3 from Network Solutions Laboratory. It's the little 3.5" floppy disk icon.
  2. Extract the sources to a temp folder. I do this from a terminal command prompt:
    • mkdir -p ~/tmp/slproxy
    • cd ~/tmp/slproxy
    • tar xvzf ~/Desktop/sl_proxy-1.9.3.tar.gz
  3. Download my sl_proxy-1.9.3-mac-cygwin.patch from here. (The .patch extension might be hidden)
  4. Test applying the patch, just to be sure you're in the right spot.
    • cd ~/tmp/slproxy
    • patch --dry-run --strip=1 -i ~/Desktop/sl_proxy-1.9.3-mac-cygwin.patch
  5. If that works, apply the patch.
    • patch --strip=1 -i ~/Desktop/sl_proxy-1.9.3-mac-cygwin.patch
  6. Make the junkbox library.
    • cd ~/tmp/slproxy/junkbox_lib-1.2.4
    • autoreconf -f && ./configure && make
  7. Make the sl_proxy programs.
    • cd ../sl_proxy-1.9.3
    • autoreconf -f && ./configure && make
  8. Install them. On Mac, remember to 'sudo' the install command.
    • make install
Assuming that all worked, next you start the processes up. These apps are designed to be running as services or 'daemons' all the time. I haven't bothered to do that under Mac and it's more trouble than it is worth under Cygwin, so I simply start them by hand. If you want to explore them running as a service, feel free.

I recommend using 'screen' to run them. At the least, you'll probably want 3 terminal sessions. I set up some bash aliases to run them in my .profile, so I can just type sl1, sl2, and sl3 -- one in each terminal session. The sl_cache process, sl2 in my aliases, takes a bit to start up. It takes longer each time as you collect more and more textures. This is why I recommend screen if you leave your PC or Mac on most of the time -- because you can detach the session and log out and the apps will keep running.

Starting the apps by hand
On the Mac, you'll need to prefix each of these with 'sudo' because they run as privliged processes.
  1. sl_info -v0 -l -f1 -d
  2. sl_cache -v0 -l -lx -xpr 90 -d
  3. sl_relay -v0 -ci -cs -d
You should read the Network Solutions Laboratory's website for what each of the parameters mean.

In my .profile (or .bashrc, depending), I set up aliases as follows:
  • alias sl1="sl_info -v0 -l -f1 -d"
  • alias sl2="sl_cache -v0 -l -lx -xpr 90 -d"
  • alias sl3="sl_relay -v0 -ci -cs -d"
Pointing the Second Life client to your proxy
In order to start caching textures, you need to have your Second Life client talking to sl_proxy, and not directly to the Second Life servers.

You can do this by putting the IP of your sl_proxy computer in the shortcut. Just copy your Second Life shortcut and perhaps rename it "Second Life - cache". Change your target to add the --loginuri parameter outside the quotes of the exe. For example: "SecondLife.exe" --loginuri http://computer:8100/cgi-bin/login.cgi
Make sure you replace 'computer' with the IP of the sl_proxy machine or use 'localhost' if it's on the same pc you'll run Second Life from.

(instructions shamelessly stolen from the Opensimulator site)
  • Make a '' file, and put this in it:
/Applications/Second\\ Life -loginuri http://computer:8100/cgi-bin/login.cgi
  • set it to executable
  • run it
Good luck and I hope this app helps you out as much as I have. Those of you with FiOS and super-fast connections probably won't get anything from this. But people with slower connections will see things quicker as they move around in places they frequent.

Thursday, January 27, 2011

SL_Proxy 1.9.3 on Mac and Cygwin

In my old blog, I talked about this app a lot. It really saves my butt with my ISP. I just upgraded it yesterday and needed to patch the source again. So, I thought I'd write up what I needed to do.

First, here are my old posts on the subject:

This gets a little technical, so I apologize to those who don't quite follow along. Making a patch file for these is pretty easy, but the last time I did it, I didn't put in the version number. Unfortunately, my old patch file won't work on this source. I plan to make a new patch file this weekend, but I thought I'd write down what I did first.

For Mac:
  • Edit each of these files, changing all the instances of 'chown' from "chown nobody.$GRP" to "chown nobody:$$GRP"
    • sl_proxy-1.9.3/sl_info/
    • sl_proxy-1.9.3/sl_relay/
    • sl_proxy-1.9.3/sl_proxy/
    • sl_proxy-1.9.3/sip_forwarder/
  • autoreconf && ./configure && make
For Cygwin:
The problem is there's no yp headers in Cygwin. All one has to do is remove the checks, surrounding them with #ifndef __CYGWIN__ blocks.
  • junkbox_lib-1.2.4/Lib/password.h @ line 38
#ifndef __CYGWIN__
#include <rpcsvc/ypclnt.h>
#endif // __CYGWIN__

  • junkbox_lib-1.2.4/Lib/password.c
@line 58
#ifndef __CYGWIN__
// for NIS
pw = getnisnam(user_id);
if (pw!=NULL) {
strncpy(pass, pw->pw_passwd, LPASS);
return pass;
#endif // __CYGWIN__
@line 74-164
#ifndef __CYGWIN__

struct passwd* getnisnam(char* usrid)

(lots of code)

return pw;

#endif // __CYGWIN__

void free_pw(struct passwd* pw)

These processes won't auto-start on boot, even if you run 'make install'. It will place the executables into /usr/local/bin and make some inet.d changes in /etc, but they aren't honored on boot. I always start them by hand, using 'screen' so I can easily disconnect or reconnect to see the logs. Like I wrote in my earlier posts, I create a screen console for each process and run these commands (on cygwin, you don't need to 'sudo'):
sudo /usr/local/bin/sl_info -l -v0 -d -f1
sudo /usr/local/bin/sl_cache -l -v0 -lx -xpr 90 -d
sudo /usr/local/bin/sl_relay -v0 -cs -ci -d