1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00

Meat powerup: fix not working after fast_restart

Meat powerup: optimize Meat weapon init code
This commit is contained in:
Jbleezy 2023-12-27 22:41:26 -08:00
parent 3fffb47e34
commit e59883db37
5 changed files with 76 additions and 38 deletions

View File

@ -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;
}

View File

@ -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]]())

View File

@ -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");

View File

@ -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");

View File

@ -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);