1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 15:17:57 -05:00

Mule Kick: save additional weapon slot properly

Search & Rez: fix Mule Kick weapon not being saved if alive on round restart
This commit is contained in:
Jbleezy
2024-01-27 05:11:58 -08:00
parent 33195bbb2d
commit 82b4d369b0
5 changed files with 122 additions and 65 deletions

View File

@ -1215,72 +1215,71 @@ take_additionalprimaryweapon()
self.a_saved_weapon = undefined;
if (isdefined(self._retain_perks) && self._retain_perks || isdefined(self._retain_perks_array) && (isdefined(self._retain_perks_array["specialty_additionalprimaryweapon"]) && self._retain_perks_array["specialty_additionalprimaryweapon"]))
return weapon_to_take;
return undefined;
primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries();
weapon_to_take = self.weapon_to_take_by_losing_specialty_additionalprimaryweapon;
for (i = 0; i < primaryweapons.size; i++)
if (!isDefined(weapon_to_take) || !self hasWeapon(weapon_to_take))
{
if (maps\mp\zombies\_zm_weapons::is_weapon_included(primaryweapons[i]) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded(primaryweapons[i]))
primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
return undefined;
}
pwtcbt = primary_weapons_that_can_be_taken.size;
self.a_saved_weapon = maps\mp\zombies\_zm_weapons::get_player_weapondata(self, weapon_to_take);
while (pwtcbt >= 3)
name = self.a_saved_weapon["name"];
dw_name = weaponDualWieldWeaponName(name);
alt_name = weaponAltWeaponName(name);
clip_missing = weaponClipSize(name) - self.a_saved_weapon["clip"];
if (clip_missing > self.a_saved_weapon["stock"])
{
weapon_to_take = primary_weapons_that_can_be_taken[pwtcbt - 1];
pwtcbt--;
self.a_saved_weapon = maps\mp\zombies\_zm_weapons::get_player_weapondata(self, weapon_to_take);
name = self.a_saved_weapon["name"];
dw_name = weaponDualWieldWeaponName(name);
alt_name = weaponAltWeaponName(name);
clip_missing = weaponClipSize(name) - self.a_saved_weapon["clip"];
if (clip_missing > self.a_saved_weapon["stock"])
{
clip_missing = self.a_saved_weapon["stock"];
}
self.a_saved_weapon["clip"] += clip_missing;
self.a_saved_weapon["stock"] -= clip_missing;
if (dw_name != "none")
{
clip_dualwield_missing = weaponClipSize(dw_name) - self.a_saved_weapon["lh_clip"];
if (clip_dualwield_missing > self.a_saved_weapon["stock"])
{
clip_dualwield_missing = self.a_saved_weapon["stock"];
}
self.a_saved_weapon["lh_clip"] += clip_dualwield_missing;
self.a_saved_weapon["stock"] -= clip_dualwield_missing;
}
if (alt_name != "none")
{
clip_alt_missing = weaponClipSize(alt_name) - self.a_saved_weapon["alt_clip"];
if (clip_alt_missing > self.a_saved_weapon["alt_stock"])
{
clip_alt_missing = self.a_saved_weapon["alt_stock"];
}
self.a_saved_weapon["alt_clip"] += clip_alt_missing;
self.a_saved_weapon["alt_stock"] -= clip_alt_missing;
}
if (weapon_to_take == self getcurrentweapon())
self switchtoweapon(primary_weapons_that_can_be_taken[0]);
self takeweapon(weapon_to_take);
clip_missing = self.a_saved_weapon["stock"];
}
self.a_saved_weapon["clip"] += clip_missing;
self.a_saved_weapon["stock"] -= clip_missing;
if (dw_name != "none")
{
clip_dualwield_missing = weaponClipSize(dw_name) - self.a_saved_weapon["lh_clip"];
if (clip_dualwield_missing > self.a_saved_weapon["stock"])
{
clip_dualwield_missing = self.a_saved_weapon["stock"];
}
self.a_saved_weapon["lh_clip"] += clip_dualwield_missing;
self.a_saved_weapon["stock"] -= clip_dualwield_missing;
}
if (alt_name != "none")
{
clip_alt_missing = weaponClipSize(alt_name) - self.a_saved_weapon["alt_clip"];
if (clip_alt_missing > self.a_saved_weapon["alt_stock"])
{
clip_alt_missing = self.a_saved_weapon["alt_stock"];
}
self.a_saved_weapon["alt_clip"] += clip_alt_missing;
self.a_saved_weapon["alt_stock"] -= clip_alt_missing;
}
if (weapon_to_take == self getcurrentweapon())
{
for (i = 0; i < self.weapon_slots.size; i++)
{
if (isdefined(self.weapon_slots[i]) && self.weapon_slots[i] != weapon_to_take)
{
self switchtoweapon(self.weapon_slots[i]);
break;
}
}
}
self takeweapon(weapon_to_take);
return weapon_to_take;
}

View File

@ -154,13 +154,17 @@ round_end(winner)
foreach (player in players)
{
// don't spawn tombstone powerup on next down
player.hasperkspecialtytombstone = undefined;
if (is_player_valid(player))
{
// don't give perk
player notify("perk_abort_drinking");
// stop active perks
foreach (perk in player.perks_active)
{
player notify(perk + "_stop");
}
// save weapons
player [[level._game_module_player_laststand_callback]]();
}
@ -269,6 +273,8 @@ zombie_goto_round(target_round)
game["allies_spawnpoints_randomized"] = undefined;
set_game_var("switchedsides", !get_game_var("switchedsides"));
waittillframeend; // wait for active perks to be stopped
maps\mp\zombies\_zm_game_module::respawn_players();
wait 0.05; // let all players fully respawn

View File

@ -875,6 +875,10 @@ perk_think(perk)
}
break;
case "specialty_scavenger":
self.hasperkspecialtytombstone = undefined;
break;
}
if (isDefined(level._custom_perks[perk]) && isDefined(level._custom_perks[perk].player_thread_take))

View File

@ -300,7 +300,7 @@ player_perk_pause(perk)
if (issubstr(perk, "specialty_scavenger"))
{
self.hasperkspecialtytombstone = 0;
self.hasperkspecialtytombstone = undefined;
}
if (isDefined(level._custom_perks[perk]) && isDefined(level._custom_perks[perk].player_thread_take))