From 7cab7b6c6f3b92ed5d45248eb19fc19f568b8bcb Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Thu, 13 Apr 2023 01:59:33 -0700 Subject: [PATCH] Replace too many weapons and too many players check --- scripts/zm/_zm_reimagined.gsc | 4 ++- scripts/zm/replaced/_zm.gsc | 58 +++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index fc96858a..00a5c2c3 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -370,6 +370,8 @@ post_all_players_spawned() level.overrideplayerdamage = scripts\zm\replaced\_zm::player_damage_override; level.playerlaststand_func = scripts\zm\replaced\_zm::player_laststand; level.callbackplayerlaststand = scripts\zm\replaced\_zm::callback_playerlaststand; + level.player_too_many_weapons_monitor_func = scripts\zm\replaced\_zm::player_too_many_weapons_monitor; + level.player_too_many_players_check_func = undefined; level.etrap_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 ); level.slipgun_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 ); level.tombstone_spawn_func = ::tombstone_spawn; @@ -3463,7 +3465,7 @@ tombstone_give() { if ( !isDefined( self.tombstone_savedweapon_weapons ) ) { - return ; + return; } primary_weapons = self getWeaponsListPrimaries(); diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index 40ee895a..c219262a 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -1618,6 +1618,64 @@ get_player_out_of_playable_area_monitor_wait_time() return 1; } +player_too_many_weapons_monitor() +{ + self notify( "stop_player_too_many_weapons_monitor" ); + self endon( "stop_player_too_many_weapons_monitor" ); + self endon( "disconnect" ); + level endon( "end_game" ); + scalar = self.characterindex; + + if ( !isdefined( scalar ) ) + scalar = self getentitynumber(); + + wait( 0.15 * scalar ); + + while ( true ) + { + if ( self has_powerup_weapon() || self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self.sessionstate == "spectator" ) + { + wait( get_player_too_many_weapons_monitor_wait_time() ); + continue; + } + + weapon_limit = get_player_weapon_limit( self ); + primaryweapons = self getweaponslistprimaries(); + + if ( primaryweapons.size > weapon_limit ) + { + self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); + primaryweapons = self getweaponslistprimaries(); + } + + primary_weapons_to_take = []; + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_to_take[primary_weapons_to_take.size] = primaryweapons[i]; + } + + if ( primary_weapons_to_take.size > weapon_limit ) + { + if ( !isdefined( level.player_too_many_weapons_monitor_callback ) || self [[ level.player_too_many_weapons_monitor_callback ]]( primary_weapons_to_take ) ) + { + self maps\mp\zombies\_zm_stats::increment_map_cheat_stat( "cheat_too_many_weapons" ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_too_many_weapons", 0 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self takeweapon( primary_weapons_to_take[ primary_weapons_to_take.size - 1 ] ); + } + } + + wait( get_player_too_many_weapons_monitor_wait_time() ); + } +} + +get_player_too_many_weapons_monitor_wait_time() +{ + return 1; +} + end_game() { level waittill( "end_game" );