|
|
[Tutorial] Aufzug fahren macht Spass * |
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269
|
|
[Tutorial] Aufzug fahren macht Spass * |
|
Vorlage von nuthowz auf www.zeroy.com</a>
Danke an OLD MAN WITH GUN für die Ergänzungen!
Danke an Verni@hter für´s Testen!
Wir basteln einen Aufzug...!
Baue Deinen Aufzug und wandle ihn in ein script_brushmodel um
Markiere den Aufzug, drücke die Taste "N" um das Entity-Fenster zu öffnen und weise diese Werte zu:
Key = targetname
Value = elevator
Nun musst Du die Auslöser (=Trigger) erstellen.
Erstelle sie als
-> trigger -> use_touch
und erstelle zwei Stück davon, einen für den Start und einen für das Ziel.
Weise den Triggern jeweils diese Werte im Entity-Fenster (markieren und dann Taste "N") zu:
Key = targetname
Value = switch
Verknüpfe sie nun mit Deinem Brushmodel, in dem Du das Model und die Trigger markierst und die Taste "W" drückst. Das war´s erst mal auf der Map-Seite.
Anmerkung OLD MAN WITH GUN:
Eigentlich unnötig - jedenfalls, was das Script dazu weiter unten sagt, da dort die Entities direkt per Namen angesprochen werden und nicht über target.
Jetzt brauchst Du noch das Script, mit dem sich der Aufzug bewegen lässt.
main()
{
level.elevatorDown = true;
level.elevatorMoving = false;
thread elevator_start();
}
elevator_start()
{
elevator = getentarray ("switch","targetname");
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator[i] thread elevator_think();
}
elevator_think()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving)
thread elevator_move();
}
}
elevator_move()
{
elevatormodel = getent ("elevator", "targetname");
level.elevatorMoving = true;
speed = 10;
height =581;
if (level.elevatorDown) {
elevatormodel playsound ("elevator");
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone");
level.elevatorDown = false;
}
else
{
elevatormodel playsound ("elevator");
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone");
level.elevatorDown = true;
}
level.elevatorMoving = false;
-> Wohin genau damit?
Antwort OLD MAN WITH GUN:
Da gibt es zwei Möglichkeiten:
Direkt in der mp_map.gsc Datei oder als eigenständige gsc-Datei.
Möglichkeit 1:
(-> in der mp_map.gsc)
main()
{
maps\mp\_load::main();
// hier folgen noch andere mapspezifische Einstellungen
thread elevator();
}
elevator() //hier stand im script main, darf es in einem Script aber nur einmal geben und deshalb umbenannt.
{
evel.elevatorDown = true;
level.elevatorMoving = false;
// und der ganze Rest
}
Möglichkeit 2:
(-> als eigenständige gsc-Datei)
Im Ordner /raw/maps/mp eine neue Textdatei erzeugen und das Script dann dort hinein kopieren. Die Textdatei nennt man dan z.B. elevator.gsc
Dann muss in der mp_map.gsc noch eine Zeile hinzugefügt werden:
main()
{
maps\mp\_load::main();
// hier folgen noch andere mapspeziefische Einstellungen
thread maps\mp\elevator::main();
}
Bei der Methode 2 muss man dann noch folgenden Eintrag im Zone File hinzufügen:
rawfile,maps/mp/elevator.gsc
---
Und hier ein vorbereiteter Aufzug in einer .map-Datei + den Inhalt für die .gsc-Datei in einer Textdatei, bereitgestellt von steinacker. Danke schön für die Mühe!
Download Beispiel-Aufzug @ Dr. Long
---
Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10481
---
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
games12345
Weichei
Dabei seit: 05.04.2008
Beiträge: 2
|
|
hi ich hab es versucht das mit dem aufzug aber es klappt nicht.
könnt ihr vieleicht ein prefab mit dem aufzug und dies gsc datei senden.
danke
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Hier einfach hochladen. Klick mich
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269
|
|
Ok, hab´s geuppt:
Download @ Dr. Long
Danke schön!!!
Werd´s im Laufe des Tages auch noch in die Anleitung einfügen.
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
games12345
Weichei
Dabei seit: 05.04.2008
Beiträge: 2
|
|
nochma ne frage und zwar ich möchte zu den aufzug sound dazuhaben aber ers klappt nicht könnt ihr mir vieleicht nochmal helfen oder noch einen download inklusieve sound erstellen
danke
|
|
|
|
|
steinacker
Milupa-Fan
Dabei seit: 13.03.2008
Beiträge: 662
|
|
damit hab ich mich auch schon beschäftigt
dazu brauchst du ersma ne sound datei am besten als .wav
da ich die nich hab, hab ich in dem elevator script das mit dem sound auskommentiert, weil sonst immer ne fehlermeldung kommt
script: in der funktion elevator_move()
Code 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:
|
if (level.elevatorDown)
{
// elevatormodel playsound ("elevator");
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone");
level.elevatorDown = false;
}
else
{
// elevatormodel playsound ("elevator");
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone");
level.elevatorDown = true;
}
level.elevatorMoving = false;
|
|
die "//" bedeuten kommentar, somit wird das nicht vom game "gelesen"
um den sound zu aktivieren machst du die "//" am anfang weg vor elevatormodel
damit du da dann keine fehlermeldung im game bekommst brauchst du noch ne soundalias datei, die du mp_deineMap.csv nennst (mit editor erstellen)
darin platzierst du dann folgende zeile:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
5:
6:
|
name,sequence,file,vol_min,vol_max,vol_mod,pitch_min,pitch_max,dist_min,dist_max,channel,type,probability,loop,masterslave,loadspec,subtitle,compression,secondaryaliasname,volumefalloffcurve,startdelay,speakermap,reverb,lfe percentage,center percentage,platform,envelop_min,envelop_max,envelop percentage
elevator,,misc/elevator.wav,,1,na,0.95,1.05,100,200,,,,,,all_mp,,,,,,,,,,,50,100,0.55
|
|
diese csv-datei speicherst du in:
raw/soundaliases
und deine elevator.wav datei (das ist deine sound datei) die kommt in:
raw/sound/misc
kannst dir hierzu auch mal die schon bestehenden soundalias dateien anschauen und vielleicht gibts in irgendeiner map vom cod2 oder uo, die einen aufzug hat eine entsprechende sound-datei dafür
eine erläuterung der einzelnen teile der soundalias-datei (name,sequence,file,usw.) findest du auch in den schon bestehenden dateien
file ist z.b. die angabe deiner sound.wav (mit pfad)
z.b. eigene_sounds/aufzug/elevator.wav
__________________ Steinacker, Hans Adam - der letzte Scharfrichter von Bad Mergentheim
der mit der Schärfe eines Schwertes richtende
|
|
|
|
|
steinacker
Milupa-Fan
Dabei seit: 13.03.2008
Beiträge: 662
|
|
ok ich habs getestet, was ich hier gepoustet hab, aber irgendwie funzt des net.
ich bekomm trotzdem ne fehermeldung, dass der sound nicht gefunden wird
vielleicht kann man da ja mal einen extra fred aufmachen, wie das mit den soundalias dateien ist
eines kann ich jedoch sagen, bei dem eintrag:
,all_mp,
kann (muss nicht) dein mapname stehen, ansonsten leer lassen ,,
ein elevator sound hab ich in:
Return to Castle Wolfenstein gefunden, falls das game einer (noch) hat
in:
main/pak0.pk3/sound/movers/elevators
-wie gut, dass man nich immer das alte zeugs wegwirft-
__________________ Steinacker, Hans Adam - der letzte Scharfrichter von Bad Mergentheim
der mit der Schärfe eines Schwertes richtende
|
|
|
|
|
BadMan
Turnbeutelvergesser
Dabei seit: 31.01.2008
Beiträge: 278
|
|
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
|
name,sequence,file,vol_min,vol_max,vol_mod,pitch_min,pitch_max,dist_min,dist_max,channel,type,probability,loop,masterslave,loadspec,subtitle,compression,secondaryaliasname,volumefalloffcurve,startdelay,speakermap,reverb,lfe percentage,center percentage,platform,envelop_min,envelop_max,envelop percentage
elevator,,misc/elevator.wav,,1,na,0.95,1.05,100,200,,,,,,all_mp,,,,,,,,,,,50,100,0.55
|
|
so muss die meinemap.csv aussehen jeweils eine zeile
so verzert der ton nicht Pitch min max
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
|
name,sequence,file,vol_min,vol_max,vol_mod,pitch_min,pitch_max,dist_min,dist_max,channel,type,probability,loop,masterslave,loadspec,subtitle,compression,secondaryaliasname,volumefalloffcurve,startdelay,speakermap,reverb,lfe percentage,center percentage,platform,envelop_min,envelop_max,envelop percentage
elevator,,misc/elevator.wav,,1,na,,,100,200,,,,,,all_mp,,,,,,,,,,,50,100,0.55
|
|
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BadMan: 07.04.2008 22:06.
|
|
|
|
|
steinacker
Milupa-Fan
Dabei seit: 13.03.2008
Beiträge: 662
|
|
ich hatte das auch als code hier reingesetzt, nur der böse admin hat es als zitat abgeändert....
wichtig iss, da darf kein zeilenumbruch sein, jede "sound-description" in eine zeile
weil die komma's (,,,,,) sind als trennzeichen declariert, d.h. alles was zwischen den ,,,,steht,,,, wird vom "game ausgelesen"
wenn nun ein zeilenumbruch erfolgt, wird der rest nicht "gelesen"
ich hab nochmal ne studie angestellt:
einfach bei Update Zonefiles folgende eintragung "händisch" vornehmen:
sound,mp_deinemap
eintragen, dann wird die soundaliasfile zur "kenntnis genommen"
@badman, werd deine einstellungen mal übernehmen....
für heut iss dann mal schluss
__________________ Steinacker, Hans Adam - der letzte Scharfrichter von Bad Mergentheim
der mit der Schärfe eines Schwertes richtende
|
|
|
|
|
steinacker
Milupa-Fan
Dabei seit: 13.03.2008
Beiträge: 662
|
|
hab hier mal noch ne erweiterung, wenn man mehrere auzüge in seine map einbauen will
die variablen heigth und speed müssen natürlich dementsprechend angepasst werden, wie weit und schnell der aufzug fahren soll
(aufzug 3 und 4 sind noch nicht fertig, deshalb fehlen die in dem script noch)
bei aufzug 5 und 6 erfolgt eine bewegung entlang der x-achse (movex), das ist einfach eine "platte" um eine große distanz (2048 WE) schnell zurücklegen zu können
und aufzug 1 und 2 haben oben den startpunkt und fahren dann nach unten
Code 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:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
|
main()
{
level.elevatorDown1 = true;
level.elevatorMoving1 = false;
level.elevatorDown2 = true;
level.elevatorMoving2 = false;
level.elevatorDown5 = true;
level.elevatorMoving5 = false;
level.elevatorDown6 = true;
level.elevatorMoving6 = false;
thread elevator_start1();
thread elevator_start2();
thread elevator_start5();
thread elevator_start6();
}
elevator_start1()
{
elevator1 = getentarray ("switch1","targetname");
if ( isdefined(elevator1) )
for (i = 0; i < elevator1.size; i++)
elevator1[i] thread elevator_think1();
}
elevator_think1()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving1)
thread elevator_move1();
}
}
elevator_move1()
{
elevatormodel1 = getent ("elevator1", "targetname");
level.elevatorMoving1 = true;
speed = 3;
height =112;
if (level.elevatorDown1)
{
elevatormodel1 playsound ("elevator_start");
elevatormodel1 playsound ("elevator");
elevatormodel1 movez (height - (height * 2), speed);
elevatormodel1 waittill ("movedone");
elevatormodel1 playsound ("elevator_stop");
level.elevatorDown1 = false;
}
else
{
elevatormodel1 playsound ("elevator_start");
elevatormodel1 playsound ("elevator");
elevatormodel1 movez (height, speed);
elevatormodel1 waittill ("movedone");
elevatormodel1 playsound ("elevator_stop");
level.elevatorDown1 = true;
}
level.elevatorMoving1 = false;
}
////////////////////////////////////////////elevator2////////////////////
elevator_start2()
{
elevator2 = getentarray ("switch2","targetname");
if ( isdefined(elevator2) )
for (j = 0; j < elevator2.size; j++)
elevator2[j] thread elevator_think2();
}
elevator_think2()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving2)
thread elevator_move2();
}
}
elevator_move2()
{
elevatormodel2 = getent ("elevator2", "targetname");
level.elevatorMoving2 = true;
speed = 3;
height =112;
if (level.elevatorDown2)
{
elevatormodel2 playsound ("elevator_start");
elevatormodel2 playsound ("elevator");
elevatormodel2 movez (height - (height * 2), speed);
elevatormodel2 waittill ("movedone");
elevatormodel2 playsound ("elevator_stop");
level.elevatorDown2 = false;
}
else
{
elevatormodel2 playsound ("elevator_start");
elevatormodel2 playsound ("elevator");
elevatormodel2 movez (height, speed);
elevatormodel2 waittill ("movedone");
elevatormodel2 playsound ("elevator_stop");
level.elevatorDown2 = true;
}
level.elevatorMoving2 = false;
}
////////////////////////////////////////////elevator5////////////////////
elevator_start5()
{
elevator5 = getentarray ("switch5","targetname");
if ( isdefined(elevator5) )
for (m = 0; m < elevator5.size; m++)
elevator5[m] thread elevator_think5();
}
elevator_think5()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving5)
thread elevator_move5();
}
}
elevator_move5()
{
elevatormodel5 = getent ("elevator5", "targetname");
level.elevatorMoving5 = true;
speed = 2;
height =2048;
if (level.elevatorDown5)
{
elevatormodel5 playsound ("elevator_med");
elevatormodel5 movex (height, speed);
elevatormodel5 waittill ("movedone");
level.elevatorDown5 = false;
}
else
{
elevatormodel5 playsound ("elevator_med");
elevatormodel5 movex (height - (height * 2), speed);
elevatormodel5 waittill ("movedone");
level.elevatorDown5 = true;
}
level.elevatorMoving5 = false;
}
////////////////////////////////////////////elevator6////////////////////
elevator_start6()
{
elevator6 = getentarray ("switch6","targetname");
if ( isdefined(elevator6) )
for (n = 0; n < elevator6.size; n++)
elevator6[n] thread elevator_think6();
}
elevator_think6()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving6)
thread elevator_move6();
}
}
elevator_move6()
{
elevatormodel6 = getent ("elevator6", "targetname");
level.elevatorMoving6 = true;
speed = 2;
height =-2048;
if (level.elevatorDown6)
{
elevatormodel6 playsound ("elevator_med");
elevatormodel6 movex (height, speed);
elevatormodel6 waittill ("movedone");
level.elevatorDown6 = false;
}
else
{
elevatormodel6 playsound ("elevator_med");
elevatormodel6 movex (height - (height * 2), speed);
elevatormodel6 waittill ("movedone");
level.elevatorDown6 = true;
}
level.elevatorMoving6 = false;
}
|
|
die trigger und brushmodel müssen dann auch den entsprechenden targetname im entity-editor bekommen (targetname switch6 bzw. elevator6)
Verknüpfe sie nun mit Deinem Brushmodel, in dem Du das Model und die Trigger markierst und die Taste "W" drückst. Das war´s erst mal auf der Map-Seite.
Anmerkung OLD MAN WITH GUN:
Eigentlich unnötig - jedenfalls, was das Script dazu weiter unten sagt, da dort die Entities direkt per Namen angesprochen werden und nicht über target.
diese verknüpfung ist wirklich unnötig, ich habs getestet und ohne verknüpfung ist's auch im radiant übersichtlicher
__________________ Steinacker, Hans Adam - der letzte Scharfrichter von Bad Mergentheim
der mit der Schärfe eines Schwertes richtende
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von steinacker: 12.05.2008 19:02.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|