Difference between revisions of "User:Mr Lovenkraft"

From Second Life Wiki
Jump to navigation Jump to search
Line 209: Line 209:
----
----
===Basic notecard access list===
===Basic notecard access list===
This is an example notecard
This is an example notecard, goes in the room prim of lockable object
  Mr Lovenkraft
  Mr Lovenkraft
  Fname2 Lastname2
  Fname2 Lastname2
  Fname3 Lastname3
  Fname3 Lastname3
This goes in your object you wish to lock/unlock etc
This also goes in your object you wish to lock/unlock etc
<lsl>
<lsl>
list allowed = [];
list allowed = [];

Revision as of 17:27, 3 February 2008

Open source codes from Mr Lovenkraft


I've just starting this page in the hopes of having quite a few codes open sourced for those of you who either can't find what you are looking for, or just want an easy place to look for codes :)


Removable prim clothing script

This script is written to be placed in the root prim of an object. <lsl> //Removable clothing by Mr Lovenkraft, free to use by anyone. //Fully open source, but credit going to Mr Lovenkraft for his effort :) key user; //Person touching the clothing. key owner; //The owner of course O.o integer diaChan; //Random Dialog channel to prevent other clothing items from listening.. integer listenNum; //Used to start a listen, and remove it. list buttons = ["Tear", "Look", "Flick", "Tug"];//Buttons to click on of course. integer touchable = TRUE; integer removeable; int()//The actual starting menu and calculating random channel to listen on. {

   touchable = FALSE;
   diaChan = llCeil(llFrand(-9999999));
   if(diaChan >= 0) //Just in case it returns 0, we want a negative listen :)
   {
       diaChan += llRound(llFrand(-9999999)); //Recalculate
   }
   listenNum = llListen(diaChan, "", "", "");//Listen handler to remove listen when done.
   llDialog(user, "What would you like to do?", buttons, diaChan); //Menu with the buttons o.o
   llSetTimerEvent(15); //Menu time out, in case someone doesn't pick an option :)

} default {

   on_rez(integer r)
   {
       owner = llGetOwner(); //Of course it gets the owner O.o
   }
   state_entry()
   {
       owner = llGetOwner(); //Again just in case it didn't get the point.
   }
   touch_start(integer total_number)
   {
       if(touchable) //If it hasn't been touched, let it be touched
       {
           user = llDetectedKey(0); //Makes the person touching, the owner.
           int(); //When touched, get the random channel.
       }
   }
   attach(key av)
   {
       if(av)
       {
           removeable = TRUE; //If actually on an av, allow clothing to request permissions for detach.
       }
       else
       {
           removeable = FALSE; //Oposite if no av :)
       }
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_ATTACH)
       {
           llWhisper(0, llKey2Name(user) + " rips " + llKey2Name(owner) +"'s clothing right off!");
           llDetachFromAvatar( ); //Detach from av of course.
       }
   }
   listen(integer chan, string name, key id, string msg)
   {
       if(llToLower(msg)=="tug") //We use llToLower(msg) so that it's not case sensitive. :)
       {
           llWhisper(0, llKey2Name(user) + " tugs on " + llKey2Name(owner) +"'s clothing.");
       }
       if(llToLower(msg)=="flick")
       {
           llWhisper(0, llKey2Name(user) + " flicks " + llKey2Name(owner) +"'s clothing.");
       }
       if(llToLower(msg)=="look")
       {
           llWhisper(0, llKey2Name(user) + " looks at " + llKey2Name(owner) +"'s clothing.");
       }
       if(llToLower(msg)=="tear")
       {
           if(removeable)
           {
               llRequestPermissions(owner, PERMISSION_ATTACH);
           }
           else
           {
               llWhisper(0, "Can not remove clothing that is not worn.");
           }
       }
       touchable = TRUE;
       llListenRemove(listenNum); //Stop listening to prevent lag :)
   }
   timer()
   {
       touchable = TRUE;
       llSetTimerEvent(0.0); //Stops the timer
       llWhisper(0, "Menu time out...");
   }

} </lsl>


Stop all animations: basic

<lsl> //Stop all animations by Mr Lovenkraft //Useful learning codes from the large inventory of Mr Lovenkraft ;) list anims; key av; default {

   touch_start(integer total_number)
   {
       llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);//Dur, requests permissions.
       av = llDetectedKey(0); //Person to stop animations for.
   }
   run_time_permissions(integer perm)//Runs if we get permissions.
   {
       anims = []; //Clears the list of any past animations.
       anims = llGetAnimationList(av); //Gets the current users animations playing.
       integer index = llGetListLength(anims); //The amount of animations for stopping.
       integer i; //Starting place for our loop.
       for(i=0; i<index; i++)//Runs through for each animation in the list.
       {
           llStopAnimation(llList2String(anims, i)); //Stops the animation in the list at point i.
       }
   }

} </lsl>


