yoda
Ursprüngliche Vorlage von Marshall2006 auf MODSonline.com
Danke an Vernichter für´s Testen!
Überarbeitet und erweitert von OLD MAN WITH GUN - nun kann man mehr als nur ein JumpPad in die Map einbauen.
Danke an OLD MAN WITH GUN für die Mühe!
***
Lust ein wenig rumzuhüpfen?
Multiple Jump Pads im Quake III-Style

Erstelle als erstes mal Deine Landezone:

Erstelle nun einen Auslöser (= trigger): einfach einen Brush erstellen, während er markiert ist in der 2D-Ansicht die rechte Maustaste drücken und auswählen:
-> trigger -> multiple
Öffne anschließend das Entity-Fenster mit der Taste "N" - vergib anschließend folgende Werte:
Key: targetname
Value: jump

***
Origins (quasi "Übergänge" oder "Verbindungen")
Nun müssen noch die "Origins" gesetzt werden:
Klicke in der 2D-Ansicht mit der rechten Maustaste und wähle
-> script -> origin
Platziere es an der Stelle, von der Du abspringen möchtest:

Stelle sicher, daß es 4 Units über dem Untergrund liegt (hat mit dem Effekt zu tun).
Wähle nun zuerst den trigger_multiple an und dann das script_origin (Wichtig: Reihenfolge beachten, nicht anders herum!).
Drücke anschließend die Taste "W". Der trigger_multiple wird dadurch mit dem script_origin verbunden
(gekennzeichnet durch eine rote Linie mit einem Pfeil, der in Richtung script_origin zeigt).
Kopiere nun das script_origin und füge es 4x wieder ein.
Platziere sie z. B. so:

