Beiträge: 602
Themen: 52
Thanks Received: 80 in 39 posts
Thanks Given: 176
Registriert seit: Jul 2010
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
Beiträge: 67
Themen: 15
Thanks Received: 3 in 2 posts
Thanks Given: 6
Registriert seit: Jul 2010
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
Beiträge: 602
Themen: 52
Thanks Received: 80 in 39 posts
Thanks Given: 176
Registriert seit: Jul 2010
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
Beiträge: 450
Themen: 46
Thanks Received: 23 in 10 posts
Thanks Given: 2
Registriert seit: Jul 2010
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.
|