04.03.2024, 00:06
(Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2024, 11:26 von Manfred Aabye.)
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
Ich habe die fehlende Rotation hinzugefügt.
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.0, 0.0, 1.0>; // Ändere diese Werte, um die Position deines Avatars anzupassen.
// rotation localrot = ZERO_ROTATION; // Rotationsposition des Avatars abschalten.
rotation localrot = llEuler2Rot(<90, 0, -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(target, localrot);
// Animationen im Inventar sammeln
integer num_anims = llGetInventoryNumber(INVENTORY_ANIMATION);
integer i;
for (i = 0; i < num_anims; ++i) {
string anim_name = llGetInventoryName(INVENTORY_ANIMATION, i);
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_KEY) used = 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_animations, llFloor(llFrand(llGetListLength(male_animations))));
} else if (gender == "female") {
chosen_anim = llList2String(female_animations, llFloor(llFrand(llGetListLength(female_animations))));
} else {
chosen_anim = llList2String(unknown_animations, llFloor(llFrand(llGetListLength(unknown_animations))));
}
osAvatarPlayAnimation(user, chosen_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(user, chosen_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(user, chosen_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.
sowie direkt sichtbar und begehbar sind, als wäre es aus einem Guss.