1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -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

@ -2637,14 +2637,18 @@ additionalprimaryweapon_indicator()
vars = []; vars = [];
vars["prev_weapon_name"] = ""; vars["prev_weapon_name"] = "";
self.weapon_slots = [];
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
while (1) while (1)
{ {
wait 0.05; wait 0.05;
if (!is_player_valid(self) || !self hasPerk("specialty_additionalprimaryweapon")) if (!self hasPerk("specialty_additionalprimaryweapon"))
{ {
if (vars["prev_weapon_name"] != "") if (vars["prev_weapon_name"] != "")
{ {
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
self setClientDvar("additionalPrimaryWeaponName", ""); self setClientDvar("additionalPrimaryWeaponName", "");
vars["prev_weapon_name"] = ""; vars["prev_weapon_name"] = "";
} }
@ -2663,12 +2667,55 @@ additionalprimaryweapon_indicator()
} }
} }
vars["size"] = vars["primary_weapons_that_can_be_taken"].size; for (i = 0; i < self.weapon_slots.size; i++)
{
if (!self hasWeapon(self.weapon_slots[i]))
{
self.weapon_slots[i] = undefined;
}
}
if (vars["size"] < 3) // remove any trailing undefined slots
for (i = self.weapon_slots.size - 1; i >= 0; i--)
{
if (isDefined(self.weapon_slots[i]))
{
break;
}
arrayRemoveIndex(self.weapon_slots[i], i);
}
for (i = 0; i < vars["primary_weapons_that_can_be_taken"].size; i++)
{
vars["weapon"] = vars["primary_weapons_that_can_be_taken"][i];
if (!isInArray(self.weapon_slots, vars["weapon"]))
{
vars["added"] = 0;
for (j = 0; j < self.weapon_slots.size; j++)
{
if (!isDefined(self.weapon_slots[j]))
{
vars["added"] = 1;
self.weapon_slots[j] = vars["weapon"];
break;
}
}
if (!vars["added"])
{
self.weapon_slots[self.weapon_slots.size] = vars["weapon"];
}
}
}
if (vars["primary_weapons_that_can_be_taken"].size < 3)
{ {
if (vars["prev_weapon_name"] != "") if (vars["prev_weapon_name"] != "")
{ {
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
self setClientDvar("additionalPrimaryWeaponName", ""); self setClientDvar("additionalPrimaryWeaponName", "");
vars["prev_weapon_name"] = ""; vars["prev_weapon_name"] = "";
} }
@ -2676,11 +2723,12 @@ additionalprimaryweapon_indicator()
continue; continue;
} }
vars["weapon"] = vars["primary_weapons_that_can_be_taken"][vars["size"] - 1]; vars["weapon"] = self.weapon_slots[self.weapon_slots.size - 1];
vars["weapon_name"] = getweapondisplayname(vars["weapon"]); vars["weapon_name"] = getweapondisplayname(vars["weapon"]);
if (vars["prev_weapon_name"] != vars["weapon_name"]) if (vars["prev_weapon_name"] != vars["weapon_name"])
{ {
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = vars["weapon"];
self setClientDvar("additionalPrimaryWeaponName", vars["weapon_name"]); self setClientDvar("additionalPrimaryWeaponName", vars["weapon_name"]);
vars["prev_weapon_name"] = vars["weapon_name"]; vars["prev_weapon_name"] = vars["weapon_name"];
} }

View File

@ -1215,72 +1215,71 @@ take_additionalprimaryweapon()
self.a_saved_weapon = undefined; 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"])) 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 = []; weapon_to_take = self.weapon_to_take_by_losing_specialty_additionalprimaryweapon;
primaryweapons = self getweaponslistprimaries();
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])) return undefined;
primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
} }
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]; clip_missing = self.a_saved_weapon["stock"];
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);
} }
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; return weapon_to_take;
} }

View File

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

View File

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