diff options
Diffstat (limited to 'Northstar.CustomServers/mod/scripts/vscripts')
7 files changed, 95 insertions, 45 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut b/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut index b9a8fc7c..da8ca9f5 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut +++ b/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut @@ -165,6 +165,11 @@ void function EarnMeterMP_BoostEarned( entity player ) if ( burncard.extraWeaponMod != "" ) mods.append( burncard.extraWeaponMod ) + // ensure inventory slot isn't full to avoid crash + entity preexistingWeapon = player.GetOffhandWeapon( OFFHAND_INVENTORY ) + if ( IsValid( preexistingWeapon ) ) + player.TakeWeaponNow( preexistingWeapon.GetWeaponClassName() ) + player.GiveOffhandWeapon( burncard.weaponName, OFFHAND_INVENTORY, mods ) Remote_CallFunction_Replay( player, "ServerCallback_RewardReadyMessage", player.s.respawnTime ) } diff --git a/Northstar.CustomServers/mod/scripts/vscripts/evac/_evac.gnut b/Northstar.CustomServers/mod/scripts/vscripts/evac/_evac.gnut index 9a7e89e2..96b84c23 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/evac/_evac.gnut +++ b/Northstar.CustomServers/mod/scripts/vscripts/evac/_evac.gnut @@ -96,8 +96,12 @@ void function EvacEpilogue() { int winner = GetWinningTeam() - // make sure we don't run this on ffa modes if no epilogue was specified or it won't work for current gamestate, since evac is default epilogue - if ( GetCurrentPlaylistVarInt( "max_teams", 2 ) == 2 && ( winner == TEAM_MILITIA || winner == TEAM_IMC ) ) + // make sure we don't run evac if it won't be supported for current map/gamestate + bool canRunEvac = GetCurrentPlaylistVarInt( "max_teams", 2 ) == 2 && + ( winner == TEAM_MILITIA || winner == TEAM_IMC ) && + ( file.evacNodes.len() > 0 || IsValid( GetEnt( "escape_node1" ) ) ) // code assumes escape_node1 should be first node if automatically registering + + if ( canRunEvac ) thread Evac( GetOtherTeam( winner ), EVAC_INITIAL_WAIT, EVAC_ARRIVAL_TIME, EVAC_WAIT_TIME, EvacEpiloguePlayerCanBoard, EvacEpilogueShouldLeaveEarly, EvacEpilogueCompleted ) else thread EvacEpilogueCompleted( null ) // this is hacky but like, this also shouldn't really be hit in normal gameplay @@ -125,7 +129,7 @@ bool function EvacEpilogueShouldLeaveEarly( entity dropship ) if ( IsValid( player ) ) numEvacing++ - return GetPlayerArrayOfTeam( dropship.GetTeam() ).len() == numEvacing || numEvacing == dropship.s.evacSlots.len() + return GetPlayerArrayOfTeam_Alive( dropship.GetTeam() ).len() == numEvacing || numEvacing == dropship.s.evacSlots.len() } void function EvacEpilogueCompleted( entity dropship ) @@ -283,8 +287,11 @@ void function Evac( int evacTeam, float initialWait, float arrivalTime, float wa wait WARPINFXTIME // go to space + // hardcoded angles here are a hack, spacenode position doesn't face the planet in the skybox, for some reason - file.spaceNode.SetAngles( < 30, -75, 20 >) + // nvm removing for now + //file.spaceNode.SetAngles( < 30, -75, 20 > ) + dropship.SetOrigin( file.spaceNode.GetOrigin() ) dropship.SetAngles( file.spaceNode.GetAngles() ) dropship.SetInvulnerable() diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut index 4a756c02..3213827d 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut +++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut @@ -116,8 +116,8 @@ void function RateSpawnpoints_CTF( int checkClass, array<entity> spawnpoints, in vector zonePos = averageFriendlySpawns + Normalize( averageEnemySpawns - averageFriendlySpawns ) * ( i * averageFriendlySpawnDist ) float zonePower - foreach ( entity player in enemyPlayers ) - if ( Distance2D( player.GetOrigin(), zonePos ) < averageFriendlySpawnDist ) + foreach ( entity otherPlayer in enemyPlayers ) + if ( Distance2D( otherPlayer.GetOrigin(), zonePos ) < averageFriendlySpawnDist ) zonePower += 1.0 / enemyPlayers.len() zonePower = min( zonePower, remainingZonePower ) @@ -134,7 +134,7 @@ bool function VerifyCTFSpawnpoint( entity spawnpoint, int team ) { // ensure spawnpoints aren't too close to enemy base - if ( HasSwitchedSides() && spawnpoint.GetTeam() >= 2 ) + if ( HasSwitchedSides() && spawnpoint.GetTeam() >= TEAM_IMC ) team = GetOtherTeam( team ) array<entity> startSpawns = SpawnPoints_GetPilotStart( team ) diff --git a/Northstar.CustomServers/mod/scripts/vscripts/mp/_gamestate_mp.nut b/Northstar.CustomServers/mod/scripts/vscripts/mp/_gamestate_mp.nut index 83d889dd..0eef7f00 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/mp/_gamestate_mp.nut +++ b/Northstar.CustomServers/mod/scripts/vscripts/mp/_gamestate_mp.nut @@ -302,7 +302,7 @@ void function GameStateEnter_WinnerDetermined_Threaded() SetServerVar( "roundWinningKillReplayEntHealthFrac", file.roundWinningKillReplayHealthFrac ) foreach ( entity player in GetPlayerArray() ) - thread PlayerWatchesRoundWinningKillReplay( player, doReplay, replayLength ) + thread PlayerWatchesRoundWinningKillReplay( player, replayLength ) wait ROUND_WINNING_KILL_REPLAY_SCREEN_FADE_TIME CleanUpEntitiesForRoundEnd() // fade should be done by this point, so cleanup stuff now when people won't see @@ -323,7 +323,7 @@ void function GameStateEnter_WinnerDetermined_Threaded() ScreenFadeToBlackForever( player, 4.0 ) } - wait 6.5 + wait ROUND_WINNING_KILL_REPLAY_LENGTH_OF_REPLAY CleanUpEntitiesForRoundEnd() // fade should be done by this point, so cleanup stuff now when people won't see foreach( entity player in GetPlayerArray() ) @@ -360,45 +360,39 @@ void function GameStateEnter_WinnerDetermined_Threaded() } } -void function PlayerWatchesRoundWinningKillReplay( entity player, bool doReplay, float replayLength ) +void function PlayerWatchesRoundWinningKillReplay( entity player, float replayLength ) { + // end if player dcs + player.EndSignal( "OnDestroy" ) + player.FreezeControlsOnServer() - - if ( IsRoundBased() || !ClassicMP_ShouldRunEpilogue() ) // if we're doing evac, then no fades or killreplay + ScreenFadeToBlackForever( player, ROUND_WINNING_KILL_REPLAY_SCREEN_FADE_TIME ) + wait ROUND_WINNING_KILL_REPLAY_SCREEN_FADE_TIME + + player.SetPredictionEnabled( false ) // prediction fucks with replays + + entity attacker = file.roundWinningKillReplayAttacker + player.SetKillReplayDelay( Time() - replayLength, THIRD_PERSON_KILL_REPLAY_ALWAYS ) + player.SetKillReplayInflictorEHandle( attacker.GetEncodedEHandle() ) + player.SetKillReplayVictim( file.roundWinningKillReplayVictim ) + player.SetViewIndex( attacker.GetIndexForEntity() ) + player.SetIsReplayRoundWinning( true ) + + if ( replayLength >= ROUND_WINNING_KILL_REPLAY_LENGTH_OF_REPLAY - 0.5 ) // only do fade if close to full length replay { - ScreenFadeToBlackForever( player, ROUND_WINNING_KILL_REPLAY_SCREEN_FADE_TIME ) - wait ROUND_WINNING_KILL_REPLAY_SCREEN_FADE_TIME - - if ( doReplay ) - { - player.SetPredictionEnabled( false ) // prediction fucks with replays - - entity attacker = file.roundWinningKillReplayAttacker - player.SetKillReplayDelay( Time() - replayLength, THIRD_PERSON_KILL_REPLAY_ALWAYS ) - player.SetKillReplayInflictorEHandle( attacker.GetEncodedEHandle() ) - player.SetKillReplayVictim( file.roundWinningKillReplayVictim ) - player.SetViewIndex( attacker.GetIndexForEntity() ) - player.SetIsReplayRoundWinning( true ) - - if ( replayLength >= ROUND_WINNING_KILL_REPLAY_LENGTH_OF_REPLAY - 0.5 ) // only do fade if close to full length replay - { - // this doesn't work because fades don't work on players that are in a replay, unsure how official servers do this - wait replayLength - 2.0 - ScreenFadeToBlackForever( player, 2.0 ) + // this doesn't work because fades don't work on players that are in a replay, unsure how official servers do this + wait replayLength - 2.0 + ScreenFadeToBlackForever( player, 2.0 ) - wait 2.0 - } - else - wait replayLength - } - else - wait replayLength // this will just be extra delay if no replay - - player.SetPredictionEnabled( true ) - player.ClearReplayDelay() - player.ClearViewEntity() - player.UnfreezeControlsOnServer() + wait 2.0 } + else + wait replayLength + + player.SetPredictionEnabled( true ) + player.ClearReplayDelay() + player.ClearViewEntity() + player.UnfreezeControlsOnServer() } diff --git a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_crashsite3.nut b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_crashsite3.nut index 37b89169..f169d0c7 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_crashsite3.nut +++ b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_crashsite3.nut @@ -1 +1,7 @@ -//fuck
\ No newline at end of file +untyped +global function CodeCallback_MapInit + +void function CodeCallback_MapInit() +{ + ClassicMP_SetLevelIntro( ClassicMP_DefaultNoIntro_Setup, ClassicMP_DefaultNoIntro_GetLength() ) +}
\ No newline at end of file diff --git a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_wargames.nut b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_wargames.nut index b6c8cfc2..3a46eba8 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_wargames.nut +++ b/Northstar.CustomServers/mod/scripts/vscripts/mp/levels/mp_wargames.nut @@ -1,7 +1,45 @@ untyped global function CodeCallback_MapInit +struct { + bool introStartTime +} file + void function CodeCallback_MapInit() { + AddEvacNode( GetEnt( "evac_location1" ) ) + AddEvacNode( GetEnt( "evac_location2" ) ) + AddEvacNode( GetEnt( "evac_location3" ) ) + AddEvacNode( GetEnt( "evac_location4" ) ) + + SetEvacSpaceNode( GetEnt( "end_spacenode" ) ) + + // currently disabled: intro + // if ( !IsFFAGame() ) + // ClassicMP_SetLevelIntro( WargamesIntroSetup, 25.0 ) +} + +// intro stuff +void function WargamesIntroSetup() +{ + AddCallback_OnClientConnected( WargamesIntro_OnClientConnected ) + AddCallback_OnClientDisconnected( WargamesIntro_OnClientDisconnected ) + + AddCallback_GameStateEnter( eGameState.Prematch, OnPrematchStart ) +} + +void function WargamesIntro_OnClientConnected( entity player ) +{ +} + +void function WargamesIntro_OnClientDisconnected( entity player ) +{ + +} + +void function OnPrematchStart() +{ + ClassicMP_OnIntroStarted() + file.introStartTime = Time() }
\ No newline at end of file diff --git a/Northstar.CustomServers/mod/scripts/vscripts/mp/spawn.nut b/Northstar.CustomServers/mod/scripts/vscripts/mp/spawn.nut index 94138561..18026f17 100644 --- a/Northstar.CustomServers/mod/scripts/vscripts/mp/spawn.nut +++ b/Northstar.CustomServers/mod/scripts/vscripts/mp/spawn.nut @@ -144,7 +144,7 @@ entity function FindSpawnPoint( entity player, bool isTitan, bool useStartSpawnp else spawnpoints = isTitan ? SpawnPoints_GetTitan() : SpawnPoints_GetPilot() - InitRatings( player, team ) + InitRatings( player, player.GetTeam() ) // don't think this is necessary since we call discardratings //foreach ( entity spawnpoint in spawnpoints ) |