1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\flagsys_shared;
6 #using scripts\shared\abilities\_ability_player;
7 #using scripts\shared\abilities\_ability_power;
8 #using scripts\shared\abilities\_ability_util;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
12 #insert scripts\shared\abilities\_ability_util.gsh;
14 #using scripts\shared\system_shared;
34 return "gadget_multirocket";
39 return level.weaponGadgetMultirocket;
88 self notify(
"gadget_multirocket_off" );
99 if ( IsDefined( status ) )
101 statusStr =
" ^3" + status;
104 if ( IsDefined( time ) )
106 timeStr =
" ^3" +
", time: " + time;
109 if ( GetDvarInt(
"scr_cpower_debug_prints" ) > 0 )
110 self IPrintlnBold(
"Gadget Multirocket Flicker:" + statusStr + timeStr );
115 self endon(
"disconnect" );
127 self._gadget_multirocket_flicker_timeout = time + eventTime;
133 currentTime = GetTime();
135 if ( currentTime >
self._gadget_multirocket_flicker_timeout )
137 self._gadget_multirocket_flicker_timeout = undefined;
148 self endon(
"death" );
149 self endon(
"weapon_fired" );
150 self endon(
"weapon_switch_started" );
152 n_range =
self._gadgets_player.multirocketRange;
153 n_max =
self._gadgets_player.multirocketTargetNumber;
154 n_targetRadius =
self._gadgets_player.multirocketTargetRadius;
155 self.n_targets_marked = 0;
161 a_ai_enemies = GetAITeamArray(
"axis" );
163 if ( IsDefined( a_ai_enemies ) )
165 a_ai_targets = ArraySort( a_ai_enemies,
self.origin,
true, a_ai_enemies.size, n_range );
167 for ( i = 0; i < a_ai_targets.size; i++ )
169 if ( IsAlive( a_ai_targets[i] ) )
171 if ( a_ai_targets[i] SightConeTrace(
self GetEye(),
self ) && Target_IsInCircle( a_ai_targets[i],
self, 65, n_targetRadius ) )
173 if ( !IsDefined( a_ai_targets[i].targetFXEnt ) && (
self.n_targets_marked < n_max ) )
175 a_ai_targets[i].targetFXEnt =
spawn(
"script_model", a_ai_targets[i].origin + (0,0,80) );
176 a_ai_targets[i].targetFXEnt SetModel(
"p7_proto_stealth_diamond" );
177 a_ai_targets[i].targetFXEnt linkto( a_ai_targets[i] );
179 self.n_targets_marked++;
181 self playsoundtoplayer(
"wpn_mrocket_ui_tag",
self );
184 wait
self._gadgets_player.multirocketAcquisitionTime;
187 else if ( IsDefined( a_ai_targets[i].targetFXEnt ) )
189 a_ai_targets[i].targetFXEnt Delete();
191 self.n_targets_marked--;
193 if (
self.n_targets_marked < 1 )
216 self endon(
"death" );
220 self waittill(
"weapon_fired", weapon );
233 self endon(
"death" );
240 a_ai_enemies = GetAITeamArray(
"axis" );
243 foreach( ai_enemy
in a_ai_enemies )
245 if ( IsAlive( ai_enemy ) && IsDefined( ai_enemy.targetFXEnt ) )
247 ArrayInsert( a_ai_targets, ai_enemy, 0 );
251 for ( i = 0; i < a_ai_targets.size; i++ )
253 if ( IsAlive( a_ai_targets[i] ) )
255 if ( a_ai_targets[i].origin[2] >
self.origin[2] + 72 )
257 v_target = a_ai_targets[i].origin + (0,0,50);
260 v_target = a_ai_targets[i] GetEye();
262 v_angles = anglestoforward(
self getPlayerAngles());
263 v_vec = vectorNormalize(v_angles);
265 v_launch_spot = (
self.origin + (0, 0, 72) ) + (v_angles * 50) ;
267 e_rocket = MagicBullet(
"smaw_gadget_multirocket", v_launch_spot, v_target,
self );
269 if ( IsDefined( e_rocket ) )
278 wait
self._gadgets_player.multirocketFireInterval;
293 self playsound(
"wpn_mrocket_fire" );
300 self.n_targets_marked = 0;
302 a_ai_targets = GetAITeamArray(
"axis" );
304 foreach( ai_target
in a_ai_targets )
306 if ( IsDefined( ai_target.targetFXEnt ) )
308 ai_target.targetFXEnt Delete();
315 if ( IsDefined(
self.targetFXEnt ) )
317 self.targetFXEnt Delete();
323 if ( !IsDefined( level.hud_gadget ) )
325 level.hud_gadget = NewHudElem();
326 level.hud_gadget.alignX =
"right";
327 level.hud_gadget.alignY =
"middle";
328 level.hud_gadget.x = 660;
329 level.hud_gadget.y = 320;
330 level.hud_gadget.fontscale = 2.0;
331 level.hud_gadget SetText(
"RT: FIRE" );
337 if ( IsDefined( level.hud_gadget ) )
339 level.hud_gadget Destroy();
345 self endon(
"death" );
346 ai_target endon(
"death" );
350 while( Distance2DSquared(
self.origin, ai_target geteye() ) > n_dist * n_dist )