‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_mgturret.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #insert scripts\shared\shared.gsh;
4 
5 #namespace mgturret;
6 
7 function ‪main()
8 {
9  if( GetDvarString( "mg42" ) == "" )
10  {
11  SetDvar( "mgTurret", "off" );
12  }
13 
14  level.magic_distance = 24;
15 
16  turretInfos = getEntArray( "turretInfo", "targetname" );
17  for( index = 0; index < turretInfos.size; index++ )
18  {
19  turretInfos[index] Delete();
20  }
21 }
22 
23 function ‪set_difficulty( difficulty )
24 {
26 
27  turrets = GetEntArray( "misc_turret", "classname" );
28 
29  for( index = 0; index < turrets.size; index++ )
30  {
31  if( isdefined( turrets[index].script_skilloverride ) )
32  {
33  switch( turrets[index].script_skilloverride )
34  {
35  case "easy":
36  difficulty = "easy";
37  break;
38  case "medium":
39  difficulty = "medium";
40  break;
41  case "hard":
42  difficulty = "hard";
43  break;
44  case "fu":
45  difficulty = "fu";
46  break;
47  default:
48  continue;
49  }
50  }
51  ‪turret_set_difficulty( turrets[index], difficulty );
52  }
53 }
54 
56 {
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;
62 
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;
68 
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;
74 
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;
80 }
81 
82 function ‪turret_set_difficulty( turret, difficulty )
83 {
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"];
89 }
90 
91 function ‪turret_suppression_fire( targets ) // self == turret
92 {
93  self endon( "death" );
94  self endon( "stop_suppression_fire" );
95  if( !isdefined( self.suppresionFire ) )
96  {
97  self.suppresionFire = true;
98  }
99 
100  for( ;; )
101  {
102  while( self.suppresionFire )
103  {
104  self SetTargetEntity( targets[RandomInt( targets.size )] );
105  wait( 2 + RandomFloat( 2 ) );
106  }
107 
108  self ClearTargetEntity();
109  while( !self.suppresionFire )
110  {
111  wait( 1 );
112  }
113  }
114 }
115 
116 // returns a time frame for the burst fire depending on the setting parameter
117 function ‪burst_fire_settings( setting )
118 {
119  if( setting == "delay" )
120  {
121  return 0.2;
122  }
123  else if( setting == "delay_range" )
124  {
125  return 0.5;
126  }
127  else if( setting == "burst" )
128  {
129  return 0.5;
130  }
131  else if( setting == "burst_range" )
132  {
133  return 4;
134  }
135 }
136 
137 // makes the turret burst fire with delays in between
138 function ‪burst_fire( turret, manual_target )
139 {
140  turret endon( "death" ); // MikeD: Incase we delete the turret.
141  turret endon( "stopfiring" );
142  self endon( "stop_using_built_in_burst_fire" );
143 
144 
145  if( isdefined( turret.script_delay_min ) )
146  {
147  turret_delay = turret.script_delay_min;
148  }
149  else
150  {
151  turret_delay = ‪burst_fire_settings( "delay" );
152  }
153 
154  if( isdefined( turret.script_delay_max ) )
155  {
156  turret_delay_range = turret.script_delay_max - turret_delay;
157  }
158  else
159  {
160  turret_delay_range = ‪burst_fire_settings( "delay_range" );
161  }
162 
163  if( isdefined( turret.script_burst_min ) )
164  {
165  turret_burst = turret.script_burst_min;
166  }
167  else
168  {
169  turret_burst = ‪burst_fire_settings( "burst" );
170  }
171 
172  if( isdefined( turret.script_burst_max ) )
173  {
174  turret_burst_range = turret.script_burst_max - turret_burst;
175  }
176  else
177  {
178  turret_burst_range = ‪burst_fire_settings( "burst_range" );
179  }
180 
181  while( 1 )
182  {
183  turret StartFiring();
184 
185 
186 
187  if( isdefined( manual_target ) )
188  {
189  turret thread ‪random_spread( manual_target );
190  }
191  turret ‪do_shoot();
192 
193  wait( turret_burst + RandomFloat( turret_burst_range ) );
194 
195  turret StopShootTurret();
196 
197  turret StopFiring();
198 
199  wait( turret_delay + RandomFloat( turret_delay_range ) );
200  }
201 }
202 
203 // auto targeting and burst firing at the targets
204 function ‪burst_fire_unmanned() // self == turret
205 {
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" );
211 
212  if ( isdefined( self.controlled ) && self.controlled )
213  {
214  return;
215  }
216 
217  if( isdefined( self.script_delay_min ) )
218  {
219  turret_delay = self.script_delay_min;
220  }
221  else
222  {
223  turret_delay = ‪burst_fire_settings( "delay" );
224  }
225 
226  if( isdefined( self.script_delay_max ) )
227  {
228  turret_delay_range = self.script_delay_max - turret_delay;
229  }
230  else
231  {
232  turret_delay_range = ‪burst_fire_settings( "delay_range" );
233  }
234 
235  if( isdefined( self.script_burst_min ) )
236  {
237  turret_burst = self.script_burst_min;
238  }
239  else
240  {
241  turret_burst = ‪burst_fire_settings( "burst" );
242  }
243 
244  if( isdefined( self.script_burst_max ) )
245  {
246  turret_burst_range = self.script_burst_max - turret_burst;
247  }
248  else
249  {
250  turret_burst_range = ‪burst_fire_settings( "burst_range" );
251  }
252 
253  pauseUntilTime = GetTime();
254  turretState = "start";
255  // SRS 05/02/07 - added this for link_turrets() so we can accurately tell when the function is
256  // actually firing or just waiting between bursts (IsFiringTurret() returns true the whole time)
257  self.script_shooting = false;
258 
259  for( ;; )
260  {
261  if( isdefined( self.manual_targets ) )
262  {
263  self ClearTargetEntity();
264  self SetTargetEntity( self.manual_targets[RandomInt( self.manual_targets.size )] );
265  }
266 
267  duration = ( pauseUntilTime - GetTime() ) * 0.001;
268  if( self IsFiringTurret() && (duration <= 0) )
269  {
270  if( turretState != "fire" )
271  {
272  turretState = "fire";
273  self playsound ("mpl_turret_alert"); // Play a state change sound CDC
274 
275  self thread ‪do_shoot();
276  self.script_shooting = true;
277  }
278 
279  duration = turret_burst + RandomFloat( turret_burst_range );
280 
281  //println( "fire duration: ", duration );
282  self thread ‪turret_timer( duration );
283 
284  self waittill( "turretstatechange" ); // code or script
285 
286  self.script_shooting = false;
287 
288  duration = turret_delay + RandomFloat( turret_delay_range );
289  //println( "stop fire duration: ", duration );
290 
291  pauseUntilTime = GetTime() + Int( duration * 1000 );
292  }
293  else
294  {
295  if( turretState != "aim" )
296  {
297  turretState = "aim";
298  }
299 
300  //println( "aim duration: ", duration );
301  self thread ‪turret_timer( duration );
302 
303  // TODO: make the turret scan back and forth
304 
305  self waittill( "turretstatechange" ); // code or script
306  }
307  }
308 }
309 
310 function ‪do_shoot()
311 {
312  self endon( "death" );
313  self endon( "turretstatechange" ); // code or script
314 
315  for( ;; )
316  {
317  self ShootTurret();
318  wait( 0.112 );
319  }
320 }
321 
322 // waits for a duration and sends a turret state change notify
323 function ‪turret_timer( duration )
324 {
325  if( duration <= 0 )
326  {
327  return;
328  }
329 
330  self endon( "turretstatechange" ); // code
331 
332  //println( "start turret timer" );
333 
334  wait( duration );
335  if( isdefined( self ) )
336  {
337  self notify( "turretstatechange" );
338  }
339 
340  //println( "end turret timer" );
341 }
342 
343 function ‪random_spread( ent )
344 {
345  self endon( "death" );
346 
347  self notify( "stop random_spread" );
348  self endon( "stop random_spread" );
349 
350  self endon( "stopfiring" );
351  self SetTargetEntity( ent );
352 
353  self.manual_target = ent;
354 
355  while( 1 )
356  {
357 
358  // SCRIPTER_MOD
359  // MikeD( 3/21/2007 ): No more level.player
360  // if( ent == level.player )
361  // ent.origin = self.manual_target GetOrigin();
362  // else
363  // ent.origin = self.manual_target.origin;
364 
365  if( IsPlayer( ent ) )
366  {
367  ent.origin = self.manual_target GetOrigin();
368  }
369  else
370  {
371  ent.origin = self.manual_target.origin;
372  }
373 
374  ent.origin += ( 20 - RandomFloat( 40 ), 20 - RandomFloat( 40 ), 20 - RandomFloat( 60 ) );
375  wait( 0.2 );
376  }
377 }
‪burst_fire_unmanned
‪function burst_fire_unmanned()
Definition: _mgturret.gsc:204
‪turret_set_difficulty
‪function turret_set_difficulty(turret, difficulty)
Definition: _mgturret.gsc:82
‪turret_timer
‪function turret_timer(duration)
Definition: _mgturret.gsc:323
‪main
‪function main()
Definition: _mgturret.gsc:7
‪random_spread
‪function random_spread(ent)
Definition: _mgturret.gsc:343
‪turret_suppression_fire
‪function turret_suppression_fire(targets)
Definition: _mgturret.gsc:91
‪set_difficulty
‪function set_difficulty(difficulty)
Definition: _mgturret.gsc:23
‪burst_fire_settings
‪function burst_fire_settings(setting)
Definition: _mgturret.gsc:117
‪do_shoot
‪function do_shoot()
Definition: _mgturret.gsc:310
‪burst_fire
‪function burst_fire(turret, manual_target)
Definition: _mgturret.gsc:138
‪init_turret_difficulty_settings
‪function init_turret_difficulty_settings()
Definition: _mgturret.gsc:55