‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_trap_electric.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\exploder_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\visionset_mgr_shared;
7 #using scripts\shared\util_shared;
8 
9 #insert scripts\shared\shared.gsh;
10 #insert scripts\shared\version.gsh;
11 
12 #using scripts\zm\_zm_audio;
13 #using scripts\zm\_zm_stats;
14 #using scripts\zm\_zm_traps;
15 #using scripts\zm\_zm_utility;
16 
17 #using scripts\shared\ai\zombie_death;
18 
19 #insert scripts\zm\_zm_perks.gsh;
20 #insert scripts\zm\_zm_traps.gsh;
21 
22 #namespace zm_trap_electric;
23 
24 ‪REGISTER_SYSTEM( "zm_trap_electric", &‪__init__, undefined )
25 
26 function ‪__init__()
27 {
30 
31  if ( !IsDefined( level.vsmgr_prio_overlay_zm_trap_electrified ) )
32  {
33  level.vsmgr_prio_overlay_zm_trap_electrified = 60;
34  }
35  ‪visionset_mgr::register_info( "overlay", "zm_trap_electric", ‪VERSION_SHIP, level.vsmgr_prio_overlay_zm_trap_electrified, 15, true, &‪visionset_mgr::duration_lerp_thread_per_player, false );
36  level.trap_electric_visionset_registered = true;
37 
38  a_traps = ‪struct::get_array( "trap_electric", "targetname" );
39  foreach( trap in a_traps )
40  {
41  ‪clientfield::register( "world", trap.script_noteworthy, ‪VERSION_SHIP, 1, "int" );
42  }
43 }
44 
46 {
47  self._trap_duration = 40;
48  self._trap_cooldown_time = 60;
49 
50  if ( isdefined( level.sndTrapFunc ) )
51  {
52  level thread [[ level.sndTrapFunc ]]( self, 1 );
53  }
54 
55  self notify("trap_activate");//TODO let's get rid of this and instead use the level notify
56  level notify( "trap_activate", self );
57 
58 
59  level ‪clientfield::set( self.target , 1 );
60 
61  // Kick off audio
62  fx_points = ‪struct::get_array( self.target,"targetname" );
63  for( i=0; i<fx_points.size; i++ )
64  {
66  fx_points[i] thread ‪trap_audio(self);
67  }
68 
69  // Do the damage
70  self thread ‪zm_traps::trap_damage();
71  self ‪util::waittill_notify_or_timeout( "trap_deactivate", self._trap_duration );
72 
73  // Shut down
74  self notify ("trap_done");
75 
76  level ‪clientfield::set( self.target , 0 );
77 }
78 
79 function ‪trap_audio( trap )
80 {
81  sound_origin = ‪spawn( "script_origin", self.origin );
82  sound_origin playsound( "wpn_zmb_inlevel_trap_start" );
83  sound_origin playloopsound( "wpn_zmb_inlevel_trap_loop" );
84  self thread ‪play_electrical_sound( trap );
85 
86  trap ‪util::waittill_any_timeout( trap._trap_duration, "trap_done");
87 
88  if(isdefined(sound_origin))
89  {
90  playsoundatposition( "wpn_zmb_inlevel_trap_stop", sound_origin.origin );
91 
92  sound_origin stoploopsound();
93  wait(.05);
94  sound_origin delete();
95  }
96 }
97 
98 function ‪play_electrical_sound( trap )
99 {
100  trap endon ("trap_done");
101  while( 1 )
102  {
103  wait( randomfloatrange(0.1, 0.5) );
104  playsoundatposition( "amb_sparks", self.origin );
105  }
106 }
107 
109 {
110  if( !‪IS_TRUE(self.b_no_trap_damage) )
111  {
112  self thread ‪zm_traps::player_elec_damage();
113  }
114 }
115 
116 function ‪damage( trap )
117 {
118  self endon("death");
119 
120  n_param = randomint(100);
121 
122  self.marked_for_death = true;
123 
124  // consider it a trap kill at this point since we've already marked them for death (FIXED BO3 TU3 11/12/2015 - wasn't getting hit before because the zombie would die from trap damage, ending the thread)
125  if ( IsDefined( trap.activated_by_player ) && IsPlayer( trap.activated_by_player ) )
126  {
127  trap.activated_by_player ‪zm_stats::increment_challenge_stat( "ZOMBIE_HUNTER_KILL_TRAP" );
128 
129  if ( IsDefined ( trap.activated_by_player.zapped_zombies ) ) //achievement hookup
130  {
131  trap.activated_by_player.zapped_zombies++;
132  trap.activated_by_player notify ( "zombie_zapped" );
133  }
134  }
135 
136  // Param is used as a random chance number
137 
138  if ( isdefined( self.animname ) && self.animname != "zombie_dog" && IsActor( self ) )
139  {
140  // 10% chance the zombie will burn, a max of 6 burning zombs can be going at once
141  // otherwise the zombie just gibs and dies
142  if( (n_param > 90) && (level.burning_zombies.size < 6) )
143  {
144  level.burning_zombies[level.burning_zombies.size] = self;
145  self thread ‪zm_traps::zombie_flame_watch();
146  self playsound("zmb_ignite");
147 
148  self thread ‪zombie_death::flame_death_fx();
149  PlayFxOnTag( level._effect["character_fire_death_torso"], self, "J_SpineLower" );
150 
151  wait( randomfloat(1.25) );
152  }
153  else
154  {
155  refs[0] = "guts";
156  refs[1] = "right_arm";
157  refs[2] = "left_arm";
158  refs[3] = "right_leg";
159  refs[4] = "left_leg";
160  refs[5] = "no_legs";
161  refs[6] = "head";
162  self.a.gib_ref = refs[randomint(refs.size)];
163 
164  playsoundatposition("wpn_zmb_electrap_zap", self.origin);
165 
166  if(randomint(100) > 50 )
167  {
169  //self thread zm_traps::play_elec_vocals();
170  }
171 
172  self notify( "bhtn_action_notify", "electrocute" );
173 
174  wait(randomfloat(1.25));
175  self playsound("wpn_zmb_electrap_zap");
176  }
177  }
178 
179  // custom damage
180  if ( isdefined( self.fire_damage_func ) )
181  {
182  self [[ self.fire_damage_func ]]( trap );
183  }
184  else
185  {
186  level notify( "trap_kill", self, trap );
187  self dodamage(self.health + 666, self.origin, trap);
188  }
189 }
‪play_electrical_sound
‪function play_electrical_sound(trap)
Definition: _zm_trap_electric.gsc:98
‪register_trap_basic_info
‪function register_trap_basic_info(str_trap, func_activate, func_audio)
Definition: _zm_traps.gsc:1220
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪get_array
‪function get_array(kvp_value, kvp_key="targetname")
Definition: struct.csc:34
‪trap_activate_electric
‪function trap_activate_electric()
Definition: _zm_trap_electric.gsc:45
‪duration_lerp_thread_per_player
‪function duration_lerp_thread_per_player(player, duration, max_duration)
Definition: visionset_mgr_shared.gsc:199
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪waittill_any_timeout
‪function waittill_any_timeout(n_timeout, string1, string2, string3, string4, string5)
Definition: util_shared.csc:423
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪player_damage
‪function player_damage()
Definition: _zm_trap_electric.gsc:108
‪register_trap_damage
‪function register_trap_damage(str_trap, func_player_damage, func_damage)
Definition: _zm_traps.gsc:1257
‪player_elec_damage
‪function player_elec_damage()
Definition: _zm_traps.gsc:784
‪damage
‪function damage(trap)
Definition: _zm_trap_electric.gsc:116
‪increment_challenge_stat
‪function increment_challenge_stat(stat_name, amount=1)
Definition: _zm_stats.gsc:478
‪wait_network_frame
‪function wait_network_frame(n_count=1)
Definition: util_shared.gsc:64
‪waittill_notify_or_timeout
‪function waittill_notify_or_timeout(msg, timer)
Definition: util_shared.csc:473
‪trap_damage
‪function trap_damage()
Definition: _zm_traps.gsc:695
‪electroctute_death_fx
‪function electroctute_death_fx()
Definition: _zm_traps.gsc:1005
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪flame_death_fx
‪function flame_death_fx(localClientNum)
Definition: zombie_death.csc:35
‪register_info
‪function register_info(type, name, version, lerp_step_count)
Definition: visionset_mgr_shared.csc:334
‪zombie_flame_watch
‪function zombie_flame_watch()
Definition: _zm_traps.gsc:976
‪__init__
‪function __init__()
Definition: _zm_trap_electric.gsc:26
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪trap_audio
‪function trap_audio(trap)
Definition: _zm_trap_electric.gsc:79
‪register
‪function register()
Definition: _ai_tank.gsc:126