• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Das Möbeltürklappen Problem

A

Andre Geiger

Guest
Huhu ihr lieben

Wir haben ein kleines Problem mit selbstgebauten Möbel die wir in einem Shop anbieten wollen. Ich habe die Möbel mit Klappen und Türen versehen die natürlich das machen sollen was so ein Ding am besten kann: auf und zu gehen :)

Das Problem ist das nicht alles mit dem Rest von den Möbeln verlinkt werden kann. Die Türen bestehen aus zwei Prims: einmal die eigentliche Türe und dann noch mal aus einem Griff. Wird alles verlinkt geht zwar die Türe auf aber der Griff sieht gar nicht ein mitzugehen und verharrt in der alten Position.

Eine Möglichkeit wäre das Möbel unverlinkt anzubieten, aber dann entwickelt sich der Schrank zum unerwarteten IKEA Bausatz wenn der Käufer das Ding im Wohnzimmer dreht oder verschiebt.

Am liebsten wäre mir wenn der Schrank tatsächlich komplett verlinkt ist und wo sich auch Tür und Griff lieb haben und ein Team bilden. Hat da jemand eine Idee?

Grüße Andre
 

Danziel Lane

Superstar
Der Trick für Klapptüren liegt nicht beim Skripten, sondern beim Bauen.

Man beschneidet einfach die Box, die das Türblatt bilden soll auf die Hälfte.

Das geht mit Path Cut oder mit dem recht neuen Slice Begin and End.

Danach läuft eine der Achsen der Box an einer Kante entlang und ein einfaches Klapp-Skript kann die Klappe auf und zu machen. Und wenn die Klappe dann nicht Rootprim ist, funktioniert das für jede Klappe in einem Objekt einzeln.


Edit:
Sorry, ich hatte erst mal das mit dem Griff übersehen. Das macht die Sache komplizierter. Die Frage ist, ob du den Griff per Textur auf die Klappe zeichnest, dann gilt meine obige Antwort.
Andere Lösung wäre, den Griff ebenso zu bauen wie die Klappe (so beschneiden, dass die Achse im Drehpunkt ist) und die beiden per Linkmessage gemeinsam drehen lassen.
 
A

Andre Geiger

Guest
Zum besseren Verständniss hab ich ich mal ein paar Fotos von den Möbel gemacht um die es geht :)

Die Türen von den Wohnzimmermöbel bestehen je aus zwei prims:

moebel.jpg



Die Schubladen von dem Badezimmermöbeln sind da schon aufwändiger und bestehen aus noch mehr Prims. Hier mal Fotos von den Schubladen eine Seite geschlossen und die andere auf:

badard.jpg
 

Jhary Priestly

Aktiver Nutzer
Wundervoll, auch wenn komplett unnötig. Spar Dir so viele Bilder bitte für die Werbe-Threads ;-))

Wie Du Dein Problem lösen kannst, hat Danziel sehr klar gesagt (im Edit): Du kombinierst zwei Scripte, die einander bedingen. Da Du zwar Bilder drin hast, aber im Scripting-Forum nicht drauf eingehst, wie Du bei einer 1-Prim-Lösung rangehst, vermutet Danziel offenbar (wie ich auf Anhieb auch), daß Du als Basis das sagenumwobene Timeless-Door-Script verwendest, da ist das Verbinden bereits vorgesehen (erfordert aber noch etwas Arbeit)
 

Fe McCarey

Superstar
Hi

Es gibt spezielle "Rezz-Script-Pakete", dabei hat man ein Hauptmöbelstück, Schubladen, Türen usw werden da dann reingelegt. Auf Touch öffnet sich ein Menü, der Kunde kann alles aufbauen und "festsetzen". Wenn umgezogen wird, einfach alles wieder ins Hauptmöbelstück einpacken lassen.

Vorteil, man ist nicht mehr drauf angewiesen alles zu verlinken, und wenn der Kunde ein Stück verschiebt bzw verdreht, funzen auch weiterhin alle üren und schubladen in die richtige Richtung. Blöde wenn nämlch plötzlich die schublade seitlich aus dem regal kommt.

viele Grüße

Fe

P.S. Sieht verdammt Primlastig aus, Alternativ wären auch sculpted-Teile möglich.
 
A

Andre Geiger

Guest
@Jhary Priestly: stimmt ich hätte die ganzen unterschwelligen Werbetexte, Preise und ingame landmarks die auf den Fotos versteckt sind besser tarnen sollen...könnte ja nicht ahnen das sich so ein Fuchs wie du die Bilder anschaut....


manche Leute haben echt Langeweile ^^
 
A

Andre Geiger

Guest
du das mach ich 12 Stunden am Tag und geht bei entsprechenden Träumen sogar Nachts weiter löl
 

Marty Flyer

Aktiver Nutzer
Eine weitere Möglichkeit wäre es, die Türen sowohl im offenen als auch geschlossenem Zustand anzubringen und mittels llSetAlpha und llSetLinkAlpha sichtbar und unsichtbar zu machen, je nach Zustand. Man muss sie ja nicht unbedingt rotieren oder gleiten sehen.
 

Danziel Lane

