Vielen Dank, freut mich das doch einige Spass hatten.
Gestern war unser Script eigentlich ehr Nebensache und lediglich Mittel zum Zweck.
Wichtiger waren gestern die Reihenfolge des Verlinken, die Komplexytaet des AniMesh und viele andere Dinge die es zu beachten lohnt.
Wie zum Beispiel, das man die Komplexytaet von AniMesh ganz einfach ueber (Avatar / Avatar-Befinden / Informationen ueber Avatar-Komplexytaet anzeigen) ueberpruefen kann.
Das bedeutet, das AniMesh in dem Augenblick als Avatare gewertet und bei zu hoher Komplexytaet sogar als Jelly-Bean dargestellt werden.
Dann ist mir gestern aufgefallen, das unser einfacher Schalter leicht in Vergessenheit geraten ist.
Drum moechte ich ihn hier noch einmal ganz ohne Schnik Schnak auffuehren.
Diesen Schalter benoetigen wir immer wieder, weil es einfach die einfachste und verstaendlichste Methode zum ein und aus schalten unserer Funktionen ist.
Code:
integer Schalter = FALSE; // Globale Variable fuer den Schalter (Status aus).
default
{
touch_start(integer total_number) // Wird beim klicken ausgefuehrt
{
if(Schalter == FALSE) // prueft Schalter ( Status aus? )
{
Schalter = TRUE; // setzt den Status des Schalters auf an.
}
else if(Schalter == TRUE) // prueft Schalter ( Status an? )
{
Schalter = FALSE; // setzt den Status des Schalters auf aus.
}
}
}
Dann moechte ich hier noch einmal erwaehnen, das "Abgucken" ausdruecklich erlaubt ist.
Wenn jemand wo anders, sei es in der Wiki oder in aelteren Scripten nach sieht und es auch noch richtig abschreibt, weiss ich derjenige hat es verstanden.
Von da an ist der naechste Schritt zum selber schreiben in greifbarer naehe.
Nun aber unser AniMesh Script des gestrigen Kurses.
Code:
integer Schalter = FALSE; // Globale Variable fuer den Schalter (Status aus).
string Animation = ""; // Global angelegter Name fuer die Animation.
default
{
state_entry() // Eingang, wird bei jedem Reset oder Speichern ausgefuehrt.
{
if(llGetInventoryNumber(INVENTORY_ANIMATION) > 0) // Abfrage ob mehr als keine Animation im Objekt liegt.
{
// Setzt hier den Namen der ersten Animation in die globale Variable ein.
Animation = llGetInventoryName(INVENTORY_ANIMATION,0);
}
}
touch_start(integer total_number) // Wird beim klicken ausgefuehrt
{
if(Animation != "") // Prueft ob ein Name in der globalen Variable eingetragen ist.
{
if(Schalter == FALSE) // prueft Schalter ( Status aus? )
{
Schalter = TRUE; // setzt den Status des Schalters auf an.
llStartObjectAnimation(Animation); // Startet die Animation im AniMesh.
}
else if(Schalter == TRUE) // prueft Schalter ( Status an? )
{
Schalter = FALSE; // setzt den Status des Schalters auf aus.
llStopObjectAnimation(Animation); // Stopt die Animation im AniMesh.
}
}
}
changed(integer ch) // Wird immer ausgefuehrt, wenn sich am Object irgend etwas aendert.
{
if(ch & CHANGED_INVENTORY) // Prueft ob sich der Inhalt des Objects aendert.
{
llResetScript(); // resettet das Script.
}
}
on_rez(integer Dae) // Wird immer ausgefuehrt, wenn das Object gerezzt wird, auch als Attachment.
{
llResetScript(); // resettet das Script.
}
}
Ja, bei diesem Script handelt es sich tatsaechlich um unseren einfachen Schalter, den wir lediglich um die notwendigen Funktionen erweitert haben, die Animation im Object automatisch auszulesen und per Klick an/aus zu schalten.
Viel mehr kann unser aktuelles Script nicht.
Natuerlich moechte ich euch nicht den Shop vorenthalten, dessen Avatare wir gestern als AniMesh missbraucht haben.
https://marketplace.secondlife.com/de-DE/stores/122082
Die Komplexytaet der meisten Avatare ist ideal fuer AniMesh-NPC's und fuer unsere Zwecke perfekt.
LG
Dae