Wähle nun das erste script_origin an (den du eben mit dem trigger verbunden hast) und das erste script_origin in der Luft
(Wichtig: wieder Reihenfolge beachten) und drücke anschließend die Taste "W".
Damit ist jetzt der script_origin auf dem Boden mit dem ersten script_origin in der Luft verbunden (wieder durch rote Linie gekennzeichnet).
Das Gleiche machst du jetzt mit dem zuletzt verbundenen script_origin und dem nächsten in der Luft befindlichen script_origin (usw., bis alle script_origins wie auf dem vorherigen Bild miteinander verbunden sind.
Die script_origins stellen den Flugweg während des Sprunges dar.
Je mehr man hinzufügt, desto "weicher" wird der Flug.
Anmerkung:
Beachte die Höhendifferenz zwischen dem JumpPad und der Landezone!
***
Der Script:
Erstelle im Ordner /raw/maps/mp eine neue Textdatei und nenne diese dann in jump_pad.gsc um.
Füge in diese jump_pad.gsc dann folgenden Script ein:
jumper()
{
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
jumpx = getentarray ("jump","targetname");
for(i = 0; i < jumpx.size; i++)
jumpx[i] thread jump_pad_think();
}
jump_pad_think()
{
glow = getent (self.target, "targetname");
air1 = getent (glow.target, "targetname");
air2 = getent (air1.target, "targetname");
air3 = getent (air2.target, "targetname");
air4 = getent (air3.target, "targetname");
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1)
{
self waittill ("trigger",user);
if (user istouching(self))
{
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
wait 1;
user unlink();
wait 1;
}
}
}
Anschließend muss folgende Zeile noch in die eigene map.gsc eingefügt werden:
(unterhalb der Zeile maps\mp\_load::main();)
thread maps\mp\jump_pad::jumper();
Zu guter letzt muss dann noch folgende Zeile in der Zone-Datei eingetragen werden:
rawfile,maps/mp/jump_pad.gsc
***
Die Fluggeschwindigkeit anpassen:
= Die Geschwindigkeit mit der man zur Landezone befördert wird für jedes Origin.
Schau Dir folgende Zeile an:
air moveto (air1.origin, 1);
Um nun die Geschwindigkeit zu ändern einfach folgende Zahl anpassen:
air moveto (air1.origin, 1);
Spiele einfach ein wenig mit der Geschwindigkeit herum, könnte dann z. B. so aussehen:
air moveto (air1.origin, 2);
Oder so:
air moveto (air1.origin, .5);
Vielleicht aus so:
air moveto (air1.origin, .1);
Einfach ein wenig ausprobieren und testen.
***
Die "Zeit in der Luft" anpassen
= Eine Pause in der man kurz wartet bis es zum nächsten Origin weitergeht.
Wirf einen Blick in die jump_pad.gsc und zwar auf folgende Zeilen:
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
Nach jeder Bewegung, z. B. bei "air moveto (air1.origin, 1);"...
... gibt es eine kurze Wartezeit.
Wenn Du genau hinschaust siehst Du, dass die letzten beiden Übergänge von der Geschwindigkeit her ein wenig erhöht wurden, um es ein wenig "realistischer" zu gestalten... Spiel einfach selbst ein bisschen mit der Geschwindigkeit herum.
Anmerkung:
Wenn Du die Wartezeit zu kurz setzt, kannst Du einen Übergang komplett herausnehmen und musst mit einer Störung des JumpPads rechnen. Also stelle lieber sicher, dass Du dem Spieler genug Zeit für die Bewegung lässt...
... um zum nächsten Origin zu gelangen, aber trotzdem die Zeit gering hälst, damit kein "in der Luft hängen" entsteht.
Dies hängt von der jeweiligen Entfernung der origins ab.
Wie im folgenden z. B.:
air moveto (air1.origin, 1);
wait 1;
Das könntest Du ändern in:
air moveto (air1.origin, 1);
wait .3;
Auf diese Weise gäbe es einen kürzeren "Time Out" in der Luft.
****
Benötigt man mehr als ein JumpPad, so muss man in der Map lediglich den trigger_multiple zusammen mit den dazugehörigen script_origins kopieren und an einer anderen Stelle in der Map wieder einfügen.
***
Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10868
***
Danke an Vernichter für´s Testen!
Überarbeitet und erweitert von OLD MAN WITH GUN - nun kann man mehr als nur ein JumpPad in die Map einbauen.
Danke an OLD MAN WITH GUN für die Mühe!
***
Lust ein wenig rumzuhüpfen?
Multiple Jump Pads im Quake III-Style

Erstelle als erstes mal Deine Landezone:

Erstelle nun einen Auslöser (= trigger): einfach einen Brush erstellen, während er markiert ist in der 2D-Ansicht die rechte Maustaste drücken und auswählen:
-> trigger -> multiple
Öffne anschließend das Entity-Fenster mit der Taste "N" - vergib anschließend folgende Werte:
Key: targetname
Value: jump

***
Origins (quasi "Übergänge" oder "Verbindungen")
Nun müssen noch die "Origins" gesetzt werden:
Klicke in der 2D-Ansicht mit der rechten Maustaste und wähle
-> script -> origin
Platziere es an der Stelle, von der Du abspringen möchtest:

Stelle sicher, daß es 4 Units über dem Untergrund liegt (hat mit dem Effekt zu tun).
Wähle nun zuerst den trigger_multiple an und dann das script_origin (Wichtig: Reihenfolge beachten, nicht anders herum!).
Drücke anschließend die Taste "W". Der trigger_multiple wird dadurch mit dem script_origin verbunden
(gekennzeichnet durch eine rote Linie mit einem Pfeil, der in Richtung script_origin zeigt).
Kopiere nun das script_origin und füge es 4x wieder ein.
Platziere sie z. B. so:

