‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_missile_swarm.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\system_shared;
5 
6 #insert scripts\shared\shared.gsh;
7 #insert scripts\shared\version.gsh;
8 
9 #precache( "client_fx", "killstreaks/fx_hrpy_swrm_exhaust_trail_close" );
10 
11 #using_animtree( "mp_missile_drone" );
12 
13 #namespace missile_swarm;
14 
15 ‪REGISTER_SYSTEM( "missile_swarm", &‪__init__, undefined )
16 
17 function ‪__init__()
18 {
19  level._effect["swarm_tail"] = "killstreaks/fx_hrpy_swrm_exhaust_trail_close";
20 
22 }
23 
24 function ‪swarm_start( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
25 {
26  player = GetLocalPlayer( localClientNum );
27 
28  if ( !isdefined( player ) )
29  {
30  return;
31  }
32 
33  if ( player GetInKillcam( localClientNum ) )
34  {
35  return;
36  }
37 
38  if ( IsDemoPlaying() )
39  {
40  return;
41  }
42 
43  if ( newVal && newVal != oldVal && newval != 2 )
44  {
45  player thread ‪swarm_think( localClientNum, getmapcenter() );
46  }
47  else if ( !newVal )
48  {
49  level notify( "missile_swarm_stop" );
50  }
51  else if ( newVal == 2 )
52  {
53  level notify( "missile_emp_death" );
54  level notify( "missile_swarm_stop" );
55  }
56 }
57 
58 function ‪swarm_think( localClientNum, sound_origin )
59 {
60  level endon( "missile_swarm_stop" );
61  self endon( "entityshutdown" );
62 
63  self.missile_swarm_count = 0;
64  self.missile_swarm_max = 12;
65 
66  level thread ‪swarm_sound( localClientNum, sound_origin );
67 
68  for ( ;; )
69  {
70  assert( self.missile_swarm_count >= 0 );
71 
72  if ( self.missile_swarm_count > self.missile_swarm_max )
73  {
74  wait( 0.5 );
75  continue;
76  }
77 
78  count = RandomIntRange( 1, 3 );
79  self.missile_swarm_count += count;
80 
81  for ( i = 0; i < count; i++ )
82  {
83  self ‪projectile_spawn( localClientNum );
84  }
85 
86  wait( ( self.missile_swarm_count / self.missile_swarm_max ) );
87  }
88 }
89 
90 function ‪projectile_spawn( localClientNum )
91 {
92  dist = 10000;
93  upVector = ( 0, 0, RandomIntRange( 1000, 1300 ) );
94 
95  yaw = RandomIntRange( 0, 360 );
96  angles = ( 0, yaw, 0 );
97  forward = AnglesToForward( angles );
98 
99  origin = self.origin + upVector + forward * dist * -1;
100  ‪end = self.origin + upVector + forward * dist;
101 
102  rocket = ‪spawn( localClientNum, origin, "script_model" );
103  rocket SetModel( "veh_t6_drone_hunterkiller_viewmodel" );
104 
105  rocket UseAnimTree( #animtree );
106  rocket SetAnim( %o_drone_hunter_launch, 1.0, 0.0, 1.0 );
107 
108  rocket thread ‪projectile_move_think( localClientNum, self, origin, ‪end );
109  rocket thread ‪projectile_delete_think( localClientNum );
110 }
111 
112 function ‪projectile_move_think( localClientNum, player, start, ‪end )
113 {
114  level endon( "missile_emp_death" );
115 
116  wait( RandomFloatRange( 0.5, 1 ) );
117 
118  PlayFxOnTag( localClientNum, level._effect["swarm_tail"], self, "tag_origin" );
119 
120  direction = ‪end - self.origin;
121  self RotateTo( vectortoangles( direction ), 0.05 );
122  self waittill( "rotatedone" );
123 
124  self MoveTo( ‪end, RandomFloatRange( 12, 18 ) );
125  self waittill( "movedone" );
126 
127  if ( isdefined( player ) )
128  {
129  player.missile_swarm_count--;
130  }
131 
132  self delete();
133 }
134 
135 function ‪swarm_sound( localClientNum, origin )
136 {
137  level endon( "missile_swarm_stop" );
138  entity = ‪spawn( localClientNum, origin, "script_model" );
139  entity thread ‪deleteOnMissileSwarmStop();
140 
141  wait( 2 );
142 
143  entity PlayLoopSound( "veh_harpy_drone_swarm_close__lp", 1 );
144 }
145 
147 {
148  level waittill( "missile_swarm_stop" );
149  self StopAllLoopSounds( 1 );
150 
151  wait( 1 );
152  self delete();
153 }
154 
155 function ‪projectile_delete_think( localClientNum )
156 {
157  self endon( "death" );
158 
159  level waittill( "missile_emp_death" );
160 
161  if( isdefined( self ) )
162  {
163  self delete();
164  }
165 }
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪swarm_start
‪function swarm_start(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _missile_swarm.csc:24
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪projectile_delete_think
‪function projectile_delete_think(localClientNum)
Definition: _missile_swarm.csc:155
‪deleteOnMissileSwarmStop
‪function deleteOnMissileSwarmStop()
Definition: _missile_swarm.csc:146
‪end
‪function end(final)
Definition: _killcam.gsc:511
‪projectile_move_think
‪function projectile_move_think(localClientNum, player, start, end)
Definition: _missile_swarm.csc:112
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪__init__
‪function __init__()
Definition: _missile_swarm.csc:17
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪swarm_think
‪function swarm_think(localClientNum, sound_origin)
Definition: _missile_swarm.csc:58
‪projectile_spawn
‪function projectile_spawn(localClientNum)
Definition: _missile_swarm.csc:90
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪swarm_sound
‪function swarm_sound(localClientNum, origin)
Definition: _missile_swarm.csc:135