‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_ai_tank.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
7 #using scripts\shared\vehicle_shared;
8 
9 #insert scripts\shared\shared.gsh;
10 #insert scripts\shared\version.gsh;
11 #insert scripts\mp\killstreaks\_killstreaks.gsh;
12 #using scripts\shared\visionset_mgr_shared;
13 
14 #using scripts\mp\_util;
15 #using scripts\mp\_vehicle;
16 
17 #precache( "client_fx", "killstreaks/fx_agr_emp_stun" );
18 
19 #using_animtree ( "mp_vehicles" );
20 
21 #namespace ai_tank;
22 
23 ‪REGISTER_SYSTEM( "ai_tank", &‪__init__, undefined )
24 
25 function ‪__init__()
26 {
27  bundle = ‪struct::get_script_bundle( "killstreak", "killstreak_ai_tank_drop" );
28  level.aiTankKillstreakBundle = bundle;
29 
30  level._ai_tank_fx = [];
31  level._ai_tank_fx[ "light_green" ] = "killstreaks/fx_agr_vlight_eye_grn";
32  level._ai_tank_fx[ "light_red" ] = "killstreaks/fx_agr_vlight_eye_red";
33  level._ai_tank_fx[ "stun" ] = "killstreaks/fx_agr_emp_stun";
34 
38  ‪clientfield::register( "toplayer", "ai_tank_update_hud", ‪VERSION_SHIP, 1, "counter", &‪update_hud, !‪CF_HOST_ONLY, !‪CF_CALLBACK_ZERO_ON_NEW_ENT );
39 
40  ‪vehicle::add_vehicletype_callback( "ai_tank_drone_mp", &‪spawned );
41  ‪vehicle::add_vehicletype_callback( "spawner_bo3_ai_tank_mp", &‪spawned );
42  ‪vehicle::add_vehicletype_callback( "spawner_bo3_ai_tank_mp_player", &‪spawned );
43 
45 }
46 
47 function ‪spawned( localClientNum, killstreak_duration )
48 {
49  self thread ‪play_driving_rumble( localClientNum );
50  self.killstreakBundle = level.aiTankKillstreakBundle;
51 }
52 
53 function ‪missile_fire( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
54 {
55  self endon( "entityshutdown" );
56  self ‪util::waittill_dobj( localClientNum );
57 
58  if ( self HasAnimTree() == false )
59  self UseAnimTree( #animtree );
60 
61  missiles_loaded = newVal;
62 
63  if ( newVal == 2 )
64  {
65  self SetAnimRestart( %o_drone_tank_missile1_fire, 1.0, 0.0, 0.5 );
66  }
67  else if ( newVal == 1 )
68  {
69  self SetAnimRestart( %o_drone_tank_missile2_fire, 1.0, 0.0, 0.5 );
70  }
71  else if ( newVal == 0 )
72  {
73  self SetAnimRestart( %o_drone_tank_missile3_fire, 1.0, 0.0, 0.5 );
74  }
75  else if ( newVal == 3 )
76  {
77  self SetAnimRestart( %o_drone_tank_missile_full_reload, 1.0, 0.0, 1.0 );
78  }
79 
80  if ( missiles_loaded <= ‪AI_TANK_MISSLE_COUNT_AFTER_RELOAD )
81  ‪update_ui_ammo_count( localClientNum, missiles_loaded );
82 }
83 
84 function ‪update_hud( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) // self == player
85 {
86  self endon( "disconnect" );
87 
89 
90  vehicle = GetPlayerVehicle( self );
91  if ( isdefined( vehicle ) )
92  {
93  self ‪update_ui_model_ammo_count( localClientNum, vehicle ‪clientfield::get( "ai_tank_missile_fire" ) );
94  }
95 }
96 
97 function ‪update_ui_ammo_count( localClientNum, missiles_loaded ) // self == vehicle
98 {
99  if ( self isLocalClientDriver( localClientNum ) || IsSpectating( localClientNum ) )
100  {
101  ‪update_ui_model_ammo_count( localclientnum, missiles_loaded );
102  }
103 }
104 
105 function ‪update_ui_model_ammo_count( localClientNum, missiles_loaded )
106 {
107  ammo_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.ammo" );
108 
109  if ( isdefined( ammo_ui_data_model ) )
110  SetUIModelValue( ammo_ui_data_model, missiles_loaded );
111 
112  // /# IPrintLnBold( "Missile Count: " + missiles_loaded ); #/
113 }
114 
115 
116 function ‪tank_stun( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
117 {
118  self endon( "entityshutdown" );
119  self endon( "death" );
120 
121  if ( newVal )
122  {
123  self notify( "light_disable" );
124 
125  self ‪stop_stun_fx( localClientNum );
126  self ‪start_stun_fx( localClientNum );
127  }
128  else
129  {
130  self ‪stop_stun_fx( localClientNum );
131  }
132 }
133 
134 function ‪death( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
135 {
136  player = GetLocalPlayer( localClientNum );
137 
138  if ( !isdefined( player ) )
139  {
140  return;
141  }
142 
143  if ( player GetInKillcam( localClientNum ) )
144  {
145  return;
146  }
147 
148  if ( newVal )
149  {
150  self ‪stop_stun_fx( localClientNum );
151  self notify( "light_disable" );
152  }
153 }
154 
155 function ‪start_stun_fx( localClientNum )
156 {
157  self.stun_fx = PlayFxOnTag( localClientNum, level._ai_tank_fx[ "stun" ], self, "tag_origin" );
158  PlaySound( localClientNum, "veh_talon_shutdown", self.origin );
159 }
160 
161 function ‪stop_stun_fx( localClientNum )
162 {
163  if ( isdefined( self.stun_fx ) )
164  {
165  StopFx( localClientNum, self.stun_fx );
166  self.stun_fx = undefined;
167  }
168 }
169 
170 function ‪play_driving_rumble( localClientNum )
171 {
172  self notify( "driving_rumble" );
173 
174  self endon( "entityshutdown" );
175  self endon( "death" );
176  self endon( "driving_rumble" );
177 
178  for ( ;; )
179  {
180  if ( IsInVehicle( localClientNum, self ) )
181  {
182  speed = self GetSpeed();
183 
184  if ( speed >= 40 || speed <= -40 )
185  {
186  player = GetLocalPlayer( localClientNum );
187 
188  if ( isdefined( player ) )
189  {
190  player Earthquake( 0.1, 0.1, self.origin, 200 );
191  }
192  }
193  }
194 
195  ‪util::server_wait( localClientNum, 0.05 );
196  }
197 }
‪tank_stun
‪function tank_stun(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _ai_tank.csc:116
‪death
‪function death(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _ai_tank.csc:134
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪update_hud
‪function update_hud(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _ai_tank.csc:84
‪start_stun_fx
‪function start_stun_fx(localClientNum)
Definition: _ai_tank.csc:155
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪AI_TANK_VISIONSET_FILE
‪#define AI_TANK_VISIONSET_FILE
Definition: _killstreaks.gsh:344
‪missile_fire
‪function missile_fire(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _ai_tank.csc:53
‪AI_TANK_VISIONSET_ALIAS
‪#define AI_TANK_VISIONSET_ALIAS
Definition: _killstreaks.gsh:335
‪register_visionset_info
‪function register_visionset_info(name, version, lerp_step_count, visionset_from, visionset_to, visionset_type=VSMGR_VISIONSET_TYPE_NAKED)
Definition: visionset_mgr_shared.csc:50
‪stop_stun_fx
‪function stop_stun_fx(localClientNum)
Definition: _ai_tank.csc:161
‪play_driving_rumble
‪function play_driving_rumble(localClientNum)
Definition: _ai_tank.csc:170
‪spawned
‪function spawned(localClientNum, killstreak_duration)
Definition: _ai_tank.csc:47
‪update_ui_ammo_count
‪function update_ui_ammo_count(localClientNum, missiles_loaded)
Definition: _ai_tank.csc:97
‪update_ui_model_ammo_count
‪function update_ui_model_ammo_count(localClientNum, missiles_loaded)
Definition: _ai_tank.csc:105
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪AI_TANK_MISSLE_COUNT_AFTER_RELOAD
‪#define AI_TANK_MISSLE_COUNT_AFTER_RELOAD
Definition: _killstreaks.gsh:18
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪add_vehicletype_callback
‪function add_vehicletype_callback(vehicletype, callback)
Definition: vehicle_shared.csc:77
‪waittill_dobj
‪function waittill_dobj(localClientNum)
Definition: util_shared.csc:1117
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪get_script_bundle
‪function get_script_bundle(str_type, str_name)
Definition: struct.csc:45
‪server_wait
‪function server_wait(localClientNum, seconds, waitBetweenChecks, level_endon)
Definition: util_shared.csc:1125
‪WAIT_CLIENT_FRAME
‪#define WAIT_CLIENT_FRAME
Definition: shared.gsh:266
‪__init__
‪function __init__()
Definition: _ai_tank.csc:25