‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_pack_a_punch.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\aat_shared;
4 #using scripts\shared\array_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\demo_shared;
7 #using scripts\shared\flag_shared;
8 #using scripts\shared\laststand_shared;
9 #using scripts\shared\system_shared;
10 #using scripts\shared\trigger_shared;
11 #using scripts\shared\util_shared;
12 
13 #insert scripts\shared\shared.gsh;
14 #insert scripts\shared\version.gsh;
15 
16 #using scripts\zm\_util;
17 #using scripts\zm\_zm;
18 #using scripts\zm\_zm_audio;
19 #using scripts\zm\_zm_bgb;
20 #using scripts\zm\_zm_equipment;
21 #using scripts\zm\_zm_laststand;
22 #using scripts\zm\_zm_magicbox;
23 #using scripts\zm\_zm_pers_upgrades_functions;
24 #using scripts\zm\_zm_pack_a_punch_util;
25 #using scripts\zm\_zm_power;
26 #using scripts\zm\_zm_score;
27 #using scripts\zm\_zm_stats;
28 #using scripts\zm\_zm_utility;
29 #using scripts\zm\_zm_weapons;
30 
31 #insert scripts\zm\_zm_perks.gsh;
32 #insert scripts\zm\_zm_utility.gsh;
33 
34 #precache( "string", "ZOMBIE_PERK_PACKAPUNCH" );
35 #precache( "string", "ZOMBIE_PERK_PACKAPUNCH_AAT" );
36 #precache( "triggerstring", "ZOMBIE_GET_UPGRADED_FILL" );
37 
38 #define PAP_WEAPON_KNUCKLE_CRACK "zombie_knuckle_crack"
39 
40 #define PAP_INITIAL_PIECE 0
41 #define PAP_PACKING_PIECE 1
42 #define PAP_FLAG_PIECE 2
43 #define PAP_WEAPON_PIECE 3
44 #define PAP_POWERED_PIECE 4
45 #define PAP_TELEPORT_PIECE 5
46 
47 ‪REGISTER_SYSTEM_EX( "zm_pack_a_punch", &‪__init__, &‪__main__, undefined )
48 
49 function ‪__init__()
50 {
52  ‪clientfield::register( "zbarrier", "pap_working_FX", ‪VERSION_DLC1, 1, "int" );
53 }
54 
55 function ‪__main__()
56 {
57  if ( !isdefined( level.pap_zbarrier_state_func ) )
58  {
59  level.pap_zbarrier_state_func = &‪process_pap_zbarrier_state;
60  }
61 
62 
63  // Spawn models, triggers, clip, etc.
64  ‪spawn_init();
65 
66  vending_weapon_upgrade_trigger = ‪zm_pap_util::get_triggers();
67 
68  if ( vending_weapon_upgrade_trigger.size >= 1 )
69  {
70  array::thread_all( vending_weapon_upgrade_trigger, &‪vending_weapon_upgrade );
71  }
72 
73  // Add old style pack machines if necessary.
74  old_packs = GetEntArray( "zombie_vending_upgrade", "targetname" );
75  for( i = 0; i < old_packs.size; i++ )
76  {
77  vending_weapon_upgrade_trigger[vending_weapon_upgrade_trigger.size] = old_packs[i];
78  }
79  level ‪flag::init("pack_machine_in_use");
80 }
81 
82 function private ‪spawn_init()
83 {
84  zbarriers = GetEntArray("zm_pack_a_punch", "targetname");
85 
86  for ( i = 0; i < zbarriers.size; i++ )
87  {
88  if ( !zbarriers[i] IsZbarrier() )
89  {
90  continue;
91  }
92 
93  // Create the use trigger.
94  if (!IsDefined (level.pack_a_punch.interaction_height) )
95  {
96  level.pack_a_punch.interaction_height = 35;
97  }
98  if (!IsDefined (level.pack_a_punch.interaction_trigger_radius) )
99  {
100  level.pack_a_punch.interaction_trigger_radius = 40; //You cannot create a trigger with a radius smaller than 40
101  }
102  if (!IsDefined (level.pack_a_punch.interaction_trigger_height) )
103  {
104  level.pack_a_punch.interaction_trigger_height = 70;
105  }
106  use_trigger = ‪Spawn( "trigger_radius_use", zbarriers[i].origin + (0, 0, level.pack_a_punch.interaction_height), 0, level.pack_a_punch.interaction_trigger_radius, level.pack_a_punch.interaction_trigger_height );
107  use_trigger.script_noteworthy = "pack_a_punch";
108  use_trigger TriggerIgnoreTeam();
109  use_trigger thread ‪pap_trigger_hintstring_monitor();
110 
111  use_trigger ‪flag::init( "pap_offering_gun" ); // Flag that tracks when PaP is offering a gun
112 
113  // Create the collision model.
114  collision = ‪Spawn("script_model", zbarriers[i].origin, 1);
115  collision.angles = zbarriers[i].angles;
116  collision SetModel( "zm_collision_perks1" );
117  collision.script_noteworthy = "clip";
118  collision DisconnectPaths();
119 
120  // Connect all of the pieces for easy access.
121  use_trigger.clip = collision;
122  use_trigger.zbarrier = zbarriers[i];
123 
124  // Set up sounds
125  use_trigger.script_sound = "mus_perks_packa_jingle";
126  use_trigger.script_label = "mus_perks_packa_sting";
127  use_trigger.longJingleWait = true;
128 
129  // Connect the trigger to the machine.
130  use_trigger.target = "vending_packapunch";
131  use_trigger.zbarrier.targetname = "vending_packapunch";
132 
133  // Set up power interactions.
134  powered_on = ‪get_start_state();
135  use_trigger.powered = ‪zm_power::add_powered_item( &‪turn_on, &‪turn_off, &‪get_range, &‪cost_func, ‪ANY_POWER, powered_on, use_trigger );
136 
137  if ( IsDefined( level.pack_a_punch.custom_power_think ) )
138  {
139  use_trigger thread [[level.pack_a_punch.custom_power_think]]( powered_on );
140  }
141  else
142  {
143  use_trigger thread ‪toggle_think( powered_on );
144  }
145 
146  ‪ARRAY_ADD( level.pack_a_punch.triggers, use_trigger );
147 
148  }
149 }
150 
152 {
153  level endon( "Pack_A_Punch_off" );
154  level waittill( "Pack_A_Punch_on" );
155 
157 
158  while( true )
159  {
160  foreach( e_player in level.players )
161  {
162  if ( e_player istouching( self ) )
163  {
164  self ‪zm_pap_util::update_hint_string( e_player );
165  }
166  }
167 
169  }
170 }
171 
173 {
174  level waittill( "Pack_A_Punch_off" );
175 
176  self thread ‪pap_trigger_hintstring_monitor();
177 }
178 
179 function private ‪third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, pap_machine, trigger )
180 {
181  level endon("Pack_A_Punch_off");
182 
183  trigger endon("pap_player_disconnected");
184 
185  current_weapon = self GetBuildKitWeapon( current_weapon, false );
186  upgrade_weapon = self GetBuildKitWeapon( upgrade_weapon, true );
187 
188  trigger.current_weapon = current_weapon;
189  trigger.current_weapon_options = self GetBuildKitWeaponOptions( trigger.current_weapon );
190  trigger.current_weapon_acvi = self GetBuildKitAttachmentCosmeticVariantIndexes( trigger.current_weapon, false );
191 
192  trigger.upgrade_weapon = upgrade_weapon;
193  upgrade_weapon.pap_camo_to_use = ‪zm_weapons::get_pack_a_punch_camo_index( upgrade_weapon.pap_camo_to_use );
194  trigger.upgrade_weapon_options = self GetBuildKitWeaponOptions( trigger.upgrade_weapon, upgrade_weapon.pap_camo_to_use );
195  trigger.upgrade_weapon_acvi = self GetBuildKitAttachmentCosmeticVariantIndexes( trigger.upgrade_weapon, true );
196 
197  trigger.zbarrier SetWeapon( trigger.current_weapon );
198  trigger.zbarrier SetWeaponOptions( trigger.current_weapon_options );
199  trigger.zbarrier SetAttachmentCosmeticVariantIndexes( trigger.current_weapon_acvi );
200 
201  trigger.zbarrier ‪set_pap_zbarrier_state( "take_gun" );
202 
203  rel_entity = trigger.pap_machine;
204 
205  origin_offset = (0,0,0);
206  angles_offset = (0,0,0);
207  origin_base = self.origin;
208  angles_base = self.angles;
209 
210  if( isDefined(rel_entity) )
211  {
212  origin_offset = (0, 0, level.pack_a_punch.interaction_height);
213  angles_offset = (0, 90, 0);
214 
215  origin_base = rel_entity.origin;
216  angles_base = rel_entity.angles;
217  }
218  else
219  {
220  rel_entity = self;
221  }
222  forward = anglesToForward( angles_base+angles_offset );
223  interact_offset = origin_offset+(forward*-25);
224 
225  offsetdw = ( 3, 3, 3 );
226 
227  pap_machine [[ level.pack_a_punch.move_in_func ]]( self, trigger, origin_offset, angles_offset );
228 
229  self playsound( "zmb_perks_packa_upgrade" );
230  wait( 0.35 );
231 
232  wait( 3 );
233 
234  trigger.zbarrier SetWeapon( upgrade_weapon );
235  trigger.zbarrier SetWeaponOptions( trigger.upgrade_weapon_options );
236  trigger.zbarrier SetAttachmentCosmeticVariantIndexes( trigger.upgrade_weapon_acvi );
237 
238  trigger.zbarrier ‪set_pap_zbarrier_state( "eject_gun" );
239 
240  if ( IsDefined( self ) )
241  {
242  self playsound( "zmb_perks_packa_ready" );
243  }
244  else
245  {
246  return; // player disconnected. Get gone.
247  }
248 
249  rel_entity thread [[ level.pack_a_punch.move_out_func ]]( self, trigger, origin_offset, interact_offset );
250 }
251 
252 
253 function private ‪can_pack_weapon( weapon )
254 {
255  if ( weapon.isriotshield )
256  {
257  return false;
258  }
259 
260  if ( level ‪flag::get("pack_machine_in_use") )
261  {
262  return true;
263  }
264 
265  if( !‪IS_TRUE( level.b_allow_idgun_pap ) && isdefined( level.idgun_weapons ) )
266  {
267  if ( IsInArray( level.idgun_weapons, weapon ) )
268  return false;
269  }
270 
271  weapon = self ‪zm_weapons::get_nonalternate_weapon( weapon );
273  {
274  return false;
275  }
276 
277  if ( !self ‪zm_weapons::can_upgrade_weapon( weapon ) )
278  {
279  return false;
280  }
281 
282  return true;
283 }
284 
285 function private ‪player_use_can_pack_now()
286 {
287  if ( self ‪laststand::player_is_in_laststand() || ‪IS_TRUE( self.‪intermission ) || self isThrowingGrenade() )
288  {
289  return false;
290  }
291 
292  if( !self ‪zm_magicbox::can_buy_weapon() || self ‪bgb::is_enabled( "zm_bgb_disorderly_combat" ) )
293  {
294  return false;
295  }
296 
297  if( self ‪zm_equipment::hacker_active() )
298  {
299  return false;
300  }
301 
302  current_weapon = self GetCurrentWeapon();
303  if ( !self ‪can_pack_weapon( current_weapon ) && !‪zm_weapons::weapon_supports_aat( current_weapon ) )
304  {
305  return false;
306  }
307 
308  return true;
309 }
310 
312 {
313  self endon("death");
314  self endon("Pack_A_Punch_off");
315  self notify( "pack_a_punch_trigger_think" );
316  self endon( "pack_a_punch_trigger_think" );
317 
318  while(1)
319  {
320  players = GetPlayers();
321 
322  for(i = 0; i < players.size; i ++)
323  {
324  if ( ( IsDefined( self.pack_player ) && self.pack_player != players[i] ) ||
325  !players[i] ‪player_use_can_pack_now() || players[i] ‪bgb::is_active("zm_bgb_ephemeral_enhancement") )
326  {
327  self SetInvisibleToPlayer( players[i], true );
328  }
329  else
330  {
331  self SetInvisibleToPlayer( players[i], false );
332  }
333  }
334  wait(0.1);
335  }
336 }
337 
338 //
339 // Pack-A-Punch Weapon Upgrade
340 //
341 function private ‪vending_weapon_upgrade()
342 {
343  level endon("Pack_A_Punch_off");
344 
345  pap_machine = GetEnt( self.target, "targetname" );
346  self.pap_machine = pap_machine;
347  pap_machine_sound = GetEntarray ( "perksacola", "targetname");
348  packa_rollers = ‪spawn("script_origin", self.origin);
349  packa_timer = ‪spawn("script_origin", self.origin);
350  packa_rollers LinkTo( self );
351  packa_timer LinkTo( self );
352 
353  self UseTriggerRequireLookAt();
354  self SetHintString( &"ZOMBIE_NEED_POWER" );
355  self SetCursorHint( "HINT_NOICON" );
356 
357  power_off = !self ‪is_on();
358 
359  if ( power_off )
360  {
361  pap_array = [];
362  pap_array[0] = pap_machine;
363  level waittill("Pack_A_Punch_on");
364  }
365 
366  self TriggerEnable( true );
367 
368  if( IsDefined( level.pack_a_punch.power_on_callback ) )
369  {
370  pap_machine thread [[ level.pack_a_punch.power_on_callback ]]();
371  }
372 
374 
375  //self thread zm_magicbox::decide_hide_show_hint("Pack_A_Punch_off");
376 
377  pap_machine playloopsound("zmb_perks_packa_loop");
378  self thread ‪shutOffPAPSounds( pap_machine, packa_rollers, packa_timer );
379 
380  self thread ‪vending_weapon_upgrade_cost();
381 
382  for( ;; )
383  {
384  self.pack_player = undefined;
385 
386  self waittill( "trigger", player );
387 
388  if ( isdefined(pap_machine.state) && (pap_machine.state == "leaving") )
389  {
390  continue; //prevents player from using a PaP machine that is in the process of teleporting away
391  }
392 
393  index = ‪zm_utility::get_player_index(player);
394 
395  current_weapon = player getCurrentWeapon();
396 
397  current_weapon = player ‪zm_weapons::switch_from_alt_weapon( current_weapon );
398 
399  if( IsDefined( level.pack_a_punch.custom_validation ) )
400  {
401  valid = self [[ level.pack_a_punch.custom_validation ]]( player );
402  if( !valid )
403  {
404  continue;
405  }
406  }
407 
408  if( !player ‪zm_magicbox::can_buy_weapon() ||
410  ‪IS_TRUE( player.intermission ) ||
411  player isThrowingGrenade() ||
412  (!player ‪zm_weapons::can_upgrade_weapon( current_weapon ) && !‪zm_weapons::weapon_supports_aat( current_weapon )) )
413  {
414  wait( 0.1 );
415  continue;
416  }
417 
418  if( player isSwitchingWeapons() )
419  {
420  wait( 0.1 );
421  if( player isSwitchingWeapons() )
422  continue;
423  }
424 
425  if ( !‪zm_weapons::is_weapon_or_base_included( current_weapon ) )
426  {
427  continue;
428  }
429 
430  current_cost = self.cost;
431  player.restore_ammo = undefined;
432  player.restore_clip = undefined;
433  player.restore_stock = undefined;
434  player_restore_clip_size = undefined;
435  player.restore_max = undefined;
436 
437  b_weapon_supports_aat = ‪zm_weapons::weapon_supports_aat( current_weapon );
438  isRepack = false;
439  currentAATHashID = -1;
440  if ( b_weapon_supports_aat )
441  {
442  current_cost = self.aat_cost;
443  currentAAT = player ‪aat::getAATOnWeapon(current_weapon);
444  if (isDefined(currentAAT))
445  {
446  currentAATHashID = currentAAT.hash_id;
447  }
448  player.restore_ammo = true;
449  player.restore_clip = player GetWeaponAmmoClip( current_weapon );
450  player.restore_clip_size = current_weapon.clipSize;
451  player.restore_stock = player Getweaponammostock( current_weapon );
452  player.restore_max = current_weapon.maxAmmo;
453  isRepack = true;
454  }
455 
456  // If the persistent upgrade "double_points" is active, the cost is halved
458  {
459  current_cost = player ‪zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost );
460  }
461 
462  if( !player ‪zm_score::can_player_purchase( current_cost ) )
463  {
464  self playsound("zmb_perks_packa_deny");
465  if(isDefined(level.pack_a_punch.custom_deny_func))
466  {
467  player [[level.pack_a_punch.custom_deny_func]]();
468  }
469  else
470  {
471  player ‪zm_audio::create_and_play_dialog( "general", "outofmoney", 0 );
472  }
473  continue;
474  }
475 
476  self.pack_player = player;
477  level ‪flag::set("pack_machine_in_use");
478 
479  ‪demo::bookmark( "zm_player_use_packapunch", gettime(), player );
480 
481  //stat tracking
482  player ‪zm_stats::increment_client_stat( "use_pap" );
483  player ‪zm_stats::increment_player_stat( "use_pap" );
484  weaponIdx = undefined;
485  if (isDefined(current_weapon))
486  {
487  weaponIdx = MatchRecordGetWeaponIndex(current_weapon);
488  }
489 
490  if (isDefined(weaponIdx))
491  {
492  if (!isRepack)
493  {
494  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_USED, GetTime(), player.origin, level.round_number, weaponIdx, current_cost);
495  player ‪zm_stats::increment_challenge_stat( "ZM_DAILY_PACK_5_WEAPONS" );
496  player ‪zm_stats::increment_challenge_stat( "ZM_DAILY_PACK_10_WEAPONS" );
497  }
498  else
499  {
500  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_REPACK_USED, GetTime(), player.origin, level.round_number, weaponIdx, currentAATHashID);
501  player ‪zm_stats::increment_challenge_stat( "ZM_DAILY_REPACK_WEAPONS" );
502  }
503  }
504  self thread ‪destroy_weapon_in_blackout(player);
505 
506  player ‪zm_score::minus_to_player_score( current_cost );
507 // sound = "evt_bottle_dispense";
508 // playsoundatposition(sound, self.origin);
509 
511  player ‪zm_audio::create_and_play_dialog( "general", "pap_wait" );
512 
513  self TriggerEnable( false );
514 
515  player thread ‪do_knuckle_crack();
516 
517  // Remember what weapon we have. This is needed to check unique weapon counts.
518  self.current_weapon = current_weapon;
519 
520  upgrade_weapon = ‪zm_weapons::get_upgrade_weapon( current_weapon, b_weapon_supports_aat );
521 
522  player ‪third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, pap_machine, self );
523 
524  self TriggerEnable( true );
525  self SetCursorHint("HINT_WEAPON", upgrade_weapon);
526  self ‪flag::set( "pap_offering_gun" );
527  if ( IsDefined( player ) )
528  {
529  self setinvisibletoall();
530  self setvisibletoplayer( player );
531 
532  self thread ‪wait_for_player_to_take( player, current_weapon, packa_timer, b_weapon_supports_aat, isRepack );
533 
534  self thread ‪wait_for_timeout( current_weapon, packa_timer,player, isRepack );
535 
536  self ‪util::waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" );
537  }
538  else
539  {
540  self ‪wait_for_timeout( current_weapon, packa_timer, player, isRepack );
541  }
542 
543 
544  self.zbarrier ‪set_pap_zbarrier_state( "powered" );
545 
546 
547  self SetCursorHint("HINT_NOICON");
548  self.current_weapon = level.weaponNone;
549 
550  self ‪flag::clear( "pap_offering_gun" );
551 
552  self thread ‪pack_a_punch_machine_trigger_think(); // immediately reassess visibility
553 
554  self.pack_player = undefined;
555  level ‪flag::clear("pack_machine_in_use");
556 
557  }
558 }
559 
560 function private ‪shutOffPAPSounds( ent1, ent2, ent3 )
561 {
562  while(1)
563  {
564  level waittill( "Pack_A_Punch_off" );
565  level thread ‪turnOnPAPSounds( ent1 );
566  ent1 stoploopsound( .1 );
567  ent2 stoploopsound( .1 );
568  ent3 stoploopsound( .1 );
569  }
570 }
571 
572 function private ‪turnOnPAPSounds( ent )
573 {
574  level waittill( "Pack_A_Punch_on" );
575  ent playloopsound( "zmb_perks_packa_loop" );
576 }
577 
579 {
580  level endon("Pack_A_Punch_off");
581  while ( 1 )
582  {
583  self.cost = 5000;
584  self.aat_cost = 2500;
585  level waittill( "powerup bonfire sale" );
586 
587  self.cost = 1000;
588  self.aat_cost = 500;
589  level waittill( "bonfire_sale_off" );
590  }
591 }
592 
593 function private ‪wait_for_player_to_take( player, weapon, packa_timer, b_weapon_supports_aat, isRepack )
594 {
595  current_weapon = self.current_weapon;
596  upgrade_weapon = self.upgrade_weapon;
597  Assert( IsDefined( current_weapon ), "wait_for_player_to_take: weapon does not exist" );
598  Assert( IsDefined( upgrade_weapon ), "wait_for_player_to_take: upgrade_weapon does not exist" );
599 
600  self endon( "pap_timeout" );
601  level endon( "Pack_A_Punch_off" );
602 
603  while ( IsDefined( player ) )
604  {
605  packa_timer playloopsound( "zmb_perks_packa_ticktock" );
606  self waittill( "trigger", trigger_player );
607  if ( level.pack_a_punch.grabbable_by_anyone )
608  {
609  player = trigger_player;
610  }
611 
612  packa_timer stoploopsound(.05);
613  if( trigger_player == player )
614  {
615 
616  player ‪zm_stats::increment_client_stat( "pap_weapon_grabbed" );
617  player ‪zm_stats::increment_player_stat( "pap_weapon_grabbed" );
618 
619  current_weapon = player GetCurrentWeapon();
620 /#
621 if ( level.weaponNone == current_weapon )
622 {
623  iprintlnbold( "WEAPON IS NONE, PACKAPUNCH RETRIEVAL DENIED" );
624 }
625 #/
626  if( ‪zm_utility::is_player_valid( player ) &&
627  !‪IS_DRINKING(player.is_drinking) &&
628  !‪zm_utility::is_placeable_mine( current_weapon ) &&
629  !‪zm_equipment::is_equipment( current_weapon ) &&
630  !player ‪zm_utility::is_player_revive_tool(current_weapon) &&
631  level.weaponNone!= current_weapon &&
633  {
634  ‪demo::bookmark( "zm_player_grabbed_packapunch", gettime(), player );
635 
636  self notify( "pap_taken" );
637  player notify( "pap_taken" );
638  player.pap_used = true;
639 
640  weapon_limit = ‪zm_utility::get_player_weapon_limit( player );
641 
643 
644  primaries = player GetWeaponsListPrimaries();
645  if( isDefined( primaries ) && primaries.size >= weapon_limit )
646  {
647  upgrade_weapon = player ‪zm_weapons::weapon_give( upgrade_weapon );
648  }
649  else
650  {
651  upgrade_weapon = player ‪zm_weapons::give_build_kit_weapon( upgrade_weapon );
652  player GiveStartAmmo( upgrade_weapon );
653  }
654  player notify( "weapon_give", upgrade_weapon );
655 
656  aatID = -1;
657  if ( ‪IS_TRUE( b_weapon_supports_aat ) )
658  {
659  player thread ‪aat::acquire( upgrade_weapon );
660  aatObj = player ‪aat::getAATOnWeapon(upgrade_weapon);
661  if (isDefined(aatObj))
662  {
663  aatID = aatObj.hash_id;
664  }
665  }
666  else
667  {
668  player thread ‪aat::remove( upgrade_weapon );
669  }
670 
671  weaponIdx = undefined;
672  if (isDefined(weapon))
673  {
674  weaponIdx = MatchRecordGetWeaponIndex(weapon);
675  }
676 
677  if (isDefined(weaponIdx))
678  {
679  if (!isRepack)
680  {
681  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_GRABBED, GetTime(), player.origin, level.round_number, weaponIdx, aatID);
682  }
683  else
684  {
685  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_REPACK_GRABBED, GetTime(), player.origin, level.round_number, weaponIdx, aatID);
686  }
687  }
688 
689  player SwitchToWeapon( upgrade_weapon );
690 
691  if (‪IS_TRUE(player.restore_ammo))
692  {
693  new_clip = player.restore_clip + ( upgrade_weapon.clipSize - player.restore_clip_size );
694  new_stock = player.restore_stock + ( upgrade_weapon.maxAmmo - player.restore_max );
695  player SetWeaponAmmoStock( upgrade_weapon, new_stock );
696  player SetWeaponAmmoClip( upgrade_weapon, new_clip );
697  }
698  player.restore_ammo = undefined;
699  player.restore_clip = undefined;
700  player.restore_stock = undefined;
701  player.restore_max = undefined;
702  player.restore_clip_size = undefined;
703 
704  player ‪zm_weapons::play_weapon_vo(upgrade_weapon);
705  return;
706  }
707  }
709  }
710 }
711 
712 
713 // Waiting for the weapon to be taken
714 //
715 function private ‪wait_for_timeout( weapon, packa_timer,player, isRepack )
716 {
717  self endon( "pap_taken" );
718  self endon( "pap_player_disconnected" );
719 
720  self thread ‪wait_for_disconnect( player );
721 
722  wait( level.pack_a_punch.timeout );
723 
724  self notify( "pap_timeout" );
725  packa_timer stoploopsound(.05);
726  packa_timer playsound( "zmb_perks_packa_deny" );
727 
728  //stat tracking
729  if(isDefined(player))
730  {
731  player ‪zm_stats::increment_client_stat( "pap_weapon_not_grabbed" );
732  player ‪zm_stats::increment_player_stat( "pap_weapon_not_grabbed" );
733  weaponIdx = undefined;
734  if (isDefined(weapon))
735  {
736  weaponIdx = MatchRecordGetWeaponIndex(weapon);
737  }
738 
739  if (isDefined(weaponIdx))
740  {
741  if (!isRepack)
742  {
743  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_NOT_GRABBED, GetTime(), player.origin, level.round_number, weaponIdx);
744  }
745  else
746  {
747  aatOnWeapon = player ‪aat::getAATOnWeapon(weapon);
748  aatHash = -1;
749  if (isDefined(aatOnWeapon))
750  {
751  aatHash = aatOnWeapon.hash_id;
752  }
753  player RecordMapEvent(‪ZM_MAP_EVENT_PAP_REPACK_NOT_GRABBED, GetTime(), player.origin, level.round_number, weaponIdx, aatHash);
754  }
755  }
756  }
757 }
758 
759 function private ‪wait_for_disconnect( player )
760 {
761  self endon( "pap_taken" );
762  self endon( "pap_timeout" );
763 
764  while(isdefined(player))
765  {
766  wait(0.1);
767  }
768 
769  /# println("*** PAP : User disconnected."); #/
770 
771  self notify( "pap_player_disconnected" );
772 }
773 
774 function private ‪destroy_weapon_in_blackout( player )
775 {
776  self endon( "pap_timeout" );
777  self endon( "pap_taken" );
778  self endon ("pap_player_disconnected" );
779 
780  level waittill("Pack_A_Punch_off");
781 
782  self.zbarrier ‪set_pap_zbarrier_state( "take_gun" );
783 
784  player playlocalsound( level.zmb_laugh_alias );
785 
786  wait( 1.5 );
787 
788  self.zbarrier ‪set_pap_zbarrier_state( "power_off" );
789 }
790 
791 
792 
793 // Weapon has been inserted, crack knuckles while waiting
794 //
795 function private ‪do_knuckle_crack()
796 {
797  self endon("disconnect");
799 
800  self ‪util::waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
801 
803 
804 }
805 
806 
807 // Switch to the knuckles
808 //
810 {
812 
814 
815  primaries = self GetWeaponsListPrimaries();
816 
817  original_weapon = self GetCurrentWeapon();
818  weapon = GetWeapon( ‪PAP_WEAPON_KNUCKLE_CRACK );
819 
820  if ( original_weapon != level.weaponNone && !‪zm_utility::is_placeable_mine( original_weapon ) && !‪zm_equipment::is_equipment( original_weapon ) )
821  {
822  self notify( "zmb_lost_knife" );
823  self TakeWeapon( original_weapon );
824  }
825  else
826  {
827  return;
828  }
829 
830  self GiveWeapon( weapon );
831  self SwitchToWeapon( weapon );
832 }
833 
834 // Anim has ended, now switch back to something
835 //
837 {
839 
840  weapon = GetWeapon( ‪PAP_WEAPON_KNUCKLE_CRACK );
841 
842  // TODO: race condition?
844  {
845  self TakeWeapon(weapon);
846  return;
847  }
848 
850 
851  self TakeWeapon(weapon);
852  primaries = self GetWeaponsListPrimaries();
853  if( ‪IS_DRINKING(self.is_drinking) )
854  {
855  return;
856  }
857  else
858  {
860  }
861 }
862 
863 function private ‪get_range( delta, origin, radius )
864 {
865  if (IsDefined(self.target))
866  {
867  paporigin = self.target.origin;
868  if( ‪IS_TRUE( self.target.trigger_off ) )
869  paporigin = self.target.realorigin;
870  else if( ‪IS_TRUE( self.target.disabled ) )
871  paporigin = paporigin + ( 0, 0, 10000 );
872 
873  if ( DistanceSquared( paporigin, origin ) < radius * radius )
874  return true;
875  }
876  return false;
877 }
878 
879 function private ‪turn_on( origin, radius )
880 {
881  /# println( "^1ZM POWER: PaP on\n" ); #/
882  level notify( "Pack_A_Punch_on" );
883 }
884 
885 function private ‪turn_off( origin, radius )
886 {
887  /# println( "^1ZM POWER: PaP off\n" ); #/
888 
889  // NOTE: This will cause problems if there is more than one pack-a-punch machine in the level
890  level notify( "Pack_A_Punch_off" );
891  self.target notify( "death" );
892  self.target thread ‪vending_weapon_upgrade();
893 }
894 
895 function private ‪is_on() // self == PaP trigger
896 {
897  if (isdefined(self.powered))
898  return self.powered.power;
899  return false;
900 }
901 
902 function private ‪get_start_state()
903 {
904  if ( ‪IS_TRUE( level.vending_machines_powered_on_at_start ) )
905  {
906  return true;
907  }
908 
909  return false;
910 }
911 
912 function private ‪cost_func()
913 {
914  if (isdefined(self.one_time_cost))
915  {
916  cost = self.one_time_cost;
917  self.one_time_cost=undefined;
918  return cost;
919  }
920  if (‪IS_TRUE(level._power_global))
921  return 0;
922  if (‪IS_TRUE(self.self_powered))
923  return 0;
924  return 1;
925 }
926 
927 function private ‪toggle_think( powered_on )
928 {
929  if ( !powered_on )
930  {
931  self.zbarrier ‪set_pap_zbarrier_state( "initial" );
932 
933  level waittill( "Pack_A_Punch_on" );
934  }
935 
936  for (;;)
937  {
938  self.zbarrier ‪set_pap_zbarrier_state( "power_on" );
939 
940  level waittill( "Pack_A_Punch_off" );
941 
942  self.zbarrier ‪set_pap_zbarrier_state( "power_off" );
943 
944  level waittill( "Pack_A_Punch_on" );
945  }
946 }
947 
948 function private ‪pap_initial()
949 {
950  self ZBarrierPieceUseAttachWeapon( ‪PAP_WEAPON_PIECE );
951 
952  self SetZBarrierPieceState( ‪PAP_INITIAL_PIECE, "closed" );
953 }
954 
955 function private ‪pap_power_off()
956 {
957  self SetZBarrierPieceState( ‪PAP_INITIAL_PIECE, "closing" );
958 }
959 
960 function private ‪pap_power_on()
961 {
962  self endon( "zbarrier_state_change" );
963 
964  self SetZBarrierPieceState( ‪PAP_INITIAL_PIECE, "opening" );
965  while ( self GetZBarrierPieceState( ‪PAP_INITIAL_PIECE ) == "opening" )
966  {
968  }
969 
970  self playsound( "zmb_perks_power_on" );
971 
972  self thread ‪set_pap_zbarrier_state( "powered" );
973 }
974 
975 function private ‪pap_powered()
976 {
977  self endon( "zbarrier_state_change" );
978 
979  self SetZBarrierPieceState( ‪PAP_POWERED_PIECE, "closed" );
980 
981  if( self.classname === "zbarrier_zm_castle_packapunch" || self.classname === "zbarrier_zm_tomb_packapunch" )
982  {
983  self ‪clientfield::set("pap_working_FX", 0);
984  }
985 
986  while ( true )
987  {
988  wait( randomfloatrange( 180, 1800 ) );
989  self SetZBarrierPieceState( ‪PAP_POWERED_PIECE, "opening" );
990 
991  wait( randomfloatrange( 180, 1800 ) );
992  self SetZBarrierPieceState( ‪PAP_POWERED_PIECE, "closing" );
993  }
994 }
995 
996 function private ‪pap_take_gun()
997 {
998  self SetZBarrierPieceState( ‪PAP_PACKING_PIECE, "opening" );
999  self SetZBarrierPieceState( ‪PAP_FLAG_PIECE, "opening" );
1000  self SetZBarrierPieceState( ‪PAP_WEAPON_PIECE, "opening" );
1001  wait .1;//let the right peices be shown first
1002 
1003  if( self.classname === "zbarrier_zm_castle_packapunch" || self.classname === "zbarrier_zm_tomb_packapunch" )
1004  {
1005  self ‪clientfield::set("pap_working_FX", 1);
1006  }
1007 }
1008 
1009 function private ‪pap_eject_gun()
1010 {
1011  self SetZBarrierPieceState( ‪PAP_PACKING_PIECE, "closing" );
1012  self SetZBarrierPieceState( ‪PAP_FLAG_PIECE, "closing" );
1013  self SetZBarrierPieceState( ‪PAP_WEAPON_PIECE, "closing" );
1014 }
1015 
1016 function private ‪pap_leaving()
1017 {
1018 
1019  self SetZBarrierPieceState( ‪PAP_TELEPORT_PIECE, "closing" );
1020  do
1021  {
1023  }
1024  while ( self GetZBarrierPieceState( ‪PAP_TELEPORT_PIECE ) == "closing" );
1025  self SetZBarrierPieceState( ‪PAP_TELEPORT_PIECE, "closed" );
1026  self notify ("leave_anim_done");
1027 
1028 }
1029 
1030 function private ‪pap_arriving()
1031 {
1032  self endon( "zbarrier_state_change" );
1033 
1034  self SetZBarrierPieceState( ‪PAP_INITIAL_PIECE, "opening" );
1035  while ( self GetZBarrierPieceState( ‪PAP_INITIAL_PIECE ) == "opening" )
1036  {
1038  }
1039 
1040  self playsound( "zmb_perks_power_on" );
1041 
1042  self thread ‪set_pap_zbarrier_state( "powered" );
1043 
1044 }
1045 
1046 function private ‪get_pap_zbarrier_state()
1047 {
1048  return self.state;
1049 }
1050 
1051 function private ‪set_pap_zbarrier_state( state )
1052 {
1053  for ( i = 0; i < self GetNumZBarrierPieces(); i++ )
1054  {
1055  self HideZBarrierPiece( i );
1056  }
1057 
1058  self notify( "zbarrier_state_change" );
1059 
1060  self [[level.pap_zbarrier_state_func]]( state );
1061 }
1062 
1063 function private ‪process_pap_zbarrier_state( state )
1064 {
1065  switch ( state )
1066  {
1067  case "initial":
1068  self ShowZBarrierPiece( ‪PAP_INITIAL_PIECE );
1069  self thread ‪pap_initial();
1070  self.state = "initial";
1071  break;
1072  case "power_off":
1073  self ShowZBarrierPiece( ‪PAP_INITIAL_PIECE );
1074  self thread ‪pap_power_off();
1075  self.state = "power_off";
1076  break;
1077  case "power_on":
1078  self ShowZBarrierPiece( ‪PAP_INITIAL_PIECE );
1079  self thread ‪pap_power_on();
1080  self.state = "power_on";
1081  break;
1082  case "powered":
1083  self ShowZBarrierPiece( ‪PAP_POWERED_PIECE );
1084  self thread ‪pap_powered();
1085  self.state = "powered";
1086  break;
1087  case "take_gun":
1088  self ShowZBarrierPiece( ‪PAP_PACKING_PIECE );
1089  self ShowZBarrierPiece( ‪PAP_FLAG_PIECE );
1090  self ShowZBarrierPiece( ‪PAP_WEAPON_PIECE );
1091  self thread ‪pap_take_gun();
1092  self.state = "take_gun";
1093  break;
1094  case "eject_gun":
1095  self ShowZBarrierPiece( ‪PAP_PACKING_PIECE );
1096  self ShowZBarrierPiece( ‪PAP_FLAG_PIECE );
1097  self ShowZBarrierPiece( ‪PAP_WEAPON_PIECE );
1098  self thread ‪pap_eject_gun();
1099  self.state = "eject_gun";
1100  break;
1101  case "leaving":
1102  self ShowZBarrierPiece( ‪PAP_TELEPORT_PIECE );
1103  self thread ‪pap_leaving();
1104  self.state = "leaving";
1105  break;
1106  case "arriving":
1107  self ShowZBarrierPiece( ‪PAP_INITIAL_PIECE );
1108  self thread ‪pap_arriving();
1109  self.state = "arriving";
1110  break;
1111  case "hidden":
1112  self.state = "hidden";
1113  break;
1114  default:
1115  if ( IsDefined( level.custom_pap_state_handler ) )
1116  {
1117  self [[ level.custom_pap_state_handler ]]( state );
1118  }
1119  break;
1120  }
1121 }
1122 
1124 //Public state change functions
1126 
1127 function ‪set_state_initial()//self is a zbarrier
1128 {
1129  self ‪set_pap_zbarrier_state( "initial" );
1130 }
1131 
1132 function ‪set_state_leaving()//self is a zbarrier
1133 {
1134  self ‪set_pap_zbarrier_state( "leaving" );
1135 }
1136 
1137 function ‪set_state_arriving()//self is a zbarrier
1138 {
1139  self ‪set_pap_zbarrier_state( "arriving" );
1140 }
1141 
1142 function ‪set_state_power_on()//self is a zbarrier
1143 {
1144  self ‪set_pap_zbarrier_state( "power_on" );
1145 }
1146 
1147 function ‪set_state_hidden()//self is a zbarrier
1148 {
1149  self ‪set_pap_zbarrier_state( "hidden" );
1150 }
‪is_active
‪function is_active(str_scenedef)
Definition: scene_shared.csc:2314
‪get_pap_zbarrier_state
‪function private get_pap_zbarrier_state()
Definition: _zm_pack_a_punch.gsc:1046
‪is_equipment
‪function is_equipment(weapon)
Definition: _zm_equipment.gsc:691
‪set_pap_zbarrier_state
‪function private set_pap_zbarrier_state(state)
Definition: _zm_pack_a_punch.gsc:1051
‪ZM_MAP_EVENT_PAP_REPACK_USED
‪#define ZM_MAP_EVENT_PAP_REPACK_USED
Definition: _zm_utility.gsh:85
‪upgrade_knuckle_crack_end
‪function private upgrade_knuckle_crack_end()
Definition: _zm_pack_a_punch.gsc:836
‪is_on
‪function private is_on()
Definition: _zm_pack_a_punch.gsc:895
‪is_weapon_or_base_included
‪function is_weapon_or_base_included(weapon)
Definition: _zm_weapons.gsc:650
‪increment_client_stat
‪function increment_client_stat(stat_name, include_gametype)
Definition: _zm_stats.gsc:389
‪pap_leaving
‪function private pap_leaving()
Definition: _zm_pack_a_punch.gsc:1016
‪vending_weapon_upgrade_cost
‪function private vending_weapon_upgrade_cost()
Definition: _zm_pack_a_punch.gsc:578
‪cost_func
‪function private cost_func()
Definition: _zm_pack_a_punch.gsc:912
‪process_pap_zbarrier_state
‪function private process_pap_zbarrier_state(state)
Definition: _zm_pack_a_punch.gsc:1063
‪get_player_weapon_limit
‪function get_player_weapon_limit(player)
Definition: _zm_utility.gsc:5865
‪intermission
‪function intermission()
Definition: _zm.gsc:6542
‪increment_player_stat
‪function increment_player_stat(stat_name)
Definition: _zm_stats.gsc:369
‪sndPerksJingles_Player
‪function sndPerksJingles_Player(type)
Definition: _zm_audio.gsc:1598
‪weapon_supports_aat
‪function weapon_supports_aat(weapon)
Definition: _zm_weapons.gsc:1700
‪clear
‪function clear(str_flag)
Definition: flag_shared.csc:130
‪pap_take_gun
‪function private pap_take_gun()
Definition: _zm_pack_a_punch.gsc:996
‪__main__
‪function __main__()
Definition: _zm_pack_a_punch.gsc:55
‪is_player_revive_tool
‪function is_player_revive_tool(weapon)
Definition: _zm_utility.gsc:4107
‪turnOnPAPSounds
‪function private turnOnPAPSounds(ent)
Definition: _zm_pack_a_punch.gsc:572
‪pap_power_on
‪function private pap_power_on()
Definition: _zm_pack_a_punch.gsc:960
‪acquire
‪function acquire(weapon, name)
Definition: aat_shared.gsc:443
‪get_triggers
‪function get_triggers()
Definition: _zm_pack_a_punch_util.gsc:77
‪pap_power_off
‪function private pap_power_off()
Definition: _zm_pack_a_punch.gsc:955
‪disable_player_move_states
‪function disable_player_move_states(forceStanceChange)
Definition: _zm_utility.gsc:5536
‪ZM_MAP_EVENT_PAP_NOT_GRABBED
‪#define ZM_MAP_EVENT_PAP_NOT_GRABBED
Definition: _zm_utility.gsh:70
‪pap_trigger_hintstring_monitor
‪function private pap_trigger_hintstring_monitor()
Definition: _zm_pack_a_punch.gsc:151
‪remove
‪function remove(weapon)
Definition: aat_shared.gsc:499
‪hacker_active
‪function hacker_active()
Definition: _zm_equipment.gsc:748
‪wait_for_timeout
‪function private wait_for_timeout(weapon, packa_timer, player, isRepack)
Definition: _zm_pack_a_punch.gsc:715
‪player_use_can_pack_now
‪function private player_use_can_pack_now()
Definition: _zm_pack_a_punch.gsc:285
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪get_player_index
‪function get_player_index(player)
Definition: _zm_utility.gsc:5949
‪get_range
‪function private get_range(delta, origin, radius)
Definition: _zm_pack_a_punch.gsc:863
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪pack_a_punch_machine_trigger_think
‪function private pack_a_punch_machine_trigger_think()
Definition: _zm_pack_a_punch.gsc:311
‪update_hint_string
‪function update_hint_string(player)
Definition: _zm_pack_a_punch_util.gsc:103
‪enable_player_move_states
‪function enable_player_move_states()
Definition: _zm_utility.gsc:5554
‪getAATOnWeapon
‪function getAATOnWeapon(weapon)
Definition: aat_shared.gsc:415
‪is_player_valid
‪function is_player_valid(player, checkIgnoreMeFlag, ignore_laststand_players)
Definition: skeleton.gsc:256
‪turn_on
‪function private turn_on(origin, radius)
Definition: _zm_pack_a_punch.gsc:879
‪get_start_state
‪function private get_start_state()
Definition: _zm_pack_a_punch.gsc:902
‪increment_is_drinking
‪function increment_is_drinking()
Definition: _zm_utility.gsc:3859
‪switch_back_primary_weapon
‪function switch_back_primary_weapon(oldprimary, immediate=false)
Definition: _zm_weapons.gsc:280
‪get_nonalternate_weapon
‪function get_nonalternate_weapon(weapon)
Definition: aat_shared.gsc:104
‪turn_off
‪function private turn_off(origin, radius)
Definition: _zm_pack_a_punch.gsc:885
‪increment_challenge_stat
‪function increment_challenge_stat(stat_name, amount=1)
Definition: _zm_stats.gsc:478
‪set_state_arriving
‪function set_state_arriving()
Definition: _zm_pack_a_punch.gsc:1137
‪PAP_INITIAL_PIECE
‪#define PAP_INITIAL_PIECE
Definition: _zm_pack_a_punch.gsc:40
‪ZM_MAP_EVENT_PAP_REPACK_NOT_GRABBED
‪#define ZM_MAP_EVENT_PAP_REPACK_NOT_GRABBED
Definition: _zm_utility.gsh:89
‪pap_eject_gun
‪function private pap_eject_gun()
Definition: _zm_pack_a_punch.gsc:1009
‪ZM_MAP_EVENT_PAP_USED
‪#define ZM_MAP_EVENT_PAP_USED
Definition: _zm_utility.gsh:67
‪can_upgrade_weapon
‪function can_upgrade_weapon(weapon)
Definition: _zm_weapons.gsc:1675
‪minus_to_player_score
‪function minus_to_player_score(points)
Definition: _zm_score.gsc:551
‪can_player_purchase
‪function can_player_purchase(n_cost)
Definition: _zm_score.gsc:655
‪VERSION_DLC1
‪#define VERSION_DLC1
Definition: version.gsh:91
‪add_powered_item
‪function add_powered_item(power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target)
Definition: _zm_power.gsc:229
‪REGISTER_SYSTEM_EX
‪#define REGISTER_SYSTEM_EX(__sys, __func_init_preload, __func_init_postload, __reqs)
Definition: shared.gsh:209
‪__init__
‪function __init__()
Definition: _zm_pack_a_punch.gsc:49
‪pap_trigger_hintstring_monitor_reset
‪function private pap_trigger_hintstring_monitor_reset()
Definition: _zm_pack_a_punch.gsc:172
‪set_state_initial
‪function set_state_initial()
Definition: _zm_pack_a_punch.gsc:1127
‪set_state_leaving
‪function set_state_leaving()
Definition: _zm_pack_a_punch.gsc:1132
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪upgrade_knuckle_crack_begin
‪function private upgrade_knuckle_crack_begin()
Definition: _zm_pack_a_punch.gsc:809
‪ARRAY_ADD
‪#define ARRAY_ADD(__array, __item)
Definition: shared.gsh:304
‪vending_weapon_upgrade
‪function private vending_weapon_upgrade()
Definition: _zm_pack_a_punch.gsc:341
‪ZM_MAP_EVENT_PAP_REPACK_GRABBED
‪#define ZM_MAP_EVENT_PAP_REPACK_GRABBED
Definition: _zm_utility.gsh:97
‪decrement_is_drinking
‪function decrement_is_drinking()
Definition: _zm_utility.gsc:3898
‪shutOffPAPSounds
‪function private shutOffPAPSounds(ent1, ent2, ent3)
Definition: _zm_pack_a_punch.gsc:560
‪is_enabled
‪function is_enabled(name)
Definition: _zm_bgb.gsc:4
‪give_build_kit_weapon
‪function give_build_kit_weapon(weapon)
Definition: _zm_weapons.gsc:2543
‪is_pers_double_points_active
‪function is_pers_double_points_active()
Definition: _zm_pers_upgrades_functions.gsc:12
‪bookmark
‪function bookmark(type, time, mainClientEnt, otherClientEnt, eventPriority, inflictorEnt, overrideEntityCamera, actorEnt)
Definition: demo_shared.gsc:25
‪do_knuckle_crack
‪function private do_knuckle_crack()
Definition: _zm_pack_a_punch.gsc:795
‪switch_from_alt_weapon
‪function switch_from_alt_weapon(weapon)
Definition: _zm_weapons.gsc:240
‪PAP_POWERED_PIECE
‪#define PAP_POWERED_PIECE
Definition: _zm_pack_a_punch.gsc:44
‪Spawn
‪function Spawn(parent, onDeathCallback)
Definition: _flak_drone.gsc:427
‪pap_powered
‪function private pap_powered()
Definition: _zm_pack_a_punch.gsc:975
‪wait_for_player_to_take
‪function private wait_for_player_to_take(player, weapon, packa_timer, b_weapon_supports_aat, isRepack)
Definition: _zm_pack_a_punch.gsc:593
‪pers_upgrade_double_points_cost
‪function pers_upgrade_double_points_cost(current_cost)
Definition: _zm_pers_upgrades_functions.gsc:13
‪PAP_WEAPON_KNUCKLE_CRACK
‪#define PAP_WEAPON_KNUCKLE_CRACK
Definition: _zm_pack_a_punch.gsc:38
‪init
‪function init()
Definition: struct.csc:1
‪PAP_FLAG_PIECE
‪#define PAP_FLAG_PIECE
Definition: _zm_pack_a_punch.gsc:42
‪toggle_think
‪function private toggle_think(powered_on)
Definition: _zm_pack_a_punch.gsc:927
‪pap_arriving
‪function private pap_arriving()
Definition: _zm_pack_a_punch.gsc:1030
‪play_weapon_vo
‪function play_weapon_vo(weapon, magic_box)
Definition: _zm_weapons.gsc:2838
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪destroy_weapon_in_blackout
‪function private destroy_weapon_in_blackout(player)
Definition: _zm_pack_a_punch.gsc:774
‪PAP_TELEPORT_PIECE
‪#define PAP_TELEPORT_PIECE
Definition: _zm_pack_a_punch.gsc:45
‪player_is_in_laststand
‪function player_is_in_laststand()
Definition: laststand_shared.gsc:18
‪get_upgrade_weapon
‪function get_upgrade_weapon(weapon, add_attachment)
Definition: _zm_weapons.gsc:1639
‪get_pack_a_punch_camo_index
‪function get_pack_a_punch_camo_index(prev_pap_index)
Definition: _zm_weapons.gsc:2457
‪third_person_weapon_upgrade
‪function private third_person_weapon_upgrade(current_weapon, upgrade_weapon, packa_rollers, pap_machine, trigger)
Definition: _zm_pack_a_punch.gsc:179
‪init_parameters
‪function init_parameters()
Definition: _zm_pack_a_punch_util.gsc:20
‪PAP_WEAPON_PIECE
‪#define PAP_WEAPON_PIECE
Definition: _zm_pack_a_punch.gsc:43
‪weapon_give
‪function weapon_give(weapon, is_upgrade=false, magic_box=false, nosound=false, b_switch_weapon=true)
Definition: _zm_weapons.gsc:2603
‪PAP_PACKING_PIECE
‪#define PAP_PACKING_PIECE
Definition: _zm_pack_a_punch.gsc:41
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪set_state_power_on
‪function set_state_power_on()
Definition: _zm_pack_a_punch.gsc:1142
‪create_and_play_dialog
‪function create_and_play_dialog(category, subcategory, force_variant)
Definition: _zm_audio.gsc:603
‪wait_for_disconnect
‪function private wait_for_disconnect(player)
Definition: _zm_pack_a_punch.gsc:759
‪ZM_MAP_EVENT_PAP_GRABBED
‪#define ZM_MAP_EVENT_PAP_GRABBED
Definition: _zm_utility.gsh:93
‪pap_initial
‪function private pap_initial()
Definition: _zm_pack_a_punch.gsc:948
‪can_pack_weapon
‪function private can_pack_weapon(weapon)
Definition: _zm_pack_a_punch.gsc:253
‪set_state_hidden
‪function set_state_hidden()
Definition: _zm_pack_a_punch.gsc:1147
‪ANY_POWER
‪#define ANY_POWER
Definition: _zm_utility.gsh:7
‪IS_DRINKING
‪#define IS_DRINKING(_is_drinking)
Definition: _zm_utility.gsh:1
‪is_placeable_mine
‪function is_placeable_mine(weapon)
Definition: _zm_utility.gsc:4267
‪take_fallback_weapon
‪function take_fallback_weapon()
Definition: _zm_melee_weapon.gsc:223
‪spawn_init
‪function private spawn_init()
Definition: _zm_pack_a_punch.gsc:82
‪can_buy_weapon
‪function can_buy_weapon()
Definition: _zm_magicbox.gsc:937
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265