<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mr+Lovenkraft</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mr+Lovenkraft"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Mr_Lovenkraft"/>
	<updated>2026-06-06T18:03:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56939</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56939"/>
		<updated>2008-03-01T22:57:24Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* The Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Tip Jar with option to keep a percentage===&lt;br /&gt;
This tip jar is very simple to use, just edit the settings notecard&lt;br /&gt;
and type in &amp;quot;TRUE&amp;quot; or &amp;quot;FALSE&amp;quot; as to keep or not, then type in your&lt;br /&gt;
percent to keep. Notecard example provided below.&lt;br /&gt;
====The Notecard====&lt;br /&gt;
 # TipJar by Mr Lovenkraft&lt;br /&gt;
 # Lines with &amp;quot; # &amp;quot; are comments, do not modify this card without knowledge of the scripting structure&lt;br /&gt;
 # Below are the settings for the TipJar&lt;br /&gt;
 # The lines with &amp;quot;&amp;quot; are just quoted, the quotes are not needed.&lt;br /&gt;
 #&lt;br /&gt;
 #Do you want to keep a %? (Use &amp;quot; TRUE &amp;quot; or &amp;quot; FALSE &amp;quot; below)&lt;br /&gt;
 TRUE&lt;br /&gt;
 #Kept TRUE or FALSE above&lt;br /&gt;
 #&lt;br /&gt;
 #Amount to keep in % below.&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
