06.03.2024, 11:38
Während das Sessel/Stuhl Skript (siehe oben) super läuft, habe ich mit Sofa/Couch/Bank Probleme.
Hier sollen dann 3 Personen mit einem Skript dazu gebracht werden, sich in einer Reihe hinzusetzen.
Das Setzen ab der 2.Person sieht aber willkürlich aus und die Rotation stimmt auch nicht.
Mein Sofa/Couch/Bank Test Skript:
Hier sollen dann 3 Personen mit einem Skript dazu gebracht werden, sich in einer Reihe hinzusetzen.
Das Setzen ab der 2.Person sieht aber willkürlich aus und die Rotation stimmt auch nicht.
Mein Sofa/Couch/Bank Test Skript:
PHP-Code:
vector target1 = <-1.0, -0.5, -1.0>; // Position for first avatar
vector target2 = <0.0, -0.5, -1.0>; // Position for second avatar
vector target3 = <1.0, -0.5, -1.0>; // Position for third avatar
rotation localrot = ZERO_ROTATION; // Rotationsposition des Avatars abschalten.
rotation localrot1 = llEuler2Rot(<90, 0, -90>*DEG_TO_RAD); // Rotation position of first avatar
rotation localrot2 = llEuler2Rot(<90, 0, -90>*DEG_TO_RAD); // Rotation position of second avatar
rotation localrot3 = llEuler2Rot(<90, 0, -90>*DEG_TO_RAD); // Rotation position of third avatar
list male_animations; // List for male animations
list female_animations; // List for female animations
list unknown_animations; // List for animations of other genders
integer used; // Flag used to determine script behavior
key user; // Key of the user sitting on the poseball
string chosen_anim; // Chosen animation
default
{
state_entry()
{
llSitTarget(target1, localrot1); // Set sit target for first avatar
llSitTarget(target2, localrot2); // Set sit target for second avatar
llSitTarget(target3, localrot3); // Set sit target for third avatar
// Collect animations in inventory
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; // Go to and wait until inventory changes
} else {
llOwnerSay("Found animations: Male: " + (string)llGetListLength(male_animations) + ", Female: " + (string)llGetListLength(female_animations) + ", Unknown: " + (string)llGetListLength(unknown_animations)); // Confirm animations in inventory
}
}
// Event triggered when someone sits on the poseball
changed(integer change)
{
if (change & CHANGED_LINK)
{
if(!used)
{
used = TRUE;
user = llAvatarOnSitTarget();
if(user == NULL_KEY) used = FALSE; // Ensure someone is sitting on the poseball
llSetAlpha(0.0,ALL_SIDES); // Hide the poseball when someone sits on it
osAvatarStopAnimation(user, "sit"); // Stop default sit animation (IMPORTANT!)
// Get gender of user
string gender = osGetGender(user);
// Select and play a random animation
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); // Play the chosen animation
state running; // Switch to "running" state to monitor animation playback
} else {
used = FALSE;
llSetAlpha(1.0,ALL_SIDES); // Make the poseball visible again when user stands up
osAvatarStopAnimation(user, chosen_anim); // Stop animation when user stands up
user = NULL_KEY; // Ensure user value is empty
}
}
if(change & CHANGED_INVENTORY)
{
llResetScript(); // Reset script if inventory changes
}
}
}
state running
{
state_entry()
{
// Additional actions can be performed when the animation is playing
}
on_rez(integer start_param)
{
llResetScript();
}
changed(integer change)
{
if(change & CHANGED_LINK)
{
used = FALSE;
llSetAlpha(1.0,ALL_SIDES); // Make the poseball visible again when user stands up
osAvatarStopAnimation(user, chosen_anim); // Stop animation when user stands up
user = NULL_KEY; // Ensure user value is empty
llSleep(0.1);
state default;
}
}
}
state error
{
state_entry()
{
llOwnerSay("This poseball does not contain any animations. Please add some.");
}
changed(integer change)
{
if(change & CHANGED_INVENTORY)
{
llOwnerSay("Change detected. Initializing.");
llResetScript();
}
}
}
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.