brauche guten scripter und mapper (bewegende Platten und Buchstaben erstellen?)

lillJack
ich würd auch gern ma sowas wie der typ machen wie er es
in den videos : http://www.wegame.com/watch/Jump_Pads_Zo...Testing_Script/
http://www.wegame.com/watch/Jump_Pads_v2...est_Zombie_Map/

macht!!
allerdings habe ich keine ahnung wie das mit den bewegenden platten und buchstaben und sowas gehen soll grosses Grinsen
jumppads weis ich aba den rest net.
würd mich über hilfe freuen!




---edit by w@Lly: Thema angepasst---
steinacker
frag doch den mal, der das gemacht hat
er nennt sich marshall im iw-forum
ich hab das script vom aufzug genommen, um eine mauer zu bewegen und als auslöser einen trigger-multiple
nur mal so zum testen
lillJack
also 1. ich kenne mich mit dem IW forum überhaupt net aus und hab keine ahnung wie ich den finden soll!!
und was is mit der mauer grosses Grinsen ??

sry aba ich bin ein bisschen verwirrt
lillJack
ok hab dem jetzt mal ne E-Mail geschrieben.
steinacker

Zitat:

und was is mit der mauer ??

ich hatte mal ne idee von einer interaktiven map, die ihre structur ändert, wenn die spieler bestimmte trigger aktivieren, so wie die pyramide in dem film aliens vs. preditor
und zum test hab ich da mal ne mauer auf meine testmap gesetzt und mit hilfe des scriptes für den aufzug und einem trigger_multiple als auslöser in bewegung gesetzt
das wird allerdings mit dem script bei mehreren brushes sehr aufwendig
deswegen wäre das auch für mich mal interessant, wie der die platten und buchstaben bewegt
OLD MAN WITH GUN
Die Buchstaben sind Script brushmodels. Die werden einfach per Schleife ein und ausgeschaltet.

Du erstellst die Buchstaben aus einzelnen Brushes. Die Brushes, die zu einem Buchstaben gehören, selektierst du und machst sie zu einem script_brushmodel (rechtsklick in den 2D-Bereich und da script -> bruschmodel auswählen). Dann öffnest du den Entity editor und gibst diesem script_brushmodel einen targetname (z.B. Buchstabe_1). Das machst du dann mit allen Buchstaben (jedem Buchstaben natürlich einen anderen Targetname geben).

Dann brauchst du nachher nur im Script alle entitys einsammeln und per Schleife ein und ausschalten .z.B.

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:

b1 = getent("Buchstabe_1","targetname");
b2 = getent("Buchstabe_2","targetname");
b3 = getent("Buchstabe_3","targetname");
b4 = getent("Buchstabe_4","targetname");
b5 = getent("Buchstabe_5","targetname");

while(1)
{
  b1 hide();
  wait 1;
  b2 hide();
  wait 1;
  b3 hide();
  wait 1;
  b4 hide();
  wait 1;
  b5 hide();
  wait 1;
  b1 show();
  wait 1;
  b2 show();
  wait 1;
  b3 show();
  wait 1;
  b4 show();
  wait 1;
  b5 show();
  wait 1;
}

BadMan
Sone Platte ist eigentlich auch recht einfach zu erstellen.
Man erstellt eine platte und einen kleinen Würfel dem man die Textur (origin) verpasst, dieser Würfel bestimmt dann den Mittelpunkt der Drehung (wenn man keinen macht, wird der Mittelpunkt der Platte angenommen). Wenn man beides erstellt hat, markiert man beides und devieniert es als (script_brushmodel) rechtsklick im 2D Fenster script/script_brushmodel wenn man das hat verpast man dem ganzen noch einen targetname und das wars auch schon. Als Skript macht man dann so etwas


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:
main()
{
platte = getent("platte01","targetname");

while(1)
{
platte rotatePitch(2,2);
wait 2;
platte rotatePitch(-2,2);
wait 2;
platte rotatePitch(-2,2);
wait 2;
platte rotatePitch(2,2);
wait 2;

}
}



