• 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.

Tutorial: Hovertext / floating text

Daemonika Nightfire

Forumsgott/göttin
Hovertext leicht gemacht

huhu,

in diesem Tutorial moechte ich euch so einfach wie moeglich den Hovertext / floating text naeher bringen.
Auch wenn es fuer viele nichts besonderes ist, dennoch werd ich sehr oft danach gefragt.

Der Hovertext besteht lediglich aus einer Zeile llSetText(string text, vector color, float alpha);

Erklaerung:
string text = steht fuer den text der in " " Gaensefuesschen geschrieben wird.

vector color = steht fuer die Farbe des Textes, die in RGB angegeben wird.

Beispiel:

  • <1.00000, 1.00000, 1.00000> white
  • <0.50000, 0.50000, 0.50000> gray
  • <0.00000, 0.00000, 0.00000> black

  • <1.00000, 0.00000, 0.00000> red
  • <1.00000, 1.00000, 0.00000> yellow
  • <0.00000, 1.00000, 0.00000> green
  • <0.00000, 1.00000, 1.00000> cyan
  • <0.00000, 0.00000, 1.00000> blue
  • <1.00000, 0.00000, 1.00000> purple

  • Natuerlich gibt es noch unzaehlige weitere Farbcodes, dazu aber spaeter mehr.

float alpha = damit wird die Transparents angegeben, sinnvolle werte dafuer von 0.0 bis 1.0

Nun muss man jetzt natuerlich nicht jedesmal string, vector oder float mit in den Befehl rein schreiben.
Es reicht aber auch nicht, nur den befehl in ein leeres Script zu schreiben.
Eine entsprechende Grundstruktur bestehend aus mindestens einem State und einem Event muss natuerlich vorhanden sein.
Das sieht dann wie im folgenden Beispiel aus.
Code:
[COLOR=Purple]default[/COLOR]
{
    [COLOR=DeepSkyBlue]state_entry[/COLOR]()
    {
        [COLOR=Red]llSetText[/COLOR]("Text!", <1.00000, 1.00000, 1.00000>, 1.0);
    }
}
Dieser kleine Schnipsel eignet sich ideal zum beschriften von Verkaufsboxen, Hinweisschildern oder sonstigem.

Sobald der Hovertext auf dem Prim erscheint, wird das script nicht mehr benoetigt, da der Text im Prim gespeichert wird.
Es kann danach ganz einfach geloescht werden oder fuer spaetere aenderungen lediglich deaktiviert werden.
Dazu entfehrne wie im folgenden Bild unten links im geoeffneten Script den Haken bei Laeuft.



Da ich spaetere aenderungen erwaehnte, folgt nun das loeschen des Hovertextes.
Das einfachste ist dabei lediglich den Haken wieder zu setzen und den Text zwischen den Gaensefuesschen loeschen.
Code:
[COLOR=Red]llSetText[/COLOR]("", <1.00000, 1.00000, 1.00000>, 1.0);
Kurz auf Speichern druecken und danach das Script loeschen oder deaktivieren, fertig.

Das war aber noch nicht alles, es gibt noch einige Varianten mehr, die ich hier kurz erwaehnen moechte.
Die erste und einfachste Variante habe ich bereiz oben vorgestellt.
Nun folgt eine Variante bei der string, vector und alpha als Globale Variable ueber dem State benannt werden.
Code:
[COLOR=DarkGreen]string[/COLOR] text  = "Text hier eingeben.";
[COLOR=DarkGreen]vector[/COLOR] color = <1.00000, 1.00000, 1.00000>;
[COLOR=DarkGreen]float[/COLOR] alpha  = 1.0;
[COLOR=Purple]default[/COLOR]
{
    [COLOR=DeepSkyBlue]state_entry[/COLOR]()
    {
        [COLOR=Red]llSetText[/COLOR](text, color, alpha);
    }
}
Diese Variante ist ideal dafuer, um ein und den selben Hovertext mit der selben Formatierung immer wieder aufzurufen.
Der vorteil dabei ist, man muss nicht alles staendig neu schreibe, wenn der Hovertext mehrmals im Script verwendet wird.
Bei der gelegenheit moechte ich erwaehnen das man einen Hovertext aus jedem Event heraus aufrufen kann.

Das war aber immer noch nicht alles.
Es gibt noch weitere Varianten mit denen man einen Hovertext auf einen Prim Anzeigen lassen kann, die es aber noch nicht so lange gibt.
Seit kurzem ist es moeglich Hovertext auch ueber llSetPrimitiveParam... einzusetzen.

