erweitertes Doorscript

Nightwing
Hi!

Ich bastel grad an einem speziellen Doorscript rum und habe 3 kleinere Problemchen. Leider finde ich keine Lösung:
Es handelt sich um eine Flügeltür, jedes Türblatt einzeln öffenbar. Erhält ein Türblatt einen Damage, fällt es um.

Problem 1:
Wie binde ich ins Script die Stärke der Beschädigung (amount) ein, die das Türblatt erhalten muss, dass es umfällt? Lächerlich, wenns nach einem Schuss aus einem mickrigen Pistölchen umfällt grosses Grinsen
Und wie muss der Mapper den amount im trigger_damage einbinden?

Problem 2:
Das Türblatt fällt leider auch dann um, wenn es in Bewegung ist, danach schliesst es automatisch, am Boden liegend, bevor alle Trigger deaktiviert werden. Ich hab schon ein paar Versuche hinter mir, doch die Lösung verbirgt sich vor mir...

Problem 3:
Die Konsole spuckt diese Fehlermeldung raus verwirrt

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

code:
1:
2:
3:
4:
5:
6:
Error: started from:
(file 'maps/mp/_doors_damage.gsc', line 214)
  level.damage_door1_trigger_right waittill ("trigger");
                                   *
Error: ************************************



Hier mal das Script. Anmerkung: Es ist nur die reine Grundfunktion, Rotationsgeschwindigkeit, FX Effekt und dergleichen sind noch nicht angepasst:

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:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
main(){

	damagefx = loadfx ("explosions/grenadeExp_mud_1");
	
	thread door1();
	thread door2();
	thread damage_door1(damagefx);
	thread damage_door2(damagefx);
}

door1(){

	level.door1_open = false;
	
	thread door1_trigger_right();
	thread door1_trigger_left();
}

