From e59883db377dece503f799f44e843f488c07f8f6 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Wed, 27 Dec 2023 22:41:26 -0800 Subject: [PATCH] Meat powerup: fix not working after fast_restart Meat powerup: optimize Meat weapon init code --- .../replaced/_zm_game_module_meat_utility.gsc | 40 +++++++++++++++++++ scripts/zm/replaced/zgrief.gsc | 20 ++++++++++ scripts/zm/replaced/zmeat.gsc | 14 +++++++ scripts/zm/zgrief/zgrief_reimagined.gsc | 38 +----------------- scripts/zm/zm_prison/zm_prison_reimagined.gsc | 2 - 5 files changed, 76 insertions(+), 38 deletions(-) diff --git a/scripts/zm/replaced/_zm_game_module_meat_utility.gsc b/scripts/zm/replaced/_zm_game_module_meat_utility.gsc index 48ee368c..5559c5cd 100644 --- a/scripts/zm/replaced/_zm_game_module_meat_utility.gsc +++ b/scripts/zm/replaced/_zm_game_module_meat_utility.gsc @@ -21,10 +21,50 @@ init_item_meat(gametype) set_gamemode_var_once("item_meat_model", "t6_wpn_zmb_meat_world"); } + level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); + level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); + include_powerup( "meat_stink" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", get_gamemode_var("item_meat_model"), &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 1, 0, 0 ); + precacheitem(get_gamemode_var("item_meat_name")); set_gamemode_var_once("start_item_meat_name", get_gamemode_var("item_meat_name")); level.meat_weaponidx = getweaponindexfromname(get_gamemode_var("item_meat_name")); level.meat_pickupsound = getweaponpickupsound(level.meat_weaponidx); level.meat_pickupsoundplayer = getweaponpickupsoundplayer(level.meat_weaponidx); level.item_meat_name = get_gamemode_var("item_meat_name"); +} + +func_should_drop_meat() +{ + if (level.scr_zm_ui_gametype_obj == "zmeat") + { + return 0; + } + + foreach (powerup in level.active_powerups) + { + if (powerup.powerup_name == "meat_stink") + { + return 0; + } + } + + players = get_players(); + + foreach (player in players) + { + if (player hasWeapon(level.item_meat_name)) + { + return 0; + } + } + + if (isDefined(level.item_meat) || is_true(level.meat_on_ground) || isDefined(level.meat_player)) + { + return 0; + } + + return 1; } \ No newline at end of file diff --git a/scripts/zm/replaced/zgrief.gsc b/scripts/zm/replaced/zgrief.gsc index bb1eee73..c4d32f66 100644 --- a/scripts/zm/replaced/zgrief.gsc +++ b/scripts/zm/replaced/zgrief.gsc @@ -2,6 +2,26 @@ #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +postinit_func() +{ + level.min_humans = 1; + level.zombie_ai_limit = 24; + level.prevent_player_damage = ::player_prevent_damage; + level.lock_player_on_team_score = 1; + level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; + level.meat_bounce_override = ::meat_bounce_override; + level._zombie_spawning = 0; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); +} + game_mode_spawn_player_logic() { if (isDefined(level.should_respawn_func) && [[level.should_respawn_func]]()) diff --git a/scripts/zm/replaced/zmeat.gsc b/scripts/zm/replaced/zmeat.gsc index 3321757b..489cec18 100644 --- a/scripts/zm/replaced/zmeat.gsc +++ b/scripts/zm/replaced/zmeat.gsc @@ -4,6 +4,20 @@ #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_game_module_meat_utility; +create_item_meat_watcher() +{ + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); + watcher.pickup = ::item_meat_on_pickup; + watcher.onspawn = ::item_meat_spawned; + watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; + watcher.headicon = 0; +} + +play_item_meat_on_spawn_retrieve_trigger( watcher, player ) +{ + self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); +} + item_meat_on_spawn_retrieve_trigger(watcher, player, weaponname) { self endon("death"); diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index 184127e1..9448da37 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -18,8 +18,9 @@ main() replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onspawnplayer, scripts\zm\replaced\_zm_gametype::onspawnplayer); replaceFunc(maps\mp\gametypes_zm\_zm_gametype::onplayerspawned, scripts\zm\replaced\_zm_gametype::onplayerspawned); replaceFunc(maps\mp\gametypes_zm\_zm_gametype::menu_onmenuresponse, scripts\zm\replaced\_zm_gametype::menu_onmenuresponse); + replaceFunc(maps\mp\gametypes_zm\zgrief::postinit_func, scripts\zm\replaced\zgrief::postinit_func); replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink, scripts\zm\replaced\zgrief::meat_stink); - replaceFunc(maps\mp\gametypes_zm\zmeat::item_meat_on_spawn_retrieve_trigger, scripts\zm\replaced\zmeat::item_meat_on_spawn_retrieve_trigger); + replaceFunc(maps\mp\gametypes_zm\zmeat::create_item_meat_watcher, scripts\zm\replaced\zmeat::create_item_meat_watcher); } init() @@ -340,8 +341,6 @@ set_grief_vars() level.noroundnumber = 1; level.snr_round_number = 1; - level.zombie_powerups["meat_stink"].solo = 1; - level.zombie_powerups["meat_stink"].func_should_drop_with_regular_powerups = ::func_should_drop_meat; level.custom_end_screen = ::custom_end_screen; level.game_module_onplayerconnect = ::grief_onplayerconnect; level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; @@ -2373,39 +2372,6 @@ player_suicide() self.playersuicided = undefined; } -func_should_drop_meat() -{ - if (level.scr_zm_ui_gametype_obj == "zmeat") - { - return 0; - } - - foreach (powerup in level.active_powerups) - { - if (powerup.powerup_name == "meat_stink") - { - return 0; - } - } - - players = get_players(); - - foreach (player in players) - { - if (player hasWeapon(level.item_meat_name)) - { - return 0; - } - } - - if (isDefined(level.item_meat) || is_true(level.meat_on_ground) || isDefined(level.meat_player)) - { - return 0; - } - - return 1; -} - remove_round_number() { level endon("end_game"); diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 0fc867e6..43537541 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -66,7 +66,6 @@ main() init() { - precacheModel("t6_wpn_zmb_severedhead_world"); precacheModel("collision_clip_32x32x32"); level.zombie_init_done = ::zombie_init_done; @@ -75,7 +74,6 @@ init() level.custom_laststand_func = scripts\zm\replaced\_zm_perk_electric_cherry::electric_cherry_laststand; level.zombie_vars["below_world_check"] = -15000; - level.zombie_powerups["meat_stink"].model_name = "t6_wpn_zmb_severedhead_world"; maps\mp\zombies\_zm::spawn_life_brush((94, 6063, 240), 256, 256);