1 #using scripts\codescripts\struct;
3 #using scripts\shared\system_shared;
4 #using scripts\shared\array_shared;
5 #using scripts\shared\util_shared;
7 #insert scripts\shared\shared.gsh;
9 #precache( "fx", "destruct/fx_dest_k_rail" );
10 #precache( "fx", "destruct/fx_dest_k_rail_crumble01" );
11 #precache( "fx", "destruct/fx_dest_k_rail_crumble02" );
12 #precache( "fx", "destruct/fx_dest_k_rail_crumble03" );
24 cover_array = GetEntArray(
"dest_cover",
"targetname");
28 cover_array_geo = GetEntArray(
"dest_cover_geo",
"targetname");
40 self.break_fx = level._effect[
"k_rail_destruct" ];
41 self.chunk_fx = level._effect[
"k_rail_destruct" ];
42 self.break_sound =
"dst_cover_concrete";
43 self.chunk_sound =
"dst_cover_concrete";
46 self DisconnectPaths();
48 if(isDefined(
self.script_noteworthy) &&
self.script_noteworthy ==
"dest_krail")
53 self.PartTags_upper =
array(
"krail_upper_01_jnt",
"krail_upper_02_jnt",
"krail_upper_03_jnt",
"krail_upper_04_jnt",
"krail_upper_05_jnt",
"krail_upper_06_jnt");
54 self.PartTags_mid =
array(
"krail_mid_01_jnt",
"krail_mid_02_jnt",
"krail_mid_03_jnt",
"krail_mid_04_jnt",
"krail_mid_05_jnt",
"krail_mid_06_jnt");
55 self.PartTags_btm =
array(
"krail_btm_01_jnt",
"krail_btm_02_jnt",
"krail_btm_03_jnt",
"krail_btm_04_jnt",
"krail_btm_05_jnt",
"krail_btm_06_jnt");
57 self.PartTags =
array(
"krail_upper_01_jnt",
"krail_upper_02_jnt",
"krail_upper_03_jnt",
"krail_upper_04_jnt",
"krail_upper_05_jnt",
"krail_upper_06_jnt",
58 "krail_mid_01_jnt",
"krail_mid_02_jnt",
"krail_mid_03_jnt",
"krail_mid_04_jnt",
"krail_mid_05_jnt",
"krail_mid_06_jnt",
59 "krail_btm_01_jnt",
"krail_btm_02_jnt",
"krail_btm_03_jnt",
"krail_btm_04_jnt",
"krail_btm_05_jnt",
"krail_btm_06_jnt");
61 self.PartTags_dmg =
array(
"krail_upper_01_jnt",
"krail_upper_02_jnt",
"krail_upper_03_jnt");
63 self.PartTags_chips = [];
65 self.health_data = [];
66 foreach( tag
in self.PartTags)
68 self.health_data[tag] = 100;
69 self.health_full[tag] = 100;
71 foreach( tag
in self.PartTags_chips)
73 self.health_data[tag] = 35;
74 self.health_full[tag] = 35;
78 self.break_fx = level._effect[
"k_rail_destruct" ];
79 self.chunk_fx = level._effect[
"k_rail_destruct" ];
80 self.break_sound =
"dst_cover_concrete";
81 self.chunk_sound =
"dst_cover_concrete";
83 if(!IsDefined(
self.angles))
84 self.angles = (0, 0, 0);
86 self.coll_model =
spawn(
"script_model",
self.origin);
87 self.coll_model.angles = (
self.angles);
88 self.coll_model setmodel(
"fxdest_bc_krail_whole");
98 foreach( tag
in self.PartTags)
100 if( IsSubStr(tag,
"krail_upper_"))
101 self.part_links[tag] = [];
103 if(tag ==
"krail_mid_01_jnt")
104 self.part_links[tag] =
array(
"krail_upper_01_jnt");
106 if(tag ==
"krail_mid_02_jnt")
107 self.part_links[tag] =
array(
"krail_upper_01_jnt",
"krail_upper_02_jnt",
"krail_mid_01_jnt");
109 if(tag ==
"krail_mid_03_jnt")
110 self.part_links[tag] =
array(
"krail_upper_02_jnt",
"krail_upper_03_jnt",
"krail_upper_04_jnt");
112 if(tag ==
"krail_mid_04_jnt")
113 self.part_links[tag] =
array(
"krail_upper_03_jnt",
"krail_upper_04_jnt",
"krail_upper_05_jnt");
115 if(tag ==
"krail_mid_05_jnt")
116 self.part_links[tag] =
array(
"krail_upper_05_jnt",
"krail_upper_06_jnt",
"krail_mid_06_jnt");
118 if(tag ==
"krail_mid_06_jnt")
119 self.part_links[tag] =
array(
"krail_upper_06_jnt");
122 if(tag ==
"krail_btm_01_jnt")
123 self.part_links[tag] =
array(
"krail_upper_01_jnt",
"krail_mid_01_jnt");
125 if(tag ==
"krail_btm_02_jnt")
126 self.part_links[tag] =
array(
"krail_upper_02_jnt",
"krail_mid_02_jnt");
128 if(tag ==
"krail_btm_03_jnt")
129 self.part_links[tag] =
array(
"krail_upper_03_jnt",
"krail_mid_03_jnt");
131 if(tag ==
"krail_btm_04_jnt")
132 self.part_links[tag] =
array(
"krail_upper_04_jnt",
"krail_mid_04_jnt");
134 if(tag ==
"krail_btm_05_jnt")
135 self.part_links[tag] =
array(
"krail_upper_05_jnt",
"krail_mid_05_jnt");
137 if(tag ==
"krail_btm_06_jnt")
138 self.part_links[tag] =
array(
"krail_upper_06_jnt",
"krail_mid_06_jnt");
150 for ( i = 0; i < tag_array.size; i++ )
152 self HidePart(tag_array[i] +
"_cracks");
160 self setcandamage(
true);
161 destroyed_pieces = [];
165 self.damaged = undefined;
167 self waittill(
"damage", amount, who, direction_vec, point, type, modelName, tagName, partName );
171 if(!IsDefined(
self.health_data[partName]))
175 if(isSubStr(partName, (
"_chunk" )))
178 dmg =
self.health_data[partName] - amount;
183 part_hlth =
self.health_full[partName];
188 foreach( str
in self.PartTags_chips)
190 if(isSubStr(str, (partName +
"_chunk") &&
self.health_data[str] > 0))
192 self.health_data[str] =
self.health_data[str] - amount;
193 if(
self.health_data[str] <= 0)
201 self.health_data[partName] =
self.health_data[partName] - amount;
202 part_hlth =
self.health_data[partName];
209 if(part_hlth < (
self.health_full[partName] * 0.5) && part_hlth > 0 )
211 foreach( str
in self.PartTags_dmg)
215 self ShowPart( str +
"_cracks" );
225 if(IsDefined(
self.part_links[partName]) &&
self.part_links[partName].size > 0 )
227 str =
self.part_links[partName];
228 for(i = 0; i < str.size; i ++)
230 if(
self.health_data[str[i]] <= 0)
232 array::exclude(
self.part_links[partName], str[i] );
236 hlth_dmg =
self.health_full[str[i]] * (randomfloatrange(0.1, 0.4));
239 self thread
pass_on_damage(hlth_dmg, direction_vec, who, str[i], type);
242 self.health_data[partName] =
self.health_full[partName];
253 while(IsDefined(
self.damaged))
258 pos =
self GetTagOrigin( tag );
264 PlayFxOnTag(
self.chunk_fx,
self, chunk);
266 self playsound(
self.chunk_sound );
268 self HidePart( chunk );
274 level._effect[
"k_rail_destruct" ] =
"destruct/fx_dest_k_rail";
275 level._effect[
"k_rail_crumble01" ] =
"destruct/fx_dest_k_rail_crumble01";
276 level._effect[
"k_rail_crumble02" ] =
"destruct/fx_dest_k_rail_crumble02";
277 level._effect[
"k_rail_crumble03" ] =
"destruct/fx_dest_k_rail_crumble03";
284 PlayFxOnTag(
self.break_fx,
self, tag);
286 self playsound(
self.break_sound);
288 foreach( str
in self.PartTags_dmg)
292 self HidePart( str +
"_cracks" );
304 if(IsSubStr(tag,
"_upper_"))
306 array::exclude(
self.PartTags_upper, tag );
308 else if(IsSubStr(tag,
"_mid_"))
310 array::exclude(
self.PartTags_mid, tag );
312 else if(IsSubStr(tag,
"_btm_"))
314 array::exclude(
self.PartTags_btm, tag );
317 if(
self.PartTags_upper.size <= 0 &&
self.PartTags_mid.size > 0 )
319 self.coll_model setmodel(
"fxdest_bc_krail_med");
321 else if(
self.PartTags_upper.size <= 0 &&
self.PartTags_mid.size <= 0 )
323 self.coll_model setmodel(
"fxdest_bc_krail_low");
333 self.break_fx = level._effect[
"k_rail_destruct" ];
334 self.chunk_fx = level._effect[
"k_rail_destruct" ];
335 self.break_sound =
"dst_cover_concrete";
336 self.chunk_sound =
"dst_cover_concrete";
338 pieces = GetEntArray(
self.target,
"targetname");
340 If(!IsDefined(
self.script_int ))
345 foreach( part
in pieces)
347 if(IsDefined(part.script_float))
349 part.hlth = part.script_float;
362 if(
self.script_int == 6 )
364 if(part.script_int == 0 || part.script_int == 1 || part.script_int == 2 || part.script_int == 3 || part.script_int == 4 || part.script_int == 5)
367 if(part.script_int == 6)
370 if(part.script_int == 7)
373 if(part.script_int == 8)
376 if(part.script_int == 9)
379 if(part.script_int == 10)
382 if(part.script_int == 11)
385 if(part.script_int == 12)
388 if(part.script_int == 13)
391 if(part.script_int == 14)
394 if(part.script_int == 15)
397 if(part.script_int == 16)
400 if(part.script_int == 17)
411 else if(
self.script_int == 4 )
413 if(part.script_int == 0 || part.script_int == 1 || part.script_int == 2 || part.script_int == 3)
416 if(part.script_int == 4)
419 if(part.script_int == 5)
422 if(part.script_int == 6)
425 if(part.script_int == 7)
428 if(part.script_int == 8)
431 if(part.script_int == 9)
434 if(part.script_int == 10)
437 if(part.script_int == 11)
440 if(part.script_int == 12)
443 if(part.script_int == 13)
446 if(part.script_int == 14)
449 if(part.script_int == 15)
452 if(part.script_int == 16)
455 if(part.script_int == 17)
458 if(part.script_int == 18)
461 if(part.script_int == 19)
465 else if(
self.script_int == 2 )
477 foreach( ent
in self)
479 if(ent.script_int ==
int)
488 self setcandamage(
true);
492 self waittill(
"damage",amount, who);
494 self.hlth =
self.hlth - amount;
497 if(
self.hlth < (
self.script_float * 0.5) && IsDefined(
self.script_noteworthy))
499 foreach( str
in main_part.PartTags_dmg)
501 if(str ==
self.script_noteworthy)
503 main_part ShowPart( str +
"_cracks" );
512 if(IsDefined(
self.links) &&
self.links.size > 0 )
516 foreach(ent
in self.links)
524 ent DoDamage(
self.script_float * (randomfloatrange(0.1, 0.4)) , ent.origin + (0, 0, 10));
528 if(destroyed >=
self.links.size)
536 self.hlth =
self.script_float;
552 self.destroyed =
true;
554 PlayFx(main_part.break_fx,
self.origin);
556 self playsound(main_part.break_sound);