‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_gadget_roulette.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\array_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\flag_shared;
7 #using scripts\shared\flagsys_shared;
8 #using scripts\shared\system_shared;
9 #using scripts\shared\util_shared;
10 #using scripts\shared\weapons\_weaponobjects;
11 #using scripts\shared\visionset_mgr_shared;
12 
13 #using scripts\shared\abilities\_ability_gadgets;
14 #using scripts\shared\abilities\_ability_player;
15 #using scripts\shared\abilities\_ability_power;
16 #using scripts\shared\abilities\_ability_util;
17 
18 #using scripts\shared\_burnplayer;
19 
20 #insert scripts\shared\shared.gsh;
21 #insert scripts\shared\version.gsh;
22 #insert scripts\shared\abilities\_ability_util.gsh;
23 
24 #namespace roulette;
25 
26 ‪REGISTER_SYSTEM( "gadget_roulette", &‪__init__, undefined )
27 
28 #define ROULETTE_STATE_DEFAULT 0
29 #define ROULETTE_STATE_WAIT_FOR_RESPIN 1
30 #define ROULETTE_STATE_SPINNING 2
31 #define ROULETTE_STATE_RESPIN_PROMPT 3 //used in LUA
32 
33 
34 #define ROULETTE_ACTIVATION_WAIT 1.1
35 #define ROULETTE_PRE_RESPIN_WAIT_TIME 1.3
36 #define ROULETTE_RESPIN_ACTIVATION_WAIT 1.2
37 
38 #define PRIMARY_CATEGORY 0
39 #define SECONDARY_CATEGORY 1
40 #define PRIMARY_CATEGORY_TOTAL 0
41 #define SECONDARY_CATEGORY_TOTAL 1
42 
43 function ‪__init__()
44 {
45  ‪clientfield::register( "toplayer", "roulette_state", ‪VERSION_TU11, 2, "int" );
46 
54 
57 
58  if ( SessionModeIsMultiplayerGame() )
59  {
60  level.gadgetRouletteProbabilities = [];
61  level.gadgetRouletteProbabilities[‪PRIMARY_CATEGORY_TOTAL] = 0;
62  level.gadgetRouletteProbabilities[‪SECONDARY_CATEGORY_TOTAL] = 0;
63 
64  level.weaponNone = getWeapon( "none" );
65  level.gadget_roulette = GetWeapon( "gadget_roulette" );
66 
67  // Gadget roll weights first roll second roll
68  ‪registerGadgetType( "gadget_flashback", 1, 1 );
69  ‪registerGadgetType( "gadget_combat_efficiency", 1, 1 );
70  ‪registerGadgetType( "gadget_heat_wave", 1, 1 );
71  ‪registerGadgetType( "gadget_vision_pulse", 1, 1 );
72  ‪registerGadgetType( "gadget_speed_burst", 1, 1 );
73  ‪registerGadgetType( "gadget_camo", 1, 1 );
74  ‪registerGadgetType( "gadget_armor", 1, 1 );
75  ‪registerGadgetType( "gadget_resurrect", 1, 1 );
76  ‪registerGadgetType( "gadget_clone", 1, 1 );
77  //registerGadgetType( "hero_bowlauncher", 1, 1 );
78  //registerGadgetType( "hero_gravityspikes", 1, 1 );
79  //registerGadgetType( "hero_lightninggun", 1, 1 );
80  //registerGadgetType( "hero_pineapplegun", 1, 1 );
81  //registerGadgetType( "hero_flamethrower", 1, 1 );
82  //registerGadgetType( "hero_minigun", 1, 1 );
83  //registerGadgetType( "hero_annihilator", 1, 1 );
84  //registerGadgetType( "hero_chemicalgelgun", 1, 1 );
85  //registerGadgetType( "hero_armblade", 1, 1 );
86  }
87 }
88 
90 {
91  // returns true when local script gadget state is on
92  return self GadgetIsActive( slot );
93 }
94 
96 {
97  // returns true when local script gadget state is flickering
98  return self GadgetFlickering( slot );
99 }
100 
101 function ‪gadget_roulette_on_flicker( slot, weapon )
102 {
103  // excuted when the gadget flickers
104  self thread ‪gadget_roulette_flicker( slot, weapon );
105 }
106 
107 function ‪gadget_roulette_on_give( slot, weapon )
108 {
109  // setup up stuff on player spawned
111 
112  // executed when gadget is added to the players inventory
113 
114  if ( SessionModeIsMultiplayerGame() )
115  {
116  self.isRoulette = true;
117  }
118 }
119 
120 function ‪gadget_roulette_on_take( slot, weapon )
121 {
122  // executed when gadget is removed from the players inventory
123 }
124 
125 //self is the player
127 {
128  // setup up stuff on player connect
130 }
131 
133 {
134  if ( self.isRoulette === true )
135  {
136  if ( !isdefined( self.pers[#"rouletteAllowSpin"] ) )
137  {
138  self.pers[#"rouletteAllowSpin"] = true;
139  }
140  }
141 }
142 
144 {
146 }
147 
149 {
150 }
151 
152 function ‪gadget_roulette_on_activate( slot, weapon )
153 {
155 }
156 
157 function ‪gadget_roulette_is_ready( slot, weapon )
158 {
159  if ( self GadgetIsActive( slot ) )
160  return;
162 }
163 
164 function ‪gadget_roulette_give_earned_specialist( weapon, playSound )
165 {
166  self ‪giveRandomWeapon( weapon, true );
167 
168  if( playSound )
169  {
170  self playsoundtoplayer ("mpl_bm_specialist_roulette", self);
171  }
172 
173  // self thread disable_hero_gadget_activation( GetDvarFloat( "src_roulette_activation_wait", ROULETTE_ACTIVATION_WAIT ) );
174 
175  self thread ‪watchGadgetActivated( weapon );
176  self thread ‪watchRespin( weapon );
177 }
178 
180 {
181  self endon( "death" );
182  self endon( "disconnect" );
183  self endon( "roulette_respin_activate" );
184 
185  self DisableOffhandSpecial();
186 
187  wait duration;
188 
189  self EnableOffhandSpecial();
190 }
191 
193 {
194  self endon( "watchRespinGadgetActivated" );
195  self endon( "death" );
196  self endon( "disconnect" );
197 
198  self waittill( "hero_gadget_activated" );
199 
201 }
202 
203 
204 function ‪watchRespin( weapon )
205 {
206  self endon( "hero_gadget_activated" );
207 
208  self notify( "watchRespin" );
209  self endon( "watchRespin" );
210 
211  if ( !isdefined( self.pers[#"rouletteAllowSpin"] ) || self.pers[#"rouletteAllowSpin"] == false )
212  {
213  return;
214  }
215 
216  self thread ‪watchRespinGadgetActivated();
217 
219 
220  wait GetDvarFloat( "scr_roulette_pre_respin_wait_time", ‪ROULETTE_PRE_RESPIN_WAIT_TIME ); // wait until the "respin activated" animation is done
221 
222  //respinTime = ROULETTE_RESPIN_TIME_SECONDS;
223 
224  while( 1 )
225  {
226  if ( !isdefined( self ) )
227  break;
228 
229  if ( self ‪dpad_left_pressed() )
230  {
231  self.pers[#"rouletteWeapon"] = undefined;
232  self ‪giveRandomWeapon( weapon, false );
233  self.pers[#"rouletteAllowSpin"] = false;
234 
235  self notify( "watchRespinGadgetActivated" );
236  self notify( "roulette_respin_activate" );
238  self playsoundtoplayer ("mpl_bm_specialist_roulette", self);
240 
241  // self DisableOffhandSpecial();
242  // self thread failsafe_reenable_offhand_special();
243 
244  // wait GetDvarFloat( "src_roulette_respin_activation_wait", ROULETTE_RESPIN_ACTIVATION_WAIT );
245 
246  // if ( isdefined( self ) )
247  // {
248  // self notify( "end_failsafe_reenable_offhand_special" );
249  // self EnableOffhandSpecial();
250  //}
251  break;
252  }
253 
255 
256  //respinTime -= SERVER_FRAME;
257  }
258 
259  if ( isdefined( self ) )
260  {
261  self notify( "watchRespinGadgetActivated" );
262  }
263 }
264 
266 {
267  self endon( "end_failsafe_reenable_offhand_special" );
268 
269  wait 3.0;
270 
271  if ( isdefined( self ) )
272  {
273  self EnableOffhandSpecial();
274  }
275 }
276 
278 {
279  self endon( "death" );
280  self endon( "disconnect" );
281 
282  wait( 0.50 );
284 }
285 
286 function ‪watchGadgetActivated( weapon )
287 {
288  self endon( "death" );
289 
290  self notify( "watchGadgetActivated" );
291  self endon ( "watchGadgetActivated" );
292 
293  self waittill( "hero_gadget_activated" );
294 
295  self.pers[#"rouletteAllowSpin"] = true;
296 
297  if ( isdefined( weapon ) || weapon.name != "gadget_roulette" )
298  {
300  }
301 }
302 
303 function ‪giveRandomWeapon( weapon, isPrimaryRoll )
304 {
305  for ( i = ‪GADGET_HELD_0; i < ‪GADGET_HELD_COUNT; i++ )
306  {
307  if ( isdefined( self._gadgets_player[i] ) )
308  {
309  self TakeWeapon( self._gadgets_player[i] );
310  }
311  }
312 
313  randomWeapon = weapon;
314 
315  if ( isdefined( self.pers[#"rouletteWeapon"] ) )
316  {
317  randomWeapon = self.pers[#"rouletteWeapon"];
318  }
319  else if ( isdefined( self.pers[#"previousRouletteWeapon1"] ) || isdefined( self.pers[#"previousRouletteWeapon2"] ) )
320  {
321  randomWeapon = ‪getRandomGadget( isPrimaryRoll );
322  while ( randomWeapon == self.pers[#"previousRouletteWeapon1"] ||
323  ( isdefined( self.pers[#"previousRouletteWeapon2"] ) && randomWeapon == self.pers[#"previousRouletteWeapon2"] ) )
324  {
325  randomWeapon = ‪getRandomGadget( isPrimaryRoll );
326  }
327  }
328  else
329  {
330  randomWeapon = ‪getRandomGadget( isPrimaryRoll );
331  }
332 
333  if ( isdefined( level.playGadgetReady ) && !isPrimaryRoll )
334  {
335  // The standard 'gadget ready' callbacks trigger the dialog just fine for roulette
336  self thread [[level.playGadgetReady]]( randomWeapon, !isPrimaryRoll );
337  }
338 
339  self thread ‪gadget_roulette_on_deactivate_helper( weapon );
340 
341  self GiveWeapon( randomWeapon );
342 
343  self.pers[#"rouletteWeapon"] = randomWeapon;
344  self.pers[#"previousRouletteWeapon2"] = self.pers[#"previousRouletteWeapon1"];
345  self.pers[#"previousRouletteWeapon1"] = randomWeapon;
346 }
347 
348 function ‪gadget_roulette_on_deactivate( slot, weapon )
349 {
351 }
352 
354 {
355  self notify( "gadget_roulette_on_deactivate_helper" );
356  self endon( "gadget_roulette_on_deactivate_helper" );
357 
358  self waittill( "heroAbility_off", weapon_off );
359  if ( isdefined( weapon_off ) && ( weapon_off.name == "gadget_speed_burst" ) )
360  {
361  self waittill( "heroAbility_off", weapon_off );
362  }
363  for ( i = ‪GADGET_HELD_0; i < ‪GADGET_HELD_COUNT; i++ )
364  {
365  if ( isdefined( self ) && isdefined( self._gadgets_player[i] ) )
366  {
367  self TakeWeapon( self._gadgets_player[i] );
368  }
369  }
370 
371  if ( isdefined( self ) )
372  {
373  self GiveWeapon( level.gadget_roulette );
374  self.pers[#"rouletteWeapon"] = undefined;
375  }
376 }
377 
378 function ‪gadget_roulette_flicker( slot, weapon )
379 {
380 }
381 
382 function ‪set_gadget_status( status, time )
383 {
384  timeStr = "";
385 
386  if ( IsDefined( time ) )
387  {
388  timeStr = "^3" + ", time: " + time;
389  }
390 
391  if ( GetDvarInt( "scr_cpower_debug_prints" ) > 0 )
392  self IPrintlnBold( "Gadget Roulette: " + status + timeStr );
393 }
394 
396 {
397  return self ActionSlotThreeButtonPressed();
398 }
399 
400 function ‪getRandomGadget( isPrimaryRoll )
401 {
402  if ( isprimaryroll )
403  {
404  category = ‪PRIMARY_CATEGORY;
405  totalCategory = ‪PRIMARY_CATEGORY_TOTAL;
406  }
407  else
408  {
409  category =‪SECONDARY_CATEGORY;
410  totalCategory = ‪SECONDARY_CATEGORY_TOTAL;
411  }
412 
413  randomGadgetNumber = randomIntRange( 1, level.gadgetRouletteProbabilities[totalCategory] + 1 );
414  gadgetNames = GetArrayKeys( level.gadgetRouletteProbabilities );
415 
416 
417  selectedGadget = "";
418  foreach( gadget in gadgetNames )
419  {
420  randomGadgetNumber -= level.gadgetRouletteProbabilities[gadget][category];
421  if ( randomgadgetnumber <= 0 )
422  {
423  selectedGadget = gadget;
424  break;
425  }
426  }
427  return selectedGadget;
428 }
429 
430 function ‪registerGadgetType( gadgetNameString, primaryWeight, secondaryWeight )
431 {
432  gadgetWeapon = GetWeapon( gadgetNameString );
433  assert( isdefined( gadgetWeapon ) );
434  if ( gadgetWeapon == level.weaponNone)
435  {
436  assertmsg( gadgetNameString + " is not a gadget, _gadget_roulette.gsc" );
437  }
438 
439  if ( !isdefined(level.gadgetRouletteProbabilities[gadgetWeapon]) )
440  {
441  level.gadgetRouletteProbabilities[gadgetWeapon] = [];
442  }
443 
444  level.gadgetRouletteProbabilities[gadgetWeapon][‪PRIMARY_CATEGORY] = primaryWeight;
445  level.gadgetRouletteProbabilities[gadgetWeapon][‪SECONDARY_CATEGORY] = secondaryWeight;
446 
447  level.gadgetRouletteProbabilities[‪PRIMARY_CATEGORY_TOTAL] += primaryWeight;
448  level.gadgetRouletteProbabilities[‪SECONDARY_CATEGORY_TOTAL] += secondaryWeight;
449 }
‪dpad_left_pressed
‪function dpad_left_pressed()
Definition: _gadget_roulette.gsc:395
‪ROULETTE_STATE_DEFAULT
‪#define ROULETTE_STATE_DEFAULT
Definition: _gadget_roulette.gsc:28
‪gadget_roulette_flicker
‪function gadget_roulette_flicker(slot, weapon)
Definition: _gadget_roulette.gsc:378
‪register_gadget_is_flickering_callbacks
‪function register_gadget_is_flickering_callbacks(type, flickering_func)
Definition: _ability_player.gsc:299
‪VERSION_TU11
‪#define VERSION_TU11
Definition: version.gsh:61
‪register_gadget_possession_callbacks
‪function register_gadget_possession_callbacks(type, on_give, on_take)
Definition: _ability_player.gsc:221
‪watchGadgetActivated
‪function watchGadgetActivated(weapon)
Definition: _gadget_roulette.gsc:286
‪set_to_player
‪function set_to_player(str_field_name, n_value)
Definition: clientfield_shared.gsc:58
‪register_gadget_is_inuse_callbacks
‪function register_gadget_is_inuse_callbacks(type, inuse_func)
Definition: _ability_player.gsc:289
‪PRIMARY_CATEGORY_TOTAL
‪#define PRIMARY_CATEGORY_TOTAL
Definition: _gadget_roulette.gsc:40
‪registerGadgetType
‪function registerGadgetType(gadgetNameString, primaryWeight, secondaryWeight)
Definition: _gadget_roulette.gsc:430
‪giveRandomWeapon
‪function giveRandomWeapon(weapon, isPrimaryRoll)
Definition: _gadget_roulette.gsc:303
‪watchRespinGadgetActivated
‪function watchRespinGadgetActivated()
Definition: _gadget_roulette.gsc:192
‪reset_roulette_state_to_default
‪function reset_roulette_state_to_default()
Definition: _gadget_roulette.gsc:277
‪GADGET_HELD_0
‪#define GADGET_HELD_0
Definition: _ability_util.gsh:59
‪register_gadget_should_notify
‪function register_gadget_should_notify(type, should_notify)
Definition: _ability_player.gsc:211
‪gadget_roulette_is_flickering
‪function gadget_roulette_is_flickering(slot)
Definition: _gadget_roulette.gsc:95
‪register_gadget_flicker_callbacks
‪function register_gadget_flicker_callbacks(type, on_flicker)
Definition: _ability_player.gsc:253
‪register_gadget_ready_callbacks
‪function register_gadget_ready_callbacks(type, ready_func)
Definition: _ability_player.gsc:265
‪gadget_roulette_on_deactivate
‪function gadget_roulette_on_deactivate(slot, weapon)
Definition: _gadget_roulette.gsc:348
‪ROULETTE_PRE_RESPIN_WAIT_TIME
‪#define ROULETTE_PRE_RESPIN_WAIT_TIME
Definition: _gadget_roulette.gsc:35
‪__init__
‪function __init__()
Definition: _gadget_roulette.gsc:43
‪roulette_init_allow_spin
‪function roulette_init_allow_spin()
Definition: _gadget_roulette.gsc:132
‪set_gadget_status
‪function set_gadget_status(status, time)
Definition: _gadget_roulette.gsc:382
‪gadget_roulette_on_flicker
‪function gadget_roulette_on_flicker(slot, weapon)
Definition: _gadget_roulette.gsc:101
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪getRandomGadget
‪function getRandomGadget(isPrimaryRoll)
Definition: _gadget_roulette.gsc:400
‪GADGET_HELD_COUNT
‪#define GADGET_HELD_COUNT
Definition: _ability_util.gsh:62
‪gadget_roulette_is_ready
‪function gadget_roulette_is_ready(slot, weapon)
Definition: _gadget_roulette.gsc:157
‪watch_entity_shutdown
‪function watch_entity_shutdown()
Definition: _gadget_roulette.gsc:148
‪gadget_roulette_on_player_spawn
‪function gadget_roulette_on_player_spawn()
Definition: _gadget_roulette.gsc:143
‪register_gadget_activation_callbacks
‪function register_gadget_activation_callbacks(type, turn_on, turn_off)
Definition: _ability_player.gsc:237
‪gadget_roulette_on_activate
‪function gadget_roulette_on_activate(slot, weapon)
Definition: _gadget_roulette.gsc:152
‪gadget_roulette_on_give
‪function gadget_roulette_on_give(slot, weapon)
Definition: _gadget_roulette.gsc:107
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪failsafe_reenable_offhand_special
‪function failsafe_reenable_offhand_special()
Definition: _gadget_roulette.gsc:265
‪gadget_roulette_on_connect
‪function gadget_roulette_on_connect()
Definition: _gadget_roulette.gsc:126
‪ROULETTE_STATE_WAIT_FOR_RESPIN
‪#define ROULETTE_STATE_WAIT_FOR_RESPIN
Definition: _gadget_roulette.gsc:29
‪disable_hero_gadget_activation
‪function disable_hero_gadget_activation(duration)
Definition: _gadget_roulette.gsc:179
‪SECONDARY_CATEGORY_TOTAL
‪#define SECONDARY_CATEGORY_TOTAL
Definition: _gadget_roulette.gsc:41
‪gadget_roulette_on_deactivate_helper
‪function gadget_roulette_on_deactivate_helper(weapon)
Definition: _gadget_roulette.gsc:353
‪gadget_roulette_give_earned_specialist
‪function gadget_roulette_give_earned_specialist(weapon, playSound)
Definition: _gadget_roulette.gsc:164
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪watchRespin
‪function watchRespin(weapon)
Definition: _gadget_roulette.gsc:204
‪SECONDARY_CATEGORY
‪#define SECONDARY_CATEGORY
Definition: _gadget_roulette.gsc:39
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪ROULETTE_STATE_SPINNING
‪#define ROULETTE_STATE_SPINNING
Definition: _gadget_roulette.gsc:30
‪PRIMARY_CATEGORY
‪#define PRIMARY_CATEGORY
Definition: _gadget_roulette.gsc:38
‪gadget_roulette_is_inuse
‪function gadget_roulette_is_inuse(slot)
Definition: _gadget_roulette.gsc:89
‪GADGET_TYPE_ROULETTE
‪#define GADGET_TYPE_ROULETTE
Definition: _ability_util.gsh:49
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265
‪gadget_roulette_on_take
‪function gadget_roulette_on_take(slot, weapon)
Definition: _gadget_roulette.gsc:120