• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

von llSensor zu llDialog

Arcana Ceawlin

Neuer Nutzer
hi erstmal!

also mein problem ist folgendes: ich will ein kleines emote script machen. dazu soll das script mir erst die emotes im dropdown menu anzeigen, umgebung nach avataren scannen und dann zu einem weiteren untermenü führen wo ich dann die gescannten namen aussuchen kann(bis dahin alles wunderbar) . der name der gescannten person soll auch im emote sein damit´s etwas persönlicher ist.
leider treibt mich das ganze grad ziemlich in den wahnsinn...
hab gegoogelt, hier gesucht, lsl wiki gelesen und war im college of scripting...ich komm einfach net weiter...
ich kriegs einfach nich dazu, das der geklickte name im emote erscheint.
bin über jede hilfe dankbar^^

so schauts bis jetzt aus:
(btw, scripten is echt nich mein ding, aber ich glaub das geht schon aus dem post hervor XD)
list smile = ["Yes_smile", "No_smile"];
list options = ["smile"];
list mylist;

integer menu_handler;
integer channel;
string data;




default
{

on_rez(integer i)
{
llResetScript();
}
state_entry()
{
channel = (integer)(llFrand(66666)*-1);
menu_handler = llListen(channel,"","","");


}
sensor(integer people)
{
integer count;
string names;
for( count = 0; count < people; count++ )
{
mylist +=llDetectedName(count) +"\n";
}
}
no_sensor()
{
llSay(0, "Nobody is around.");
}

touch_start(integer total_number)
{
llSetObjectName(llKey2Name(llDetectedName(0)));
llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
llSensor("", NULL_KEY, AGENT, 30, PI);

}
listen(integer channel, string name, key id, string message)
{


if (message == "smile")

{

llDialog(llGetOwner(), "who do you want to smile at?" ,mylist, channel);

//ich würd meinen hier irgendwo müsste ich data = irgendwas reinschreiben


{

llWhisper(0, "/me ...you smile at "+ data);
}
}
}
}
 

Kottos Sperber

Freund/in des Forums
Du musst das zweite llDialog natürlich auch noch im listen event auswerten. Ich würde, der Übersicht wegen, dazu im ersten listen einen state change ausführen und dort den zweiten Dialog aufmachen. Muss aber nicht.

(Benutz besser den Code einfuegen knopf (#) anstatt den Zitat einfügen, dann bleibt die Formatierung erhalten und man kann den code besser lesen.)
 

Doktor Schnyder

Superstar
llDialog(llGetOwner(), "who do you want to smile at?" ,mylist, channel);

Hat keine Auswertung und du wirst an die Grenzen stossen wenn du versuchst Avatarnamen auf den Buttons der Diabox darzustellen. Du hast nämlich nur 24 Zeichen pro Button, ist der Avatarname länger kommt es zur Fehlermeldung und das Script bricht ab. Leider werden die Namen dann nicht automatisch gekürzt.
 

Arcana Ceawlin

Neuer Nutzer
huh, danke für die schnellen antworten :)

@kottos: bis jetzt hab ich nur ein paar farb änder scripts oder was mit rotation gemacht...ich hab ehrlich gesagt keine ahnung was du meinst XD

@doktor: was du meinst weiss ich glaub ich :)
 

Rebekka Revnik

Superstar
Hab dein Skript mal bissel umgebaut, meintest du sowas ähnliches?
LG Reb
Code:
list smile = ["Yes_smile", "No_smile"];
list options = ["smile"];
list mylist;
list dlglist;

integer menu_handler;
integer channel;
string data;