für die Richtung der Rotation kann man folgendes verwenden
rotateYaw
rotateRoll
rotatePitch
Je nachdem wie sich die Platte drehen soll.





Wie man das Jumppad erstellt findest du hier (Hatte OMWG zwar schon mal, hats aber wieder weg ediert grosses Grinsen )
OLD MAN WITH GUN

Zitat:

Original von BadMan
Wie man das Jumppad erstellt findest du hier (Hatte OMWG zwar schon mal, hats aber wieder weg ediert)
Weil ich erst nachher gelesen habe, das er weiß, wie man jumppads erstellt Augenzwinkern
BadMan

Zitat:

Original von OLD MAN WITH GUN

Zitat:

Original von BadMan
Wie man das Jumppad erstellt findest du hier (Hatte OMWG zwar schon mal, hats aber wieder weg ediert)
Weil ich erst nachher gelesen habe, das er weiß, wie man jumppads erstellt Augenzwinkern



LOL 2 stimmt jetzt fällt mir auch wieder ein weshalb ich den Link nicht beim ersten mal lesen reingeschrieben hatte.
lillJack
ok thx für eure hilfe!!
hat gleich funktiniert!
lillJack
hmm doch net...
das mit der platte funzt net so ganz grosses Grinsen da bewegt sich beimir nix(ich weis net genau ob ich en fehler gmeacht aba anscheinend schon... allerdngs ist es schon sehr spät und cih bin müde also kann sein das cih etwas übersehen habe)
BadMan
@lillJack
Hast bestimmt was falsch gemacht bei mir hat´s geklappt (kannst dir aber auch mal unten den DL anschauen da is die Platte auch drinnen)

@steinacker
Ich hab auch ma ne bewegte wand gemacht, allerdings nicht mit Trigger Sonden Zeitlich gesteuert.
Jede Wand wartet 0 -10 sec, wenn eine in einer Bewegung ist wartet sie erneut 0-10sec.
Das ganze kann man auch so gestalten, das sich mehrere Wände bewegen was dann so aussehen würde. Kannst das Skript auch mit dem aus dem DL ersetzen.

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:
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:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
main()
{
level.plattenMoving = false;


level.pos_platte01 = true;
level.pos_platte02 = true;
level.pos_platte03 = true;


thread platte01_start();
thread platte02_start();
thread platte03_start();
thread platte02_03_start();
}



platte01_start()
{
while(1)
{
time = Randomint(10);
wait time;
if (!level.plattenMoving)
thread platte01_move();
}
}

platte02_start()
{
while(1)
{
time = Randomint(10);
wait time;
if (!level.plattenMoving)
thread platte02_move();
}
}

platte03_start()
{
while(1)
{
time = Randomint(10);
wait time;
if (!level.plattenMoving)
thread platte03_move();
}
}

platte02_03_start()
{
while(1)
{
time = Randomint(10);
wait time;
if (!level.plattenMoving)
thread platte02_03_move();
}
}



platte01_move()
{
plattenmodel_01 = getent ("platte01", "targetname");
platte01_dmg01 = getent ("platte01_dmg_01", "targetname");
platte01_dmg02 = getent ("platte01_dmg_02", "targetname");

//platte01_dmg01 linkto(plattenmodel_01);
//platte01_dmg02 linkto(plattenmodel_01);

level.plattenMoving = true;

way = 112;  //-
speed = 5;

if (level.pos_platte01) {

//platte01_dmg01 show();

plattenmodel_01 movex (way - (way * 2), speed);
plattenmodel_01 waittill ("movedone");

//platte01_dmg01 hide();

level.pos_platte01 = false;

}

else
{

//platte01_dmg02 show();

plattenmodel_01 movex (way, speed);
plattenmodel_01 waittill ("movedone");

//platte01_dmg02 hide();

level.pos_platte01 = true;
}

level.plattenMoving = false;
}