Wähle nun das erste script_origin an (den du eben mit dem trigger verbunden hast) und das erste script_origin in der Luft
(Wichtig: wieder Reihenfolge beachten) und drücke anschließend die Taste "W".
Damit ist jetzt der script_origin auf dem Boden mit dem ersten script_origin in der Luft verbunden (wieder durch rote Linie gekennzeichnet).
Das Gleiche machst du jetzt mit dem zuletzt verbundenen script_origin und dem nächsten in der Luft befindlichen script_origin (usw., bis alle script_origins wie auf dem vorherigen Bild miteinander verbunden sind.
Die script_origins stellen den Flugweg während des Sprunges dar.
Je mehr man hinzufügt, desto "weicher" wird der Flug.
Anmerkung:
Beachte die Höhendifferenz zwischen dem JumpPad und der Landezone!
***
Der Script:
Erstelle im Ordner /raw/maps/mp eine neue Textdatei und nenne diese dann in jump_pad.gsc um.
Füge in diese jump_pad.gsc dann folgenden Script ein:
jumper()
{
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
jumpx = getentarray ("jump","targetname");
for(i = 0; i < jumpx.size; i++)
jumpx[i] thread jump_pad_think();
}
jump_pad_think()
{
glow = getent (self.target, "targetname");
air1 = getent (glow.target, "targetname");
air2 = getent (air1.target, "targetname");
air3 = getent (air2.target, "targetname");
air4 = getent (air3.target, "targetname");
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1)
{
self waittill ("trigger",user);
if (user istouching(self))
{
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
wait 1;
user unlink();
wait 1;
}
}
}
Anschließend muss folgende Zeile noch in die eigene map.gsc eingefügt werden:
(unterhalb der Zeile maps\mp\_load::main();)
thread maps\mp\jump_pad::jumper();
Zu guter letzt muss dann noch folgende Zeile in der Zone-Datei eingetragen werden:
rawfile,maps/mp/jump_pad.gsc
***
Die Fluggeschwindigkeit anpassen:
= Die Geschwindigkeit mit der man zur Landezone befördert wird für jedes Origin.
Schau Dir folgende Zeile an:
air moveto (air1.origin, 1);
Um nun die Geschwindigkeit zu ändern einfach folgende Zahl anpassen:
air moveto (air1.origin, 1);
Spiele einfach ein wenig mit der Geschwindigkeit herum, könnte dann z. B. so aussehen:
air moveto (air1.origin, 2);
Oder so:
air moveto (air1.origin, .5);
Vielleicht aus so:
air moveto (air1.origin, .1);
Einfach ein wenig ausprobieren und testen.
***
Die "Zeit in der Luft" anpassen
= Eine Pause in der man kurz wartet bis es zum nächsten Origin weitergeht.
Wirf einen Blick in die jump_pad.gsc und zwar auf folgende Zeilen:
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
Nach jeder Bewegung, z. B. bei "air moveto (air1.origin, 1);"...
... gibt es eine kurze Wartezeit.
Wenn Du genau hinschaust siehst Du, dass die letzten beiden Übergänge von der Geschwindigkeit her ein wenig erhöht wurden, um es ein wenig "realistischer" zu gestalten... Spiel einfach selbst ein bisschen mit der Geschwindigkeit herum.
Anmerkung:
Wenn Du die Wartezeit zu kurz setzt, kannst Du einen Übergang komplett herausnehmen und musst mit einer Störung des JumpPads rechnen. Also stelle lieber sicher, dass Du dem Spieler genug Zeit für die Bewegung lässt...
... um zum nächsten Origin zu gelangen, aber trotzdem die Zeit gering hälst, damit kein "in der Luft hängen" entsteht.
Dies hängt von der jeweiligen Entfernung der origins ab.
Wie im folgenden z. B.:
air moveto (air1.origin, 1);
wait 1;
Das könntest Du ändern in:
air moveto (air1.origin, 1);
wait .3;
Auf diese Weise gäbe es einen kürzeren "Time Out" in der Luft.
****
Benötigt man mehr als ein JumpPad, so muss man in der Map lediglich den trigger_multiple zusammen mit den dazugehörigen script_origins kopieren und an einer anderen Stelle in der Map wieder einfügen.
***
Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10868
***
Zitat: