RandyThiemann icon

Untitled

RandyThiemann | PRO | 10/14/18 11:52:43 AM UTC | 0 ⭐ | 8985 👁️ | Never ⏰ | []
Linden Scripting |

0 B

|

None

|

0 👍

/

0 👎

#include <VEOS.lsl>
key notecardQueryId;
string notecardName;
integer notecardLine;
key requestKey;
key initializeHTTP;
string basename;
string server;
integer disabled = FALSE;
string handling = "";
 
initialize()
{
    if(llGetInventoryNumber(INVENTORY_NOTECARD) == 0)
    {
        llOwnerSay("Please drop the VEOS-SETTINGS notecard into this object.");
    }
    else
    {
        llListen(VEOS_CLIENT_CHANNEL, "", NULL_KEY, "");
        requestKey = llReadKeyValue("VEOS-basename");
    }
}
 
integer startswith(string haystack, string needle)
{
    return llDeleteSubString(haystack, llStringLength(needle), 0x7FFFFFF0) == needle;
}
 
default
{
    state_entry()
    {
        initialize(); 
        llTargetOmega(<0,0,0>, 0, 0);
    }
    
    touch_start(integer num)
    {
        if(llGetOwner() == llDetectedKey(0))
        {
            llResetScript();
        }
    }
    
    changed(integer change)
    {
        if(change & CHANGED_INVENTORY)
        {
            llResetScript();
        }
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }
    
    dataserver(key query_id, string data)
    {
        if(disabled) return;
        if(query_id == notecardQueryId)
        {
            if(data == EOF)
            {
                llOwnerSay("Done sending settings. Read " + (string) notecardLine + " notecard lines.");
                llRegionSay(VEOS_SERVER_CHANNEL, "mode=settings-complete");
                return;
            }
            
            data = llStringTrim(llList2String(llParseStringKeepNulls(llStringTrim(data, STRING_TRIM), ["#"], []), 0), STRING_TRIM);
            
            if(data != "KV_SETTINGS" && data != "SERVER_STAFF" && data != "SERVER_TELEPORT_PUBLIC" && data != "SERVER_TELEPORT_STAFF" && data != "SERVER_MOTD")
            {
                if(handling == "KV_SETTINGS" && data != "")
                {
                    string k = llStringTrim(llList2String(llParseStringKeepNulls(data, ["="], []), 0), STRING_TRIM);
                    string v = llStringTrim(llList2String(llParseStringKeepNulls(data, ["="], []), 1), STRING_TRIM);
                    if(v == "delete")
                    {
                        llDeleteKeyValue(server + " - " + k);
                    }
                    else
                    {
                        llUpdateKeyValue(server + " - " + k, v, FALSE, "");
                    }
                }
                else if(handling == "SERVER_STAFF" && data != "")
                {
                    llRegionSay(VEOS_SERVER_CHANNEL, "mode=setting-staff\nvalue=" + data);
                }
                else if(handling == "SERVER_TELEPORT_PUBLIC" && data != "")
                {
                    llRegionSay(VEOS_SERVER_CHANNEL, "mode=setting-teleport-public\nvalue=" + data);
                }
                else if(handling == "SERVER_TELEPORT_STAFF" && data != "")
                {
                    llRegionSay(VEOS_SERVER_CHANNEL, "mode=setting-teleport-staff\nvalue=" + data);
                }
                else if(handling == "SERVER_MOTD" && data != "")
                {
                    llRegionSay(VEOS_SERVER_CHANNEL, "mode=setting-motd\nvalue=" + data);
                }
                else if(handling == "VEOS_ZONES" && data != "")
                {
                    llRegionSay(VEOS_SERVER_CHANNEL, "mode=setting-zones\nvalue=" + data);
                }
            }
            
            if(data == "KV_SETTINGS")
            {
                handling = "KV_SETTINGS";
                llOwnerSay("Sending KV settings...");
            }
            else if(data == "SERVER_STAFF")
            {
                handling = "SERVER_STAFF";
                llOwnerSay("Sending staff settings...");
            }
            else if(data == "SERVER_TELEPORT_PUBLIC")
            {
                handling = "SERVER_TELEPORT_PUBLIC";
                llOwnerSay("Sending public teleport settings...");
            }
            else if(data == "SERVER_TELEPORT_STAFF")
            {
                handling = "SERVER_TELEPORT_STAFF";
                llOwnerSay("Sending staff teleport settings...");
            }
            else if(data == "VEOS_ZONES")
            {
                handling = "VEOS_ZONES";
                llOwnerSay("Sending VEOS zones...");
            }
            else if(data == "SERVER_MOTD")
            {
                handling = "SERVER_MOTD";
                llOwnerSay("Sending MOTD settings...");
            }
            
            ++notecardLine;
            notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
        }
        else if(query_id == requestKey)
        {
            string arg = "sim=" + llEscapeURL(llGetRegionName());
            if((integer)llGetSubString(data, 0, 0) == 1)
            {
                baseName = llGetSubString(data, 2, -1);
            }
            initializeHTTP = llHTTPRequest(baseName, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded"], arg);
        }
    }
    
    http_response(key id, integer status, list meta, string body)
    {
        if(disabled) return;
        if(id != initializeHTTP) return;
        if(status != 200)
        {
            llOwnerSay("Something went wrong... Try clicking me in a few minutes.");
            return;
        }
        
        if(body == "DIE" || body == "SIM_NOT_REGISTERED")
        {
            llOwnerSay("Your sim has been ejected from the VEOS system or has not been registered.");
            disabled = TRUE;
        }
        else
        {
            server = llList2String(llParseStringKeepNulls(body, ["\n"], []), 1);
            notecardLine = 0;
            notecardName = llGetInventoryName(INVENTORY_NOTECARD, notecardLine);
            
            llOwnerSay("Sending new settings...");
            llRegionSay(VEOS_SERVER_CHANNEL, "mode=clear-settings");
            llRegionSay(VEOS_SERVER_CHANNEL, "mode=region-pos");
            notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
        }
    }
    
    listen(integer c, string n, key k, string m)
    {
        if(disabled) return;
        if(m == "RESEND-SERVER-SETTINGS")
        {
            llResetScript();
        }
        else if(startswith(m, "REGION-POS"))
        {
            llSetRegionPos((vector)llList2String(llParseString2List(m, ["\n"], []), 1));
            llSetRot(llList2Rot(llGetObjectDetails(k, [OBJECT_ROT]), 0));
            llTargetOmega(<1.0,0.0,0.0>*llGetRot(),1.0,0.1);
        }
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