Daemonika Nightfire
Forumsgott/göttin
huhu,
dieses mal moechte ich auf eine etwas unkonventionelle und fast in Vergessenheit geratene Methode Parameter zu speichern eingehen.
Die gaengigsten Methoden sind Notecards, Object-Name und Object-Description.
Notecards koennen sehr viele Daten speichern, da geht ne ganze Menge rein.
Bei Prim-Namen ist das Limit von 63 bytes UTF-8 sehr schnell erreicht. Deshalb weichen viele sehr gern auf die Object-Beschreibung (ObjectDesc) aus. Aber auch hier ist das Limit von 127 bytes UTF-8 hin und wieder nicht ausreichend.
Nun aber mal zum Hovertext.
Hier kann man sage und Schreibe 254 bytes UTF-8 speichern, doppelt so viel wie in einer Prim-Beschreibung (ObjectDesc) und genau so viel wie in einer einzelnen Zeile einer Notecard ausgelesen werden kann.
Vorteil bei dieser Methode: Die Daten koennen nicht so schnell aus Versehen geloescht oder ueberschrieben werden.
Nachteil bei dieser Methode: Die Daten koennen nicht so schnell ueberschrieben oder geloescht werden.
Ihr merkt schon, es ist ein Fluch und ein Segen zugleich.
Nun wird in der Wiki davor gewarnt, den Hovertext nicht fuer wichtige Daten zu verwenden.
Dem kann ich nur teilweise zustimmen, denn alles was man auch in einer Object-Beschreibung eintragen wuerde, kann man auch darin verwenden. Wichtige Daten sollte man aber sicherheitshalber im Script selber speichern, da die PrimitiveParameter eines objects von anderen Scripten bzw. Viewern ausgelesen werden koennen.
Kurz gesagt, ein Hovertext bietet keinen Geheimen Speicher.
Zudem gehen diese Daten bei einem Reset des Scriptes nicht verloren, da es sich beim Hovertext um Primitive-Parameter handelt, welche man ausschliesslcih mit einem Script veraendern kann.
Hier mal ein sehr kurzes Beispiel, wie man den Hovertext verwenden kann. Ganz wichtig dabei ist, das der letzte Wert im Befehl llSetText(... auf 0.0 eingestellt ist. Damit wird der Hovertext nur unsichtbar, aber nicht geloescht.
Dieses Script gibt nun selbst den unsichtbaren Hovertext vor und reagiert auf touch. Beim klicken gibt der touch Event genau das wieder, was im Hovertext eingetragen ist. Nun wird es interessant, den Befehl llSetText kann man auch ganz raus nehmen und mit einem separaten Script erzeugen.
Beim Folgenden Beispiel, verwende ich eine Schalter-Funktion um die Farbe des Prims zu veraendern. Dabei werden die Werte als string im text gespeichert und durch ein Sonderzeichen, welches nirgends vorkommt getrennt. Die Trennung ist wichtig, damit die einzelnen Werte unabhaengig voneinander ausgelesen werden koennen, obwohl es sich um einen einzigen String handelt.
Fuer normale Primitive-Parameter und Statusverwaltung ist der Hovertext nahezu ideal.
LG
Dae
dieses mal moechte ich auf eine etwas unkonventionelle und fast in Vergessenheit geratene Methode Parameter zu speichern eingehen.
Die gaengigsten Methoden sind Notecards, Object-Name und Object-Description.
Notecards koennen sehr viele Daten speichern, da geht ne ganze Menge rein.
Bei Prim-Namen ist das Limit von 63 bytes UTF-8 sehr schnell erreicht. Deshalb weichen viele sehr gern auf die Object-Beschreibung (ObjectDesc) aus. Aber auch hier ist das Limit von 127 bytes UTF-8 hin und wieder nicht ausreichend.
Nun aber mal zum Hovertext.
Hier kann man sage und Schreibe 254 bytes UTF-8 speichern, doppelt so viel wie in einer Prim-Beschreibung (ObjectDesc) und genau so viel wie in einer einzelnen Zeile einer Notecard ausgelesen werden kann.
Vorteil bei dieser Methode: Die Daten koennen nicht so schnell aus Versehen geloescht oder ueberschrieben werden.
Nachteil bei dieser Methode: Die Daten koennen nicht so schnell ueberschrieben oder geloescht werden.
Ihr merkt schon, es ist ein Fluch und ein Segen zugleich.
Nun wird in der Wiki davor gewarnt, den Hovertext nicht fuer wichtige Daten zu verwenden.
Dem kann ich nur teilweise zustimmen, denn alles was man auch in einer Object-Beschreibung eintragen wuerde, kann man auch darin verwenden. Wichtige Daten sollte man aber sicherheitshalber im Script selber speichern, da die PrimitiveParameter eines objects von anderen Scripten bzw. Viewern ausgelesen werden koennen.
Kurz gesagt, ein Hovertext bietet keinen Geheimen Speicher.
Zudem gehen diese Daten bei einem Reset des Scriptes nicht verloren, da es sich beim Hovertext um Primitive-Parameter handelt, welche man ausschliesslcih mit einem Script veraendern kann.
Hier mal ein sehr kurzes Beispiel, wie man den Hovertext verwenden kann. Ganz wichtig dabei ist, das der letzte Wert im Befehl llSetText(... auf 0.0 eingestellt ist. Damit wird der Hovertext nur unsichtbar, aber nicht geloescht.
Dieses Script gibt nun selbst den unsichtbaren Hovertext vor und reagiert auf touch. Beim klicken gibt der touch Event genau das wieder, was im Hovertext eingetragen ist. Nun wird es interessant, den Befehl llSetText kann man auch ganz raus nehmen und mit einem separaten Script erzeugen.
Code:
default
{
state_entry()
{
llSetText("hidden text", <1,1,1>, 0.0);
}
touch_start(integer total_number)
{
list Hovertext = llGetLinkPrimitiveParams(LINK_THIS, [PRIM_TEXT]);
string Text = llList2String(Hovertext, 0);
llSay(0,Text);
}
}
Beim Folgenden Beispiel, verwende ich eine Schalter-Funktion um die Farbe des Prims zu veraendern. Dabei werden die Werte als string im text gespeichert und durch ein Sonderzeichen, welches nirgends vorkommt getrennt. Die Trennung ist wichtig, damit die einzelnen Werte unabhaengig voneinander ausgelesen werden koennen, obwohl es sich um einen einzigen String handelt.
Code:
integer Schalter = 0;
default
{
state_entry()
{
llSetText("<1,0,0>|<0,1,0>", <1,1,1>, 0.0);
llSetColor(<1,1,1>, ALL_SIDES);
}
touch_start(integer total_number)
{
list Hovertext = llGetLinkPrimitiveParams(LINK_THIS, [PRIM_TEXT]);
list Text = llParseString2List(llList2String(Hovertext, 0), ["|"], []);
if(Schalter == 0)
{
Schalter = 1;
}
else if(Schalter == 1)
{
Schalter = 0;
}
string color = llList2String(Text, Schalter);
llSetColor((vector)color, ALL_SIDES);
}
}
Fuer normale Primitive-Parameter und Statusverwaltung ist der Hovertext nahezu ideal.
Ergaenzungen und Hinweise sind auch hier wieder erwuenscht.
LG
Dae
Zuletzt bearbeitet: