Jump to content

Gayngel

Resident
  • Posts

    184
  • Joined

  • Last visited

Posts posted by Gayngel

  1. I am a programmer with 3 years experience in scripting with LSL. I enjoy building custom systems ground-up and will provide low lag reasonably priced solutions to my customer's specifications.

    I can do simple, minor fixes to existing scripts, tip jars, club systems, dialog menus, detections, HUDs and vendors to more advanced systems such as pose systems, vehicles, pathfinding and weapons.

    Script adaptations and library resources if used will be fully cited.

    I work closely with my clients providing working demos of their products with full perm models (with user license) on completion and delivery. Note: Models will be mockups to present the functioning script, clients must finalise prim designs and builds themselves.

    I charge only for what is in the script on completion and not an hourly rate.

     

    Price for personal use only scripts is a surcharge on events used + L$1 per line/function with 50% retainer. Typically a script will cost L$500 - L$900. Every 5th project free!

    Price for commmercial scripts to be sold in creations is the same fee + L$1000 for a reseller license + 10% per sale. 

     

    Working hours: 9AM SLT- 5PM SLT. Delivery may be a few hours to days depending on script complexity and work load.

    IM me inworld for a price list and consultation. If I'm offline IMs will go to email and will get back to you ASAP. (Forwarning: Adult rated profile)

     

    Copy/paste this link to the nearby chat window in your viewer, press enter then click on my name in chat to open my profile: 

    secondlife:///app/agent/a9ba2797-81af-429d-9833-51127ad5593c/about

  2. You don't necessarily need 2 lists you can just loop thorugh inventory during a changed event and if the item dropped has not been added to the list you will know what was added and can append it to the list for the next drop.

     

     

     

    list invlist;integer i;default{    state_entry()    {        llAllowInventoryDrop(TRUE);    }    touch_start(integer total_number)    {            }        changed(integer change)    {      if(change & CHANGED_INVENTORY)       {           integer llength = llGetListLength(invlist);                       for(i = 0; i < llength; ++i)           {                string name = llGetInventoryName(INVENTORY_ALL, i);                                    if(!~llListFindList(invlist, [name]))                  {                        llSay("Item named '" + name + "' was dropped in your mailbox.");                        invlist+=name;                  }           }       }    }}

     

     

     

  3. I am creating a visitor log that posts names of avatars to an external server script by http however it  fails after a region restart because the url is released and the url has to be harcoded into the server.

     

    How can I keep a persistent url to keep communicating with inworld objects?

     

    I see a url can be requested again with CHANGED_REGION_START but doesn't that create a unique url for every request?

     

  4. The math is correct but it calculates the percentage paid as commission to someone else, what you probably want is the remainder that you keep for yourself.

    If you substitute a number as the amount, say 40% of 50 which is 20 paid as commission.

     

    newamount = 50 * (40/100)

    newamount = 50* 0.4

    newamount = 20

     

    If you want the remainder:

     

     newamount = amount - (llRound(amount * (float)(commissionpercent/100)));

     

  5. string foldername = "New Avi"; // Name of the folder that will be given to the avatar containing the items. Will be placed in their RLV folder. 

    list folderitems = ["skin", "shape", "hair", "alpha", "shoes", "pants", "shirt","Mesh Item"]; // List of all items that will be given to and force worn by the avatar that bumps into the prim. Items must be in the prim's invententory to give them.

     

     

    list victim_list;

    key av;

    integer RLVchan = -1812221819;

    integer rlv_handle;

    integer version_handle;

    integer version_chan = 49;

    integer GiveItemHandle;

    integer AcceptItemHandle;

     

     

     

    checkrelay(string type,key victim,string command) //send command to relay

    {

     

     

    llRegionSayTo(victim, RLVchan, type+","+(string)victim+","+command);

     

     

    }

     

    relay(string type,key victim,string command) //send command to relay

    {

     

     

    llRegionSayTo(victim, RLVchan, type+","+(string)victim+","+command);

     

    }

     

     

     

    AttachItem()

    {

    relay("GiveItems",av,"@attach:~"+foldername+"/~"+foldername+"=force");

    llListenRemove(AcceptItemHandle);

    llSetTimerEvent(0.0);

    llSetTimerEvent(2.0);

    }

     

    default

    {

     

     

     

    collision_start(integer num)

     

    {

    llListenRemove(rlv_handle);

    llListenRemove(version_handle);

     

    rlv_handle = llListen(RLVchan, "", "", "");

    version_handle = llListen(version_chan, "", "", "");

     

    av = llDetectedKey(0);

    checkrelay("check", av, "@versionnew="+(string)version_chan);

    llSetTimerEvent(0.0);

    llSetTimerEvent(5.0);

     

    }

     

     

     

    listen(integer chan, string name, key id, string msg)

    {

     

     

    if (chan == RLVchan)

    {

     

    list rlvmsg = llParseStringKeepNulls(msg,[","],[]);

     

     

     

    if (llGetListLength(rlvmsg) > 3)

    {

     

    if (llList2Key(rlvmsg,1) == llGetKey())

    {

    string resp = llList2String(rlvmsg,3);

    string cmd = llList2String(rlvmsg,2);

    if (resp == "ok")

    {

     

     

     

    if(llGetSubString(cmd,0,10) == "@versionnew")

    {

    GiveItemHandle = llListen(222,"",av,"");

     

    relay("CheckFolders",av,"@getinv:~"+foldername+"=222");

     

    llSetTimerEvent(0.0);

    llSetTimerEvent(300.0);

     

    }

     

     

     

     

    }

     

    }

    }

    }

     

    else if (chan == 222)

    {

     

    if(msg == "")

    {

    AcceptItemHandle = llListen(444,"",av,"");

    //cmd = cmdname + "," + (string)victimkey + "," +"@notify:444;inv_offer=add";

    // llSay(relaychannel,cmd);

     

    relay("GiveItems",av,"@notify:444;inv_offer=add");

    llGiveInventoryList(av, "#RLV/~"+foldername+"/~"+foldername, folderitems);

     

     

     

     

     

     

    }

     

     

    else

    {

    AttachItem();

    }

     

     

    llListenRemove(GiveItemHandle);

     

    }

     

    else if(chan == 444)

    {

     

     

     

    list response = llParseString2List(msg, [ " " ], []);

     

    string behaviour = llList2String(response, 0);

    if ("/accepted_in_rlv" == behaviour)

    {

    AttachItem();

    }

    else if ("/accepted_in_inv" == behaviour)

    {

    AttachItem();

    }

    else if ("/declined" == behaviour)

    {

    llSay(0,llKey2Name(av) + " declined the attachment.");

    llListenRemove(AcceptItemHandle);

    llSetTimerEvent(0.0);

    llSetTimerEvent(2.0);

    }

     

     

     

     

     

     

     

    }

     

     

     

     

     

    }

     

     

     

    timer()

     

    {

    llSetTimerEvent(0.0);

    llListenRemove(rlv_handle);

    llListenRemove(version_handle);

     

    }

     

    }

  6. I need someone fluent in English and French to do a few translations for me for a gay BDSM skybox. You will be translating messages for my greeters,sign boards &  tip jars. Pay is L$200. 

     

    IM me inworld.

     

    Copy/paste this link to the nearby chat window in your viewer, press enter then click on my name in chat to open my profile: 

    secondlife:///app/agent/a9ba2797-81af-429d-9833-51127ad5593c/about

  7. You can't directly determine who clicked a webpage link on a MOAP prim but there are workarounds:

     

    1. If the page is static and can't be scrolled, stick another media prim over where the link should be and have it display just the link and scripted to detect touches, passing the key to other functions and scripts.

     

    2.If the page is scrollable, on the first instance of using a media prim you have to click the prim twice. First to activate interactivity, second to allow navigation. You can can compare who touched the prim each click and if the same UUID clicks twice then they are probably navigating the webpage. You can then pass their uuid to other functions and even to the wep page with the HTML functions.

     

    3. If the link is navigable. I.e. it causes the page to go to another page, you can get the key of who last touched the prim in a touch event and pass it to functions when the the page changes. You can determine page navigation perhaps on a timer with llGetPrimativeParams and get  and compare the PRIM_MEDIA_CURRENT_URL ] to the to a web page you've hardcoded in the script as the page the link goes to.  

     

     

  8. I am a programmer with 3 years experience in scripting with LSL. I enjoy building custom systems ground-up and will provide low lag reasonably priced solutions to my customer's specifications.

    I can do simple, minor fixes to existing scripts, tip jars, club systems, dialog menus, detections, HUDs and vendors to more advanced systems such as pose systems, vehicles, pathfinding and weapons.

    Script adaptations and library resources if used will be fully cited.

    I work closely with my clients providing working demos of their products with full perm models (with user license) on completion and delivery. Note: Models will be mockups to present the functioning script, clients must finalise prim designs and builds themselves.

    I charge only for what is in the script on completion and not an hourly rate.

     

    Price for personal use only scripts is a surcharge on events used + L$1 per line/function with 50% retainer. Typically a script will cost L$500 - L$900. Every 5th project free!

    Price for commmercial scripts to be sold in creations is the same fee + L$1000 for a reseller license + 10% per sale. 

     

    Working hours: 9AM SLT- 5PM SLT. Delivery may be a few hours to days depending on script complexity and work load.

    IM me inworld for a price list and consultation. If I'm offline IMs will go to email and will get back to you ASAP. (Forwarning: Adult rated profile)

     

    Copy/paste this link to the nearby chat window in your viewer, press enter then click on my name in chat to open my profile: 

    secondlife:///app/agent/a9ba2797-81af-429d-9833-51127ad5593c/about

     

  9. I am an experienced programmer with 3 years experience in scripting with LSL. I enjoy building custom systems ground-up and will provide low lag reasonably priced solutions to my cutomer's specifications.

    I can do simple, minor fixes to existing scripts, tip jars, club systems, dialog menus, detections, HUDs and vendors to more advanced systems such as pose systems, vehicles, pathfinding and weapons.

    Script adaptations and library resources if used will be fully cited.

    I work closely with my clients providing working demos of their products with full perm models (with user license) on completion and delivery.

    I charge only for what is in the script on completion and not an hourly rate. Price is surcharge on events used + L$1 per line/function with 50% retainer. Typically a script will cost L$500 - L$900. Every 5th project free!

    Working hours: 9AM SLT- 5PM SLT. Delivery may be a few hours to days depending on script complexity and work load.

    IM me inworld for a price list and consultation. If I'm offline IMs will go to email and will get back to you ASAP. (Forwarning: Adult rated profile)

     

  10. I'm trying to create an RLV zone that when in range of the sensor restricts teleportation to landmarks but can't manage to make it work.:matte-motes-confused: 

     

    integer chanRLV = -1812221819;
    default
    {
        state_entry()
        {
     llSensor("", NULL_KEY, AGENT, 20.0, PI); 
        }
        sensor( integer detected )
        {
         while(detected--)
            
           { llSay(chanRLV,"NoTP," + llDetectedName(detected) + ",@tplm=n");
        }
        }
    }

     

  11.  

     

    I need a photographer availble on Saturday 21st June to take a set of 20 photographs for 2 events at the Second Pride festival. The first event is the float parade between 10 - 11:30 AM Slt, the photogrpher will ride on our float with us. The second is a 2 hour dance event from 4-6PM SLT. Payment is L$3000 plus upload fees. 

     

    Contact me inworld: secondlife:///app/agent/a9ba2797-81af-429d-9833-51127ad5593c/about  

    Gayngel

  12. Yes I want the object to scan for active relays and force sit a target on a rezzed poseball with catch and release buttons in the object dialog menu.  Capture should prevent standing. Choice of poseballs should be by name, UUID or colour.

     

    The above script actually isn't sufficient enough because once the avatar is caught they can't be released or stand unless the animation sequence is stopped.

     

  13. // ~capture Script V1.01
    // drop into a ball
    //
    // constants
    integer DEBUG           = FALSE;
     
    float TIMER_TIMEOUT     = 60.0;
    float TIMER_LOCKED      = 900.0;
    integer RANGE_CAPTURE   = 20;
     
    integer RELAY_CHANNEL   = -1812221819;
     
    // texts
    string MSG_NO_SENSOR   = "No avatars in sensor range.";
    string MSG_MENU_IN_USE = " is using the menu. Please try again in a while.";
    string MSG_CHOOSE_AV   = "Choose avatar:";
    string MSG_TIMEOUT     = "Dialog timeout. Please touch again to retry.";
     
    // internal use
    integer dialog_handle;
    integer dialog_channel;
    key avatar_victim = NULL_KEY;
    integer channel;
     
    list sensor_keys;
    list sensor_names;
    key avatar_menu;
     
    // write a log message in DEBUG mode
    log(string message)
    {
    	if (DEBUG) llOwnerSay("MENU: " + message);
    }
     
    // out a message to the user
    out(string message)
    {
    	llSay(0, message);
    }
     
    capture(key avatar)
    {
    	relay(avatar, "@sit:" + (string)llGetKey() + "=force");
    }
     
    lock(key avatar)
    {
    	relay(avatar, "@unsit=n");
    }
     
    release(key avatar)
    {
    	relay(avatar, "@unsit=y");
    	relay(avatar, "!release");
    }
     
    // write a message to the RLV Relay
    relay(key avatar, string message)
    {
    	if (avatar != NULL_KEY)
    	{
    		llSay(RELAY_CHANNEL, llGetObjectName() + "," + (string) avatar + "," + message);
    		log("RLV: " + llGetObjectName() + "," + (string) avatar + "," + message);
    	}
    }
     
    init()
    {
    	dialog_channel= -(integer)(llFrand(100000 - 10000) + 10000);
    	dialog_handle = llListen(dialog_channel, "", NULL_KEY, "");
    	llListenControl(dialog_handle, FALSE);
    	avatar_menu = NULL_KEY;
    }
     
    // default state
    default
    {
    	// on state entry: show dialog
    	state_entry()
    	{
    		init();
    	}
     
    	on_rez(integer start_param)
    	{
    		channel = start_param;
    		init();
    	}
     
    	// av touched me
    	touch_start(integer total_number)
    	{
    		key id = llDetectedKey(0);
     
    		// check if menu is in use
    		if (avatar_menu != NULL_KEY && id != avatar_menu)
    		{
    			out(llKey2Name(avatar_menu) + MSG_MENU_IN_USE);
    			return;
    		}
     
    		avatar_menu = id;
    		llSensor("", NULL_KEY, AGENT, RANGE_CAPTURE, PI);
    	}
     
    	// no av in sensor range
    	no_sensor()
    	{
    		out(MSG_NO_SENSOR);
    	}
     
    	// some av in sensor range
    	sensor(integer total_number)
    	{
    		sensor_keys = [];
    		sensor_names = [];
    		integer i;
    		for(i=0; i < total_number; i++)
    		{
    			key id = llDetectedKey(i);
    			string name = llKey2Name(id);
    			if (llStringLength(name) > 24)
    			{
    				name = llGetSubString(name, 0, 23);
    			}
    			sensor_keys += [id];
    			sensor_names += [name];
    			log("found: " + name);
    		}
     
    		// show dialog if list contains names
    		if (llGetListLength(sensor_names) > 0)
    		{
    			llListenControl(dialog_handle, TRUE);
    			llSetTimerEvent(TIMER_TIMEOUT);
    			llDialog(avatar_menu, MSG_CHOOSE_AV, sensor_names, dialog_channel);
    		}
    	}
     
    	// menu selected
    	listen(integer channel, string name, key id, string message)
    	{
    		llListenControl(dialog_handle, FALSE);
    		integer index = llListFindList(sensor_names, [message]);
    		if (index != -1)
    		{
    			key selected = llList2Key(sensor_keys, index);
    			log ("capture " + llKey2Name(selected));
    			capture(selected);
    		}
    		avatar_menu = NULL_KEY;
    	}
     
    	// dialog timeout
    	timer()
    	{
    		if (avatar_menu != NULL_KEY)
    		{
    			out(MSG_TIMEOUT);
    			avatar_menu = NULL_KEY;
    			llListenControl(dialog_handle, FALSE);
    		}
     
    		llSetTimerEvent(0);
    	}
     
    	changed(integer change) {
    		if(change & CHANGED_LINK)
    		{
    			key id = llAvatarOnSitTarget();
    			if (id != NULL_KEY)
    			{
    				avatar_victim = id;
    				lock(avatar_victim);
    				log ("sitting: " + llKey2Name(avatar_victim));
    				state locked;
    			}
    		}
    	}
    }
     
    state locked
    {
    	state_entry()
    	{
    		llListen(channel, "", NULL_KEY, "DIE");
    		llSetTimerEvent(TIMER_LOCKED);
    	}
     
    	listen(integer channel, string name, key id, string message)
    	{
    		if (message == "DIE")
    		{
    			log ("DIE");
    			release(avatar_victim);
    		}
    	}
     
    	changed(integer change) {
    		if(change & CHANGED_LINK)
    		{
    			key id = llAvatarOnSitTarget();
    			if (id == NULL_KEY)
    			{
    				log ("unsitting " + llKey2Name(avatar_victim));
    				release(avatar_victim);
    				avatar_victim = id;
    				state default;
    			}
    		}
    	}
     
    	timer()
    	{
    		release(avatar_victim);
    	}
    }

     

     

    The MLPV RLV Capture add-on script above requires dropping into the poseballs. I would like to instead amend the script OR have a new capture by sensor script drafted so there is a capture button in the RLV menu of the object. The script needs the touch event omitted, link message added and some re-arranging. Tried converting the touch_event and the if (llGetListLength(sensor_names) > 0) to link_message but neither atempt worked. Please could assist?

    Link message needed in script:

     

     link_message(integer sender, integer num, string str, key id) {
     if (num == 1820 && str == "CATCH")
            {
                llDialog(avatar_menu, MSG_CHOOSE_AV, sensor_names, dialog_channel);
                llListenControl(dialog_handle, TRUE);
                llSetTimerEvent(TIMER_TIMEOUT);
            }
    }

     

    LINKMsg in .MENUITEMS.RLV:

    MENU Capture | ALL
    LINKMSG CATCH | 1,-4,1820,CATCH

     

     

     

  14. This script doesn't "force open"the notecard on acceptance. With the setting to open notecards on acceptance as enabled, sometimes during an inventory exchange of multiple items a notecard doesn't automatically open. This script ensures that, it will open.  I just don't want it to offer the notecard as a second offer on touch. I have an avatar kit vendor that gives about 30 free items and would like the styling notecard that is included to open automatically.

     

     

  15. I am trying to create a script that gives a folder of items that contains a notecard. I want the notecard to pop up on screen on accepting the folder. The script I have asks two inventory offers, the folder of items and the notecard. I would  like the script to only offer 1 exchange; a  folder of items that  includes a notecard and the notecard must pop up on aceptance. 

     

    string notecard="Notecard Name";
    default
    {
        state_entry()
        {
           llOwnerSay("Touch me to unpack...");
        }
        
        on_rez(integer start_param)
        {
          llResetScript();   
        }
    
        touch_start(integer total_number)
        {
          if (llDetectedKey(0)) 
          {
            integer aaaa = 0;
            list Files = [];
            do
            {
              if (llGetInventoryType(llGetInventoryName(INVENTORY_ALL,aaaa))!=INVENTORY_SCRIPT 
               && llGetInventoryType(llGetInventoryName(INVENTORY_ALL,aaaa))!=INVENTORY_ANIMATION)  
              Files += llGetInventoryName(INVENTORY_ALL,aaaa);
             
            }
            while(aaaa++<(llGetInventoryNumber(INVENTORY_ALL)-1));
            llGiveInventoryList(llDetectedKey(0),llGetObjectName(),Files); 
          }
          llGiveInventory(llDetectedKey(0),notecard);
        }
    }

     

  16. The region I manage does not have a telhub but does have a landing point. Some of the merchants on the land have requested direct teleport to thier shops and I have considered setting parcel landings but some of the shops are stacked on top of each other so wouldn't be practical. The owner would like to keep the landing but still allow direct teleporting from an Slurl link to the shops, club, etc. 

×
×
  • Create New...