Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Gender Poseball
#1
Gender Poseball
Ein Poseball das 3 Geschlechter kennt:
male_animationsname
female_animationsname
unknown_animationsname
der Anfang ist die Geschlechterkennung/Zuweisung.
Es werden einfach eure Animationen in das Prim kopiert und das Geschlecht vorgesetzt.
Es ist eigentlich ganz einfach zu handhaben.
Die Animation umbenennen zum Beispiel von „sit1 female“ in „female_sit1“
genauso bei den male_ und unknown_ Animationen vorgehen
und diese in den Poseball kopieren (Bitte keine Leerzeichen).
Anschließend die Animationsposition einstellen „vector target = <0.0, 0.0, 1.0>;“ Breite, Tiefe und Höhe.
Ich habe mal 3 Beispiele und ein paar Animationen zum Testen in meinem Grid zum Mitnehmen hingestellt.
http://openmanniland.de:8002/ Welcome

Ein Anwendungsbeispiel wäre eine Couch mit 6 male Animationen, 6 female Animationen, 1 unknown Animation.
Beim Setzen wird dann geschaut, welches Geschlecht der/die/das sich setzende hat
und eine entsprechende Zufallsanimation wird abgespielt.

gender_poseball.lsl
PHP-Code:
vector target = <0.00.01.0>; // Ändere diese Werte, um die Position deines Avatars anzupassen.
// rotation localrot = ZERO_ROTATION; // Rotationsposition des Avatars abschalten.
rotation localrot llEuler2Rot(<900, -90>*DEG_TO_RAD); // Rotationsposition des Avatars setzen.
list male_animations// Liste für männliche Animationen
list female_animations// Liste für weibliche Animationen
list unknown_animations// Liste für das dritte Geschlecht Animationen
integer used// Als Flagge verwendet, um zu bestimmen, was das Skript tun soll.
key user// Hier wird der Schlüssel des Benutzers gespeichert, der den Poseball benutzt
string chosen_anim// Hier wird die ausgewählte Animation gespeichert

default
{
    
state_entry()
    {
        
llSitTarget(targetlocalrot);
        
        
// Animationen im Inventar sammeln
        
integer num_anims llGetInventoryNumber(INVENTORY_ANIMATION);
        
integer i;
        for (
0num_anims; ++i) {
            
string anim_name llGetInventoryName(INVENTORY_ANIMATIONi);
            if (
llSubStringIndex(anim_name"male_") == 0) {
                
male_animations += anim_name;
            } else if (
llSubStringIndex(anim_name"female_") == 0) {
                
female_animations += anim_name;
            } else if (
llSubStringIndex(anim_name"unknown_") == 0) {
                
unknown_animations += anim_name;
            }
        }
        
        if (
male_animations == [] && female_animations == [] && unknown_animations == []) {
            
state error// Gehe und warte, bis sich das Inventar geändert hat.
        
} else { // Ansonsten...
            
llOwnerSay("Gefundene Animationen: Männlich: " + (string)llGetListLength(male_animations) + ", Weiblich: " + (string)llGetListLength(female_animations) + ", Unbekannt: " + (string)llGetListLength(unknown_animations)); // Bestätige, dass sich Animationen im Inventar befinden
        
}
    }
 
    
changed(integer change)
    {
        if (
change CHANGED_LINK// Wird ausgelöst, wenn jemand auf den Poseball sitzt. Wenn du dich hinsetzt, wirst du tatsächlich mit dem Ball verlinkt.
        
{
            if(!
used)
            {
                
used TRUE;
                
user llAvatarOnSitTarget();
                if(
user == NULL_KEYused FALSE// Stelle sicher, dass wirklich jemand auf dem Poseball sitzt
                
llSetAlpha(0.0,ALL_SIDES); // Verstecke den Poseball, wenn darauf gesessen wird
                
osAvatarStopAnimation(user"sit"); // Stoppe die Standard-Sitzanimation (WICHTIG!)
                
                // Geschlecht des Benutzers abrufen
                
string gender osGetGender(user);
                
                
// Zufällige Animation auswählen und abspielen
                
if (gender == "male") {
                    
chosen_anim llList2String(male_animationsllFloor(llFrand(llGetListLength(male_animations))));
                } else if (
gender == "female") {
                    
chosen_anim llList2String(female_animationsllFloor(llFrand(llGetListLength(female_animations))));
                } else {
                    
chosen_anim llList2String(unknown_animationsllFloor(llFrand(llGetListLength(unknown_animations))));
                }
                
osAvatarPlayAnimation(userchosen_anim);  // Und starte die gewählte Animation.
                
state running// Wechseln in den Zustand "running", um das Abspielen der Animation zu verfolgen
            
} else {
                
used FALSE;
                
llSetAlpha(1.0,ALL_SIDES); // Mache den Poseball wieder sichtbar, wenn der Benutzer aufsteht
                
osAvatarStopAnimation(userchosen_anim); // Stoppe die Animation, wenn der Benutzer aufsteht.
                
user NULL_KEY// Wahrscheinlich überflüssig, aber wir möchten sicherstellen, dass der Wert für ''user'' leer ist.
            
}
        }
 
        if(
change CHANGED_INVENTORY)
        {
            
llResetScript(); // Setze das Skript zurück, wenn sich das Inventar geändert hat.
        
}
    }
}

state running
{
    
state_entry()
    {
        
// Hier kannst du weitere Aktionen durchführen, wenn das Animation abgespielt wird
    
}

    
on_rez(integer start_param)
    {
        
llResetScript();
    }

    
changed(integer change)
    {
        if(
change CHANGED_LINK)
        {
            
used FALSE;
            
llSetAlpha(1.0,ALL_SIDES); // Mache den Poseball wieder sichtbar, wenn der Benutzer aufsteht
            
osAvatarStopAnimation(userchosen_anim); // Stoppe die Animation, wenn der Benutzer aufsteht.
            
user NULL_KEY// Wahrscheinlich überflüssig, aber wir möchten sicherstellen, dass der Wert für ''user'' leer ist.
            
llSleep(0.1);
            
state default;
        }
    }
}

state error
{
    
state_entry()
    {
        
llOwnerSay("Dieser Poseball enthält keine Animationen. Bitte füge eine hinzu.");
    }
 
    
changed(integer change)
    {
        if(
change CHANGED_INVENTORY)
        {
            
llOwnerSay("Änderung erkannt. Initialisiere.");
            
llResetScript();
        }
    }


Ich habe die fehlende Rotation hinzugefügt.
Ein Metaversum sind viele kleine Räume, die nahtlos aneinander passen,
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.



Zitieren


Nachrichten in diesem Thema
Gender Poseball - von Manfred Aabye - 04.03.2024, 00:06
RE: Gender Poseball - von Manfred Aabye - 06.03.2024, 11:38

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste