‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_aat_blast_furnace.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\flag_shared;
7 #using scripts\shared\math_shared;
8 #using scripts\shared\system_shared;
9 #using scripts\shared\util_shared;
10 #using scripts\shared\ai\systems\gib;
11 
12 #insert scripts\shared\aat_zm.gsh;
13 #insert scripts\shared\shared.gsh;
14 #insert scripts\shared\version.gsh;
15 
16 #using scripts\zm\_zm_stats;
17 #using scripts\zm\_zm_utility;
18 
19 #insert scripts\zm\aats\_zm_aat_blast_furnace.gsh;
20 
21 #insert scripts\zm\_zm_utility.gsh;
22 
23 #precache( "material", ZM_AAT_BLAST_FURNACE_DAMAGE_FEEDBACK_ICON );
24 
25 #namespace zm_aat_blast_furnace;
26 
28 
29 function ‪__init__()
30 {
31  if ( !‪IS_TRUE( level.aat_in_use ) )
32  {
33  return;
34  }
35 
38 
43 }
44 
45 
46 function ‪result( ‪death, attacker, mod, weapon )
47 {
48  self thread ‪blast_furnace_explosion( attacker, weapon );
49 }
50 
51 // Sets Time Limit before zombie dies
52 // if immune_result_direct, target does not get death gibbed by blast furnace
53 // if immune_result_indirect, target does not get affected by damage over time
54 // self == explosion point entity model
55 function ‪blast_furnace_explosion( e_attacker, w_weapon )
56 {
57  if ( IsVehicle( self ) )
58  {
60  }
61  else
62  {
64  }
65 
66  // Get array of zombies
67  a_e_blasted_zombies = array::get_all_closest( self.origin, GetAITeamArray( "axis" ), undefined, undefined, ‪ZM_AAT_BLAST_FURNACE_RANGE );
68 
69  if ( a_e_blasted_zombies.size > 0 )
70  {
71  i = 0;
72  while ( i < a_e_blasted_zombies.size )
73  {
74  if ( IsAlive( a_e_blasted_zombies[i] ) )
75  {
76 
77  // If current ai_zombie is immune to indirect results from the AAT
78  if ( ‪IS_TRUE( level.aat[ ‪ZM_AAT_BLAST_FURNACE_NAME ].immune_result_indirect[ a_e_blasted_zombies[i].archetype ] ) )
79  {
80  ArrayRemoveValue( a_e_blasted_zombies, a_e_blasted_zombies[i] );
81  continue;
82  }
83 
84  if ( ( a_e_blasted_zombies[i] == self ) && !‪IS_TRUE( level.aat[ ‪ZM_AAT_BLAST_FURNACE_NAME ].immune_result_direct[ a_e_blasted_zombies[i].archetype ] ) )
85  {
86  self thread ‪zombie_death_gib( e_attacker, w_weapon );
87 
88  if ( IsVehicle( a_e_blasted_zombies[i] ) )
89  {
91  }
92  else
93  {
94  a_e_blasted_zombies[i] thread ‪clientfield::increment( ‪ZM_AAT_BLAST_FURNACE_CF_NAME_BURN );
95  }
96 
97  ArrayRemoveValue( a_e_blasted_zombies, a_e_blasted_zombies[i] );
98  continue;
99  }
100 
101  if ( IsVehicle( a_e_blasted_zombies[i] ) )
102  {
104  }
105  else
106  {
107  a_e_blasted_zombies[i] thread ‪clientfield::increment( ‪ZM_AAT_BLAST_FURNACE_CF_NAME_BURN );
108  }
109  }
110 
111  i++;
112  }
113 
115 
116  a_e_blasted_zombies = array::remove_dead( a_e_blasted_zombies );
117  a_e_blasted_zombies = ‪array::remove_undefined( a_e_blasted_zombies );
118  array::thread_all( a_e_blasted_zombies, &‪blast_furnace_zombie_burn, e_attacker, w_weapon );
119  }
120 }
121 
122 // Does damage to burning szombies
123 // self == affected zombie
124 function ‪blast_furnace_zombie_burn( e_attacker, w_weapon )
125 {
126  self endon( "death" );
127 
128  n_damage = self.health / ‪ZM_AAT_BLAST_FURNACE_DOT_NUM_TICKS;
129 
130  i = 0;
132  {
133  // if doing fatal damage, increment the stat
134  if( self.health < n_damage )
135  {
136  e_attacker ‪zm_stats::increment_challenge_stat( "ZOMBIE_HUNTER_BLAST_FURNACE" );
137  }
138 
139  self DoDamage( n_damage, self.origin, e_attacker, undefined, "none", "MOD_UNKNOWN", 0, w_weapon );
140  i++;
142  }
143 }
144 
145 // Gibs and Kills zombie
146 // self == affected zombie
147 function ‪zombie_death_gib( e_attacker, w_weapon )
148 {
149  gibserverutils::gibhead( self );
150 
151  if ( ‪math::cointoss() )
152  {
153  gibserverutils::gibleftarm( self );
154  }
155  else
156  {
157  gibserverutils::gibrightarm( self );
158  }
159 
160  gibserverutils::giblegs( self );
161 
162  self DoDamage( self.health, self.origin, e_attacker );
163 
164  if ( IsDefined( e_attacker ) && IsPlayer( e_attacker ) )
165  {
166  e_attacker ‪zm_stats::increment_challenge_stat( "ZOMBIE_HUNTER_BLAST_FURNACE" );
167  }
168 }
169 
170 
‪__init__
‪function __init__()
Definition: _zm_aat_blast_furnace.gsc:29
‪death
‪function death(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _ai_tank.csc:134
‪ZM_AAT_BLAST_FURNACE_PERCENTAGE
‪#define ZM_AAT_BLAST_FURNACE_PERCENTAGE
Definition: _zm_aat_blast_furnace.gsh:9
‪ZM_AAT_BLAST_FURNACE_CF_NAME_EXPLOSION
‪#define ZM_AAT_BLAST_FURNACE_CF_NAME_EXPLOSION
Definition: _zm_aat_blast_furnace.gsh:3
‪ZM_AAT_BLAST_FURNACE_OCCURS_ON_DEATH
‪#define ZM_AAT_BLAST_FURNACE_OCCURS_ON_DEATH
Definition: _zm_aat_blast_furnace.gsh:13
‪blast_furnace_zombie_burn
‪function blast_furnace_zombie_burn(e_attacker, w_weapon)
Definition: _zm_aat_blast_furnace.gsc:124
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪cointoss
‪function cointoss()
Definition: math_shared.csc:171
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪ZM_AAT_BLAST_FURNACE_COOLDOWN_ENTITY
‪#define ZM_AAT_BLAST_FURNACE_COOLDOWN_ENTITY
Definition: _zm_aat_blast_furnace.gsh:10
‪increment_challenge_stat
‪function increment_challenge_stat(stat_name, amount=1)
Definition: _zm_stats.gsc:478
‪ZM_AAT_BLAST_FURNACE_COOLDOWN_GLOBAL
‪#define ZM_AAT_BLAST_FURNACE_COOLDOWN_GLOBAL
Definition: _zm_aat_blast_furnace.gsh:12
‪zombie_death_gib
‪function zombie_death_gib(e_attacker, w_weapon)
Definition: _zm_aat_blast_furnace.gsc:147
‪ZM_AAT_BLAST_FURNACE_DOT_TICK_RATE
‪#define ZM_AAT_BLAST_FURNACE_DOT_TICK_RATE
Definition: _zm_aat_blast_furnace.gsh:18
‪remove_undefined
‪function remove_undefined(array, b_keep_keys)
Definition: array_shared.csc:56
‪increment
‪function increment(str_field_name, n_increment_count=1)
Definition: clientfield_shared.gsc:110
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪ZM_AAT_BLAST_FURNACE_DOT_NUM_TICKS
‪#define ZM_AAT_BLAST_FURNACE_DOT_NUM_TICKS
Definition: _zm_aat_blast_furnace.gsh:17
‪ZM_AAT_BLAST_FURNACE_CF_NAME_BURN_VEH
‪#define ZM_AAT_BLAST_FURNACE_CF_NAME_BURN_VEH
Definition: _zm_aat_blast_furnace.gsh:6
‪ZM_AAT_BLAST_FURNACE_CF_NAME_BURN
‪#define ZM_AAT_BLAST_FURNACE_CF_NAME_BURN
Definition: _zm_aat_blast_furnace.gsh:5
‪ZM_AAT_BLAST_FURNACE_CF_NAME_EXPLOSION_VEH
‪#define ZM_AAT_BLAST_FURNACE_CF_NAME_EXPLOSION_VEH
Definition: _zm_aat_blast_furnace.gsh:4
‪ZM_AAT_BLAST_FURNACE_COOLDOWN_ATTACKER
‪#define ZM_AAT_BLAST_FURNACE_COOLDOWN_ATTACKER
Definition: _zm_aat_blast_furnace.gsh:11
‪ZM_AAT_BLAST_FURNACE_DAMAGE_FEEDBACK_SOUND
‪#define ZM_AAT_BLAST_FURNACE_DAMAGE_FEEDBACK_SOUND
Definition: _zm_aat_blast_furnace.gsh:15
‪ZM_AAT_BLAST_FURNACE_DAMAGE_FEEDBACK_ICON
‪#define ZM_AAT_BLAST_FURNACE_DAMAGE_FEEDBACK_ICON
Definition: _zm_aat_blast_furnace.gsh:14
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪ZM_AAT_BLAST_FURNACE_DELAY
‪#define ZM_AAT_BLAST_FURNACE_DELAY
Definition: _zm_aat_blast_furnace.gsh:20
‪ZM_AAT_BLAST_FURNACE_NAME
‪#define ZM_AAT_BLAST_FURNACE_NAME
Definition: aat_zm.gsh:4
‪result
‪function result(death, attacker, mod, weapon)
Definition: _zm_aat_blast_furnace.gsc:46
‪ZM_AAT_BLAST_FURNACE_RANGE
‪#define ZM_AAT_BLAST_FURNACE_RANGE
Definition: _zm_aat_blast_furnace.gsh:21
‪blast_furnace_explosion
‪function blast_furnace_explosion(e_attacker, w_weapon)
Definition: _zm_aat_blast_furnace.gsc:55