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:
parent
33195bbb2d
commit
82b4d369b0
@ -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"];
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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))
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user