door1_trigger_right(){

	door1 = getent ("door1","targetname");
	level.door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	
	while (1){
	
		level.door1_trigger_right waittill ("trigger");
		
		if(level.door1_damage == true)
			return;
			
		else if (level.door1_open == true){

			thread door1_trigger_left();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;

			door1 rotateyaw(90,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait 5;
			
			door1 rotateyaw(-90,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			
			thread door1_trigger_right();
			thread door1_trigger_left();
			
			return;
		}
	}
}

door1_trigger_left(){

	door1 = getent ("door1","targetname");
	level.door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");

	while (1){

		level.door1_trigger_left waittill ("trigger");
		
		if(level.door1_damage == true)
			return;
			
		else if (level.door1_open == true){

			thread door1_trigger_right();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;
			
			door1 rotateyaw(-90,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait 5;
			
			door1 rotateyaw(90,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			
			thread door1_trigger_left();
			thread door1_trigger_right();
			
			return;
		}
	}
}

door2(){

	level.door2_open = false;
	
	thread door2_trigger_right();
	thread door2_trigger_left();
}

door2_trigger_right(){

	door2 = getent ("door2","targetname");
	level.door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");

	while (1){
	
		level.door2_trigger_right waittill ("trigger");
		
		if(level.door2_damage == true)
			return;
			
		else if (level.door2_open == true){

			thread door2_trigger_left();

			return;
		}

		else if (level.door2_open == false){

			level.door2_open = true;

			door2 rotateyaw(-90,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait 5;
			
			door2 rotateyaw(90,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			
			thread door2_trigger_right();
			thread door2_trigger_left();
			
			return;
		}
	}
}

door2_trigger_left(){

	door2 = getent ("door2","targetname");
	level.door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");

	while (1){

		level.door2_trigger_left waittill ("trigger");
		
		if(level.door2_damage == true)
			return;
			
		else if (level.door2_open == true){

			thread door2_trigger_right();

			return;
		}

		else if (level.door2_open == false){

			level.door1_open = true;
			
			door2 rotateyaw(90,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait 5;
			
			door2 rotateyaw(-90,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			
			thread door2_trigger_left();
			thread door2_trigger_right();
			
			return;
		}
	}
}

damage_door1(damagefx){

	level.door1_damage = false;
	
	thread damage_door1_trigger_right();
	thread damage_door1_trigger_left();
}

damage_door1_trigger_right(damagefx){

	damage_door1 = getent ("door1","targetname");
	level.damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	
	while (1){
	
		level.damage_door1_trigger_right waittill ("trigger");
	
		if(level.door1_damage == true || level.door1_open == true)
			return;
			
		damage_door1 rotateroll(90,2,0.5,0.5);
		damage_door1 playsound("door_crush");	
		PlayFX(damagefx, self.origin);	
		damage_door1 waittill ("rotatedone");
			
		level.door1_damage = true;
	
		break;	
	}
	
	level.door1_trigger_right entityOff();
	level.door1_trigger_left entityOff();
	level.damage_door1_trigger_right entityOff();
	level.damage_door1_trigger_left entityOff();
}

damage_door1_trigger_left(damagefx){

	damage_door1 = getent ("door1","targetname");
	level.damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	while (1){
	
		level.damage_door1_trigger_left waittill ("trigger");

		if(level.door1_damage == true || level.door1_open == true)
			return;
			
		damage_door1 rotateroll(-90,2,0.5,0.5);
		damage_door1 playsound("door_crush");	
		PlayFX(damagefx, self.origin);	
		damage_door1 waittill ("rotatedone");
			
		level.door1_damage = true;
	
		break;	
	}
	
	level.door1_trigger_right entityOff();
	level.door1_trigger_left entityOff();
	level.damage_door1_trigger_right entityOff();
	level.damage_door1_trigger_left entityOff();
}

damage_door2(damagefx){

	level.door2_damage = false;
	
	thread damage_door2_trigger_right();
	thread damage_door2_trigger_left();
}

damage_door2_trigger_right(damagefx){

	damage_door2 = getent ("door2","targetname");
	level.damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");

	while (1){
			
		level.damage_door2_trigger_right waittill ("trigger");
		
		if(level.door2_damage == true || level.door2_open == true)
			return;
			
		damage_door2 rotateroll(90,2,0.5,0.5);
		damage_door2 playsound("door_crush");	
		PlayFX(damagefx, self.origin);	
		damage_door2 waittill ("rotatedone");
			
		level.door2_damage = true;
	
		break;	
	}
	
	level.door2_trigger_right entityOff();
	level.door2_trigger_left entityOff();
	level.damage_door2_trigger_right entityOff();
	level.damage_door2_trigger_left entityOff();
}

damage_door2_trigger_left(damagefx){

	damage_door2 = getent ("door2","targetname");
	level.damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	while (1){
			
		level.damage_door2_trigger_left waittill ("trigger");
		
		if(level.door2_damage == true || level.door1_open == true)
			return;
			
		damage_door2 rotateroll(-90,2,0.5,0.5);
		damage_door2 playsound("door_crush");	
		PlayFX(damagefx, self.origin);	
		damage_door2 waittill ("rotatedone");
			
		level.door2_damage = true;
	
		break;	
	}
	
	level.door2_trigger_right entityOff();
	level.door2_trigger_left entityOff();
	level.damage_door2_trigger_right entityOff();
	level.damage_door2_trigger_left entityOff();
}

entityOff(){

	if(!isdefined (self.realOrigin))
		self.realOrigin = self.origin;
		
	if(self.origin == self.realorigin)
		self.origin += (0, 0, -10000);
}

entityOn(){

	if(isDefined(self.realOrigin))
		self.origin = self.realOrigin;
}




Und hier die Trigger:



Danke

ToM
OLD MAN WITH GUN
Habe jetzt nicht die Zeit das alles auszuprobieren.
Aber mal von hinten nach vorne.

Zu Problem 3: Es wäre schön, wenn du die komplette Fehlermeldung posten könntest und nicht nur den mickrigen Rest (da werden bestimmt noch ein bis ein paar Fehlermeldungen drüber stehen)

Zu Problem 2: Das wirst du wohl auch mit einem Türmodell nicht lösen können, da ein einmal gestarteter rotate oder auch move Befehl nicht unterbrochen werden kann. Du musst also dann, wenn das Türblatt umfallen soll, die eigentliche Tür gegen eine andere Tür austauschen (die jetzt nicht mehr vom rotate Befehl beeinflusst ist), und diese dann umfallen lassen.

Zu Problem 1:
Den Schaden, den der trigger_hurt braucht, bis er reagiert, stellt man nicht am Trigger sondern im Script ein.
Beispiel:

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:
main()
{
  dmg_trigger = getent("damage_trigger", "targetname"); //damage_trigger holen
  doorhealth = 300;  // Lebensenergie der Tür
  door_ok = true; // Tür in ordnung
  while(door_ok) // so lange Tür in ordnung, Schleife wiederholen
  {
    dmg_trigger waittill("damage", amount);  // trigger wartet auf Schaden und liefert bei Schaden dann den Schadenswert zurück
    doorhealth -= amount; // Schadenswert von der Lebensenergie der Tür abziehen
    if (doorhealth <= 0) // Wenn Lebenssenergie kleiner gleich 0 ist, folgende Zeilen ausführen
    {
      door_ok = false; // Tür nicht mehr ok (Schleife nach beenden nicht noch einmal durchlaufen)
      // hier kommt das hin was passieren soll, wenn die Lebensenergie der Tür verbraucht ist
    }
  }
}

Nightwing
Danke für die schnelle Antwort, OMWG!

Leider stehen da nicht mehr Fehlermeldungen, was mich auch wundert. Sonst hätt ich diese mitgepostet. Evtl liegt das an der Reihenfolge der Aktionen, wird sich zeigen, da ich nach den anderen Antworten wieder genug zu ändern habe.

Dank Dir

ToM
Nightwing
Soweit, so gut. Habe Deine Idee eingearbeitet, funktioniert super!
Vielen Dank!!

Zum Problem 2:

Wie hier mit dem Jumppad beschrieben, habe ich in der Funktion während der Rotation die Trigger deaktiviert, funktioniert prima, die Fehlermeldung ist auch weg, wo immer die auch herkam... Hier mal das rohe Script, FX ist noch net getestet:

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:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
main(){

	damagefx = loadfx ("explosions/grenadeExp_mud_1");
	
	thread door1();
	thread door2();
	thread damage_door1(damagefx);
	thread damage_door2(damagefx);
}

door1(){

	level.door1_open = false;
	
	thread door1_trigger_right();
	thread door1_trigger_left();
}

door1_trigger_right(){

	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	time = 5;

	while (1){
	
		door1_trigger_right waittill ("trigger");

		if (level.door1_open == true){

			thread door1_trigger_left();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			iprintlnbold("trigger_door_1_off");
			
			door1 rotateyaw(90,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait time;
			
			door1 rotateyaw(-90,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			damage_door1_trigger_right TriggerOn();
			damage_door1_trigger_left TriggerOn();
			iprintlnbold("trigger_door_1_on");
			
			thread door1_trigger_right();
			thread door1_trigger_left();
			
			return;
		}
	}
}

door1_trigger_left(){

	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	time = 5;

	while (1){

		door1_trigger_left waittill ("trigger");
		
		if (level.door1_open == true){

			thread door1_trigger_right();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;
			damage_door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			iprintlnbold("trigger_door_1_off");
			
			door1 rotateyaw(-90,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait time;
			
			door1 rotateyaw(90,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			damage_door1_trigger_left TriggerOn();
			damage_door1_trigger_right TriggerOn();
			iprintlnbold("trigger_door_1_on");
			
			thread door1_trigger_left();
			thread door1_trigger_right();
			
			return;
		}
	}
}

door2(){

	level.door2_open = false;
	
	thread door2_trigger_right();
	thread door2_trigger_left();
}

door2_trigger_right(){

	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	time = 5;

	while (1){
	
		door2_trigger_right waittill ("trigger");

		if (level.door2_open == true){

			thread door2_trigger_left();

			return;
		}

		else if (level.door2_open == false){

			level.door2_open = true;
			damage_door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			iprintlnbold("trigger_door_2_off");
			
			door2 rotateyaw(-90,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait time;
			
			door2 rotateyaw(90,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			damage_door2_trigger_left TriggerOn();
			damage_door2_trigger_right TriggerOn();
			iprintlnbold("trigger_door_2_on");
			
			thread door2_trigger_right();
			thread door2_trigger_left();
			
			return;
		}
	}
}

door2_trigger_left(){

	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	time = 5;

	while (1){

		door2_trigger_left waittill ("trigger");

		if (level.door2_open == true){

			thread door2_trigger_right();

			return;
		}

		else if (level.door2_open == false){

			level.door2_open = true;
			damage_door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			iprintlnbold("trigger_door_2_off");
			
			door2 rotateyaw(90,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait time;
			
			door2 rotateyaw(-90,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			damage_door2_trigger_left TriggerOn();
			damage_door2_trigger_right TriggerOn();
			iprintlnbold("trigger_door_2_on");
			
			thread door2_trigger_left();
			thread door2_trigger_right();
			
			return;
		}
	}
}

damage_door1(damagefx){

	thread damage_door1_trigger_right();
	thread damage_door1_trigger_left();
}

damage_door1_trigger_right(damagefx){

	damage_door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 100;

	while(door_ok){
			
		damage_door1_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
				
			damage_door1 rotateroll(90,2,0.5,0.5);
			damage_door1 playsound("door_crush");	
			//PlayFX(damagefx, self.origin);	
			damage_door1 waittill ("rotatedone");
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			iprintlnbold("all trigger_door_1_off");		
		}
	}
}

damage_door1_trigger_left(damagefx){

	damage_door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 100;

	while(door_ok){
			
		damage_door1_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
				
			damage_door1 rotateroll(-90,2,0.5,0.5);
			damage_door1 playsound("door_crush");	
			//PlayFX(damagefx, self.origin);	
			damage_door1 waittill ("rotatedone");
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			iprintlnbold("all trigger_door_1_off");		
		}
	}
}

damage_door2(damagefx){

	level.door2_damage = false;
	
	thread damage_door2_trigger_right();
	thread damage_door2_trigger_left();
}

damage_door2_trigger_right(damagefx){

	damage_door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 100;

	while(door_ok){
			
		damage_door2_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
				
			damage_door2 rotateroll(90,2,0.5,0.5);
			damage_door2 playsound("door_crush");	
			//PlayFX(damagefx, self.origin);	
			damage_door2 waittill ("rotatedone");
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();
			iprintlnbold("all trigger_door_2_off");		
		}
	}
}

damage_door2_trigger_left(damagefx){

	damage_door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");
	
	doorhealth = 300;
	door_ok = true;
	doordamage = 100;

	while(door_ok){
			
		damage_door2_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
				
			damage_door2 rotateroll(-90,2,0.5,0.5);
			damage_door2 playsound("door_crush");	
			//PlayFX(damagefx, self.origin);	
			damage_door2 waittill ("rotatedone");
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();
			iprintlnbold("all trigger_door_2_off");		
		}
	}
}

TriggerOff(){

	if(!isdefined (self.realOrigin))
		self.realOrigin = self.origin;
		
	if(self.origin == self.realorigin)
		self.origin += (0, 0, -10000);
}

TriggerOn(){

	if(isDefined(self.realOrigin))
		self.origin = self.realOrigin;
}



ToM
Nightwing
Ich hätte noch 2 kleine Fragen:
  1. Wie kann ich 2 oder mehrere Bewegungen in einem Ablauf geschehen lassen?
    z.B.: Die Tür soll um 90 Grad fallen, sich dabei noch um 5 Grad verdrehen und um 1 oder 2 WE nen move machen. Also 2 mal rotate und einmal move.
    Hintergrund: Die Türblätter sollen nicht genau nebeneinander liegen.

  2. Gibt es einen Befehl, der wie waittill("rotatedone"); arbeitet, jedoch am Anfang der Rotation ausgelöst wird? Könnte ich da evtl mit waittillframeend; arbeiten?
    Hintergrund: Wenn aus beiden Richtungen Schaden auf die Tür eintrifft, ist waittill("rotatedone"); zu langsam, um die Trigger zu deaktivieren. Ansonsten setz ich die Triggerdeaktivierung davor ein, sollte auch funktionieren, weiss nur nicht, obs die richtige Art und Weise ist.


ToM
Mapicted
gute arbeit bis jetzt otze und OMWG
fehlt ja nicht mehr viel...

hier mal die dazugehörige Kirche




zum Problem 1 :

Hier funktionieren 2 bewegungen aufeinmal:

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  
door_move(){
	
	door1 = getent ("door1","targetname");
	door2 = getent ("door2","targetname");
	
	door1 rotateyaw(90,0.1,0,0);
	door1 movez(-512,0.1,0,0);    <<<----------

	door2 rotateyaw(-90,0.1,0,0);
	door2 movez(-512,0.1,0,0);
}


Die Tür ist 512 we über der Kirche und offen, damit auch die Kanten bei der Lichtberechnung ausgeleuchtet werden. UNd sie wird beim mapstart an die richtige stelle geschoben.(klappt auch mit 2 verschiedenen rotate bewegungen)

Und hier funktioniert nur eine bewegung:

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:
 
}

damage_door1_trigger_left(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			iprintlnbold("all trigger_door_1_off");

			door1 rotatepitch(90,2,0.5,0.5);
                        door1 rotateyaw(5,2,0.5,0.5);        <<<---------
                        door1 playsound("door_crush");     
			PlayFX(damagefx, self.origin);	
			door1 waittill ("rotatedone");
		}
	}
}



Die tür soll sich noch ein wenig um die z achse drehen damit wenn beide in die selbe richhtung fallen sie nicht bündig nebeneinander liegen
OLD MAN WITH GUN
Hmm...


.. wieso versuchst du es denn eigentlich nicht mit rotateto ?
Da kannst du die Zielwinkel (x,y,z) selber bestimmen.
Setze den Originbrush der Tür nur unten an eine Ecke (und nicht über die gesamte Türhöhe) und dreh die Tür beim Fallen mit rotateto. Da kannst du mit einem Befehl alle drei Achsen auf einmal drehen.
Nightwing
Den Befehl kannte ich nicht, Jan wohl auch nicht. cool
Mal wieder Danke, OMWG!

ToM
OLD MAN WITH GUN
Man sollte hin und wieder mal einen Blick in die script commands werfen Augenzwinkern
http://www.infinityward.com/Script/motion/rotateto.htm
Nightwing
Da iss was wahres dran, Danke!
Link iss scho in den Favs drin.
Nightwing
So, geschafft! Nun hab ich 2 Varianten des Scripts: einmal mit automatisch schliessenden Türen, einmal zum selbst schliessen. FX passt, Jan schneidert noch n paar Sounds zusammen. Um die Kanten der Türen optimal auszuleuchten, wenn die am Boden liegen, sind die Türen versetzt, werden zum Mapstart erst in die richtige Position gefahren, was aber keiner sehen wird. Aber dazu kann und wird Jan mehr sagen, wenn er mit den Sounds fertig ist. Denk mal, dann gibts noch ne kleine Tutorialmap + einiger Erklärungen von Ihm. Hier meinerseits mal die 2 Scripte.

_doors_damage.gsc - Türen schliessen nicht automatisch:

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:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
main(){
	
	thread door_move();
	thread door1();
	thread door2();
	thread damage_door1();
	thread damage_door2();

}

door_move(){
	
	door1 = getent ("door1","targetname");
	door2 = getent ("door2","targetname");
	
	door1 rotateyaw(90,0.1,0,0);
	door1 movez(-512,0.1,0,0);

	door2 rotateyaw(-90,0.1,0,0);
	door2 movez(-512,0.1,0,0);
}

door1(){

	level.door1_open = false;
	level.door1_moving = false;
	level.door1_direction = false;
	
	thread door1_trigger_right();
	thread door1_trigger_left();
}

door1_trigger_right(){

	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	while (1){
	
		door1_trigger_right waittill ("trigger");
		
		if (level.door1_open == false){
		
			if(level.door1_moving == false){
			
				level.door1_moving = true;
				level.door1_open = true;
				level.door1_direction = true;
				
				damage_door1_trigger_left TriggerOff();
				damage_door1_trigger_right TriggerOff();
				
				door1 rotateyaw(120,2,0.5,0.5);
				door1 playsound ("door_open");
				door1 waittill ("rotatedone");
				
				level.door1_moving = false;
				
				thread door1_trigger_right();
				
				return;
			}
			
			else if (level.door1_moving == true){
			
				thread door1_trigger_right();
				
				return;
			}
		}
	
		else if(level.door1_open == true){
		
			if(level.door1_moving == false){
	
				if (level.door1_direction == true){
	
					level.door1_moving = true;

					door1 rotateyaw(-120,2,0.5,0.5);
					door1 playsound ("door_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_right();
					
					return;
				}
	
				else if (level.door1_direction == false){
		
					level.door1_moving = true;

					door1 rotateyaw(120,2,0.5,0.5);
					door1 playsound ("door_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_right();
					
					return;
				}
			}
		
			else if (level.door1_moving == true){
	
				thread door1_trigger_right();
				
				return;
			}
		}
	}
}

door1_trigger_left(){

	door1 = getent ("door1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	while (1){
	
		door1_trigger_left waittill ("trigger");
		
		if (level.door1_open == false){
		
			if(level.door1_moving == false){
			
				level.door1_moving = true;
				level.door1_open = true;
				level.door1_direction = false;
				
				damage_door1_trigger_left TriggerOff();
				damage_door1_trigger_right TriggerOff();
			
				door1 rotateyaw(-120,2,0.5,0.5);
				door1 playsound ("door_open");
				door1 waittill ("rotatedone");
				
				level.door1_moving = false;
				
				thread door1_trigger_left();
				
				return;
			}
			
			else if (level.door1_moving == true){
			
				thread door1_trigger_left();
				
				return;
			}
		}
		
		else if(level.door1_open == true){
		
			if(level.door1_moving == false){

				if (level.door1_direction == true){

					level.door1_moving = true;

					door1 rotateyaw(-120,2,0.5,0.5);
					door1 playsound ("door_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_left();
					
					return;
				}

				else if (level.door1_direction == false){
	
					level.door1_moving = true;

					door1 rotateyaw(120,2,0.5,0.5);
					door1 playsound ("door_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_left();
					
					return;
				}
			}
			
			else if (level.door1_moving == true){
	
				thread door1_trigger_left();
				
				return;
			}
		}
	}
}

door2(){

	level.door2_open = false;
	level.door2_moving = false;
	level.door2_direction = false;
	
	thread door2_trigger_right();
	thread door2_trigger_left();
}

door2_trigger_right(){

	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	while (1){
	
		door2_trigger_right waittill ("trigger");
		
		if (level.door2_open == false){
		
			if(level.door2_moving == false){
			
				level.door2_moving = true;
				level.door2_open = true;
				level.door2_direction = true;
				
				damage_door2_trigger_left TriggerOff();
				damage_door2_trigger_right TriggerOff();
				
				door2 rotateyaw(-120,2,0.5,0.5);
				door2 playsound ("door_open");
				door2 waittill ("rotatedone");
				
				level.door2_moving = false;
				
				thread door2_trigger_right();
				
				return;
			}
			
			else if (level.door2_moving == true){
			
				thread door2_trigger_right();
				
				return;
			}
		}
	
		else if(level.door2_open == true){
		
			if(level.door2_moving == false){
	
				if (level.door2_direction == true){
	
					level.door2_moving = true;
					
					door2 rotateyaw(120,2,0.5,0.5);
					door2 playsound ("door_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_right();
					
					return;
				}
	
				else if (level.door1_direction == false){
		
					level.door2_moving = true;
					
					door2 rotateyaw(-120,2,0.5,0.5);
					door2 playsound ("door_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_right();
					
					return;
				}
			}
		
			else if (level.door2_moving == true){
	
				thread door2_trigger_right();
				
				return;
			}
		}
	}
}

door2_trigger_left(){

	door2 = getent ("door2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	while (1){
	
		door2_trigger_left waittill ("trigger");
		
		if (level.door2_open == false){
		
			if(level.door2_moving == false){
			
				level.door2_moving = true;
				level.door2_open = true;
				level.door2_direction = false;
				
				damage_door2_trigger_left TriggerOff();
				damage_door2_trigger_right TriggerOff();
				
				door2 rotateyaw(120,2,0.5,0.5);
				door2 playsound ("door_open");
				door2 waittill ("rotatedone");
				
				level.door2_moving = false;
				
				thread door2_trigger_left();
				
				return;
			}
			
			else if (level.door2_moving == true){
			
				thread door2_trigger_left();
				
				return;
			}
		}
		
		else if(level.door2_open == true){
		
			if(level.door2_moving == false){

				if (level.door2_direction == true){

					level.door2_moving = true;
					
					door2 rotateyaw(120,2,0.5,0.5);
					door2 playsound ("door_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_left();
					
					return;
				}
				
				else if (level.door2_direction == false){
					
					level.door2_moving = true;
					
					door2 rotateyaw(-120,2,0.5,0.5);
					door2 playsound ("door_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_left();
					
					return;
				}
			}
			
			else if (level.door2_moving == true){
	
				thread door2_trigger_left();
				
				return;
			}
		}
	}
}

damage_door1(){

	thread damage_door1_trigger_right();
	thread damage_door1_trigger_left();
}

damage_door1_trigger_right(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();

			door1 rotateto((-90,90,5),0.6,0.2,0);
			door1 playsound("door_crush");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (301,546,-316));	
		}
	}
}

damage_door1_trigger_left(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();

			door1 rotateto((90,90,5),0.6,0.2,0);
			door1 playsound("door_crush");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (301,650,-316));	
		}
	}
}

damage_door2(){

	level.door2_damage = false;
	
	thread damage_door2_trigger_right();
	thread damage_door2_trigger_left();
}

damage_door2_trigger_right(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();

			door2 rotateto((90,-90,5),0.6,0.2,0);
			door2 playsound("door_crush");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (258,546,-316));	
		}
	}
}

damage_door2_trigger_left(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");
	
	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();
			
			door2 rotateto((-90,-90,5),0.6,0.2,0);
			door2 playsound("door_crush");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (258,650,-316));	
		}
	}
}

TriggerOff(){

	if(!isdefined (self.realOrigin))
		self.realOrigin = self.origin;
		
	if(self.origin == self.realorigin)
		self.origin += (0, 0, -10000);
}

TriggerOn(){

	if(isDefined(self.realOrigin))
		self.origin = self.realOrigin;
}



_doorsdamage_automatic.gsc - Türen schliessen automatisch:

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:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
main(){
	
	thread door_move();
	thread door1();
	thread door2();
	thread damage_door1();
	thread damage_door2();

}

door_move(){
	
	door1 = getent ("door1","targetname");
	door2 = getent ("door2","targetname");
	
	door1 rotateyaw(90,0.1,0,0);
	door1 movez(-512,0.1,0,0);

	door2 rotateyaw(-90,0.1,0,0);
	door2 movez(-512,0.1,0,0);
}

door1(){

	level.door1_open = false;
	
	thread door1_trigger_right();
	thread door1_trigger_left();
}

door1_trigger_right(){

	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	time = 5;

	while (1){
	
		door1_trigger_right waittill ("trigger");

		if (level.door1_open == true){

			thread door1_trigger_left();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			
			door1 rotateyaw(120,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait time;
			
			door1 rotateyaw(-120,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			damage_door1_trigger_right TriggerOn();
			damage_door1_trigger_left TriggerOn();
			
			thread door1_trigger_right();
			thread door1_trigger_left();
			
			return;
		}
	}
}

door1_trigger_left(){

	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	time = 5;

	while (1){

		door1_trigger_left waittill ("trigger");
		
		if (level.door1_open == true){

			thread door1_trigger_right();

			return;
		}

		else if (level.door1_open == false){

			level.door1_open = true;
			damage_door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			
			door1 rotateyaw(-120,2,0.5,0.5);
			door1 playsound ("door_open");
			door1 waittill ("rotatedone");
			
			wait time;
			
			door1 rotateyaw(120,2,0.5,0.5);
			door1 playsound ("door_close");
			door1 waittill ("rotatedone");
			
			level.door1_open = false;
			damage_door1_trigger_left TriggerOn();
			damage_door1_trigger_right TriggerOn();
			
			thread door1_trigger_left();
			thread door1_trigger_right();
			
			return;
		}
	}
}

door2(){

	level.door2_open = false;
	
	thread door2_trigger_right();
	thread door2_trigger_left();
}

door2_trigger_right(){

	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	time = 5;

	while (1){
	
		door2_trigger_right waittill ("trigger");

		if (level.door2_open == true){

			thread door2_trigger_left();

			return;
		}

		else if (level.door2_open == false){

			level.door2_open = true;
			damage_door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			
			door2 rotateyaw(-120,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait time;
			
			door2 rotateyaw(120,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			damage_door2_trigger_left TriggerOn();
			damage_door2_trigger_right TriggerOn();
			
			thread door2_trigger_right();
			thread door2_trigger_left();
			
			return;
		}
	}
}

door2_trigger_left(){

	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	time = 5;

	while (1){

		door2_trigger_left waittill ("trigger");

		if (level.door2_open == true){

			thread door2_trigger_right();

			return;
		}

		else if (level.door2_open == false){

			level.door2_open = true;
			damage_door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			
			door2 rotateyaw(120,2,0.5,0.5);
			door2 playsound ("door_open");
			door2 waittill ("rotatedone");
			
			wait time;
			
			door2 rotateyaw(-120,2,0.5,0.5);
			door2 playsound ("door_close");
			door2 waittill ("rotatedone");
			
			level.door2_open = false;
			damage_door2_trigger_left TriggerOn();
			damage_door2_trigger_right TriggerOn();
			
			thread door2_trigger_left();
			thread door2_trigger_right();
			
			return;
		}
	}
}

damage_door1(){

	thread damage_door1_trigger_right();
	thread damage_door1_trigger_left();
}

damage_door1_trigger_right(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();

			door1 rotateto((-90,90,5),0.6,0.2,0);
			door1 playsound("door_crush");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (301,546,-316));	
		}
	}
}

damage_door1_trigger_left(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door1 = getent ("door1","targetname");
	door1_trigger_right = getent ("open_trigger_1_tuer_1","targetname");
	door1_trigger_left = getent ("open_trigger_2_tuer_1","targetname");
	damage_door1_trigger_right = getent ("damage_trigger_1_tuer_1","targetname");
	damage_door1_trigger_left = getent ("damage_trigger_2_tuer_1","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();

			door1 rotateto((90,90,5),0.6,0.2,0);
			door1 playsound("door_crush");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (301,650,-316));	
		}
	}
}

damage_door2(){

	level.door2_damage = false;
	
	thread damage_door2_trigger_right();
	thread damage_door2_trigger_left();
}

damage_door2_trigger_right(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();

			door2 rotateto((90,-90,5),0.6,0.2,0);
			door2 playsound("door_crush");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (258,546,-316));	
		}
	}
}

damage_door2_trigger_left(){

	damagefx = loadfx ("dust/abrams_desk_dust");
	door2 = getent ("door2","targetname");
	door2_trigger_right = getent ("open_trigger_1_tuer_2","targetname");
	door2_trigger_left = getent ("open_trigger_2_tuer_2","targetname");
	damage_door2_trigger_right = getent ("damage_trigger_1_tuer_2","targetname");
	damage_door2_trigger_left = getent ("damage_trigger_2_tuer_2","targetname");
	
	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();
			
			door2 rotateto((-90,-90,5),0.6,0.2,0);
			door2 playsound("door_crush");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (258,650,-316));	
		}
	}
}

