Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Menu erstellen,wie;)
#1
Huhu

Also ich wuerde gerne eine Menu bauen das angezeigt wird,dazu soll es dann ein Script geben das dann HG Adressen oder Radiostationen zur verfuegung stellt,ich hatte das aus SL,aber des funzte nicht in OS,daher muesste ich das selber schreiben,wer schoen wenn mir das einer erklaeren koennte,wie das Geht

lg
Ezry
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!

http://angels-world.nl:8002:Angels-World
Zitieren
#2
ich würde sagen, so es ein freies Script ist, was du auch dann anderen zu Verfügung stellst, es hier mal zu posten, so das man es sich mal laden kann und die Fehler oder Änderungen machen kann.

als weiteres ist hier mal nen einfaches Menu script was OS tauglich ist

Code:
// menu script

integer CHANNEL = 42; // dialog channel
list MENU_MAIN = ["Color", "Alpha"]; // the main menu
list MENU_OPTIONS = ["Red", "Green", "Blue", "...Back"]; // a submenu
list MENU_ALPHA = ["Clear", "Translucent", "Opaque", "...Back"];

default
{
    state_entry()
    {
        llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)
        llSetText("Dialog Test",<1,1,1>,1.0);
    }
    touch_start(integer total_number)
    {
        llDialog(llDetectedKey(0), "What do you want to do?", MENU_MAIN, CHANNEL); // present dialog on click
    }
    listen(integer channel, string name, key id, string message)
    {
        if (message == "Color")
        {
            llDialog(id, "Pick a color", MENU_OPTIONS, CHANNEL); // present submenu on request
        }
        else if (message == "Alpha")
        {
            llDialog(id, "Pick alpha", MENU_ALPHA, CHANNEL);
        }
        else if (message == "...Back")
        {
            llDialog(id, "Select option", MENU_MAIN, CHANNEL); // present main menu on request to go back
        }
        else if (message == "Red")
        {
            llSetColor(<1,0,0>,ALL_SIDES);
        }
        else if (message == "Green")
        {
            llSetColor(<0,1,0>,ALL_SIDES);
        }
        else if (message == "Blue")
        {
            llSetColor(<0,0,1>,ALL_SIDES);
        }
        else if (message == "Clear")
        {
            llSetAlpha(0.0, ALL_SIDES);
        }
        else if (message == "Translucent")
        {
            llSetAlpha(0.5, ALL_SIDES);
        }
        else if (message == "Opaque")
        {
            llSetAlpha(1.0, ALL_SIDES);
        }
    }
}

hier nochmal der Link " LSL Funktionen " zu der Seite von Opernsimulator, wo einzusehen ist, welche LSL Funktionen im OS genutzt werden können

niemand ist eine Insel, und Selbsthilfe heißt nicht sich nur um sich zu kümmern. www.vamp-berlin.de www.grid-berlin.de
Zitieren
#3
hiu

thx,ich schau mal nach ob es frei war, wenn ich morgen oder so ins SL gehe. Meine aber das es frei ist,werde es dann gerne hier posten,sofern ichs hinbekomme*lach*

lg
Ezry
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!

http://angels-world.nl:8002:Angels-World
Zitieren
#4
Mal auf die Schnelle mein Standardmenü, was ich auch im OSgrid nutze.
Als Demo wird die Liste DlgItems inm state_entry mit sinnlosen Zahlen gefüllt, da muss dann was anderes rein.
LG Reb

Code:
// Menu 1
// Ein Menü mit beliebig vielen Schaltflächen
// diese stehen in der Liste DlgItems

string NEXT = ">>>";                        // Schaltflächen für vor und zurück
string PREV = "<<<";
string DLGTITLE = "Drücke eine Taste..";    // Dialog-Text
integer DLGCHANNEL;                            // Chatkanal
integer TIME = 30;                            // Zeit nach der abgebrochen wird, wenn TIMEOUT = TRUE ist
integer TIMEOUT = TRUE;                        // soll ein Abbruch nach der Zeit TIME erfolgen?
integer MenuOn = FALSE;                        // kein neues Menu wenn schon eins da ist
list DlgItems = [];                            // die Schaltflächen des Dialogs
integer DlgPage = 0;                        // aktuelle Seite - wird vom Skript verwendet
integer Listener;

