‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_gadget_multirocket.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\flagsys_shared;
5 
6 #using scripts\shared\abilities\_ability_player;
7 #using scripts\shared\abilities\_ability_power;
8 #using scripts\shared\abilities\_ability_util;
9 
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
12 #insert scripts\shared\abilities\_ability_util.gsh;
13 
14 #using scripts\shared\system_shared;
15 
16 ‪REGISTER_SYSTEM( "gadget_multirocket", &‪__init__, undefined )
17 
18 function ‪__init__()
19 {
25 
28 
29  level.weaponGadgetMultirocket = GetWeapon( ‪get_gadget_name() );
30 }
31 
33 {
34  return "gadget_multirocket";
35 }
36 
38 {
39  return level.weaponGadgetMultirocket;
40 }
41 
43 {
44  // returns true when the gadget is on
45  return self ‪flagsys::get( "gadget_multirocket_on" );
46 }
47 
49 {
50  // returns true when the gadget is flickering
51  return self ‪flagsys::get( "gadget_multirocket_flickering" );
52 }
53 
54 function ‪gadget_multirocket_on_flicker( slot, weapon )
55 {
56  // excuted when the gadget flickers
57  self thread ‪gadget_multirocket_flicker( 200 );
58 }
59 
60 function ‪gadget_multirocket_on_give( slot, weapon )
61 {
62  // executed when gadget is added to the players inventory
63 }
64 
65 function ‪gadget_multirocket_on_take( slot, weapon )
66 {
67  // executed when gadget is removed from the players inventory
68 }
69 
70 //self is the player
72 {
73  // setup up stuff on player connect
74 }
75 
76 function ‪gadget_multirocket_on( slot, weapon )
77 {
78  // excecutes when the gadget is turned on
79  self ‪flagsys::set( "gadget_multirocket_on" );
80  //self playsound( "wpn_mrocket_ui_on" );
84 }
85 
86 function ‪gadget_multirocket_off( slot, weapon )
87 {
88  self notify( "gadget_multirocket_off" );
89  //self playsound( "wpn_mrocket_ui_off" );
90  // excecutes when the gadget is turned off
91 
93 
94  self ‪flagsys::clear( "gadget_multirocket_on" );
95 }
96 
98 {
99  if ( IsDefined( status ) )
100  {
101  statusStr = " ^3" + status;
102  }
103 
104  if ( IsDefined( time ) )
105  {
106  timeStr = " ^3" + ", time: " + time;
107  }
108 
109  if ( GetDvarInt( "scr_cpower_debug_prints" ) > 0 )
110  self IPrintlnBold( "Gadget Multirocket Flicker:" + statusStr + timeStr );
111 }
112 
113 function ‪gadget_multirocket_flicker( eventTime )
114 {
115  self endon( "disconnect" );
116 
117  time = GetTime();
118 
119  if ( self ‪flagsys::get( "gadget_multirocket_flickering" ) )
120  {
121  // don't queue or extend flickers
122  return;
123  }
124 
125  self ‪flagsys::set( "gadget_multirocket_flickering" );
126 
127  self._gadget_multirocket_flicker_timeout = time + eventTime;
128 
129  self ‪set_gadget_multirocket_flicker_status( eventTime, "I'm flickering" );
130 
131  while( 1 )
132  {
133  currentTime = GetTime();
134 
135  if ( currentTime > self._gadget_multirocket_flicker_timeout )
136  {
137  self._gadget_multirocket_flicker_timeout = undefined;
138  self ‪flagsys::clear( "gadget_multirocket_flickering" );
139  return;
140  }
141 
142  wait( 0.5 );
143  }
144 }
145 
146 function ‪gadget_multirocket_target_acquire() //looks for enemy ai to target
147 {
148  self endon( "death" );
149  self endon( "weapon_fired" );
150  self endon( "weapon_switch_started" );
151 
152  n_range = self._gadgets_player.multirocketRange;
153  n_max = self._gadgets_player.multirocketTargetNumber;
154  n_targetRadius = self._gadgets_player.multirocketTargetRadius;
155  self.n_targets_marked = 0;
156 
157  while( 1 )
158  {
159  if ( self GetCurrentWeapon() == ‪get_gadget_weapon() )
160  {
161  a_ai_enemies = GetAITeamArray( "axis" );
162 
163  if ( IsDefined( a_ai_enemies ) )
164  {
165  a_ai_targets = ArraySort( a_ai_enemies, self.origin, true, a_ai_enemies.size, n_range );
166 
167  for ( i = 0; i < a_ai_targets.size; i++ )
168  {
169  if ( IsAlive( a_ai_targets[i] ) )
170  {
171  if ( a_ai_targets[i] SightConeTrace( self GetEye(), self ) && Target_IsInCircle( a_ai_targets[i], self, 65, n_targetRadius ) )
172  {
173  if ( !IsDefined( a_ai_targets[i].targetFXEnt ) && ( self.n_targets_marked < n_max ) ) //only mark if max targets not met
174  {
175  a_ai_targets[i].targetFXEnt = ‪spawn("script_model", a_ai_targets[i].origin + (0,0,80) );
176  a_ai_targets[i].targetFXEnt SetModel( "p7_proto_stealth_diamond" );
177  a_ai_targets[i].targetFXEnt linkto( a_ai_targets[i] );
178 
179  self.n_targets_marked++;
180 
181  self playsoundtoplayer( "wpn_mrocket_ui_tag", self );
182 
184  wait self._gadgets_player.multirocketAcquisitionTime;
185  }
186  }
187  else if ( IsDefined( a_ai_targets[i].targetFXEnt ) )
188  {
189  a_ai_targets[i].targetFXEnt Delete(); //remove target mark if out of view, range, etc...
190 
191  self.n_targets_marked--;
192 
193  if ( self.n_targets_marked < 1 )
194  {
196  }
197  }
198  }
199  }
200  }
201  }
202 
204  }
205 }
206 
207 function ‪gadget_multirocket_weapon_watcher() //marked targets are cleared when the gagdget is off
208 {
209  self ‪flagsys::wait_till_clear( "gadget_multirocket_on" );
210 
212 }
213 
214 function ‪gadget_multirocket_fire_watcher() //rockets fire at marked targets
215 {
216  self endon( "death" );
217 
218  while( 1 )
219  {
220  self waittill( "weapon_fired", weapon );
221 
222  if ( weapon == ‪get_gadget_weapon() )
223  {
224  self thread ‪gadget_multirocket_fire();
227  }
228  }
229 }
230 
232 {
233  self endon( "death" );
234 
235  if ( !self ‪flagsys::get( "gadget_multirocket_on" ) )
236  {
237  return;
238  }
239 
240  a_ai_enemies = GetAITeamArray( "axis" );
241  a_ai_targets = [];
242 
243  foreach( ai_enemy in a_ai_enemies )
244  {
245  if ( IsAlive( ai_enemy ) && IsDefined( ai_enemy.targetFXEnt ) )
246  {
247  ArrayInsert( a_ai_targets, ai_enemy, 0 );
248  }
249  }
250 
251  for ( i = 0; i < a_ai_targets.size; i++ )
252  {
253  if ( IsAlive( a_ai_targets[i] ) )
254  {
255  if ( a_ai_targets[i].origin[2] > self.origin[2] + 72 )
256  {
257  v_target = a_ai_targets[i].origin + (0,0,50);
258  }
259 
260  v_target = a_ai_targets[i] GetEye();
261 
262  v_angles = anglestoforward(self getPlayerAngles());
263  v_vec = vectorNormalize(v_angles);
264  //v_launch_spot = (v_vec * 50) + (0, 0, 72) ;
265  v_launch_spot = (self.origin + (0, 0, 72) ) + (v_angles * 50) ;
266 
267  e_rocket = MagicBullet( "smaw_gadget_multirocket", v_launch_spot, v_target, self );
268 
269  if ( IsDefined( e_rocket ) )
270  {
271  e_rocket thread ‪gadget_multirocket_proximity_explode( a_ai_targets[i] );
272  }
273 
274  self thread ‪sndFakeFire();
275 
276  self ‪ability_power::power_loss_event( undefined, self._gadgets_player.multirocketFirePowerLoss, "rocket_fired" );
277 
278  wait self._gadgets_player.multirocketFireInterval;
279  }
280  }
281 
282  wait 2; //wait a bit to allow rockets to explode
283 
285 }
286 
287 function ‪sndFakeFire()
288 {
289  num = 3;
290 
291  for(i=0;i<num;i++)
292  {
293  self playsound( "wpn_mrocket_fire" );
294  wait(.15);
295  }
296 }
297 
299 {
300  self.n_targets_marked = 0;
301 
302  a_ai_targets = GetAITeamArray( "axis" );
303 
304  foreach( ai_target in a_ai_targets )
305  {
306  if ( IsDefined( ai_target.targetFXEnt ) )
307  {
308  ai_target.targetFXEnt Delete();
309  }
310  }
311 }
312 
313 function ‪on_target_killed( params )
314 {
315  if ( IsDefined( self.targetFXEnt ) )
316  {
317  self.targetFXEnt Delete();
318  }
319 }
320 
322 {
323  if ( !IsDefined( level.hud_gadget ) )
324  {
325  level.hud_gadget = NewHudElem();
326  level.hud_gadget.alignX = "right";
327  level.hud_gadget.alignY = "middle";
328  level.hud_gadget.x = 660;
329  level.hud_gadget.y = 320;
330  level.hud_gadget.fontscale = 2.0;
331  level.hud_gadget SetText( "RT: FIRE" );
332  }
333 }
334 
336 {
337  if ( IsDefined( level.hud_gadget ) )
338  {
339  level.hud_gadget Destroy();
340  }
341 }
342 
343 function ‪gadget_multirocket_proximity_explode( ai_target ) //self = rocket
344 {
345  self endon( "death" );
346  ai_target endon( "death" );
347 
348  n_dist = 85;
349 
350  while( Distance2DSquared( self.origin, ai_target geteye() ) > n_dist * n_dist )
351  {
353  }
354 
355  self Detonate();
356 }
‪on_target_killed
‪function on_target_killed(params)
Definition: _gadget_multirocket.gsc:313
‪gadget_multirocket_fire_watcher
‪function gadget_multirocket_fire_watcher()
Definition: _gadget_multirocket.gsc:214
‪register_gadget_is_flickering_callbacks
‪function register_gadget_is_flickering_callbacks(type, flickering_func)
Definition: _ability_player.gsc:299
‪set_gadget_multirocket_flicker_status
‪function set_gadget_multirocket_flicker_status(time, status)
Definition: _gadget_multirocket.gsc:97
‪register_gadget_possession_callbacks
‪function register_gadget_possession_callbacks(type, on_give, on_take)
Definition: _ability_player.gsc:221
‪clear
‪function clear(str_flag)
Definition: flag_shared.csc:130
‪register_gadget_is_inuse_callbacks
‪function register_gadget_is_inuse_callbacks(type, inuse_func)
Definition: _ability_player.gsc:289
‪gadget_multirocket_on_flicker
‪function gadget_multirocket_on_flicker(slot, weapon)
Definition: _gadget_multirocket.gsc:54
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪power_loss_event
‪function power_loss_event(slot, eAttacker, val, source)
Definition: _ability_power.gsc:199
‪gadget_multirocket_on_connect
‪function gadget_multirocket_on_connect()
Definition: _gadget_multirocket.gsc:71
‪register_gadget_flicker_callbacks
‪function register_gadget_flicker_callbacks(type, on_flicker)
Definition: _ability_player.gsc:253
‪gadget_multirocket_off
‪function gadget_multirocket_off(slot, weapon)
Definition: _gadget_multirocket.gsc:86
‪gadget_multirocket_on_give
‪function gadget_multirocket_on_give(slot, weapon)
Definition: _gadget_multirocket.gsc:60
‪gadget_multirocket_fire_hint_on
‪function gadget_multirocket_fire_hint_on()
Definition: _gadget_multirocket.gsc:321
‪gadget_multirocket_fire_hint_off
‪function gadget_multirocket_fire_hint_off()
Definition: _gadget_multirocket.gsc:335
‪register_gadget_activation_callbacks
‪function register_gadget_activation_callbacks(type, turn_on, turn_off)
Definition: _ability_player.gsc:237
‪gadget_multirocket_remove_targets
‪function gadget_multirocket_remove_targets()
Definition: _gadget_multirocket.gsc:298
‪gadget_multirocket_is_inuse
‪function gadget_multirocket_is_inuse()
Definition: _gadget_multirocket.gsc:42
‪get_gadget_weapon
‪function get_gadget_weapon()
Definition: _gadget_multirocket.gsc:37
‪GADGET_TYPE_MULTI_ROCKET
‪#define GADGET_TYPE_MULTI_ROCKET
Definition: _ability_util.gsh:11
‪gadget_multirocket_fire
‪function gadget_multirocket_fire()
Definition: _gadget_multirocket.gsc:231
‪gadget_multirocket_on_take
‪function gadget_multirocket_on_take(slot, weapon)
Definition: _gadget_multirocket.gsc:65
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪gadget_multirocket_flicker
‪function gadget_multirocket_flicker(eventTime)
Definition: _gadget_multirocket.gsc:113
‪on_actor_killed
‪function on_actor_killed(func, obj)
Definition: callbacks_shared.gsc:357
‪gadget_multirocket_on
‪function gadget_multirocket_on(slot, weapon)
Definition: _gadget_multirocket.gsc:76
‪gadget_multirocket_target_acquire
‪function gadget_multirocket_target_acquire()
Definition: _gadget_multirocket.gsc:146
‪gadget_multirocket_weapon_watcher
‪function gadget_multirocket_weapon_watcher()
Definition: _gadget_multirocket.gsc:207
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪gadget_multirocket_proximity_explode
‪function gadget_multirocket_proximity_explode(ai_target)
Definition: _gadget_multirocket.gsc:343
‪sndFakeFire
‪function sndFakeFire()
Definition: _gadget_multirocket.gsc:287
‪gadget_multirocket_is_flickering
‪function gadget_multirocket_is_flickering()
Definition: _gadget_multirocket.gsc:48
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪wait_till_clear
‪function wait_till_clear(str_flag)
Definition: flag_shared.csc:248
‪__init__
‪function __init__()
Definition: _gadget_multirocket.gsc:18
‪get_gadget_name
‪function get_gadget_name()
Definition: _gadget_multirocket.gsc:32
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265