default
{
    on_rez(integer i)
    {
        llResetScript();
    }
    state_entry()
    {
        channel = (integer)(llFrand(66666)*-1) + 99;
        menu_handler = llListen(channel,"","","");
    }
    sensor(integer people)
    {
        integer count;
        string name;
        mylist = [];
        dlglist = [];
        for( count = 0; count < people; count++ )
        {
            name = llDetectedName(count);
            mylist += [name];
            dlglist += [llGetSubString(name, 0, 23)];
        }
        llDialog(llGetOwner(), "Who do you want to smile at?", dlglist, channel);
    }
    no_sensor()
    {
        llOwnerSay("Nobody is around.");
    }
    touch_start(integer total_number)
    {
        llSetObjectName(llKey2Name(llDetectedName(0)));
        //llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
        llDialog(llGetOwner(), "What do you want to do?", options, channel);
    }
    listen(integer channel, string name, key id, string message)
    {
        if (message == "smile")
        {
            llSensor("", NULL_KEY, AGENT, 30, PI);
        } else 
        {
            integer i = llListFindList(dlglist, [name]);
            if(i != -1)
            {
                string s = llList2String(mylist, i);
                llWhisper(0, "/me ... you smile at " + s);
            }
        }
    }
}
 

Arcana Ceawlin

Neuer Nutzer
hi rebekka!

ja das schaut so aus wie was ich will. soll halt, nach der namenswahl, dann sagen:
...you smile at [betty beispiel]
hab mir deins mal angeschaut und bissl mit rumgespielt, aber weiter als bis zu wahl des namens komm ich trotzdem net...also ich kann einen avatar aussuchen den ich anlächeln will aber dann sagt es nix.
geht das überhaupt mit nem normalen attachment oder muss ich dafür nen hud baun?

lg, arcana
 

Rebekka Revnik

Superstar
Huhu Arcana, habs mal zum Anklicken gemacht, wusste ja nicht wie dus haben willst. Tu das Skript mal in ne Kiste und klick sie an, bei mir gehts. Kanns dir auch inworld zeigen.
LG Reb
 
B

Bo Quinote

Guest
Huhu Arcana, habs mal zum Anklicken gemacht, wusste ja nicht wie dus haben willst. Tu das Skript mal in ne Kiste und klick sie an, bei mir gehts. Kanns dir auch inworld zeigen.
LG Reb

Reb, da ist aber ein kleiner aber oho fehler drinnen:

Code:
    listen(integer channel, string name, key id, string message)
    {
        if (message == "smile")
        {
            llSensor("", NULL_KEY, AGENT, 30, PI);
        } else 
        {
            integer i = llListFindList(dlglist, [[B]message[/B]]);
            if(i != -1)
            {
                string s = llList2String(mylist, i);
                llWhisper(0, "/me ... you smile at " + s);
            }
        }
    }

so wird es gehen ;)

LG, Bo
 

Jil Harrop

Nutzer
ich hab dieses script mal ausprobiert
in ner umgebung wo mehr als 12 avatare sind bekomm ich ne fehlermeldung
kann man da was dagegen machen?
 

Danziel Lane

Superstar
Klar kann man.

llDialog ist auf 12 Menupunkte beschränkt, wenn also die Liste der Avatare länger ist, sind da zu viele Einträge und es gibt die Fehlermeldung.

Lösung wäre, vor dem Aufruf von llDialog zu überprüfen, wie viele Einträge da sind, nur 10 in das anzuzeigende Menu zu packen und dazu einen Vor- und Zurück-Button, mit dem dann der Zugriff auf einen weiteren Teil der Liste angesteuert wird.

Das ist dann aber schon eine mehrzeilige Skriptänderung.

Falls es vorher niemand tut, kann ich in der Nacht mal einen Programmteil posten, mit dem ich so was mal realisiert habe.
 

Jil Harrop

Nutzer
das ist ja dann schon ganz schön aufwändig rebecca
geht das ausgehend von diesem script hier nicht ein bischen einfacher?
es müsste doch mit ein paar zeilen zusätzlich machbar sein, oder bin ich da zu blauäugig?
 

Rebekka Revnik

Superstar
Naja ganz so einfach ist es dann doch nicht. Hab mal versucht das auf die Schnelle zusammenzukleben, auch wenn ich dann wieder gesteinigt werde *gg*
Probiers einfach mal aus.
LG Reb
Code:
list smile = ["Yes_smile", "No_smile"];
list options = ["smile"];
list mylist;
list dlglist;

integer menu_handler;
integer channel;
string data;

integer MenuOn;
integer DlgPage;

float TIME = 30;
string PREV = "<<<";
string NEXT = ">>>";

DlgShow()
{
    if(MenuOn) return;
    MenuOn = TRUE;
    list Dlg = [];
    integer Count = llGetListLength(dlglist);
    integer Start = (DlgPage - 1) * 10 + 11;
    if(DlgPage == 0)
    {
        Start = 0;
        if(Count < 13) Dlg = dlglist;
        else Dlg = llList2List(dlglist, 0, 1) + [NEXT] + llList2List(dlglist, 2, 10);
    } else
    {
        if(Count < Start + 12) Dlg = [PREV] + llList2List(dlglist, Start, Start + 11);
        else Dlg = [PREV] + llList2List(dlglist, Start, Start) + [NEXT] + llList2List(dlglist, Start + 1, Start + 9);
    }
    llSetTimerEvent(TIME);
    llListenRemove(menu_handler);
    menu_handler = llListen(channel, "", llGetOwner(), "");
    llDialog(llGetOwner(), "Who do you want to smile at?", Dlg, channel);
}

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

default
{
    on_rez(integer i)
    {
        llResetScript();
    }
    state_entry()
    {
        channel = (integer)(llFrand(66666)*-1) + 99;
      menu_handler = llListen(channel,"","","");
      DlgPage = 0;
    }
    sensor(integer people)
    {
        integer count;
        string name;
        mylist = [];
        dlglist = [];
        for( count = 0; count < people; count++ )
        {
            name = llDetectedName(count);
            mylist += [name];
            dlglist += [llGetSubString(name, 0, 23)];
        }
        DlgShow();
    }
    no_sensor()
    {
        llOwnerSay("Nobody is around.");
    }
    touch_start(integer total_number)
    {
      if(llDetectedKey(0) != llGetOwner() || MenuOn) return;
        llSetObjectName(llKey2Name(llDetectedName(0)));
      //llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
      MenuOn = TRUE;
      llSetTimerEvent(TIME);
        llDialog(llGetOwner(), "What do you want to do?", options, channel);
    }
    listen(integer channel, string name, key id, string message)
    {
      if(DlgMain(message)) return;
        if (message == "smile")
    {
        llSetTimerEvent(0);
        MenuOn = FALSE;
            llSensor("", NULL_KEY, AGENT, 30, PI);
        } else 
        {
            integer i = llListFindList(dlglist, [message]);
            if(i != -1)
            {
                string s = llList2String(mylist, i);
                llWhisper(0, "/me ... you smile at " + s);
            }
        }
    }
    timer()
    {
        llOwnerSay("Die Zeit für das Menü ist abgelaufen. Bitte erneut klicken.");
        llSetTimerEvent(0);
        llListenRemove(menu_handler);
        MenuOn = FALSE;
    }
}
 

Rebekka Revnik

Superstar
Sorry Jil, bin bissel lahm heute, mit steinigen meinte ich dass Komplett-Skripte hier nicht gern gesehen sind. Gab auch mal ne Diskussion darüber. Aber wenns hilft mach ich das immer gern:)
LG Reb
 

Jil Harrop

Nutzer
nochmals vielen dank für deine hilfe
und wer sieht das nicht gerne mit den scripten?
folgendes hat swapps swenson himself geschrieben:

"Scripte mit hohem Nutzwert bitte hier im Scripting-Forum posten."

und der hat doch hier das sagen, oder?
 

Swapps Swenson

Gründer
Ich bestätige gerne nochmal das auch komplette Scripte hier gerne gesehen werden.

Eventuell wurde das ja mal in anderen Zusammenhang missverstanden:

Nicht gerne gesehen wird ...

  • wenn ein Fragesteller sein Problem nur grob umschreibt, selbst nicht die geringste Ahnung vom LSL-Scripting hat und nun als Antwort ein fertiges, komplettes Script erwartet.
  • wenn ein fremdes Script ohne Zustimmung der Autoren veröffentlicht wird (erkennbar in den Kommentaren des Autors ob eine Weitergabe oder Veröffentlichung ausgeschlossen wird).
  • wenn ein Script nur den Zweck hat andere Residents zu behindern, zu stören (Griefing) oder damit gegen die TOS verstossen wird.
 

Aktive User in diesem Thread

Oben Unten