• 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.

1 Prim - Multi Destination Teleporter mit llDetectedTouchST ?

Archon Short

Forumsgott/göttin
Hi, ich hab mir mal gedacht daß ich heute meine Simteleporter einmal überarbeite.

Textur mit 15 Zielen drauf gebastelt, Script geschrieben und nu hapert´s bei mir grad.

Das Ziel änder ich per llDetectedTouchST, aber wie mach ich es daß der Avatar da auch direkt hinteleportiert wird?
Wenn ich die Click Action, von Touch(default) auf Sit änder, dann nimmt er keine neuen Koordinaten an, und ohne Sit teleportiert das Script nicht.

Hat da grad mal jemand nen Tip für mich?

Greetz Archon ohne "s" *gg
 
Kurz zum Verständnis :

du willst das beim touch event der ava automatisch teleportiert wird zu einer bestimmten location auf der gleichen(!) sim?

Wenns bei Sit auch ned geht : du hast aber schon im state entry

Code:
llSitTarget(<0.0, 0.0, 0.1>, ZERO_ROTATION);

drin oder ? Also sprich nicht 3 mal 0.0 :) oder ganz ohne "llSitTarget Init"
 
Zuletzt bearbeitet:
Nee, also daran liegt´s nicht.

Code:
[COLOR=#008000]vector[/COLOR] V_home = <220,55,1029>;
[COLOR=#008000]vector[/COLOR] V_destination_01 = <250,250,1029>;  [COLOR=#ffa07a]//left 1[/COLOR] 
[COLOR=#008000]vector[/COLOR]  V_destination_02 = <240,240,1029>;  [COLOR=#ffa07a]//left 2[/COLOR]
 [COLOR=#008000]vector[/COLOR] V_destination_03 = <230,230,1029>;  [COLOR=#ffa07a]//left 3[/COLOR]
  [COLOR=#008000]vector[/COLOR] V_destination_04 = <220,220,1029>;  [COLOR=#ffa07a]//left 4[/COLOR] 
[COLOR=#008000]vector [/COLOR]V_destination_05 = <210,210,1029>;   [COLOR=#ffa07a]//left 5[/COLOR]
[COLOR=#008000]vector[/COLOR] V_destination_06 = <200,200,1029>;   [COLOR=#ffa07a]//left 6[/COLOR]
[COLOR=#008000]vector [/COLOR] V_destination_07 = <190,190,1029>;  [COLOR=#ffa07a]//left 7[/COLOR]
[COLOR=#008000]vector [/COLOR]V_destination_08 = <180,180,1029>;   [COLOR=#ffa07a]//right 1[/COLOR]
[COLOR=#008000]vector[/COLOR] V_destination_09 = <170,170,1029>;   [COLOR=#ffa07a]// right 2[/COLOR] 
[COLOR=#008000]vector [/COLOR]V_destination_10 = <160,160,1029>;  [COLOR=#ffa07a]//right 3[/COLOR] 
[COLOR=#008000]vector [/COLOR]  V_destination_11 = <150,150,1029>;   [COLOR=#ffa07a]//right 4[/COLOR]
  [COLOR=#008000]vector [/COLOR]V_destination_12 = <140,140,1029>;   [COLOR=#ffa07a]//right 5[/COLOR]
   [COLOR=#008000]vector [/COLOR]V_destination_13 = <130,130,1029>;   [COLOR=#ffa07a]//right 6[/COLOR]
  [COLOR=#008000]vector[/COLOR] V_destination_14 = <120,120,1029>;   [COLOR=#ffa07a]//right 7[/COLOR]
[COLOR=#add8e6] 
[/COLOR][COLOR=#008000]vector [/COLOR]loc;



default
{
    state_entry()
    {
        llSitTarget(<0,0,0.1>,<0,0,0,1>);
        loc=V_home;
    }

    touch_start(integer total_number)
    {
        vector st = llDetectedTouchST(0);
        //llOwnerSay("X = "+(string)st.x);
        //llOwnerSay("Y = "+(string)st.y);
        //llOwnerSay("Face = "+(string)llDetectedTouchFace(0));
        if(llDetectedTouchFace(0)==4)
        {
            if(st.x > 0.75) //home
            {
                loc=V_home;
            }
            else if(st.y > 0.5) //left
            {
                if       (st.x < 0.750 && st.x > 0.656)  loc=V_destination_01;//left 1
                else if  (st.x < 0.656 && st.x > 0.552)  loc=V_destination_02;//left 2
                else if  (st.x < 0.552 && st.x > 0.446)  loc=V_destination_03;//left 3
                else if  (st.x < 0.446 && st.x > 0.340)  loc=V_destination_04;//left 4
                else if  (st.x < 0.340 && st.x > 0.237)  loc=V_destination_05;//left 5
                else if  (st.x < 0.237 && st.x > 0.132)  loc=V_destination_06;//left 6
                else if  (st.x < 0.132)                  loc=V_destination_07;//left 7
            }
            else if(st.y < 0.5) //right
            {
                if       (st.x < 0.750 && st.x > 0.656)  loc=V_destination_08;//right 1
                else if  (st.x < 0.656 && st.x > 0.552)  loc=V_destination_09;//right 2
                else if  (st.x < 0.552 && st.x > 0.446)  loc=V_destination_10;//right 3
                else if  (st.x < 0.446 && st.x > 0.340)  loc=V_destination_11;//right 4
                else if  (st.x < 0.340 && st.x > 0.237)  loc=V_destination_12;//right 5
                else if  (st.x < 0.237 && st.x > 0.132)  loc=V_destination_13;//right 6
                else if  (st.x < 0.132)                  loc=V_destination_14;//right 7
            }
        }
        else if(llDetectedTouchFace(0)==2)
        {
            if(st.x < 1-0.75) //home
            {
                loc=V_home;
            }
            else if(st.y < 0.5) //left
            {
                if       (st.x > 1-0.750 && st.x < 1-0.656)  loc=V_destination_01;//left 1
                else if  (st.x > 1-0.656 && st.x < 1-0.552)  loc=V_destination_02;//left 2
                else if  (st.x > 1-0.552 && st.x < 1-0.446)  loc=V_destination_03;//left 3
                else if  (st.x > 1-0.446 && st.x < 1-0.340)  loc=V_destination_04;//left 4
                else if  (st.x > 1-0.340 && st.x < 1-0.237)  loc=V_destination_05;//left 5
                else if  (st.x > 1-0.237 && st.x < 1-0.132)  loc=V_destination_06;//left 6
                else if  (st.x > 1-0.132)                  loc=V_destination_07;//left 7
            }
            else if(st.y > 0.5) //right
            {
                if       (st.x > 1-0.750 && st.x < 1-0.656)  loc=V_destination_08;//right 1
                else if  (st.x > 1-0.656 && st.x < 1-0.552)  loc=V_destination_09;//right 2
                else if  (st.x > 1-0.552 && st.x < 1-0.446)  loc=V_destination_10;//right 3
                else if  (st.x > 1-0.446 && st.x < 1-0.340)  loc=V_destination_11;//right 4
                else if  (st.x > 1-0.340 && st.x < 1-0.237)  loc=V_destination_12;//right 5
                else if  (st.x > 1-0.237 && st.x < 1-0.132)  loc=V_destination_13;//right 6
                else if  (st.x > 1-0.132)                  loc=V_destination_14;//right 7
            }
        }
        llOwnerSay("X = "+(string)loc);
    }

    changed(integer C)
    {
        key ID = llAvatarOnSitTarget();
        if(ID)
        {
            vector Return = llGetPos();
            llSetRegionPos(loc);
            llUnSit(ID);
            llSetRegionPos(Return);
            loc=V_home;
        }
    }
}
 
Zuletzt bearbeitet:
Nur mal ne Idee : mach mal aus deinem "change" mal ein

Code:
 if(change & CHANGED_LINK)
      {
            integer links = 0;
            if(llGetObjectPrimCount(llGetKey()) < (links = llGetNumberOfPrims()))
         {
                TELEPORT
         }
     }
 
Nee, daran liegt es ja nicht, das Script funktioniert so wie es geschrieben ins in allen Funktionen, aber man kann nicht "touch-sit"(changed) und "touch-touch"(touch_start) gleichzeitig haben.
Da liegt der Hase im Kornfeld begraben
 
Jaaaaa, wie's oft so ist im Leben, kann man nicht alles haben. Zumindest nicht gleichzeitig. Ich denk da bleibt Dir nix anderes übrig, als das Ding auf "touch" zu setzen, so dass man die Zielkoordinaten auswählen kann, und den Teleport dann über Rechtsklick und "Sit" im Menü zu machen. Also zwei Schritte.
 
So dann mal ne kleine Anregung von mir.

Mach doch im touch_start Event die Erfassung für den llDetectedTouchST(0) und ändere dort dann direkt den touch_default auf Sit und der touch_end Event führt dann den Sit aus.

Evtl musst du im touch_start nach ändern des touch_default direkt nen Statewechsel machen, damit der touch_default im touch_end greift.

Nur ne Idee. Ob´s wirklich funktioniert kann ich dir nicht sagen.

Gruss

Sam
 
Zuletzt bearbeitet:
Danke, das könnte was werden.
Ich hoff ja daß bald noch ein paar der neuen Funktionen freigegeben werden wie z.B. das Force-TP, das man von den Linden Realms Portalen kennt.
Aber immer Schritt für Schritt, jetzt will ich erstmal einfach nur wieder richtig starten und bin seit 2 Wochen fast schon wieder jeden Tag am scripten.
 
Falls nicht klappt kann man den Avatar evtl puschen. Andere Möglichkeit wäre dass man den Avatrar als Prim in Linkset behandelt und seine lokale Position setzt. Wie weit das gehen kann weiß ich aber nicht.

Zur Not kann der Teleporter auch diesen String flüstern oder via llRegionSayTo(avaKey, 0, text) auch persönnlich überbringen:

secondlife:///app/teleport/SimName/X/Y/Z

Man muss den Link dann nur im Chatverlauf anklicken und wird hinteleportiert fast wie bei dem ForceTP oder RLV-TP. Aber auf die ForceTP warte ich auch :)
 
Avatar als Teil des Linksets geht ja auch erst nach dem SIT.
Pushen geht nicht und die Sim hat nen Landepunkt, der immer an TP´t wird egal was man als Koordinate für nen eigenen TP gesagt bekommt.

Also alles noch bisserl schwierig aktuell :(
 
Einen Nutzer mit einem Klick an das Ziel zu befördern lässt sich zur Zeit nur mit "ein Prim pro Ziel" lösen.
Also Zielkarte in Raster aufteilen, mehrere Zielorttafeln anbieten,Karte mit "Teleport - Stecknadeln" versehen usw...
oder die Zweiklicklösung mit Karte (oder Menu) und Teleportprim zum Setzen.

soweit mein Kenntnissstand dazu.
viel Erfolg
 
ja, leider ist es so noch für uns alle, aber ich hab halt schon gesehen daß es mit Force TP klappt mit mehreren Zielen auf einem Prim ohne die zwei Klick Lösung.
Also heisst es wohl abwarten bis die Funktion endlich freigegeben wird
 
Force TP nach Linden Realms ist auch schwächer als Landepunkt. Zumindest hatte ich den Eindruck: Gerät man unter ein Stein (wird 'getötet'), wird man an einen Punkt teleportiert, zu dem man kommt wenn man auf die Sim per LM hin will. Und steine schicken via ForceTP. Kann aber sein (hoffe ich sehr,) dass Landepunkte nach Freigabe des ForceTP geschwächt werden.
 
Nein, geht auch nicht mit nem Statewechsel.
Da die clickaction erst mit einem neuen touch_start einsetzt und nicht beim touch_end.
 
Aktuell werd ich wohl die 2-Klick-Lösung beibehalten müssen.
ein erneuter touch_start um das touch-sit zu starten ist leider erst mit nem zweiten Klick möglich.
 

Users who are viewing this thread

Zurück
Oben Unten