From 540ce0de5d0d865285f5fa1b447bc99c9dce57af Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Wed, 19 Apr 2023 18:23:56 -0700 Subject: [PATCH] Encounter: fix respawn weapon switch --- scripts/zm/_zm_reimagined.gsc | 1 + scripts/zm/replaced/_zm_perks.gsc | 40 +++++++++++++++++++++++++ scripts/zm/zgrief/zgrief_reimagined.gsc | 34 ++++++++++++--------- 3 files changed, 61 insertions(+), 14 deletions(-) diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index cac77006..7f402e12 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -78,6 +78,7 @@ main() replaceFunc(maps\mp\zombies\_zm_magicbox::treasure_chest_timeout, scripts\zm\replaced\_zm_magicbox::treasure_chest_timeout); replaceFunc(maps\mp\zombies\_zm_magicbox::timer_til_despawn, scripts\zm\replaced\_zm_magicbox::timer_til_despawn); replaceFunc(maps\mp\zombies\_zm_perks::init, scripts\zm\replaced\_zm_perks::init); + replaceFunc(maps\mp\zombies\_zm_perks::vending_trigger_post_think, scripts\zm\replaced\_zm_perks::vending_trigger_post_think); replaceFunc(maps\mp\zombies\_zm_perks::vending_weapon_upgrade, scripts\zm\replaced\_zm_perks::vending_weapon_upgrade); replaceFunc(maps\mp\zombies\_zm_perks::give_perk, scripts\zm\replaced\_zm_perks::give_perk); replaceFunc(maps\mp\zombies\_zm_perks::perk_think, scripts\zm\replaced\_zm_perks::perk_think); diff --git a/scripts/zm/replaced/_zm_perks.gsc b/scripts/zm/replaced/_zm_perks.gsc index da0b2f96..eba9aa8c 100644 --- a/scripts/zm/replaced/_zm_perks.gsc +++ b/scripts/zm/replaced/_zm_perks.gsc @@ -107,6 +107,46 @@ init() level thread perk_hostmigration(); } +vending_trigger_post_think( player, perk ) +{ + player endon( "disconnect" ); + player endon( "end_game" ); + player endon( "perk_abort_drinking" ); + player.pre_bottle_weapon = player perk_give_bottle_begin( perk ); + evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); + + if ( evt == "weapon_change_complete" ) + player thread wait_give_perk( perk, 1 ); + + player perk_give_bottle_end( player.pre_bottle_weapon, perk ); + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + return; + + player.pre_bottle_weapon = undefined; + + player notify( "burp" ); + + if ( isdefined( level.pers_upgrade_cash_back ) && level.pers_upgrade_cash_back ) + player maps\mp\zombies\_zm_pers_upgrades_functions::cash_back_player_drinks_perk(); + + if ( isdefined( level.pers_upgrade_perk_lose ) && level.pers_upgrade_perk_lose ) + player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_bought(); + + if ( isdefined( level.perk_bought_func ) ) + player [[ level.perk_bought_func ]]( perk ); + + player.perk_purchased = undefined; + + if ( is_false( self.power_on ) ) + { + wait 1; + perk_pause( self.script_noteworthy ); + } + + bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); +} + vending_weapon_upgrade() { level endon( "Pack_A_Punch_off" ); diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index 6b575aab..68600be8 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -2142,7 +2142,7 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap self.grief_savedweapon_weaponsammo_stock = []; self.grief_savedweapon_weaponsammo_clip_alt = []; self.grief_savedweapon_weaponsammo_stock_alt = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_currentweapon = maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(self getcurrentweapon()); // can't switch to alt weapon self.grief_savedweapon_melee = self get_player_melee_weapon(); self.grief_savedweapon_grenades = self get_player_lethal_grenade(); self.grief_savedweapon_tactical = self get_player_tactical_grenade(); @@ -2150,12 +2150,6 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap self.grief_savedweapon_equipment = self get_player_equipment(); self.grief_hasriotshield = undefined; - // can't switch to alt weapon - if(is_alt_weapon(self.grief_savedweapon_currentweapon)) - { - self.grief_savedweapon_currentweapon = maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(self.grief_savedweapon_currentweapon); - } - for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) { self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip(self.grief_savedweapon_weapons[i]); @@ -2336,16 +2330,28 @@ grief_laststand_weapons_return() self.grief_savedweapon_weapons = undefined; - primaries = self getweaponslistprimaries(); - foreach ( weapon in primaries ) + if ( isDefined( self.pre_bottle_weapon ) && self hasWeapon( self.pre_bottle_weapon ) ) { - if ( isDefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) - { - self switchtoweapon( weapon ); - return 1; - } + self switchtoweapon( self.pre_bottle_weapon ); + self.pre_bottle_weapon = undefined; + return 1; } + if ( isDefined( self.pre_meat_weapon ) && self hasWeapon( self.pre_meat_weapon ) ) + { + self switchtoweapon( self.pre_meat_weapon ); + self.pre_meat_weapon = undefined; + return 1; + } + + if ( isDefined( self.grief_savedweapon_currentweapon ) && self hasWeapon( self.grief_savedweapon_currentweapon ) ) + { + self switchtoweapon( self.grief_savedweapon_currentweapon ); + self.grief_savedweapon_currentweapon = undefined; + return 1; + } + + primaries = self getweaponslistprimaries(); if ( primaries.size > 0 ) { self switchtoweapon( primaries[ 0 ] );