From b65a4578dbb401fdac42d443d05c0c28b8629408 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Wed, 17 Apr 2024 02:44:46 -0700 Subject: [PATCH] Weapons: fix alt weapon switch when trading weapons --- README.md | 1 + scripts/zm/_zm_reimagined.gsc | 3 + scripts/zm/replaced/_zm_weapons.gsc | 92 +++++++++++++++++++++++++ scripts/zm/zgrief/zgrief_reimagined.gsc | 21 +----- 4 files changed, 97 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 37f234cd..a3fec366 100644 --- a/README.md +++ b/README.md @@ -283,6 +283,7 @@ * Added proper melee swing sound to all melee weapons * Fixed world model position of certain melee weapons * Fixed projectile angles of certain grenades and projectile weapons +* Fixed alt weapons being switched from when trading weapons * Grenades: improved projectile upward speed * Grenades: can no longer be thrown faster than intended by throwing a grenade right after throwing one * Grenades: changed damage scalar to 25 multiplied by round number (normally random number between 100 and 200 added by round number) diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 2cb4ff13..8e64e8fc 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -69,6 +69,9 @@ main() replaceFunc(maps\mp\zombies\_zm_weapons::createballisticknifewatcher_zm, scripts\zm\replaced\_zm_weapons::createballisticknifewatcher_zm); replaceFunc(maps\mp\zombies\_zm_weapons::weapon_spawn_think, scripts\zm\replaced\_zm_weapons::weapon_spawn_think); replaceFunc(maps\mp\zombies\_zm_weapons::weapon_set_first_time_hint, scripts\zm\replaced\_zm_weapons::weapon_set_first_time_hint); + replaceFunc(maps\mp\zombies\_zm_weapons::get_player_weapondata, scripts\zm\replaced\_zm_weapons::get_player_weapondata); + replaceFunc(maps\mp\zombies\_zm_weapons::get_nonalternate_weapon, scripts\zm\replaced\_zm_weapons::get_nonalternate_weapon); + replaceFunc(maps\mp\zombies\_zm_weapons::switch_from_alt_weapon, scripts\zm\replaced\_zm_weapons::switch_from_alt_weapon); replaceFunc(maps\mp\zombies\_zm_weapons::give_fallback_weapon, scripts\zm\replaced\_zm_weapons::give_fallback_weapon); replaceFunc(maps\mp\zombies\_zm_magicbox::treasure_chest_init, scripts\zm\replaced\_zm_magicbox::treasure_chest_init); replaceFunc(maps\mp\zombies\_zm_magicbox::init_starting_chest_location, scripts\zm\replaced\_zm_magicbox::init_starting_chest_location); diff --git a/scripts/zm/replaced/_zm_weapons.gsc b/scripts/zm/replaced/_zm_weapons.gsc index b8136003..2db36a6d 100644 --- a/scripts/zm/replaced/_zm_weapons.gsc +++ b/scripts/zm/replaced/_zm_weapons.gsc @@ -971,6 +971,98 @@ createballisticknifewatcher_zm(name, weapon) watcher.headicon = 0; } +get_player_weapondata(player, weapon) +{ + weapondata = []; + + if (!isdefined(weapon)) + weapondata["name"] = get_nonalternate_weapon(player getcurrentweapon()); + else + weapondata["name"] = weapon; + + weapondata["dw_name"] = weapondualwieldweaponname(weapondata["name"]); + weapondata["alt_name"] = weaponaltweaponname(weapondata["name"]); + + if (weapondata["name"] != "none") + { + weapondata["clip"] = player getweaponammoclip(weapondata["name"]); + weapondata["stock"] = player getweaponammostock(weapondata["name"]); + weapondata["fuel"] = player getweaponammofuel(weapondata["name"]); + weapondata["heat"] = player isweaponoverheating(1, weapondata["name"]); + weapondata["overheat"] = player isweaponoverheating(0, weapondata["name"]); + } + else + { + weapondata["clip"] = 0; + weapondata["stock"] = 0; + weapondata["fuel"] = 0; + weapondata["heat"] = 0; + weapondata["overheat"] = 0; + } + + if (weapondata["dw_name"] != "none") + weapondata["lh_clip"] = player getweaponammoclip(weapondata["dw_name"]); + else + weapondata["lh_clip"] = 0; + + if (weapondata["alt_name"] != "none") + { + weapondata["alt_clip"] = player getweaponammoclip(weapondata["alt_name"]); + weapondata["alt_stock"] = player getweaponammostock(weapondata["alt_name"]); + } + else + { + weapondata["alt_clip"] = 0; + weapondata["alt_stock"] = 0; + } + + return weapondata; +} + +get_nonalternate_weapon(altweapon) +{ + if (is_alt_weapon(altweapon)) + { + alt = weaponaltweaponname(altweapon); + + if (alt == "none") + { + primaryweapons = self getweaponslistprimaries(); + alt = primaryweapons[0]; + + foreach (weapon in primaryweapons) + { + if (weaponaltweaponname(weapon) == altweapon) + { + alt = weapon; + break; + } + } + } + + return alt; + } + + if (issubstr(altweapon, "metalstorm")) + { + alt = "metalstorm_mms_zm"; + + if (issubstr(altweapon, "upgraded")) + { + alt = "metalstorm_mms_upgraded_zm"; + } + + return alt; + } + + return altweapon; +} + +switch_from_alt_weapon(current_weapon) +{ + return get_nonalternate_weapon(current_weapon); +} + give_fallback_weapon() { self switchtoweapon("held_" + self get_player_melee_weapon()); diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index ec1107e2..f44a9696 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -1696,7 +1696,7 @@ game_module_player_damage_callback(einflictor, eattacker, idamage, idflags, smea return; } - sweapon = get_real_nonalternate_weapon(sweapon); + sweapon = get_nonalternate_weapon(sweapon); if (!is_true(self._being_shellshocked)) { @@ -1925,25 +1925,6 @@ remove_player_damage_info() self.last_griefed_by = undefined; } -get_real_nonalternate_weapon(sweapon) -{ - sweapon = get_nonalternate_weapon(sweapon); - - if (issubstr(sweapon, "metalstorm")) - { - if (issubstr(sweapon, "upgraded")) - { - sweapon = "metalstorm_mms_upgraded_zm"; - } - else - { - sweapon = "metalstorm_mms_zm"; - } - } - - return sweapon; -} - grief_laststand_weapon_save(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration) { self.grief_savedweapon_weapons = self getweaponslist();