diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 4c761209..13949f25 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -18,6 +18,7 @@ main() { replaceFunc(maps/mp/zombies/_zm::check_quickrevive_for_hotjoin, scripts/zm/replaced/_zm::check_quickrevive_for_hotjoin); replaceFunc(maps/mp/zombies/_zm::actor_damage_override, scripts/zm/replaced/_zm::actor_damage_override); + replaceFunc(maps/mp/zombies/_zm::wait_and_revive, scripts/zm/replaced/_zm::wait_and_revive); replaceFunc(maps/mp/zombies/_zm::end_game, scripts/zm/replaced/_zm::end_game); replaceFunc(maps/mp/zombies/_zm_playerhealth::playerhealthregen, scripts/zm/replaced/_zm_playerhealth::playerhealthregen); replaceFunc(maps/mp/zombies/_zm_utility::track_players_intersection_tracker, scripts/zm/replaced/_zm_utility::track_players_intersection_tracker); diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index 5c768b32..d4d23100 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -1,6 +1,7 @@ #include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; check_quickrevive_for_hotjoin(disconnecting_player) { @@ -250,6 +251,59 @@ getfreespawnpoint( spawnpoints, player ) return spawnpoints[ 0 ]; } +wait_and_revive() +{ + flag_set( "wait_and_revive" ); + if ( isDefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) + { + return; + } + if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) + { + self maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); + } + self.waiting_to_revive = 1; + if ( isDefined( level.exit_level_func ) ) + { + self thread [[ level.exit_level_func ]](); + } + else if ( get_players().size == 1 ) + { + self thread maps/mp/zombies/_zm::default_exit_level(); + } + solo_revive_time = 10; + self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); + self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); + if ( !isDefined( self.beingrevivedprogressbar ) ) + { + self.beingrevivedprogressbar = self createprimaryprogressbar(); + self.beingrevivedprogressbar setpoint(undefined, "CENTER", level.primaryprogressbarx, -1 * level.primaryprogressbary); + self.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); + self.beingrevivedprogressbar.hidewheninmenu = 1; + self.beingrevivedprogressbar.bar.hidewheninmenu = 1; + self.beingrevivedprogressbar.barframe.hidewheninmenu = 1; + } + self.beingrevivedprogressbar updatebar( 0.01, 1 / solo_revive_time ); + flag_wait_or_timeout( "instant_revive", solo_revive_time ); + if ( flag( "instant_revive" ) ) + { + self maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( 1 ); + } + if ( isDefined( self.beingrevivedprogressbar ) ) + { + self.beingrevivedprogressbar destroyelem(); + } + flag_clear( "wait_and_revive" ); + self maps/mp/zombies/_zm_laststand::auto_revive( self ); + self.lives--; + + self.waiting_to_revive = 0; + if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) + { + self thread maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); + } +} + end_game() { level waittill( "end_game" );