TriggerOff(){

	if(!isdefined (self.realOrigin))
		self.realOrigin = self.origin;
		
	if(self.origin == self.realorigin)
		self.origin += (0, 0, -10000);
}

TriggerOn(){

	if(isDefined(self.realOrigin))
		self.origin = self.realOrigin;
}



ToM
-tiger-
Das Skript Funktioniert ohne Probleme habe es in meine Map eingebaut, thx an die Macher des Skriptes.

Und hier habe ich mal ein kleines Video erstellt wo man schön die Funktionsweise des Skriptes sieht.

Doorskript
Nightwing
Schön, das es bei Dir klappt, dafür hab ich nun ein Problem:
Jan hat die Kirche gedreht, was bedeutet, die Türen fallen nicht mehr so, wie sie sollen. Damals stand die Kirche im rechten Winkel, jetzt ist sie um 205 Grad gedreht - das sagt zumindest der Screen aus, wenn ich mich nicht irre?



Ich hab zwar schon versucht, mathematisch an die Sache ranzugehen, aber es möchte nicht funktionieren.
Zur Verdeutlichung mal ein Bild, wie es ist:


Hier die entsprechende Zeile: door1 rotateto((-90,90,5),0.5,0.3,0);

Eigentlich sollte die Türe nach innen fallen. Dem X Wert geb ich statt -90 jetzt 90, somit fällt sie nach innen, nur mit dem Y Wert (90 in der alten Version) komm ich nicht klar. Das Problem ist die merkwürdige Drehung...
Ich weiss zwar, das im rotate to der Zielwinkel angegeben wird, aber ich komm nach Stunden rechnen und testen auf keinen grünen Zweig...

ToM
-tiger-
Bei mir Sieht das so aus > door1 rotateto((0,8,-80),0.2,0.1,0); . Was ihr mal testen könntet, das Door-prefab in das Kirchen-prefab einzufügen, weil da die Kirche im rechten Winkel steht. Und wenn das nicht geht müsst ihr erstmal den neuen Umfall winkel herausfinden. zb. rotateto((0,0,90),0.2,0.1,0); oder rotateto((0,90,0),0.2,0.1,0); oder rotateto((90,0,0),0.2,0.1,0); .

Und hier mal mein Skript mit moveto in Damage:

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:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
main()
{
	thread door1();
	thread door2();
	thread damage_door1();
	thread damage_door2();

}

door1(){

	level.door1_open = false;
	level.door1_moving = false;
	level.door1_direction = false;
	
	thread door1_trigger_right();
	thread door1_trigger_left();
}

door1_trigger_right(){

	door1 = getent ("md1","targetname");
	door1_trigger_right = getent ("md1t1","targetname");
	damage_door1_trigger_right = getent ("md1td1","targetname");
	damage_door1_trigger_left = getent ("md1td2","targetname");

	while (1){
	
		door1_trigger_right waittill ("trigger");
		
		if (level.door1_open == false){
		
			if(level.door1_moving == false){
			
				level.door1_moving = true;
				level.door1_open = true;
				level.door1_direction = true;
				
				damage_door1_trigger_left TriggerOff();
				damage_door1_trigger_right TriggerOff();
				
				door1 rotateyaw(90,2,0.5,0.5);
				door1 playsound ("door_wood_creaky_slow_open1");
				door1 waittill ("rotatedone");
				
				level.door1_moving = false;
				
				thread door1_trigger_right();
				
				return;
			}
			
			else if (level.door1_moving == true){
			
				thread door1_trigger_right();
				
				return;
			}
		}
	
		else if(level.door1_open == true){
		
			if(level.door1_moving == false){
	
				if (level.door1_direction == true){
	
					level.door1_moving = true;

					door1 rotateyaw(-90,2,0.5,0.5);
					door1 playsound ("door_wood_creaky_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_right();
					
					return;
				}
	
				else if (level.door1_direction == false){
		
					level.door1_moving = true;

					door1 rotateyaw(90,2,0.5,0.5);
					door1 playsound ("door_wood_creaky_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_right();
					
					return;
				}
			}
		
			else if (level.door1_moving == true){
	
				thread door1_trigger_right();
				
				return;
			}
		}
	}
}

door1_trigger_left(){

	door1 = getent ("md1","targetname");
	door1_trigger_left = getent ("md1t2","targetname");
	damage_door1_trigger_right = getent ("md1td1","targetname");
	damage_door1_trigger_left = getent ("md1td2","targetname");

	while (1){
	
		door1_trigger_left waittill ("trigger");
		
		if (level.door1_open == false){
		
			if(level.door1_moving == false){
			
				level.door1_moving = true;
				level.door1_open = true;
				level.door1_direction = false;
				
				damage_door1_trigger_left TriggerOff();
				damage_door1_trigger_right TriggerOff();
			
				door1 rotateyaw(-90,2,0.5,0.5);
				door1 playsound ("door_wood_creaky_slow_open1");
				door1 waittill ("rotatedone");
				
				level.door1_moving = false;
				
				thread door1_trigger_left();
				
				return;
			}
			
			else if (level.door1_moving == true){
			
				thread door1_trigger_left();
				
				return;
			}
		}
		
		else if(level.door1_open == true){
		
			if(level.door1_moving == false){

				if (level.door1_direction == true){

					level.door1_moving = true;

					door1 rotateyaw(-90,2,0.5,0.5);
					door1 playsound ("door_wood_creaky_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_left();
					
					return;
				}

				else if (level.door1_direction == false){
	
					level.door1_moving = true;

					door1 rotateyaw(90,2,0.5,0.5);
					door1 playsound ("door_wood_creaky_close");
					door1 waittill ("rotatedone");
					
					damage_door1_trigger_left TriggerOn();
					damage_door1_trigger_right TriggerOn();
					
					level.door1_open = false;
					level.door1_moving = false;
					
					thread door1_trigger_left();
					
					return;
				}
			}
			
			else if (level.door1_moving == true){
	
				thread door1_trigger_left();
				
				return;
			}
		}
	}
}

door2(){

	level.door2_open = false;
	level.door2_moving = false;
	level.door2_direction = false;
	
	thread door2_trigger_right();
	thread door2_trigger_left();
}

door2_trigger_right(){

	door2 = getent ("md2","targetname");
	door2_trigger_right = getent ("md2t1","targetname");
	damage_door2_trigger_right = getent ("md2td1","targetname");
	damage_door2_trigger_left = getent ("md2td2","targetname");

	while (1){
	
		door2_trigger_right waittill ("trigger");
		
		if (level.door2_open == false){
		
			if(level.door2_moving == false){
			
				level.door2_moving = true;
				level.door2_open = true;
				level.door2_direction = true;
				
				damage_door2_trigger_left TriggerOff();
				damage_door2_trigger_right TriggerOff();
				
				door2 rotateyaw(-90,2,0.5,0.5);
				door2 playsound ("door_wood_creaky_slow_open1");
				door2 waittill ("rotatedone");
				
				level.door2_moving = false;
				
				thread door2_trigger_right();
				
				return;
			}
			
			else if (level.door2_moving == true){
			
				thread door2_trigger_right();
				
				return;
			}
		}
	
		else if(level.door2_open == true){
		
			if(level.door2_moving == false){
	
				if (level.door2_direction == true){
	
					level.door2_moving = true;
					
					door2 rotateyaw(90,2,0.5,0.5);
					door2 playsound ("door_wood_creaky_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_right();
					
					return;
				}
	
				else if (level.door1_direction == false){
		
					level.door2_moving = true;
					
					door2 rotateyaw(-90,2,0.5,0.5);
					door2 playsound ("door_wood_creaky_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_right();
					
					return;
				}
			}
		
			else if (level.door2_moving == true){
	
				thread door2_trigger_right();
				
				return;
			}
		}
	}
}

door2_trigger_left(){

	door2 = getent ("md2","targetname");
	door2_trigger_left = getent ("md2t2","targetname");
	damage_door2_trigger_right = getent ("md2td1","targetname");
	damage_door2_trigger_left = getent ("md2td2","targetname");

	while (1){
	
		door2_trigger_left waittill ("trigger");
		
		if (level.door2_open == false){
		
			if(level.door2_moving == false){
			
				level.door2_moving = true;
				level.door2_open = true;
				level.door2_direction = false;
				
				damage_door2_trigger_left TriggerOff();
				damage_door2_trigger_right TriggerOff();
				
				door2 rotateyaw(90,2,0.5,0.5);
				door2 playsound ("door_wood_creaky_slow_open1");
				door2 waittill ("rotatedone");
				
				level.door2_moving = false;
				
				thread door2_trigger_left();
				
				return;
			}
			
			else if (level.door2_moving == true){
			
				thread door2_trigger_left();
				
				return;
			}
		}
		
		else if(level.door2_open == true){
		
			if(level.door2_moving == false){

				if (level.door2_direction == true){

					level.door2_moving = true;
					
					door2 rotateyaw(90,2,0.5,0.5);
					door2 playsound ("door_wood_creaky_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_left();
					
					return;
				}
				
				else if (level.door2_direction == false){
					
					level.door2_moving = true;
					
					door2 rotateyaw(-90,2,0.5,0.5);
					door2 playsound ("door_wood_creaky_close");
					door2 waittill ("rotatedone");
					
					damage_door2_trigger_left TriggerOn();
					damage_door2_trigger_right TriggerOn();
					
					level.door2_open = false;
					level.door2_moving = false;
					
					thread door2_trigger_left();
					
					return;
				}
			}
			
			else if (level.door2_moving == true){
	
				thread door2_trigger_left();
				
				return;
			}
		}
	}
}

damage_door1(){

	thread damage_door1_trigger_right();
	thread damage_door1_trigger_left();
}

damage_door1_trigger_right(){

	damagefx = loadfx ("dust/exitdoor_dust");
	door1 = getent ("md1","targetname");
	door1_trigger_right = getent ("md1t1","targetname");
	door1_trigger_left = getent ("md1t2","targetname");
	damage_door1_trigger_right = getent ("md1td1","targetname");
	damage_door1_trigger_left = getent ("md1td2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();
			
			door1 moveto((-728.5,197,742),0.2,0.1,0);
			door1 rotateto((0,8,-80),0.2,0.1,0);
			door1 playsound("detpack_explo_wood");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (-765.1,290,741));	
		}
	}
}

damage_door1_trigger_left(){

	damagefx = loadfx ("dust/exitdoor_dust");
	door1 = getent ("md1","targetname");
	door1_trigger_right = getent ("md1t1","targetname");
	door1_trigger_left = getent ("md1t2","targetname");
	damage_door1_trigger_right = getent ("md1td1","targetname");
	damage_door1_trigger_left = getent ("md1td2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door1_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door1_trigger_right TriggerOff();
			door1_trigger_left TriggerOff();
			damage_door1_trigger_right TriggerOff();
			damage_door1_trigger_left TriggerOff();

			door1 moveto((-736.5,93,734),0.2,0.1,0);
			door1 rotateto((0,-10,90),0.2,0.1,0);
			door1 playsound("detpack_explo_wood");	
			door1 waittill ("rotatedone");
			PlayFX(damagefx, (-733.1,86,734));	
		}
	}
}

damage_door2(){

	level.door2_damage = false;
	
	thread damage_door2_trigger_right();
	thread damage_door2_trigger_left();
}

damage_door2_trigger_right(){

	damagefx = loadfx ("dust/exitdoor_dust");
	door2 = getent ("md2","targetname");
	door2_trigger_right = getent ("md2t1","targetname");
	door2_trigger_left = getent ("md2t2","targetname");
	damage_door2_trigger_right = getent ("md2td1","targetname");
	damage_door2_trigger_left = getent ("md2td2","targetname");

	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_right waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();

			door2 moveto((-590.5,203,742),0.2,0.1,0);
			door2 rotateto((0,-12,-80),0.2,0.1,0);
			door2 playsound("detpack_explo_wood");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (-669.1,255,741));	
		}
	}
}

damage_door2_trigger_left(){

	damagefx = loadfx ("dust/exitdoor_dust");
	door2 = getent ("md2","targetname");
	door2_trigger_right = getent ("md2t1","targetname");
	door2_trigger_left = getent ("md2t2","targetname");
	damage_door2_trigger_right = getent ("md2td1","targetname");
	damage_door2_trigger_left = getent ("md2td2","targetname");
	
	doorhealth = 300;
	door_ok = true;
	doordamage = 50;

	while(door_ok){
			
		damage_door2_trigger_left waittill ("damage", amount);
		doorhealth -= amount;
		
		if (doorhealth <= doordamage){
	
			door_ok = false;
			
			door2_trigger_right TriggerOff();
			door2_trigger_left TriggerOff();
			damage_door2_trigger_right TriggerOff();
			damage_door2_trigger_left TriggerOff();
			
			door2 moveto((-578.5,61,734),0.2,0.1,0);
			door2 rotateto((0,15,90),0.2,0.1,0);
			door2 playsound("detpack_explo_wood");	
			door2 waittill ("rotatedone");
			PlayFX(damagefx, (-637.1,51,734));	
		}
	}
}

TriggerOff(){

	if(!isdefined (self.realOrigin))
		self.realOrigin = self.origin;
		
	if(self.origin == self.realorigin)
		self.origin += (0, 0, -10000);
}

TriggerOn(){

	if(isDefined(self.realOrigin))
		self.origin = self.realOrigin;
}