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

TP will nicht

susi Repine

Aktiver Nutzer
Huhu,

ich hab einen TP gescripted, der mich irgendwie zum Wahnsinn treibt (Skript siehe unten).

Wenn ich den TP benutze lande ich oft in der Ecke des Sim's, irgendwo tief unten auf dem Grund. Manchmal klappt es allerdings auch.

Kann mir einer sagen was ich da ändern muss?

LG
Susi



vector Ziel;
integer ComChannel = -2134535;


warpPos( vector destpos )
{ //R&D by Keknehv Psaltery, 05/25/2006
//with a little pokeing by Strife, and a bit more
//some more munging by Talarus Luan
//Final cleanup by Keknehv Psaltery
// Compute the number of jumps necessary
integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1;
// Try and avoid stack/heap collisions
if (jumps > 100 )
jumps = 100; // 1km should be plenty
list rules = [ PRIM_POSITION, destpos ]; //The start for the rules list
integer count = 1;
while ( ( count = count << 1 ) < jumps)
rules = (rules=[]) + rules + rules; //should tighten memory use.
llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );
if ( llVecDist( llGetPos(), destpos ) > .001 ) //Failsafe
while ( --jumps )
llSetPos( destpos );
}

doTeleport( vector destpos )
{
integer jumps = (integer) (llVecDist(destpos, llGetPos()) / 10.0) + 1;
if (jumps > 100) {
integer hops = jumps / 100;
while (hops > 0) {
hops--;
warpPos(destpos);
}
}
warpPos(destpos);
}




default
{





on_rez(integer param)
{
llResetScript();
}



changed(integer change)
{
if (change & CHANGED_LINK)
{
if(llAvatarOnSitTarget() != NULL_KEY)
{

vector homeVector = llGetPos();
doTeleport(Ziel);
llSleep(0.2);
llUnSit(llAvatarOnSitTarget());
llDie();


}
}

}



state_entry()
{
llListen( ComChannel,"", "","");
llSitTarget(<0,0,0.5>, ZERO_ROTATION);
llSetClickAction(1);
llSetTimerEvent(15);
}

listen(integer channel, string name, key id, string message)
{
Ziel = (vector)(message);

}


timer()
{
llSay(0,"Timeout");
llDie();
}


}
 
Ich bin nicht komplett durch das Script gegangen, dieses warppos ist für meine Belange nicht wichtig, aber eins ist zu beachten:

Das Script tped dich auf das Ziel in lokalen Achsen des Objectes in dem es steckt. Die Rotation dessen musst du natürlich berücksichtigen.
 
Das Script tped dich auf das Ziel in lokalen Achsen des Objectes in dem es steckt. Die Rotation dessen musst du natürlich berücksichtigen.

Susi und Rotaionen..zwei Welten /me seufzt
Oder, ums ehrlich zu sagen. Ich versteh nicht so recht was du meinst.

Das Script steckt in einem Zylinder, der gerezt wird und sein Ziel im listen Event bekommt.


LG
Susi
 
Ich habs mal ausprobiert, bei mir funktioniert das einwandfrei.

Was mir aufgefallen ist, das warppos in der aktuellen wiki ist jetzt ein bischen anders als in deiner Version.

Ich habs mal mit festem Ziel gemacht, anstatt mit chat input (erste Zeile). Aber das ist einfach zu ändern.
Code:
vector target=<241, 4, 696>;

warpPos( vector destpos )
{
    integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1;
    if (jumps > 411)
        jumps = 411;
    list rules = [ PRIM_POSITION, destpos ];
    integer count = 1;
    while ( ( count = count << 1 ) < jumps)
        rules = (rules=[]) + rules + rules;
    llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );
    if ( llVecDist( llGetPos(), destpos ) > .001 )
        while ( --jumps )
            llSetPos( destpos );
}


doTeleport( vector destpos )
{
    integer jumps = (integer) (llVecDist(destpos, llGetPos()) / 10.0) + 1;
    if (jumps > 100) {
        integer hops = jumps / 100;
        while (hops > 0) {
            hops--;
            warpPos(destpos);
        }
    }
    warpPos(destpos);
}
default
{
    state_entry()
    {
        llSetClickAction(1);
        llSitTarget(<0,0,0.5>, ZERO_ROTATION);
    }


    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            if(llAvatarOnSitTarget() != NULL_KEY)
            {
                vector homeVector = llGetPos();
                doTeleport(target);
                llSleep(0.2);
                llUnSit(llAvatarOnSitTarget());
            }
        }
    }
}
 
Hmm, den einzigen Unterschied den ich jetzt sehe ist:

if (jumps > 411)
jumps = 411;

Dürfte aber doch mit dem Problem nichts zu tun haben?!

Im übrigen gehen momentan beide Versionen.
Das ist ja auch das was ich nicht verstehe. Manchmal gehts und manchmal nicht. In letzter Zeit wars aber übrwiegen..geht nicht..
Allerdings läuft wohl seit kurzem auch eine neue Serverversion auf dem Sim hier.


LG
Susi
 
Hi,

llSitTarget darf, glaub ich, nicht weiter als 300m weit weg sein, probleme gibt es auch wenn man auf eine andere Parzelle TPn will.

Nachdem man llSitTarget festgelegt hat, sollte man das Object auch nicht mehr verschieben, oder man erneuert ds Target über das change_event

Gruß
Feith
 
So und jetzt ist es soweit, ich lande in der Simecke und das wars. Mit beiden Versionen. :-(

@Feith: Der TP geht nicht übers Sittarget. Wäre sonst auch ein sehr kurzer TP. ;-)

LG
Susi
 
ach mensch, schon wieder geantwortet ohne richtig zu lesen, hatte llSitTarget(<0,0,0.5>, ZERO_ROTATION); gesehen und gar nich drüber nachgedacht. So ein Teleporter, der das Object auf die Target-Position setzt, hab ich bei in meinem Club, der funktioniert aber. Ich komm heut Abend aber erst online, dann kann ich dir gern den code geben, vieleicht hilt er dir soweit, das du dein Script berichtigen kannst, bzw ausprobieren, ob das mit meinem auch so ist.


evtl kannst du vorher auch mal das ausprobieren. Vieleicht funktionierts mit der Variante besser.

while(llGetLocalPos() != destpos)
{
llSetPrimitiveParams([PRIM_POSITION, destpos] );
}

grüße
 
Ziel = (vector)(message);

Das dürfte das Problem sein, wenn message nicht als Vektor verstanden wird, wird das zum ZERO_VECTOR, und das ist nun mal (meist in der Erde) ganz "links unten", also Südwesten.

Also mal den Input rausgeben lassen ( llOwnerSay( (string)Ziel ); ) und kontrollieren
 
Ziel = (vector)(message);

Das dürfte das Problem sein, wenn message nicht als Vektor verstanden wird, wird das zum ZERO_VECTOR, und das ist nun mal (meist in der Erde) ganz "links unten", also Südwesten.

Also mal den Input rausgeben lassen ( llOwnerSay( (string)Ziel ); ) und kontrollieren

Südwesten passt mal. ;-)

Wobei ich gerade eher vermute, dass die message mit dem Vector zu früh gesendet wird und der TP die gar nicht mitbekommt.

Danke dir (Input ausgeben lass)
LG
Susi
 
kurze Rückmeldung.

Ist wirklich so, dass der Vector nicht richtig ankam. Hab jetzt eine Pause im sendenden Script und es klappt wunderbar.

Vielen Dank für eure Hilfe
LG
Susi
 

Users who are viewing this thread

Zurück
Oben Unten