Daemonika Nightfire
Forumsgott/göttin
hi,
manch anderen Scriptern hier im Forum werden sich bei diesem Beitrag zwar die Fussnaegel aufrollen, aber mir geht es ums verstehen und nicht um Vokabeln.
Eine Variable setzt sich aus 3 Komponenten zusammen Daten Typ, Typen Name, Daten Wert.
Typen gibt es im LSL nur 7 verschiedene (siehe unten), bei den Namen sind deiner Fantasie keine Grenzen gesetzt und der Wert richtet sich nach dem Format bzw. Anforderung.
- key -
Ein key kann alles sein.
Alles was du in SL siehst hat eine UUID, angefangen bei den Avataren ueber Prims, Sculpties, Mesh, Texturen, Sounds und so weiter.
Bei der Verwendung von Keys muss dir im Vorfeld schon klar sein, um was es sich bei der UUID handelt. Zum Beispiel kannst du keinen Avatar Key im llSetTexture verwenden, da die Flaeche dann garantiert grau bleibt.
Beispiel:
- string -
Der string ist das gaengige Format fuer die Komunikation.
Sei es als Chat Meldung, Notecard Inhalt, Email, Linked Message und sogar Hovertext.
Das bedeutet allerdings auch, das ausnahmslos jede Variable die du an ein anderes Object oder an einen Avatar senden moechtest, erst in einen string umgewandelt werden muss.
Handelt es sich bei dem Empfaenger um ein Script, muss dieser string von diesem Script wieder zurueck konvertiert werden. (mehr zum Thema Konvertieren spaeter...)
Beispiel:
- integer -
Der integer wird haeufig zum zaehlen und rechnen verwendet.
Allerdings steht der integer noch fuer viele andere Dinge wie: LinkNumber, ObjectFace, ChatChannel, ListenIndex, LindenDollar und vieles mehr wo absolute werte verlangt werden.
Im folgenden Beispiel kannst du schon sehen wie fuer eine Chat-Ausgabe ein integer zu einem string konvertiert wird.
Beispiel:
- float -
Mit float berechnet man stellen hinterm Komma.
Dabei spielt es keine Rolle wie viele Stellen hinterm Komma angezeigt werden, sobald im LSL eine Zahl mit einem punkt getrennt wird handelt es sich um einen float.
Bei den seltsamen minimal und maximal Werten bezueglich des floats empfehle ich einfach sich an den Vorgaben der einzelnen Befehle zu richten.
Zum Beispiel kann ein Alpha Wert immer nur zwischen min. 0.0 und max. 1.0 liegen. Minuswerte werden hierbei nicht unterstuetzt. Das selbe gilt fuer Glow, Lautsterke, Farbcodes und so weiter.
Beispiel:
- vector -
Der vector kann in LSL fuer verschiedene Dinge eingesetzt werden.
Beispielsweise als x,y,z Achse fuer Positionen und Rotationen (llTargetOmega) oder als Koordinaten fuer die Positionen von Avataren oder Objecten auf einer Region/Linkset.
Weiterhin wird der vector fuer Farbcodes und Textur-Offsets verwendet. Beim Textur-Offest ist allerdings zu beachten, das die Z Achse ignoriert wird, weil Texturen halt nur 2 dimensional sind.
Bei genauerer Betrachtung wird man feststellen, das es sich bei den 3 Werten innerhalb des vectors jeweils um einen einzelnen float handelt.
Beispiel:
- rotation -
Die rotation ist das eigentliche Format, womit der Server Objectausrichtungen verarbeitet.
Wenn man zum Beispiel ein Object per Script um 90° drehen moechte, kann der server mit dem uns verstaendlichen 3 dimensionalen vector ueberhaupt nichts anfangen.
Eine rotation im Kopf berechnen und von Hand einstellen ist nahezu unmoeglich, darum kann man dafuer den verstaendlichen vector zwar benutzen, muss ihn aber fuer den server in Quaternion umrechnen. Wer Migraene haben moechte, kann sich gerne die Berechnungen von rotation (cuaternion) auf der Wiki http://wiki.secondlife.com/wiki/Quaternion ansehen, ich verwende lieber folgenden Befehl fuer die Umrechnung. llSetRot(llEuler2Rot(<0, 0, 90> * DEG_TO_RAD));
Natuerlich kann man diesen befehl auch rueckwaerts verwenden, einen entsprechenden Konverter kannst du hier finden: http://wiki.secondlife.com/wiki/Use...cripts/Tools_(de)#.2ADS.2A_Rotation_Converter
Beispiel:
- list -
Listen koennen alles enthalten.
In einer Liste kann man alles speichern, kniffelig wird es erst wenn man diese Daten wieder einzeln heraus ziehen moechte.
Bei listen ist wichtig zu wissen, das der Stellenwert der Variablen (integer ListenIndex) immer mit 0 beginnt.
Hat man zum Beispiel 5 Eintraege in einer liste, beginnt man mit 0 zu zaehlen und endet bei 4. (5 Eintraege = [0,1,2,3,4])
Beispiel:
(So etwas macht man normalerweise nicht fuer einen Hovertext, aber ich fand es ein gutes Beispiel verschiedene Daten in einer Liste darzustellen.)
Wie nun Variablen im einzelnen verwendet werden koennen und in wie fern sich die Gueltigkeit der Variablen im Script verhaelt habe ich auf deutsch in der offiziellen Wiki http://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Variable_Tutorial beschrieben.
Nachtrag:
Eines hatte ich noch vergessen zu erwaehnen.
Fuer den Fall das du dir nicht sicher bist, welche Variablen von einem Befehl akzeptiert werden und in welcher Reihenfolge sie eingetragen werden muessen, zeige einfach mit der Maus direkt auf den entsprechenden Befehl. Die Befehle haben einen MouseOver Effect und zeigen dir ein kleines Popup mit den noetigen Informationen.
LG
Dae
manch anderen Scriptern hier im Forum werden sich bei diesem Beitrag zwar die Fussnaegel aufrollen, aber mir geht es ums verstehen und nicht um Vokabeln.
Eine Variable setzt sich aus 3 Komponenten zusammen Daten Typ, Typen Name, Daten Wert.
Typen gibt es im LSL nur 7 verschiedene (siehe unten), bei den Namen sind deiner Fantasie keine Grenzen gesetzt und der Wert richtet sich nach dem Format bzw. Anforderung.
Code:
[COLOR="#FF8C00"]// typ Name = Wert;[/COLOR]
key UUID = "61ee201a-81cf-4322-b9a8-a5eb8da777c2"; [COLOR="#FF8C00"]// bloecke = 8-4-4-4-12[/COLOR]
string Text = "bla bla bla";
integer Ganzzahl = 1; [COLOR="#FF8C00"]// moegliche Werte min. −2147483648 - 0 - max. +2147483647[/COLOR]
float Kommawert = 1.0; [COLOR="#FF8C00"]// moegliche Werte min. 1.401298464E-45 - max. 3.402823466E+38 (bitte was?)[/COLOR]
vector DreierFloat = <1.0,1.0,1.0>; [COLOR="#FF8C00"]// Dreidimensional fuer Farben, **Rotationen, TexturOffset, Positionen.[/COLOR]
rotation Quaternion = <1.0,1.0,1.0,1.0>; [COLOR="#FF8C00"]// **Vierdimensional fuer Rotationen Ausschliesslich[/COLOR]
list Kontainer = ["61ee201a-81cf-4322-b9a8-a5eb8da777c2", "blablabla", 1, 1.0, <1.0,1.0,1.0>, <1.0,1.0,1.0,1.0>];
- key -
Ein key kann alles sein.
Alles was du in SL siehst hat eine UUID, angefangen bei den Avataren ueber Prims, Sculpties, Mesh, Texturen, Sounds und so weiter.
Bei der Verwendung von Keys muss dir im Vorfeld schon klar sein, um was es sich bei der UUID handelt. Zum Beispiel kannst du keinen Avatar Key im llSetTexture verwenden, da die Flaeche dann garantiert grau bleibt.
Beispiel:
Code:
key TextureUUID = "cc41beb3-0d13-3e05-df36-e00caa3372a7";
default
{
touch_start(integer total_number)
{
llSetTexture(TextureUUID, ALL_SIDES);
}
}
- string -
Der string ist das gaengige Format fuer die Komunikation.
Sei es als Chat Meldung, Notecard Inhalt, Email, Linked Message und sogar Hovertext.
Das bedeutet allerdings auch, das ausnahmslos jede Variable die du an ein anderes Object oder an einen Avatar senden moechtest, erst in einen string umgewandelt werden muss.
Handelt es sich bei dem Empfaenger um ein Script, muss dieser string von diesem Script wieder zurueck konvertiert werden. (mehr zum Thema Konvertieren spaeter...)
Beispiel:
Code:
string Message = "Hello, Avatar!";
default
{
touch_start(integer total_number)
{
llSay(0, Message);
}
}
- integer -
Der integer wird haeufig zum zaehlen und rechnen verwendet.
Allerdings steht der integer noch fuer viele andere Dinge wie: LinkNumber, ObjectFace, ChatChannel, ListenIndex, LindenDollar und vieles mehr wo absolute werte verlangt werden.
Im folgenden Beispiel kannst du schon sehen wie fuer eine Chat-Ausgabe ein integer zu einem string konvertiert wird.
Beispiel:
Code:
integer Count = 0;
default
{
touch_start(integer total_number)
{
Count += 1;
llSay(0, (string)Count);
}
}
- float -
Mit float berechnet man stellen hinterm Komma.
Dabei spielt es keine Rolle wie viele Stellen hinterm Komma angezeigt werden, sobald im LSL eine Zahl mit einem punkt getrennt wird handelt es sich um einen float.
Bei den seltsamen minimal und maximal Werten bezueglich des floats empfehle ich einfach sich an den Vorgaben der einzelnen Befehle zu richten.
Zum Beispiel kann ein Alpha Wert immer nur zwischen min. 0.0 und max. 1.0 liegen. Minuswerte werden hierbei nicht unterstuetzt. Das selbe gilt fuer Glow, Lautsterke, Farbcodes und so weiter.
Beispiel:
Code:
float Alpha = 0.5;
default
{
touch_start(integer total_number)
{
llSetAlpha(Alpha, ALL_SIDES);
}
}
- vector -
Der vector kann in LSL fuer verschiedene Dinge eingesetzt werden.
Beispielsweise als x,y,z Achse fuer Positionen und Rotationen (llTargetOmega) oder als Koordinaten fuer die Positionen von Avataren oder Objecten auf einer Region/Linkset.
Weiterhin wird der vector fuer Farbcodes und Textur-Offsets verwendet. Beim Textur-Offest ist allerdings zu beachten, das die Z Achse ignoriert wird, weil Texturen halt nur 2 dimensional sind.
Bei genauerer Betrachtung wird man feststellen, das es sich bei den 3 Werten innerhalb des vectors jeweils um einen einzelnen float handelt.
Beispiel:
Code:
vector Color = <1.0, 0.0, 0.0>;
default
{
touch_start(integer total_number)
{
llSetColor(Color, ALL_SIDES);
}
}
- rotation -
Die rotation ist das eigentliche Format, womit der Server Objectausrichtungen verarbeitet.
Wenn man zum Beispiel ein Object per Script um 90° drehen moechte, kann der server mit dem uns verstaendlichen 3 dimensionalen vector ueberhaupt nichts anfangen.
Eine rotation im Kopf berechnen und von Hand einstellen ist nahezu unmoeglich, darum kann man dafuer den verstaendlichen vector zwar benutzen, muss ihn aber fuer den server in Quaternion umrechnen. Wer Migraene haben moechte, kann sich gerne die Berechnungen von rotation (cuaternion) auf der Wiki http://wiki.secondlife.com/wiki/Quaternion ansehen, ich verwende lieber folgenden Befehl fuer die Umrechnung. llSetRot(llEuler2Rot(<0, 0, 90> * DEG_TO_RAD));
Natuerlich kann man diesen befehl auch rueckwaerts verwenden, einen entsprechenden Konverter kannst du hier finden: http://wiki.secondlife.com/wiki/Use...cripts/Tools_(de)#.2ADS.2A_Rotation_Converter
Beispiel:
Code:
vector Grad = <0, 0, 90>;
default
{
touch_start(integer total_number)
{
llSetRot(llEuler2Rot(Grad * DEG_TO_RAD));
}
}
- list -
Listen koennen alles enthalten.
In einer Liste kann man alles speichern, kniffelig wird es erst wenn man diese Daten wieder einzeln heraus ziehen moechte.
Bei listen ist wichtig zu wissen, das der Stellenwert der Variablen (integer ListenIndex) immer mit 0 beginnt.
Hat man zum Beispiel 5 Eintraege in einer liste, beginnt man mit 0 zu zaehlen und endet bei 4. (5 Eintraege = [0,1,2,3,4])
Beispiel:
Code:
list Hovertext = ["bla bla bla",<1.000,0.000,0.000>,1.0];
default
{
touch_start(integer total_number)
{
string text = llList2String(Hovertext, 0);
vector color = llList2Vector(Hovertext, 1);
float alpha = llList2Float(Hovertext, 2);
llSetText(text, color, alpha);
}
}
Wie nun Variablen im einzelnen verwendet werden koennen und in wie fern sich die Gueltigkeit der Variablen im Script verhaelt habe ich auf deutsch in der offiziellen Wiki http://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Variable_Tutorial beschrieben.
Nachtrag:
Eines hatte ich noch vergessen zu erwaehnen.
Fuer den Fall das du dir nicht sicher bist, welche Variablen von einem Befehl akzeptiert werden und in welcher Reihenfolge sie eingetragen werden muessen, zeige einfach mit der Maus direkt auf den entsprechenden Befehl. Die Befehle haben einen MouseOver Effect und zeigen dir ein kleines Popup mit den noetigen Informationen.
LG
Dae
Zuletzt bearbeitet: