Force player respawn to match vanilla (#554)

Automatically respawns dead players after 5 seconds unless set otherwise
This commit is contained in:
Jack 2023-09-02 17:49:26 +01:00 committed by GitHub
parent 2b26328651
commit f16af28753
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 0 deletions

View File

@ -227,6 +227,7 @@ Press Yes if you agree to this. This choice can be changed in the mods menu at a
"classic_rodeo" "Classic Rodeo"
"oob_timer_enabled" "Out of Bounds Timer"
"riff_instagib" "Instagib Mode"
"player_force_respawn" "Forced Respawn"
"riff_player_bleedout" "Pilot Bleedout"
"player_bleedout_forceHolster" "Holster weapons when downed"

View File

@ -0,0 +1,13 @@
playlists
{
Gamemodes
{
defaults
{
vars
{
player_force_respawn 5
}
}
}
}

View File

@ -17,6 +17,7 @@ void function PrivateMatchModesInit()
AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_PILOT", "boosts_enabled", [ "#SETTING_DEFAULT", "#SETTING_DISABLED" ], "1" )
AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_PILOT", "earn_meter_pilot_overdrive", [ "#SETTING_DISABLED", "#SETTING_ENABLED", "Only" ], "1" )
AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_PILOT", "earn_meter_pilot_multiplier", "1.0" )
AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_PILOT", "player_force_respawn", "5" )
AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_TITAN", "earn_meter_titan_multiplier", "1.0" )
AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_TITAN", "aegis_upgrades", [ "#SETTING_DISABLED", "#SETTING_ENABLED" ], "0" )

View File

@ -274,6 +274,9 @@ void function PostDeathThread_MP( entity player, var damageInfo ) // based on ga
ClearRespawnAvailable( player )
// reset this so that we default to pilot spawn
player.SetPersistentVar( "spawnAsTitan", false )
OnThreadEnd( function() : ( player )
{
if ( !IsValid( player ) )
@ -379,6 +382,13 @@ void function PostDeathThread_MP( entity player, var damageInfo ) // based on ga
SetRespawnAvailable( player )
wait respawnDelay
int forceRespawn = GetCurrentPlaylistVarInt( "player_force_respawn", -1 )
// -1 is disabled, anything over is the time we wait in seconds
// before respawning the player
if( forceRespawn >= 0 )
thread ForceRespawnMeSignalAfterDelay( player, forceRespawn )
player.WaitSignal( "RespawnMe" ) // set in base_gametype: ClientCommand_RespawnPlayer
@ -398,6 +408,21 @@ void function PostDeathThread_MP( entity player, var damageInfo ) // based on ga
}
}
// idk if this is a good delay or if it matches vanilla
void function ForceRespawnMeSignalAfterDelay( entity player, int delay = 5 )
{
player.EndSignal( "RespawnMe" )
player.EndSignal( "OnDestroy" )
if( player.IsWatchingKillReplay() )
player.WaitSignal( "KillCamOver" )
wait delay
printt( format( "Forcing player respawn for player %s (took >%d seconds to respawn)", player.GetPlayerName(), delay ) )
player.Signal( "RespawnMe" )
}
void function PlayerWatchesKillReplayWrapper( entity player, entity attacker, float timeSinceAttackerSpawned, float timeOfDeath, float beforeTime, table replayTracker )
{
player.EndSignal( "RespawnMe" )