1 #using scripts\codescripts\struct;
3 #insert scripts\shared\shared.gsh;
5 #namespace zm_mgturret;
11 if( GetDvarString(
"mg42" ) ==
"" )
13 SetDvar(
"mgTurret",
"off" );
16 level.magic_distance = 24;
18 turretInfos = getEntArray(
"turretInfo",
"targetname" );
19 for( index = 0; index < turretInfos.size; index++ )
21 turretInfos[index] Delete();
29 turrets = GetEntArray(
"misc_turret",
"classname" );
31 for( index = 0; index < turrets.size; index++ )
33 if( isdefined( turrets[index].script_skilloverride ) )
35 switch( turrets[index].script_skilloverride )
41 difficulty =
"medium";
59 level.mgTurretSettings[
"easy"][
"convergenceTime"] = 2.5;
60 level.mgTurretSettings[
"easy"][
"suppressionTime"] = 3.0;
61 level.mgTurretSettings[
"easy"][
"accuracy"] = 0.38;
62 level.mgTurretSettings[
"easy"][
"aiSpread"] = 2;
63 level.mgTurretSettings[
"easy"][
"playerSpread"] = 0.5;
65 level.mgTurretSettings[
"medium"][
"convergenceTime"] = 1.5;
66 level.mgTurretSettings[
"medium"][
"suppressionTime"] = 3.0;
67 level.mgTurretSettings[
"medium"][
"accuracy"] = 0.38;
68 level.mgTurretSettings[
"medium"][
"aiSpread"] = 2;
69 level.mgTurretSettings[
"medium"][
"playerSpread"] = 0.5;
71 level.mgTurretSettings[
"hard"][
"convergenceTime"] = .8;
72 level.mgTurretSettings[
"hard"][
"suppressionTime"] = 3.0;
73 level.mgTurretSettings[
"hard"][
"accuracy"] = 0.38;
74 level.mgTurretSettings[
"hard"][
"aiSpread"] = 2;
75 level.mgTurretSettings[
"hard"][
"playerSpread"] = 0.5;
77 level.mgTurretSettings[
"fu"][
"convergenceTime"] = .4;
78 level.mgTurretSettings[
"fu"][
"suppressionTime"] = 3.0;
79 level.mgTurretSettings[
"fu"][
"accuracy"] = 0.38;
80 level.mgTurretSettings[
"fu"][
"aiSpread"] = 2;
81 level.mgTurretSettings[
"fu"][
"playerSpread"] = 0.5;
86 turret.convergenceTime = level.mgTurretSettings[difficulty][
"convergenceTime"];
87 turret.suppressionTime = level.mgTurretSettings[difficulty][
"suppressionTime"];
88 turret.accuracy = level.mgTurretSettings[difficulty][
"accuracy"];
89 turret.aiSpread = level.mgTurretSettings[difficulty][
"aiSpread"];
90 turret.playerSpread = level.mgTurretSettings[difficulty][
"playerSpread"];
95 self endon(
"death" );
96 self endon(
"stop_suppression_fire" );
97 if( !isdefined(
self.suppresionFire ) )
99 self.suppresionFire =
true;
104 while(
self.suppresionFire )
106 self SetTargetEntity( targets[RandomInt( targets.size )] );
107 wait( 2 + RandomFloat( 2 ) );
110 self ClearTargetEntity();
111 while( !
self.suppresionFire )
121 if( setting ==
"delay" )
125 else if( setting ==
"delay_range" )
129 else if( setting ==
"burst" )
133 else if( setting ==
"burst_range" )
142 turret endon(
"death" );
143 turret endon(
"stopfiring" );
144 self endon(
"stop_using_built_in_burst_fire" );
147 if( isdefined( turret.script_delay_min ) )
149 turret_delay = turret.script_delay_min;
156 if( isdefined( turret.script_delay_max ) )
158 turret_delay_range = turret.script_delay_max - turret_delay;
165 if( isdefined( turret.script_burst_min ) )
167 turret_burst = turret.script_burst_min;
174 if( isdefined( turret.script_burst_max ) )
176 turret_burst_range = turret.script_burst_max - turret_burst;
185 turret StartFiring();
189 if( isdefined( manual_target ) )
195 wait( turret_burst + RandomFloat( turret_burst_range ) );
197 turret StopShootTurret();
201 wait( turret_delay + RandomFloat( turret_delay_range ) );
208 self notify(
"stop_burst_fire_unmanned" );
209 self endon(
"stop_burst_fire_unmanned" );
210 self endon(
"death" );
211 self endon(
"remote_start" );
212 level endon(
"game_ended" );
214 if ( isdefined(
self.controlled ) &&
self.controlled )
219 if( isdefined(
self.script_delay_min ) )
221 turret_delay =
self.script_delay_min;
228 if( isdefined(
self.script_delay_max ) )
230 turret_delay_range =
self.script_delay_max - turret_delay;
237 if( isdefined(
self.script_burst_min ) )
239 turret_burst =
self.script_burst_min;
246 if( isdefined(
self.script_burst_max ) )
248 turret_burst_range =
self.script_burst_max - turret_burst;
255 pauseUntilTime = GetTime();
256 turretState =
"start";
259 self.script_shooting =
false;
263 if( isdefined(
self.manual_targets ) )
265 self ClearTargetEntity();
266 self SetTargetEntity(
self.manual_targets[RandomInt(
self.manual_targets.size )] );
269 duration = ( pauseUntilTime - GetTime() ) * 0.001;
270 if(
self IsFiringTurret() && (duration <= 0) )
272 if( turretState !=
"fire" )
274 turretState =
"fire";
275 self playsound (
"mpl_turret_alert");
278 self.script_shooting =
true;
281 duration = turret_burst + RandomFloat( turret_burst_range );
286 self waittill(
"turretstatechange" );
288 self.script_shooting =
false;
290 duration = turret_delay + RandomFloat( turret_delay_range );
293 pauseUntilTime = GetTime() + Int( duration * 1000 );
297 if( turretState !=
"aim" )
307 self waittill(
"turretstatechange" );
315 if (!isdefined(level._zm_mgturret_firing))
316 level._zm_mgturret_firing = 0;
317 level._zm_mgturret_firing++;
319 level._zm_mgturret_firing--;
326 self endon(
"death" );
327 self endon(
"turretstatechange" );
331 while (
IS_TRUE(level._zm_mgturret_firing))
349 self endon(
"turretstatechange" );
354 if( isdefined(
self ) )
356 self notify(
"turretstatechange" );
364 self endon(
"death" );
366 self notify(
"stop random_spread" );
367 self endon(
"stop random_spread" );
369 self endon(
"stopfiring" );
370 self SetTargetEntity( ent );
372 self.manual_target = ent;
384 if( IsPlayer( ent ) )
386 ent.origin =
self.manual_target GetOrigin();
390 ent.origin =
self.manual_target.origin;
393 ent.origin += ( 20 - RandomFloat( 40 ), 20 - RandomFloat( 40 ), 20 - RandomFloat( 60 ) );