1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00
BO2-Reimagined/scripts/zm/replaced/zm_tomb_dig.gsc
Jbleezy 4c7b0f53c7 Bouncing Betty: replace Claymore on Origins
Claymore: increase explosion radius
Move certain vars to not exceed canonical string table limit
2024-02-09 18:39:06 -08:00

282 lines
8.6 KiB
Plaintext

#include maps\mp\zm_tomb_dig;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zm_tomb_utility;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_audio_announcer;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zm_tomb_main_quest;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_weap_claymore;
#include maps\mp\zombies\_zm_powerup_zombie_blood;
init_shovel()
{
precachemodel("p6_zm_tm_dig_mound");
precachemodel("p6_zm_tm_dig_mound_blood");
precachemodel("p6_zm_tm_shovel");
precachemodel("zombie_pickup_perk_bottle");
precachemodel("t6_wpn_claymore_world");
maps\mp\zombies\_zm_audio_announcer::createvox("blood_money", "powerup_blood_money");
onplayerconnect_callback(::init_shovel_player);
level.get_player_perk_purchase_limit = ::get_player_perk_purchase_limit;
level.bonus_points_powerup_override = ::bonus_points_powerup_override;
level thread dig_powerups_tracking();
level thread dig_spots_init();
registerclientfield("world", "shovel_player1", 14000, 2, "int", undefined, 0);
registerclientfield("world", "shovel_player2", 14000, 2, "int", undefined, 0);
registerclientfield("world", "shovel_player3", 14000, 2, "int", undefined, 0);
registerclientfield("world", "shovel_player4", 14000, 2, "int", undefined, 0);
registerclientfield("world", "helmet_player1", 14000, 1, "int", undefined, 0);
registerclientfield("world", "helmet_player2", 14000, 1, "int", undefined, 0);
registerclientfield("world", "helmet_player3", 14000, 1, "int", undefined, 0);
registerclientfield("world", "helmet_player4", 14000, 1, "int", undefined, 0);
}
init_shovel_player()
{
self.dig_vars["has_shovel"] = 1;
self.dig_vars["has_upgraded_shovel"] = 0;
self.dig_vars["has_helmet"] = 0;
self.dig_vars["n_spots_dug"] = 0;
self.dig_vars["n_losing_streak"] = 0;
n_player = self getentitynumber() + 1;
level setclientfield("shovel_player" + n_player, 1);
self thread dig_disconnect_watch(n_player);
}
dig_disconnect_watch(n_player)
{
self waittill("disconnect");
level setclientfield("shovel_player" + n_player, 0);
level setclientfield("helmet_player" + n_player, 0);
}
waittill_dug(s_dig_spot)
{
while (true)
{
self waittill("trigger", player);
if (isdefined(player.dig_vars["has_shovel"]) && player.dig_vars["has_shovel"])
{
player playsound("evt_dig");
s_dig_spot.dug = 1;
level.n_dig_spots_cur--;
playfx(level._effect["digging"], self.origin);
player setclientfieldtoplayer("player_rumble_and_shake", 1);
player maps\mp\zombies\_zm_stats::increment_client_stat("tomb_dig", 0);
player maps\mp\zombies\_zm_stats::increment_player_stat("tomb_dig");
s_staff_piece = s_dig_spot maps\mp\zm_tomb_main_quest::dig_spot_get_staff_piece(player);
if (isdefined(s_staff_piece))
{
s_staff_piece maps\mp\zm_tomb_main_quest::show_ice_staff_piece(self.origin);
player dig_reward_dialog("dig_staff_part");
}
else
{
n_good_chance = 50;
if (player.dig_vars["n_spots_dug"] == 0 || player.dig_vars["n_losing_streak"] == 3)
{
player.dig_vars["n_losing_streak"] = 0;
n_good_chance = 100;
}
if (player.dig_vars["has_upgraded_shovel"])
{
if (!player.dig_vars["has_helmet"])
{
player.dig_vars["n_spots_dug"]++;
if (player.dig_vars["n_spots_dug"] >= 40)
{
player.dig_vars["has_helmet"] = 1;
n_player = player getentitynumber() + 1;
level setclientfield("helmet_player" + n_player, 1);
player playsoundtoplayer("zmb_squest_golden_anything", player);
player maps\mp\zombies\_zm_stats::increment_client_stat("tomb_golden_hard_hat", 0);
player maps\mp\zombies\_zm_stats::increment_player_stat("tomb_golden_hard_hat");
return;
}
}
n_good_chance = 70;
}
n_prize_roll = randomint(100);
if (n_prize_roll > n_good_chance)
{
if (cointoss())
{
player dig_reward_dialog("dig_grenade");
self thread dig_up_grenade(player);
}
else
{
player dig_reward_dialog("dig_zombie");
self thread dig_up_zombie(player, s_dig_spot);
}
player.dig_vars["n_losing_streak"]++;
}
else if (cointoss())
self thread dig_up_powerup(player);
else
{
player dig_reward_dialog("dig_gun");
self thread dig_up_weapon(player);
}
}
if (!player.dig_vars["has_upgraded_shovel"])
{
player.dig_vars["n_spots_dug"]++;
if (player.dig_vars["n_spots_dug"] >= 20)
{
player.dig_vars["has_upgraded_shovel"] = 1;
player thread ee_zombie_blood_dig();
n_player = player getentitynumber() + 1;
level setclientfield("shovel_player" + n_player, 2);
player playsoundtoplayer("zmb_squest_golden_anything", player);
player maps\mp\zombies\_zm_stats::increment_client_stat("tomb_golden_shovel", 0);
player maps\mp\zombies\_zm_stats::increment_player_stat("tomb_golden_shovel");
}
}
return;
}
}
}
increment_player_perk_purchase_limit()
{
perk = maps\mp\zombies\_zm_perk_random::get_weighted_random_perk(self);
if (self hasPerk(perk))
{
return;
}
self maps\mp\zombies\_zm_perks::give_perk(perk);
}
dig_up_weapon(digger)
{
a_common_weapons = array("ballista_zm", "c96_zm", "870mcs_zm");
a_rare_weapons = array("dsr50_zm", "srm1216_zm");
if (digger.dig_vars["has_upgraded_shovel"])
a_rare_weapons = combinearrays(a_rare_weapons, array("bouncingbetty_zm", "vector_zm", "ksg_zm", "mp40_zm", "mp44_zm"));
str_weapon = undefined;
if (randomint(100) < 90)
str_weapon = a_common_weapons[getarraykeys(a_common_weapons)[randomint(getarraykeys(a_common_weapons).size)]];
else
str_weapon = a_rare_weapons[getarraykeys(a_rare_weapons)[randomint(getarraykeys(a_rare_weapons).size)]];
v_spawnpt = self.origin + (0, 0, 40);
v_spawnang = (0, 0, 0);
str_spec_model = undefined;
if (str_weapon == "bouncingbetty_zm")
{
str_spec_model = "t6_wpn_bouncing_betty_world";
v_spawnang += vectorscale((0, 1, 0), 90.0);
}
v_angles = digger getplayerangles();
v_angles = (0, v_angles[1], 0) + vectorscale((0, 1, 0), 90.0) + v_spawnang;
m_weapon = spawn_weapon_model(str_weapon, str_spec_model, v_spawnpt, v_angles);
if (str_weapon == "bouncingbetty_zm")
{
m_weapon setmodel("t6_wpn_bouncing_betty_world");
v_spawnang += vectorscale((0, 0, 1), 90.0);
}
m_weapon.angles = v_angles;
m_weapon playloopsound("evt_weapon_digup");
m_weapon thread timer_til_despawn(v_spawnpt, 40 * -1);
m_weapon endon("dig_up_weapon_timed_out");
playfxontag(level._effect["special_glow"], m_weapon, "tag_origin");
m_weapon.trigger = tomb_spawn_trigger_radius(v_spawnpt, 100, 1);
m_weapon.trigger.hint_string = &"ZM_TOMB_X2PU";
m_weapon.trigger.hint_parm1 = getweapondisplayname(str_weapon);
while (1)
{
m_weapon.trigger waittill("trigger", player);
current_weapon = player getCurrentWeapon();
if (is_player_valid(player) && !player.is_drinking && !is_melee_weapon(current_weapon) && !is_placeable_mine(current_weapon) && !is_equipment(current_weapon) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active())
{
break;
}
}
m_weapon.trigger notify("weapon_grabbed");
m_weapon.trigger thread swap_weapon(str_weapon, player);
if (isdefined(m_weapon.trigger))
{
m_weapon.trigger tomb_unitrigger_delete();
m_weapon.trigger = undefined;
}
if (isdefined(m_weapon))
m_weapon delete();
if (player != digger)
digger notify("dig_up_weapon_shared");
}
swap_weapon(str_weapon, e_player)
{
str_current_weapon = e_player getcurrentweapon();
if (str_weapon == "bouncingbetty_zm")
{
if (!e_player hasweapon(str_weapon))
{
e_player thread scripts\zm\reimagined\_zm_weap_bouncingbetty::show_betty_hint("betty_purchased");
e_player thread scripts\zm\reimagined\_zm_weap_bouncingbetty::betty_setup();
e_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog("weapon_pickup", "grenade");
}
else
e_player givemaxammo(str_weapon);
return;
}
if (is_player_valid(e_player) && !e_player.is_drinking && !is_placeable_mine(str_current_weapon) && !is_equipment(str_current_weapon) && level.revive_tool != str_current_weapon && "none" != str_current_weapon && !e_player hacker_active())
{
if (!e_player hasweapon(str_weapon))
e_player take_old_weapon_and_give_new(str_current_weapon, str_weapon);
else
e_player givemaxammo(str_weapon);
}
}
take_old_weapon_and_give_new(current_weapon, weapon)
{
a_weapons = self getweaponslistprimaries();
if (isdefined(a_weapons) && a_weapons.size >= get_player_weapon_limit(self))
self takeweapon(current_weapon);
self giveweapon(weapon);
self givestartammo(weapon);
self switchtoweapon(weapon);
}