====The Script====&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//TipJar by Mr Lovenkraft&lt;br /&gt;
//=======================&lt;br /&gt;
&lt;br /&gt;
//Global variables==============&lt;br /&gt;
//Do not modify if you have&lt;br /&gt;
//No idea what each line does :)&lt;br /&gt;
//==============================&lt;br /&gt;
//Start globals&lt;br /&gt;
key owner;&lt;br /&gt;
key user;&lt;br /&gt;
key notecard;&lt;br /&gt;
list settings;&lt;br /&gt;
integer line;&lt;br /&gt;
integer percent_kept;&lt;br /&gt;
integer inuse;&lt;br /&gt;
integer keeping;&lt;br /&gt;
integer paid;&lt;br /&gt;
integer totalt;&lt;br /&gt;
integer ta;&lt;br /&gt;
integer lt;&lt;br /&gt;
string note = &amp;quot;*Settings&amp;quot;;&lt;br /&gt;
set_text()&lt;br /&gt;
{&lt;br /&gt;
    if (inuse == TRUE)&lt;br /&gt;
    {&lt;br /&gt;
        //This is for the actual amount.&lt;br /&gt;
        llSetText(llKey2Name(user) + &amp;quot; logged in.\nLast tip: &amp;quot;+&lt;br /&gt;
                  (string)lt+ &amp;quot;\nTotal tips: &amp;quot; + (string)ta, &amp;lt;0,1,0&amp;gt;, 1.0);&lt;br /&gt;
//This line is for settext with only what the logged in actually get.&lt;br /&gt;
//        llSetText(llKey2Name(user) + &amp;quot; logged in.\nLast tip: &amp;quot;+&lt;br /&gt;
//                  (string)paid+ &amp;quot;\nTotal tips: &amp;quot; + (string)totalt, &amp;lt;0,1,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
    else if (inuse == FALSE)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;Not in use. Touch to log in.&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
divide(integer amount)&lt;br /&gt;
{&lt;br /&gt;
    integer kept;&lt;br /&gt;
    kept = ((amount * percent_kept) / 100);&lt;br /&gt;
    paid = (amount - kept);&lt;br /&gt;
    pay(user, paid);&lt;br /&gt;
    totalt += paid;&lt;br /&gt;
    set_text();&lt;br /&gt;
    debug((string)kept + &amp;quot; kept. Amount paid: &amp;quot;+(string)paid);&lt;br /&gt;
}&lt;br /&gt;
pay(key av, integer amount)&lt;br /&gt;
{&lt;br /&gt;
    llGiveMoney(av, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug(string DEBUG)&lt;br /&gt;
{&lt;br /&gt;
    //llOwnerSay(DEBUG);//Remove commented lines &amp;quot;//&amp;quot; when you want to debug, else add them to turn off debugging&lt;br /&gt;
}&lt;br /&gt;
//End globals&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        line = 0;&lt;br /&gt;
        totalt = 0;&lt;br /&gt;
        ta = 0;&lt;br /&gt;
        lt = 0;&lt;br /&gt;
        keeping = FALSE;&lt;br /&gt;
        inuse = FALSE;&lt;br /&gt;
        settings = [];&lt;br /&gt;
        user = NULL_KEY;&lt;br /&gt;
        set_text();&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
        if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;lt;= 0)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) == 1)&lt;br /&gt;
        {&lt;br /&gt;
            notecard = llGetNotecardLine(note, line);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;gt;= 2)&lt;br /&gt;
        {&lt;br /&gt;
            integer num = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
            integer i;&lt;br /&gt;
            for(i = 0; i &amp;lt; num; i++)&lt;br /&gt;
            {&lt;br /&gt;
                llRemoveInventory(llGetInventoryName(INVENTORY_NOTECARD, i));&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if (inuse == FALSE)&lt;br /&gt;
        {&lt;br /&gt;
            paid = 0;&lt;br /&gt;
            totalt = 0;&lt;br /&gt;
            user = llDetectedKey(0);&lt;br /&gt;
            inuse = TRUE;&lt;br /&gt;
            set_text();&lt;br /&gt;
            debug(&amp;quot;Not in use, adding: &amp;quot;+llDetectedName(0));&lt;br /&gt;
        }&lt;br /&gt;
        else if (inuse == TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            if (llDetectedKey(0) == user)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;In use, logging out: &amp;quot;+llDetectedName(0));&lt;br /&gt;
                inuse = FALSE;&lt;br /&gt;
                set_text();&lt;br /&gt;
                user = NULL_KEY;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llInstantMessage(llDetectedKey(0), &amp;quot;This tipjar is in use, please try another.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (user != NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            lt = amount;&lt;br /&gt;
            ta += amount;&lt;br /&gt;
            if (keeping == TRUE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;keeping a percent&amp;quot;);&lt;br /&gt;
                divide(amount);&lt;br /&gt;
            }&lt;br /&gt;
            else if (keeping == FALSE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;not keeping a percent&amp;quot;);&lt;br /&gt;
                if (inuse == TRUE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(user, amount);&lt;br /&gt;
                }&lt;br /&gt;
                else if (inuse == FALSE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(id, amount);&lt;br /&gt;
                    llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (user == NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            pay(id, amount);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_DEBIT)&lt;br /&gt;
        {&lt;br /&gt;
            debug(&amp;quot;Got permissions&amp;quot;);&lt;br /&gt;
            llSetPayPrice(20, [25, 50, 75, 100]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == notecard)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    settings += [data];&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
                else if (llGetSubString(data, 0, 0) == &amp;quot;#&amp;quot;);&lt;br /&gt;
                {&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_DEBIT);&lt;br /&gt;
                llOwnerSay(&amp;quot;Settings loaded.&amp;quot;);&lt;br /&gt;
                if ((integer)llList2String(settings, 0) == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = TRUE;&lt;br /&gt;
                }&lt;br /&gt;
                else if ((integer)llList2String(settings, 0) == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                percent_kept = (integer)llList2String(settings, 1);&lt;br /&gt;
                line = 0;&lt;br /&gt;
                debug(&amp;quot;Keeping? &amp;quot; + (string)keeping + &amp;quot; What percent if kept: &amp;quot;+(string)percent_kept);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56749</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56749"/>
		<updated>2008-02-29T12:13:23Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* The Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Tip Jar with option to keep a percentage===&lt;br /&gt;
This tip jar is very simple to use, just edit the settings notecard&lt;br /&gt;
and type in &amp;quot;TRUE&amp;quot; or &amp;quot;FALSE&amp;quot; as to keep or not, then type in your&lt;br /&gt;
percent to keep. Notecard example provided below.&lt;br /&gt;
====The Notecard====&lt;br /&gt;
 # TipJar by Mr Lovenkraft&lt;br /&gt;
 # Lines with &amp;quot; # &amp;quot; are comments, do not modify this card without knowledge of the scripting structure&lt;br /&gt;
 # Below are the settings for the TipJar&lt;br /&gt;
 # The lines with &amp;quot;&amp;quot; are just quoted, the quotes are not needed.&lt;br /&gt;
 #&lt;br /&gt;
 #Do you want to keep a %? (Use &amp;quot; TRUE &amp;quot; or &amp;quot; FALSE &amp;quot; below)&lt;br /&gt;
 TRUE&lt;br /&gt;
 #Kept TRUE or FALSE above&lt;br /&gt;
 #&lt;br /&gt;
 #Amount to keep in % below.&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
====The Script====&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//TipJar by Mr Lovenkraft&lt;br /&gt;
//=======================&lt;br /&gt;
&lt;br /&gt;
//Global variables==============&lt;br /&gt;
//Do not modify if you have&lt;br /&gt;
//No idea what each line does :)&lt;br /&gt;
//==============================&lt;br /&gt;
//Start globals&lt;br /&gt;
key owner;&lt;br /&gt;
key user;&lt;br /&gt;
key notecard;&lt;br /&gt;
list settings;&lt;br /&gt;
integer line;&lt;br /&gt;
integer percent_kept;&lt;br /&gt;
integer inuse;&lt;br /&gt;
integer keeping;&lt;br /&gt;
integer paid;&lt;br /&gt;
integer totalt;&lt;br /&gt;
string note = &amp;quot;*Settings&amp;quot;;&lt;br /&gt;
set_text()&lt;br /&gt;
{&lt;br /&gt;
    if (inuse == TRUE)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(llKey2Name(user) + &amp;quot; logged in.\nLast tip: &amp;quot;+&lt;br /&gt;
                  (string)paid+ &amp;quot;\nTotal tips: &amp;quot; + (string)totalt, &amp;lt;0,1,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
    else if (inuse == FALSE)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;Not in use. Touch to log in.&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
divide(integer amount)&lt;br /&gt;
{&lt;br /&gt;
    integer kept;&lt;br /&gt;
    kept = ((amount * percent_kept) / 100);&lt;br /&gt;
    paid = (amount - kept);&lt;br /&gt;
    pay(user, paid);&lt;br /&gt;
    totalt += paid;&lt;br /&gt;
    set_text();&lt;br /&gt;
    debug((string)kept + &amp;quot; kept. Amount paid: &amp;quot;+(string)paid);&lt;br /&gt;
}&lt;br /&gt;
pay(key av, integer amount)&lt;br /&gt;
{&lt;br /&gt;
    llGiveMoney(av, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug(string DEBUG)&lt;br /&gt;
{&lt;br /&gt;
    //llOwnerSay(DEBUG);//Remove commented lines &amp;quot;//&amp;quot; when you want to debug, else add them to turn off debugging&lt;br /&gt;
}&lt;br /&gt;
//End globals&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        line = 0;&lt;br /&gt;
        totalt = 0;&lt;br /&gt;
        keeping = FALSE;&lt;br /&gt;
        inuse = FALSE;&lt;br /&gt;
        settings = [];&lt;br /&gt;
        user = NULL_KEY;&lt;br /&gt;
        set_text();&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
        if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;lt;= 0)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) == 1)&lt;br /&gt;
        {&lt;br /&gt;
            notecard = llGetNotecardLine(note, line);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;gt;= 2)&lt;br /&gt;
        {&lt;br /&gt;
            integer num = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
            integer i;&lt;br /&gt;
            for(i = 0; i &amp;lt; num; i++)&lt;br /&gt;
            {&lt;br /&gt;
                llRemoveInventory(llGetInventoryName(INVENTORY_NOTECARD, i));&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if (inuse == FALSE)&lt;br /&gt;
        {&lt;br /&gt;
            paid = 0;&lt;br /&gt;
            totalt = 0;&lt;br /&gt;
            user = llDetectedKey(0);&lt;br /&gt;
            inuse = TRUE;&lt;br /&gt;
            set_text();&lt;br /&gt;
            debug(&amp;quot;Not in use, adding: &amp;quot;+llDetectedName(0));&lt;br /&gt;
        }&lt;br /&gt;
        else if (inuse == TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            if (llDetectedKey(0) == user)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;In use, logging out: &amp;quot;+llDetectedName(0));&lt;br /&gt;
                inuse = FALSE;&lt;br /&gt;
                set_text();&lt;br /&gt;
                user = NULL_KEY;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llInstantMessage(llDetectedKey(0), &amp;quot;This tipjar is in use, please try another.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (user != NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            if (keeping == TRUE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;keeping a percent&amp;quot;);&lt;br /&gt;
                divide(amount);&lt;br /&gt;
            }&lt;br /&gt;
            else if (keeping == FALSE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;not keeping a percent&amp;quot;);&lt;br /&gt;
                if (inuse == TRUE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(user, amount);&lt;br /&gt;
                }&lt;br /&gt;
                else if (inuse == FALSE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(id, amount);&lt;br /&gt;
                    llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (user == NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            pay(id, amount);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_DEBIT)&lt;br /&gt;
        {&lt;br /&gt;
            debug(&amp;quot;Got permissions&amp;quot;);&lt;br /&gt;
            llSetPayPrice(20, [25, 50, 75, 100]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == notecard)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    settings += [data];&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
                else if (llGetSubString(data, 0, 0) == &amp;quot;#&amp;quot;);&lt;br /&gt;
                {&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_DEBIT);&lt;br /&gt;
                llOwnerSay(&amp;quot;Settings loaded.&amp;quot;);&lt;br /&gt;
                if ((integer)llList2String(settings, 0) == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = TRUE;&lt;br /&gt;
                }&lt;br /&gt;
                else if ((integer)llList2String(settings, 0) == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                percent_kept = (integer)llList2String(settings, 1);&lt;br /&gt;
                line = 0;&lt;br /&gt;
                debug(&amp;quot;Keeping? &amp;quot; + (string)keeping + &amp;quot; What percent if kept: &amp;quot;+(string)percent_kept);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56748</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56748"/>
		<updated>2008-02-29T12:12:00Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* The Script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Tip Jar with option to keep a percentage===&lt;br /&gt;
This tip jar is very simple to use, just edit the settings notecard&lt;br /&gt;
and type in &amp;quot;TRUE&amp;quot; or &amp;quot;FALSE&amp;quot; as to keep or not, then type in your&lt;br /&gt;
percent to keep. Notecard example provided below.&lt;br /&gt;
====The Notecard====&lt;br /&gt;
 # TipJar by Mr Lovenkraft&lt;br /&gt;
 # Lines with &amp;quot; # &amp;quot; are comments, do not modify this card without knowledge of the scripting structure&lt;br /&gt;
 # Below are the settings for the TipJar&lt;br /&gt;
 # The lines with &amp;quot;&amp;quot; are just quoted, the quotes are not needed.&lt;br /&gt;
 #&lt;br /&gt;
 #Do you want to keep a %? (Use &amp;quot; TRUE &amp;quot; or &amp;quot; FALSE &amp;quot; below)&lt;br /&gt;
 TRUE&lt;br /&gt;
 #Kept TRUE or FALSE above&lt;br /&gt;
 #&lt;br /&gt;
 #Amount to keep in % below.&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
====The Script====&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//TipJar by Mr Lovenkraft&lt;br /&gt;
//=======================&lt;br /&gt;
&lt;br /&gt;
//Global variables==============&lt;br /&gt;
//Do not modify if you have&lt;br /&gt;
//No idea what each line does :)&lt;br /&gt;
//==============================&lt;br /&gt;
//Start globals&lt;br /&gt;
key owner;&lt;br /&gt;
key user;&lt;br /&gt;
key notecard;&lt;br /&gt;
list settings;&lt;br /&gt;
integer line;&lt;br /&gt;
integer percent_kept;&lt;br /&gt;
integer inuse;&lt;br /&gt;
integer keeping;&lt;br /&gt;
integer paid;&lt;br /&gt;
integer totalt;&lt;br /&gt;
string note = &amp;quot;*Settings&amp;quot;;&lt;br /&gt;
set_text()&lt;br /&gt;
{&lt;br /&gt;
    if (inuse == TRUE)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(llKey2Name(user) + &amp;quot; logged in.\nLast tip: &amp;quot;+&lt;br /&gt;
                  (string)paid+ &amp;quot;\nTotal tips: &amp;quot; + (string)totalt, &amp;lt;0,1,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
    else if (inuse == FALSE)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;Not in use. Touch to log in.&amp;quot;, &amp;lt;1,0,0&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
divide(integer amount)&lt;br /&gt;
{&lt;br /&gt;
    integer kept;&lt;br /&gt;
    kept = ((amount * percent_kept) / 100);&lt;br /&gt;
    paid = (amount - kept);&lt;br /&gt;
    pay(user, paid);&lt;br /&gt;
    totalt += paid;&lt;br /&gt;
    set_text();&lt;br /&gt;
    debug((string)kept + &amp;quot; kept. Amount paid: &amp;quot;+(string)paid);&lt;br /&gt;
}&lt;br /&gt;
pay(key av, integer amount)&lt;br /&gt;
{&lt;br /&gt;
    llGiveMoney(av, amount);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug(string DEBUG)&lt;br /&gt;
{&lt;br /&gt;
    //llOwnerSay(DEBUG);//Remove commented lines &amp;quot;//&amp;quot; when you want to debug, else add them to turn off debugging&lt;br /&gt;
}&lt;br /&gt;
//End globals&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        line = 0;&lt;br /&gt;
        totalt = 0;&lt;br /&gt;
        keeping = FALSE;&lt;br /&gt;
        inuse = FALSE;&lt;br /&gt;
        settings = [];&lt;br /&gt;
        user = NULL_KEY;&lt;br /&gt;
        set_text();&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
        if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;lt;= 0)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) == 1)&lt;br /&gt;
        {&lt;br /&gt;
            notecard = llGetNotecardLine(note, line);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;gt;= 2)&lt;br /&gt;
        {&lt;br /&gt;
            integer num = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
            integer i;&lt;br /&gt;
            for(i = 0; i &amp;lt; num; i++)&lt;br /&gt;
            {&lt;br /&gt;
                llRemoveInventory(llGetInventoryName(INVENTORY_NOTECARD, i));&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if (inuse == FALSE)&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0);&lt;br /&gt;
            inuse = TRUE;&lt;br /&gt;
            set_text();&lt;br /&gt;
            debug(&amp;quot;Not in use, adding: &amp;quot;+llDetectedName(0));&lt;br /&gt;
        }&lt;br /&gt;
        else if (inuse == TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            if (llDetectedKey(0) == user)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;In use, logging out: &amp;quot;+llDetectedName(0));&lt;br /&gt;
                inuse = FALSE;&lt;br /&gt;
                set_text();&lt;br /&gt;
                user = NULL_KEY;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llInstantMessage(llDetectedKey(0), &amp;quot;This tipjar is in use, please try another.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (user != NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            if (keeping == TRUE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;keeping a percent&amp;quot;);&lt;br /&gt;
                divide(amount);&lt;br /&gt;
            }&lt;br /&gt;
            else if (keeping == FALSE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;not keeping a percent&amp;quot;);&lt;br /&gt;
                if (inuse == TRUE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(user, amount);&lt;br /&gt;
                }&lt;br /&gt;
                else if (inuse == FALSE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(id, amount);&lt;br /&gt;
                    llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (user == NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            pay(id, amount);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_DEBIT)&lt;br /&gt;
        {&lt;br /&gt;
            debug(&amp;quot;Got permissions&amp;quot;);&lt;br /&gt;
            llSetPayPrice(20, [25, 50, 75, 100]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == notecard)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    settings += [data];&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
                else if (llGetSubString(data, 0, 0) == &amp;quot;#&amp;quot;);&lt;br /&gt;
                {&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_DEBIT);&lt;br /&gt;
                llOwnerSay(&amp;quot;Settings loaded.&amp;quot;);&lt;br /&gt;
                if ((integer)llList2String(settings, 0) == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = TRUE;&lt;br /&gt;
                }&lt;br /&gt;
                else if ((integer)llList2String(settings, 0) == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                percent_kept = (integer)llList2String(settings, 1);&lt;br /&gt;
                line = 0;&lt;br /&gt;
                debug(&amp;quot;Keeping? &amp;quot; + (string)keeping + &amp;quot; What percent if kept: &amp;quot;+(string)percent_kept);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56747</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56747"/>
		<updated>2008-02-29T11:49:56Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* The Notecard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Tip Jar with option to keep a percentage===&lt;br /&gt;
This tip jar is very simple to use, just edit the settings notecard&lt;br /&gt;
and type in &amp;quot;TRUE&amp;quot; or &amp;quot;FALSE&amp;quot; as to keep or not, then type in your&lt;br /&gt;
percent to keep. Notecard example provided below.&lt;br /&gt;
====The Notecard====&lt;br /&gt;
 # TipJar by Mr Lovenkraft&lt;br /&gt;
 # Lines with &amp;quot; # &amp;quot; are comments, do not modify this card without knowledge of the scripting structure&lt;br /&gt;
 # Below are the settings for the TipJar&lt;br /&gt;
 # The lines with &amp;quot;&amp;quot; are just quoted, the quotes are not needed.&lt;br /&gt;
 #&lt;br /&gt;
 #Do you want to keep a %? (Use &amp;quot; TRUE &amp;quot; or &amp;quot; FALSE &amp;quot; below)&lt;br /&gt;
 TRUE&lt;br /&gt;
 #Kept TRUE or FALSE above&lt;br /&gt;
 #&lt;br /&gt;
 #Amount to keep in % below.&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
====The Script====&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//TipJar by Mr Lovenkraft&lt;br /&gt;
//=======================&lt;br /&gt;
&lt;br /&gt;
//Global variables==============&lt;br /&gt;
//Do not modify if you have&lt;br /&gt;
//No idea what each line does :)&lt;br /&gt;
//==============================&lt;br /&gt;
//Start globals&lt;br /&gt;
key owner;&lt;br /&gt;
key user;&lt;br /&gt;
key notecard;&lt;br /&gt;
list settings;&lt;br /&gt;
integer line;&lt;br /&gt;
integer percent_kept;&lt;br /&gt;
integer inuse;&lt;br /&gt;
integer keeping;&lt;br /&gt;
string note = &amp;quot;*Settings&amp;quot;;&lt;br /&gt;
divide(integer amount)&lt;br /&gt;
{&lt;br /&gt;
    integer kept;&lt;br /&gt;
    kept = ((amount * percent_kept) / 100);&lt;br /&gt;
    integer paid = (amount - kept);&lt;br /&gt;
    pay(user, paid);&lt;br /&gt;
    debug((string)kept + &amp;quot; kept. Amount paid: &amp;quot;+(string)paid);&lt;br /&gt;
}&lt;br /&gt;
pay(key av, integer amount)&lt;br /&gt;
{&lt;br /&gt;
    llGiveMoney(av, amount);&lt;br /&gt;
}&lt;br /&gt;
debug(string DEBUG)&lt;br /&gt;
{&lt;br /&gt;
    //llOwnerSay(DEBUG);//Remove commented lines &amp;quot;//&amp;quot; when you want to debug, else add them to turn off debugging&lt;br /&gt;
}&lt;br /&gt;
//End globals&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        line = 0;&lt;br /&gt;
        keeping = FALSE;&lt;br /&gt;
        inuse = FALSE;&lt;br /&gt;
        settings = [];&lt;br /&gt;
        user = NULL_KEY;&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
        if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;lt;= 0)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) == 1)&lt;br /&gt;
        {&lt;br /&gt;
            notecard = llGetNotecardLine(note, line);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;gt;= 2)&lt;br /&gt;
        {&lt;br /&gt;
            integer num = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
            integer i;&lt;br /&gt;
            for(i = 0; i &amp;lt; num; i++)&lt;br /&gt;
            {&lt;br /&gt;
                llRemoveInventory(llGetInventoryName(INVENTORY_NOTECARD, i));&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if (inuse == FALSE)&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0);&lt;br /&gt;
            inuse = TRUE;&lt;br /&gt;
            debug(&amp;quot;Not in use, adding: &amp;quot;+llDetectedName(0));&lt;br /&gt;
        }&lt;br /&gt;
        else if (inuse == TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            if (llDetectedKey(0) == user)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;In use, logging out: &amp;quot;+llDetectedName(0));&lt;br /&gt;
                inuse = FALSE;&lt;br /&gt;
                user = NULL_KEY;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llInstantMessage(llDetectedKey(0), &amp;quot;This tipjar is in use, please try another.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (user != NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            if (keeping == TRUE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;keeping a percent&amp;quot;);&lt;br /&gt;
                divide(amount);&lt;br /&gt;
            }&lt;br /&gt;
            else if (keeping == FALSE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;not keeping a percent&amp;quot;);&lt;br /&gt;
                if (inuse == TRUE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(user, amount);&lt;br /&gt;
                }&lt;br /&gt;
                else if (inuse == FALSE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(id, amount);&lt;br /&gt;
                    llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (user == NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            pay(id, amount);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_DEBIT)&lt;br /&gt;
        {&lt;br /&gt;
            debug(&amp;quot;Got permissions&amp;quot;);&lt;br /&gt;
            llSetPayPrice(20, [25, 50, 75, 100]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == notecard)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    settings += [data];&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
                else if (llGetSubString(data, 0, 0) == &amp;quot;#&amp;quot;);&lt;br /&gt;
                {&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_DEBIT);&lt;br /&gt;
                llOwnerSay(&amp;quot;Settings loaded.&amp;quot;);&lt;br /&gt;
                if ((integer)llList2String(settings, 0) == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = TRUE;&lt;br /&gt;
                }&lt;br /&gt;
                else if ((integer)llList2String(settings, 0) == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                percent_kept = (integer)llList2String(settings, 1);&lt;br /&gt;
                line = 0;&lt;br /&gt;
                debug(&amp;quot;Keeping? &amp;quot; + (string)keeping + &amp;quot; What percent if kept: &amp;quot;+(string)percent_kept);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56746</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=56746"/>
		<updated>2008-02-29T11:49:13Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* Open source codes from Mr Lovenkraft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Tip Jar with option to keep a percentage===&lt;br /&gt;
This tip jar is very simple to use, just edit the settings notecard&lt;br /&gt;
and type in &amp;quot;TRUE&amp;quot; or &amp;quot;FALSE&amp;quot; as to keep or not, then type in your&lt;br /&gt;
percent to keep. Notecard example provided below.&lt;br /&gt;
====The Notecard====&lt;br /&gt;
 # TipJar by Mr Lovenkraft&lt;br /&gt;
 # Lines with &amp;quot; # &amp;quot; are comments, do not modify this card without knowledge of the scripting structure&lt;br /&gt;
 # Below are the settings for the TipJar&lt;br /&gt;
 # The lines with &amp;quot;&amp;quot; are just quoted, the quotes are not needed.&lt;br /&gt;
 #&lt;br /&gt;
 #Do you want to keep a %? (Use &amp;quot; TRUE &amp;quot; or &amp;quot; FALSE &amp;quot; below)&lt;br /&gt;
 TRUE&lt;br /&gt;
 #Percent kept above&lt;br /&gt;
 #&lt;br /&gt;
 #Amount to keep in % below.&lt;br /&gt;
 20&lt;br /&gt;
====The Script====&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//TipJar by Mr Lovenkraft&lt;br /&gt;
//=======================&lt;br /&gt;
&lt;br /&gt;
//Global variables==============&lt;br /&gt;
//Do not modify if you have&lt;br /&gt;
//No idea what each line does :)&lt;br /&gt;
//==============================&lt;br /&gt;
//Start globals&lt;br /&gt;
key owner;&lt;br /&gt;
key user;&lt;br /&gt;
key notecard;&lt;br /&gt;
list settings;&lt;br /&gt;
integer line;&lt;br /&gt;
integer percent_kept;&lt;br /&gt;
integer inuse;&lt;br /&gt;
integer keeping;&lt;br /&gt;
string note = &amp;quot;*Settings&amp;quot;;&lt;br /&gt;
divide(integer amount)&lt;br /&gt;
{&lt;br /&gt;
    integer kept;&lt;br /&gt;
    kept = ((amount * percent_kept) / 100);&lt;br /&gt;
    integer paid = (amount - kept);&lt;br /&gt;
    pay(user, paid);&lt;br /&gt;
    debug((string)kept + &amp;quot; kept. Amount paid: &amp;quot;+(string)paid);&lt;br /&gt;
}&lt;br /&gt;
pay(key av, integer amount)&lt;br /&gt;
{&lt;br /&gt;
    llGiveMoney(av, amount);&lt;br /&gt;
}&lt;br /&gt;
debug(string DEBUG)&lt;br /&gt;
{&lt;br /&gt;
    //llOwnerSay(DEBUG);//Remove commented lines &amp;quot;//&amp;quot; when you want to debug, else add them to turn off debugging&lt;br /&gt;
}&lt;br /&gt;
//End globals&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        line = 0;&lt;br /&gt;
        keeping = FALSE;&lt;br /&gt;
        inuse = FALSE;&lt;br /&gt;
        settings = [];&lt;br /&gt;
        user = NULL_KEY;&lt;br /&gt;
        llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);&lt;br /&gt;
        if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;lt;= 0)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) == 1)&lt;br /&gt;
        {&lt;br /&gt;
            notecard = llGetNotecardLine(note, line);&lt;br /&gt;
        }&lt;br /&gt;
        else if (llGetInventoryNumber(INVENTORY_NOTECARD) &amp;gt;= 2)&lt;br /&gt;
        {&lt;br /&gt;
            integer num = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
            integer i;&lt;br /&gt;
            for(i = 0; i &amp;lt; num; i++)&lt;br /&gt;
            {&lt;br /&gt;
                llRemoveInventory(llGetInventoryName(INVENTORY_NOTECARD, i));&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(note +&amp;quot; not found, please put this notecard in and re-rez.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if (inuse == FALSE)&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0);&lt;br /&gt;
            inuse = TRUE;&lt;br /&gt;
            debug(&amp;quot;Not in use, adding: &amp;quot;+llDetectedName(0));&lt;br /&gt;
        }&lt;br /&gt;
        else if (inuse == TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            if (llDetectedKey(0) == user)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;In use, logging out: &amp;quot;+llDetectedName(0));&lt;br /&gt;
                inuse = FALSE;&lt;br /&gt;
                user = NULL_KEY;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llInstantMessage(llDetectedKey(0), &amp;quot;This tipjar is in use, please try another.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    money(key id, integer amount)&lt;br /&gt;
    {&lt;br /&gt;
        if (user != NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            if (keeping == TRUE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;keeping a percent&amp;quot;);&lt;br /&gt;
                divide(amount);&lt;br /&gt;
            }&lt;br /&gt;
            else if (keeping == FALSE)&lt;br /&gt;
            {&lt;br /&gt;
                debug(&amp;quot;not keeping a percent&amp;quot;);&lt;br /&gt;
                if (inuse == TRUE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(user, amount);&lt;br /&gt;
                }&lt;br /&gt;
                else if (inuse == FALSE)&lt;br /&gt;
                {&lt;br /&gt;
                    pay(id, amount);&lt;br /&gt;
                    llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (user == NULL_KEY)&lt;br /&gt;
        {&lt;br /&gt;
            pay(id, amount);&lt;br /&gt;
            llInstantMessage(id, &amp;quot;This tipjar is not in use, money refuned.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_DEBIT)&lt;br /&gt;
        {&lt;br /&gt;
            debug(&amp;quot;Got permissions&amp;quot;);&lt;br /&gt;
            llSetPayPrice(20, [25, 50, 75, 100]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == notecard)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                if (llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    settings += [data];&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
                else if (llGetSubString(data, 0, 0) == &amp;quot;#&amp;quot;);&lt;br /&gt;
                {&lt;br /&gt;
                    line += 1;&lt;br /&gt;
                    notecard = llGetNotecardLine(note, line);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_DEBIT);&lt;br /&gt;
                llOwnerSay(&amp;quot;Settings loaded.&amp;quot;);&lt;br /&gt;
                if ((integer)llList2String(settings, 0) == 0)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = TRUE;&lt;br /&gt;
                }&lt;br /&gt;
                else if ((integer)llList2String(settings, 0) == 1)&lt;br /&gt;
                {&lt;br /&gt;
                    keeping = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                percent_kept = (integer)llList2String(settings, 1);&lt;br /&gt;
                line = 0;&lt;br /&gt;
                debug(&amp;quot;Keeping? &amp;quot; + (string)keeping + &amp;quot; What percent if kept: &amp;quot;+(string)percent_kept);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53322</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53322"/>
		<updated>2008-02-10T10:40:06Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* Useful snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
use at your own risk :)&lt;br /&gt;
----&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53321</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53321"/>
		<updated>2008-02-10T10:39:01Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* Useful snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53320</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=53320"/>
		<updated>2008-02-10T10:38:19Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
==Useful snippets==&lt;br /&gt;
----&lt;br /&gt;
Codes here are not supported by me, they are for learning purposes only&lt;br /&gt;
===Max list length===&lt;br /&gt;
This will only allow a list to hold a max #, after that number is met&lt;br /&gt;
it will update the oldest&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list words;&lt;br /&gt;
integer index;&lt;br /&gt;
string test;&lt;br /&gt;
integer listlength;&lt;br /&gt;
integer i;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        i = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(llGetSubString(msg, 0, 3)) == &amp;quot;add &amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            listlength = llGetListLength(words);&lt;br /&gt;
            test = llGetSubString(msg, 4, -1);&lt;br /&gt;
            index = llListFindList(words, [test]);&lt;br /&gt;
            list max = [test];&lt;br /&gt;
            if(listlength &amp;lt;= 2)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    words += [test];&lt;br /&gt;
                    llWhisper(0, test + &amp;quot; was stored. &amp;quot;+ &amp;quot;Total words: &amp;quot;+(string)(listlength + 1));&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if(listlength &amp;gt;= 3)&lt;br /&gt;
            {&lt;br /&gt;
                if(index == -1)&lt;br /&gt;
                {&lt;br /&gt;
                    if(i &amp;lt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        i += 1;&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(i &amp;gt;= listlength)&lt;br /&gt;
                    {&lt;br /&gt;
                        i = 0;&lt;br /&gt;
                        llOwnerSay(&amp;quot;Max words added, removing oldest.&amp;quot;);&lt;br /&gt;
                        words = llListReplaceList(words, max, i, i);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if(index != -1)&lt;br /&gt;
                {&lt;br /&gt;
                    llWhisper(0, &amp;quot;Word is already in list.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;list&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llDumpList2String(words, &amp;quot;.\n&amp;quot;)+&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52758</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52758"/>
		<updated>2008-02-05T22:08:28Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: /* Texture Organizer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52757</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52757"/>
		<updated>2008-02-05T21:58:09Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Texture Organizer===&lt;br /&gt;
This is just a simple texture organizer for those with to many textures for their own good&lt;br /&gt;
hehe, I didn&#039;t comment this one but it works fine :)&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Texture organizer by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
key texture_key;&lt;br /&gt;
string texture_name;&lt;br /&gt;
integer inventory_pos;&lt;br /&gt;
integer diaChan;&lt;br /&gt;
integer listen_handler;&lt;br /&gt;
integer invTotal;&lt;br /&gt;
list button_options = [&amp;quot;Prev&amp;quot;, &amp;quot;Next&amp;quot;, &amp;quot;Give&amp;quot;];&lt;br /&gt;
dia()&lt;br /&gt;
{&lt;br /&gt;
    diaChan = llRound(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999));&lt;br /&gt;
    }&lt;br /&gt;
    listen_handler = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(owner, &amp;quot;Pick your option below&amp;quot;, button_options, diaChan);&lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
change(string choice)&lt;br /&gt;
{&lt;br /&gt;
    if(choice == &amp;quot;next&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos += 1;&lt;br /&gt;
        if(inventory_pos &amp;gt;= invTotal)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    if(choice == &amp;quot;prev&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        inventory_pos -= 1;&lt;br /&gt;
        if(inventory_pos &amp;lt;= -1)&lt;br /&gt;
        {&lt;br /&gt;
            inventory_pos = invTotal;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    llSetTexture(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos), ALL_SIDES);&lt;br /&gt;
    llSetText(&amp;quot;Texture Name: &amp;quot;+llGetInventoryName(INVENTORY_TEXTURE, inventory_pos)&lt;br /&gt;
              +&amp;quot;\nTexture Key: &amp;quot;+(string)llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE, inventory_pos))&lt;br /&gt;
              , &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        inventory_pos = 0;&lt;br /&gt;
        texture_name = &amp;quot;&amp;quot;;&lt;br /&gt;
        texture_key = &amp;quot;&amp;quot;;&lt;br /&gt;
        invTotal = 0;&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            invTotal = llGetInventoryNumber(INVENTORY_TEXTURE);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedKey(0)==owner)&lt;br /&gt;
        {&lt;br /&gt;
            dia();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Owner only.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(30);&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;next&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;next&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;prev&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            change(&amp;quot;prev&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(owner, llGetInventoryName(INVENTORY_TEXTURE, inventory_pos));&lt;br /&gt;
        }&lt;br /&gt;
        dia();&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(listen_handler)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Option not chose, menu timed out.&amp;quot;);&lt;br /&gt;
            llListenRemove(listen_handler);&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52559</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52559"/>
		<updated>2008-02-04T00:57:02Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Single pose: pose ball===&lt;br /&gt;
Single animation poseball that uses the animation in the inventory&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Basic Poseball script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, -0.5&amp;gt;, ZERO_ROTATION);//Sets a sit target to actually work&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change) &lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_LINK) &lt;br /&gt;
        { &lt;br /&gt;
            key av = llAvatarOnSitTarget();&lt;br /&gt;
            if (av)//If there is an av on it&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Ask permissions&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);//Stops the default sit&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0));//Start the animation inside the prim&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52558</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52558"/>
		<updated>2008-02-04T00:34:58Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Greeter: landmark/notecard giver===&lt;br /&gt;
This uses two scripts, one for detect and give,&lt;br /&gt;
and one for handling the list and seeing if that&lt;br /&gt;
person has been given a notecard/landmark.&lt;br /&gt;
&lt;br /&gt;
Greeter&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Greeter by Mr Lovenkraft&lt;br /&gt;
key owner;&lt;br /&gt;
integer counter; //Total amount of people greeted&lt;br /&gt;
key user; //Person to greet&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = 0;&lt;br /&gt;
        llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY); //Clears the greeted list&lt;br /&gt;
        owner = llGetOwner(); //Gets the new owner&lt;br /&gt;
    }&lt;br /&gt;
    collision_start(integer c)&lt;br /&gt;
    {&lt;br /&gt;
        user = llDetectedKey(0); //Person colliding with the object is the user&lt;br /&gt;
        if(counter &amp;gt;= 70)//If our counter goes to 70 or higher (this prevents the list from getting to big)&lt;br /&gt;
        {&lt;br /&gt;
            llMessageLinked(LINK_THIS, 0, &amp;quot;clear&amp;quot;, NULL_KEY);//Clear the list again&lt;br /&gt;
            counter = 0;//Reset the counter&lt;br /&gt;
        }&lt;br /&gt;
        llMessageLinked(LINK_THIS, 10, llDetectedName(0), NULL_KEY);//Sends the name to be greeted&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str==&amp;quot;give&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_NOTECARD, 0));//Give notecard&lt;br /&gt;
            llGiveInventory(user, llGetInventoryName(INVENTORY_LANDMARK, 0));//Give landmark&lt;br /&gt;
            counter += 1;//Add one to our counter&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User handler: List to keep track of people, so that it prevents multiple&lt;br /&gt;
copies to the same user&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list names;//Names of people greeted since last reset&lt;br /&gt;
string test;//Name to test with the list&lt;br /&gt;
integer index;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        names = [];//Clear the names on rez&lt;br /&gt;
    }&lt;br /&gt;
    link_message(integer sender, integer num, string str, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if(str == &amp;quot;clear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            names = [];//Resets the list&lt;br /&gt;
        }&lt;br /&gt;
        if(num == 10)&lt;br /&gt;
        {&lt;br /&gt;
            test = str;//Makes the name sent by the greeter the test&lt;br /&gt;
            index = llListFindList(names, [test]); //Checks to see if it is in the list&lt;br /&gt;
            if(index == -1)//If not found in the list&lt;br /&gt;
            {&lt;br /&gt;
                names += str;//Add the name to the list if not found&lt;br /&gt;
                llMessageLinked(LINK_THIS, 0, &amp;quot;give&amp;quot;, NULL_KEY);//Greet the new user&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52557</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52557"/>
		<updated>2008-02-04T00:27:35Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard, goes in the room prim of lockable object&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This also goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52556</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52556"/>
		<updated>2008-02-04T00:26:24Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard&lt;br /&gt;
 Mr Lovenkraft&lt;br /&gt;
 Fname2 Lastname2&lt;br /&gt;
 Fname3 Lastname3&lt;br /&gt;
This goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52555</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52555"/>
		<updated>2008-02-04T00:24:38Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Basic notecard access list===&lt;br /&gt;
This is an example notecard&lt;br /&gt;
&amp;lt;!--an embedded comment--&amp;gt;&lt;br /&gt;
Mr Lovenkraft&lt;br /&gt;
Fname2 Lastname2&lt;br /&gt;
Fname3 Lastname3&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;!--an embedded comment--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
This goes in your object you wish to lock/unlock etc&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list allowed = [];&lt;br /&gt;
string allow_list = &amp;quot;Allow&amp;quot;;&lt;br /&gt;
key owner;&lt;br /&gt;
key note_card;&lt;br /&gt;
integer line;&lt;br /&gt;
integer list_pos;&lt;br /&gt;
integer i;&lt;br /&gt;
integer locked;&lt;br /&gt;
int(integer on)&lt;br /&gt;
{&lt;br /&gt;
    if(on==0)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Locked, only allowed may use.&amp;quot;);&lt;br /&gt;
        locked = TRUE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==1)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;Unlocked, anyone may use.&amp;quot;);&lt;br /&gt;
        locked = FALSE;&lt;br /&gt;
    }&lt;br /&gt;
    if(on==3)&lt;br /&gt;
    {&lt;br /&gt;
        allowed = [];&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        int(3);&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        int(3);&lt;br /&gt;
        list_pos = 0;&lt;br /&gt;
        line = 0;&lt;br /&gt;
        llListen(0, &amp;quot;&amp;quot;, owner, &amp;quot;&amp;quot;);&lt;br /&gt;
        note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
        llOwnerSay((string)llGetFreeMemory());&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            int(3);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;lock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(0);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;unlock&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            int(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer t)&lt;br /&gt;
    {&lt;br /&gt;
        if(locked)&lt;br /&gt;
        {&lt;br /&gt;
            string Ntest = llDetectedName(0);&lt;br /&gt;
            integer index = llListFindList(allowed, [Ntest]);&lt;br /&gt;
            if(index != -1)&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0,&amp;quot;Opened for: &amp;quot;+llList2String(allowed, index)+&amp;quot;.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;You are not on the access list.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, &amp;quot;Opened.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key Qid, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (Qid == note_card)&lt;br /&gt;
        {&lt;br /&gt;
            if (data != EOF)&lt;br /&gt;
            {&lt;br /&gt;
                allowed += data;&lt;br /&gt;
                line += 1;&lt;br /&gt;
                note_card = llGetNotecardLine(allow_list, line);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                line = 0;&lt;br /&gt;
                llOwnerSay(&amp;quot;Done.&amp;quot;);&lt;br /&gt;
                llOwnerSay(llList2CSV(allowed));&lt;br /&gt;
                llOwnerSay(&amp;quot;Memory left: &amp;quot;+(string)llGetFreeMemory());&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52554</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52554"/>
		<updated>2008-02-04T00:16:46Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Cycle pose ball: touch cycle===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Multi poseball/pole by Mr lovenkraft&lt;br /&gt;
//Open sourced ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
integer pos;&lt;br /&gt;
integer listSize;&lt;br /&gt;
integer sat_on;&lt;br /&gt;
int()&lt;br /&gt;
{&lt;br /&gt;
    if(sat_on)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;No one sitting on this object.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        pos = 0;&lt;br /&gt;
        anims = [];&lt;br /&gt;
        llSitTarget(&amp;lt;0.0, 0.0, 0.1&amp;gt;, ZERO_ROTATION);//Sets the sit pose for the target&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)//something has changed with this object&lt;br /&gt;
    {&lt;br /&gt;
        if(change &amp;amp; CHANGED_INVENTORY)//if only the inventory is changed of course ;)&lt;br /&gt;
        {&lt;br /&gt;
            pos = 0;//start the post over&lt;br /&gt;
            anims = []; //clear the list&lt;br /&gt;
            integer i;&lt;br /&gt;
            integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations&lt;br /&gt;
            for(i=0; i&amp;lt;totA; i++)&lt;br /&gt;
            {&lt;br /&gt;
                anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list&lt;br /&gt;
            }&lt;br /&gt;
            llOwnerSay(&amp;quot;Animaions inside: &amp;quot; + llList2CSV(anims));//Tell the owner how many animations inside&lt;br /&gt;
        }&lt;br /&gt;
        if(change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            av = llAvatarOnSitTarget();&lt;br /&gt;
            if(av) //if there is really someone sitting on it&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = TRUE; //If someone is sitting make it true&lt;br /&gt;
                int();//Start animation&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                sat_on = FALSE;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//got permissions from user&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation&lt;br /&gt;
            pos += 1;//go to next in list&lt;br /&gt;
            if(pos &amp;gt;= listSize)//if at the end of the list&lt;br /&gt;
            {&lt;br /&gt;
                pos = 0;&lt;br /&gt;
            }&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        listSize = llGetListLength(anims);&lt;br /&gt;
        int(); //start the new animation&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52553</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52553"/>
		<updated>2008-02-04T00:14:25Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
===Stop all animations: basic===&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Stop all animations by Mr Lovenkraft&lt;br /&gt;
//Useful learning codes from the large inventory of Mr Lovenkraft ;)&lt;br /&gt;
list anims;&lt;br /&gt;
key av;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.&lt;br /&gt;
        av = llDetectedKey(0); //Person to stop animations for.&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)//Runs if we get permissions.&lt;br /&gt;
    {&lt;br /&gt;
        anims = []; //Clears the list of any past animations.&lt;br /&gt;
        anims = llGetAnimationList(av); //Gets the current users animations playing.&lt;br /&gt;
        integer index = llGetListLength(anims); //The amount of animations for stopping.&lt;br /&gt;
        integer i; //Starting place for our loop.&lt;br /&gt;
        for(i=0; i&amp;lt;index; i++)//Runs through for each animation in the list.&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52552</id>
		<title>User:Mr Lovenkraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Mr_Lovenkraft&amp;diff=52552"/>
		<updated>2008-02-04T00:12:02Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: New page: ==Open source codes from Mr Lovenkraft== ---- I&amp;#039;ve just starting this page in the hopes of having quite a few codes open sourced for those of you who either can&amp;#039;t find what you are looking...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Open source codes from Mr Lovenkraft==&lt;br /&gt;
----&lt;br /&gt;
I&#039;ve just starting this page in the hopes of having quite a few codes open sourced&lt;br /&gt;
for those of you who either can&#039;t find what you are looking for, or just want an easy&lt;br /&gt;
place to look for codes :)&lt;br /&gt;
----&lt;br /&gt;
===Removable prim clothing script===&lt;br /&gt;
This script is written to be placed in the root prim of an object.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Removable clothing by Mr Lovenkraft, free to use by anyone.&lt;br /&gt;
//Fully open source, but credit going to Mr Lovenkraft for his effort :)&lt;br /&gt;
key user; //Person touching the clothing.&lt;br /&gt;
key owner; //The owner of course O.o&lt;br /&gt;
integer diaChan; //Random Dialog channel to prevent other clothing items from listening..&lt;br /&gt;
integer listenNum; //Used to start a listen, and remove it.&lt;br /&gt;
list buttons = [&amp;quot;Tear&amp;quot;, &amp;quot;Look&amp;quot;, &amp;quot;Flick&amp;quot;, &amp;quot;Tug&amp;quot;];//Buttons to click on of course.&lt;br /&gt;
integer touchable = TRUE;&lt;br /&gt;
integer removeable;&lt;br /&gt;
int()//The actual starting menu and calculating random channel to listen on.&lt;br /&gt;
{&lt;br /&gt;
    touchable = FALSE;&lt;br /&gt;
    diaChan = llCeil(llFrand(-9999999));&lt;br /&gt;
    if(diaChan &amp;gt;= 0) //Just in case it returns 0, we want a negative listen :)&lt;br /&gt;
    {&lt;br /&gt;
        diaChan += llRound(llFrand(-9999999)); //Recalculate&lt;br /&gt;
    }&lt;br /&gt;
    listenNum = llListen(diaChan, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);//Listen handler to remove listen when done.&lt;br /&gt;
    llDialog(user, &amp;quot;What would you like to do?&amp;quot;, buttons, diaChan); //Menu with the buttons o.o&lt;br /&gt;
    llSetTimerEvent(15); //Menu time out, in case someone doesn&#039;t pick an option :)&lt;br /&gt;
}&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer r)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Of course it gets the owner O.o&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner(); //Again just in case it didn&#039;t get the point.&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        if(touchable) //If it hasn&#039;t been touched, let it be touched&lt;br /&gt;
        {&lt;br /&gt;
            user = llDetectedKey(0); //Makes the person touching, the owner.&lt;br /&gt;
            int(); //When touched, get the random channel.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    attach(key av)&lt;br /&gt;
    {&lt;br /&gt;
        if(av)&lt;br /&gt;
        {&lt;br /&gt;
            removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            removeable = FALSE; //Oposite if no av :)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; rips &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing right off!&amp;quot;);&lt;br /&gt;
            llDetachFromAvatar( ); //Detach from av of course.&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tug&amp;quot;) //We use llToLower(msg) so that it&#039;s not case sensitive. :)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; tugs on &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;flick&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; flicks &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;look&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llWhisper(0, llKey2Name(user) + &amp;quot; looks at &amp;quot; + llKey2Name(owner) +&amp;quot;&#039;s clothing.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        if(llToLower(msg)==&amp;quot;tear&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(removeable)&lt;br /&gt;
            {&lt;br /&gt;
                llRequestPermissions(owner, PERMISSION_ATTACH);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llWhisper(0, &amp;quot;Can not remove clothing that is not worn.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llListenRemove(listenNum); //Stop listening to prevent lag :)&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        touchable = TRUE;&lt;br /&gt;
        llSetTimerEvent(0.0); //Stops the timer&lt;br /&gt;
        llWhisper(0, &amp;quot;Menu time out...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetAgentSize&amp;diff=40140</id>
		<title>LlGetAgentSize</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetAgentSize&amp;diff=40140"/>
		<updated>2007-11-12T13:49:24Z</updated>

		<summary type="html">&lt;p&gt;Mr Lovenkraft: Edited a few scripting errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=218|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetAgentSize|return_type=vector|p1_type=key|p1_name=id&lt;br /&gt;
|func_footnote=The agent &#039;&#039;&#039;id&#039;&#039;&#039; must be in the same region as the requesting object, {{LSL Const|ZERO_VECTOR|vector|{{LSL VR|0.0|0.0|0.0}}}} is returned if not.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the size of the requested avatar by &#039;&#039;&#039;id&#039;&#039;&#039;.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//A simple script that makes a box hover above the owner&#039;s head.&lt;br /&gt;
default {&lt;br /&gt;
    on_rez(integer i) {&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;, llGetOwner(), AGENT, PI, 96);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num) {&lt;br /&gt;
        vector where = llDetectedPos(0);&lt;br /&gt;
        vector agent = llGetAgentSize(llGetOwner())/2;&lt;br /&gt;
        size += agent.z + &amp;lt;0,0,.5&amp;gt;;&lt;br /&gt;
        llSetPos(where);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Corrected Code, Comments welcomed.&lt;br /&gt;
--[[User:Mr Lovenkraft|Mr Lovenkraft]] 05:49, 12 November 2007 (PST)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code was edited by Mr Lovenkraft for errors, comments are below.&lt;br /&gt;
vector size;&lt;br /&gt;
default &lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) &lt;br /&gt;
    {&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;, llGetOwner(), AGENT, 96, PI); //I reversed the &amp;quot;96&amp;quot; and the &amp;quot;PI&amp;quot; because-&lt;br /&gt;
    }                                              //PI defines the Arc. and 96 Defines the meters.&lt;br /&gt;
    sensor(integer num)                            //Not the other way around.&lt;br /&gt;
    {&lt;br /&gt;
        vector where = llDetectedPos(0);&lt;br /&gt;
        vector agent = llGetAgentSize(llGetOwner())/2;&lt;br /&gt;
        size += agent + &amp;lt;0,0,.5&amp;gt;; //&amp;quot;size&amp;quot; Has to be defined in some way, I made it a Global&lt;br /&gt;
        llSetPos(where + size); //In order for &amp;quot;size&amp;quot; to effect this code it must be added in&lt;br /&gt;
    }                           //some way, which is why it says &amp;quot;llSetPos(where + size);&amp;quot;&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetBoundingBox]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llGetAgentInfo]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestAgentData]]|}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=This is a good way to test if an av is in the same region.&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1&lt;br /&gt;
|cat2=Avatar&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mr Lovenkraft</name></author>
	</entry>
</feed>