Hier habe ich sie einfach mal alle, zum direkten vergleich in ein Script geschrieben.
Code:
[COLOR=Purple]default[/COLOR]
{
    [COLOR=RoyalBlue]state_entry[/COLOR]()
    {
        [COLOR=Orange]// NEW - Prim in dem das Script ligt.[/COLOR]
        [COLOR=Red]llSetPrimitiveParams[/COLOR]([[COLOR=Blue]PRIM_TEXT[/COLOR],"Text hier eingeben.",<1,1,1>,1.0]);
        
        [COLOR=Orange]// NEW - Ausgewaehlter Prim im Linkset.[/COLOR]
        [COLOR=Red]llSetLinkPrimitiveParams[/COLOR]([COLOR=Blue]LINK_THIS[/COLOR],[[COLOR=Blue]PRIM_TEXT[/COLOR],"Text hier eingeben.",<1,1,1>,1.0]);
        
        [COLOR=Orange]// NEW - Ausgewaehlter Prim im Linkset, schnellste Variante ohne delay (delay = Verzoegerung).[/COLOR]
        [COLOR=Red]llSetLinkPrimitiveParamsFast[/COLOR]([COLOR=Blue]LINK_THIS[/COLOR],[[COLOR=Blue]PRIM_TEXT[/COLOR],"Text hier eingeben.",<1,1,1>,1.0]);
    }
}
Wie in der Variante 2 beschrieben, ist es auch hier moeglich Globale Variablen zu verwenden.
Vorteil bei llSetPrimitiveParam..., hier ist es moeglich mit einem einzigen Befehl, weitere Prim Parameter anzugeben, wie zum Beispiel: Primfarbe, Textur, groesse, form u.s.w.

Wie versprochen, folgen jetzt die oben angesprochenen Farbcodes.
Dazu habe ich mal ein kleinen Helfer geschrieben, der es ermoeglich nahezu jede Farbe im Hovertext einzusetzen.

Randbemerkung:
Das script ist zugleich wieder ein Beispiel wie man Hovertext einsetzen kann
.

Als kleines Extra zeigt der Helper sogar den kompletten Befehl sofort im chat und auf dem Prim an.
Code:
[COLOR=DarkGreen]string[/COLOR] text  = "wechsel die farbe des Prims, dann klick den Prim";
[COLOR=DarkGreen]vector[/COLOR] color = <1,1,1>;
[COLOR=DarkGreen]float[/COLOR] alpha  = 1.0;
[COLOR=Purple]default[/COLOR]
{
    [COLOR=RoyalBlue]state_entry[/COLOR]()
    {
        [COLOR=Red]llSetTexture[/COLOR]("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",[COLOR=Blue]ALL_SIDES[/COLOR]);
        [COLOR=Red]llSetText[/COLOR](text, color, alpha);
    }
    [COLOR=RoyalBlue]touch_start[/COLOR]([COLOR=DarkGreen]integer[/COLOR] num)
    {
        color = [COLOR=Red]llGetColor[/COLOR](0);
        alpha = [COLOR=Red]llGetAlpha[/COLOR](0);
        [COLOR=Red]llSetText[/COLOR]("llSetText(''Text!'', " + ([COLOR=DarkGreen]string[/COLOR])color + ", " +
        [COLOR=Red]llGetSubString[/COLOR](([COLOR=DarkGreen]string[/COLOR])alpha,0,2) + ");",color,alpha);
        
        [COLOR=Red]llSay[/COLOR](0,"\n\nllSetText(*Text!*, " + ([COLOR=DarkGreen]string[/COLOR])color + ", " +
        [COLOR=Red]llGetSubString[/COLOR](([COLOR=DarkGreen]string[/COLOR])alpha,0,2) + ");\n\n* Sternchen unbedingt durch Gaensefuesschen ersetzen!");
    }
    [COLOR=RoyalBlue]on_rez[/COLOR]([COLOR=DarkGreen]integer[/COLOR] st)
    {
        [COLOR=Red]llResetScript[/COLOR]();
    }
}
Sollte sich an dieser stelle ein erfahrener Scripter wundern, warum ich den float alpha abschneide und auf eine stelle hinterm komma reduziere.
Bitte wieder nach ganz oben Scrollen (Sinnvolle Werte).


Die verwendung des Tools ist ganz einfach.
Dazu rezze lediglich einen Prim, in diesem Fall einen Kegel und stelle die Textureigenschaft auf ganz hell und lege das script rein.

Warum ganz hell?
Der prim und der Hovertext sind dann optisch in farbe und helligkeit identisch.



Im folgenden Bild kann man sehr gut erkennen das ich mich fuer die Farbe gruen entschieden und die PrimFarbe entsprechend geaendert habe.



