#using scripts\codescripts\struct; #using scripts\shared\callbacks_shared; #using scripts\shared\clientfield_shared; #using scripts\shared\system_shared; #using scripts\shared\util_shared; #using scripts\shared\vehicle_shared; #using scripts\shared\visionset_mgr_shared; #using scripts\mp\_util; #using scripts\mp\_vehicle; #precache( "client_fx", "killstreaks/fx_agr_emp_stun" ); #using_animtree ( "mp_vehicles" ); #namespace ai_tank; function autoexec __init__sytem__() { system::register("ai_tank",&__init__,undefined,undefined); } function __init__() { bundle = struct::get_script_bundle( "killstreak", "killstreak_ai_tank_drop" ); level.aiTankKillstreakBundle = bundle; level._ai_tank_fx = []; level._ai_tank_fx[ "light_green" ] = "killstreaks/fx_agr_vlight_eye_grn"; level._ai_tank_fx[ "light_red" ] = "killstreaks/fx_agr_vlight_eye_red"; level._ai_tank_fx[ "stun" ] = "killstreaks/fx_agr_emp_stun"; clientfield::register( "vehicle", "ai_tank_death", 1, 1, "int",&death, !true, !true ); clientfield::register( "vehicle", "ai_tank_missile_fire", 1, 2, "int",&missile_fire, !true, !true ); clientfield::register( "vehicle", "ai_tank_stun", 1, 1, "int", &tank_stun, !true, !true ); clientfield::register( "toplayer", "ai_tank_update_hud", 1, 1, "counter", &update_hud, !true, !true ); vehicle::add_vehicletype_callback( "ai_tank_drone_mp", &spawned ); vehicle::add_vehicletype_callback( "spawner_bo3_ai_tank_mp", &spawned ); vehicle::add_vehicletype_callback( "spawner_bo3_ai_tank_mp_player", &spawned ); visionset_mgr::register_visionset_info( "agr_visionset", 1, 16, undefined, "mp_vehicles_agr" ); } function spawned( localClientNum, killstreak_duration ) { self thread play_driving_rumble( localClientNum ); self.killstreakBundle = level.aiTankKillstreakBundle; } function missile_fire( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { self endon( "entityshutdown" ); self util::waittill_dobj( localClientNum ); if ( self HasAnimTree() == false ) self UseAnimTree( #animtree ); missiles_loaded = newVal; if ( newVal == 2 ) { self SetAnimRestart( %o_drone_tank_missile1_fire, 1.0, 0.0, 0.5 ); } else if ( newVal == 1 ) { self SetAnimRestart( %o_drone_tank_missile2_fire, 1.0, 0.0, 0.5 ); } else if ( newVal == 0 ) { self SetAnimRestart( %o_drone_tank_missile3_fire, 1.0, 0.0, 0.5 ); } else if ( newVal == 3 ) { self SetAnimRestart( %o_drone_tank_missile_full_reload, 1.0, 0.0, 1.0 ); } if ( missiles_loaded <= ( 3 ) ) update_ui_ammo_count( localClientNum, missiles_loaded ); } function update_hud( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) // self == player { self endon( "disconnect" ); {wait(.016);}; vehicle = GetPlayerVehicle( self ); if ( isdefined( vehicle ) ) { self update_ui_model_ammo_count( localClientNum, vehicle clientfield::get( "ai_tank_missile_fire" ) ); } } function update_ui_ammo_count( localClientNum, missiles_loaded ) // self == vehicle { if ( self isLocalClientDriver( localClientNum ) || IsSpectating( localClientNum ) ) { update_ui_model_ammo_count( localclientnum, missiles_loaded ); } } function update_ui_model_ammo_count( localClientNum, missiles_loaded ) { ammo_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.ammo" ); if ( isdefined( ammo_ui_data_model ) ) SetUIModelValue( ammo_ui_data_model, missiles_loaded ); // /# IPrintLnBold( "Missile Count: " + missiles_loaded ); #/ } function tank_stun( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { self endon( "entityshutdown" ); self endon( "death" ); if ( newVal ) { self notify( "light_disable" ); self stop_stun_fx( localClientNum ); self start_stun_fx( localClientNum ); } else { self stop_stun_fx( localClientNum ); } } function death( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) { player = GetLocalPlayer( localClientNum ); if ( !isdefined( player ) ) { return; } if ( player GetInKillcam( localClientNum ) ) { return; } if ( newVal ) { self stop_stun_fx( localClientNum ); self notify( "light_disable" ); } } function start_stun_fx( localClientNum ) { self.stun_fx = PlayFxOnTag( localClientNum, level._ai_tank_fx[ "stun" ], self, "tag_origin" ); PlaySound( localClientNum, "veh_talon_shutdown", self.origin ); } function stop_stun_fx( localClientNum ) { if ( isdefined( self.stun_fx ) ) { StopFx( localClientNum, self.stun_fx ); self.stun_fx = undefined; } } function play_driving_rumble( localClientNum ) { self notify( "driving_rumble" ); self endon( "entityshutdown" ); self endon( "death" ); self endon( "driving_rumble" ); for ( ;; ) { if ( IsInVehicle( localClientNum, self ) ) { speed = self GetSpeed(); if ( speed >= 40 || speed <= -40 ) { player = GetLocalPlayer( localClientNum ); if ( isdefined( player ) ) { player Earthquake( 0.1, 0.1, self.origin, 200 ); } } } util::server_wait( localClientNum, 0.05 ); } }