video above shows my change in helicopters. now i am using a helicopter like the one in the mission "airlift" with the turret, but cant seem to get the script to properly get the hud to update. please help this is the stuff im using( all of it came from the airlift.gsc ):
Code:
#include maps\_anim;
#include maps\_utility;
#include maps\_hud_util;
#include common_scripts\utility;
seaknight_ main()
{
if( ! isdefined( self ) )
return;
self handle_ inits();
}
handle_ inits()
{
self thread seaknight_ turret_ anim_ init();
self thread seaknight_ anims();
self. animname = "seaknight" ;
self assign_ animtree();
// self setmaxpitchroll( 5, 10 );
// self sethoverparams( 32, 10, 3 );
}
seaknight_ turret_ test()
{
while( ! isdefined( level. cobraWingman ) )
wait ( 0. 05);
eTarget = level. cobraWingman;
iFireTime = weaponfiretime( "seaknight_mark19" );
while ( true )
{
targetLoc = eTarget. origin;
self setTurretTargetVec( targetLoc);
fRand = ( randomfloatrange( 2, 3));
self waittill_ notify_ or_ timeout( "turret_rotate_stopped" , fRand );
self fireWeapon();
wait( 2 );
}
}
seaknight_ turret_ think()
{
// self == > the player seaknight
level. playerInSeaknight = true;
/*-----------------------
SETUP TURRET
-------------------------*/
sTag = "tag_player" ;
orgOffset = ( 15, 0, - 10 );
angOffset = ( 0, 0, 0 );
level. TempTurretOrg = spawn( "script_origin" , ( 0, 0, 0 ) );
level. TempTurretOrg. angles = self. angles;
level. TempTurretOrg linkto( self, sTag, orgOffset, angOffset );
// seaknight_player_mount_gun();
}
seaknight_ fire_ turret()
{
level endon( "player_off_turret" );
iFireTime = weaponfiretime( "seaknight_mark19" );
while ( true )
{
self waittill( "turret_fire" );
self fireWeapon();
self thread seaknight_ turret_ anim();
earthquake( 0. 25, . 13, level. player. origin, 200);
if ( self. turretOverheat == true)
{
self. turret_ heat_ status += int( self. turret_ heat_ max / self. turret_ heat_ maxshots);
thread seaknight_ overheat_ overheated( self );
thread seaknight_ overheat_ hud_ update();
}
}
}
seaknight_ overheat_ enable()
{
self. turret_ heat_ status = 1;
self. turretOverheat = true;
thread seaknight_ overheat_ hut();
}
seaknight_ overheat_ disable()
{
self. turretOverheat = false;
level notify ( "disable_overheat" );
level. savehere = undefined;
waittillframeend;
if ( isdefined( level. overheat_ bg))
level. overheat_ bg destroy();
if ( isdefined( level. overheat_ status))
level. overheat_ status destroy();
if ( isdefined( level. overheat_ status2))
level. overheat_ status2 destroy();
if ( isdefined( level. overheat_ flashing))
level. overheat_ flashing destroy();
}
seaknight_ overheat_ overheated( eVehicle )
{
level endon ( "disable_overheat" );
if ( self. turret_ heat_ status <= self. turret_ heat_ max)
return;
level. savehere = false;
level. player thread play_ sound_ on_ entity ( "smokegrenade_ explode_ default ");
eVehicle thread seaknight_ overheat_ fx();
thread seaknight_ overheat_ fx();
level. overheat_ flashing. alpha = 1;
level. overheat_ status. alpha = 0;
level. overheat_ status2. alpha = 0;
level notify ( "stop_ overheat_ drain ");
self. turret_ heat_ status = self. turret_ heat_ max;
thread seaknight_ overheat_ hud_ update();
for ( i= 0; i< 4; i++)
{
level. overheat_ flashing fadeovertime( 0. 5);
level. overheat_ flashing. alpha = 0. 5;
wait 0. 5;
level. overheat_ flashing fadeovertime( 0. 5);
level. overheat_ flashing. alpha = 1. 0;
}
level. overheat_ flashing fadeovertime( 0. 5);
level. overheat_ flashing. alpha = 0. 0;
level. overheat_ status. alpha = 1;
wait 0. 5;
thread seaknight_ overheat_ hud_ drain();
wait 2;
level. savehere = undefined;
eVehicle notify( "stop_ overheatfx ");
}
seaknight_ overheat_ fx()
{
level endon ( "disable_overheat" );
self endon ( "stop_ overheatfx ");
for (;;)
{
playfxOnTag( getfx( "turret_ overheat_ haze " ), self, "tag_ flash ");
playfxOnTag( getfx( "turret_ overheat_ smoke " ), self, "tag_ flash ");
wait . 05;
}
}
seaknight_ overheat_ hud_ update()
{
level endon ( "disable_overheat" );
level notify ( "stop_ overheat_ drain ");
if ( ( self. turret_ heat_ status > 1) && ( isdefined( level. overheat_ status. alpha ) ) )
level. overheat_ status. alpha = 1;
if ( isdefined( level. overheat_ status2))
{
level. overheat_ status2. alpha = 1;
level. overheat_ status2 setShader( "white" , 10, int( self. turret_ heat_ status));
level. overheat_ status scaleovertime( 0. 05, 10, int( self. turret_ heat_ status));
}
// set color of bar
seaknight_ overheat_ setColor( self. turret_ heat_ status);
wait 0. 05;
if ( isdefined( level. overheat_ status2))
level. overheat_ status2. alpha = 0;
if ( self. turret_ heat_ status < self. turret_ heat_ max)
thread seaknight_ overheat_ hud_ drain();
}
seaknight_ overheat_ setColor( value, fadeTime)
{
level endon ( "disable_overheat" );
// define what colors to use
color_ cold = [];
color_ cold[ 0] = 1. 0;
color_ cold[ 1] = 0. 9;
color_ cold[ 2] = 0. 0;
color_ warm = [];
color_ warm[ 0] = 1. 0;
color_ warm[ 1] = 0. 5;
color_ warm[ 2] = 0. 0;
color_ hot = [];
color_ hot[ 0] = 0. 9;
color_ hot[ 1] = 0. 16;
color_ hot[ 2] = 0. 0;
// default color
SetValue = [];
SetValue[ 0] = color_ cold[ 0];
SetValue[ 1] = color_ cold[ 1];
SetValue[ 2] = color_ cold[ 2];
// define where the non blend points are
cold = 0;
warm = ( self. turret_ heat_ max / 2);
hot = self. turret_ heat_ max;
iPercentage = undefined;
difference = undefined;
increment = undefined;
if ( ( value > cold) && ( value <= warm) )
{
iPercentage = int( value * ( 100 / warm));
for ( colorIndex = 0 ; colorIndex < SetValue. size ; colorIndex++ )
{
difference = ( color_ warm[ colorIndex] - color_ cold[ colorIndex]);
increment = ( difference / 100);
SetValue[ colorIndex] = color_ cold[ colorIndex] + ( increment * iPercentage);
}
}
else if ( ( value > warm) && ( value <= hot) )
{
iPercentage = int( ( value - warm) * ( 100 / ( hot - warm) ) );
for ( colorIndex = 0 ; colorIndex < SetValue. size ; colorIndex++ )
{
difference = ( color_ hot[ colorIndex] - color_ warm[ colorIndex]);
increment = ( difference / 100);
SetValue[ colorIndex] = color_ warm[ colorIndex] + ( increment * iPercentage);
}
}
if ( isdefined( fadeTime))
level. overheat_ status fadeOverTime( fadeTime);
level. overheat_ status. color = ( SetValue[ 0], SetValue[ 1], SetValue[ 2]);
level. overheat_ status2. color = ( SetValue[ 0], SetValue[ 1], SetValue[ 2]);
}
seaknight_ overheat_ hud_ drain()
{
level endon ( "disable_overheat" );
level endon ( "stop_ overheat_ drain ");
waitTime = 1. 0;
for (;;)
{
if ( ( self. turret_ heat_ status > 1) && ( isdefined( level. overheat_ status. alpha ) ) )
level. overheat_ status. alpha = 1;
value = self. turret_ heat_ status - self. turret_ cooldownrate;
thread seaknight_ overheat_ status_ rampdown( value, waitTime);
if ( value < 1)
value = 1;
level. overheat_ status scaleovertime( waitTime, 10, int( value) );
seaknight_ overheat_ setColor( self. turret_ heat_ status, waitTime);
wait waitTime;
if ( self. turret_ heat_ status <= 1)
level. overheat_ status. alpha = 0;
}
}
seaknight_ overheat_ status_ rampdown( targetvalue, time)
{
level endon ( "disable_overheat" );
level endon ( "stop_ overheat_ drain ");
frames = ( 20 * time);
difference = ( self. turret_ heat_ status - targetvalue);
frame_ difference = ( difference / frames);
for ( i= 0; i< frames; i++)
{
self. turret_ heat_ status -= frame_ difference;
if ( self. turret_ heat_ status < 1)
{
self. turret_ heat_ status = 1;
return;
}
wait 0. 05;
}
}
seaknight_ overheat_ hut()
{
level endon ( "disable_overheat" );
if (! isdefined( level. overheat_ bg))
{
level. overheat_ bg = newhudelem();
level. overheat_ bg. alignX = "right ";
level. overheat_ bg. alignY = "bottom ";
level. overheat_ bg. horzAlign = "right ";
level. overheat_ bg. vertAlign = "bottom ";
level. overheat_ bg. x = 2;
level. overheat_ bg. y = - 120;
level. overheat_ bg setShader( "hud_ temperature_ gauge ", 35, 150);
level. overheat_ bg. sort = 4;
}
barX = - 10;
barY = - 152;
// status bar
if (! isdefined( level. overheat_ status))
{
level. overheat_ status = newhudelem();
level. overheat_ status. alignX = "right ";
level. overheat_ status. alignY = "bottom ";
level. overheat_ status. horzAlign = "right ";
level. overheat_ status. vertAlign = "bottom ";
level. overheat_ status. x = barX;
level. overheat_ status. y = barY;
level. overheat_ status setShader( "white" , 10, 0);
level. overheat_ status. color = ( 1,. 9, 0);
level. overheat_ status. alpha = 0;
level. overheat_ status. sort = 1;
}
// draw fake bar to cover up a hitch
if (! isdefined( level. overheat_ status2))
{
level. overheat_ status2 = newhudelem();
level. overheat_ status2. alignX = "right ";
level. overheat_ status2. alignY = "bottom ";
level. overheat_ status2. horzAlign = "right ";
level. overheat_ status2. vertAlign = "bottom ";
level. overheat_ status2. x = barX;
level. overheat_ status2. y = barY;
level. overheat_ status2 setShader( "white" , 10, 1);
level. overheat_ status2. color = ( 1,. 9, 0);
level. overheat_ status2. alpha = 0;
level. overheat_ status. sort = 2;
}
if (! isdefined( level. overheat_ flashing))
{
level. overheat_ flashing = newhudelem();
level. overheat_ flashing. alignX = "right ";
level. overheat_ flashing. alignY = "bottom ";
level. overheat_ flashing. horzAlign = "right ";
level. overheat_ flashing. vertAlign = "bottom ";
level. overheat_ flashing. x = barX;
level. overheat_ flashing. y = barY;
level. overheat_ flashing setShader( "white" , 10, self. turret_ heat_ max);
level. overheat_ flashing. color = (. 8,. 16, 0);
level. overheat_ flashing. alpha = 0;
level. overheat_ status. sort = 3;
}
}
seaknight_ player_ mount_ gun( lerp )
{
// flag_ wait( "difficulty_ initialized " );
//thread player_ invulnerable_ time_ tweak();
level. mortarMaxInterval = 1;
level. mortar_ max_ dist = 4000;
level. mortarWithinFOV = "35 ";
self. turretOverheat = false;
self. turret_ heat_ status = 1;
self. turret_ heat_ max = 114;
self. turret_ heat_ maxshots = 114;
self. turret_ cooldownrate = 5;
level. allCarsDamagedByPlayer = true;
level. dontReviveHud = true;
level. mortarWithinFOV = undefined;
level. playerMortarFovOffset = ( 0, 40, 0 );
level. traceHeight = 50;
level. grenadeToggle = 0;
level. playerInSeaknight = false;
level. zpuBlastRadius = 384;
level. section = undefined;
level. onMark19 = false;
level. physicsSphereRadius = 300;
level. physicsSphereForce = 1. 0;
level. CannonRange = 5000;
level. CannonRangeSquared = level. CannonRange * level. CannonRange;
level. crewchiefRange = 256;
level. crewchiefRangeSquared = level. crewchiefRange * level. crewchiefRange;
level. hitsToDestroyT72 = 4;
level. hitsToDestroyBMP = 2;
level. cosine = [];
level. cosine[ "15 " ] = cos( 15 );
level. cosine[ "20 " ] = cos( 20 );
level. cosine[ "25 " ] = cos( 25 );
level. cosine[ "30 " ] = cos( 30 );
level. cosine[ "35 " ] = cos( 35 );
level. cosine[ "40 " ] = cos( 40 );
level. cosine[ "45 " ] = cos( 45 );
level. cosine[ "55 " ] = cos( 55 );
level thread seaknight_ overheat_ enable();
level. onMark19 = true;
thread hud_ hide( true );
level. player allowprone( false );
level. player allowcrouch( false );
thread shotFired();
thread view_ kick_ change();
if( isdefined( lerp ) )
{
level. player disableWeapons();
self lerp_ player_ view_ to_ tag( "tag_player" , 1, 1, 0, 0, 0, 0 );
}
self useby( level. player );
self thread seaknight_ fire_ turret();
tagAngles = self gettagangles( "tag_player" );
level. player setplayerangles( tagAngles + ( 0, 0, 0 ) );
}
view_ kick_ change()
{
old_ bg_ viewKickScale = getdvar( "bg_ viewKickScale " ); // 0. 8
old_ bg_ viewKickMax = getdvar( "bg_ viewKickMax " ); // 90
old_ bg_ viewKickMin = getdvar( "bg_ viewKickMin " ); // 5
old_ bg_ viewKickRandom = getdvar( "bg_ viewKickRandom " ); // 0. 4
setsaveddvar( "bg_ viewKickScale ", 0. 3 );
setsaveddvar( "bg_ viewKickMax ", "20 " );
level waittill( "player_off_turret" );
setsaveddvar( "bg_ viewKickScale ", old_ bg_ viewKickScale );
setsaveddvar( "bg_ viewKickMax ", old_ bg_ viewKickMax );
setsaveddvar( "bg_ viewKickMin ", old_ bg_ viewKickMin );
setsaveddvar( "bg_ viewKickRandom ", old_ bg_ viewKickRandom );
}
shotFired()
{
level endon( "player_off_turret" );
for (;;)
{
self waittill( "projectile_ impact ", weaponName, position, radius );
if ( getdvar( "ragdoll_ deaths " ) == "1 " )
thread shotFiredPhysicsSphere( position );
wait 0. 05;
}
}
shotFiredPhysicsSphere( center )
{
wait 0. 1;
physicsExplosionSphere( center, level. physicsSphereRadius, level. physicsSphereRadius / 2, level. physicsSphereForce );
}
hud_ hide( state )
{
wait 0. 05;
if ( state )
{
setsaveddvar( "ui_ hidemap ", 1 );
SetSavedDvar( "hud_ showStance ", "0 " );
SetSavedDvar( "compass ", "0 " );
SetSavedDvar( "ammoCounterHide ", "1 " );
}
else
{
setsaveddvar( "ui_ hidemap ", 0 );
setSavedDvar( "hud_ drawhud ", "1 " );
SetSavedDvar( "hud_ showStance ", "1 " );
SetSavedDvar( "compass ", "1 " );
SetSavedDvar( "ammoCounterHide ", "0 " );
}
}
seaknight_ player_ dismount_ gun()
{
level. mortarMaxInterval = undefined;
level. mortar_ max_ dist = undefined;
level. mortarWithinFOV = undefined;
level. playerInSeaknight = false;
level. onMark19 = false;
thread hud_ hide( false );
level notify( "player_off_turret" );
level thread seaknight_ overheat_ disable();
self useby ( level. player);
level. player unlink();
level. player playerlinktodelta( self, "tag_player" , 1, 50, 50, 30, 45 );
wait . 05;
self seaknight_ turret_ reset();
self lerp_ player_ view_ to_ tag( "tag_ turret_ exit ", 1, 0. 9, 25, 25, 45, 0 );
level. player unlink();
level. player enableWeapons();
// level. player DisableInvulnerability();
level. player allowprone( true );
level. player allowcrouch( true );
//thread seaknight_ player_ triggers();
level notify ( "player_ dismounted_ from_ gun " );
}
seaknight_ turret_ reset()
{
angles = self gettagangles( "tag_player" );
forward = anglestoforward( angles );
vec = vectorscale( forward, 5000 );
self SetTurretTargetVec( vec );
}
/***************************************************************************************************************
***************************************************************************************************************
seaknight anims
***************************************************************************************************************
***************************************************************************************************************/
#using_ animtree( "vehicles " );
seaknight_ anims()
{
level. scr_ anim[ "seaknight" ][ "idle " ][ 0 ] = % sniper_ escape_ ch46_ idle;
level. scr_ anim[ "seaknight" ][ "landing " ] = % sniper_ escape_ ch46_ land;
level. scr_ anim[ "seaknight" ][ "take_ off " ] = % sniper_ escape_ ch46_ take_ off;
level. scr_ anim[ "seaknight" ][ "rotors " ] = % sniper_ escape_ ch46_ rotors;
level. scr_ anim[ "seaknight" ][ "turret_ settle_ anim " ] = % ch46_ turret_ idle;
level. scr_ anim[ "seaknight" ][ "turret_ fire_ anim " ] = % ch46_ turret_ fire;
level. scr_ anim[ "seaknight" ][ "doors_ open " ] = % ch46_ doors_ open;
level. scr_ animtree[ "seaknight" ] = #animtree;
}
seaknight_ turret_ anim_ init()
{
self useanimtree( #animtree );
self setanim( % ch46_ turret_ idle );
self setanim( % ch46_ doors_ close );
}
seaknight_ turret_ anim()
{
self endon ( "death " );
self endon ( "turret_fire" );
self useanimtree( #animtree );
self setanimknobrestart( % ch46_ turret_ fire, 1, 0, 1 );
}
seaknight_ open_ doors()
{
self useanimtree( #animtree );
self playsound ( "seaknight_ door_ open " );
self setanimknobrestart( % ch46_ doors_ open, 1, 0, 1 );
// self thread maps\_ vehicle_ aianim:: setanimrestart_ once( % ch46_ doors_ open, false );
}
seaknight_ close_ doors()
{
self useanimtree( #animtree );
self playsound ( "seaknight_ door_ close " );
self setanimknobrestart( % ch46_ doors_ close, 1, 0, 1 );
// self thread maps\_ vehicle_ aianim:: setanimrestart_ once( % ch46_ doors_ close, false );
}
all help is appreciated, i have place this script on its on gsc and plan to later release it like so just gotta work out that hud kink. any help greatly appreciated.
edited on Apr. 22, 2011 11:19 am by voidsource