Opferlamm-Clan Board
www.opferlamm-clan.de
Verantwortlich für diese bösen Machenschaften: siehe Impressum

Registrierung Kalender Mitgliederliste Suche Häufig gestellte Fragen Zur Startseite

Opferlamm-Clan Board » Call of Duty 4 » Call of Duty 4 - Mapping » CoD4-Mapping-Tutorials / Wiki » [Tutorial] JumpPad erstellen * » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen [Tutorial] JumpPad erstellen * 1 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,001 Bewertungen - Durchschnitt: 10,00
Beiträge zu diesem Thema Autor Datum
 [Tutorial] JumpPad erstellen * yoda 18.04.2008 23:13
 Erweitertes Jumppad BadMan 19.04.2008 12:27
 RE: [Tutorial] JumpPad erstellen * wgs./w@Lly 19.04.2008 14:50
 RE: [Tutorial] JumpPad erstellen * serthy 05.01.2013 13:19
 RE: [Tutorial] JumpPad erstellen * Sakon 13.07.2013 01:24

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
yoda yoda ist männlich
Böser Admin

images/avatars/avatar-12.jpg


Dabei seit: 21.01.2004
Beiträge: 12.269


Lampe [Tutorial] JumpPad erstellen * Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

***
yoda ist offline Homepage von yoda Beiträge von yoda suchen Nehmen Sie yoda in Ihre Freundesliste auf
BadMan
Turnbeutelvergesser


images/avatars/avatar-1043.jpg


Dabei seit: 31.01.2008
Beiträge: 278


Erweitertes Jumppad Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das Script vom JumpPad kann man noch für ganz andere Sachen verwenden, quasi für alles, bei dem der Spieler bewegt werden muss oder soll.

Guckst Du hier! JumpPad-Testpaket -> da kannst Du alles laden, fertige Maps und für den Radianten *.map, Sound, Script, usw.

Die Zahlen auf der Map bedeuten z.B.:
"0" heißt (thread jumper0(); // Jumppad)
"1" heißt (thread jumper1(); // Rohr, schneller Kriechen, Eingang 1), usw.

***

Jumper 1 und 2:

Dieses Script kann man verwenden, wenn man Bewegungen hat, die gegenüberliegend sind, also Jump1 zieht den Spieler durch Jump2. Da gibt es das Problem, dass man, wenn man von Jump1 kommend über Jump2 gezogen wird, hängen bleibt, sobald man auf den Trigger von Jump2 kommt. Das heißt, das Script muss geändert werden.

Zitat:


jumper1(){

pad1 = getent ("jump1","targetname");
pad2 = getent ("jump2","targetname");

glow2 = getent ("glow2","targetname");

air21 = getent ("air21","targetname");
air22 = getent ("air22","targetname");
air23 = getent ("air23","targetname");
air24 = getent ("air24","targetname");

level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow2.origin), 3, (glow2.origin) + (0, 0, 90));

while (1){

pad2 waittill ("trigger",user);

if (user istouching(pad2)){

//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));

air.origin = user.origin;
air.angles = user.angles;

user linkto (air);

time = 1;

air moveto (air21.origin, 1);
wait .5;

air moveto (air22.origin, 1);
wait .5;

air moveto (air23.origin, 1);
wait .5;

air moveto (air24.origin, 1);

pad1 TriggerOff();

//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;

user unlink();

pad1 TriggerOn();

wait 1;
}
}
}



Hinzugefügt sind die Zeilen 43
pad1 TriggerOff();
und Zeile 51
pad1 TriggerOn();

