1 #using scripts\codescripts\struct;
3 #insert scripts\shared\shared.gsh;
9 if( GetDvarString(
"mg42" ) ==
"" )
11 SetDvar(
"mgTurret",
"off" );
14 level.magic_distance = 24;
16 turretInfos = getEntArray(
"turretInfo",
"targetname" );
17 for( index = 0; index < turretInfos.size; index++ )
19 turretInfos[index] Delete();
27 turrets = GetEntArray(
"misc_turret",
"classname" );
29 for( index = 0; index < turrets.size; index++ )
31 if( isdefined( turrets[index].script_skilloverride ) )
33 switch( turrets[index].script_skilloverride )
39 difficulty =
"medium";
57 level.mgTurretSettings[
"easy"][
"convergenceTime"] = 2.5;
58 level.mgTurretSettings[
"easy"][
"suppressionTime"] = 3.0;
59 level.mgTurretSettings[
"easy"][
"accuracy"] = 0.38;
60 level.mgTurretSettings[
"easy"][
"aiSpread"] = 2;
61 level.mgTurretSettings[
"easy"][
"playerSpread"] = 0.5;
63 level.mgTurretSettings[
"medium"][
"convergenceTime"] = 1.5;
64 level.mgTurretSettings[
"medium"][
"suppressionTime"] = 3.0;
65 level.mgTurretSettings[
"medium"][
"accuracy"] = 0.38;
66 level.mgTurretSettings[
"medium"][
"aiSpread"] = 2;
67 level.mgTurretSettings[
"medium"][
"playerSpread"] = 0.5;
69 level.mgTurretSettings[
"hard"][
"convergenceTime"] = .8;
70 level.mgTurretSettings[
"hard"][
"suppressionTime"] = 3.0;
71 level.mgTurretSettings[
"hard"][
"accuracy"] = 0.38;
72 level.mgTurretSettings[
"hard"][
"aiSpread"] = 2;
73 level.mgTurretSettings[
"hard"][
"playerSpread"] = 0.5;
75 level.mgTurretSettings[
"fu"][
"convergenceTime"] = .4;
76 level.mgTurretSettings[
"fu"][
"suppressionTime"] = 3.0;
77 level.mgTurretSettings[
"fu"][
"accuracy"] = 0.38;
78 level.mgTurretSettings[
"fu"][
"aiSpread"] = 2;
79 level.mgTurretSettings[
"fu"][
"playerSpread"] = 0.5;
84 turret.convergenceTime = level.mgTurretSettings[difficulty][
"convergenceTime"];
85 turret.suppressionTime = level.mgTurretSettings[difficulty][
"suppressionTime"];
86 turret.accuracy = level.mgTurretSettings[difficulty][
"accuracy"];
87 turret.aiSpread = level.mgTurretSettings[difficulty][
"aiSpread"];
88 turret.playerSpread = level.mgTurretSettings[difficulty][
"playerSpread"];
93 self endon(
"death" );
94 self endon(
"stop_suppression_fire" );
95 if( !isdefined(
self.suppresionFire ) )
97 self.suppresionFire =
true;
102 while(
self.suppresionFire )
104 self SetTargetEntity( targets[RandomInt( targets.size )] );
105 wait( 2 + RandomFloat( 2 ) );
108 self ClearTargetEntity();
109 while( !
self.suppresionFire )
119 if( setting ==
"delay" )
123 else if( setting ==
"delay_range" )
127 else if( setting ==
"burst" )
131 else if( setting ==
"burst_range" )
140 turret endon(
"death" );
141 turret endon(
"stopfiring" );
142 self endon(
"stop_using_built_in_burst_fire" );
145 if( isdefined( turret.script_delay_min ) )
147 turret_delay = turret.script_delay_min;
154 if( isdefined( turret.script_delay_max ) )
156 turret_delay_range = turret.script_delay_max - turret_delay;
163 if( isdefined( turret.script_burst_min ) )
165 turret_burst = turret.script_burst_min;
172 if( isdefined( turret.script_burst_max ) )
174 turret_burst_range = turret.script_burst_max - turret_burst;
183 turret StartFiring();
187 if( isdefined( manual_target ) )
193 wait( turret_burst + RandomFloat( turret_burst_range ) );
195 turret StopShootTurret();
199 wait( turret_delay + RandomFloat( turret_delay_range ) );
206 self notify(
"stop_burst_fire_unmanned" );
207 self endon(
"stop_burst_fire_unmanned" );
208 self endon(
"death" );
209 self endon(
"remote_start" );
210 level endon(
"game_ended" );
212 if ( isdefined(
self.controlled ) &&
self.controlled )
217 if( isdefined(
self.script_delay_min ) )
219 turret_delay =
self.script_delay_min;
226 if( isdefined(
self.script_delay_max ) )
228 turret_delay_range =
self.script_delay_max - turret_delay;
235 if( isdefined(
self.script_burst_min ) )
237 turret_burst =
self.script_burst_min;
244 if( isdefined(
self.script_burst_max ) )
246 turret_burst_range =
self.script_burst_max - turret_burst;
253 pauseUntilTime = GetTime();
254 turretState =
"start";
257 self.script_shooting =
false;
261 if( isdefined(
self.manual_targets ) )
263 self ClearTargetEntity();
264 self SetTargetEntity(
self.manual_targets[RandomInt(
self.manual_targets.size )] );
267 duration = ( pauseUntilTime - GetTime() ) * 0.001;
268 if(
self IsFiringTurret() && (duration <= 0) )
270 if( turretState !=
"fire" )
272 turretState =
"fire";
273 self playsound (
"mpl_turret_alert");
276 self.script_shooting =
true;
279 duration = turret_burst + RandomFloat( turret_burst_range );
284 self waittill(
"turretstatechange" );
286 self.script_shooting =
false;
288 duration = turret_delay + RandomFloat( turret_delay_range );
291 pauseUntilTime = GetTime() + Int( duration * 1000 );
295 if( turretState !=
"aim" )
305 self waittill(
"turretstatechange" );
312 self endon(
"death" );
313 self endon(
"turretstatechange" );
330 self endon(
"turretstatechange" );
335 if( isdefined(
self ) )
337 self notify(
"turretstatechange" );
345 self endon(
"death" );
347 self notify(
"stop random_spread" );
348 self endon(
"stop random_spread" );
350 self endon(
"stopfiring" );
351 self SetTargetEntity( ent );
353 self.manual_target = ent;
365 if( IsPlayer( ent ) )
367 ent.origin =
self.manual_target GetOrigin();
371 ent.origin =
self.manual_target.origin;
374 ent.origin += ( 20 - RandomFloat( 40 ), 20 - RandomFloat( 40 ), 20 - RandomFloat( 60 ) );