Seite 1 von 1

[Script] Inworld OAR verwalten

BeitragVerfasst: So 2. Nov 2014, 16:16
von Gubbly
Huhu alle, habe mal auf die schnelle ein kleines hud gemacht um inworld OAR Files zu speichern oder zu laden.
Einfach eben einen prim machen, Script rein und vielleicht die Textur noch drauf oder eigene machen ;)

Dann zeile 15 und 16 anpassen an die Speicherplätze relativ zur OpenSim.exe wo die OAR daten hinsollen.

Und jenachdem wer es nutzen dürfel soll muss noch in der OpenSim.ini umgestellt werden:

Nur Estate Owner:
Code: Alles auswählen
Allow_osConsoleCommand = ESTATE_OWNER


Estate Owner und Estate Manager
Code: Alles auswählen
Allow_osConsoleCommand = ESTATE_OWNER, ESTATE_MANAGER


Script:
Code: Alles auswählen
integer randInt(integer n)
    {
        return (integer)llFrand(n + 1);
    }

integer randIntBetween(integer min, integer max)
    {
        return min + randInt(max - min);
    }
   
string str_replace(string subject, string search, string replace)
    {
        return llDumpList2String(llParseStringKeepNulls(subject, [search], []), replace);
    }
   
string      pfad_local      =   "./../OAR/";
string      pfad_global     =   "./../../puplic/OAR/";

string      status          =   "idel";
integer     listen_socket   =   0;
integer     listen_channel  =   0;
integer     aktiv           =   0;
key         avatarKey       =   NULL_KEY;

integer     option_global   =   0;

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
   
    touch_start(integer total_number)
    {
        if(!aktiv)
        {
            listen_channel  =   randIntBetween(11111, 99999999);
            listen_socket   =   llListen(listen_channel, "", llDetectedKey(0), "");
            status          =   "askFunktion";
            avatarKey       =   llDetectedKey(0);
            llDialog(avatarKey, "What want you do?",["Save", "Load", "Options"], listen_channel);
            aktiv           =   1;
            llSetTimerEvent(60);
        }else{
            llRegionSayTo(llDetectedKey(0), 0, "Sorry, please wait a moment...");
        }
    }
   
    timer()
    {
        if(aktiv)
        {
            aktiv           =   0;
            llListenRemove(listen_socket);
            listen_channel  =   0;
            status          =   "idel";
            listen_socket   =   0;
            llSetTimerEvent(0);
            llRegionSayTo(avatarKey, 0, "Sorry, please wait a moment...");
        }
    }
   
    listen(integer channel, string name, key id, string message)
    {
        if(aktiv & avatarKey == id)
        {
            if(status == "askFunktion")
            {
                if(message == "Save")
                {
                    status  =   "saveOAR";
                    llSetTimerEvent(60);
                    llTextBox(avatarKey, "How want you name you save file?", listen_channel);
                    return;
                }
               
                if(message == "Load")
                {
                    status  =   "loadOAR";
                    llSetTimerEvent(60);
                    llTextBox(avatarKey, "How is the name from you save file?", listen_channel);
                    return;
                }
           
                if(message == "Options")
                {
                    status  =   "options";
                    llSetTimerEvent(60);
                    llDialog(avatarKey, "What want you do?\n[ " + (string)option_global + " ]Puplic - Switch puplic saveing on or off",["Puplic"], listen_channel);
                    return;
                }
            }
           
            if(status == "options")
            {
                llSetTimerEvent(0);
                aktiv           =   0;
                listen_channel  =   0;
                listen_socket   =   0;
                status          =   "idel";

                if(message == "Puplic")option_global    =   !option_global;
            }
           
            if(status == "loadOAR")
            {
                llSetTimerEvent(0);
                aktiv           =   0;
                listen_channel  =   0;
                listen_socket   =   0;
                status          =   "idel";
               
                string  backup  =   llToLower(message);
                backup          =   str_replace(backup, "\n", "");
                backup          =   str_replace(backup, " ", "");
                backup          =   str_replace(backup, "/", "");
                backup          =   str_replace(backup, "\\", "");
                backup          =   str_replace(backup, "~", "");
                backup          =   str_replace(backup, ".oar", "");
                backup          =   str_replace(backup, ".iar", "");
                backup          =   backup + ".oar";
               
                llRegionSayTo(avatarKey, 0, "OK, load have start. It can take some time... Please wait... sometimes you must wait 30 Min or longer.");
                llRegionSayTo(avatarKey, 0, "Then nothing happand it can be that you file are not able to load.");
               
                osConsoleCommand("change region " + llGetRegionName());
               
                if(option_global)
                {
                    osConsoleCommand("load oar --skip-assets " + pfad_global + backup);
                }else{
                    osConsoleCommand("load oar --skip-assets " + pfad_local + backup);
                }
            }   
           
            if(status == "saveOAR")
            {
                llSetTimerEvent(0);
                aktiv           =   0;
                listen_channel  =   0;
                listen_socket   =   0;
                status          =   "idel";
               
                string  backup  =   llToLower(message);
                backup          =   str_replace(backup, "\n", "");
                backup          =   str_replace(backup, " ", "");
                backup          =   str_replace(backup, "/", "");
                backup          =   str_replace(backup, "\\", "");
                backup          =   str_replace(backup, "~", "");
                backup          =   str_replace(backup, ".oar", "");
                backup          =   str_replace(backup, ".iar", "");
                backup          =   backup + ".oar";

                llRegionSayTo(avatarKey, 0, "OK, save have start. Please wait a moment until you make big changes on this region...");
                llRegionSayTo(avatarKey, 0, "Your backup file name is: " + backup + ". Please hold it in memory to load this file.");
               
                osConsoleCommand("change region " + llGetRegionName());
               
                if(option_global)
                {
                    osConsoleCommand("save oar " + pfad_global + backup);
                }else{
                    osConsoleCommand("save oar " + pfad_local + backup);
                }
            }           
        }
    }
}


Viel spaß damit.

PS: Wichtig ist es es während dem laden als HUD zu tragen und auf der sim zu bleiben.

Re: [Script] Inworld OAR verwalten

BeitragVerfasst: So 2. Nov 2014, 20:48
von mmetzmac
Hallo Gubbly,

WOW. Das ist ja mal wirklich geil. Kommt mir direkt noch eine Idee: könnte man nach dem berühren nicht eine Auswahl der zur Verfügung stehenden OAR Backups anzeigen und die getätigte Auwahl als Dateiname übernehmen?

Gruß
Markus

Re: [Script] Inworld OAR verwalten

BeitragVerfasst: So 2. Nov 2014, 22:33
von Gubbly
Eigentlich schon möglich, aber nicht mit lsl alleine.
Wenn das Script unabhängig sein soll währe die einzige Lösung eigentlich c# Scripte zu erlauben und den Ordner damit auszulesen.
Was allerdings erhebliche Risiken mit sich bringen kann, wenn scripte auf das Dateisystem zugreifen können.

Oder man geht den weg über ein Shell Script das den Ordner scannt und in eine db einträgt. Das ist aber viel mehr arbeit und auch nicht so flexible als wenn man nur das Script und ein parr OpenSim.ini werte ändern muss.