list DlgNice(list Dlg)                        // "schöneres" Aussehen
{
    list l = [];
    integer len = llGetListLength(Dlg);
    integer i;
    while(llGetListLength(Dlg) < 12) Dlg += [" "];
    integer ip = llListFindList(Dlg, [PREV]);
    integer in = llListFindList(Dlg, [NEXT]);
    if(in != -1)
    {
        Dlg = llDeleteSubList(Dlg, in, in);
        Dlg += [NEXT];
    }
    if(ip != -1)
    {
        Dlg = llDeleteSubList(Dlg, ip, ip);
        Dlg = llListInsertList(Dlg, [PREV], 9);
    }
    for(i = 0; i< 3; i++) l += llList2List(Dlg, i + 9, i + 9);
    for(i = 3; i< 6; i++) l += llList2List(Dlg, i + 3, i + 3);
    for(i = 6; i< 9; i++) l += llList2List(Dlg, i - 3, i - 3);
    for(i = 9; i< 12; i++) l += llList2List(Dlg, i - 9, i - 9);
    return l;
}

DlgShow(string msg, integer channel)        // die eigentliche Dialogprozedur
{
    if(MenuOn) return;
    MenuOn = TRUE;
    list Dlg = [];
    integer Count = llGetListLength(DlgItems);
    integer Start = (DlgPage - 1) * 10 + 11;
    if(DlgPage == 0)
    {
        Start = 0;
        if(Count < 13) Dlg = DlgItems;
        else Dlg = llList2List(DlgItems, 0, 1) + [NEXT] + llList2List(DlgItems, 2, 10);
    } else
    {
        if(Count < Start + 12) Dlg = [PREV] + llList2List(DlgItems, Start, Start + 11);
        else Dlg = [PREV] + llList2List(DlgItems, Start, Start) + [NEXT] + llList2List(DlgItems, Start + 1, Start + 9);
    }
    integer i;
    for(i = llGetListLength(Dlg) - 1; i >= 0; i--) Dlg = llListReplaceList(Dlg, [llGetSubString(llList2String(Dlg, i), 0, 23)], i, i);
    if(TIMEOUT) llSetTimerEvent(TIME);
    llListenRemove(Listener);
    llListen(channel, "", llGetOwner(), "");
    // der Standard-Dialog, den ich nicht mag
    // llDialog(llGetOwner(), msg, Dlg, channel);
    // wenns schöner aussehen soll:
    llDialog(llGetOwner(), msg, DlgNice(Dlg), channel);
}

integer DlgMain(string msg)
{
    MenuOn = FALSE;
    llSetTimerEvent(0);
    llListenRemove(Listener);
    if(msg == PREV)
    {
        DlgPage--;
        DlgShow(DLGTITLE, DLGCHANNEL);
        return TRUE;
    } else if(msg == NEXT)
    {
        DlgPage++;
        DlgShow(DLGTITLE, DLGCHANNEL);
        return TRUE;
    } else if(msg == " ")
    {
        DlgShow(DLGTITLE, DLGCHANNEL);
        return TRUE;
    }
    else return FALSE;
}

default
{
    state_entry()
    {
        integer i;
        DLGCHANNEL = (integer)llFrand(10000) + 999;
        DlgItems = [];
        // nur zum Test
        for(i = 0; i < 35; i++) DlgItems += (string)i;
    }
    touch_start(integer total_number)
    {
        if(!MenuOn && llDetectedKey(0) == llGetOwner())
        {
            DlgPage = 0;
            DlgShow(DLGTITLE, DLGCHANNEL);
        }
    }
    listen(integer channel, string name, key id, string message)
    {
        if(DlgMain(message)) return;
        // hier werden die Schaltflächen ausgewertet

        // Wenn das Menü erneut aufgerufen werden soll, dann die nächste Zeile verwenden
        // DlgShow(DLGTITLE, DLGCHANNEL);
    }
    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(Listener);
        MenuOn = FALSE;
        llOwnerSay("Die Zeit für das Menü ist abgelaufen. Bitte nochmals aufrufen.");
    }
}
Leider ist meine Signatur ausserhalb Sachsens nicht verfügbar.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Sourcecode mit KI erstellen Manfred Aabye 0 74 17.03.2024, 15:27
Letzter Beitrag: Manfred Aabye

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste