1 #using scripts\codescripts\struct;
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\util_shared;
6 #using scripts\shared\vehicle_shared;
8 #insert scripts\shared\shared.gsh;
9 #insert scripts\shared\version.gsh;
11 #using scripts\mp\_util;
12 #using scripts\mp\_vehicle;
19 #define UAV_REMOTE_MAX_PAST_RANGE 200
20 #define UAV_REMOTE_MIN_HELI_PROXIMITY 150
21 #define UAV_REMOTE_MAX_HELI_PROXIMITY 300
23 #precache( "client_fx", "killstreaks/fx_drgnfire_light_red_3p" );
24 #precache( "client_fx", "killstreaks/fx_drgnfire_light_green_3p" );
25 #precache( "client_fx", "killstreaks/fx_drgnfire_light_green_1p" );
38 level._effect[
"qrdrone_enemy_light"] =
"killstreaks/fx_drgnfire_light_red_3p";
39 level._effect[
"qrdrone_friendly_light"] =
"killstreaks/fx_drgnfire_light_green_3p";
40 level._effect[
"qrdrone_viewmodel_light"] =
"killstreaks/fx_drgnfire_light_green_1p";
68 function stateChange( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
70 self endon(
"entityshutdown");
82 self notify(
"restart_fx" );
84 /#println(
"Restart QRDrone FX: stage " + blinkStage );#/
95 self.fx_interval = 1.0;
101 self.fx_interval = .133;
107 self notify(
"stopfx" );
108 self notify(
"fx_death" );
122 self endon(
"entityshutdown");
135 if (
self IsLocalClientDriver( localClientNum ) )
137 fx_handle = playfxontag( localClientNum, level._effect[
"qrdrone_viewmodel_light"],
self,
"tag_body" );
141 fx_handle = playfxontag( localClientNum, level._effect[
"qrdrone_friendly_light"],
self,
"tag_body" );
145 fx_handle = playfxontag( localClientNum, level._effect[
"qrdrone_enemy_light"],
self,
"tag_body" );
148 self thread
cleanupFX( localClientNum, fx_handle );
166 self endon(
"entityshutdown" );
167 self endon(
"restart_fx" );
168 self endon(
"fx_death" );
170 if ( !isdefined(
self.interval ) )
177 self PlaySound( localClientNum, soundAlias );
182 self notify(
"stopfx" );
185 self.interval = (
self.interval / 1.17);
187 if (
self.interval < .1)
201 stopfx( localClientNum, handle );
204 function start_blink( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
209 self notify(
"blink");
213 function final_blink( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
218 self.interval = .133;
221 function out_of_range_update( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
223 model = GetUIModel( GetUIModelForController( localClientNum ),
"vehicle.outOfRange" );
224 if ( isdefined( model ) )
226 SetUIModelValue( model, newVal );
232 self endon(
"entityshutdown" );
233 self endon(
"stopfx" );
235 level endon(
"demo_jump" );
236 level endon(
"player_switch" );
240 if ( !isdefined(
self.interval ) )
242 self.interval = interval;
247 self PlaySound( localClientNum, alias );
252 self notify(
"stopfx" );
255 self.interval = (
self.interval / 1.17);
257 if (
self.interval < .1)
266 self endon(
"entityshutdown");
269 self notify(
"stopfx" );
275 if ( isdefined(
self.blinkStartTime ) &&
self.blinkStartTime <= level.serverTime )
290 self endon(
"entityshutdown");
291 level endon(
"demo_jump" );
292 level endon(
"player_switch" );
293 level endon(
"killcam_begin" );
295 self waittill(
"blink");
297 if ( !isdefined(
self.blinkStartTime ) )
299 self.blinkStartTime = level.serverTime;
302 if (
self IsLocalClientDriver( localClientNum ) )
304 self thread
loop_local_sound( localClientNum,
"wpn_qr_alert", 1, level._effect[
"qrdrone_viewmodel_light"] );
308 self thread
loop_local_sound( localClientNum,
"wpn_qr_alert", 1, level._effect[
"qrdrone_friendly_light"] );
312 self thread
loop_local_sound( localClientNum,
"wpn_qr_alert", 1, level._effect[
"qrdrone_enemy_light"] );
319 self endon(
"entityshutdown" );
323 self waittill(
"veh_collision", hip, hitn, hit_intensity );
325 driver_local_client =
self GetLocalClientDriver();
327 if( isdefined( driver_local_client ) )
330 player = getlocalplayer( driver_local_client );
332 if( isdefined( player ) )
335 if( hit_intensity > 15 )
337 player PlayRumbleOnEntity( driver_local_client,
"damage_heavy" );
341 player PlayRumbleOnEntity( driver_local_client,
"damage_light" );
350 self endon(
"entityshutdown" );
354 self waittill(
"veh_engine_stutter" );
355 if (
self IsLocalClientDriver( localClientNum ) )
357 player = getlocalplayer( localClientNum );
359 if( isdefined( player ) )
361 player PlayRumbleOnEntity( localClientNum,
"rcbomb_engine_stutter" );
369 if ( !isdefined( level.airsupportHeightScale ) )
370 level.airsupportHeightScale = 1;
372 airsupport_height =
struct::get(
"air_support_height",
"targetname");
373 if ( isdefined(airsupport_height) )
375 planeFlyHeight = airsupport_height.origin[2];
380 PrintLn(
"WARNING: Missing air_support_height entity in the map. Using default height.");
383 planeFlyHeight = 850;
385 if ( isdefined( level.airsupportHeightScale ) )
387 level.airsupportHeightScale = GetDvarInt(
"scr_airsupportHeightScale", level.airsupportHeightScale );
388 planeFlyHeight *= GetDvarInt(
"scr_airsupportHeightScale", level.airsupportHeightScale );
391 if ( isdefined( level.forceAirsupportMapHeight ) )
393 planeFlyHeight += level.forceAirsupportMapHeight;
397 return planeFlyHeight;
402 self endon (
"entityshutdown" );
404 qrdrone_height =
struct::get(
"qrdrone_height",
"targetname");
405 if ( isdefined(qrdrone_height) )
407 self.maxHeight = qrdrone_height.origin[2];
414 self.maxDistance = 12800;
418 self.minHeight = level.mapCenter[2] - 800;
421 inRangePos =
self.origin;
423 soundent =
spawn (0,
self.origin,
"script_origin" );
424 soundent linkto(
self);
438 if ( isdefined(
self.heliInProximity ) )
440 dist = distance(
self.origin,
self.heliInProximity.origin );
445 dist = distance(
self.origin, inRangePos );
454 sid = soundent playloopsound (
"veh_qrdrone_static_lp", .2 );
465 inRangePos =
self.origin;
473 if (
self.origin[2] <
self.maxHeight &&
self.origin[2] >
self.minHeight )
475 if (
self isInsideHeightLock() )
486 self endon (
"entityshutdown" );
490 if ( staticAlpha <= 0 )
493 sndent StopAllLoopSounds (.5);
500 setsoundvolumerate( sid, .6 );
501 setsoundvolume( sid, staticAlpha );
512 self waittill (
"entityshutdown" );
513 sndent StopAllLoopSounds (.1);