User Tools

Site Tools


lslsnips

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
lslsnips [2025/10/19 11:38] mikolslsnips [2025/11/25 16:37] (current) – external edit 127.0.0.1
Line 1: Line 1:
-===== Create mosecode in LSL =====+===== Create morsecode in LSL =====
 🛠️ How It Works 🛠️ How It Works
 Listens on public chat (channel 0). Listens on public chat (channel 0).
Line 49: Line 49:
  
 </code> </code>
 +===== SL to Telegram =====
 +<code>
 +string TELEGRAM_API_URL = "https://api.telegram.org/bot<YOUR-BOT-TOKEN>/sendMessage";
 +string chat_id = "<YOUR-CHAT-ID>";
 +string message = "Hello from Second Life!";
 +
 +default
 +{
 +    state_entry()
 +    {
 +        // Construct the HTTP request payload
 +        string payload = "{\"chat_id\":\"" + chat_id + "\", \"text\":\"" + message + "\"}";
 +
 +        // Send HTTP POST request to Telegram API
 +        llHTTPRequest(TELEGRAM_API_URL, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], payload);
 +    }
 +
 +    http_response(key request_id, integer status, list metadata, string body)
 +    {
 +        // Handle the HTTP response
 +        if (status == 200)
 +        {
 +            llOwnerSay("Message sent successfully!");
 +        }
 +        else
 +        {
 +            llOwnerSay("Failed to send message. Status: " + (string)status + ", Response: " + body);
 +        }
 +    }
 +}
 +</code>
 +===== SL2Discord ===== 
 +<code>
 +string discord_web_hook = "wehhookURL"; // this is where your web hook url from discord goes
 +
 +key http_send;
 +Send_Message(string message) // this is where the magic happens.
 +{
 +    string json_encode = llList2Json(JSON_OBJECT,["username",username,"content",message]);
 +    http_send = llHTTPRequest(discord_web_hook, [HTTP_METHOD,"POST",HTTP_MIMETYPE,"application/json",HTTP_VERIFY_CERT,FALSE],json_encode);
 +}
 +
 +string username = "Test User"; //var to set the name in your message
 +
 +default
 +{
 +    state_entry()
 +    {
 +        
 +    }
 +    touch_start(integer total_number)
 +    {
 +        Send_Message(llGetDisplayName(llDetectedKey(0))  + " clicked me");
 +    }
 +    
 +}
 +</code>
 +===== Rezz at feet ====
 +<code>
 +integer canRezAt(vector pos) //can I rez at this place?
 +{
 +    integer parcelFlags = llGetParcelFlags(pos);
 +    list parcelDetails = llGetParcelDetails(pos, [PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP]);
 +    key parcelOwner = llList2Key(parcelDetails, 0);
 +    key parcelGroup = llList2Key(parcelDetails, 1);
 +    if (parcelFlags & PARCEL_FLAG_ALLOW_CREATE_OBJECTS) return TRUE;
 +    if (parcelOwner == llGetOwner()) return TRUE;
 +    if (!llSameGroup(parcelGroup)) return FALSE;
 +    if (parcelFlags & PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS) return TRUE;
 +    return FALSE;
 +}
 +
 +
 +/// rez the stuff to my feet
 +vector          size;
 +float           Zpos;
 +vector          rot = <90.00000, 0.00000, 0.00000>;
 +
 +positioner() //get my size and locate my feet
 +{
 +    size = llGetAgentSize(llGetOwner());
 +    vector pos = llGetPos();Zpos = pos.z - (size.z / 2);
 +}
 +
 +rezzer(string object) // do the rez!
 +{
 +    if(canRezAt(llGetPos())) //can I rez at this place?
 +    {
 +        positioner();
 +        vector pos = llGetPos()+(<2,0,-2>*llGetRot());
 +        rotation rot1 = llEuler2Rot(rot);
 +        pos.z = Zpos;llRezObject(object, pos, <0,0,0>,ZERO_ROTATION, 1);
 +    }
 +    else
 +    {
 +        llOwnerSay("Cant rez at current position!");
 +    }
 +}
 +</code>
 +===== Random giver =====
 +<code>
 +//gimme random
 +integer random_integer(integer min, integer max)
 +{
 +    return min + (integer)(llFrand(max - min + 1));
 +}
 +
 +</code>
 +===== Find in List =====
 +<code>
 +
 +// find stuff in my list or not
 +
 +integer findinList(list src,list item){
 +    if(~llListFindList(src, (list)item))
 +    return TRUE;
 +    else  
 +    return FALSE;   
 +}
 +
 +</code>
 +===== Find an avatar key on region =====
 +<code>
 +
 +string getKey(string req)
 +{
 +    if(llStringLength(req) < 3)
 +    {
 +        return NULL_KEY;
 +    }
 +    req = llToLower(req);
 +    list keyNames;
 +    list temp;
 +    list agents = llGetAgentList(AGENT_LIST_REGION , []); 
 +    integer x = 0;
 +    integer y = llGetListLength(agents);
 +    while(x<y)
 +    {   
 +        list t = llParseString2List(llToLower(llKey2Name(llList2String(agents,x))),[" "],[]);
 +        temp = [llList2String(t,0) +"|"+ llList2String(agents,x) ] + temp;   
 +        ++x;
 +    }
 +    keyNames = llListSort(temp,1,TRUE); 
 +    x = 0;
 +    y = llGetListLength(keyNames);
 +    while(x<y) 
 +    {
 +        if(llSubStringIndex(llList2String(keyNames,x),req) != -1)
 +        {
 +            list a = llParseString2List(llList2String(keyNames,x), ["|"] ,[]);
 +            return llList2String(a,1); 
 +        }
 +        ++x;
 +    }
 +    return NULL_KEY; 
 +}
 +
 +</code>
 +===== Check if object is original =====
 +<code>
 +
 +integer checkOriginal(key id) {
 + 
 +    // Check if we have the original number of primitives.
 +    if(llGetNumberOfPrims() != 15) return FALSE;
 +    // Check if the creator of the object is Morgan LeFay.
 +    if(llGetCreator() != "1ad33407-a792-476d-a5e3-06007c0802bf") return FALSE;
 +    // Check the sizes and positions of all primitives.
 +    list size = [ <.032813, .015186, .022779>,<.018223, .015186, .015186>,<.015186, .075929, .015186>,<.018223, .015186, .015186>,<.015186, .015186, .015186>,<.016704, .076547, .046667>,<.046755, .010000, .010000>,<.018223, .030371, .030371>,<.020000, .013000, .010000>,<.010000, .010000, .046230>,<.030000, .030000, .030000>,<.030000, .030000, .030000>,<.010000, .014000, .010000>,<.012000, .016000, .010000>,<.016840, .076546, .073333> ];
 +    integer itra = 14;
 +    do {
 +        if((string)llList2Vector(llGetLinkPrimitiveParams(14-itra+1, [PRIM_SIZE]),0) != (string)llList2Vector(size, itra)) return FALSE;
 +        i += llList2Vector(llGetLinkPrimitiveParams(14-itra+1, [PRIM_SIZE]),0);
 +    } while(--itra>0);
 + 
 +    return llAbs((integer)((integer)(i.x*((integer)("0x"+llGetSubString((string)id,-8,-1)))) & (integer)(i.y*((integer)("0x"+llGetSubString((string)llGetCreator(),-8,-1)))) ^ (integer)(i.z*((integer)("0x"+llGetSubString("2358cb5c-578a-4b90-932f-54d01e36cfc8",-8,-1))))));
 +}
 +
 +</code>
 +===== Shield effect =====
 +<code>
 +
 +ShieldFade(integer link_num, float alpha_start, float alpha_end, float glow_start, float glow_end, float speed)
 +{
 + integer complete = FALSE;
 + do
 + {
 + if((alpha_start < alpha_end && alpha_start != alpha_end)||(alpha_start > alpha_end && alpha_start != alpha_end))
 + {
 + if(alpha_start < alpha_end && (alpha_start + speed) < alpha_end)
 + {
 + alpha_start += speed;
 + }
 + else if(alpha_start > alpha_end && (alpha_start - speed) > alpha_end)
 +
 + {
 + alpha_start -= speed;
 + }
 + else
 + {
 + alpha_start = alpha_end;
 + }
 + }
 + if((glow_start < glow_end && glow_start != glow_end)||(glow_start > glow_end && glow_start != glow_end))
 + {
 + if(glow_start < glow_end && (glow_start + speed) < glow_end)
 + {
 + glow_start += speed;
 + }
 + else if(glow_start > glow_end && (glow_start - speed) > glow_end)
 + {
 + glow_start -= speed;
 + }
 + else
 + {
 + glow_start = glow_end;
 + }
 + }
 + vector color = <1,1,1>;
 + llSetLinkPrimitiveParamsFast(link_num, [PRIM_GLOW, ALL_SIDES, glow_start, PRIM_COLOR, ALL_SIDES, color, alpha_start]);
 + if(glow_start == glow_end && alpha_start == alpha_end)
 + {
 + complete = TRUE;
 + }
 + }while(complete == FALSE);
 +}
 +
 +</code>
 +===== WarpPos =====
 +<code>
 +warpPos(vector destpos) {
 +    integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1;
 +    if (jumps > 411) jumps = 411;
 +    list rules = [PRIM_POSITION, destpos];
 +    integer count = 1;
 +    while ((count = count << 1) < jumps) {
 +        rules = (rules = []) + rules + rules;
 +    }
 +    llSetPrimitiveParams(rules + llList2List(rules, (count - jumps) << 1, count));
 +    if (llVecDist(llGetPos(), destpos) > 0.001) {
 +        while (--jumps) llSetPos(destpos);
 +    }
 +}
 +</code>
 +===== Binary converter =====
 +<code>
 +
 +
 +// Function to encode a string into a binary form using integers
 +list encodeToBinary(string data) {
 +    list binaryList = [];
 +    integer len = llStringLength(data);
 +
 +    for (integer i = 0; i < len; ++i) {
 +        integer ch = llString2Key(llGetSubString(data, i, i));
 +        list bits = [];
 +        for (integer j = 0; j < 8; ++j) {
 +            bits += (ch & (1 << j)) ? 1 : 0;
 +        }
 +        binaryList += llList2String(bits, 0);
 +    }
 +    return binaryList;
 +}
 +
 +// Function to decode a binary list back to a string
 +string decodeFromBinary(list binaryList) {
 +    string data = "";
 +    integer len = llGetListLength(binaryList);
 +
 +    for (integer i = 0; i < len; ++i) {
 +        integer ch = 0;
 +        list bits = llParseString2List(llList2String(binaryList, i), [" "], []);
 +        for (integer j = 0; j < 8; ++j) {
 +            ch += (llList2Integer(bits, j) ? 1 : 0) << j;
 +        }
 +        data += (string)ch;
 +    }
 +    return data;
 +}
 +
 +// Example usage
 +default {
 +    state_entry() {
 +        string originalData = "Hello";
 +        list binaryData = encodeToBinary(originalData);
 +        string decodedData = decodeFromBinary(binaryData);
 +
 +        llSay(0, "Original Data: " + originalData);
 +        llSay(0, "Binary Data: " + llDumpList2String(binaryData, " "));
 +        llSay(0, "Decoded Data: " + decodedData);
 +    }
 +}
 +</code>
 +=====ENDLESS DIALOG=====
 +
 +<code>
 +// Dynamisches Dialogskript in LSL mit Seiten
 +integer dialogChannel = -123456;
 +key user;
 +list options = ["Option 1", "Option 2", "Option 3", "Option 4", "Option 5", 
 +                "Option 6", "Option 7", "Option 8", "Option 9", "Option 10", 
 +                "Option 11", "Option 12"];
 +integer itemsPerPage = 5;
 +integer currentPage = 0;
 +
 +// Funktion zum Anzeigen des Dialogs mit Seiten
 +showDialog(key userId, integer page) {
 +    integer start = page * itemsPerPage;
 +    integer end = start + itemsPerPage;
 +    list pageOptions = llList2List(options, start, end - 1);
 +    
 +    if (start > 0) {
 +        pageOptions += ["Vorherige"];
 +    }
 +    if (end < llGetListLength(options)) {
 +        pageOptions += ["Nächste"];
 +    }
 +    
 +    llDialog(userId, "Wähle eine Option:", pageOptions, dialogChannel);
 +}
 +
 +// Ereignis, wenn das Skript zurückgesetzt wird
 +default {
 +    state_entry() {
 +        llListen(dialogChannel, "", NULL_KEY, ""); 
 +        llSay(0, "Dialogskript ist aktiv. Tippe '/100 menü' zum Starten.");
 +    }
 +
 +    listen(integer channel, string name, key id, string message) {
 +        if (llToLower(message) == "menü") { 
 +            user = id;
 +            currentPage = 0;
 +            showDialog(user, currentPage);
 +        } else {
 +            llListenRemove(channel);
 +        }
 +        if (channel == dialogChannel) {
 +            if (message == "Vorherige") {
 +                currentPage--;
 +            } else if (message == "Nächste") {
 +                currentPage++;
 +            } else {
 +                llSay(0, "Du hast " + message + " gewählt.");
 +            }
 +            showDialog(user, currentPage);
 +        }
 +    }
 +
 +    on_rez(integer start_param) {
 +        llResetScript();
 +    }
 +
 +    touch_start(integer num) {
 +        user = llDetectedKey(0);
 +        currentPage = 0;
 +        showDialog(user, currentPage);
 +    }
 +}
 +</code>
 +===== Turn Avatar to Target / RLV =====
 +<code>
 +vector pointTo = targetpos - llGetPos();
 +float angleTo = llAtan2(pointTo.x, pointTo.y);
 +llOwnerSay("@setrot:" + (string)angleTo + "=force");
 +</code>
 +===== Key2Number =====
 +<code>
 +integer Key2Number(key objKey) {
 +  return -(integer)("0x8" + llGetSubString(llGetKey(), 0, 6));
 +}
 +</code>
 +
 ~~DISCUSSION~~ ~~DISCUSSION~~
lslsnips.1760873885.txt.gz · Last modified: (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki