[Tutorial] Doppeltür (die man umschießen kann)

Mapicted


Script und Map by: Nightwing -*bM.oLLe OtZe~, Mapicted - *bM.jt~, OLD MAN WITH GUN



Bei dieser Doppeltür lassen sich beide Türblätter einzeln öffnen und schließen.
Sie öffnet sich jeweils in die entsprechende Richtung, also immer von einem weg.
Die Türen lassen sich mit einer Granate, C4 oder ein paar Schüssen umschiessen.
Dies kann man nur machen, wenn die Tür geschlossen ist, die Tür fällt auch wie beim Öffnen, je nachdem von welcher Seite man schießt, in die entsprechende Richtung.
Alles natürlich mit Sound um FX.

Um die Tür in Deine Map einzubauen solltest du erst dieses Tutorial angeschaut und verstanden haben: Klick

Hier eine Beispielmap mit der Tür und den Triggern: Beispielmap

Die Tür ist 512 we über dem Türrahmen und offen, damit auch die Kanten bei der Lichtberechnung ausgeleuchtet werden. Sie wird beim Mapstart an die richtige Stelle geschoben.

Wenn man die Tür in eine andere Richtung in die Map einbaut als in der Beispielmap, dann müssen manche Winkel im Script angepasst werden.

Der FX beim Umfallen der Tür muss jeweils mit den richtigen Koordinaten
- an welcher Stelle der FX in der Map spielen soll - angepasst werden.
Also immer da wo die Tür hinfällt
//PlayFX(damagefx, (301,546,-316));
Ich habe den"fx,dust/abrams_desk_dust" verwendet


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:
588:
   
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.5,0.3,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.5,0.3,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.5,0.3,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.5,0.3,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;
}



***

Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10975

***