mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 15:17:57 -05:00
MOTD and Origins: space out items on HUD evenly MOTD: add initial key state on HUD Origins: fix crash from record color change on HUD
694 lines
21 KiB
Plaintext
694 lines
21 KiB
Plaintext
#include maps\mp\zm_tomb_main_quest;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\zombies\_zm_craftables;
|
|
#include maps\mp\zombies\_zm_sidequests;
|
|
#include maps\mp\zm_tomb_utility;
|
|
#include maps\mp\zombies\_zm_net;
|
|
#include maps\mp\zm_tomb_quest_air;
|
|
#include maps\mp\zm_tomb_quest_fire;
|
|
#include maps\mp\zm_tomb_quest_ice;
|
|
#include maps\mp\zm_tomb_quest_elec;
|
|
#include maps\mp\zm_tomb_quest_crypt;
|
|
#include maps\mp\zm_tomb_chamber;
|
|
#include maps\mp\zm_tomb_vo;
|
|
#include maps\mp\zm_tomb_teleporter;
|
|
#include maps\mp\zombies\_zm_blockers;
|
|
#include maps\mp\zm_tomb_craftables;
|
|
#include maps\mp\zombies\_zm_unitrigger;
|
|
#include maps\mp\zombies\_zm_zonemgr;
|
|
#include maps\mp\zombies\_zm_challenges;
|
|
#include maps\mp\zm_tomb_ee_main_step_7;
|
|
#include maps\mp\zm_tomb_challenges;
|
|
#include maps\mp\zm_tomb_amb;
|
|
#include maps\mp\zombies\_zm_audio;
|
|
|
|
main_quest_init()
|
|
{
|
|
flag_init("dug");
|
|
flag_init("air_open");
|
|
flag_init("fire_open");
|
|
flag_init("lightning_open");
|
|
flag_init("ice_open");
|
|
flag_init("panels_solved");
|
|
flag_init("fire_solved");
|
|
flag_init("ice_solved");
|
|
flag_init("chamber_puzzle_cheat");
|
|
flag_init("activate_zone_crypt");
|
|
level.callbackvehicledamage = ::aircrystalbiplanecallback_vehicledamage;
|
|
level.game_mode_custom_onplayerdisconnect = ::player_disconnect_callback;
|
|
onplayerconnect_callback(::onplayerconnect);
|
|
staff_air = getent("prop_staff_air", "targetname");
|
|
staff_fire = getent("prop_staff_fire", "targetname");
|
|
staff_lightning = getent("prop_staff_lightning", "targetname");
|
|
staff_water = getent("prop_staff_water", "targetname");
|
|
staff_air.weapname = "staff_air_zm";
|
|
staff_fire.weapname = "staff_fire_zm";
|
|
staff_lightning.weapname = "staff_lightning_zm";
|
|
staff_water.weapname = "staff_water_zm";
|
|
staff_air.element = "air";
|
|
staff_fire.element = "fire";
|
|
staff_lightning.element = "lightning";
|
|
staff_water.element = "water";
|
|
staff_air.craftable_name = "elemental_staff_air";
|
|
staff_fire.craftable_name = "elemental_staff_fire";
|
|
staff_lightning.craftable_name = "elemental_staff_lightning";
|
|
staff_water.craftable_name = "elemental_staff_water";
|
|
staff_air.charger = getstruct("staff_air_charger", "script_noteworthy");
|
|
staff_fire.charger = getstruct("staff_fire_charger", "script_noteworthy");
|
|
staff_lightning.charger = getstruct("zone_bolt_chamber", "script_noteworthy");
|
|
staff_water.charger = getstruct("staff_ice_charger", "script_noteworthy");
|
|
staff_fire.quest_clientfield = "quest_state1";
|
|
staff_air.quest_clientfield = "quest_state2";
|
|
staff_lightning.quest_clientfield = "quest_state3";
|
|
staff_water.quest_clientfield = "quest_state4";
|
|
staff_fire.enum = 1;
|
|
staff_air.enum = 2;
|
|
staff_lightning.enum = 3;
|
|
staff_water.enum = 4;
|
|
level.a_elemental_staffs = [];
|
|
level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_air;
|
|
level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_fire;
|
|
level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_lightning;
|
|
level.a_elemental_staffs[level.a_elemental_staffs.size] = staff_water;
|
|
|
|
foreach (staff in level.a_elemental_staffs)
|
|
{
|
|
staff.charger.charges_received = 0;
|
|
staff.charger.is_inserted = 0;
|
|
staff thread place_staffs_encasement();
|
|
staff thread staff_charger_check();
|
|
staff ghost();
|
|
}
|
|
|
|
staff_air_upgraded = getent("prop_staff_air_upgraded", "targetname");
|
|
staff_fire_upgraded = getent("prop_staff_fire_upgraded", "targetname");
|
|
staff_lightning_upgraded = getent("prop_staff_lightning_upgraded", "targetname");
|
|
staff_water_upgraded = getent("prop_staff_water_upgraded", "targetname");
|
|
staff_air_upgraded.weapname = "staff_air_upgraded_zm";
|
|
staff_fire_upgraded.weapname = "staff_fire_upgraded_zm";
|
|
staff_lightning_upgraded.weapname = "staff_lightning_upgraded_zm";
|
|
staff_water_upgraded.weapname = "staff_water_upgraded_zm";
|
|
staff_air_upgraded.melee = "staff_air_melee_zm";
|
|
staff_fire_upgraded.melee = "staff_fire_melee_zm";
|
|
staff_lightning_upgraded.melee = "staff_lightning_melee_zm";
|
|
staff_water_upgraded.melee = "staff_water_melee_zm";
|
|
staff_air_upgraded.base_weapname = "staff_air_zm";
|
|
staff_fire_upgraded.base_weapname = "staff_fire_zm";
|
|
staff_lightning_upgraded.base_weapname = "staff_lightning_zm";
|
|
staff_water_upgraded.base_weapname = "staff_water_zm";
|
|
staff_air_upgraded.element = "air";
|
|
staff_fire_upgraded.element = "fire";
|
|
staff_lightning_upgraded.element = "lightning";
|
|
staff_water_upgraded.element = "water";
|
|
staff_air_upgraded.charger = staff_air.charger;
|
|
staff_fire_upgraded.charger = staff_fire.charger;
|
|
staff_lightning_upgraded.charger = staff_lightning.charger;
|
|
staff_water_upgraded.charger = staff_water.charger;
|
|
staff_fire_upgraded.enum = 1;
|
|
staff_air_upgraded.enum = 2;
|
|
staff_lightning_upgraded.enum = 3;
|
|
staff_water_upgraded.enum = 4;
|
|
staff_air.upgrade = staff_air_upgraded;
|
|
staff_fire.upgrade = staff_fire_upgraded;
|
|
staff_water.upgrade = staff_water_upgraded;
|
|
staff_lightning.upgrade = staff_lightning_upgraded;
|
|
level.a_elemental_staffs_upgraded = [];
|
|
level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_air_upgraded;
|
|
level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_fire_upgraded;
|
|
level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_lightning_upgraded;
|
|
level.a_elemental_staffs_upgraded[level.a_elemental_staffs_upgraded.size] = staff_water_upgraded;
|
|
|
|
foreach (staff_upgraded in level.a_elemental_staffs_upgraded)
|
|
{
|
|
staff_upgraded.charger.charges_received = 0;
|
|
staff_upgraded.charger.is_inserted = 0;
|
|
staff_upgraded.charger.is_charged = 0;
|
|
staff_upgraded.prev_ammo_clip = weaponclipsize(staff_upgraded.weapname);
|
|
staff_upgraded.prev_ammo_stock = weaponmaxammo(staff_upgraded.weapname);
|
|
staff_upgraded thread place_staffs_encasement();
|
|
staff_upgraded ghost();
|
|
}
|
|
|
|
foreach (staff in level.a_elemental_staffs)
|
|
{
|
|
staff.prev_ammo_clip = weaponclipsize(staff.weapname);
|
|
staff.prev_ammo_stock = weaponmaxammo(staff.weapname);
|
|
staff.upgrade.downgrade = staff;
|
|
staff.upgrade useweaponmodel(staff.weapname);
|
|
staff.upgrade showallparts();
|
|
}
|
|
|
|
level.staffs_charged = 0;
|
|
array_thread(level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func);
|
|
level thread watch_for_staff_upgrades();
|
|
level thread chambers_init();
|
|
level thread maps\mp\zm_tomb_quest_air::main();
|
|
level thread maps\mp\zm_tomb_quest_fire::main();
|
|
level thread maps\mp\zm_tomb_quest_ice::main();
|
|
level thread maps\mp\zm_tomb_quest_elec::main();
|
|
level thread maps\mp\zm_tomb_quest_crypt::main();
|
|
level thread maps\mp\zm_tomb_chamber::main();
|
|
level thread maps\mp\zm_tomb_vo::watch_occasional_line("puzzle", "puzzle_confused", "vo_puzzle_confused");
|
|
level thread maps\mp\zm_tomb_vo::watch_occasional_line("puzzle", "puzzle_good", "vo_puzzle_good");
|
|
level thread maps\mp\zm_tomb_vo::watch_occasional_line("puzzle", "puzzle_bad", "vo_puzzle_bad");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_ice_staff_clue_0", "sam_clue_dig", "elemental_staff_water_all_pieces_found");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_fire_staff_clue_0", "sam_clue_mechz", "mechz_killed");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_fire_staff_clue_1", "sam_clue_biplane", "biplane_down");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_fire_staff_clue_2", "sam_clue_zonecap", "staff_piece_capture_complete");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_lightning_staff_clue_0", "sam_clue_tank", "elemental_staff_lightning_all_pieces_found");
|
|
level thread maps\mp\zm_tomb_vo::watch_one_shot_samantha_clue("vox_sam_wind_staff_clue_0", "sam_clue_giant", "elemental_staff_air_all_pieces_found");
|
|
level.dig_spawners = getentarray("zombie_spawner_dig", "script_noteworthy");
|
|
array_thread(level.dig_spawners, ::add_spawn_function, ::dug_zombie_spawn_init);
|
|
}
|
|
|
|
zombie_spawn_func()
|
|
{
|
|
self.actor_killed_override = ::zombie_killed_override;
|
|
}
|
|
|
|
zombie_killed_override(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime)
|
|
{
|
|
if (flag("ee_sam_portal_active") && !flag("ee_souls_absorbed"))
|
|
{
|
|
maps\mp\zm_tomb_ee_main_step_7::ee_zombie_killed_override(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime);
|
|
return;
|
|
}
|
|
|
|
if (maps\mp\zm_tomb_challenges::footprint_zombie_killed(attacker))
|
|
return;
|
|
|
|
n_max_dist_sq = 9000000;
|
|
|
|
if (isplayer(attacker) || sweapon == "one_inch_punch_zm")
|
|
{
|
|
if (!flag("fire_puzzle_1_complete"))
|
|
maps\mp\zm_tomb_quest_fire::sacrifice_puzzle_zombie_killed(einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime);
|
|
|
|
s_nearest_staff = undefined;
|
|
n_nearest_dist_sq = n_max_dist_sq;
|
|
|
|
foreach (staff in level.a_elemental_staffs)
|
|
{
|
|
if (isdefined(staff.charger.full) && staff.charger.full)
|
|
continue;
|
|
|
|
if (staff.charger.is_inserted || staff.upgrade.charger.is_inserted)
|
|
{
|
|
dist_sq = distance2dsquared(self.origin, staff.origin);
|
|
|
|
if (dist_sq <= n_nearest_dist_sq)
|
|
{
|
|
n_nearest_dist_sq = dist_sq;
|
|
s_nearest_staff = staff;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isdefined(s_nearest_staff) && !isSubStr(sweapon, "staff"))
|
|
{
|
|
s_nearest_staff.charger.charges_received++;
|
|
s_nearest_staff.charger thread zombie_soul_to_charger(self, s_nearest_staff.enum);
|
|
}
|
|
}
|
|
}
|
|
|
|
place_staff_in_charger()
|
|
{
|
|
flag_set("charger_ready_" + self.enum);
|
|
v_trigger_pos = self.charger.origin;
|
|
v_trigger_pos = (v_trigger_pos[0], v_trigger_pos[1], v_trigger_pos[2] - 30.0);
|
|
|
|
if (!isDefined(self.charge_trigger))
|
|
{
|
|
self.charge_trigger = tomb_spawn_trigger_radius(v_trigger_pos, 120, 1, ::staff_charger_get_player_msg);
|
|
self.charge_trigger.require_look_at = 1;
|
|
self.charge_trigger.staff_data = self;
|
|
}
|
|
|
|
self.trigger set_unitrigger_hint_string("");
|
|
insert_message = self staff_get_insert_message();
|
|
self.charge_trigger set_unitrigger_hint_string(insert_message);
|
|
self.charge_trigger trigger_on();
|
|
|
|
waittill_staff_inserted();
|
|
}
|
|
|
|
waittill_staff_inserted()
|
|
{
|
|
while (true)
|
|
{
|
|
self.charge_trigger waittill("trigger", player);
|
|
|
|
weapon_available = 1;
|
|
|
|
if (isdefined(player))
|
|
{
|
|
weapon_available = player getcurrentweapon() == self.weapname;
|
|
|
|
if (weapon_available)
|
|
player takeweapon(self.weapname);
|
|
}
|
|
|
|
if (weapon_available)
|
|
{
|
|
self.charger.is_inserted = 1;
|
|
self thread debug_staff_charge();
|
|
maps\mp\zm_tomb_craftables::clear_player_staff(self.weapname);
|
|
self.charge_trigger set_unitrigger_hint_string("");
|
|
self.charge_trigger trigger_off();
|
|
|
|
if (isdefined(self.charger.angles))
|
|
self.angles = self.charger.angles;
|
|
|
|
self moveto(self.charger.origin, 0.05);
|
|
|
|
self waittill("movedone");
|
|
|
|
self setclientfield("staff_charger", self.enum);
|
|
self.charger.full = 0;
|
|
self show();
|
|
self playsound("zmb_squest_charge_place_staff");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
self.charge_trigger thread insert_staff_hint_charger(player, self.enum);
|
|
}
|
|
}
|
|
}
|
|
|
|
watch_for_player_pickup_staff()
|
|
{
|
|
staff_picked_up = 0;
|
|
pickup_message = self staff_get_pickup_message();
|
|
self.trigger set_unitrigger_hint_string(pickup_message);
|
|
self show();
|
|
self.trigger trigger_on();
|
|
|
|
while (!staff_picked_up)
|
|
{
|
|
self.trigger waittill("trigger", player);
|
|
|
|
self notify("retrieved", player);
|
|
|
|
if (player can_pickup_staff())
|
|
{
|
|
weapon_drop = player getcurrentweapon();
|
|
a_weapons = player getweaponslistprimaries();
|
|
n_max_other_weapons = get_player_weapon_limit(player) - 1;
|
|
|
|
if (issubstr(weapon_drop, "staff"))
|
|
{
|
|
n_index = get_staff_enum_from_element_weapon(weapon_drop);
|
|
e_staff_standard = get_staff_info_from_element_index(n_index);
|
|
e_staff_standard_upgraded = e_staff_standard.upgrade;
|
|
e_staff_standard_upgraded.charge_trigger notify("trigger", player);
|
|
}
|
|
else if (a_weapons.size > n_max_other_weapons)
|
|
{
|
|
player takeweapon(weapon_drop);
|
|
}
|
|
|
|
player thread watch_staff_ammo_reload();
|
|
self ghost();
|
|
self setinvisibletoall();
|
|
player giveweapon(self.weapname);
|
|
player switchtoweapon(self.weapname);
|
|
clip_size = weaponclipsize(self.weapname);
|
|
player setweaponammoclip(self.weapname, clip_size);
|
|
player givemaxammo(self.weapname);
|
|
player givemaxammo("staff_revive_zm");
|
|
self.owner = player;
|
|
level notify("stop_staff_sound");
|
|
self notify("staff_equip");
|
|
staff_picked_up = 1;
|
|
self.charger.is_inserted = 0;
|
|
self setclientfield("staff_charger", 0);
|
|
self.charger.full = 1;
|
|
maps\mp\zm_tomb_craftables::set_player_staff(self.weapname, player);
|
|
}
|
|
else
|
|
{
|
|
self.trigger thread swap_staff_hint_charger(player);
|
|
}
|
|
}
|
|
}
|
|
|
|
get_staff_enum_from_element_weapon(weapon_drop)
|
|
{
|
|
if (isSubStr(weapon_drop, "fire"))
|
|
{
|
|
return 1;
|
|
}
|
|
else if (isSubStr(weapon_drop, "air"))
|
|
{
|
|
return 2;
|
|
}
|
|
else if (isSubStr(weapon_drop, "lightning"))
|
|
{
|
|
return 3;
|
|
}
|
|
else if (isSubStr(weapon_drop, "water"))
|
|
{
|
|
return 4;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
can_pickup_staff()
|
|
{
|
|
if (is_melee_weapon(self getcurrentweapon()) || is_placeable_mine(self getcurrentweapon()))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
b_has_staff = self player_has_staff();
|
|
b_staff_equipped = issubstr(self getcurrentweapon(), "staff") && self getcurrentweapon() != "staff_revive_zm";
|
|
|
|
return !b_has_staff || b_staff_equipped;
|
|
}
|
|
|
|
insert_staff_hint_charger(player, enum)
|
|
{
|
|
num = player getentitynumber();
|
|
|
|
self.playertrigger[num] notify("insert_staff_hint_charger");
|
|
self.playertrigger[num] endon("insert_staff_hint_charger");
|
|
self.playertrigger[num] endon("death");
|
|
|
|
staff_hint_string = "";
|
|
|
|
if (enum == 1)
|
|
{
|
|
staff_hint_string = &"ZM_TOMB_MISSING_FIRE_STAFF";
|
|
}
|
|
else if (enum == 2)
|
|
{
|
|
staff_hint_string = &"ZM_TOMB_MISSING_WIND_STAFF";
|
|
}
|
|
else if (enum == 3)
|
|
{
|
|
staff_hint_string = &"ZM_TOMB_MISSING_LIGHTNING_STAFF";
|
|
}
|
|
else if (enum == 4)
|
|
{
|
|
staff_hint_string = &"ZM_TOMB_MISSING_ICE_STAFF";
|
|
}
|
|
|
|
self.playertrigger[num] sethintstring(staff_hint_string);
|
|
|
|
wait 3;
|
|
|
|
self.playertrigger[num] sethintstring(self.hint_string);
|
|
}
|
|
|
|
swap_staff_hint_charger(player)
|
|
{
|
|
num = player getentitynumber();
|
|
|
|
self.playertrigger[num] notify("swap_staff_hint_charger");
|
|
self.playertrigger[num] endon("swap_staff_hint_charger");
|
|
self.playertrigger[num] endon("death");
|
|
|
|
self.playertrigger[num] sethintstring(&"ZM_TOMB_OSO");
|
|
|
|
wait 3;
|
|
|
|
self.playertrigger[num] sethintstring(self.hint_string);
|
|
}
|
|
|
|
staff_upgraded_reload()
|
|
{
|
|
self endon("staff_equip");
|
|
|
|
clip_size = weaponclipsize(self.weapname);
|
|
max_ammo = weaponmaxammo(self.weapname);
|
|
revive_max_ammo = weaponmaxammo("staff_revive_zm");
|
|
n_count = int(max_ammo / 20);
|
|
b_reloaded = 0;
|
|
|
|
while (true)
|
|
{
|
|
if (self.prev_ammo_clip < clip_size)
|
|
{
|
|
clip_add = clip_size - self.prev_ammo_clip;
|
|
|
|
if (clip_add > self.prev_ammo_stock)
|
|
{
|
|
clip_add = self.prev_ammo_stock;
|
|
}
|
|
|
|
self.prev_ammo_clip += clip_add;
|
|
self.prev_ammo_stock -= clip_add;
|
|
}
|
|
|
|
if (self.revive_ammo_clip < 1 && self.revive_ammo_stock >= 1)
|
|
{
|
|
self.revive_ammo_clip += 1;
|
|
self.revive_ammo_stock -= 1;
|
|
}
|
|
|
|
if (self.prev_ammo_stock >= max_ammo && self.revive_ammo_stock >= revive_max_ammo)
|
|
{
|
|
self.prev_ammo_stock = max_ammo;
|
|
self.revive_ammo_stock = revive_max_ammo;
|
|
self setclientfield("staff_charger", 0);
|
|
self.charger.full = 1;
|
|
self thread staff_glow_fx();
|
|
}
|
|
|
|
self.charger waittill("soul_received");
|
|
|
|
self.prev_ammo_stock += n_count;
|
|
self.revive_ammo_stock += 1;
|
|
}
|
|
}
|
|
|
|
staff_glow_fx()
|
|
{
|
|
e_staff_standard = get_staff_info_from_element_index(self.enum);
|
|
|
|
if (isDefined(e_staff_standard.e_fx))
|
|
{
|
|
return;
|
|
}
|
|
|
|
e_staff_standard.e_fx = spawn("script_model", e_staff_standard.upgrade.origin + vectorscale((0, 0, 1), 8.0));
|
|
e_staff_standard.e_fx setmodel("tag_origin");
|
|
e_staff_standard.e_fx setclientfield("element_glow_fx", e_staff_standard.upgrade.enum);
|
|
|
|
self waittill("staff_equip");
|
|
|
|
e_staff_standard.e_fx delete();
|
|
}
|
|
|
|
chambers_init()
|
|
{
|
|
flag_init("gramophone_placed");
|
|
array_thread(getentarray("trigger_death_floor", "targetname"), ::monitor_chamber_death_trigs);
|
|
a_stargate_gramophones = getstructarray("stargate_gramophone_pos", "targetname");
|
|
array_thread(a_stargate_gramophones, ::run_gramophone_teleporter);
|
|
a_door_main = getentarray("chamber_entrance", "targetname");
|
|
array_thread(a_door_main, ::run_gramophone_door, "vinyl_master");
|
|
}
|
|
|
|
run_gramophone_teleporter(str_vinyl_record)
|
|
{
|
|
self.has_vinyl = 0;
|
|
self.gramophone_model = undefined;
|
|
self thread watch_gramophone_vinyl_pickup();
|
|
t_gramophone = tomb_spawn_trigger_radius(self.origin, 60.0, 1);
|
|
t_gramophone set_unitrigger_hint_string(&"ZM_TOMB_PLGR");
|
|
|
|
if (!isDefined(level.gramophone_teleporter_triggers))
|
|
{
|
|
level.gramophone_teleporter_triggers = [];
|
|
}
|
|
|
|
level.gramophone_teleporter_triggers[level.gramophone_teleporter_triggers.size] = t_gramophone;
|
|
|
|
level waittill("gramophone_vinyl_player_picked_up");
|
|
|
|
while (true)
|
|
{
|
|
t_gramophone waittill("trigger", player);
|
|
|
|
if (!isdefined(self.gramophone_model))
|
|
{
|
|
if (!flag("gramophone_placed"))
|
|
{
|
|
self.gramophone_model = spawn("script_model", self.origin);
|
|
self.gramophone_model.angles = self.angles;
|
|
self.gramophone_model setmodel("p6_zm_tm_gramophone");
|
|
level setclientfield("piece_record_zm_player", 0);
|
|
level setclientfield("piece_record_zm_vinyl_master", self.script_int + 1);
|
|
flag_set("gramophone_placed");
|
|
|
|
foreach (trigger in level.gramophone_teleporter_triggers)
|
|
{
|
|
if (trigger != t_gramophone)
|
|
{
|
|
trigger set_unitrigger_hint_string(&"ZM_TOMB_GREL");
|
|
}
|
|
}
|
|
|
|
t_gramophone set_unitrigger_hint_string("");
|
|
t_gramophone trigger_off();
|
|
str_song_id = self get_gramophone_song();
|
|
self.gramophone_model playsound(str_song_id);
|
|
player thread maps\mp\zm_tomb_vo::play_gramophone_place_vo();
|
|
maps\mp\zm_tomb_teleporter::stargate_teleport_enable(self.script_int);
|
|
flag_wait("teleporter_building_" + self.script_int);
|
|
flag_waitopen("teleporter_building_" + self.script_int);
|
|
t_gramophone trigger_on();
|
|
t_gramophone set_unitrigger_hint_string(&"ZM_TOMB_PUGR");
|
|
|
|
if (isdefined(self.script_flag))
|
|
flag_set(self.script_flag);
|
|
}
|
|
else
|
|
{
|
|
t_gramophone set_unitrigger_hint_string(&"ZM_TOMB_GREL");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.gramophone_model stopsounds();
|
|
self.gramophone_model ghost();
|
|
player playsound("zmb_craftable_pickup");
|
|
flag_clear("gramophone_placed");
|
|
level setclientfield("piece_record_zm_player", 1);
|
|
level setclientfield("piece_record_zm_vinyl_master", 1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
arrayremovevalue(level.gramophone_teleporter_triggers, t_gramophone);
|
|
|
|
foreach (trigger in level.gramophone_teleporter_triggers)
|
|
{
|
|
if (trigger != t_gramophone)
|
|
{
|
|
trigger set_unitrigger_hint_string(&"ZM_TOMB_PLGR");
|
|
}
|
|
}
|
|
|
|
t_gramophone tomb_unitrigger_delete();
|
|
|
|
wait 0.1;
|
|
|
|
self.gramophone_model delete();
|
|
self.gramophone_model = undefined;
|
|
}
|
|
|
|
run_gramophone_door(str_vinyl_record)
|
|
{
|
|
flag_init(self.targetname + "_opened");
|
|
trig_position = getstruct(self.targetname + "_position", "targetname");
|
|
trig_position.has_vinyl = 0;
|
|
trig_position.gramophone_model = undefined;
|
|
trig_position.script_int = randomIntRange(1, 5);
|
|
trig_position thread watch_gramophone_vinyl_pickup();
|
|
trig_position thread door_watch_open_sesame();
|
|
t_door = tomb_spawn_trigger_radius(trig_position.origin, 60.0, 1);
|
|
t_door set_unitrigger_hint_string(&"ZM_TOMB_PLAY_RECORD");
|
|
level waittill_any("gramophone_vinyl_player_picked_up", "open_sesame", "open_all_gramophone_doors");
|
|
|
|
flag_wait("initial_blackscreen_passed");
|
|
|
|
trig_position.trigger = t_door;
|
|
|
|
while (!trig_position.has_vinyl)
|
|
wait 0.05;
|
|
|
|
wait 0.05;
|
|
|
|
t_door.initial_placed = 1;
|
|
trig_position.gramophone_model = spawn("script_model", trig_position.origin);
|
|
trig_position.gramophone_model.angles = trig_position.angles;
|
|
trig_position.gramophone_model setmodel("p6_zm_tm_gramophone");
|
|
flag_set("gramophone_placed");
|
|
level setclientfield("piece_record_zm_player", 0);
|
|
|
|
foreach (trigger in level.gramophone_teleporter_triggers)
|
|
{
|
|
trigger set_unitrigger_hint_string(&"ZM_TOMB_GREL");
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
t_door waittill("trigger", player);
|
|
|
|
if (is_true(t_door.initial_placed))
|
|
{
|
|
t_door.initial_placed = 0;
|
|
t_door set_unitrigger_hint_string("");
|
|
t_door trigger_off();
|
|
str_song = trig_position get_gramophone_song();
|
|
trig_position.gramophone_model playsound(str_song);
|
|
|
|
self playsound("zmb_crypt_stairs");
|
|
wait 6.0;
|
|
chamber_blocker();
|
|
flag_set(self.targetname + "_opened");
|
|
|
|
if (isdefined(trig_position.script_flag))
|
|
flag_set(trig_position.script_flag);
|
|
|
|
level setclientfield("crypt_open_exploder", 1);
|
|
self movez(-260, 10.0, 1.0, 1.0);
|
|
|
|
self waittill("movedone");
|
|
|
|
self connectpaths();
|
|
self delete();
|
|
t_door trigger_on();
|
|
t_door set_unitrigger_hint_string(&"ZM_TOMB_PUGR");
|
|
}
|
|
else
|
|
{
|
|
trig_position.gramophone_model stopsounds();
|
|
trig_position.gramophone_model ghost();
|
|
flag_clear("gramophone_placed");
|
|
player playsound("zmb_craftable_pickup");
|
|
level setclientfield("piece_record_zm_player", 1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach (trigger in level.gramophone_teleporter_triggers)
|
|
{
|
|
trigger set_unitrigger_hint_string(&"ZM_TOMB_PLGR");
|
|
}
|
|
|
|
t_door tomb_unitrigger_delete();
|
|
trig_position.trigger = undefined;
|
|
|
|
wait 0.1;
|
|
|
|
trig_position.gramophone_model delete();
|
|
trig_position.gramophone_model = undefined;
|
|
}
|
|
|
|
watch_staff_ammo_reload()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (true)
|
|
{
|
|
self waittill("zmb_max_ammo");
|
|
|
|
a_weapons = self getweaponslist();
|
|
|
|
foreach (weapon in a_weapons)
|
|
{
|
|
if (issubstr(weapon, "staff_revive"))
|
|
{
|
|
self setweaponammoclip(weapon, weaponclipsize(weapon));
|
|
}
|
|
}
|
|
}
|
|
} |