‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_weap_tesla.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\util_shared;
4 
5 #insert scripts\shared\shared.gsh;
6 
7 #using scripts\zm\_zm_lightning_chain;
8 #using scripts\zm\_zm_weapons;
9 
10 #insert scripts\zm\_zm_weap_tesla.gsh;
11 
12 
13 #precache( "client_fx", "zombie/fx_tesla_rail_view_zmb" );
14 #precache( "client_fx", "zombie/fx_tesla_tube_view_zmb" );
15 #precache( "client_fx", "zombie/fx_tesla_tube_view2_zmb" );
16 #precache( "client_fx", "zombie/fx_tesla_tube_view3_zmb" );
17 
18 #precache( "client_fx", "zombie/fx_tesla_rail_view_ug_zmb" );
19 #precache( "client_fx", "zombie/fx_tesla_tube_view_ug_zmb" );
20 #precache( "client_fx", "zombie/fx_tesla_tube_view2_ug_zmb" );
21 #precache( "client_fx", "zombie/fx_tesla_tube_view3_ug_zmb" );
22 
23 function ‪init()
24 {
25  level.weaponZMTeslaGun = GetWeapon( "tesla_gun" );
26  level.weaponZMTeslaGunUpgraded = GetWeapon( "tesla_gun_upgraded" );
27  if ( !‪zm_weapons::is_weapon_included( level.weaponZMTeslaGun ) && !(isdefined( level.uses_tesla_powerup ) && level.uses_tesla_powerup) )
28  {
29  return;
30  }
31 
32  level._effect["tesla_viewmodel_rail"] = "zombie/fx_tesla_rail_view_zmb";
33  level._effect["tesla_viewmodel_tube"] = "zombie/fx_tesla_tube_view_zmb";
34  level._effect["tesla_viewmodel_tube2"] = "zombie/fx_tesla_tube_view2_zmb";
35  level._effect["tesla_viewmodel_tube3"] = "zombie/fx_tesla_tube_view3_zmb";
36 
37  level._effect["tesla_viewmodel_rail_upgraded"] = "zombie/fx_tesla_rail_view_ug_zmb";
38  level._effect["tesla_viewmodel_tube_upgraded"] = "zombie/fx_tesla_tube_view_ug_zmb";
39  level._effect["tesla_viewmodel_tube2_upgraded"] = "zombie/fx_tesla_tube_view2_ug_zmb";
40  level._effect["tesla_viewmodel_tube3_upgraded"] = "zombie/fx_tesla_tube_view3_ug_zmb";
41 
42  level thread ‪player_init();
43  level thread ‪tesla_notetrack_think();
44 }
45 
46 function ‪player_init()
47 {
49  level.tesla_play_fx = [];
50  level.tesla_play_rail = true;
51 
52  players = GetLocalPlayers();
53  for( i = 0; i < players.size; i++ )
54  {
55  level.tesla_play_fx[i] = false;
56  players[i] thread ‪tesla_fx_rail( i );
57  players[i] thread ‪tesla_fx_tube( i );
58  players[i] thread ‪tesla_happy( i );
59  players[i] thread ‪tesla_change_watcher( i );
60  }
61 }
62 
63 function ‪tesla_fx_rail( localclientnum )
64 {
65  self endon( "disconnect" );
66  self endon( "entityshutdown" );
67 
68  for( ;; )
69  {
70  waitrealtime( RandomFloatRange( 8, 12 ) );
71 
72  if ( !level.tesla_play_fx[localclientnum] )
73  {
74  continue;
75  }
76  if ( !level.tesla_play_rail )
77  {
78  continue;
79  }
80 
81  currentweapon = GetCurrentWeapon( localclientnum );
82  if ( currentweapon != level.weaponZMTeslaGun && currentweapon != level.weaponZMTeslaGunUpgraded )
83  {
84  continue;
85  }
86 
87  if ( IsADS( localclientnum ) || IsThrowingGrenade( localclientnum ) || IsMeleeing( localclientnum ) || IsOnTurret( localclientnum ) )
88  {
89  continue;
90  }
91 
92  if ( GetWeaponAmmoClip( localclientnum, currentweapon ) <= 0 )
93  {
94  continue;
95  }
96 
97  fx = level._effect["tesla_viewmodel_rail"];
98 
99  if ( currentweapon == level.weaponZMTeslaGunUpgraded )
100  {
101  fx = level._effect["tesla_viewmodel_rail_upgraded"];
102  }
103 
104  PlayViewmodelFx( localclientnum, fx, "tag_flash" );
105  playsound(localclientnum,"wpn_tesla_effects", (0,0,0));
106  }
107 }
108 
109 function ‪tesla_fx_tube( localclientnum )//self = player
110 {
111  self endon( "disconnect" );
112  self endon( "entityshutdown" );
113 
114  for( ;; )
115  {
116  waitrealtime( 0.1 );
117 
118  if ( !level.tesla_play_fx[localclientnum] )
119  {
120  continue;
121  }
122 
123  w_current = GetCurrentWeapon( localclientnum );
124  if ( w_current != level.weaponZMTeslaGun && w_current != level.weaponZMTeslaGunUpgraded )
125  {
126  continue;
127  }
128 
129  if ( IsThrowingGrenade( localclientnum ) || IsMeleeing( localclientnum ) || IsOnTurret( localclientnum ) )
130  {
131  continue;
132  }
133 
134  n_ammo = GetWeaponAmmoClip( localclientnum, w_current );
135 
136  if ( n_ammo <= 0 )
137  {
138  self ‪clear_tesla_tube_effect( localclientnum );
139  continue;
140  }
141 
142  str_fx = level._effect["tesla_viewmodel_tube"];
143 
144  if ( w_current == level.weaponZMTeslaGunUpgraded )
145  {
146  switch( n_ammo )
147  {
148  case 1:
149  case 2:
150  str_fx = level._effect["tesla_viewmodel_tube3_upgraded"];
151  n_tint = ‪N_BULB_TINT_TWO_OFF;
152  break;
153 
154  case 3:
155  case 4:
156  str_fx = level._effect["tesla_viewmodel_tube2_upgraded"];
157  n_tint = ‪N_BULB_TINT_ONE_OFF;
158  break;
159 
160  default:
161  str_fx = level._effect["tesla_viewmodel_tube_upgraded"];
162  n_tint = ‪N_BULB_TINT_ALL_ON;
163  break;
164  }
165  }
166  else // regular tesla gun
167  {
168  switch( n_ammo )
169  {
170  case 1:
171  str_fx = level._effect["tesla_viewmodel_tube3"];
172  n_tint = ‪N_BULB_TINT_TWO_OFF;
173  break;
174 
175  case 2:
176  str_fx = level._effect["tesla_viewmodel_tube2"];
177  n_tint = ‪N_BULB_TINT_ONE_OFF;
178  break;
179 
180  default:
181  str_fx = level._effect["tesla_viewmodel_tube"];
182  n_tint = ‪N_BULB_TINT_ALL_ON;
183  break;
184  }
185  }
186 
187  if( self.str_tesla_current_tube_effect === str_fx )
188  {
189  continue;
190  }
191  else
192  {
193  if( isdefined( self.n_tesla_tube_fx_id ) )
194  {
195  DeleteFx( localClientNum, self.n_tesla_tube_fx_id, true );
196  }
197  self.str_tesla_current_tube_effect = str_fx;
198  self.n_tesla_tube_fx_id = PlayViewmodelFx( localclientnum, str_fx, "tag_brass" );
199  self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, 1, n_tint, 0 );
200  }
201  }
202 }
203 
205 {
206  for ( ;; )
207  {
208  level waittill( "notetrack", localclientnum, note );
209 
210  //println( "@@@ Got notetrack: " + note + " for client: " + localclientnum );
211 
212  switch( note )
213  {
214  case "tesla_play_fx_off":
215  level.tesla_play_fx[localclientnum] = false;
216  break;
217 
218  case "tesla_play_fx_on":
219  level.tesla_play_fx[localclientnum] = true;
220  break;
221 
222  }
223  }
224 }
225 
226 function ‪tesla_happy( localclientnum )
227 {
228  for(;;)
229  {
230  level waittill ("TGH");
231  currentweapon = GetCurrentWeapon( localclientnum );
232  if ( currentweapon == level.weaponZMTeslaGun || currentweapon == level.weaponZMTeslaGunUpgraded )
233  {
234  playsound(localclientnum,"wpn_tesla_happy", (0,0,0));
235  level.tesla_play_rail = false;
236  waitrealtime(2);
237  level.tesla_play_rail = true;
238  }
239 
240  }
241 }
242 
243 //kill looping effect if player switches from tesla
244 function ‪tesla_change_watcher( localclientnum )//self = player
245 {
246  self endon( "disconnect" );
247 
248  while( true )
249  {
250  self waittill( "weapon_change" );
251 
252  self ‪clear_tesla_tube_effect( localclientnum );
253  }
254 }
255 
256 function ‪clear_tesla_tube_effect( localclientnum )//self = player
257 {
258  if( isdefined( self.n_tesla_tube_fx_id ) )
259  {
260  DeleteFx( localClientNum, self.n_tesla_tube_fx_id, true );
261  self.n_tesla_tube_fx_id = undefined;
262  self.str_tesla_current_tube_effect = undefined;
263  self MapShaderConstant( localClientNum, 0, "scriptVector2", 0, 1, ‪N_BULB_TINT_ALL_OFF, 0 );
264  }
265 }
‪waitforclient
‪function waitforclient(client)
Definition: util_shared.csc:60
‪tesla_notetrack_think
‪function tesla_notetrack_think()
Definition: _zm_weap_tesla.csc:204
‪tesla_fx_tube
‪function tesla_fx_tube(localclientnum)
Definition: _zm_weap_tesla.csc:109
‪tesla_change_watcher
‪function tesla_change_watcher(localclientnum)
Definition: _zm_weap_tesla.csc:244
‪is_weapon_included
‪function is_weapon_included(weapon)
Definition: _zm_weapons.csc:51
‪tesla_happy
‪function tesla_happy(localclientnum)
Definition: _zm_weap_tesla.csc:226
‪init
‪function init()
Definition: _zm_weap_tesla.csc:23
‪tesla_fx_rail
‪function tesla_fx_rail(localclientnum)
Definition: _zm_weap_tesla.csc:63
‪N_BULB_TINT_TWO_OFF
‪#define N_BULB_TINT_TWO_OFF
Definition: _zm_weap_tesla.gsh:3
‪N_BULB_TINT_ONE_OFF
‪#define N_BULB_TINT_ONE_OFF
Definition: _zm_weap_tesla.gsh:2
‪N_BULB_TINT_ALL_ON
‪#define N_BULB_TINT_ALL_ON
Definition: _zm_weap_tesla.gsh:1
‪N_BULB_TINT_ALL_OFF
‪#define N_BULB_TINT_ALL_OFF
Definition: _zm_weap_tesla.gsh:4
‪player_init
‪function player_init()
Definition: _zm_weap_tesla.csc:46
‪clear_tesla_tube_effect
‪function clear_tesla_tube_effect(localclientnum)
Definition: _zm_weap_tesla.csc:256