|
|
Teleporter per script einbauen |
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
Teleporter per script einbauen |
|
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
Codemeister
Dabei seit: 29.07.2010
Beiträge: 628
|
|
Hey,
ich bin etwas eingerostet, aber ich probiers nochmal
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 = ( 0 , 0 , 0 );
endPos = ( 0 , 0 , 100 );
triggerRadius = 100;
triggerHeight = 100;
triggerPos = startPos + ( 0 , 0 , triggerHeight / 2 );
trigger = spawn( "trigger_radius" , triggerPos , 0 , triggerRadius , triggerHeight );
for( ; ; )
{
trigger waittill( "trigger" , player );
if( !isDefined( player ) || !isPlayer( player ) )
continue;
else if( player.sessionstate != "playing" || !isAlive( player ) )
continue;
else if( !player useButtonPressed() )
continue;
player setOrigin( endPos );
player iPrintLnBold( "Teleport" );
}
} |
|
allerdings wird dir nicht angezeigt, bitte "F" drücken, das wär etwas mehr aufwand
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
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 + ( 0 , 0 , triggerHeight / 2 ); //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 , 0 , triggerRadius , triggerHeight );
for( ; ; )
{
trigger waittill( "trigger" , player );
if( !isDefined( player ) || !isPlayer( player ) )
continue;
else if( player.sessionstate != "playing" || !isAlive( player ) )
continue;
else if( !player useButtonPressed() )
continue;
player setOrigin( endPos );
player iPrintLnBold( "Teleport" );
}
} |
|
Bitte nochmal den Skript genauer erklären und evt. schreiben, wo was rein muss. Danke.
|
|
|
|
|
serthy
Codemeister
Dabei seit: 29.07.2010
Beiträge: 628
|
|
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 - ( 0 , 0 , triggerHeight / 2 ); //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 , 0 , triggerRadius , triggerHeight );
iPrintLn( "" );
for( ; ; )
{
trigger waittill( "trigger" , player );
iPrintLn( "getriggert" );
if( !isDefined( player ) || !isPlayer( player ) )
{
iPrintLn( "continue: player is not a real player" );
continue;
}
else if( player.sessionstate != "playing" || !isAlive( player ) )
{
iPrintLn( "continue: player is not playing" );
continue;
}
else if( !player useButtonPressed() )
{
iPrintLn( "continue: player not pressed F" );
continue;
}
player setOrigin( endPos );
player iPrintLnBold( "Teleport" );
}
} |
|
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von serthy: 13.02.2016 14:21.
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
Vielen dank! Jetzt funktionierts, lag wohl daran das ich net f gedrückt habe? ka xD
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
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.
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von thelight: 31.05.2016 17:47.
|
|
|
|
|
serthy
Codemeister
Dabei seit: 29.07.2010
Beiträge: 628
|
|
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 - ( 0 , 0 , triggerHeight / 2 ); //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 , 0 , triggerRadius , triggerHeight );
iPrintLn( "" );
for( ; ; )
{
trigger waittill( "trigger" , player );
iPrintLn( "getriggert" );
if( !isDefined( player ) || !isPlayer( player ) )
{
iPrintLn( "continue: player is not a real player" );
continue;
}
else if( player.sessionstate != "playing" || !isAlive( player ) )
{
iPrintLn( "continue: player is not playing" );
continue;
}
monitorPlayer( player , trigger );
if( !player useButtonPressed() )
{
iPrintLn( "continue: player not pressed F" );
continue;
}
player setOrigin( endPos );
player iPrintLnBold( "Teleport" );
}
}
monitorPlayer( player , trigger )
{
player endon( "disconnect" );
if( isDefined( player.touching_trigger ) )
return;
player iPrintLn( "Drücke [F]" );
player.touching_trigger = trigger;
while( true )
{
if( player.sessionstate != "playing" || !isAlive( player ) )
{
break;
}
else if( !player isTouching( trigger ) )
{
break;
}
wait( 0.05 );
}
player.touching_trigger = undefined;
} |
|
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
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.
|
|
|
|
|
thelight
5-Minuten-Ei
Dabei seit: 12.02.2016
Beiträge: 14
|
|
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.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|