Teleporter per script einbauen

thelight
Hallo zusammen,

ich bräuchte einen einfachen skript um einen teleporter per script in einer map einzubauen.(Also ohne den radiant zu benutzen)

Ich habe soweit hier bisschen gesucht und habe folgendes gefunden:
Teleporter Guid

Leider finde ich das schon zu kompliziert für mich, könnte vlt jemand einen kompletten skript bereit stellen, so wie er es im Anhang in dem thread oben ist, aber eben mit allen bestandteilen, sprich position des triggers, radius des triggers, origin und ohne diese guid sache, sondern jeder der eben beim teleporter "F" drückt, wird teleportiert. Die Koordinaten kann ich natürlich selber setzen.

Ich würde es sehr schätzen, danke im vorraus.
serthy
Hey,

ich bin etwas eingerostet, aber ich probiers nochmal smile

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
teleporter()
{
    startPos = ( );
    endPos = ( 100 );

    triggerRadius 100;
    triggerHeight 100;
    triggerPos startPos + ( triggerHeight );

    trigger spawn"trigger_radius" triggerPos triggerRadius triggerHeight );

    for( ; ; )
    {
        trigger waittill"trigger" player );

        if( !isDefinedplayer ) || !isPlayerplayer ) )
            continue;
        else if( player.sessionstate != "playing" || !isAliveplayer ) )
            continue;
        else if( !player useButtonPressed() )
            continue;

        player setOriginendPos );

        player iPrintLnBold"Teleport" );
    }
}


allerdings wird dir nicht angezeigt, bitte "F" drücken, das wär etwas mehr aufwand
thelight
Danke erstmal für deine Mühe. Irgendwie klappt es nicht, kann sein das ich etwas falsch gemacht habe. Der Skript funktioniert zwar im Developer 2, aber man wird nicht teleportiert.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
teleporter()
{
    startPos = ( 128 224 , -84 ); //Start Position vom Telepoter, also gilt dies auch als die position des Triggers!?
    endPos = ( 564 , -68 824 );  //End Position vom Teleporter

    triggerRadius 48;
    triggerHeight 16;
    triggerPos startPos + ( triggerHeight ); //Was passiert hier genau? Durch das startPos wird ja die position des triggers bereits definiert, wozu ist das ( 0 , 0 , triggerHeight / 2 ); Die höhe ist ja auch schon vorher definiert.

    trigger spawn"trigger_radius" triggerPos triggerRadius triggerHeight );

    for( ; ; )
    {
        trigger waittill"trigger" player );

        if( !isDefinedplayer ) || !isPlayerplayer ) )
            continue;
        else if( player.sessionstate != "playing" || !isAliveplayer ) )
            continue;
        else if( !player useButtonPressed() )
            continue;

        player setOriginendPos );

        player iPrintLnBold"Teleport" );
    }
}



Bitte nochmal den Skript genauer erklären und evt. schreiben, wo was rein muss. Danke.
serthy
Der trigger hat sein origin nicht in der Mitte, sondern am unteren Rand:

daher das - /2 um den Trigger in der Mitte zu positionieren.

Du musst natürlich die Funktion irgendwo aufrufen:, da es mapspezifisch ist, am besten ganz oben in der main() funktion deiner mapname.gsc:
php:
1:
2:
3:
4:
main()
{
    level thread teleporter();
}


Dann kannst du bei jedem Schritt ein iPrintLn() einfügen, um zu sehen, wo du bist, was funktioniert und was nicht:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
main()
{
    level thread teleporter();
}

teleporter()
{
    iPrintLn"" );

    startPos = ( 128 224 , -84 ); //Start Position vom Telepoter, also gilt dies auch als die position des Triggers!?
    endPos = ( 564 , -68 824 );  //End Position vom Teleporter

    triggerRadius 48;
    triggerHeight 16;
    triggerPos startPos - ( triggerHeight ); //Was passiert hier genau? Durch das startPos wird ja die position des triggers bereits definiert, wozu ist das ( 0 , 0 , triggerHeight / 2 ); Die höhe ist ja auch schon vorher definiert.

    trigger spawn"trigger_radius" triggerPos triggerRadius triggerHeight );

    iPrintLn"" );

    for( ; ; )
    {
        trigger waittill"trigger" player );

        iPrintLn"getriggert" );

        if( !isDefinedplayer ) || !isPlayerplayer ) )
        {
            iPrintLn"continue: player is not a real player" );
            continue;
        }
        else if( player.sessionstate != "playing" || !isAliveplayer ) )
        {
            iPrintLn"continue: player is not playing" );
            continue;
        }
        else if( !player useButtonPressed() )
        {
            iPrintLn"continue: player not pressed F" );
            continue;
        }

        player setOriginendPos );

        player iPrintLnBold"Teleport" );
    }
}
thelight
Vielen dank! Jetzt funktionierts, lag wohl daran das ich net f gedrückt habe? ka xD
thelight
Was müsste geändert werden damit das nicht als use touch funktioniert, sondern als multiple trigger, also man berührt den trigger und wird teleportiert?

