Jump to content

Tattooshop

Resident
  • Posts

    365
  • Joined

  • Last visited

Posts posted by Tattooshop

  1. 32 minutes ago, Rolig Loon said:

    Not really.  If your parcel were in an Experience, so you could use llTeleportAgent, you could do something like that, but it would be convoluted and would still involve being sure that they were in the Experience and had therefore implicitly given PERMISSION_TELEPORT.  llEjectFromLand does not give you the option of selecting where it sends someone.  It just tosses them out of the parcel.  Using any other teleport method would involve asking for permissions, which a trespasser is unlikely to agree to.

    I assumed so, thanks a lot! :)

     

  2. 3 hours ago, Kyrah Abattoir said:

    That's nice of you but you aren't teaching people anything by giving them ready to use scripts :/

    Thanks for the criticism, I will consider! by the way, I just noticed that I made a script for only one link, so there’s still something to ponder! :)

     

     

  3. This is if your flickr button is not a separate mesh. Use your own buttons face number!

    string link1 = "https://www.flickr.com/";
    string link1_name = "Flickr";
    
    default
    {
        touch_start(integer total_number)
        {
            if(llDetectedKey(0) != llGetOwner()) return;
    
            integer face = llDetectedTouchFace(0);
            
            if(face == 0) // Your buttons face number
            {
                llOwnerSay("Follow me on ["+link1+" "+link1_name+"]!");
            }     
        }
    }

    And this is if your flickr button is a separate mesh. Simply name your button "flickr"

    string link1 = "https://www.flickr.com/";
    string link1_name = "Flickr";
    
    default
    {
        touch_start(integer total_number)
        {
            if(llDetectedKey(0) != llGetOwner()) return;
    
            string button = llGetLinkName(llDetectedLinkNumber(0));
            
            if (button == "flickr") // Your buttons name
            {
                llOwnerSay("Follow me on ["+link1+" "+link1_name+"]!");
            }     
        }
    }

    Place script to the root :)

  4. Hello! Do I understand correctly that in order to make / use a teleport on collision script I need to either be premium ( experiences ) or RLV must be enabled? Are there other ways? :)

     

  5. Tutorials help a lot, of course, but your own experience matter too, so start to exploring SL, visit places, meet people, this may take some time, cause people here do what they want to do mostly. IMVU is a bit different, I guess. :)

    Good luck!

    Edit:

    Ah yes, p.s. ALWAYS TRY DEMOS before buy! lol :D

     

    • Haha 2
  6. 1 hour ago, KT Kingsley said:

    Check the object's name at the same time you check it's not a script:

    
    if (name != "except.object" && llGetInventoryType(name) != INVENTORY_SCRIPT)

    One thing, though: if you're giving several objects at once I'd be inclined to use llGiveInventoryList, which puts all the items together in a new folder in the target's inventory and only triggers a single accept/decline dialog.

    I used another unpacker with list and added your line - works perfectly! Thank you! :)

    string EXCEPT_ITEM_NAME = "except.object"; // Item you want to exclude
    
    default
    {
        touch_start(integer total_number)
        {
            integer x;
            for(x = 0; x < total_number; x++)
            {
                if(llDetectedKey(x) == llGetOwner())
                {
                    string InvenName;
                    integer InvenNumber = llGetInventoryNumber(INVENTORY_ALL);
                    list InvenList = [];
                    integer y;
                    for(y = 0; y < InvenNumber; y++)
                    {
                        InvenName = llGetInventoryName(INVENTORY_ALL, y);
                        if(InvenName != EXCEPT_ITEM_NAME && llGetInventoryType(InvenName) != INVENTORY_SCRIPT) 
                        InvenList += [InvenName];
                    }          
                    llGiveInventoryList(llGetOwner(), llGetObjectName(), InvenList);
                }
            }
        }
    }

     

    • Like 1
  7. How to make this unpacker give everything except certain item, named "except.object" for example? :D

    default
    {
        state_entry()
        {
            llSetMemoryLimit(llGetUsedMemory() + 1024);
        }
        touch_start(integer n)
        {
            if (llDetectedKey(0) == llGetOwner()) // Detect owner
            {
                for (n--; n >= 0; n--)
                {
                    integer j = llGetInventoryNumber(INVENTORY_ALL);
                    for (j--; j >= 0; j--)
                    {
                        string name = llGetInventoryName(INVENTORY_ALL, j);
                        if (llGetInventoryType(name) != INVENTORY_SCRIPT)
                        {
                            llGiveInventory(llDetectedKey(n), name);
                        }
                    }
                }
            }
        }
    }

     

  8. Hello! Where is the error in this script? It does not show all the textures in the menu. :)

    integer SIDE = ALL_SIDES; 
    
    list effects = [LOOP]; // LOOP for GIF89 movies
    
    //Movement parameters (choose one):
    
    //ROTATE - Rotates the texture
    //SCALE - Scales the texture
    //Set movement to 0 to slide animation in the X direction, without any special movement.
    
    integer movement = 0;
    integer face = ALL_SIDES; //Number representing the side to activate the animation on.
    integer sideX = 1; //Represents how many horizontal images (frames) are contained in your texture.
    integer sideY = 1; //Same as sideX, except represents vertical images (frames).
    float start = 0.0; //Frame to start animation on. (0 to start at the first frame of the texture)
    float length = 0.0; //Number of frames to animate, set to 0 to animate all frames.
    float speed = 10.0; //Frames per second to play.
    
    // menu stuff
    
    integer listen_id; // int of the current listener
    integer menuChannel; // int of the channel number
    
    integer N_DIALOG_CHOICES;
    integer MAX_DIALOG_CHOICES_PER_PG = 8; // if not offering back button, increase this to 9
    
    string PREV_PG_DIALOG_PREFIX = "< Page ";
    string NEXT_PG_DIALOG_PREFIX = "> Page ";
    string DIALOG_DONE_BTN = "Done";
    string DIALOG_BACK_BTN = "<< Back";
    
    integer pageNum;
    list DIALOG_CHOICES;
    
    giveDialog(key ID, integer pageNum)
    {
        list buttons;
        integer firstChoice;
        integer lastChoice;
        integer prevPage;
        integer nextPage;
        string OnePage;
        CancelListen();
        menuChannel = llCeil(llFrand(1000000) + 11000000);
        listen_id = llListen(menuChannel, "", "", "");
        llSetTimerEvent(60);
        N_DIALOG_CHOICES = llGetListLength(DIALOG_CHOICES);
        if (N_DIALOG_CHOICES <= 10)
        {
            buttons = DIALOG_CHOICES;
            OnePage = "Yes";
        }
        else
        {
            integer nPages = (N_DIALOG_CHOICES + MAX_DIALOG_CHOICES_PER_PG - 1) / MAX_DIALOG_CHOICES_PER_PG;
            if (pageNum < 1 || pageNum > nPages)
            {
                pageNum = 1;
            }
            firstChoice = (pageNum - 1) * MAX_DIALOG_CHOICES_PER_PG;
            lastChoice = firstChoice + MAX_DIALOG_CHOICES_PER_PG - 1;
            if (lastChoice >= N_DIALOG_CHOICES)
            {
                lastChoice = N_DIALOG_CHOICES;
            }
            if (pageNum <= 1)
            {
                prevPage = nPages;
                nextPage = 2;
            }
            else if (pageNum >= nPages)
            {
                prevPage = nPages - 1;
                nextPage = 1;
            }
            else
            {
                prevPage = pageNum - 1;
                nextPage = pageNum + 1;
            }
            buttons = llList2List(DIALOG_CHOICES, firstChoice, lastChoice);
        }
    
        // FYI, this puts the navigation button row first, so it is always at the bottom of the dialog
    
        list buttons01 = llList2List(buttons, 0, 2);
        list buttons02 = llList2List(buttons, 3, 5);
        list buttons03 = llList2List(buttons, 6, 8);
        list buttons04;
        if (OnePage == "Yes")
        {
            buttons04 = llList2List(buttons, 9, 11);
        }
        buttons = buttons04 + buttons03 + buttons02 + buttons01;
        if (OnePage == "Yes")
        {
            buttons = [DIALOG_DONE_BTN, DIALOG_BACK_BTN] + buttons;
            //omit DIALOG_BACK_BTN in line above  if not offering
        }
        else
        {
            buttons = [
                PREV_PG_DIALOG_PREFIX + (string) prevPage,
                DIALOG_BACK_BTN, NEXT_PG_DIALOG_PREFIX + (string) nextPage, DIALOG_DONE_BTN
            ] + buttons;
            //omit DIALOG_BACK_BTN in line above if not offering
        }
        llDialog(ID, "Page " + (string) pageNum + "\nChoose one:", buttons, menuChannel);
    }
    
    CancelListen()
    {
        llListenRemove(listen_id);
    }
    
    initAnim() //Call this when you want to change something in the texture animation.
    {
        integer effectBits;
        integer i;
        for (i = 0; i < llGetListLength(effects); i++)
        {
            effectBits = (effectBits | llList2Integer(effects, i));
        }
        integer params = (effectBits | movement);
        llSetTextureAnim(ANIM_ON | params, face, sideX, sideY, start, length, speed);
    }
    fetch(string texture)
    {
        integer i;
        integer j = llGetInventoryNumber(INVENTORY_TEXTURE);
        for (i = 0; i < j; i++)
        {
            string myTexture = llGetInventoryName(INVENTORY_TEXTURE, i);
            list data = llParseString2List(myTexture, [";"], []);
            string name = llList2String(data, 0);
            if (name == texture)
            {
                string X = llList2String(data, 1);
                string Y = llList2String(data, 2);
                string Z = llList2String(data, 3);
                sideX = (integer) X;
                sideY = (integer) Y;
                speed = (float) Z;
                //llOwnerSay("Name=" + myTexture + " X=" + X + " Y=" + Y + " Z = " + (string) Z);
                if (speed)
                {
                    llSetTexture(myTexture, SIDE);
                    initAnim();
                }
            }
        }
    }
    
    // Make a list of all bare names for the dialog
    list fetchAll()
    {
        list choices = [];
        integer i;
        integer j = llGetInventoryNumber(INVENTORY_TEXTURE);
        for (i = 0; i < j; i++)
        {
            string texture = llGetInventoryName(INVENTORY_TEXTURE, i);
            list data = llParseString2List(texture, [";"], []);
            choices += llList2String(data, 0);
        }
        return choices;
    }
    
    default
    {
    
        state_entry()
        {
    
        }
    
        touch_start(integer who)
        {
            {
                pageNum = 1;
                DIALOG_CHOICES = fetchAll();
                giveDialog(llDetectedKey(0),
                    pageNum);
            }
        }
    
        listen(integer channel, string name, key id, string message)
        {
            integer where;
            if (message == DIALOG_DONE_BTN)
            {
                CancelListen();
                return;
            }
            else if (message == DIALOG_BACK_BTN)
            {
                pageNum = 1;
                DIALOG_CHOICES = fetchAll();
                giveDialog(llDetectedKey(0),
                    pageNum);
            }
            else if (llSubStringIndex(message, PREV_PG_DIALOG_PREFIX) == 0)
            {
                pageNum = (integer) llGetSubString(message, llStringLength(PREV_PG_DIALOG_PREFIX), -1);
                giveDialog(llDetectedKey(0),
                    pageNum);
            }
            else if (llSubStringIndex(message, NEXT_PG_DIALOG_PREFIX) == 0)
            {
                pageNum = (integer) llGetSubString(message, llStringLength(NEXT_PG_DIALOG_PREFIX), -1);
                giveDialog(llDetectedKey(0),
                    pageNum);
            }
            else
            { //this is the section where you do stuff
                where = llListFindList(fetchAll(), [message]);
                if (where >= 0)
                {
                    fetch(message);
                    giveDialog(llDetectedKey(0),
                        pageNum);
                }
                // add more buttons here
            }
        }
    }

     

  9. 18 hours ago, Rolig Loon said:

    Start by reviewing the basics in the sticky thread on door scripting at the top of this forum.

    Thank you! very good topic! So I read it, but stuck on PRIM_ROT_LOCAL. I just can’t see what this vector is (< 1,0,0 > etc...) and how to express through it a rotation of 90 degrees along the z axis? It’s clear with PRIM_POS_LOCAL, it is expressed in meters... :D

     

  10. Hello! I made such a toggle and I need to simplify or maybe get rid of a toggle at all, because the only change here is a " - " symbol. I mean in "mathematical way".

     

    Is this possible and how? :)

        touch_start(integer total_number)
        {
                llPlaySound(DOOR_SOUND, VOL);
                toggle = !toggle;
    
                if (toggle)
                {
                    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POS_LOCAL, llList2Vector(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_POS_LOCAL]), 0) + < 1.0, 0.0, 0.0 >]);
                }
    
                else
                {
                    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POS_LOCAL, llList2Vector(llGetLinkPrimitiveParams(LINK_THIS, [PRIM_POS_LOCAL]), 0) + < -1.0, 0.0, 0.0 >]);
                }
        }

     

  11. On 5/14/2020 at 11:59 PM, Beth Macbain said:

    LL is a very progressive company

    Too progressive IMO...

    I imagine women boxers fighting topless, if that goes on... :D

    Why then you wear clothes at all? Go naked! I dont mind. lol :D

     

    • Haha 1
  12. 1 hour ago, Wulfie Reanimator said:

    It's technically possible but incredibly fragile with LSL alone. If you want a viable solution that doesn't break the next time the grid goes down, you're going to need an external server.

    Thanks! So I made two scripts for one region, but how to make it work on the whole grid? let it be fragile :D

    // Transmitter
    
    integer  gListener;
    
    default
    {
        state_entry()
        {
            llRegionSay(-1234567, "");
        }
        
        touch_start(integer total_number)
        {
            integer channel = -13572468;
            gListener = llListen( channel, "", "", "");     
            llTextBox(llDetectedKey(0), "Some info text for the top of the window...", channel);
        }
        
        listen(integer channel, string name, key id, string msg)
        {
            llListenRemove(gListener);
            llRegionSay(-1234567, "You wrote: " + msg);
        }
    }
    // Receiver
    
    default
    {
        state_entry()
        {
            llListen(-1234567, "", "", ""); 
        }
    
        listen(integer channel, string name, key id, string msg)
        {
            llSay(0, "You wrote: " + msg);
        }
    }

     

  13. 27 minutes ago, Rolig Loon said:

    Use llRegionSay on a private channel that all of your HUDs use.

    Thank you! But isnt llRegionSay can be heard on 256 m x 256 m only? Will it be heard all over grid?

  14. Hello! I'm trying to make a transmitter / receiver HUD. I put on a transmitter HUD and send a message, and everyone who wearing at that moment receiver HUD - receives this message from me all over the grid in any form ( IM or local chat - doesnt matter ). Is it possible and how to do it? :)

     

  15. I mean, since landlords are doing this, it makes a profit and land costs them less?

    Will LL deal with anyone or do they have to meet certain criteria? are there any requirements?

    And most importantly, how is the process carried out?

    :D

     

  16. 40 minutes ago, Sylvia Tamalyn said:

    Landlords either buy the land from other residents (Mainland), or they buy it directly from LL (if they have a private estate). 

    Here's the knowledge base page regarding Linden Homes: 

     

    Thanks! But what is Mainland? And why not just buy land directly from LL? I understand it will be cheaper? and will they be selling it to everyone? :)

     

  17. Hello! I, as an eternal noob, very interested in the question of land in the SL. I know that it can be rented, but
    where do those who rent out take the land from? where does it originally come from? 

    And what is linden home? 

    ( or please give a link where I can read about it ).

    :)

     

×
×
  • Create New...