Cycle pose ball: touch cycle

<lsl> //Multi poseball/pole by Mr lovenkraft //Open sourced ;) list anims; key av; integer pos; integer listSize; integer sat_on; int() {

   if(sat_on)
   {
       llRequestPermissions(av, PERMISSION_TRIGGER_ANIMATION);//Request permissions to get the next animation
   }
   else
   {
       llWhisper(0, "No one sitting on this object.");
   }

} default {

   state_entry()
   {
       pos = 0;
       anims = [];
       llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);//Sets the sit pose for the target
   }
   changed(integer change)//something has changed with this object
   {
       if(change & CHANGED_INVENTORY)//if only the inventory is changed of course ;)
       {
           pos = 0;//start the post over
           anims = []; //clear the list
           integer i;
           integer totA = llGetInventoryNumber(INVENTORY_ANIMATION);//gets the total animations
           for(i=0; i<totA; i++)
           {
               anims += [llGetInventoryName(INVENTORY_ANIMATION, i)];//adds each animation name to list
           }
           llOwnerSay("Animaions inside: " + llList2CSV(anims));//Tell the owner how many animations inside
       }
       if(change & CHANGED_LINK)
       {
           av = llAvatarOnSitTarget();
           if(av) //if there is really someone sitting on it
           {
               sat_on = TRUE; //If someone is sitting make it true
               int();//Start animation
           }
           else
           {
               sat_on = FALSE;
           }
       }
   }
   run_time_permissions(integer perm)//got permissions from user
   {
       if(perm & PERMISSION_TRIGGER_ANIMATION)
       {
           llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Stop last animation
           pos += 1;//go to next in list
           if(pos >= listSize)//if at the end of the list
           {
               pos = 0;
           }
           llStopAnimation("sit");
           llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, pos));//Start the next animation
       }
   }
   touch_start(integer total_number)
   {
       listSize = llGetListLength(anims);
       int(); //start the new animation
   }

} </lsl>


Basic notecard access list

This is an example notecard, goes in the room prim of lockable object

Mr Lovenkraft
Fname2 Lastname2
Fname3 Lastname3

This also goes in your object you wish to lock/unlock etc <lsl> list allowed = []; string allow_list = "Allow"; key owner; key note_card; integer line; integer list_pos; integer i; integer locked; int(integer on) {

   if(on==0)
   {
       llWhisper(0, "Locked, only allowed may use.");
       locked = TRUE;
   }
   if(on==1)
   {
       llWhisper(0, "Unlocked, anyone may use.");
       locked = FALSE;
   }
   if(on==3)
   {
       allowed = [];
       note_card = llGetNotecardLine(allow_list, line);
   }

} default {

   on_rez(integer r)
   {
       list_pos = 0;
       line = 0;
       int(3);
       owner = llGetOwner();
   }
   state_entry()
   {
       int(3);
       list_pos = 0;
       line = 0;
       llListen(0, "", owner, "");
       note_card = llGetNotecardLine(allow_list, line);
       llOwnerSay((string)llGetFreeMemory());
   }
   changed(integer change)
   {
       if(change & CHANGED_INVENTORY)
       {
           int(3);
       }
   }
   listen(integer chan, string name, key id, string msg)
   {
       if(llToLower(msg)=="lock")
       {
           int(0);
       }
       if(llToLower(msg)=="unlock")
       {
           int(1);
       }
   }
   touch_start(integer t)
   {
       if(locked)
       {
           string Ntest = llDetectedName(0);
           integer index = llListFindList(allowed, [Ntest]);
           if(index != -1)
           {
               llWhisper(0,"Opened for: "+llList2String(allowed, index)+".");
           }
           else
           {
               llWhisper(0, "You are not on the access list.");
           }
       }
       else
       {
           llWhisper(0, "Opened.");
       }
   }
   dataserver(key Qid, string data)
   {
       if (Qid == note_card)
       {
           if (data != EOF)
           {
               allowed += data;
               line += 1;
               note_card = llGetNotecardLine(allow_list, line);
           }
           else
           {
               line = 0;
               llOwnerSay("Done.");
               llOwnerSay(llList2CSV(allowed));
               llOwnerSay("Memory left: "+(string)llGetFreeMemory());
           }
       }
   }

}

</lsl>