Die Farbe ist nun eingestellt und das Baumenue kann geschlossen werden.
sobald der Prim jetzt geklickt wird erscheint der entsprechende Hovertext.
Im Chat erscheint der gleiche Text, ebenfalls als kompletter befehl.



Mit einem Unterschied, es war mir nicht moeglich die Gaensefuesschen im Chat zu uebertragen.
Darum muessen die Sternchen beim Kopieren des befehls in ein Script mit "" Gaensefuesschen ersetzt werden.
Es reicht aber auch, nur den Farbcode zu kopieren, sofehrn im eigentlichen Script schon der Befehl forhanden ist.

Update ohne Sternchen: Beitrag 4



Hatte ich erwaehnt das man Hovertext in mehrere Zeilen unterteilen kann?
Nein?
Ok, dann jetzt. :cool:
Zum teilen des Textes gebe ohne leerzeichen einfach folgende zeichen ein \n und schreibe direkt danach weiter.

Beispiel:
Code:
[COLOR=Red]llSetText[/COLOR]("Zeile 1\nZeile 2\nZeile 3", <1.00000, 1.00000, 1.00000>, 1.0);
Ergebniss:
Zeile 1
Zeile 2
Zeile 3

Boah, haett nicht gedacht das es so viel wird, is doch nur nen Hovertext. :lol:

PS: Ergaenzungen sind auch hier wieder erwuenscht.

LG
Dae
 
Und zu den Gänsefüsschen einfach \" in dem string schreiben

Code:
string text  = "wechsel die farbe des Prims, dann klick den Prim";
vector color = <1,1,1>;
float alpha  = 1.0;
default
{
    state_entry()
    {
        llSetTexture("40ca82a1-c00d-39db-6c7d-ec7d48df4de3",ALL_SIDES);
        llSetText(text, color, alpha);
    }
    touch_start(integer num)
    {
        color = llGetColor(0);
        alpha = llGetAlpha(0);
        llSetText("llSetText([COLOR="Red"]\"Text!\"[/COLOR], " + (string)color + ", " +
        llGetSubString((string)alpha,0,2) + ");",color,alpha);
        
        llSay(0,"\n\nllSetText([COLOR="Red"]\"Text!\"[/COLOR], " + (string)color + ", " +
        llGetSubString((string)alpha,0,2) + ");");
    }
    on_rez(integer st)
    {
        llResetScript();
    }
}


Gruß Simon
 
Danke Simon

Manchmal sieht man halt den Wald vor lauter Baeume nemma.
Glaubst net wie lange ich da geraezelt hab und net drauf gekommen bin.
Irgendwo steckte immer der Wurm drin. :shock:

LG
Dae
 
Joar passiert immer wieder mal *g*

Interessant wäre nun noch die Ergänzung wie man den Text der als Hovertext dort steht auch wieder auslesen kann.
;)

Gruß Simon
 
@ Simon

ganz einfach, so.
Code:
[COLOR=Purple]default[/COLOR]
{
    [COLOR=DeepSkyBlue]state_entry[/COLOR]()
    {
        [COLOR=Red]llSetText[/COLOR]("test x1",<1,1,1>,1);
    }
    [COLOR=DeepSkyBlue]touch_start[/COLOR](integer total_number)
    {
        [COLOR=DarkGreen]list[/COLOR] tex = [COLOR=Red]llGetLinkPrimitiveParams[/COLOR]([COLOR=Blue]LINK_THIS[/COLOR],[[COLOR=Blue]PRIM_TEXT[/COLOR]]);
        [COLOR=DarkGreen]string[/COLOR] text = [COLOR=Red]llList2String[/COLOR](tex, 0);
        [COLOR=DarkGreen]vector[/COLOR] color = [COLOR=Red]llList2Vector[/COLOR](tex, 1);
        [COLOR=DarkGreen]float[/COLOR] alpha = [COLOR=Red]llList2Float[/COLOR](tex, 2);
        [COLOR=Red]llSay[/COLOR](0,"llSetText(\"" + ([COLOR=DarkGreen]string[/COLOR])text + "\", " + ([COLOR=DarkGreen]string[/COLOR])color + ", " +  ([COLOR=DarkGreen]string[/COLOR])alpha +");");
    }
}
LG
Dae
 
Oder statt so

Code:
list tex = llGetLinkPrimitiveParams(LINK_THIS,[PRIM_TEXT]);

dann so

Code:
list tex = llGetPrimitiveParams([PRIM_TEXT]);


Gruß Simon

PS: Ich spar mir das anmalen :>
 

Users who are viewing this thread

Zurück
Oben Unten