platte02_move()
{
plattenmodel_02 = getent ("platte02", "targetname");
platte02_dmg01 = getent ("platte02_dmg_01", "targetname");
platte02_dmg02 = getent ("platte02_dmg_02", "targetname");

//platte02_dmg01 linkto(plattenmodel_02);
//platte02_dmg02 linkto(plattenmodel_02);

level.plattenMoving = true;

way = 96;  //-
speed = 5;

if (level.pos_platte02) {

//platte02_dmg01 show();

plattenmodel_02 moveY (way - (way * 2), speed);
plattenmodel_02 waittill ("movedone");

//platte02_dmg01 hide();

level.pos_platte02 = false;

}

else
{

//platte02_dmg02 show();

plattenmodel_02 moveY (way, speed);
plattenmodel_02 waittill ("movedone");

//platte02_dmg02 hide();

level.pos_platte02 = true;
}

level.plattenMoving = false;
}



platte03_move()
{
plattenmodel_03 = getent ("platte03", "targetname");
platte03_dmg01 = getent ("platte03_dmg_01", "targetname");
platte03_dmg02 = getent ("platte03_dmg_02", "targetname");

//platte03_dmg01 linkto(plattenmodel_03);
//platte03_dmg02 linkto(plattenmodel_03);

level.plattenMoving = true;

way = 96;  //-
speed = 5;

if (level.pos_platte03) {

//platte03_dmg01 show();

plattenmodel_03 moveY (way, speed);
plattenmodel_03 waittill ("movedone");

//platte03_dmg01 hide();

level.pos_platte03 = false;

}

else
{

//platte03_dmg02 show();

plattenmodel_03 moveY (way - (way * 2), speed);
plattenmodel_03 waittill ("movedone");

//platte03_dmg02 hide();

level.pos_platte03 = true;
}

level.plattenMoving = false;
}


platte02_03_move()
{
plattenmodel_02 = getent ("platte02", "targetname");
plattenmodel_03 = getent ("platte03", "targetname");


level.plattenMoving = true;

way = 96;  //-
speed = 5;

if (level.pos_platte02) 
{

	if (level.pos_platte03) 
	{
	plattenmodel_02 moveY (way - (way * 2), speed);
	plattenmodel_03 moveY (way, speed);
	plattenmodel_03 waittill ("movedone");
	level.pos_platte02 = false;
	level.pos_platte03 = false;
	}
	
	else
	{
	plattenmodel_02 moveY (way - (way * 2), speed);
	plattenmodel_03 moveY (way - (way * 2), speed);
	plattenmodel_03 waittill ("movedone");
	level.pos_platte02 = false;
	level.pos_platte03 = true;
	}
}


else
{

	if (level.pos_platte03) 
	{
	plattenmodel_02 moveY (way, speed);
	plattenmodel_03 moveY (way, speed);
	plattenmodel_03 waittill ("movedone");
	level.pos_platte02 = true;
	level.pos_platte03 = false;
	}
	
	else
	{
	plattenmodel_02 moveY (way, speed);
	plattenmodel_03 moveY (way - (way * 2), speed);
	plattenmodel_03 waittill ("movedone");
	level.pos_platte02 = true;
	level.pos_platte03 = true;
	}
}

level.plattenMoving = false;
}



Desto mehr wände sich bewegen desto mehr variablen muss man halt machen sonst gibt’s durcheinander.

Hab mal die Map hochgeladen wenn du es dir mal betrachten willst (nur das man zerquetscht wird hat nicht so geklappt wie ich mir das vorgestellt habe, da man einen Trigger hurt nicht Skripten kann)

Download
steinacker

Zitat:

...Trigger hurt nicht Skripten kann)

du könntest doch mal versuchen den trigger_hurt mit der mauer zu verlinken

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

code:
1:
2:
3:
mauer linkto (trigger_hurt);


und natürlich den targetname der brushes verwenden
OLD MAN WITH GUN
trigger_hurt linkto (mauer);