Um allerdings die Trigger zu deaktivieren mit Tigger ON/OFF muss noch ganz nach oben über main(){ die Zeile
#include maps\mp\_utility;
Diese Zeile ist für die Befehle Trigger ON/OFF - außerdem muss zusätzlich vom gegenüberliegenden Trigger der Zielname (= targetname) angegeben werden -> Zeile 3 und 4


Jumper 3:
Jumper 3 ist einfach ein Weg mit Krümmung im Rohr, wobei man bei stärkeren Biegungen aufpassen muss, dass der Spieler nicht aus dem Rohr guckt.

Jumper 4 und 5:
Bei Jumper 4 und 5 ist der trigger_ multiple mit einem trigger_use ersetzt, so dass man ihn mit der BENUTZEN-Taste aktivieren kann. Trigger ON/OFF wird nicht benutzt, da der Trigger ja nicht durch Berührung aktiviert wird.

Jumper 6:
Ist eine einfache Bewegung nach vorne.

Jumper 0:
Das normale Jumppad.

***

Anmerkung:

Wenn ein Trigger aktiviert wird, zieht der einen egal, was im Weg ist (außer ein Trigger mit neuen Befehlen) an den Bestimmungsort - also muss man z.B. beim Rohr darauf achten, dass der Trigger im Rohr liegt durch das man kriechen muss um ihn zu berühren - ansonsten kann es passieren, dass man stehend durchgezogen wird wie bei der 1.

Wenn man den Glow-Effekt nicht haben will, kann man die zwei Zeilen einfach auskommentieren:

//level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
//maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));

***

So, das war es erst mal - es gibt wahrscheinlich noch zig andere Sachen, bei denen man das Script verwenden kann, das hier sind nur ein paar Beispiele.

---

Edit by yoda: Danke schön!

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von yoda: 19.04.2008 14:59.

BadMan ist offline E-Mail an BadMan senden Beiträge von BadMan suchen Nehmen Sie BadMan in Ihre Freundesliste auf
wgs./w@Lly
The Wall


images/avatars/avatar-1036.jpg


Dabei seit: 24.10.2006
Beiträge: 3.226


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Infothread zu BadMans und Nightwings JumpPad-Experimenten:
Schneller Kriechen bei Trigger

__________________
"Mögest du in interessanten Zeiten leben"
Rincewind, Zaubberer
wgs./w@Lly ist offline E-Mail an wgs./w@Lly senden Homepage von wgs./w@Lly Beiträge von wgs./w@Lly suchen Nehmen Sie wgs./w@Lly in Ihre Freundesliste auf
serthy
Codemeister


images/avatars/avatar-104.jpg


Dabei seit: 29.07.2010
Beiträge: 628


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hilfe bei Cod4 Script (Jump Pads)

Zitat:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
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:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
main()
{
	setupJumppads();

	if( isDefined( level.jumppads ) && level.jumppads.size )
	{
		for( i = 0 ; i < level.jumppads.size ; i++ )
		{
			pad = level.jumppads[i];

			if( !isDefined( pad ) )
				continue;

			spawnJumppad( pad.origin , pad.angles , pad.height , pad.radius , pad.dirPos , pad.model , pad.power , pad.sound );
		}
	}

	jumppads = getEntArray( "jumppad" , "targetname" );

	if( isDefined( jumppads ) && jumppads.size )
	{
		for( i = 0 ; i < jumppads.size ; i++ )
		{
			pad = jumppads[i];

			if( !isDefined( pad ) )
				continue;

			pad thread monitorUsage();
		}
	}
}

setupJumppads() //3 als beispiel
{
	precacheModel( "xmodel/serthy_buildzone" );							//falls model erwünscht, unbeding precachen! sonst crasht der server

	level.jumppads = [];											// ganz wichtig! muss zuerst stehen!

	level.jumppads[level.jumppads.size] = spawnStruct();						//muss immer zuerst stehen bei jedem neuen jumppad
	level.jumppads[level.jumppads.size - 1].origin = ( -1993 , 2939 , 100 );		//wo?
	level.jumppads[level.jumppads.size - 1].angles = ( 0 , 0 , 0 );				//winkel?
	level.jumppads[level.jumppads.size - 1].height = 32;						//trigger höhe
	level.jumppads[level.jumppads.size - 1].radius = 64;						//trigger radius
	level.jumppads[level.jumppads.size - 1].dirPos = ( -2001 , 292 , 132 );			//richtung, sollte im bereich von +/- 50 neben dem origin sich befinden: origin + ( 50 , -30 , 32 )
	level.jumppads[level.jumppads.size - 1].model = "xmodel/serthy_buildzone";		//damit man es erkennt? muss precached werden!!!
	level.jumppads[level.jumppads.size - 1].power = 2;						//wie stark das jumppad ist
	level.jumppads[level.jumppads.size - 1].sound = "minefield_click";			//sound welcher abgespielt wird

	level.jumppads[level.jumppads.size] = spawnStruct();						//minimale anforderungen
	level.jumppads[level.jumppads.size - 1].origin = ( 2342 , 123 , 73 );			//minimale anforderungen

	level.jumppads[level.jumppads.size] = spawnStruct();						//minimale anforderungen
	level.jumppads[level.jumppads.size - 1].origin = ( 3434 , 32 , -17 );			//minimale anforderungen
}

spawnJumppad( origin , angles , height , radius , dirPos , model , power , sound )
{
	if( !isDefined( radius ) )		radius = 64;
	if( !isDefined( height ) )		height = 32;
	if( !isDefined( angles ) )		angles = ( 0 , 0 , 0 );

	jumppad = spawn( "trigger_radius" , origin , 0 , radius , height );
	jumppad.angles = angles;
	jumppad.targetname = "jumppad";
	jumppad.jumpSound = sound;
	jumppad.power = power;

	if( isDefined( model ) )
	{
		jumppad.vis = spawn( "script_model" , origin );
		jumppad.vis setmodel( model );
	}

	if( isDefined( dirPos ) )
		jumppad.dir = vectorNormalize( dirPos - origin );
}

monitorUsage()
{
	if( isDefined( self.target ) )
	{
		target = getEnt( self.target , "targetname" );

		if( isDefined( target ) )
		{
			self.dir = vectorNormalize( self.target.origin - self.origin );
			self.target delete();
		}
	}

	if( isDefined( self.script_noteworthy ) )
	{
		tokens = strTok( self.script_noteworthy , "," );
		self.power = tokens[0];
		self.jumpSound = tokens[1];
	}

	while( isDefined( self ) )
	{
		wait( 0.05 );

		self waittill( "trigger" , player );

		if( !isDefined( player.isOnJumppad ) )
			self bouncePlayer( player , self.power , self.dir );
	}
}

bouncePlayer( player , power , dir )
{
	player endon( "disconnect" );

	player.isOnJumppad = undefined;

	if( isDefined( self.jumpSound ) && self.jumpSound != "" )
		self playSound( self.jumpSound );

	if( !isDefined( dir ) )
		dir = ( 0 , 0 , 1 );

	if( !isDefined( power ) )
		power = 1;

	player iPrintLnBold( "Yippieeeh!" );

	while( isDefined( self ) && isDefined( player ) )
	{
		if( player.sessionstate != "playing" )
			break;
		else if( !player isTouching( self ) )
			break;

		power = int( player.maxhealth * power );
		health = player.health;
		player.health += power;

		player finishPlayerDamage( self , self , power , 0 , "MOD_PROJECTILE" , "none" , self.origin , dir , "none" , 0 );

		player.health = health;

		wait( 0.05 );
	}

	player.isOnJumppad = undefined;
}



entweder jumppads per hand einfügen wie im beispiel (setupJumppads()-funktion) oder im radiant:
trigger erstellen
K/V: targetname/jumppad
K/V: script_noteworthy/<power>,<sound>
script_origin erstellen
trigger auswählen, script_origin auswählen >>> W

sieht dann so aus:
>>>Klick mich<<<

wobei der teddy nur da ist um zu sehen in welche richtung man springt
serthy ist offline E-Mail an serthy senden Beiträge von serthy suchen Nehmen Sie serthy in Ihre Freundesliste auf
Sakon
5-Minuten-Ei


Dabei seit: 24.12.2009
Beiträge: 23


Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo ich habe von Scripten zwar 0 plan aber bei so einer anleitung kann man nichts falsch machen Leuft supper gut Danke Augenzwinkern
Sakon ist offline E-Mail an Sakon senden Beiträge von Sakon suchen Nehmen Sie Sakon in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Opferlamm-Clan Board » Call of Duty 4 » Call of Duty 4 - Mapping » CoD4-Mapping-Tutorials / Wiki » [Tutorial] JumpPad erstellen *

Impressum ||Datenschutzerklärung

Forensoftware: Wbb - WoltLab GmbH || zum Archiv