Superstar
Ja, das ist auch eine Idee, Marty.
Dabei nicht vergessen, die offene Version im unsichtbaren Zustand auch phantom zu machen, sonst rennen die Avatare immer davor.

Die koordinierten Skripte sind bei so komplexen Möbeln schon eher recht tricksig, weil sich die diversen Klappen und Schubladen ja nicht untereinander stören dürfen.

Da würde ich eher die anderen Lösungen ins Auge fassen.
 

Marty Flyer

Aktiver Nutzer
Das mit dem Phantom geht leider nicht, wegen der Verlinkung. Das Problem des Dagegenlaufens sollte nicht soo erheblich sein.

Und bei Möbeln mit wenigen Türen sollte es auch nicht allzu tricksig werden.
 

Carra Fargis

Aktiver Nutzer
Okay, es ist noch früh und ich bin noch nicht ganz wach ^^ aber ich versuch mal ne Lösung zu posten.

Ich hab ein paar Häuser gebaut, die auch völlig verlinkt sind. Die Balkontür besteht dabei aus 3 Prims, die sich alle gleichzeitig bewegen sollen.
So bin ich vorgegangen:

Zuerst alles verlinken, so wie es sein soll.
Dann die einzelnen Linknummern der zu bewegenden Teile rausfinden:
Code:
touch_start(integer total_number)
    {
       llSay(0,(string)llDetectedLinkNumber(0));
    }

Dann arbeite ich mit einem Script im Parent und kleinen Scripten in den Prims der Tür. Hab es so gewählt, da die Prims sich so (im Idealfall) gleichzeitig bewegen, anstatt nacheinander, wenn man alles mit einem Script und per Linknummern verschiebt.

Ok, das Script im Parent sieht wie folgt aus (mal auf's nötigste reduziert):
Code:
default
{
    state_entry()
    {
    }

    touch_start(integer total_number)
    {
        if(llDetectedLinkNumber(0)==4||llDetectedLinkNumber(0)==5||llDetectedLinkNumber(0)==6)
        {
            llMessageLinked(LINK_SET, 0, "balkon", llDetectedKey(0));
        }
    }
}
Soll heißen, wenn einer der drei Prims der Balkontür geklickt wird, reagiert es und schickt eine Nachricht an die Scripte in der Türe.
Du könntest dann pro Schublade bzw. Schranktür eine unterschiedliche Nachricht rausschicken (schub1, schub2, tuer1, tuer2 ;) ).

Nun das "kleine" Script für die beweglichen Prims:
Zuerst musst du die Position und die Rotation der Teile ermitteln. Das machst du so:
Code:
state_entry()
    {
        llSay(0,"Pos: "+(string)llGetLocalPos());
        llSay(0,"Rot: "+(string)llGetLocalRot());
    }
Die ermittelten Werte trägst du dann einfach im jeweiligen Script oben bei der Variable "zu" ein. Dann schnell im verlinkten Zustand die Türe/Schublade so anbringen, wie sie später sein soll und wieder Position und Rotation ermitteln. Das dann bei "auf" einfügen ;)
In meinem Script gibt es den Fall der Rotation grad nicht, drum füg ich einfach mal Platzhalter ohne Werte ein.
So sieht dann das Script für die einzelnen Prims aus:
Code:
vector pos_zu = <9.90000, -6.62500, 8.97500>;
vector pos_auf = <9.64999, -4.05998, 8.97500>;
vector rot_zu;
vector rot_auf;
integer offen;

default
{
    state_entry()
    {
        offen=0;
        llSetPos(pos_zu);
        llSetLocalRot(rot_zu);
    }
    link_message(integer sender_num, integer num, string str, key id)
    {
        if(str=="balkon")
        {
            if(offen==0)
            {
                llSetPos(pos_auf);
                llSetLocalRot(rot_auf);
                offen=1;
            }
            else
            {
                llSetPos(pos_zu);
                llSetLocalRot(rot_zu);
                offen=0;
            }   
        }
    }
    on_rez(integer param)
    {
        offen=0;
        llSetPos(pos_zu);
        llSetLocalRot(rot_zu);
    }
}

State entry und on rez sorgen erstmal dafür, dass die Schubladen und Türen immer zu sind, wenn man die Möbel rezt bzw. resettet.
Bei Linkmessage wird nun die vorhin abgeschickte Botschaft ausgewertet. Fühlt sich das Script angesprochen (siehe "balkon" bzw. dann deine Nachricht schub1 etc.), bewegt es nun die Teile zu den vorher festgelegten Positionen. Die Variable "offen" klärt dabei den aktuellen zustand der Tür/Schublade ab. 0 ist zu, 1 ist offen.

Wenn sich die Rotation nicht ändert, dannst die jeweiligen Befehle und Variablen einfach rauslöschen, genauso wenn die Position gleich bleibt. Spart einfach ein bisschen Scriptarbeit.

Jut, ich glaub, das war erstmal alles wichtige :)
Wenn ich was vergessen habe ooooder man mich nicht versteht (wie gesagt, bin noch müde ^^), einfach fragen.
 

Aktive User in diesem Thread

Oben Unten