Danke.
serthy
php:
1:
2:
3:
4:
5:
else if( !player useButtonPressed() )
{
    iPrintLn"continue: player not pressed F" );
        continue;
}


Das löschen/auskommentieren
thelight
Vielen dank serthy!
thelight
Hallo,

ich hätte nochmal eine Frage hierzu. Das iprintinbold, was müsste gemacht werden damit es das z.B. 1 oder 2 mal zeigt, wenn man auf dem trigger ist. Zumindestens so, dass man nun weiß, dass man F drücken kann.

Wenn man das so wie im skript mit dem iprint macht, dann spamt es das fenster ohne ende.

Da das Hand Symbol wohl zu viel arbeitet braucht, würde ich mich auch über die Möglichkeit mit einem Saybold freuen.

Danke falls jemand helfen kann.
serthy
Probier mal das:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
main()
{
    level thread teleporter();
}

teleporter()
{
    iPrintLn"" );

    startPos = ( 128 224 , -84 ); //Start Position vom Telepoter, also gilt dies auch als die position des Triggers!?
    endPos = ( 564 , -68 824 );  //End Position vom Teleporter

    triggerRadius 48;
    triggerHeight 16;
    triggerPos startPos - ( triggerHeight ); //Was passiert hier genau? Durch das startPos wird ja die position des triggers bereits definiert, wozu ist das ( 0 , 0 , triggerHeight / 2 ); Die höhe ist ja auch schon vorher definiert.

    trigger spawn"trigger_radius" triggerPos triggerRadius triggerHeight );

    iPrintLn"" );

    for( ; ; )
    {
        trigger waittill"trigger" player );

        iPrintLn"getriggert" );

        if( !isDefinedplayer ) || !isPlayerplayer ) )
        {
            iPrintLn"continue: player is not a real player" );
            continue;
        }
        else if( player.sessionstate != "playing" || !isAliveplayer ) )
        {
            iPrintLn"continue: player is not playing" );
            continue;
        }

        monitorPlayerplayer trigger );

        if( !player useButtonPressed() )
        {
            iPrintLn"continue: player not pressed F" );
            continue;
        }

        player setOriginendPos );

        player iPrintLnBold"Teleport" );
    }
}

monitorPlayerplayer trigger )
{
    player endon"disconnect" );

    if( isDefinedplayer.touching_trigger ) )
        return;

    player iPrintLn"Drücke [F]" );

    player.touching_trigger trigger;

    while( true )
    {
        if( player.sessionstate != "playing" || !isAliveplayer ) )
        {
            break;
        }
        else if( !player isTouchingtrigger ) )
        {
            break;
        }

        wait0.05 );
    }

    player.touching_trigger undefined;
}
thelight
Hey,

hab es so probiert, es zeigt das saybold an, wenn man auf dem trigger ist, jedoch funktioneirt der teleporter irgendwie unregelmäßig, bzw. selten auf glück. Des weiteren, wenn ich auf dem trigger bin und z.b. wieder weg gehe, spamt es plötzlich den saybold.
serthy
Ich habe leider Win10 installiert und CoD2 startet nicht .. :/ also geght nur eine Ferndiagnose mal wieder ^^

Schreib mal in Zeile 38 ein thread davor:

php:
1:
thread monitorPlayerplayer trigger );


das hatte ich übersehen, ansonsten muss ich noch einmal genauer nachsehen grosses Grinsen
thelight
Hat funktioniert, vielen dank!

Zusätzlich sollte man noch das wait( 0.05 ); zu wait( 2 ); oder so ändern, dann spamt es nicht, wenn man nicht f drückt und weg vom trigger geht.
serthy
Mhhh, scheint wohl doch nicht so zu klappen.. :/
Der Sinn der neuen Funktion war es eigentlich, das dem Spieler nur einmal beim betreten des Triggers was angezeigt werden soll, die 0.05 waren eigentlich schon so eingeplant
thelight
Verstehe. Dennoch ist es nun völlig ok, vielen dank! Augenzwinkern