‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_weap_riotshield.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\laststand_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 #using scripts\shared\weapons\_weaponobjects;
10 
11 #insert scripts\shared\shared.gsh;
12 #insert scripts\shared\archetype_shared\archetype_shared.gsh;
13 
14 #using scripts\shared\ai\zombie_death;
15 #using scripts\shared\ai\zombie_utility;
16 
17 #using scripts\zm\_util;
18 #using scripts\zm\_zm;
19 #using scripts\zm\_zm_audio;
20 #using scripts\zm\_zm_equipment;
21 #using scripts\zm\_zm_laststand;
22 #using scripts\zm\_zm_spawner;
23 #using scripts\zm\_zm_stats;
24 #using scripts\zm\_zm_unitrigger;
25 #using scripts\zm\_zm_utility;
26 #using scripts\zm\_zm_weapons;
27 
28 #insert scripts\zm\_zm_buildables.gsh;
29 #insert scripts\zm\_zm_utility.gsh;
30 #insert scripts\shared\version.gsh;
31 
32 #define HINT_ICON "riotshield_zm_icon"
33 #define GROUND_LEVEL 0
34 
35 #define RIOTSHIELD_HEALTH_CLIENTFIELD "zmInventory.shield_health"
36 
37 
38 #precache( "material", HINT_ICON );
39 #precache( "string", "ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
40 
41 #namespace riotshield;
42 
43 ‪REGISTER_SYSTEM_EX( "zm_equip_riotshield", &‪__init__, &‪__main__, undefined )
44 
45 function ‪__init__()
46 {
47  ‪DEFAULT(level.weaponRiotshield,GetWeapon( "riotshield" ));
48 
50 
51  ‪zombie_utility::set_zombie_var( "riotshield_cylinder_radius", 360 );
52  ‪zombie_utility::set_zombie_var( "riotshield_fling_range", 90 );
53  ‪zombie_utility::set_zombie_var( "riotshield_gib_range", 90 );
54  ‪zombie_utility::set_zombie_var( "riotshield_gib_damage", 75 );
55  ‪zombie_utility::set_zombie_var( "riotshield_knockdown_range", 90 );
56  ‪zombie_utility::set_zombie_var( "riotshield_knockdown_damage", 15 );
57 
58  ‪zombie_utility::set_zombie_var( "riotshield_fling_force_melee", 100 );
59 
60  ‪zombie_utility::set_zombie_var( "riotshield_hit_points", 1850 );
61 
62  //damage applied to shield on melee
63  ‪zombie_utility::set_zombie_var( "riotshield_fling_damage_shield", 100 );
64  ‪zombie_utility::set_zombie_var( "riotshield_knockdown_damage_shield", 15 );
65  ‪zombie_utility::set_zombie_var( "riotshield_juke_damage_shield", 100 );
66 
67  ‪zombie_utility::set_zombie_var( "riotshield_stowed_block_fraction", 1.0 );
68 
69  level.riotshield_network_choke_count=0;
70  level.riotshield_gib_refs = [];
71  level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts";
72  level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm";
73  level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm";
74 
76 
77  ‪DEFAULT(level.riotshield_melee,&‪riotshield_melee);
78  ‪DEFAULT(level.riotshield_melee_power,&‪riotshield_melee);
79  ‪DEFAULT(level.riotshield_damage_callback,&‪player_damage_shield);
80  ‪DEFAULT(level.should_shield_absorb_damage,&‪should_shield_absorb_damage);
81 
83 }
84 
85 function ‪__main__()
86 {
87 }
88 
90 {
91  self.player_shield_reset_health = &‪player_init_shield_health;
92  ‪DEFAULT(self.player_shield_apply_damage,&‪player_damage_shield);
93  self thread ‪player_watch_weapon_change();
94  self thread ‪player_watch_shield_melee();
96 }
97 
99 {
102  return 1;
103 }
104 
105 function ‪player_set_shield_health( ‪damage, max_damage )
106 {
109 }
110 
111 // self = player
112 // attacker = zombie
113 function ‪player_shield_absorb_damage( eAttacker, iDamage, sHitLoc, sMeansOfDeath )
114 {
115 }
116 
118 {
119  orientation = self getPlayerAngles();
120  forwardVec = anglesToForward( orientation );
121  forwardVec2D = ( forwardVec[0], forwardVec[1], 0 );
122  unitForwardVec2D = VectorNormalize( forwardVec2D );
123 
124  toFaceeVec = -vDir;
125  toFaceeVec2D = ( toFaceeVec[0], toFaceeVec[1], 0 );
126  unitToFaceeVec2D = VectorNormalize( toFaceeVec2D );
127 
128  dotProduct = VectorDot( unitForwardVec2D, unitToFaceeVec2D );
129  return ( dotProduct > ‪limit ); // more or less in front
130 }
131 
132 // returns fraction of damage absorbed by the shield -- 1.0 == block all damage -- 0.0 == block none
133 function ‪should_shield_absorb_damage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime )
134 {
135  if ( ‪IS_TRUE(self.hasRiotShield) && IsDefined(vDir) )
136  {
137  if ( isDefined( eAttacker ) && (‪IS_TRUE(eAttacker.is_zombie) || IsPlayer(eAttacker)) )
138  {
139  if ( ‪IS_TRUE(self.hasRiotShieldEquipped) )
140  {
141  // shield held - block all damage in front
142  if ( self ‪player_shield_facing_attacker(vDir, 0.2) )
143  {
144  return 1.0;
145  }
146  }
147  else if ( !IsDefined( self.riotshieldEntity ))
148  {
149  // shield on back - block all damage from behind - used to be half damage to player, half to shield
150  if ( !self ‪player_shield_facing_attacker(vDir, -0.2) )
151  {
152  return level.zombie_vars["riotshield_stowed_block_fraction"];
153  }
154  }
155  else
156  {
157  Assert(!IsDefined( self.riotshieldEntity ), "Planted riotshield no longer supported.");
158  }
159  }
160  }
161  return 0.0;
162 }
163 
164 
165 
166 function ‪player_damage_override_callback( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime )
167 {
168  friendly_fire = ( IsDefined( eAttacker ) && eAttacker.team === self.team );
169  if ( ‪IS_TRUE(self.hasRiotShield) && !friendly_fire )
170  {
171  fBlockFraction = self [[level.should_shield_absorb_damage]] ( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime );
172  if ( fBlockFraction > 0.0 && isdefined(self.player_shield_apply_damage) )
173  {
174  iBlocked = int( fBlockFraction * iDamage );
175  iUnblocked = iDamage-iBlocked;
176  if ( isdefined(self.player_shield_apply_damage) )
177  {
178  self [[self.player_shield_apply_damage]]( iBlocked, false, sHitLoc=="riotshield", sMeansOfDeath );
179  if( isdefined( self.riotshield_damage_absorb_callback ) )
180  {
181  self [[self.riotshield_damage_absorb_callback]]( eAttacker, iBlocked, sHitLoc, sMeansOfDeath );
182  }
183  }
184  return iUnblocked;
185  }
186  }
187  return -1;
188 }
189 
190 
191 function ‪player_damage_shield( iDamage, bHeld, fromCode = false, smod = "MOD_UNKNOWN" )
192 {
193  damageMax = level.weaponRiotshield.weaponstarthitpoints;
194  if ( IsDefined(self.weaponRiotshield) )
195  damageMax = self.weaponRiotshield.weaponstarthitpoints;
196  shieldHealth = damageMax;
197  shieldDamage = iDamage;
198  rumbled = false;
199  if ( fromCode )
200  shieldDamage = 0;
201  shieldHealth = self DamageRiotShield(shieldDamage);
202 
203  if( shieldHealth <= 0 )
204  {
205  if( !rumbled )
206  {
207  self PlayRumbleOnEntity( "damage_heavy" );
208  Earthquake( 1.0, 0.75, self.origin, 100 );
209  }
210  self thread ‪player_take_riotshield();
211  }
212  else
213  {
214  if( !rumbled )
215  {
216  self PlayRumbleOnEntity( "damage_light" );
217  Earthquake( 0.5, 0.5, self.origin, 100 );
218  }
219  self PlaySound( "fly_riotshield_zm_impact_zombies" );//sound for zombie attacks hitting the shield while held
220  }
223 
224 }
225 
226 
227 //******************************************************************
228 // *
229 // *
230 //******************************************************************
231 
233 {
234  for ( ;; )
235  {
236  self waittill( "weapon_change", weapon );
238  }
239 
240 }
241 
242 //******************************************************************
243 // *
244 // *
245 //******************************************************************
246 
247 function ‪player_watch_shield_melee() // self == player
248 {
249  for ( ;; )
250  {
251  self waittill( "weapon_melee", weapon );
252  if ( weapon.isriotshield )
253  self [[level.riotshield_melee]]( weapon );
254  }
255 }
256 
257 function ‪player_watch_shield_melee_power() // self == player
258 {
259  for ( ;; )
260  {
261  self waittill( "weapon_melee_power", weapon );
262  if ( weapon.isriotshield )
263  self [[level.riotshield_melee_power]]( weapon );
264  }
265 }
266 
267 function ‪riotshield_fling_zombie( player, fling_vec, index )
268 {
269  if( !IsDefined( self ) || !IsAlive( self ) )
270  {
271  // guy died on us
272  return;
273  }
274 
275  if (‪IS_TRUE(self.ignore_riotshield))
276  return;
277 
278  if ( IsDefined( self.riotshield_fling_func ) )
279  {
280  self [[ self.riotshield_fling_func ]]( player );
281  return;
282  }
283 
284  ‪damage = 2500;
285 
286 // self playsound( "fly_rocketshield_hit_zombie" );
287  self DoDamage( ‪damage, player.origin, player, player, "", "MOD_IMPACT" );
288  if ( self.health < 1 )
289  {
290  self.riotshield_death = true;
291  self StartRagdoll( true );
292  self LaunchRagdoll( fling_vec );
293  }
294  //self.ignore_riotshield=1;
295 }
296 
297 
298 function ‪zombie_knockdown( player, ‪gib )
299 {
300  ‪damage = level.zombie_vars["riotshield_knockdown_damage"];
301  if(isDefined(level.override_riotshield_damage_func))
302  {
303  self[[level.override_riotshield_damage_func]](player,‪gib);
304  }
305  else
306  {
307  if ( ‪gib )
308  {
309  self.a.gib_ref = array::random( level.riotshield_gib_refs );
310  self thread ‪zombie_death::do_gib();
311  }
312 
313  self DoDamage( ‪damage, player.origin, player );
314  }
315 
316 }
317 
318 
319 
321 {
322  self endon( "death" );
323  playsoundatposition ("vox_riotshield_forcehit", self.origin);
324  playsoundatposition ("wpn_riotshield_proj_impact", self.origin);
325 
326 
327  if( !IsDefined( self ) || !IsAlive( self ) )
328  {
329  // guy died on us
330  return;
331  }
332 
333  if ( IsDefined( self.riotshield_knockdown_func ) )
334  {
335  self [[ self.riotshield_knockdown_func ]]( player, ‪gib );
336  }
337  else
338  {
339  self ‪zombie_knockdown(player, ‪gib);
340  //self DoDamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player );
341  }
342 
343 // self playsound( "riotshield_impact" );
344 // self.riotshield_handle_pain_notetracks = &handle_riotshield_pain_notetracks;
345  self DoDamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player );
346  self playsound( "fly_riotshield_forcehit" );
347 
348 }
349 
351 {
352  view_pos = self geteye(); // GetViewPos(); //GetWeaponMuzzlePoint();
353  zombies = array::get_all_closest( view_pos, GetAITeamArray( level.zombie_team ), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] );
354  if ( !isDefined( zombies ) )
355  {
356  return;
357  }
358 
359  knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"];
360  gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"];
361  fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"];
362  cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"];
363 
364  fling_force = level.zombie_vars["riotshield_fling_force_melee"];
365  fling_force_v = 0.5;
366 
367  forward_view_angles = self GetWeaponForwardDir();
368  end_pos = view_pos + VectorScale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] );
369 
370  for ( i = 0; i < zombies.size; i++ )
371  {
372  if ( !IsDefined( zombies[i] ) || !IsAlive( zombies[i] ) )
373  {
374  // guy died on us
375  continue;
376  }
377 
378  if ( zombies[i].archetype == ‪ARCHETYPE_MARGWA )
379  {
380  continue;
381  }
382 
383  test_origin = zombies[i] getcentroid();
384  //test_origin = (test_origin[0], test_origin[1], view_pos[2] );
385  test_range_squared = DistanceSquared( view_pos, test_origin );
386  if ( test_range_squared > knockdown_range_squared )
387  {
388  //zombies[i] riotshield_debug_print( "range", (1, 0, 0) );
389  return; // everything else in the list will be out of range
390  }
391 
392  normal = VectorNormalize( test_origin - view_pos );
393  dot = VectorDot( forward_view_angles, normal );
394  if ( 0 > dot )
395  {
396  // guy's behind us
397  //zombies[i] riotshield_debug_print( "dot", (1, 0, 0) );
398  continue;
399  }
400 
401  radial_origin = PointOnSegmentNearestToPoint( view_pos, end_pos, test_origin );
402  if ( DistanceSquared( test_origin, radial_origin ) > cylinder_radius_squared )
403  {
404  // guy's outside the range of the cylinder of effect
405  //zombies[i] riotshield_debug_print( "cylinder", (1, 0, 0) );
406  continue;
407  }
408 
409  if ( 0 == zombies[i] DamageConeTrace( view_pos, self ) )
410  {
411  // guy can't actually be hit from where we are
412  //zombies[i] riotshield_debug_print( "cone", (1, 0, 0) );
413  continue;
414  }
415 
416  if ( test_range_squared < fling_range_squared )
417  {
418  level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i];
419 
420  // the closer they are, the harder they get flung
421  dist_mult = (fling_range_squared - test_range_squared) / fling_range_squared;
422  fling_vec = VectorNormalize( test_origin - view_pos );
423 
424  // within 6 feet, just push them straight away from the player, ignoring radial motion
425  if ( 5000 < test_range_squared )
426  {
427  fling_vec = fling_vec + VectorNormalize( test_origin - radial_origin );
428  }
429  fling_vec = (fling_vec[0], fling_vec[1], fling_force_v * abs( fling_vec[2] ));
430  fling_vec = VectorScale( fling_vec, fling_force + fling_force * dist_mult );
431  level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec;
432 
433  //zombies[i] riotshield_debug_print( "fling", (0, 1, 0) );
434 // zombies[i] thread setup_riotshield_vox( self, true, false, false );
435  }
436 /*
437  else if ( test_range_squared < gib_range_squared )
438  {
439  level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i];
440  level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = true;
441 
442 // zombies[i] thread setup_riotshield_vox( self, false, true, false );
443  }
444 */
445  else
446  {
447  level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i];
448  level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = false;
449 
450 // zombies[i] thread setup_riotshield_vox( self, false, false, true );
451  //zombies[i] riotshield_debug_print( "knockdown", (1, 1, 0) );
452  }
453  }
454 }
455 
456 
458 {
459  level.riotshield_network_choke_count++;
460 
461  if ( !(level.riotshield_network_choke_count % 10) )
462  {
466  }
467 }
468 
469 
470 function ‪riotshield_melee( weapon )
471 {
472  // ww: physics hit when firing
473  //PhysicsExplosionCylinder( self.origin, 600, 240, 1 );
474 
475  if ( !IsDefined( level.riotshield_knockdown_enemies ) )
476  {
477  level.riotshield_knockdown_enemies = [];
478  level.riotshield_knockdown_gib = [];
479  level.riotshield_fling_enemies = [];
480  level.riotshield_fling_vecs = [];
481  }
482 
484 
485  //iprintlnbold( "flg: " + level.riotshield_fling_enemies.size + " gib: " + level.riotshield_gib_enemies.size + " kno: " + level.riotshield_knockdown_enemies.size );
486 
487  shield_damage = 0;
488 
489  level.riotshield_network_choke_count = 0;
490  for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
491  {
493  if (isdefined(level.riotshield_fling_enemies[i]))
494  {
495  level.riotshield_fling_enemies[i] thread ‪riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
496  shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
497  }
498  }
499 
500  for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
501  {
503  level.riotshield_knockdown_enemies[i] thread ‪riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
504  shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
505  }
506 
507  level.riotshield_knockdown_enemies = [];
508  level.riotshield_knockdown_gib = [];
509  level.riotshield_fling_enemies = [];
510  level.riotshield_fling_vecs = [];
511 
512  if (shield_damage)
513  self ‪player_damage_shield( shield_damage, false );
514 }
515 
516 
517 //******************************************************************
518 //
519 // Riot shield damage states
520 // 0 undamaged
521 // 1 SPECIAL bright red version used to indicate the shield cannot be planted
522 // 2 partially damaged t6_wpn_zmb_shield_dmg1_view
523 // 3 heavily damaged t6_wpn_zmb_shield_dmg2_view
524 //
525 // Riot shield placement
526 // 0 disabled/destroyed
527 // 1 wielded
528 // 2 stowed
529 // 3 deployed
530 //
531 //******************************************************************
532 
534 {
536  self.hasRiotShield = false;
537  self.weaponRiotshield = level.weaponNone;
538  foreach ( weapon in self GetWeaponsList( true ) )
539  {
540  if ( weapon.isriotshield )
541  {
542  self.hasRiotShield = true;
543  self.weaponRiotshield = weapon;
544  }
545  }
546  current = self getCurrentWeapon();
547  self.hasRiotShieldEquipped = (current.isriotshield);
548  if ( self.hasRiotShield )
549  {
550  self ‪clientfield::set_player_uimodel( "hudItems.showDpadDown", 1 );
551  if ( self.hasRiotShieldEquipped )
552  {
554  }
555  else
556  {
557  self ‪zm_weapons::set_stowed_weapon( self.weaponRiotshield );
558  }
559  }
560  else
561  {
562  self ‪clientfield::set_player_uimodel( "hudItems.showDpadDown", 0 );
563  self SetStowedWeapon( level.weaponNone );
564  }
565  self RefreshShieldAttachment();
566 
567 }
568 
570 {
571 //iprintlnbold( "riot shield destroyed" );
572  self notify( "destroy_riotshield" );
573 
574  // is the shield currently being wielded?
575  current = self getCurrentWeapon();
576  if ( current.isriotshield )
577  {
578  if ( !( self ‪laststand::player_is_in_laststand() ) )
579  {
580  new_primary = level.weaponNone;
581  primaryWeapons = self GetWeaponsListPrimaries();
582  for ( i = 0; i < primaryWeapons.size; i++ )
583  {
584  if ( !primaryWeapons[i].isriotshield )
585  {
586  new_primary = primaryWeapons[i];
587  break;
588  }
589  }
590 
591  if (new_primary == level.weaponNone )
592  {
594  self SwitchToWeaponImmediate();
595  self PlaySound( "wpn_riotshield_zm_destroy" );//when zombies destroy the shield while you are holding it
596  // don't wait for "weapon_change", as a weird timing issue prevents it from being received in only this case (no primary weapon)
597  }
598  else
599  {
600  self SwitchToWeaponImmediate();
601  self PlaySound( "wpn_riotshield_zm_destroy" );//when zombies destroy the shield while you are holding it
602  self waittill ( "weapon_change" );
603  }
604  }
605  }
606 
607  self playsound( "zmb_rocketshield_break" );
608 
609  if ( IsDefined(self.weaponRiotshield) )
610  self ‪zm_equipment::take(self.weaponRiotshield);
611  else
612  self ‪zm_equipment::take(level.weaponRiotshield);
613 
614  self.hasRiotShield = false;
615  self.hasRiotShieldEquipped = false;
616 }
617 
‪player_shield_absorb_damage
‪function player_shield_absorb_damage(eAttacker, iDamage, sHitLoc, sMeansOfDeath)
Definition: _zm_weap_riotshield.gsc:113
‪on_player_connect
‪function on_player_connect()
Definition: _zm_weap_riotshield.gsc:89
‪VERSION_TU11
‪#define VERSION_TU11
Definition: version.gsh:61
‪player_watch_shield_melee
‪function player_watch_shield_melee()
Definition: _zm_weap_riotshield.gsc:247
‪set_stowed_weapon
‪function set_stowed_weapon(weapon)
Definition: _zm_weapons.gsc:3331
‪UpdateRiotShieldModel
‪function UpdateRiotShieldModel()
Definition: _zm_weap_riotshield.gsc:533
‪riotshield_knockdown_zombie
‪function riotshield_knockdown_zombie(player, gib)
Definition: _zm_weap_riotshield.gsc:320
‪limit
‪function limit(equipment_name, limited)
Definition: _zm_equipment.gsc:140
‪player_init_shield_health
‪function player_init_shield_health()
Definition: _zm_weap_riotshield.gsc:98
‪set_zombie_var
‪function set_zombie_var(zvar, value, is_float=false, column=1, is_team_based=false)
Definition: zombie_utility.gsc:1434
‪register_player_damage_callback
‪function register_player_damage_callback(func)
Definition: _zm.gsc:5522
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪do_gib
‪function do_gib()
Definition: zombie_death.gsc:245
‪gib
‪function gib(attacker)
Definition: _amws.gsc:1072
‪riotshield_network_choke
‪function riotshield_network_choke()
Definition: _zm_weap_riotshield.gsc:457
‪damage
‪function damage(trap)
Definition: _zm_trap_electric.gsc:116
‪RIOTSHIELD_HEALTH_CLIENTFIELD
‪#define RIOTSHIELD_HEALTH_CLIENTFIELD
Definition: _zm_weap_riotshield.gsc:35
‪DEFAULT
‪#define DEFAULT(__var, __default)
Definition: shared.gsh:270
‪__main__
‪function __main__()
Definition: _zm_weap_riotshield.gsc:85
‪give_fallback_weapon
‪function give_fallback_weapon(immediate=false)
Definition: _zm_melee_weapon.gsc:208
‪player_watch_weapon_change
‪function player_watch_weapon_change()
Definition: _zm_weap_riotshield.gsc:232
‪wait_network_frame
‪function wait_network_frame(n_count=1)
Definition: util_shared.gsc:64
‪clear_stowed_weapon
‪function clear_stowed_weapon()
Definition: _zm_weapons.gsc:3340
‪REGISTER_SYSTEM_EX
‪#define REGISTER_SYSTEM_EX(__sys, __func_init_preload, __func_init_postload, __reqs)
Definition: shared.gsh:209
‪__init__
‪function __init__()
Definition: _zm_weap_riotshield.gsc:45
‪should_shield_absorb_damage
‪function should_shield_absorb_damage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime)
Definition: _zm_weap_riotshield.gsc:133
‪player_set_shield_health
‪function player_set_shield_health(damage, max_damage)
Definition: _zm_weap_riotshield.gsc:105
‪player_damage_shield
‪function player_damage_shield(iDamage, bHeld, fromCode=false, smod="MOD_UNKNOWN")
Definition: _zm_weap_riotshield.gsc:191
‪riotshield_fling_zombie
‪function riotshield_fling_zombie(player, fling_vec, index)
Definition: _zm_weap_riotshield.gsc:267
‪player_damage_override_callback
‪function player_damage_override_callback(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime)
Definition: _zm_weap_riotshield.gsc:166
‪take
‪function take(killstreak)
Definition: _killstreaks.gsc:568
‪player_is_in_laststand
‪function player_is_in_laststand()
Definition: laststand_shared.gsc:18
‪riotshield_get_enemies_in_range
‪function riotshield_get_enemies_in_range()
Definition: _zm_weap_riotshield.gsc:350
‪zombie_knockdown
‪function zombie_knockdown(player, gib)
Definition: _zm_weap_riotshield.gsc:298
‪set_player_uimodel
‪function set_player_uimodel(str_field_name, n_value)
Definition: clientfield_shared.gsc:75
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪player_watch_shield_melee_power
‪function player_watch_shield_melee_power()
Definition: _zm_weap_riotshield.gsc:257
‪ARCHETYPE_MARGWA
‪#define ARCHETYPE_MARGWA
Definition: archetype_shared.gsh:16
‪riotshield_melee
‪function riotshield_melee(weapon)
Definition: _zm_weap_riotshield.gsc:470
‪player_shield_facing_attacker
‪function player_shield_facing_attacker(vDir, limit)
Definition: _zm_weap_riotshield.gsc:117
‪player_take_riotshield
‪function player_take_riotshield()
Definition: _zm_weap_riotshield.gsc:569
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265