369 lines
7.7 KiB
Plaintext
369 lines
7.7 KiB
Plaintext
|
#include maps\_utility;
|
||
|
|
||
|
main()
|
||
|
{
|
||
|
setDvarIfUninitialized( "debug_vehiclegod", "off" );
|
||
|
setDvarIfUninitialized( "debug_vehicleplayerhealth", "off" );
|
||
|
setDvarIfUninitialized( "player_vehicle_dismountable", "off" );
|
||
|
|
||
|
precacheShader( "tank_shell" );
|
||
|
level.playeronvehicle = false;
|
||
|
}
|
||
|
|
||
|
vehicle_wait( startinvehicle )
|
||
|
{
|
||
|
if ( !isdefined( startinvehicle ) )
|
||
|
startinvehicle = false;
|
||
|
else if ( startinvehicle )
|
||
|
{
|
||
|
if ( getdvar( "player_vehicle_dismountable" ) == "off" )
|
||
|
self makeUnusable();
|
||
|
}
|
||
|
self endon( "death" );
|
||
|
self endon( "stop_vehicle_wait" );
|
||
|
while ( self.health > 0 )
|
||
|
{
|
||
|
if ( !( startinvehicle ) )
|
||
|
self waittill( "trigger" );
|
||
|
else
|
||
|
{
|
||
|
startinvehicle = false;
|
||
|
self useby( level.player );
|
||
|
}
|
||
|
owner = self getvehicleowner();
|
||
|
if ( isdefined( owner ) && isplayer( owner ) )
|
||
|
self thread vehicle_enter();
|
||
|
else
|
||
|
self thread vehicle_exit();
|
||
|
if ( startinvehicle )
|
||
|
break;
|
||
|
wait 0.05;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
vehicle_exit()
|
||
|
{
|
||
|
level.playeronvehicle = false;
|
||
|
level.playervehicle = level.playervehiclenone;
|
||
|
level notify( "player exited vehicle" );
|
||
|
|
||
|
|
||
|
if ( isdefined( level.player.oldthreatbias ) )
|
||
|
{
|
||
|
level.player.threatbias = level.player.oldthreatbias;
|
||
|
level.player.oldthreatbias = undefined;
|
||
|
}
|
||
|
// level.player.ignoreme = false;
|
||
|
if ( isdefined( level.vehicleHUD ) )
|
||
|
level.vehicleHUD destroy();
|
||
|
if ( isdefined( level.vehicleHUD2 ) )
|
||
|
level.vehicleHUD2 destroy();
|
||
|
if ( isdefined( level.VehicleFireIcon ) )
|
||
|
level.VehicleFireIcon destroy();
|
||
|
}
|
||
|
|
||
|
vehicle_enter()
|
||
|
{
|
||
|
level.playeronvehicle = true;
|
||
|
level.playervehicle = self;
|
||
|
self thread vehicle_ridehandle();
|
||
|
|
||
|
// probably rethink this stuff
|
||
|
// self thread Protect_Player();
|
||
|
}
|
||
|
|
||
|
setup_vehicle_tank()
|
||
|
{
|
||
|
self vehicle_giveHealth();
|
||
|
}
|
||
|
|
||
|
setup_vehicle_other()
|
||
|
{
|
||
|
self vehicle_giveHealth();
|
||
|
}
|
||
|
|
||
|
vehicle_giveHealth()
|
||
|
{
|
||
|
//GIVE THE VEHICLE HEALTH BASED ON SKILL LEVEL
|
||
|
skill = getdifficulty();
|
||
|
|
||
|
if ( skill == ( "easy" ) )
|
||
|
self.health = 3000;
|
||
|
else if ( skill == ( "medium" ) )
|
||
|
self.health = 2500;
|
||
|
else if ( skill == ( "hard" ) )
|
||
|
self.health = 2000;
|
||
|
else if ( skill == ( "fu" ) )
|
||
|
self.health = 1300;
|
||
|
else
|
||
|
self.health = 2000;
|
||
|
|
||
|
if ( isdefined( self.healthbuffer ) )
|
||
|
{
|
||
|
self.health += self.healthbuffer; // restore healthbuffer
|
||
|
self.currenthealth = self.health;
|
||
|
self.maxhealth = self.health;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Protect_Player()
|
||
|
{
|
||
|
level endon( "player exited vehicle" );
|
||
|
self endon( "death" );
|
||
|
playerCurrentHealth = level.player.health;
|
||
|
/*
|
||
|
if(self.vehicletype == "flak88" || self.vehicletype == "flak88_forward")
|
||
|
{
|
||
|
if(!isdefined(level.player.oldthreatbias))
|
||
|
{
|
||
|
level.player.oldthreatbias = level.player.threatbias;
|
||
|
// level.player.ignoreme = true;
|
||
|
}
|
||
|
level.player.threatbias = -3000;
|
||
|
|
||
|
}
|
||
|
*/
|
||
|
while ( isalive( level.player ) )
|
||
|
{
|
||
|
level.player waittill( "damage", ammount );
|
||
|
/*
|
||
|
if(self.vehicletype != "flak88" && self.vehicletype != "flak88_forward")
|
||
|
{
|
||
|
if(self.health <= 0)
|
||
|
level.player kill ( (0,0,0) );
|
||
|
else
|
||
|
level.player.health = playerCurrentHealth;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
*/
|
||
|
if ( self.health <= 0 )
|
||
|
level.player kill( ( 0, 0, 0 ) );
|
||
|
level.player.health += int( ammount * .2 );
|
||
|
// }
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//handles varius Hudelements and health regeneration
|
||
|
vehicle_ridehandle()
|
||
|
{
|
||
|
level endon( "player exited vehicle" );
|
||
|
self endon( "no_regen_health" );
|
||
|
self endon( "death" );
|
||
|
|
||
|
// commenting out sound bit as it is too vehicle specific, these things should be defined in vehicle script not here
|
||
|
// self thread vehicle_reloadsound();
|
||
|
// self thread vehicle_hud_tank_fireicon();
|
||
|
self thread vehicle_kill_player_ondeath();
|
||
|
self.maximumhealth = self.health;
|
||
|
|
||
|
switch( getdifficulty() )
|
||
|
{
|
||
|
case "gimp":
|
||
|
health_regeninc = 100;
|
||
|
health_regentimer = 2700;
|
||
|
break;
|
||
|
case "easy":
|
||
|
health_regeninc = 75;
|
||
|
health_regentimer = 2700;
|
||
|
break;
|
||
|
case "medium":
|
||
|
health_regeninc = 50;
|
||
|
health_regentimer = 2700;
|
||
|
break;
|
||
|
case "hard":
|
||
|
health_regeninc = 30;
|
||
|
health_regentimer = 3700;
|
||
|
break;
|
||
|
case "fu":
|
||
|
health_regeninc = 20;
|
||
|
health_regentimer = 4700;
|
||
|
break;
|
||
|
default:
|
||
|
health_regeninc = 50;
|
||
|
health_regentimer = 2700;
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
if ( self.vehicletype == "crusader_player" )
|
||
|
{
|
||
|
self setmodel( "vehicle_crusader2_viewmodel" );
|
||
|
}
|
||
|
|
||
|
regentimer = gettime();
|
||
|
if ( getdvar( "debug_vehiclegod" ) != "off" )
|
||
|
{
|
||
|
while ( 1 )
|
||
|
{
|
||
|
self waittill( "damage" );
|
||
|
self.health = self.maxhealth;
|
||
|
}
|
||
|
}
|
||
|
thread vehicle_damageset();
|
||
|
regeninctimer = gettime();
|
||
|
while ( 1 )
|
||
|
{
|
||
|
|
||
|
if ( self.damaged )
|
||
|
{
|
||
|
if ( getdvar( "debug_vehicleplayerhealth" ) != "off" )
|
||
|
iprintlnbold( "playervehicles health: ", self.health - self.healthbuffer );
|
||
|
self.damaged = false;
|
||
|
regentimer = gettime() + health_regentimer;
|
||
|
}
|
||
|
|
||
|
time = gettime();
|
||
|
if ( self.health < self.maximumhealth && time > regentimer && time > regeninctimer )
|
||
|
{
|
||
|
if ( self.health + health_regeninc > self.maximumhealth )
|
||
|
self.health = self.maximumhealth;
|
||
|
else
|
||
|
self.health += health_regeninc;
|
||
|
regeninctimer = gettime() + 250;
|
||
|
if ( getdvar( "debug_vehicleplayerhealth" ) != "off" )
|
||
|
iprintlnbold( "playervehicles health: ", self.health - self.healthbuffer );
|
||
|
}
|
||
|
|
||
|
wait .05;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
vehicle_kill_player_ondeath()
|
||
|
{
|
||
|
level endon( "player exited vehicle" );
|
||
|
self waittill( "death" );
|
||
|
level.player enablehealthshield( false );
|
||
|
while ( 1 )
|
||
|
{
|
||
|
level.player kill();
|
||
|
wait .1;
|
||
|
}
|
||
|
wait .5;
|
||
|
level.player enablehealthshield( true );
|
||
|
}
|
||
|
|
||
|
vehicle_damageset()
|
||
|
{
|
||
|
self.damaged = false;
|
||
|
self endon( "death" );
|
||
|
while ( 1 )
|
||
|
{
|
||
|
self waittill( "damage", ammount );
|
||
|
println( "damage ", ammount );
|
||
|
self.damaged = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
vehicle_reloadsound()
|
||
|
{
|
||
|
while ( 1 )
|
||
|
{
|
||
|
self waittill( "turret_fire" );
|
||
|
wait .5;
|
||
|
self playsound( "tank_reload" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
vehicle_hud_tank_fireicon()
|
||
|
{
|
||
|
if ( getdvar( "player_vehicle_dismountable" ) != "off" )
|
||
|
return;
|
||
|
level endon( "player exited vehicle" );
|
||
|
level.player endon( "death" );
|
||
|
self endon( "death" );
|
||
|
if ( isdefined( level.VehicleFireIcon ) )
|
||
|
level.VehicleFireIcon destroy();
|
||
|
|
||
|
level.VehicleFireIcon = newHudElem();
|
||
|
level.VehicleFireIcon.x = -32;
|
||
|
level.VehicleFireIcon.y = -64;
|
||
|
level.VehicleFireIcon.alignX = "center";
|
||
|
level.VehicleFireIcon.alignY = "middle";
|
||
|
level.VehicleFireIcon.horzAlign = "right";
|
||
|
level.VehicleFireIcon.vertAlign = "bottom";
|
||
|
level.VehicleFireIcon setShader( "tank_shell", 64, 64 );
|
||
|
|
||
|
icon = true;
|
||
|
level.VehicleFireIcon.alpha = icon;
|
||
|
while ( 1 )
|
||
|
{
|
||
|
if ( icon )
|
||
|
{
|
||
|
if ( !self isTurretReady() )
|
||
|
{
|
||
|
icon = false;
|
||
|
level.VehicleFireIcon.alpha = icon;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( self isTurretReady() )
|
||
|
{
|
||
|
icon = true;
|
||
|
level.VehicleFireIcon.alpha = icon;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
wait .05;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// sarah - remove this when the SP health overlay is moved back to code.
|
||
|
healthOverlay()
|
||
|
{
|
||
|
self endon( "death" );
|
||
|
overlay = newHudElem();
|
||
|
overlay.x = 0;
|
||
|
overlay.y = 0;
|
||
|
overlay setshader( "splatter_alt_sp", 640, 480 );
|
||
|
overlay.alignX = "left";
|
||
|
overlay.alignY = "top";
|
||
|
overlay.horzAlign = "fullscreen";
|
||
|
overlay.vertAlign = "fullscreen";
|
||
|
overlay.alpha = 0;
|
||
|
|
||
|
// wait (15000);
|
||
|
maxHealth = self.health - self.healthbuffer;
|
||
|
hurt = false;
|
||
|
bonus = 0.3;
|
||
|
for ( ;; )
|
||
|
{
|
||
|
healthRatio = ( self.health - self.healthbuffer ) / maxHealth;
|
||
|
pulseTime = 0.5 + ( 0.5 * healthRatio );
|
||
|
if ( healthRatio < 0.75 || hurt )
|
||
|
{
|
||
|
if ( !hurt )
|
||
|
{
|
||
|
hurt = true;
|
||
|
}
|
||
|
|
||
|
fullAlpha = ( 1.0 - healthRatio ) + bonus;
|
||
|
|
||
|
overlay fadeOverTime( 0.05 );
|
||
|
overlay.alpha = fullAlpha;
|
||
|
wait( 0.1 );
|
||
|
overlay fadeOverTime( pulseTime * 0.2 );
|
||
|
overlay.alpha = fullAlpha * 0.5;
|
||
|
wait( pulseTime * 0.2 );
|
||
|
overlay fadeOverTime( pulseTime * 0.3 );
|
||
|
overlay.alpha = fullAlpha * 0.3;
|
||
|
wait( pulseTime * 0.3 );
|
||
|
|
||
|
|
||
|
healthRatio = ( self.health - self.healthbuffer ) / maxHealth;
|
||
|
pulseTime = 0.3 + ( 0.7 * healthRatio );
|
||
|
if ( healthRatio > 0.9 )
|
||
|
{
|
||
|
hurt = false;
|
||
|
overlay fadeOverTime( 0.5 );
|
||
|
overlay.alpha = 0;
|
||
|
wait( pulseTime * 0.5 ) - 0.1;
|
||
|
}
|
||
|
else
|
||
|
wait( pulseTime * 0.5 ) - 0.1;
|
||
|
}
|
||
|
else
|
||
|
wait( 0.05 );
|
||
|
}
|
||
|
}
|