So wird ein Schuh draus Augenzwinkern
lillJack
ja ich hatte irgendwas falsch gemacht grosses Grinsen
habs nochmal probiert und schon gehts^^!
BadMan
Ich hab jetzt nochmal etwas mit rumgespielt und das mit "linkto" klappt nicht ich bekomme, eine Fehlermeldung die mir sagt das ein Trigger Hurt die Funktion "linkto" nicht unterstützt.
(wenn´s aber ma genau hinschaut, stehst oben im Skript auskommentiert drinnen) grosses Grinsen

Ich glaube move befehle wollte der auch nicht annehmen.


Na Ja egal Habs jetzt anders gemacht und zwar habe ich stattdessen ein script_origin an der Stelle platziert, wo am rechten Ort zur rechten Zeit ein radiusDamage per Skript erstellt wird.

Das ist aber noch nicht alles was geändert ist. Es ist jetzt nicht mehr möglich (hoffe ich zumindest), bei Mehrfachbewegungen ein durcheinander zu schaffen, indem man eine Wand anhält. Es sind Staub Effekte bei den sich gerade bewegenden Wänden. Ein Sound ist nicht drinnen sollte aber auch keine große Sache sein. Außerdem habe ich die Skriptstruktur etwas geändert, und zwar hab ich das Skript in 4 Teile (4 eigene .gsc Dateien) und diese in einen Ordner gepackt.

1. _bewe.gsc Darin sind die Strafbefehle der einzelnen Bewegungen.
2. _move.gsc Darin sind die Bewegungen der einzelnen Wände.
3. _dmg.gsc Darin ist a Wand 2X der Befehl einen RadiusDamage zu erstellen.
4. _fx.gsc Darin ist erstens der oder die Effekte die geladen werden und das abspiel Skript das jede wand nutzen kann.

Ach genau Wand 1 kann sich auch drehen und in eine adere Richtung laufen, was man auch noch erweitern kann ohne große if else Blöcke immer nur jeweils einer für jede mögliche Bewegung.

So Habs mal hochgeladen finden könnt ihr es Hier

Und hier mal die Sachen die zusätzlich zum Rest noch ins zone file kommen.

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
rawfile,maps/mp/bewegung/_bewe.gsc
rawfile,maps/mp/bewegung/_dmg.gsc
rawfile,maps/mp/bewegung/_move.gsc
rawfile,maps/mp/bewegung/_fx.gsc

fx,treadfx/tread_road_sniperescape




Hätte da aber noch ne Frage: Weis einer wie oder ob man sich einen RadiusDamage ingame ansehen kann?
Den einzustellen ist irgendwie beschissen, daher würde ich gerne mal wissen wie der aussieht.

@Steinacker
Baust du eigentlich noch an der Map mit den Bewegten Wänden?
steinacker

Zitat:

@Steinacker
Baust du eigentlich noch an der Map mit den Bewegten Wänden?


nö da hab ich noch nicht mit angefangen, das war mal so ne idee, ich bin noch am nachbau der
mines_of_moria_mtl

und ich hab mir ne mapping-pause gegönnt
aber ich denke, ich mach mich da mal als nächstes dran, ich hab nur im moment noch keine idee von der grundstruktur, aber darüber können wir gerne in dem anderen fred mal drüber schreiben
Animus
@steinacker

mach mal weiter an deiner moria ich find die bilder jedesmal geil.
wie weit bis du damit eigentlich wenn du es in % ausdrücken würdest?
ich komm mir jedes mal wie ein volldeppmapper vor wenn ich dein zeug seh.
OLD MAN WITH GUN

Zitat:

Original von BadMan
Ich hab jetzt nochmal etwas mit rumgespielt und das mit "linkto" klappt nicht ich bekomme, eine Fehlermeldung die mir sagt das ein Trigger Hurt die Funktion "linkto" nicht unterstützt.
Geht bei mir wunderbar.
Man muss nur wissen wie Augenzwinkern

hurt_trigger = getent("trigger_hurt","targetname");
hurt_trigger enablelinkto();
hurt_trigger linkto(wasauchimmer);