mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-07 21:59:49 -05:00
560 lines
14 KiB
Plaintext
560 lines
14 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\gametypes_zm\_hud_util;
|
|
|
|
revive_do_revive(playerbeingrevived, revivergun)
|
|
{
|
|
self thread revive_give_back_weapons_on_player_suicide(playerbeingrevived, revivergun);
|
|
|
|
self thread revive_check_for_weapon_change();
|
|
|
|
playerbeingrevived_player = playerbeingrevived;
|
|
playerbeingrevived_player.revive_hud.y = -160;
|
|
beingrevivedprogressbar_y = level.primaryprogressbary * -1;
|
|
|
|
if (isDefined(playerbeingrevived.e_chugabud_player))
|
|
{
|
|
playerbeingrevived_player = playerbeingrevived.e_chugabud_player;
|
|
playerbeingrevived_player.revive_hud.y = -50;
|
|
beingrevivedprogressbar_y = level.secondaryprogressbary * -2;
|
|
}
|
|
|
|
revivetime = 3;
|
|
|
|
if (self hasperk("specialty_quickrevive"))
|
|
{
|
|
revivetime /= 1.5;
|
|
}
|
|
|
|
if (self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active())
|
|
{
|
|
revivetime *= 0.5;
|
|
}
|
|
|
|
timer = 0;
|
|
revived = 0;
|
|
playerbeingrevived.revivetrigger.beingrevived = 1;
|
|
playerbeingrevived.revivetrigger sethintstring("");
|
|
|
|
if (playerbeingrevived_player != self)
|
|
{
|
|
playerbeingrevived_player.revive_hud settext(&"ZOMBIE_PLAYER_IS_REVIVING_YOU", self);
|
|
playerbeingrevived_player maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade(revivetime);
|
|
}
|
|
|
|
if (isplayer(playerbeingrevived))
|
|
{
|
|
playerbeingrevived startrevive(self);
|
|
}
|
|
|
|
if (!isDefined(playerbeingrevived_player.beingrevivedprogressbar) && playerbeingrevived_player != self)
|
|
{
|
|
playerbeingrevived_player.beingrevivedprogressbar = playerbeingrevived_player createprimaryprogressbar();
|
|
playerbeingrevived_player.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, beingrevivedprogressbar_y);
|
|
playerbeingrevived_player.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1);
|
|
playerbeingrevived_player.beingrevivedprogressbar.hidewheninmenu = 1;
|
|
playerbeingrevived_player.beingrevivedprogressbar.bar.hidewheninmenu = 1;
|
|
playerbeingrevived_player.beingrevivedprogressbar.barframe.hidewheninmenu = 1;
|
|
playerbeingrevived_player.beingrevivedprogressbar.sort = 1;
|
|
playerbeingrevived_player.beingrevivedprogressbar.bar.sort = 2;
|
|
playerbeingrevived_player.beingrevivedprogressbar.barframe.sort = 3;
|
|
playerbeingrevived_player.beingrevivedprogressbar.barframe destroy();
|
|
playerbeingrevived_player.beingrevivedprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission();
|
|
}
|
|
|
|
if (!isDefined(self.reviveprogressbar))
|
|
{
|
|
self.reviveprogressbar = self createprimaryprogressbar();
|
|
self.reviveprogressbar.bar.color = (0.5, 0.5, 1);
|
|
self.reviveprogressbar.foreground = 1;
|
|
self.reviveprogressbar.bar.foreground = 1;
|
|
self.reviveprogressbar.barframe.foreground = 1;
|
|
self.reviveprogressbar.sort = 1;
|
|
self.reviveprogressbar.bar.sort = 2;
|
|
self.reviveprogressbar.barframe.sort = 3;
|
|
self.reviveprogressbar.barframe destroy();
|
|
self.reviveprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission();
|
|
}
|
|
|
|
if (!isDefined(self.revivetexthud))
|
|
{
|
|
self.revivetexthud = newclienthudelem(self);
|
|
}
|
|
|
|
self thread laststand_clean_up_on_disconnect(playerbeingrevived_player, revivergun);
|
|
|
|
if (!isDefined(self.is_reviving_any))
|
|
{
|
|
self.is_reviving_any = 0;
|
|
}
|
|
|
|
self.is_reviving_any++;
|
|
self thread laststand_clean_up_reviving_any(playerbeingrevived_player);
|
|
self.reviveprogressbar updatebar(0.01, 1 / revivetime);
|
|
|
|
if (isDefined(playerbeingrevived_player.beingrevivedprogressbar))
|
|
{
|
|
playerbeingrevived_player.beingrevivedprogressbar updatebar(0.01, 1 / revivetime);
|
|
}
|
|
|
|
self.revivetexthud.alignx = "center";
|
|
self.revivetexthud.aligny = "middle";
|
|
self.revivetexthud.horzalign = "center";
|
|
self.revivetexthud.vertalign = "bottom";
|
|
self.revivetexthud.y = -113;
|
|
|
|
if (self issplitscreen())
|
|
{
|
|
self.revivetexthud.y = -347;
|
|
}
|
|
|
|
self.revivetexthud.foreground = 1;
|
|
self.revivetexthud.font = "default";
|
|
self.revivetexthud.fontscale = 1.8;
|
|
self.revivetexthud.alpha = 1;
|
|
self.revivetexthud.color = (1, 1, 1);
|
|
self.revivetexthud.hidewheninmenu = 1;
|
|
|
|
if (self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active())
|
|
{
|
|
self.revivetexthud.color = (0.5, 0.5, 1);
|
|
}
|
|
|
|
self.revivetexthud settext(&"ZOMBIE_REVIVING");
|
|
self thread maps\mp\zombies\_zm_laststand::check_for_failed_revive(playerbeingrevived);
|
|
|
|
while (self maps\mp\zombies\_zm_laststand::is_reviving(playerbeingrevived))
|
|
{
|
|
wait 0.05;
|
|
|
|
timer += 0.05;
|
|
|
|
if (self maps\mp\zombies\_zm_laststand::player_is_in_laststand())
|
|
{
|
|
break;
|
|
}
|
|
else if (isDefined(playerbeingrevived.revivetrigger.auto_revive) && playerbeingrevived.revivetrigger.auto_revive == 1)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if (timer >= revivetime)
|
|
{
|
|
revived = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isDefined(playerbeingrevived_player.beingrevivedprogressbar))
|
|
{
|
|
if (!flag("wait_and_revive"))
|
|
{
|
|
playerbeingrevived_player.beingrevivedprogressbar destroyelem();
|
|
}
|
|
}
|
|
|
|
if (isDefined(playerbeingrevived_player.revive_hud))
|
|
{
|
|
playerbeingrevived_player.revive_hud.y = -160;
|
|
|
|
if (!flag("wait_and_revive"))
|
|
{
|
|
playerbeingrevived_player.revive_hud settext("");
|
|
}
|
|
}
|
|
|
|
if (isDefined(self.reviveprogressbar))
|
|
{
|
|
self.reviveprogressbar destroyelem();
|
|
}
|
|
|
|
if (isDefined(self.revivetexthud))
|
|
{
|
|
self.revivetexthud destroy();
|
|
}
|
|
|
|
if (isDefined(playerbeingrevived.revivetrigger.auto_revive) && playerbeingrevived.revivetrigger.auto_revive == 1)
|
|
{
|
|
|
|
}
|
|
else if (!revived)
|
|
{
|
|
if (isplayer(playerbeingrevived))
|
|
{
|
|
playerbeingrevived stoprevive(self);
|
|
}
|
|
}
|
|
|
|
playerbeingrevived.revivetrigger sethintstring(&"ZOMBIE_BUTTON_TO_REVIVE_PLAYER");
|
|
playerbeingrevived.revivetrigger.beingrevived = 0;
|
|
self notify("do_revive_ended_normally");
|
|
self.is_reviving_any--;
|
|
|
|
if (!revived)
|
|
{
|
|
playerbeingrevived thread maps\mp\zombies\_zm_laststand::checkforbleedout(self);
|
|
}
|
|
|
|
return revived;
|
|
}
|
|
|
|
revive_give_back_weapons_on_player_suicide(playerbeingrevived, revivergun)
|
|
{
|
|
self notify("revive_give_back_weapons_on_player_suicide");
|
|
self endon("revive_give_back_weapons_on_player_suicide");
|
|
self endon("do_revive_ended_normally");
|
|
|
|
playerbeingrevived waittill("player_suicide");
|
|
|
|
self maps\mp\zombies\_zm_laststand::revive_give_back_weapons(revivergun);
|
|
}
|
|
|
|
revive_check_for_weapon_change()
|
|
{
|
|
self notify("revive_check_for_weapon_change");
|
|
self endon("revive_check_for_weapon_change");
|
|
self endon("do_revive_ended_normally");
|
|
|
|
self.revive_weapon_changed = 0;
|
|
|
|
self waittill_any("weapon_change", "weapon_change_complete");
|
|
|
|
self.revive_weapon_changed = 1;
|
|
}
|
|
|
|
laststand_clean_up_on_disconnect(playerbeingrevived, revivergun)
|
|
{
|
|
self endon("do_revive_ended_normally");
|
|
|
|
revivetrigger = playerbeingrevived.revivetrigger;
|
|
|
|
playerbeingrevived waittill("disconnect");
|
|
|
|
if (isDefined(revivetrigger))
|
|
{
|
|
revivetrigger delete();
|
|
}
|
|
|
|
self maps\mp\zombies\_zm_laststand::cleanup_suicide_hud();
|
|
|
|
if (isDefined(self.reviveprogressbar))
|
|
{
|
|
self.reviveprogressbar destroyelem();
|
|
}
|
|
|
|
if (isDefined(self.revivetexthud))
|
|
{
|
|
self.revivetexthud destroy();
|
|
}
|
|
|
|
self maps\mp\zombies\_zm_laststand::revive_give_back_weapons(revivergun);
|
|
}
|
|
|
|
laststand_clean_up_reviving_any(playerbeingrevived)
|
|
{
|
|
self endon("do_revive_ended_normally");
|
|
|
|
playerbeingrevived waittill_any("disconnect", "zombified", "stop_revive_trigger", "chugabud_effects_cleanup");
|
|
|
|
self.is_reviving_any--;
|
|
|
|
if (self.is_reviving_any < 0)
|
|
{
|
|
self.is_reviving_any = 0;
|
|
}
|
|
|
|
if (isDefined(playerbeingrevived.beingrevivedprogressbar))
|
|
{
|
|
playerbeingrevived.beingrevivedprogressbar destroyelem();
|
|
}
|
|
|
|
if (isDefined(playerbeingrevived.revive_hud))
|
|
{
|
|
playerbeingrevived.revive_hud settext("");
|
|
}
|
|
|
|
if (!self.is_reviving_any)
|
|
{
|
|
if (isDefined(self.reviveprogressbar))
|
|
{
|
|
self.reviveprogressbar destroyelem();
|
|
}
|
|
|
|
if (isDefined(self.revivetexthud))
|
|
{
|
|
self.revivetexthud destroy();
|
|
}
|
|
}
|
|
}
|
|
|
|
revive_give_back_weapons(gun)
|
|
{
|
|
revive_tool = level.revive_tool;
|
|
|
|
if (is_true(self.afterlife))
|
|
{
|
|
revive_tool = level.afterlife_revive_tool;
|
|
}
|
|
|
|
cur_wep = self getCurrentWeapon();
|
|
|
|
self takeweapon(revive_tool);
|
|
|
|
if (self maps\mp\zombies\_zm_laststand::player_is_in_laststand())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (cur_wep != revive_tool && is_true(self.revive_weapon_changed))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (self hasWeapon(level.item_meat_name))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (self hasWeapon("screecher_arms_zm"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (gun != "none" && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon(gun))
|
|
{
|
|
self switchtoweapon(gun);
|
|
}
|
|
else
|
|
{
|
|
primaryweapons = self getweaponslistprimaries();
|
|
|
|
if (isDefined(primaryweapons) && primaryweapons.size > 0)
|
|
{
|
|
self switchtoweapon(primaryweapons[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
revive_hud_think()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (1)
|
|
{
|
|
wait 0.1;
|
|
|
|
if (!maps\mp\zombies\_zm_laststand::player_any_player_in_laststand())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
players = get_players();
|
|
playertorevive = undefined;
|
|
i = 0;
|
|
|
|
while (i < players.size)
|
|
{
|
|
if (!isDefined(players[i].revivetrigger) || !isDefined(players[i].revivetrigger.createtime))
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (!isDefined(playertorevive) || playertorevive.revivetrigger.createtime > players[i].revivetrigger.createtime)
|
|
{
|
|
playertorevive = players[i];
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
if (isDefined(playertorevive))
|
|
{
|
|
i = 0;
|
|
|
|
while (i < players.size)
|
|
{
|
|
if (players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand())
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (getDvar("g_gametype") == "vs")
|
|
{
|
|
if (players[i].team != playertorevive.team)
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (is_encounter())
|
|
{
|
|
if (players[i].sessionteam != playertorevive.sessionteam)
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (is_true(level.hide_revive_message))
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
players[i] thread maps\mp\zombies\_zm_laststand::faderevivemessageover(playertorevive, 3);
|
|
i++;
|
|
}
|
|
|
|
playertorevive.revivetrigger.createtime = undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
auto_revive(reviver, dont_enable_weapons)
|
|
{
|
|
if (isdefined(self.revivetrigger))
|
|
{
|
|
self.revivetrigger.auto_revive = 1;
|
|
|
|
if (self.revivetrigger.beingrevived == 1)
|
|
{
|
|
while (true)
|
|
{
|
|
if (self.revivetrigger.beingrevived == 0)
|
|
break;
|
|
|
|
wait_network_frame();
|
|
}
|
|
}
|
|
|
|
self.revivetrigger.auto_trigger = 0;
|
|
}
|
|
|
|
self reviveplayer();
|
|
self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg("health_reboot", 1, 0);
|
|
setclientsysstate("lsm", "0", self);
|
|
self notify("stop_revive_trigger");
|
|
|
|
if (isdefined(self.revivetrigger))
|
|
{
|
|
self.revivetrigger delete();
|
|
self.revivetrigger = undefined;
|
|
}
|
|
|
|
self cleanup_suicide_hud();
|
|
|
|
if (!isdefined(dont_enable_weapons) || dont_enable_weapons == 0)
|
|
self laststand_enable_player_weapons();
|
|
|
|
self allowjump(1);
|
|
self.ignoreme = 0;
|
|
self.laststand = undefined;
|
|
|
|
valid_reviver = 1;
|
|
|
|
if (is_gametype_active("zgrief") && reviver == self)
|
|
{
|
|
valid_reviver = 0;
|
|
}
|
|
|
|
if (valid_reviver)
|
|
{
|
|
reviver.revives++;
|
|
reviver maps\mp\zombies\_zm_stats::increment_client_stat("revives");
|
|
reviver maps\mp\zombies\_zm_stats::increment_player_stat("revives");
|
|
self recordplayerrevivezombies(reviver);
|
|
maps\mp\_demo::bookmark("zm_player_revived", gettime(), self, reviver);
|
|
}
|
|
|
|
self notify("player_revived", reviver);
|
|
}
|
|
|
|
playerlaststand(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration)
|
|
{
|
|
self notify("entering_last_stand");
|
|
|
|
if (isdefined(level._game_module_player_laststand_callback))
|
|
self [[level._game_module_player_laststand_callback]](einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration);
|
|
|
|
if (self player_is_in_laststand())
|
|
return;
|
|
|
|
if (isdefined(self.in_zombify_call) && self.in_zombify_call)
|
|
return;
|
|
|
|
self thread player_last_stand_stats(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration);
|
|
|
|
if (isdefined(level.playerlaststand_func))
|
|
[[level.playerlaststand_func]](einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration);
|
|
|
|
self.health = 1;
|
|
self.laststand = 1;
|
|
self.ignoreme = 1;
|
|
self thread maps\mp\gametypes_zm\_gameobjects::onplayerlaststand();
|
|
self thread maps\mp\zombies\_zm_buildables::onplayerlaststand();
|
|
|
|
if (!(isdefined(self.no_revive_trigger) && self.no_revive_trigger))
|
|
self revive_trigger_spawn();
|
|
else
|
|
self undolaststand();
|
|
|
|
if (isdefined(self.is_zombie) && self.is_zombie)
|
|
{
|
|
self takeallweapons();
|
|
|
|
if (isdefined(attacker) && isplayer(attacker) && attacker != self)
|
|
attacker notify("killed_a_zombie_player", einflictor, self, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration);
|
|
}
|
|
else
|
|
{
|
|
self laststand_disable_player_weapons();
|
|
self laststand_give_pistol();
|
|
}
|
|
|
|
if (isdefined(level.playersuicideallowed) && level.playersuicideallowed && get_players().size > 1)
|
|
{
|
|
if (!isdefined(level.canplayersuicide) || self [[level.canplayersuicide]]())
|
|
self thread suicide_trigger_spawn();
|
|
}
|
|
|
|
if (level.laststandgetupallowed)
|
|
self thread laststand_getup();
|
|
else
|
|
{
|
|
bleedout_time = getdvarfloat("player_lastStandBleedoutTime");
|
|
self thread laststand_bleedout(bleedout_time);
|
|
}
|
|
|
|
if ("zcleansed" != level.gametype)
|
|
maps\mp\_demo::bookmark("zm_player_downed", gettime(), self);
|
|
|
|
self notify("player_downed");
|
|
self thread refire_player_downed();
|
|
self thread cleanup_laststand_on_disconnect();
|
|
}
|
|
|
|
revive_hud_create()
|
|
{
|
|
if (isDefined(self.revive_hud))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.revive_hud = newclienthudelem(self);
|
|
self.revive_hud.alignx = "center";
|
|
self.revive_hud.aligny = "middle";
|
|
self.revive_hud.horzalign = "center";
|
|
self.revive_hud.vertalign = "bottom";
|
|
self.revive_hud.foreground = 1;
|
|
self.revive_hud.font = "default";
|
|
self.revive_hud.fontscale = 1.5;
|
|
self.revive_hud.alpha = 0;
|
|
self.revive_hud.color = (1, 1, 1);
|
|
self.revive_hud.hidewheninmenu = 1;
|
|
self.revive_hud settext("");
|
|
self.revive_hud.y = -160;
|
|
} |