diff options
Diffstat (limited to 'Northstar.CustomServers/scripts/vscripts/_dogfighter.gnut')
-rw-r--r-- | Northstar.CustomServers/scripts/vscripts/_dogfighter.gnut | 343 |
1 files changed, 0 insertions, 343 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/_dogfighter.gnut b/Northstar.CustomServers/scripts/vscripts/_dogfighter.gnut deleted file mode 100644 index db616173..00000000 --- a/Northstar.CustomServers/scripts/vscripts/_dogfighter.gnut +++ /dev/null @@ -1,343 +0,0 @@ -untyped - -global function Dogfighter_Init - -global function CreateDogFighterAttack -global function LaunchRandomDogFighterAttacks -global function CreateDogFighter -global function CreateDogFighterAssist -global function GetGunshipModel -const TURRET_WEAPON_BULLETS = "mp_weapon_yh803_bullet" - -function Dogfighter_Init() -{ - - AddDeathCallback( "npc_dropship", OnDogFighterDeath ) - - RegisterSignal( "new_attack_thread" ) - RegisterSignal( "GunshipForceLeave" ) -} - -function LaunchRandomDogFighterAttacks( int team ) -{ - svGlobal.levelEnt.Signal( "new_attack_thread" ) - svGlobal.levelEnt.EndSignal( "new_attack_thread" ) - - for ( ;; ) - { - thread CreateDogFighterAttack( team ) - wait RandomFloatRange( 3, 9 ) - } -} - -function CreateDogFighterAttack( int team ) -{ - FlightPath flightPath = GetAnalysisForModel( GetFlightPathModel( "fp_straton_model" ), STRATON_ATTACK_FULL ) - - CallinData drop - InitCallinData( drop ) - SetCallinStyle( drop, eDropStyle.RANDOM_FROM_YAW ) - SetCallinYaw( drop, RandomFloat( 360 ) ) - - - SpawnPointFP spawnPoint = GetSpawnPointForStyle( flightPath, drop ) - if ( !spawnPoint.valid ) - return - - entity ship = CreateDogFighter( Vector(0,0,0), Vector(0,0,0), team ) - - int hornet_health = 2000 - ship.SetHealth( hornet_health ) - ship.SetMaxHealth( hornet_health ) - - ship.EndSignal( "OnDeath" ) - - //AddBulletTurrets( ship, team ) - - waitthread PlayAnimTeleport( ship, "st_AngelCity_IMC_Win_ComeIn", spawnPoint.origin, spawnPoint.angles ) - - thread PlayAnim( ship, "st_AngelCity_IMC_Win_Idle", spawnPoint.origin, spawnPoint.angles ) - waitthread DogFighterWaitsUntilLeave( ship ) - - waitthread PlayAnim( ship, "st_AngelCity_IMC_Win_Leave", spawnPoint.origin, spawnPoint.angles, 0.5 ) - - ship.Kill_Deprecated_UseDestroyInstead() -} - - -function DogFighterWaitsUntilLeave( ship, idleMin = 10, idleMax = 15 ) -{ - local duration = ship.GetSequenceDuration( "st_AngelCity_IMC_Win_Idle" ) - - // make it play full increments of the idle anim - local maxHealth = ship.GetMaxHealth().tofloat() - local idleTime = RandomFloatRange( idleMin, idleMax ) - local reps = ( duration / idleTime ).tointeger() - local totalTime = reps * duration - local endTime = Time() + totalTime - - for ( ;; ) - { - if ( ship.GetHealth().tofloat() / maxHealth < 0.2 ) - return - if ( Time() >= endTime ) - return - wait 0.1 - } -} - -entity function CreateDogFighter( vector origin, vector angles, int team ) -{ - entity hornet - if ( GetBugReproNum() == 81765 ) - { - hornet = CreateEntity( "npc_dropship" ) - } - else - { - // HACK: using a prop script for now since NPC dropships are still buggy - // Jiesang told me to do it! - hornet = CreatePropScript( GetGunshipModel( team ), origin, angles, 8 ) - hornet.EnableAttackableByAI( 50, 0, AI_AP_FLAG_NONE ) - SetTeam( hornet, team ) - hornet.SetOrigin( origin ) - hornet.SetAngles( angles ) - } - - hornet.s.dogfighter <- true - hornet.kv.teamnumber = team - - local title - switch ( team ) - { - case TEAM_MILITIA: - hornet.SetModel( GetFlightPathModel( "fp_hornet_model" ) ) - title = "Militia Hornet" - break - - case TEAM_IMC: - hornet.SetModel( GetFlightPathModel( "fp_straton_model" ) ) - title = "IMC Phantom" - break - } - - hornet.SetTitle( title ) - - hornet.SetOrigin( origin ) - hornet.SetAngles( angles ) - // DispatchSpawn( hornet ) - - //hornet.EnableRenderAlways() - //hornet.SetAimAssistAllowed( false ) - - return hornet -} - -void function OnDogFighterDeath( entity ent, var damageInfo ) -{ - if ( !IsValid( ent ) ) - return - - if ( !( "dogfighter" in ent.s ) ) - return - - if ( ent.GetHealth() <= 0 ) - FighterExplodes( ent ) -} - - - - -function AddRocketTurrets( entity ship, int team, int prof = eWeaponProficiency.VERYGOOD ) -{ - entity turret = AddTurret( ship, team, "mp_weapon_yh803", "l_exhaust_front_1" ) - turret.kv.WeaponProficiency = prof - turret.NotSolid() - turret.Show() - entity weapon = turret.GetActiveWeapon() - weapon.Show() - - turret = AddTurret( ship, team, "mp_weapon_yh803", "r_exhaust_front_1" ) - turret.kv.WeaponProficiency = prof - turret.NotSolid() - turret.Show() - weapon = turret.GetActiveWeapon() - weapon.Show() -} - -void function AddBulletTurrets( entity ship, int team, int prof = eWeaponProficiency.VERYGOOD ) -{ - entity turret = AddTurret( ship, team, TURRET_WEAPON_BULLETS, "l_exhaust_front_1" ) - turret.kv.WeaponProficiency = prof - turret.NotSolid() - turret = AddTurret( ship, team, TURRET_WEAPON_BULLETS, "r_exhaust_front_1" ) - turret.kv.WeaponProficiency = prof - turret.NotSolid() -} - -asset function GetGunshipModel( int team ) -{ - switch ( team ) - { - case TEAM_MILITIA: - return GetFlightPathModel( "fp_hornet_model" ) - - case TEAM_IMC: - return GetFlightPathModel( "fp_straton_model" ) - } - - unreachable -} - -void function CreateDogFighterAssist( int team, vector origin, vector angles, float duration = 10.0, entity ship = null, float dropHeight = 1500 ) -{ - angles += <0,90,0> - - angles = < 0, angles.y%360, 0 > - - // DebugDrawSphere( origin, 256, 255, 0, 0, true, 10.0 ) - - // warp in effect before - Point start = GetWarpinPosition( GetFighterModelForTeam( team ), "st_AngelCity_IMC_Win_ComeIn_fast", origin, angles ) - - if ( !IsValid( ship ) ) - { - ship = CreateDogFighter( start.origin, start.angles, team ) - } - else - { - ship.SetOrigin( start.origin ) - ship.SetAngles( start.angles ) - } - - waitthread __WarpInEffectShared( start.origin, start.angles, "", 0.0 ) - - - ship.SetHealth( 10000 ) - ship.SetMaxHealth( 10000 ) - ship.EndSignal( "OnDeath" ) - - #if R1_VGUI_MINIMAP - ship.Minimap_SetDefaultMaterial( GetMinimapMaterial( "VIP_friendly" ) ) - ship.Minimap_SetFriendlyMaterial( GetMinimapMaterial( "VIP_friendly" ) ) - ship.Minimap_SetEnemyMaterial( GetMinimapMaterial( "VIP_enemy" ) ) - ship.Minimap_SetBossPlayerMaterial( GetMinimapMaterial( "VIP_friendly" ) ) - #endif - ship.Minimap_SetObjectScale( 0.11 ) - ship.Minimap_SetZOrder( MINIMAP_Z_NPC ) - - entity mover = CreateScriptMover( origin, angles ) - - OnThreadEnd( - function () : ( ship, mover ) - { - if ( IsValid( mover ) ) - mover.Destroy() - if ( IsValid( ship ) ) - ship.Destroy() - } - ) - - float SHIP_SIZE = 530 - vector SHIP_MIN = Vector( -SHIP_SIZE/2, -SHIP_SIZE/2, -250 ) - vector SHIP_MAX = Vector( SHIP_SIZE/2, SHIP_SIZE/2, 100 ) - - entity turret - - turret = CreateEntity( "npc_turret_sentry" ) - SetSpawnOption_AISettings( turret, "npc_turret_sentry_rockets_dropship" ) - SetSpawnOption_Weapon( turret, "mp_turretweapon_blaster" ) - SetSpawnOption_Alert( turret ) - SetTeam( turret, team ) - DispatchSpawn( turret ) - turret.SetInvulnerable() - turret.SetParent( ship, "r_turret_attach", false, 0.0 ) - turret.SetTitle( ship.GetTitle() ) - NPC_NoTarget( turret ) - - turret = CreateEntity( "npc_turret_sentry" ) - SetSpawnOption_AISettings( turret, "npc_turret_sentry_rockets_dropship" ) - SetSpawnOption_Weapon( turret, "mp_turretweapon_blaster" ) - SetSpawnOption_Alert( turret ) - SetTeam( turret, team ) - DispatchSpawn( turret ) - turret.SetInvulnerable() - turret.SetParent( ship, "l_turret_attach", false, 0.0 ) - turret.SetTitle( ship.GetTitle() ) - NPC_NoTarget( turret ) - - // DrawArrow( origin, angles, 10, 50 ) - - waitthread PlayAnimTeleport( ship, "st_AngelCity_IMC_Win_ComeIn_fast", origin, angles ) - - // ------------------------------------------------- - // now we want to drop the ship close to the ground - // ------------------------------------------------- - - vector shipOrigin = ship.GetOrigin() - vector newOrigin = shipOrigin - - if ( dropHeight > 0 ) - { - // TRACE to find the floor - float traceFrac = TraceLineSimple( shipOrigin, shipOrigin - Vector(0,0,dropHeight), ship ) - vector floorPos = shipOrigin - Vector(0,0,dropHeight * traceFrac) - floorPos += Vector( 0,0,400 ) //we don't want the ship to land! - - // TRACE to see if anything is in the way - float result = TraceHullSimple( shipOrigin, floorPos, SHIP_MIN, SHIP_MAX, ship ) - vector offset = ( shipOrigin - floorPos ) * result - - // This is where we will move the spawnpoint - newOrigin = origin - offset - } - - // float duration = ship.GetSequenceDuration( "st_AngelCity_IMC_Win_Idle" ) - - ship.SetParent( mover, "REF" ) - ship.Anim_EnableUseAnimatedRefAttachmentInsteadOfRootMotion() - - // Ship comes in... - thread PlayAnim( ship, "st_AngelCity_IMC_Win_Idle", mover, "REF" ) - - // Ship goes down... - float dropDuration = 5.0 - if ( dropHeight > 0 ) - { - mover.NonPhysicsMoveTo( newOrigin, dropDuration, dropDuration*0.4, dropDuration*0.4 ) - wait dropDuration - } - - // Ship hangs out for a while... - waitthread GunshipWaitLeave( ship, duration ) - - // Ship raises before it leaves... - if ( dropHeight > 0 ) - { - mover.NonPhysicsMoveTo( origin, dropDuration, dropDuration*0.4, dropDuration*0.4 ) - wait dropDuration - } - ship.ClearParent() - - // Ship leaves... - waitthread PlayAnim( ship, "st_AngelCity_IMC_Win_Leave", origin, angles, 0.5 ) -} - -void function GunshipWaitLeave( entity ship, float duration ) -{ - ship.EndSignal( "GunshipForceLeave" ) - wait duration -} - -asset function GetFighterModelForTeam( int team ) -{ - switch ( team ) - { - case TEAM_MILITIA: - return GetFlightPathModel( "fp_hornet_model" ) - - case TEAM_IMC: - return GetFlightPathModel( "fp_straton_model" ) - } - unreachable -}
\ No newline at end of file |