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["prev_weapon_name"] = "";
self.weapon_slots = [];
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
while (1)
{
wait 0.05;
if (!is_player_valid(self) || !self hasPerk("specialty_additionalprimaryweapon"))
if (!self hasPerk("specialty_additionalprimaryweapon"))
{
if (vars["prev_weapon_name"] != "")
{
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
self setClientDvar("additionalPrimaryWeaponName", "");
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"] != "")
{
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = undefined;
self setClientDvar("additionalPrimaryWeaponName", "");
vars["prev_weapon_name"] = "";
}
@ -2676,11 +2723,12 @@ additionalprimaryweapon_indicator()
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"]);
if (vars["prev_weapon_name"] != vars["weapon_name"])
{
self.weapon_to_take_by_losing_specialty_additionalprimaryweapon = vars["weapon"];
self setClientDvar("additionalPrimaryWeaponName", vars["weapon_name"]);
vars["prev_weapon_name"] = vars["weapon_name"];
}

View File

@ -1215,24 +1215,15 @@ 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;
while (pwtcbt >= 3)
{
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"];
@ -1276,10 +1267,18 @@ take_additionalprimaryweapon()
}
if (weapon_to_take == self getcurrentweapon())
self switchtoweapon(primary_weapons_that_can_be_taken[0]);
{
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))