1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-08 22:31:36 -05:00

Convert all indentations to tabs

This commit is contained in:
Jbleezy 2023-12-16 05:38:03 -08:00
parent 3f7f12a539
commit 15a57d606c
148 changed files with 17356 additions and 17356 deletions

View File

@ -746,16 +746,16 @@ enemy_counter_hud()
get_current_ghost_count() get_current_ghost_count()
{ {
ghost_count = 0; ghost_count = 0;
ais = getaiarray( level.zombie_team ); ais = getaiarray( level.zombie_team );
foreach ( ai in ais ) foreach ( ai in ais )
{ {
if ( isdefined( ai.is_ghost ) && ai.is_ghost ) if ( isdefined( ai.is_ghost ) && ai.is_ghost )
ghost_count++; ghost_count++;
} }
return ghost_count; return ghost_count;
} }
timer_hud() timer_hud()
@ -2340,8 +2340,8 @@ last_stand_restore_pistol_ammo(only_store_info = false)
self setweaponammoclip( weapon, self.stored_weapon_info[ weapon ].clip_amt ); self setweaponammoclip( weapon, self.stored_weapon_info[ weapon ].clip_amt );
if ( "none" != dual_wield_name ) if ( "none" != dual_wield_name )
self set_weapon_ammo_clip_left( weapon, self.stored_weapon_info[ weapon ].left_clip_amt ); self set_weapon_ammo_clip_left( weapon, self.stored_weapon_info[ weapon ].left_clip_amt );
self setweaponammostock( weapon, self.stored_weapon_info[ weapon ].stock_amt ); self setweaponammostock( weapon, self.stored_weapon_info[ weapon ].stock_amt );
@ -3057,7 +3057,7 @@ onuseplantobject_mtower( player )
onuseplantobject_rtower( player ) onuseplantobject_rtower( player )
{ {
m_tower = getent( "sq_guillotine", "targetname" ); m_tower = getent( "sq_guillotine", "targetname" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_crystal", "j_crystal_01" ); m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_crystal", "j_crystal_01" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_satellite_dish", "j_satellite" ); m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_satellite_dish", "j_satellite" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_antenna", "j_antenna" ); m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_antenna", "j_antenna" );
@ -3072,9 +3072,9 @@ onuseplantobject_rtower( player )
sq_tower_spawn_attachment( str_model, str_tag ) sq_tower_spawn_attachment( str_model, str_tag )
{ {
m_part = spawn( "script_model", self gettagorigin( str_tag ) ); m_part = spawn( "script_model", self gettagorigin( str_tag ) );
m_part.angles = self gettagangles( str_tag ); m_part.angles = self gettagangles( str_tag );
m_part setmodel( str_model ); m_part setmodel( str_model );
} }
unregister_tower_unitriggers() unregister_tower_unitriggers()

View File

@ -22,16 +22,16 @@ struct_init()
level.struct_class_names[ "targetname" ][ "zm_perk_machine" ] = []; level.struct_class_names[ "targetname" ][ "zm_perk_machine" ] = [];
foreach (struct in structs) foreach (struct in structs)
{ {
if (isdefined(struct.script_string) && isSubStr(struct.script_string, "zclassic")) if (isdefined(struct.script_string) && isSubStr(struct.script_string, "zclassic"))
{ {
if (struct.script_noteworthy == "specialty_longersprint" || struct.script_noteworthy == "specialty_weapupgrade") if (struct.script_noteworthy == "specialty_longersprint" || struct.script_noteworthy == "specialty_weapupgrade")
{ {
scripts\zm\replaced\utility::register_perk_struct( struct.script_noteworthy, struct.model, struct.origin, struct.angles ); scripts\zm\replaced\utility::register_perk_struct( struct.script_noteworthy, struct.model, struct.origin, struct.angles );
} }
} }
else if (isdefined(struct.script_string) && isSubStr(struct.script_string, "maze")) else if (isdefined(struct.script_string) && isSubStr(struct.script_string, "maze"))
{ {
if (struct.script_noteworthy == "specialty_armorvest") if (struct.script_noteworthy == "specialty_armorvest")
{ {
struct.origin += anglesToRight(struct.angles) * 24; struct.origin += anglesToRight(struct.angles) * 24;
@ -84,7 +84,7 @@ struct_init()
player_respawn_points = []; player_respawn_points = [];
foreach (initial_spawn in level.struct_class_names["script_noteworthy"]["initial_spawn"]) foreach (initial_spawn in level.struct_class_names["script_noteworthy"]["initial_spawn"])
{ {
if (isDefined(initial_spawn.script_string) && isSubStr(initial_spawn.script_string, "zgrief_maze")) if (isDefined(initial_spawn.script_string) && isSubStr(initial_spawn.script_string, "zgrief_maze"))
{ {
initial_spawn.script_string = "zgrief_street"; initial_spawn.script_string = "zgrief_street";
@ -94,9 +94,9 @@ struct_init()
} }
foreach (player_respawn_point in level.struct_class_names["targetname"]["player_respawn_point"]) foreach (player_respawn_point in level.struct_class_names["targetname"]["player_respawn_point"])
{ {
if (player_respawn_point.script_noteworthy == "zone_maze") if (player_respawn_point.script_noteworthy == "zone_maze")
{ {
if (player_respawn_point.target == "maze_spawn_points") if (player_respawn_point.target == "maze_spawn_points")
{ {
player_respawn_point.script_noteworthy = "zone_mansion_backyard"; player_respawn_point.script_noteworthy = "zone_mansion_backyard";
@ -107,7 +107,7 @@ struct_init()
} }
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
else if (player_respawn_point.script_noteworthy == "zone_maze_staircase") else if (player_respawn_point.script_noteworthy == "zone_maze_staircase")
{ {
spawn_array = getstructarray( player_respawn_point.target, "targetname" ); spawn_array = getstructarray( player_respawn_point.target, "targetname" );
@ -128,7 +128,7 @@ struct_init()
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
} }
level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ] = initial_spawns; level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ] = initial_spawns;
level.struct_class_names[ "targetname" ][ "player_respawn_point" ] = player_respawn_points; level.struct_class_names[ "targetname" ][ "player_respawn_point" ] = player_respawn_points;
@ -136,33 +136,33 @@ struct_init()
level.struct_class_names[ "targetname" ][ "intermission" ] = []; level.struct_class_names[ "targetname" ][ "intermission" ] = [];
intermission_cam = spawnStruct(); intermission_cam = spawnStruct();
intermission_cam.origin = (3694, 569, 253); intermission_cam.origin = (3694, 569, 253);
intermission_cam.angles = (30, 0, 0); intermission_cam.angles = (30, 0, 0);
intermission_cam.targetname = "intermission"; intermission_cam.targetname = "intermission";
intermission_cam.script_string = "street"; intermission_cam.script_string = "street";
intermission_cam.speed = 30; intermission_cam.speed = 30;
intermission_cam.target = "intermission_street_end"; intermission_cam.target = "intermission_street_end";
scripts\zm\replaced\utility::add_struct(intermission_cam); scripts\zm\replaced\utility::add_struct(intermission_cam);
intermission_cam_end = spawnStruct(); intermission_cam_end = spawnStruct();
intermission_cam_end.origin = (5856, 569, 253); intermission_cam_end.origin = (5856, 569, 253);
intermission_cam_end.angles = (30, 0, 0); intermission_cam_end.angles = (30, 0, 0);
intermission_cam_end.targetname = "intermission_street_end"; intermission_cam_end.targetname = "intermission_street_end";
scripts\zm\replaced\utility::add_struct(intermission_cam_end); scripts\zm\replaced\utility::add_struct(intermission_cam_end);
} }
precache() precache()
{ {
precachemodel( "zm_collision_buried_street_grief" ); precachemodel( "zm_collision_buried_street_grief" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" ); precachemodel( "p6_zm_bu_buildable_bench_tarp" );
level.chalk_buildable_pieces_hide = 1; level.chalk_buildable_pieces_hide = 1;
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" ); griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
maps\mp\zm_buried_buildables::include_buildables( griefbuildables ); maps\mp\zm_buried_buildables::include_buildables( griefbuildables );
maps\mp\zm_buried_buildables::init_buildables( griefbuildables ); maps\mp\zm_buried_buildables::init_buildables( griefbuildables );
maps\mp\zombies\_zm_equip_turbine::init(); maps\mp\zombies\_zm_equip_turbine::init();
maps\mp\zombies\_zm_equip_turbine::init_animtree(); maps\mp\zombies\_zm_equip_turbine::init_animtree();
maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" ); maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" );
maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" ); maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" );
maps\mp\zm_buried_fountain::init_fountain(); maps\mp\zm_buried_fountain::init_fountain();
setdvar( "disableLookAtEntityLogic", 1 ); setdvar( "disableLookAtEntityLogic", 1 );
@ -178,15 +178,15 @@ precache()
collision = spawn( "script_model", start_chest_zbarrier.origin, 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin, 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin - ( 0, 32, 0 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin - ( 0, 32, 0 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 0 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 0 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
start_chest2_zbarrier = getEnt( "tunnels_chest1_zbarrier", "script_noteworthy" ); start_chest2_zbarrier = getEnt( "tunnels_chest1_zbarrier", "script_noteworthy" );
start_chest2_zbarrier.origin = (5605.74, 276.96, 17); start_chest2_zbarrier.origin = (5605.74, 276.96, 17);
@ -199,15 +199,15 @@ precache()
collision = spawn( "script_model", start_chest2_zbarrier.origin, 1 ); collision = spawn( "script_model", start_chest2_zbarrier.origin, 1 );
collision.angles = start_chest2_zbarrier.angles; collision.angles = start_chest2_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest2_zbarrier.origin - ( 32, 0, 0 ), 1 ); collision = spawn( "script_model", start_chest2_zbarrier.origin - ( 32, 0, 0 ), 1 );
collision.angles = start_chest2_zbarrier.angles; collision.angles = start_chest2_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest2_zbarrier.origin + ( 32, 0, 0 ), 1 ); collision = spawn( "script_model", start_chest2_zbarrier.origin + ( 32, 0, 0 ), 1 );
collision.angles = start_chest2_zbarrier.angles; collision.angles = start_chest2_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
level.chests = []; level.chests = [];
level.chests[0] = start_chest; level.chests[0] = start_chest;
@ -217,12 +217,12 @@ precache()
main() main()
{ {
level.buildables_built["pap"] = 1; level.buildables_built["pap"] = 1;
level.equipment_team_pick_up = 1; level.equipment_team_pick_up = 1;
level thread maps\mp\zombies\_zm_buildables::think_buildables(); level thread maps\mp\zombies\_zm_buildables::think_buildables();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest", "tunnels_chest1" ) ) ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest", "tunnels_chest1" ) ) );
deleteslothbarricades(); deleteslothbarricades();
powerswitchstate( 1 ); powerswitchstate( 1 );
flag_set("mansion_door1"); flag_set("mansion_door1");
level.zones["zone_mansion"].is_enabled = 0; level.zones["zone_mansion"].is_enabled = 0;
@ -270,7 +270,7 @@ init_barriers()
structs = getstructarray( "zm_perk_machine", "targetname" ); structs = getstructarray( "zm_perk_machine", "targetname" );
foreach (struct in structs) foreach (struct in structs)
{ {
scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", struct.origin + (anglesToRight(struct.angles) * -9) + (0, 0, 320), struct.angles ); scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", struct.origin + (anglesToRight(struct.angles) * -9) + (0, 0, 320), struct.angles );
} }
} }

View File

@ -7,78 +7,78 @@
struct_init() struct_init()
{ {
level.struct_class_names[ "targetname" ][ "zm_perk_machine" ] = []; level.struct_class_names[ "targetname" ][ "zm_perk_machine" ] = [];
scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( 473.92, 6638.99, 208 ), ( 0, 102, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( 473.92, 6638.99, 208 ), ( 0, 102, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_zm_al_vending_pap_on", ( -1769, 5395, -72 ), ( 0, 100, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_zm_al_vending_pap_on", ( -1769, 5395, -72 ), ( 0, 100, 0 ) );
level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ] = []; level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ] = [];
player_respawn_points = []; player_respawn_points = [];
foreach (player_respawn_point in level.struct_class_names["targetname"]["player_respawn_point"]) foreach (player_respawn_point in level.struct_class_names["targetname"]["player_respawn_point"])
{ {
if (player_respawn_point.script_noteworthy == "zone_dock") if (player_respawn_point.script_noteworthy == "zone_dock")
{ {
i = 0; i = 0;
respawn_array = getstructarray(player_respawn_point.target, "targetname"); respawn_array = getstructarray(player_respawn_point.target, "targetname");
foreach (respawn in respawn_array) foreach (respawn in respawn_array)
{ {
if (respawn.origin == (-664, 5944, 0)) if (respawn.origin == (-664, 5944, 0))
{ {
continue; continue;
} }
script_int = int(i / 2) + 1; script_int = int(i / 2) + 1;
origin = respawn.origin + (anglesToRight(respawn.angles) * 32); origin = respawn.origin + (anglesToRight(respawn.angles) * 32);
angles = respawn.angles; angles = respawn.angles;
scripts\zm\replaced\utility::register_map_spawn( origin, angles, player_respawn_point.script_noteworthy, script_int ); scripts\zm\replaced\utility::register_map_spawn( origin, angles, player_respawn_point.script_noteworthy, script_int );
origin = respawn.origin + (anglesToRight(respawn.angles) * -32); origin = respawn.origin + (anglesToRight(respawn.angles) * -32);
angles = respawn.angles; angles = respawn.angles;
scripts\zm\replaced\utility::register_map_spawn( origin, angles, player_respawn_point.script_noteworthy, script_int ); scripts\zm\replaced\utility::register_map_spawn( origin, angles, player_respawn_point.script_noteworthy, script_int );
i++; i++;
} }
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
else if (player_respawn_point.script_noteworthy == "zone_dock_gondola") else if (player_respawn_point.script_noteworthy == "zone_dock_gondola")
{ {
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
else if (player_respawn_point.script_noteworthy == "zone_studio") else if (player_respawn_point.script_noteworthy == "zone_studio")
{ {
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
else if (player_respawn_point.script_noteworthy == "zone_citadel_basement_building") else if (player_respawn_point.script_noteworthy == "zone_citadel_basement_building")
{ {
player_respawn_points[player_respawn_points.size] = player_respawn_point; player_respawn_points[player_respawn_points.size] = player_respawn_point;
} }
} }
level.struct_class_names[ "targetname" ][ "player_respawn_point" ] = player_respawn_points; level.struct_class_names[ "targetname" ][ "player_respawn_point" ] = player_respawn_points;
level.struct_class_names[ "targetname" ][ "intermission" ] = []; level.struct_class_names[ "targetname" ][ "intermission" ] = [];
intermission_cam = spawnStruct(); intermission_cam = spawnStruct();
intermission_cam.origin = (402, 6197, 142); intermission_cam.origin = (402, 6197, 142);
intermission_cam.angles = (0, 190, 0); intermission_cam.angles = (0, 190, 0);
intermission_cam.targetname = "intermission"; intermission_cam.targetname = "intermission";
intermission_cam.script_string = "cellblock"; intermission_cam.script_string = "cellblock";
intermission_cam.speed = 30; intermission_cam.speed = 30;
intermission_cam.target = "intermission_cellblock_end"; intermission_cam.target = "intermission_cellblock_end";
scripts\zm\replaced\utility::add_struct(intermission_cam); scripts\zm\replaced\utility::add_struct(intermission_cam);
intermission_cam_end = spawnStruct(); intermission_cam_end = spawnStruct();
intermission_cam_end.origin = (-1043, 5931, -47); intermission_cam_end.origin = (-1043, 5931, -47);
intermission_cam_end.angles = (0, 190, 0); intermission_cam_end.angles = (0, 190, 0);
intermission_cam_end.targetname = "intermission_cellblock_end"; intermission_cam_end.targetname = "intermission_cellblock_end";
scripts\zm\replaced\utility::add_struct(intermission_cam_end); scripts\zm\replaced\utility::add_struct(intermission_cam_end);
} }
precache() precache()
@ -90,18 +90,18 @@ precache()
main() main()
{ {
flag_set("gondola_roof_to_dock"); flag_set("gondola_roof_to_dock");
init_wallbuys(); init_wallbuys();
init_barriers(); init_barriers();
generatebuildabletarps(); generatebuildabletarps();
set_box_weapons(); set_box_weapons();
disable_zombie_spawn_locations(); disable_zombie_spawn_locations();
disable_gondola_call_triggers(); disable_gondola_call_triggers();
disable_craftable_triggers(); disable_craftable_triggers();
disable_afterlife_props(); disable_afterlife_props();
create_key_door_unitrigger( 4, 98, 112, 108 ); create_key_door_unitrigger( 4, 98, 112, 108 );
level thread open_inner_gate(); level thread open_inner_gate();
level thread turn_afterlife_interacts_on(); level thread turn_afterlife_interacts_on();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" );
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "dock_chest" ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( "dock_chest" );
precacheshader( "zm_al_wth_zombie" ); precacheshader( "zm_al_wth_zombie" );
@ -110,12 +110,12 @@ main()
maps\mp\zombies\_zm_ai_brutus::init(); maps\mp\zombies\_zm_ai_brutus::init();
level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" ); level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
scripts\zm\locs\loc_common::init(); scripts\zm\locs\loc_common::init();
level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs(); level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs();
} }
set_box_weapons() set_box_weapons()
{ {
if(isDefined(level.zombie_weapons["thompson_zm"])) if(isDefined(level.zombie_weapons["thompson_zm"]))
{ {
level.zombie_weapons["thompson_zm"].is_in_box = 0; level.zombie_weapons["thompson_zm"].is_in_box = 0;
} }
@ -127,76 +127,76 @@ set_box_weapons()
init_wallbuys() init_wallbuys()
{ {
scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 305, 6376, 319 ), ( 0, -80, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 305, 6376, 319 ), ( 0, -80, 0 ) );
scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -709, 5721, -19.875 ), ( 0, -80, 30 ) ); scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -709, 5721, -19.875 ), ( 0, -80, 30 ) );
scripts\zm\replaced\utility::wallbuy( "uzi_zm", "uzi", "weapon_upgrade", ( -219, 7156, 122 ), ( 0, 190, 0 ) ); scripts\zm\replaced\utility::wallbuy( "uzi_zm", "uzi", "weapon_upgrade", ( -219, 7156, 122 ), ( 0, 190, 0 ) );
} }
init_barriers() init_barriers()
{ {
// left // left
model = spawn( "script_model", (-90.4585, 7669.56, 114.511)); model = spawn( "script_model", (-90.4585, 7669.56, 114.511));
model.angles = (90, -10, 55); model.angles = (90, -10, 55);
model setmodel("p6_zm_al_horrific_bed_mattress_3"); model setmodel("p6_zm_al_horrific_bed_mattress_3");
model = spawn( "script_model", (-111.549, 7667.96, 97.125)); model = spawn( "script_model", (-111.549, 7667.96, 97.125));
model.angles = (0, 0, 90); model.angles = (0, 0, 90);
model setmodel("zm_al_kitchen_table_01"); model setmodel("zm_al_kitchen_table_01");
model = spawn( "script_model", (-113.959, 7638.7, 75.0369)); model = spawn( "script_model", (-113.959, 7638.7, 75.0369));
model.angles = (6, 0, -6); model.angles = (6, 0, -6);
model setmodel("afr_corrugated_metal4x8_holes"); model setmodel("afr_corrugated_metal4x8_holes");
model = spawn( "script_model", (-106.911, 7636.47, 64.125)); model = spawn( "script_model", (-106.911, 7636.47, 64.125));
model.angles = (0, 0, 0); model.angles = (0, 0, 0);
model setmodel("collision_clip_wall_128x128x10"); model setmodel("collision_clip_wall_128x128x10");
// right // right
model = spawn( "script_model", (48.6213, 7639.88, 74.125)); model = spawn( "script_model", (48.6213, 7639.88, 74.125));
model.angles = (22, -44, 0); model.angles = (22, -44, 0);
model setmodel("p6_zm_al_infirmary_case"); model setmodel("p6_zm_al_infirmary_case");
model = spawn( "script_model", (44.9895, 7601.56, 81.125)); model = spawn( "script_model", (44.9895, 7601.56, 81.125));
model.angles = (-5, -41, -8); model.angles = (-5, -41, -8);
model setmodel("afr_corrugated_metal4x8_holes"); model setmodel("afr_corrugated_metal4x8_holes");
model = spawn( "script_model", (98.769, 7602.89, 64.125)); model = spawn( "script_model", (98.769, 7602.89, 64.125));
model.angles = (0, -142, 0); model.angles = (0, -142, 0);
model setmodel("p6_zm_al_desk_small"); model setmodel("p6_zm_al_desk_small");
model = spawn( "script_model", (43.2479, 7606.2, 66.125)); model = spawn( "script_model", (43.2479, 7606.2, 66.125));
model.angles = (0, -45, 0); model.angles = (0, -45, 0);
model setmodel("collision_clip_wall_128x128x10"); model setmodel("collision_clip_wall_128x128x10");
} }
generatebuildabletarps() generatebuildabletarps()
{ {
model = spawn( "script_model", (432.836, 6238.03, 55.997)); model = spawn( "script_model", (432.836, 6238.03, 55.997));
model.angles = (0, 100, 0); model.angles = (0, 100, 0);
model setmodel("p6_zm_buildable_bench_tarp"); model setmodel("p6_zm_buildable_bench_tarp");
} }
disable_zombie_spawn_locations() disable_zombie_spawn_locations()
{ {
for ( z = 0; z < level.zone_keys.size; z++ ) for ( z = 0; z < level.zone_keys.size; z++ )
{ {
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if (zone.spawn_locations[i].origin == (615.8, 7875.9, 95)) if (zone.spawn_locations[i].origin == (615.8, 7875.9, 95))
{ {
zone.spawn_locations[i].is_enabled = false; zone.spawn_locations[i].is_enabled = false;
} }
else if (zone.spawn_locations[i].origin == (663.8, 7827.9, 95)) else if (zone.spawn_locations[i].origin == (663.8, 7827.9, 95))
{ {
zone.spawn_locations[i].is_enabled = false; zone.spawn_locations[i].is_enabled = false;
} }
i++; i++;
} }
} }
} }
disable_gondola_call_triggers() disable_gondola_call_triggers()
{ {
t_call_triggers = getentarray( "gondola_call_trigger", "targetname" ); t_call_triggers = getentarray( "gondola_call_trigger", "targetname" );
foreach ( trigger in t_call_triggers ) foreach ( trigger in t_call_triggers )
{ {
trigger delete(); trigger delete();
} }
@ -204,7 +204,7 @@ disable_gondola_call_triggers()
disable_craftable_triggers() disable_craftable_triggers()
{ {
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
foreach ( trigger in t_crafting_table ) foreach ( trigger in t_crafting_table )
{ {
trigger delete(); trigger delete();
@ -213,7 +213,7 @@ disable_craftable_triggers()
disable_afterlife_props() disable_afterlife_props()
{ {
a_afterlife_props = getentarray( "afterlife_show", "targetname" ); a_afterlife_props = getentarray( "afterlife_show", "targetname" );
foreach ( m_prop in a_afterlife_props ) foreach ( m_prop in a_afterlife_props )
{ {
m_prop delete(); m_prop delete();
@ -222,143 +222,143 @@ disable_afterlife_props()
turn_afterlife_interacts_on() turn_afterlife_interacts_on()
{ {
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
foreach ( model in a_afterlife_interact ) foreach ( model in a_afterlife_interact )
{ {
if ( model.script_string == "juggernog_on" ) if ( model.script_string == "juggernog_on" )
{ {
model turn_afterlife_interact_on(); model turn_afterlife_interact_on();
wait 0.1; wait 0.1;
} }
} }
m_docks_shockbox = getent( "docks_panel", "targetname" ); m_docks_shockbox = getent( "docks_panel", "targetname" );
m_docks_shockbox turn_afterlife_interact_on(); m_docks_shockbox turn_afterlife_interact_on();
} }
#using_animtree("fxanim_props"); #using_animtree("fxanim_props");
turn_afterlife_interact_on() turn_afterlife_interact_on()
{ {
if ( !isDefined( level.shockbox_anim ) ) if ( !isDefined( level.shockbox_anim ) )
{ {
level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim;
level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim;
} }
if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
{ {
self useanimtree( -1 ); self useanimtree( -1 );
self setmodel( "p6_zm_al_shock_box_on" ); self setmodel( "p6_zm_al_shock_box_on" );
self setanim( level.shockbox_anim[ "on" ] ); self setanim( level.shockbox_anim[ "on" ] );
} }
} }
create_key_door_unitrigger( piece_num, width, height, length ) create_key_door_unitrigger( piece_num, width, height, length )
{ {
t_key_door = getstruct( "key_door_" + piece_num + "_trigger", "targetname" ); t_key_door = getstruct( "key_door_" + piece_num + "_trigger", "targetname" );
t_key_door.unitrigger_stub = spawnstruct(); t_key_door.unitrigger_stub = spawnstruct();
t_key_door.unitrigger_stub.origin = t_key_door.origin; t_key_door.unitrigger_stub.origin = t_key_door.origin;
t_key_door.unitrigger_stub.angles = t_key_door.angles; t_key_door.unitrigger_stub.angles = t_key_door.angles;
t_key_door.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; t_key_door.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
t_key_door.unitrigger_stub.hint_string = &"ZM_PRISON_KEY_DOOR_LOCKED"; t_key_door.unitrigger_stub.hint_string = &"ZM_PRISON_KEY_DOOR_LOCKED";
t_key_door.unitrigger_stub.cursor_hint = "HINT_NOICON"; t_key_door.unitrigger_stub.cursor_hint = "HINT_NOICON";
t_key_door.unitrigger_stub.script_width = width; t_key_door.unitrigger_stub.script_width = width;
t_key_door.unitrigger_stub.script_height = height; t_key_door.unitrigger_stub.script_height = height;
t_key_door.unitrigger_stub.script_length = length; t_key_door.unitrigger_stub.script_length = length;
t_key_door.unitrigger_stub.n_door_index = piece_num; t_key_door.unitrigger_stub.n_door_index = piece_num;
t_key_door.unitrigger_stub.require_look_at = 0; t_key_door.unitrigger_stub.require_look_at = 0;
t_key_door.unitrigger_stub.prompt_and_visibility_func = ::key_door_trigger_visibility; t_key_door.unitrigger_stub.prompt_and_visibility_func = ::key_door_trigger_visibility;
t_key_door.unitrigger_stub.cost = 2000; t_key_door.unitrigger_stub.cost = 2000;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( t_key_door.unitrigger_stub, ::master_key_door_trigger_thread ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( t_key_door.unitrigger_stub, ::master_key_door_trigger_thread );
} }
key_door_trigger_visibility( player ) key_door_trigger_visibility( player )
{ {
b_is_invis = player.afterlife || isdefined( self.stub.master_key_door_opened ) && self.stub.master_key_door_opened || self.stub.n_door_index == 2 && !flag( "generator_challenge_completed" ); b_is_invis = player.afterlife || isdefined( self.stub.master_key_door_opened ) && self.stub.master_key_door_opened || self.stub.n_door_index == 2 && !flag( "generator_challenge_completed" );
self setinvisibletoplayer( player, b_is_invis ); self setinvisibletoplayer( player, b_is_invis );
self sethintstring( &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" ); self sethintstring( &"ZOMBIE_BUTTON_BUY_OPEN_DOOR_2000" );
return !b_is_invis; return !b_is_invis;
} }
master_key_door_trigger_thread() master_key_door_trigger_thread()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_trigger" ); self endon( "kill_trigger" );
n_door_index = self.stub.n_door_index; n_door_index = self.stub.n_door_index;
b_door_open = 0; b_door_open = 0;
while ( !b_door_open ) while ( !b_door_open )
{ {
self waittill( "trigger", e_triggerer ); self waittill( "trigger", e_triggerer );
if ( is_player_valid(e_triggerer) ) if ( is_player_valid(e_triggerer) )
{ {
if ( e_triggerer.score >= self.stub.cost ) if ( e_triggerer.score >= self.stub.cost )
{ {
e_triggerer maps\mp\zombies\_zm_score::minus_to_player_score( self.stub.cost ); e_triggerer maps\mp\zombies\_zm_score::minus_to_player_score( self.stub.cost );
e_triggerer play_sound_on_ent( "purchase" ); e_triggerer play_sound_on_ent( "purchase" );
self.stub.master_key_door_opened = 1; self.stub.master_key_door_opened = 1;
self.stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); self.stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers();
level thread open_custom_door_master_key( n_door_index, e_triggerer ); level thread open_custom_door_master_key( n_door_index, e_triggerer );
self playsound( "evt_quest_door_open" ); self playsound( "evt_quest_door_open" );
b_door_open = 1; b_door_open = 1;
} }
else else
{ {
play_sound_at_pos( "no_purchase", self.stub.origin ); play_sound_at_pos( "no_purchase", self.stub.origin );
} }
} }
} }
level thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); level thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
} }
open_custom_door_master_key( n_door_index, e_triggerer ) open_custom_door_master_key( n_door_index, e_triggerer )
{ {
m_lock = getent( "masterkey_lock_" + n_door_index, "targetname" ); m_lock = getent( "masterkey_lock_" + n_door_index, "targetname" );
m_lock playsound( "zmb_quest_key_unlock" ); m_lock playsound( "zmb_quest_key_unlock" );
playfxontag( level._effect["fx_alcatraz_unlock_door"], m_lock, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_unlock_door"], m_lock, "tag_origin" );
wait 0.5; wait 0.5;
m_lock delete(); m_lock delete();
m_gate_01 = getent( "cable_puzzle_gate_01", "targetname" ); m_gate_01 = getent( "cable_puzzle_gate_01", "targetname" );
m_gate_01 moveto( m_gate_01.origin + ( -16, 80, 0 ), 0.5 ); m_gate_01 moveto( m_gate_01.origin + ( -16, 80, 0 ), 0.5 );
m_gate_01 connectpaths(); m_gate_01 connectpaths();
gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" );
gate_1_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 ); gate_1_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 );
gate_1_monsterclip disconnectpaths(); gate_1_monsterclip disconnectpaths();
gate_1_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 ); gate_1_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 );
if ( isdefined( e_triggerer ) ) if ( isdefined( e_triggerer ) )
e_triggerer door_rumble_on_open(); e_triggerer door_rumble_on_open();
m_gate_01 playsound( "zmb_chainlink_open" ); m_gate_01 playsound( "zmb_chainlink_open" );
flag_set( "docks_inner_gate_unlocked" ); flag_set( "docks_inner_gate_unlocked" );
flag_set( "docks_inner_gate_open" ); flag_set( "docks_inner_gate_open" );
} }
door_rumble_on_open() door_rumble_on_open()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "end_game" ); level endon( "end_game" );
self setclientfieldtoplayer( "rumble_door_open", 1 ); self setclientfieldtoplayer( "rumble_door_open", 1 );
wait_network_frame(); wait_network_frame();
self setclientfieldtoplayer( "rumble_door_open", 0 ); self setclientfieldtoplayer( "rumble_door_open", 0 );
} }
open_inner_gate() open_inner_gate()
{ {
m_gate_02 = getent( "cable_puzzle_gate_02", "targetname" ); m_gate_02 = getent( "cable_puzzle_gate_02", "targetname" );
m_gate_02 moveto( m_gate_02.origin + ( -16, 80, 0 ), 0.5 ); m_gate_02 moveto( m_gate_02.origin + ( -16, 80, 0 ), 0.5 );
wait( 0.75 ); wait( 0.75 );
m_gate_02 connectpaths(); m_gate_02 connectpaths();
gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" ); gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" );
gate_2_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 ); gate_2_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 );
gate_2_monsterclip disconnectpaths(); gate_2_monsterclip disconnectpaths();
gate_2_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 ); gate_2_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 );
} }

View File

@ -10,51 +10,51 @@
struct_init() struct_init()
{ {
scripts\zm\replaced\utility::register_perk_struct( "", "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); // need this for pap to work scripts\zm\replaced\utility::register_perk_struct( "", "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); // need this for pap to work
scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( 10460, -564, -220 ), ( 0, -35, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( 10460, -564, -220 ), ( 0, -35, 0 ) );
zone_respawnpoints = []; zone_respawnpoints = [];
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for (i = 0; i < respawnpoints.size; i++) for (i = 0; i < respawnpoints.size; i++)
{ {
if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_amb_cornfield") if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_amb_cornfield")
{ {
if (isDefined(respawnpoints[i].script_string) && respawnpoints[i].script_string == "zgrief_cornfield") if (isDefined(respawnpoints[i].script_string) && respawnpoints[i].script_string == "zgrief_cornfield")
{ {
zone_respawnpoints[respawnpoints[i].script_noteworthy] = respawnpoints[i]; zone_respawnpoints[respawnpoints[i].script_noteworthy] = respawnpoints[i];
} }
} }
else if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_cornfield_prototype") else if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_cornfield_prototype")
{ {
zone_respawnpoints[respawnpoints[i].script_noteworthy] = respawnpoints[i]; zone_respawnpoints[respawnpoints[i].script_noteworthy] = respawnpoints[i];
} }
} }
level.struct_class_names["targetname"]["player_respawn_point"] = []; level.struct_class_names["targetname"]["player_respawn_point"] = [];
level.struct_class_names["script_noteworthy"]["initial_spawn"] = []; level.struct_class_names["script_noteworthy"]["initial_spawn"] = [];
zone = "zone_cornfield_prototype"; zone = "zone_cornfield_prototype";
scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int );
respawn_array = getstructarray(zone_respawnpoints[zone].target, "targetname"); respawn_array = getstructarray(zone_respawnpoints[zone].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
scripts\zm\replaced\utility::register_map_spawn( respawn.origin + (100, 0, 0), respawn.angles, zone, respawn.script_int ); scripts\zm\replaced\utility::register_map_spawn( respawn.origin + (100, 0, 0), respawn.angles, zone, respawn.script_int );
} }
zone = "zone_amb_cornfield"; zone = "zone_amb_cornfield";
scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int );
scripts\zm\replaced\utility::register_map_spawn( (11986, -1858, -132), (0, 80, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11986, -1858, -132), (0, 80, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (12158, -61, -141), (0, -85, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (12158, -61, -141), (0, -85, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (11366, 20, -193), (0, -5, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11366, 20, -193), (0, -5, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (11199, -1768, -156), (0, -5, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11199, -1768, -156), (0, -5, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (10448, 90, -189), (0, -5, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10448, 90, -189), (0, -5, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (10255, -1698, -186), (0, -5, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10255, -1698, -186), (0, -5, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (10046, -591, -192), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10046, -591, -192), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (10036, -967, -186), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10036, -967, -186), (0, 0, 0), zone );
structs = getstructarray( "game_mode_object", "targetname" ); structs = getstructarray( "game_mode_object", "targetname" );
foreach ( struct in structs ) foreach ( struct in structs )
{ {
if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy == "cornfield" ) if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy == "cornfield" )
@ -63,25 +63,25 @@ struct_init()
} }
} }
intermission_cam = spawnStruct(); intermission_cam = spawnStruct();
intermission_cam.origin = (10266, 470, -90); intermission_cam.origin = (10266, 470, -90);
intermission_cam.angles = (0, -90, 0); intermission_cam.angles = (0, -90, 0);
intermission_cam.targetname = "intermission"; intermission_cam.targetname = "intermission";
intermission_cam.script_string = "cornfield"; intermission_cam.script_string = "cornfield";
intermission_cam.speed = 30; intermission_cam.speed = 30;
intermission_cam.target = "intermission_cornfield_end"; intermission_cam.target = "intermission_cornfield_end";
scripts\zm\replaced\utility::add_struct(intermission_cam); scripts\zm\replaced\utility::add_struct(intermission_cam);
intermission_cam_end = spawnStruct(); intermission_cam_end = spawnStruct();
intermission_cam_end.origin = (10216, -1224, -199); intermission_cam_end.origin = (10216, -1224, -199);
intermission_cam_end.angles = (0, -90, 0); intermission_cam_end.angles = (0, -90, 0);
intermission_cam_end.targetname = "intermission_cornfield_end"; intermission_cam_end.targetname = "intermission_cornfield_end";
scripts\zm\replaced\utility::add_struct(intermission_cam_end); scripts\zm\replaced\utility::add_struct(intermission_cam_end);
} }
precache() precache()
{ {
start_chest_zbarrier = getEnt( "start_chest_zbarrier", "script_noteworthy" ); start_chest_zbarrier = getEnt( "start_chest_zbarrier", "script_noteworthy" );
start_chest_zbarrier.origin = ( 13487, 33, -182 ); start_chest_zbarrier.origin = ( 13487, 33, -182 );
start_chest_zbarrier.angles = ( 0, 90, 0 ); start_chest_zbarrier.angles = ( 0, 90, 0 );
start_chest = spawnStruct(); start_chest = spawnStruct();
@ -92,15 +92,15 @@ precache()
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 0, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 0, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, -32, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, -32, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
level.chests = []; level.chests = [];
level.chests[0] = start_chest; level.chests[0] = start_chest;
@ -110,144 +110,144 @@ main()
{ {
init_wallbuys(); init_wallbuys();
init_barriers(); init_barriers();
disable_zombie_spawn_locations(); disable_zombie_spawn_locations();
setup_standard_objects("cornfield"); setup_standard_objects("cornfield");
maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest" ) ) ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest" ) ) );
scripts\zm\locs\loc_common::init(); scripts\zm\locs\loc_common::init();
} }
init_wallbuys() init_wallbuys()
{ {
scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 13662, -1166, -134 ), ( 0, -90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 13662, -1166, -134 ), ( 0, -90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( 13553, -539, -133 ), ( 0, -90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( 13553, -539, -133 ), ( 0, -90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "beretta93r_zm", "beretta93r", "weapon_upgrade", ( 13793, -1646, -105 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::wallbuy( "beretta93r_zm", "beretta93r", "weapon_upgrade", ( 13793, -1646, -105 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( 13553, -769, -133 ), ( 0, -90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( 13553, -769, -133 ), ( 0, -90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "ak74u_zm", "ak74u", "weapon_upgrade", ( 13979, -1550, -134 ), ( 0, 90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "ak74u_zm", "ak74u", "weapon_upgrade", ( 13979, -1550, -134 ), ( 0, 90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( 14093, -351, -133 ), ( 0, 90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( 14093, -351, -133 ), ( 0, 90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "870mcs_zm", "870mcs", "weapon_upgrade", ( 13552, -1387, -134 ), ( 0, -90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "870mcs_zm", "870mcs", "weapon_upgrade", ( 13552, -1387, -134 ), ( 0, -90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( 13603, -1082, -134 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( 13603, -1082, -134 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::wallbuy( "claymore_zm", "claymore", "claymore_purchase", ( 13603, -1281, -134 ), ( 0, -180, 0 ) ); scripts\zm\replaced\utility::wallbuy( "claymore_zm", "claymore", "claymore_purchase", ( 13603, -1281, -134 ), ( 0, -180, 0 ) );
} }
init_barriers() init_barriers()
{ {
model = spawn( "script_model", (10176.5, -14.8391, -221.988), 1); model = spawn( "script_model", (10176.5, -14.8391, -221.988), 1);
model.angles = (0, 35, 0); model.angles = (0, 35, 0);
model setmodel("collision_clip_wall_256x256x10"); model setmodel("collision_clip_wall_256x256x10");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10002.6, -95.4607, -212.275), 1); model = spawn( "script_model", (10002.6, -95.4607, -212.275), 1);
model.angles = (0, 0, 0); model.angles = (0, 0, 0);
model setmodel("collision_clip_wall_128x128x10"); model setmodel("collision_clip_wall_128x128x10");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10173.4, -1761.36, -217.812), 1); model = spawn( "script_model", (10173.4, -1761.36, -217.812), 1);
model.angles = (0, -60, 0); model.angles = (0, -60, 0);
model setmodel("collision_clip_wall_128x128x10"); model setmodel("collision_clip_wall_128x128x10");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10147.5, -1657.67, -217.208), 1); model = spawn( "script_model", (10147.5, -1657.67, -217.208), 1);
model.angles = (0, 88, 0); model.angles = (0, 88, 0);
model setmodel("collision_clip_wall_256x256x10"); model setmodel("collision_clip_wall_256x256x10");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10082.7, -1528.05, -217.288), 1); model = spawn( "script_model", (10082.7, -1528.05, -217.288), 1);
model.angles = (0, -180, 0); model.angles = (0, -180, 0);
model setmodel("collision_clip_wall_128x128x10"); model setmodel("collision_clip_wall_128x128x10");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10159.6, -1104.45, -214.861), 1); model = spawn( "script_model", (10159.6, -1104.45, -214.861), 1);
model.angles = (0, -30, 0); model.angles = (0, -30, 0);
model setmodel("collision_clip_64x64x256"); model setmodel("collision_clip_64x64x256");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10157.4, -1222.83, -217.875), 1); model = spawn( "script_model", (10157.4, -1222.83, -217.875), 1);
model.angles = (0, 10, 0); model.angles = (0, 10, 0);
model setmodel("collision_clip_64x64x256"); model setmodel("collision_clip_64x64x256");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10216.6, -1134.53, -217.261), 1); model = spawn( "script_model", (10216.6, -1134.53, -217.261), 1);
model.angles = (0, -30, 0); model.angles = (0, -30, 0);
model setmodel("collision_clip_64x64x256"); model setmodel("collision_clip_64x64x256");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10147.4, -1152.83, -217.875), 1); model = spawn( "script_model", (10147.4, -1152.83, -217.875), 1);
model.angles = (0, 10, 0); model.angles = (0, 10, 0);
model setmodel("collision_clip_64x64x256"); model setmodel("collision_clip_64x64x256");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10099.6, -1064.45, -214.861), 1); model = spawn( "script_model", (10099.6, -1064.45, -214.861), 1);
model.angles = (0, -30, 0); model.angles = (0, -30, 0);
model setmodel("collision_clip_64x64x256"); model setmodel("collision_clip_64x64x256");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10016.8, -1490.24, -217.875), 1); model = spawn( "script_model", (10016.8, -1490.24, -217.875), 1);
model.angles = (0, -30, 0); model.angles = (0, -30, 0);
model setmodel("collision_clip_128x128x128"); model setmodel("collision_clip_128x128x128");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10443.9, -353.378, -217.748), 1); model = spawn( "script_model", (10443.9, -353.378, -217.748), 1);
model.angles = (0, -35, 0); model.angles = (0, -35, 0);
model setmodel("collision_clip_128x128x128"); model setmodel("collision_clip_128x128x128");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10393.5, -421.323, -220.142), 1); model = spawn( "script_model", (10393.5, -421.323, -220.142), 1);
model.angles = (0, -25, 0); model.angles = (0, -25, 0);
model setmodel("collision_clip_128x128x128"); model setmodel("collision_clip_128x128x128");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", (10334.9, -544.594, -217.922), 1); model = spawn( "script_model", (10334.9, -544.594, -217.922), 1);
model.angles = (0, -25, 0); model.angles = (0, -25, 0);
model setmodel("collision_clip_128x128x128"); model setmodel("collision_clip_128x128x128");
model disconnectpaths(); model disconnectpaths();
origin = (9720, -1090, -212); origin = (9720, -1090, -212);
angles = (0, 90, 0); angles = (0, 90, 0);
model = spawn( "script_model", origin, 1); model = spawn( "script_model", origin, 1);
model.angles = angles; model.angles = angles;
model setmodel("veh_t6_civ_smallwagon_dead"); model setmodel("veh_t6_civ_smallwagon_dead");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", origin + (anglesToRight(angles) * 24) + (anglesToUp(angles) * 128), 1); model = spawn( "script_model", origin + (anglesToRight(angles) * 24) + (anglesToUp(angles) * 128), 1);
model.angles = angles; model.angles = angles;
model setmodel("collision_clip_wall_256x256x10"); model setmodel("collision_clip_wall_256x256x10");
model disconnectpaths(); model disconnectpaths();
origin = (9900, -232, -217); origin = (9900, -232, -217);
angles = (0, -90, 0); angles = (0, -90, 0);
model = spawn( "script_model", origin, 1); model = spawn( "script_model", origin, 1);
model.angles = angles; model.angles = angles;
model setmodel("veh_t6_civ_microbus_dead"); model setmodel("veh_t6_civ_microbus_dead");
model disconnectpaths(); model disconnectpaths();
model = spawn( "script_model", origin + (anglesToRight(angles) * -48) + (anglesToUp(angles) * 128), 1); model = spawn( "script_model", origin + (anglesToRight(angles) * -48) + (anglesToUp(angles) * 128), 1);
model.angles = angles; model.angles = angles;
model setmodel("collision_clip_wall_256x256x10"); model setmodel("collision_clip_wall_256x256x10");
model disconnectpaths(); model disconnectpaths();
} }
disable_zombie_spawn_locations() disable_zombie_spawn_locations()
{ {
for ( z = 0; z < level.zone_keys.size; z++ ) for ( z = 0; z < level.zone_keys.size; z++ )
{ {
if ( level.zone_keys[ z ] != "zone_amb_cornfield" ) if ( level.zone_keys[ z ] != "zone_amb_cornfield" )
{ {
continue; continue;
} }
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if (zone.spawn_locations[i].origin[0] <= 9700) if (zone.spawn_locations[i].origin[0] <= 9700)
{ {
zone.spawn_locations[i].is_enabled = false; zone.spawn_locations[i].is_enabled = false;
} }
i++; i++;
} }
} }
} }

View File

@ -10,121 +10,121 @@
struct_init() struct_init()
{ {
scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( -3563, -7196, -59 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( -3563, -7196, -59 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( -6207, -6541, -46 ), ( 0, 60, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( -6207, -6541, -46 ), ( 0, 60, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( -5470, -7859.5, 0 ), ( 0, 270, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( -5470, -7859.5, 0 ), ( 0, 270, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( -4170, -7592, -63 ), ( 0, 270, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( -4170, -7592, -63 ), ( 0, 270, 0 ) );
ind = 0; ind = 0;
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for(i = 0; i < respawnpoints.size; i++) for(i = 0; i < respawnpoints.size; i++)
{ {
if(respawnpoints[i].script_noteworthy == "zone_gas") if(respawnpoints[i].script_noteworthy == "zone_gas")
{ {
ind = i; ind = i;
break; break;
} }
} }
zone = "zone_gas"; zone = "zone_gas";
scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int );
respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); respawn_array = getstructarray(respawnpoints[ind].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
if(respawn.script_int == 2) if(respawn.script_int == 2)
{ {
respawn.angles += (0, 180, 0); respawn.angles += (0, 180, 0);
} }
scripts\zm\replaced\utility::register_map_spawn( respawn.origin, respawn.angles, zone, respawn.script_int ); scripts\zm\replaced\utility::register_map_spawn( respawn.origin, respawn.angles, zone, respawn.script_int );
} }
zone = "zone_roadside_east"; zone = "zone_roadside_east";
scripts\zm\replaced\utility::register_map_spawn_group( (-4173, -7095, -35), zone, 6000 ); scripts\zm\replaced\utility::register_map_spawn_group( (-4173, -7095, -35), zone, 6000 );
scripts\zm\replaced\utility::register_map_spawn( (-4031, -6830, -18), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4031, -6830, -18), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4106, -6830, -18), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4106, -6830, -18), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4181, -6830, -18), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4181, -6830, -18), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4256, -6830, -18), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4256, -6830, -18), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4031, -7326, -35), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4031, -7326, -35), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4106, -7326, -35), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4106, -7326, -35), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4181, -7326, -35), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4181, -7326, -35), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-4256, -7326, -35), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-4256, -7326, -35), (0, 180, 0), zone );
zone = "zone_roadside_west"; zone = "zone_roadside_west";
scripts\zm\replaced\utility::register_map_spawn_group( (-5799, -6839, -30), zone, 6000 ); scripts\zm\replaced\utility::register_map_spawn_group( (-5799, -6839, -30), zone, 6000 );
scripts\zm\replaced\utility::register_map_spawn( (-6120, -6684, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-6120, -6684, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-6045, -6684, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-6045, -6684, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-5970, -6684, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-5970, -6684, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-5895, -6684, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-5895, -6684, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-6120, -6984, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-6120, -6984, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-6045, -6984, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-6045, -6984, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-5970, -6984, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-5970, -6984, -30), (0, 0, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-5895, -6984, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-5895, -6984, -30), (0, 0, 0), zone );
gameObjects = getEntArray( "script_model", "classname" ); gameObjects = getEntArray( "script_model", "classname" );
foreach ( object in gameObjects ) foreach ( object in gameObjects )
{ {
if ( isDefined( object.script_noteworthy ) && object.script_noteworthy == getDvar( "ui_zm_mapstartlocation" ) ) if ( isDefined( object.script_noteworthy ) && object.script_noteworthy == getDvar( "ui_zm_mapstartlocation" ) )
{ {
if ( isDefined( object.script_gameobjectname ) && object.script_gameobjectname == "zcleansed zturned" ) if ( isDefined( object.script_gameobjectname ) && object.script_gameobjectname == "zcleansed zturned" )
{ {
object.script_gameobjectname = "zstandard zgrief zcleansed zturned"; object.script_gameobjectname = "zstandard zgrief zcleansed zturned";
if(object.origin == (-6460.7, -7115, 6.8)) if(object.origin == (-6460.7, -7115, 6.8))
{ {
object setModel("veh_t6_civ_microbus_dead"); object setModel("veh_t6_civ_microbus_dead");
object.origin += anglesToUp(object.angles) * -65; object.origin += anglesToUp(object.angles) * -65;
object.origin += anglesToForward(object.angles) * 125; object.origin += anglesToForward(object.angles) * 125;
} }
else if(object.origin == (-6550.5, -6901.7, 6.8)) else if(object.origin == (-6550.5, -6901.7, 6.8))
{ {
object setModel("veh_t6_civ_smallwagon_dead"); object setModel("veh_t6_civ_smallwagon_dead");
object.origin += anglesToUp(object.angles) * -60; object.origin += anglesToUp(object.angles) * -60;
object.origin += anglesToForward(object.angles) * 150; object.origin += anglesToForward(object.angles) * 150;
} }
else if(object.origin == (-6251.1, -6449.4, 20.8)) else if(object.origin == (-6251.1, -6449.4, 20.8))
{ {
object setModel("veh_t6_civ_60s_coupe_dead"); object setModel("veh_t6_civ_60s_coupe_dead");
object.origin += anglesToUp(object.angles) * -60; object.origin += anglesToUp(object.angles) * -60;
object.origin += anglesToForward(object.angles) * 125; object.origin += anglesToForward(object.angles) * 125;
object.origin += anglesToRight(object.angles) * 25; object.origin += anglesToRight(object.angles) * 25;
} }
else if(object.origin == (-5822.9, -6434.6, 20.8)) else if(object.origin == (-5822.9, -6434.6, 20.8))
{ {
object setModel("p6_zm_rocks_medium_05"); object setModel("p6_zm_rocks_medium_05");
object.origin += anglesToUp(object.angles) * -80; object.origin += anglesToUp(object.angles) * -80;
object.origin += anglesToForward(object.angles) * 50; object.origin += anglesToForward(object.angles) * 50;
object.origin += anglesToRight(object.angles) * 100; object.origin += anglesToRight(object.angles) * 100;
} }
else if(object.origin == (-5589.5, -6310.3, 24.8)) else if(object.origin == (-5589.5, -6310.3, 24.8))
{ {
object setModel("p6_zm_rocks_medium_05"); object setModel("p6_zm_rocks_medium_05");
object.origin += anglesToUp(object.angles) * -80; object.origin += anglesToUp(object.angles) * -80;
object.origin += anglesToForward(object.angles) * 50; object.origin += anglesToForward(object.angles) * 50;
object.origin += anglesToRight(object.angles) * 125; object.origin += anglesToRight(object.angles) * 125;
} }
else if(object.origin == (-4813, -6665.3, 0.8)) else if(object.origin == (-4813, -6665.3, 0.8))
{ {
object setModel("veh_t6_civ_60s_coupe_dead"); object setModel("veh_t6_civ_60s_coupe_dead");
object.origin += anglesToUp(object.angles) * -65; object.origin += anglesToUp(object.angles) * -65;
object.origin += anglesToForward(object.angles) * 100; object.origin += anglesToForward(object.angles) * 100;
} }
else if(object.origin == (-3978.4, -6484.9, 0.8)) else if(object.origin == (-3978.4, -6484.9, 0.8))
{ {
object setModel("veh_t6_civ_smallwagon_dead"); object setModel("veh_t6_civ_smallwagon_dead");
object.origin += anglesToUp(object.angles) * -60; object.origin += anglesToUp(object.angles) * -60;
object.origin += anglesToForward(object.angles) * 125; object.origin += anglesToForward(object.angles) * 125;
} }
else if(object.origin == (-3902.4, -6884.9, 0.8)) else if(object.origin == (-3902.4, -6884.9, 0.8))
{ {
object setModel("veh_t6_civ_microbus_dead"); object setModel("veh_t6_civ_microbus_dead");
object.origin += anglesToUp(object.angles) * -65; object.origin += anglesToUp(object.angles) * -65;
object.origin += anglesToForward(object.angles) * 50; object.origin += anglesToForward(object.angles) * 50;
} }
} }
} }
} }
} }
@ -135,30 +135,30 @@ precache()
main() main()
{ {
level.zones["zone_diner_roof"].is_enabled = 0; level.zones["zone_diner_roof"].is_enabled = 0;
level.zones["zone_trans_diner2"].is_enabled = 0; level.zones["zone_trans_diner2"].is_enabled = 0;
treasure_chest_init(); treasure_chest_init();
init_wallbuys(); init_wallbuys();
init_barriers(); init_barriers();
generatebuildabletarps(); generatebuildabletarps();
disable_zombie_spawn_locations(); disable_zombie_spawn_locations();
scripts\zm\locs\loc_common::init(); scripts\zm\locs\loc_common::init();
} }
treasure_chest_init() treasure_chest_init()
{ {
chests = getstructarray( "treasure_chest_use", "targetname" ); chests = getstructarray( "treasure_chest_use", "targetname" );
level.chests = []; level.chests = [];
level.chests[0] = chests[3]; level.chests[0] = chests[3];
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
} }
init_wallbuys() init_wallbuys()
{ {
scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( -5085, -7807, -5 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( -5085, -7807, -5 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -4576, -7748, 18 ), ( 0, 90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -4576, -7748, 18 ), ( 0, 90, 0 ) );
scripts\zm\replaced\utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( -5489, -7982.7, 62 ), ( 0, 1, 0 ) ); scripts\zm\replaced\utility::wallbuy( "mp5k_zm", "mp5", "weapon_upgrade", ( -5489, -7982.7, 62 ), ( 0, 1, 0 ) );
scripts\zm\replaced\utility::wallbuy( "tazer_knuckles_zm", "tazer_knuckles", "tazer_upgrade", ( -6265, -7941, 100 ), ( 0, 90, 0 ) ); scripts\zm\replaced\utility::wallbuy( "tazer_knuckles_zm", "tazer_knuckles", "tazer_upgrade", ( -6265, -7941, 100 ), ( 0, 90, 0 ) );
} }
init_barriers() init_barriers()
@ -167,17 +167,17 @@ init_barriers()
collision setmodel( "zm_collision_transit_diner_survival" ); collision setmodel( "zm_collision_transit_diner_survival" );
collision disconnectpaths(); collision disconnectpaths();
origin = ( -6350, -7046, -60 ); origin = ( -6350, -7046, -60 );
angles = ( 0, 165, 0 ); angles = ( 0, 165, 0 );
scripts\zm\replaced\utility::barrier( "collision_player_wall_64x64x10", origin + (anglesToUp(angles) * 32), angles ); scripts\zm\replaced\utility::barrier( "collision_player_wall_64x64x10", origin + (anglesToUp(angles) * 32), angles );
scripts\zm\replaced\utility::barrier( "collision_player_wall_64x64x10", origin + (anglesToUp(angles) * 96), angles ); scripts\zm\replaced\utility::barrier( "collision_player_wall_64x64x10", origin + (anglesToUp(angles) * 96), angles );
scripts\zm\replaced\utility::barrier( "afr_barrel_biohazard_white_rust", origin + (anglesToForward(angles) * -24) + (anglesToRight(angles) * -16) + (anglesToUp(angles) * 14), angles + (0, 90, 90) ); scripts\zm\replaced\utility::barrier( "afr_barrel_biohazard_white_rust", origin + (anglesToForward(angles) * -24) + (anglesToRight(angles) * -16) + (anglesToUp(angles) * 14), angles + (0, 90, 90) );
} }
generatebuildabletarps() generatebuildabletarps()
{ {
tarp = spawn( "script_model", ( -4688, -7974, -64 ) ); tarp = spawn( "script_model", ( -4688, -7974, -64 ) );
tarp.angles = ( 0, 0, 0 ); tarp.angles = ( 0, 0, 0 );
tarp setModel( "p6_zm_buildable_bench_tarp" ); tarp setModel( "p6_zm_buildable_bench_tarp" );
} }
@ -187,35 +187,35 @@ disable_zombie_spawn_locations()
{ {
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner_spawners") if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner_spawners")
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner2_spawners") else if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner2_spawners")
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -3825, -6576, -52.7 ) ) else if ( zone.spawn_locations[ i ].origin == ( -3825, -6576, -52.7 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -5130, -6512, -35.4 ) ) else if ( zone.spawn_locations[ i ].origin == ( -5130, -6512, -35.4 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -6462, -7159, -64 ) ) else if ( zone.spawn_locations[ i ].origin == ( -6462, -7159, -64 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -6531, -6613, -54.4 ) ) else if ( zone.spawn_locations[ i ].origin == ( -6531, -6613, -54.4 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
i++; i++;
} }
} }
} }

View File

@ -10,28 +10,28 @@
struct_init() struct_init()
{ {
scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( 10952, 8055, -565 ), ( 0, 270, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( 10952, 8055, -565 ), ( 0, 270, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( 11855, 7308, -758 ), ( 0, 220, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( 11855, 7308, -758 ), ( 0, 220, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( 11571, 7723, -757 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( 11571, 7723, -757 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( 11414, 8930, -352 ), ( 0, 0, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( 11414, 8930, -352 ), ( 0, 0, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_scavenger", "zombie_vending_tombstone", ( 10946, 8308.77, -408 ), ( 0, 270, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_scavenger", "zombie_vending_tombstone", ( 10946, 8308.77, -408 ), ( 0, 270, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( 12333, 8158, -752 ), ( 0, 180, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( 12333, 8158, -752 ), ( 0, 180, 0 ) );
ind = 0; ind = 0;
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for(i = 0; i < respawnpoints.size; i++) for(i = 0; i < respawnpoints.size; i++)
{ {
if(respawnpoints[i].script_noteworthy == "zone_prr") if(respawnpoints[i].script_noteworthy == "zone_prr")
{ {
ind = i; ind = i;
break; break;
} }
} }
zone = "zone_pow"; zone = "zone_pow";
scripts\zm\replaced\utility::register_map_spawn_group( (10160, 7820, -541), zone, 6000 ); scripts\zm\replaced\utility::register_map_spawn_group( (10160, 7820, -541), zone, 6000 );
scripts\zm\replaced\utility::register_map_spawn( (10160, 8060, -541), (0, 0, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (10160, 8060, -541), (0, 0, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (10160, 7996, -541), (0, 0, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (10160, 7996, -541), (0, 0, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (10160, 7932, -541), (0, 0, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (10160, 7932, -541), (0, 0, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (10160, 7868, -541), (0, 0, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (10160, 7868, -541), (0, 0, 0), zone, 1 );
@ -43,9 +43,9 @@ struct_init()
zone = "zone_prr"; zone = "zone_prr";
scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int );
respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); respawn_array = getstructarray(respawnpoints[ind].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
angles = respawn.angles; angles = respawn.angles;
if (respawn.origin[0] < 12200) if (respawn.origin[0] < 12200)
{ {
@ -56,13 +56,13 @@ struct_init()
angles += (0, -90, 0); angles += (0, -90, 0);
} }
scripts\zm\replaced\utility::register_map_spawn( respawn.origin, angles, zone ); scripts\zm\replaced\utility::register_map_spawn( respawn.origin, angles, zone );
} }
zone = "zone_pow_warehouse"; zone = "zone_pow_warehouse";
scripts\zm\replaced\utility::register_map_spawn_group( (11033, 8587, -387), zone, 6000 ); scripts\zm\replaced\utility::register_map_spawn_group( (11033, 8587, -387), zone, 6000 );
scripts\zm\replaced\utility::register_map_spawn( (11341, 8300, -459), (0, 90, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11341, 8300, -459), (0, 90, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (11341, 8587, -387), (0, 90, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11341, 8587, -387), (0, 90, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (11341, 8846, -322), (0, 180, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (11341, 8846, -322), (0, 180, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (10630, 8846, -323), (0, -90, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10630, 8846, -323), (0, -90, 0), zone );
@ -79,23 +79,23 @@ precache()
main() main()
{ {
treasure_chest_init(); treasure_chest_init();
init_wallbuys(); init_wallbuys();
init_barriers(); init_barriers();
show_powerswitch(); show_powerswitch();
activate_core(); activate_core();
generatebuildabletarps(); generatebuildabletarps();
disable_zombie_spawn_locations(); disable_zombie_spawn_locations();
disable_player_spawn_locations(); disable_player_spawn_locations();
scripts\zm\locs\loc_common::init(); scripts\zm\locs\loc_common::init();
} }
treasure_chest_init() treasure_chest_init()
{ {
chests = getstructarray( "treasure_chest_use", "targetname" ); chests = getstructarray( "treasure_chest_use", "targetname" );
level.chests = []; level.chests = [];
level.chests[0] = chests[2]; level.chests[0] = chests[2];
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "pow_chest" ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( "pow_chest" );
} }
init_wallbuys() init_wallbuys()
@ -126,16 +126,16 @@ init_barriers()
show_powerswitch() show_powerswitch()
{ {
body = spawn( "script_model", ( 12237.4, 8512, -749.9 ) ); body = spawn( "script_model", ( 12237.4, 8512, -749.9 ) );
body.angles = ( 0, 0, 0 ); body.angles = ( 0, 0, 0 );
body setModel( "p6_zm_buildable_pswitch_body" ); body setModel( "p6_zm_buildable_pswitch_body" );
lever = spawn( "script_model", ( 12237.4, 8503, -703.65 ) ); lever = spawn( "script_model", ( 12237.4, 8503, -703.65 ) );
lever.angles = ( 0, 0, 0 ); lever.angles = ( 0, 0, 0 );
lever setModel( "p6_zm_buildable_pswitch_lever" ); lever setModel( "p6_zm_buildable_pswitch_lever" );
hand = spawn( "script_model", ( 12237.7, 8503.1, -684.55 ) ); hand = spawn( "script_model", ( 12237.7, 8503.1, -684.55 ) );
hand.angles = ( 0, 270, 0 ); hand.angles = ( 0, 270, 0 );
hand setModel( "p6_zm_buildable_pswitch_hand" ); hand setModel( "p6_zm_buildable_pswitch_hand" );
} }
@ -152,13 +152,13 @@ generatebuildabletarps()
{ {
// trap // trap
tarp = spawn( "script_model", ( 11325, 8170, -488 ) ); tarp = spawn( "script_model", ( 11325, 8170, -488 ) );
tarp.angles = ( 0, 0, 0 ); tarp.angles = ( 0, 0, 0 );
tarp setModel( "p6_zm_buildable_bench_tarp" ); tarp setModel( "p6_zm_buildable_bench_tarp" );
} }
disable_zombie_spawn_locations() disable_zombie_spawn_locations()
{ {
level.zones["zone_trans_8"].is_spawning_allowed = 0; level.zones["zone_trans_8"].is_spawning_allowed = 0;
} }
disable_player_spawn_locations() disable_player_spawn_locations()

View File

@ -10,30 +10,30 @@
struct_init() struct_init()
{ {
scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( -11541, -2630, 194 ), ( 0, -180, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_armorvest", "zombie_vending_jugg", ( -11541, -2630, 194 ), ( 0, -180, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( -10780, -2565, 224 ), ( 0, 274, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_quickrevive", "zombie_vending_quickrevive", ( -10780, -2565, 224 ), ( 0, 274, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( -11373, -1674, 192 ), ( 0, -89, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_fastreload", "zombie_vending_sleight", ( -11373, -1674, 192 ), ( 0, -89, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( -11170, -590, 196 ), ( 0, -10, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_rof", "zombie_vending_doubletap2", ( -11170, -590, 196 ), ( 0, -10, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_longersprint", "zombie_vending_marathon", ( -11681, -734, 228 ), ( 0, -19, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_longersprint", "zombie_vending_marathon", ( -11681, -734, 228 ), ( 0, -19, 0 ) );
scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( -11301, -2096, 184 ), ( 0, 115, 0 ) ); scripts\zm\replaced\utility::register_perk_struct( "specialty_weapupgrade", "p6_anim_zm_buildable_pap_on", ( -11301, -2096, 184 ), ( 0, 115, 0 ) );
zone = "zone_amb_tunnel"; zone = "zone_amb_tunnel";
scripts\zm\replaced\utility::register_map_spawn_group( (-11246, -1695, 220), zone, 1000 ); scripts\zm\replaced\utility::register_map_spawn_group( (-11246, -1695, 220), zone, 1000 );
scripts\zm\replaced\utility::register_map_spawn( (-11406, -667, 220), (0, -6, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (-11406, -667, 220), (0, -6, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (-11568, -1179, 220), (0, 0, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (-11568, -1179, 220), (0, 0, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (-11473, -1924, 220), (0, -15, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (-11473, -1924, 220), (0, -15, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (-11457, -2400, 220), (0, 2, 0), zone, 1 ); scripts\zm\replaced\utility::register_map_spawn( (-11457, -2400, 220), (0, 2, 0), zone, 1 );
scripts\zm\replaced\utility::register_map_spawn( (-10971, -770, 220), (0, 164, 0), zone, 2 ); scripts\zm\replaced\utility::register_map_spawn( (-10971, -770, 220), (0, 164, 0), zone, 2 );
scripts\zm\replaced\utility::register_map_spawn( (-11009, -1126, 220), (0, 179, 0), zone, 2 ); scripts\zm\replaced\utility::register_map_spawn( (-11009, -1126, 220), (0, 179, 0), zone, 2 );
scripts\zm\replaced\utility::register_map_spawn( (-11028, -1996, 220), (0, -176, 0), zone, 2 ); scripts\zm\replaced\utility::register_map_spawn( (-11028, -1996, 220), (0, -176, 0), zone, 2 );
scripts\zm\replaced\utility::register_map_spawn( (-11017, -2384, 220), (0, -176, 0), zone, 2 ); scripts\zm\replaced\utility::register_map_spawn( (-11017, -2384, 220), (0, -176, 0), zone, 2 );
scripts\zm\replaced\utility::register_map_spawn( (-10916, -408, 220), (0, -100, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-10916, -408, 220), (0, -100, 0), zone );
scripts\zm\replaced\utility::register_map_spawn( (-10965, -2987, 220), (0, 95, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-10965, -2987, 220), (0, 95, 0), zone );
} }
precache() precache()
{ {
start_chest_zbarrier = getEnt( "start_chest_zbarrier", "script_noteworthy" ); start_chest_zbarrier = getEnt( "start_chest_zbarrier", "script_noteworthy" );
start_chest_zbarrier.origin = ( -10803, -1897, 196 ); start_chest_zbarrier.origin = ( -10803, -1897, 196 );
start_chest_zbarrier.angles = ( 0, 89, 0 ); start_chest_zbarrier.angles = ( 0, 89, 0 );
start_chest = spawnStruct(); start_chest = spawnStruct();
@ -44,15 +44,15 @@ precache()
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 0, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 0, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, -32, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, -32, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 64 ), 1 ); collision = spawn( "script_model", start_chest_zbarrier.origin + ( 0, 32, 64 ), 1 );
collision.angles = start_chest_zbarrier.angles; collision.angles = start_chest_zbarrier.angles;
collision setmodel( "collision_clip_32x32x128" ); collision setmodel( "collision_clip_32x32x128" );
collision disconnectpaths(); collision disconnectpaths();
level.chests = []; level.chests = [];
level.chests[0] = start_chest; level.chests[0] = start_chest;
@ -62,32 +62,32 @@ main()
{ {
init_wallbuys(); init_wallbuys();
init_barriers(); init_barriers();
disable_zombie_spawn_locations(); disable_zombie_spawn_locations();
maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest" ) ) ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( random( array( "start_chest" ) ) );
scripts\zm\locs\loc_common::init(); scripts\zm\locs\loc_common::init();
} }
init_wallbuys() init_wallbuys()
{ {
scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( -11166, -2844, 247 ), ( 0, -86, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( -11166, -2844, 247 ), ( 0, -86, 0 ) );
scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -10735, -2960, 247 ), ( 0, 97, 0 ) ); scripts\zm\replaced\utility::wallbuy( "rottweil72_zm", "olympia", "weapon_upgrade", ( -10735, -2960, 247 ), ( 0, 97, 0 ) );
scripts\zm\replaced\utility::wallbuy( "ak74u_zm", "ak74u", "weapon_upgrade", ( -10656, -752, 247 ), ( 0, 83, 0 ) ); scripts\zm\replaced\utility::wallbuy( "ak74u_zm", "ak74u", "weapon_upgrade", ( -10656, -752, 247 ), ( 0, 83, 0 ) );
scripts\zm\replaced\utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( -11839, -1695.1, 287 ), ( 0, 270, 0 ) ); scripts\zm\replaced\utility::wallbuy( "m16_zm", "m16", "weapon_upgrade", ( -11839, -1695.1, 287 ), ( 0, 270, 0 ) );
scripts\zm\replaced\utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( -11839, -2406, 283 ), ( 0, -93, 0 ) ); scripts\zm\replaced\utility::wallbuy( "sticky_grenade_zm", "sticky_grenade", "weapon_upgrade", ( -11839, -2406, 283 ), ( 0, -93, 0 ) );
scripts\zm\replaced\utility::wallbuy( "bowie_knife_zm", "bowie_knife", "bowie_upgrade", ( -10787, -1430, 247 ), ( 0, 88, 0 ) ); scripts\zm\replaced\utility::wallbuy( "bowie_knife_zm", "bowie_knife", "bowie_upgrade", ( -10787, -1430, 247 ), ( 0, 88, 0 ) );
} }
init_barriers() init_barriers()
{ {
origin = ( -11270, -500, 255 ); origin = ( -11270, -500, 255 );
angles = ( 0, 195, 0 ); angles = ( 0, 195, 0 );
scripts\zm\replaced\utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * -25) + (anglesToForward(angles) * 150), angles ); scripts\zm\replaced\utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * -25) + (anglesToForward(angles) * 150), angles );
scripts\zm\replaced\utility::barrier( "veh_t6_civ_60s_coupe_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * 125) + (anglesToRight(angles) * 25), angles ); scripts\zm\replaced\utility::barrier( "veh_t6_civ_60s_coupe_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * 125) + (anglesToRight(angles) * 25), angles );
scripts\zm\replaced\utility::barrier( "veh_t6_civ_smallwagon_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * -30) + (anglesToRight(angles) * 50), angles + (0, -90, 0) ); scripts\zm\replaced\utility::barrier( "veh_t6_civ_smallwagon_dead", origin + (anglesToUp(angles) * -63) + (anglesToForward(angles) * -30) + (anglesToRight(angles) * 50), angles + (0, -90, 0) );
origin = ( -10750, -3275, 255 ); origin = ( -10750, -3275, 255 );
angles = ( 0, 195, 0 ); angles = ( 0, 195, 0 );
scripts\zm\replaced\utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * 55), angles ); scripts\zm\replaced\utility::barrier( "collision_player_wall_512x512x10", origin + (anglesToRight(angles) * 55), angles );
scripts\zm\replaced\utility::barrier( "veh_t6_civ_movingtrk_cab_dead", origin, angles ); scripts\zm\replaced\utility::barrier( "veh_t6_civ_movingtrk_cab_dead", origin, angles );
} }
@ -97,39 +97,39 @@ disable_zombie_spawn_locations()
{ {
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if ( zone.spawn_locations[ i ].origin == ( -11447, -3424, 254.2 ) ) if ( zone.spawn_locations[ i ].origin == ( -11447, -3424, 254.2 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -11093, 393, 192 ) ) else if ( zone.spawn_locations[ i ].origin == ( -11093, 393, 192 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -10944, -3846, 221.14 ) ) else if ( zone.spawn_locations[ i ].origin == ( -10944, -3846, 221.14 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -10836, 1195, 209.7 ) ) else if ( zone.spawn_locations[ i ].origin == ( -10836, 1195, 209.7 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -11251, -4397, 200.02 ) ) else if ( zone.spawn_locations[ i ].origin == ( -11251, -4397, 200.02 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -11334, -5280, 212.7 ) ) else if ( zone.spawn_locations[ i ].origin == ( -11334, -5280, 212.7 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
else if ( zone.spawn_locations[ i ].origin == ( -11347, -3134, 283.9 ) ) else if ( zone.spawn_locations[ i ].origin == ( -11347, -3134, 283.9 ) )
{ {
zone.spawn_locations[ i ].is_enabled = false; zone.spawn_locations[ i ].is_enabled = false;
} }
i++; i++;
} }
} }
} }

View File

@ -2,5 +2,5 @@
onplayerconnect() onplayerconnect()
{ {
// removed // removed
} }

View File

@ -7,31 +7,31 @@
menuautoassign( comingfrommenu ) menuautoassign( comingfrommenu )
{ {
teamkeys = getarraykeys( level.teams ); teamkeys = getarraykeys( level.teams );
assignment = self get_assigned_team(); assignment = self get_assigned_team();
self closemenus(); self closemenus();
self.pers["team"] = assignment; self.pers["team"] = assignment;
self.team = assignment; self.team = assignment;
self.pers["class"] = undefined; self.pers["class"] = undefined;
self.class = undefined; self.class = undefined;
self.pers["weapon"] = undefined; self.pers["weapon"] = undefined;
self.pers["savedmodel"] = undefined; self.pers["savedmodel"] = undefined;
self updateobjectivetext(); self updateobjectivetext();
if ( level.teambased ) if ( level.teambased )
self.sessionteam = assignment; self.sessionteam = assignment;
else else
{ {
self.sessionteam = "none"; self.sessionteam = "none";
self.ffateam = assignment; self.ffateam = assignment;
} }
self notify( "joined_team" ); self notify( "joined_team" );
level notify( "joined_team" ); level notify( "joined_team" );
self notify( "end_respawn" ); self notify( "end_respawn" );
self beginclasschoice(); self beginclasschoice();
self setclientscriptmainmenu( game["menu_class"] ); self setclientscriptmainmenu( game["menu_class"] );
} }
get_assigned_team() get_assigned_team()
@ -40,65 +40,65 @@ get_assigned_team()
teamplayers["axis"] = 0; teamplayers["axis"] = 0;
teamplayers["allies"] = 0; teamplayers["allies"] = 0;
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( !isDefined(player.team) || (player.team != "axis" && player.team != "allies") ) if ( !isDefined(player.team) || (player.team != "axis" && player.team != "allies") )
{ {
continue; continue;
} }
if ( player == self ) if ( player == self )
{ {
continue; continue;
} }
teamplayers[player.team]++; teamplayers[player.team]++;
} }
if ( teamplayers["axis"] <= teamplayers["allies"] ) if ( teamplayers["axis"] <= teamplayers["allies"] )
{ {
guids = strTok(getDvar("team_axis"), " "); guids = strTok(getDvar("team_axis"), " ");
foreach ( guid in guids ) foreach ( guid in guids )
{ {
if ( self getguid() == int(guid) ) if ( self getguid() == int(guid) )
{ {
arrayRemoveValue(guids, guid); arrayRemoveValue(guids, guid);
guid_text = ""; guid_text = "";
foreach (guid in guids) foreach (guid in guids)
{ {
guid_text += guid + " "; guid_text += guid + " ";
} }
setDvar("team_axis", guid_text); setDvar("team_axis", guid_text);
return "axis"; return "axis";
} }
} }
} }
if ( teamplayers["allies"] <= teamplayers["axis"] ) if ( teamplayers["allies"] <= teamplayers["axis"] )
{ {
guids = strTok(getDvar("team_allies"), " "); guids = strTok(getDvar("team_allies"), " ");
foreach ( guid in guids ) foreach ( guid in guids )
{ {
if ( self getguid() == int(guid) ) if ( self getguid() == int(guid) )
{ {
arrayRemoveValue(guids, guid); arrayRemoveValue(guids, guid);
guid_text = ""; guid_text = "";
foreach (guid in guids) foreach (guid in guids)
{ {
guid_text += guid + " "; guid_text += guid + " ";
} }
setDvar("team_allies", guid_text); setDvar("team_allies", guid_text);
return "allies"; return "allies";
} }
} }
} }
if ( teamplayers["allies"] == teamplayers["axis"] ) if ( teamplayers["allies"] == teamplayers["axis"] )
{ {

View File

@ -6,5 +6,5 @@
onplayerconnect() onplayerconnect()
{ {
// removed // removed
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -16,107 +16,107 @@
check_range_attack() check_range_attack()
{ {
enemy = self.favoriteenemy; enemy = self.favoriteenemy;
if ( isdefined( enemy ) ) if ( isdefined( enemy ) )
{ {
vec_enemy = enemy.origin - self.origin; vec_enemy = enemy.origin - self.origin;
dist_sq = lengthsquared( vec_enemy ); dist_sq = lengthsquared( vec_enemy );
if ( dist_sq > 4096 && dist_sq < 360000 ) if ( dist_sq > 4096 && dist_sq < 360000 )
{ {
vec_facing = anglestoforward( self.angles ); vec_facing = anglestoforward( self.angles );
norm_facing = vectornormalize( vec_facing ); norm_facing = vectornormalize( vec_facing );
norm_enemy = vectornormalize( vec_enemy ); norm_enemy = vectornormalize( vec_enemy );
dot = vectordot( norm_facing, norm_enemy ); dot = vectordot( norm_facing, norm_enemy );
if ( dot > 0.99 ) if ( dot > 0.99 )
{ {
enemy_eye_pos = enemy geteye(); enemy_eye_pos = enemy geteye();
eye_pos = self geteye(); eye_pos = self geteye();
passed = bullettracepassed( eye_pos, enemy_eye_pos, 0, undefined ); passed = bullettracepassed( eye_pos, enemy_eye_pos, 0, undefined );
if ( passed ) if ( passed )
return true; return true;
} }
} }
} }
return false; return false;
} }
avogadro_exit( from ) avogadro_exit( from )
{ {
powerup_origin = spawn( "script_origin", self.origin ); powerup_origin = spawn( "script_origin", self.origin );
if ( self.state == "attacking_bus" || self.state == "stay_attached" ) if ( self.state == "attacking_bus" || self.state == "stay_attached" )
{ {
powerup_origin linkto( level.the_bus ); powerup_origin linkto( level.the_bus );
} }
self.state = "exiting"; self.state = "exiting";
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self setfreecameralockonallowed( 0 ); self setfreecameralockonallowed( 0 );
self.audio_loop_ent stoploopsound( 0.5 ); self.audio_loop_ent stoploopsound( 0.5 );
self notify( "stop_health" ); self notify( "stop_health" );
if ( isdefined( self.health_fx ) ) if ( isdefined( self.health_fx ) )
{ {
self.health_fx unlink(); self.health_fx unlink();
self.health_fx delete(); self.health_fx delete();
} }
if ( isdefined( from ) ) if ( isdefined( from ) )
{ {
if ( from == "bus" ) if ( from == "bus" )
{ {
self playsound( "zmb_avogadro_death_short" ); self playsound( "zmb_avogadro_death_short" );
playfx( level._effect["avogadro_ascend_aerial"], self.origin ); playfx( level._effect["avogadro_ascend_aerial"], self.origin );
self animscripted( self.origin, self.angles, "zm_bus_win" ); self animscripted( self.origin, self.angles, "zm_bus_win" );
maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" );
} }
else if ( from == "chamber" ) else if ( from == "chamber" )
{ {
self playsound( "zmb_avogadro_death_short" ); self playsound( "zmb_avogadro_death_short" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_chamber_out" ); self animscripted( self.origin, self.angles, "zm_chamber_out" );
wait 0.4; wait 0.4;
self ghost(); self ghost();
stop_exploder( 500 ); stop_exploder( 500 );
} }
else else
{ {
self playsound( "zmb_avogadro_death" ); self playsound( "zmb_avogadro_death" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_exit" ); self animscripted( self.origin, self.angles, "zm_exit" );
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
} }
} }
else else
{ {
self playsound( "zmb_avogadro_death" ); self playsound( "zmb_avogadro_death" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_exit" ); self animscripted( self.origin, self.angles, "zm_exit" );
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
} }
if ( !isdefined( from ) || from != "chamber" ) if ( !isdefined( from ) || from != "chamber" )
level thread do_avogadro_flee_vo( self ); level thread do_avogadro_flee_vo( self );
self ghost(); self ghost();
self.hit_by_melee = 0; self.hit_by_melee = 0;
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self linkto( self.anchor );
if ( isdefined( from ) && from == "exit_idle" ) if ( isdefined( from ) && from == "exit_idle" )
self.return_round = level.round_number; self.return_round = level.round_number;
else else
self.return_round = level.round_number + randomintrange( 2, 5 ); self.return_round = level.round_number + randomintrange( 2, 5 );
level.next_avogadro_round = self.return_round; level.next_avogadro_round = self.return_round;
self.state = "cloud"; self.state = "cloud";
self thread cloud_update_fx(); self thread cloud_update_fx();
if ( !isdefined( from ) ) if ( !isdefined( from ) )
{ {
@ -127,69 +127,69 @@ avogadro_exit( from )
level thread maps\mp\zombies\_zm_powerups::powerup_drop( powerup_origin.origin ); level thread maps\mp\zombies\_zm_powerups::powerup_drop( powerup_origin.origin );
} }
powerup_origin delete(); powerup_origin delete();
} }
cloud_update_fx() cloud_update_fx()
{ {
self endon( "cloud_fx_end" ); self endon( "cloud_fx_end" );
level endon( "end_game" ); level endon( "end_game" );
region = []; region = [];
region[0] = "bus"; region[0] = "bus";
region[1] = "diner"; region[1] = "diner";
region[2] = "farm"; region[2] = "farm";
region[3] = "cornfield"; region[3] = "cornfield";
region[4] = "power"; region[4] = "power";
region[5] = "town"; region[5] = "town";
if ( !isdefined( self.sndent ) ) if ( !isdefined( self.sndent ) )
{ {
self.sndent = spawn( "script_origin", ( 0, 0, 0 ) ); self.sndent = spawn( "script_origin", ( 0, 0, 0 ) );
self.sndent playloopsound( "zmb_avogadro_thunder_overhead" ); self.sndent playloopsound( "zmb_avogadro_thunder_overhead" );
} }
cloud_time = gettime(); cloud_time = gettime();
for ( vo_counter = 0; 1; vo_counter++ ) for ( vo_counter = 0; 1; vo_counter++ )
{ {
if ( gettime() >= cloud_time ) if ( gettime() >= cloud_time )
{ {
if ( isdefined( self.current_region ) ) if ( isdefined( self.current_region ) )
{ {
exploder_num = level.transit_region[self.current_region].exploder; exploder_num = level.transit_region[self.current_region].exploder;
stop_exploder( exploder_num ); stop_exploder( exploder_num );
} }
rand_region = array_randomize( region ); rand_region = array_randomize( region );
region_str = rand_region[0]; region_str = rand_region[0];
if ( !isdefined( self.current_region ) ) if ( !isdefined( self.current_region ) )
region_str = region[4]; region_str = region[4];
self.current_region = region_str; self.current_region = region_str;
exploder_num = level.transit_region[region_str].exploder; exploder_num = level.transit_region[region_str].exploder;
exploder( exploder_num ); exploder( exploder_num );
self.sndent moveto( level.transit_region[region_str].sndorigin, 3 ); self.sndent moveto( level.transit_region[region_str].sndorigin, 3 );
cloud_time = gettime() + 30000; cloud_time = gettime() + 30000;
} }
if ( vo_counter > 50 ) if ( vo_counter > 50 )
{ {
player = self get_player_in_region(); player = self get_player_in_region();
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
if ( isdefined( self._in_cloud ) && self._in_cloud ) if ( isdefined( self._in_cloud ) && self._in_cloud )
player thread do_player_general_vox( "general", "avogadro_above", 90, 10 ); player thread do_player_general_vox( "general", "avogadro_above", 90, 10 );
else else
player thread do_player_general_vox( "general", "avogadro_arrive", 60, 40 ); player thread do_player_general_vox( "general", "avogadro_arrive", 60, 40 );
} }
else else
level thread avogadro_storm_vox(); level thread avogadro_storm_vox();
vo_counter = 0; vo_counter = 0;
} }
wait 0.1; wait 0.1;
} }
} }

View File

@ -6,69 +6,69 @@
init() init()
{ {
level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" ); level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" );
if ( level.brutus_spawners.size == 0 ) if ( level.brutus_spawners.size == 0 )
return; return;
array_thread( level.brutus_spawners, ::add_spawn_function, ::brutus_prespawn ); array_thread( level.brutus_spawners, ::add_spawn_function, ::brutus_prespawn );
for ( i = 0; i < level.brutus_spawners.size; i++ ) for ( i = 0; i < level.brutus_spawners.size; i++ )
{ {
level.brutus_spawners[i].is_enabled = 1; level.brutus_spawners[i].is_enabled = 1;
level.brutus_spawners[i].script_forcespawn = 1; level.brutus_spawners[i].script_forcespawn = 1;
} }
level.brutus_spawn_positions = getstructarray( "brutus_location", "script_noteworthy" ); level.brutus_spawn_positions = getstructarray( "brutus_location", "script_noteworthy" );
level thread setup_interaction_matrix(); level thread setup_interaction_matrix();
level.sndbrutusistalking = 0; level.sndbrutusistalking = 0;
level.brutus_health = 500; level.brutus_health = 500;
level.brutus_health_increase = 1000; level.brutus_health_increase = 1000;
level.brutus_round_count = 0; level.brutus_round_count = 0;
level.brutus_last_spawn_round = 0; level.brutus_last_spawn_round = 0;
level.brutus_count = 0; level.brutus_count = 0;
level.brutus_max_count = 1; level.brutus_max_count = 1;
level.brutus_damage_percent = 0.1; level.brutus_damage_percent = 0.1;
level.brutus_helmet_shots = 5; level.brutus_helmet_shots = 5;
level.brutus_team_points_for_death = 500; level.brutus_team_points_for_death = 500;
level.brutus_player_points_for_death = 250; level.brutus_player_points_for_death = 250;
level.brutus_points_for_helmet = 250; level.brutus_points_for_helmet = 250;
level.brutus_alarm_chance = 100; level.brutus_alarm_chance = 100;
level.brutus_min_alarm_chance = 100; level.brutus_min_alarm_chance = 100;
level.brutus_alarm_chance_increment = 10; level.brutus_alarm_chance_increment = 10;
level.brutus_max_alarm_chance = 200; level.brutus_max_alarm_chance = 200;
level.brutus_min_round_fq = 4; level.brutus_min_round_fq = 4;
level.brutus_max_round_fq = 7; level.brutus_max_round_fq = 7;
level.brutus_reset_dist_sq = 262144; level.brutus_reset_dist_sq = 262144;
level.brutus_aggro_dist_sq = 16384; level.brutus_aggro_dist_sq = 16384;
level.brutus_aggro_earlyout = 12; level.brutus_aggro_earlyout = 12;
level.brutus_blocker_pieces_req = 1; level.brutus_blocker_pieces_req = 1;
level.brutus_zombie_per_round = 1; level.brutus_zombie_per_round = 1;
level.brutus_players_in_zone_spawn_point_cap = 120; level.brutus_players_in_zone_spawn_point_cap = 120;
level.brutus_teargas_duration = 7; level.brutus_teargas_duration = 7;
level.player_teargas_duration = 2; level.player_teargas_duration = 2;
level.brutus_teargas_radius = 64; level.brutus_teargas_radius = 64;
level.num_pulls_since_brutus_spawn = 0; level.num_pulls_since_brutus_spawn = 0;
level.brutus_min_pulls_between_box_spawns = 4; level.brutus_min_pulls_between_box_spawns = 4;
level.brutus_explosive_damage_for_helmet_pop = 1500; level.brutus_explosive_damage_for_helmet_pop = 1500;
level.brutus_explosive_damage_increase = 600; level.brutus_explosive_damage_increase = 600;
level.brutus_failed_paths_to_teleport = 15; level.brutus_failed_paths_to_teleport = 15;
level.brutus_do_prologue = 1; level.brutus_do_prologue = 1;
level.brutus_min_spawn_delay = 10.0; level.brutus_min_spawn_delay = 10.0;
level.brutus_max_spawn_delay = 60.0; level.brutus_max_spawn_delay = 60.0;
level.brutus_respawn_after_despawn = 1; level.brutus_respawn_after_despawn = 1;
level.brutus_in_grief = 0; level.brutus_in_grief = 0;
if ( getdvar( "ui_gametype" ) == "zgrief" ) if ( getdvar( "ui_gametype" ) == "zgrief" )
level.brutus_in_grief = 1; level.brutus_in_grief = 1;
level.brutus_shotgun_damage_mod = 1.5; level.brutus_shotgun_damage_mod = 1.5;
level.brutus_custom_goalradius = 48; level.brutus_custom_goalradius = 48;
registerclientfield( "actor", "helmet_off", 9000, 1, "int" ); registerclientfield( "actor", "helmet_off", 9000, 1, "int" );
registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" ); registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" );
level thread maps\mp\zombies\_zm_ai_brutus::brutus_spawning_logic(); level thread maps\mp\zombies\_zm_ai_brutus::brutus_spawning_logic();
level thread maps\mp\zombies\_zm_ai_brutus::get_brutus_interest_points(); level thread maps\mp\zombies\_zm_ai_brutus::get_brutus_interest_points();
level.custom_perk_validation = maps\mp\zombies\_zm_ai_brutus::check_perk_machine_valid; level.custom_perk_validation = maps\mp\zombies\_zm_ai_brutus::check_perk_machine_valid;
level.custom_craftable_validation = ::check_craftable_table_valid; level.custom_craftable_validation = ::check_craftable_table_valid;
@ -77,37 +77,37 @@ init()
setup_interaction_matrix() setup_interaction_matrix()
{ {
level.interaction_types = []; level.interaction_types = [];
level.interaction_types["magic_box"] = spawnstruct(); level.interaction_types["magic_box"] = spawnstruct();
level.interaction_types["magic_box"].priority = 0; level.interaction_types["magic_box"].priority = 0;
level.interaction_types["magic_box"].animstate = "zm_lock_magicbox"; level.interaction_types["magic_box"].animstate = "zm_lock_magicbox";
level.interaction_types["magic_box"].notify_name = "box_lock_anim"; level.interaction_types["magic_box"].notify_name = "box_lock_anim";
level.interaction_types["magic_box"].action_notetrack = "locked"; level.interaction_types["magic_box"].action_notetrack = "locked";
level.interaction_types["magic_box"].end_notetrack = "lock_done"; level.interaction_types["magic_box"].end_notetrack = "lock_done";
level.interaction_types["magic_box"].validity_func = ::is_magic_box_valid; level.interaction_types["magic_box"].validity_func = ::is_magic_box_valid;
level.interaction_types["magic_box"].get_func = ::get_magic_boxes; level.interaction_types["magic_box"].get_func = ::get_magic_boxes;
level.interaction_types["magic_box"].value_func = ::get_dist_score; level.interaction_types["magic_box"].value_func = ::get_dist_score;
level.interaction_types["magic_box"].interact_func = ::magic_box_lock; level.interaction_types["magic_box"].interact_func = ::magic_box_lock;
level.interaction_types["magic_box"].spawn_bias = 1000; level.interaction_types["magic_box"].spawn_bias = 1000;
level.interaction_types["magic_box"].num_times_to_scale = 1; level.interaction_types["magic_box"].num_times_to_scale = 1;
level.interaction_types["magic_box"].unlock_cost = 2000; level.interaction_types["magic_box"].unlock_cost = 2000;
level.interaction_types["perk_machine"] = spawnstruct(); level.interaction_types["perk_machine"] = spawnstruct();
level.interaction_types["perk_machine"].priority = 1; level.interaction_types["perk_machine"].priority = 1;
level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine"; level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine";
level.interaction_types["perk_machine"].notify_name = "perk_lock_anim"; level.interaction_types["perk_machine"].notify_name = "perk_lock_anim";
level.interaction_types["perk_machine"].action_notetrack = "locked"; level.interaction_types["perk_machine"].action_notetrack = "locked";
level.interaction_types["perk_machine"].validity_func = ::is_perk_machine_valid; level.interaction_types["perk_machine"].validity_func = ::is_perk_machine_valid;
level.interaction_types["perk_machine"].get_func = ::get_perk_machines; level.interaction_types["perk_machine"].get_func = ::get_perk_machines;
level.interaction_types["perk_machine"].value_func = ::get_dist_score; level.interaction_types["perk_machine"].value_func = ::get_dist_score;
level.interaction_types["perk_machine"].interact_func = ::perk_machine_lock; level.interaction_types["perk_machine"].interact_func = ::perk_machine_lock;
level.interaction_types["perk_machine"].spawn_bias = 800; level.interaction_types["perk_machine"].spawn_bias = 800;
level.interaction_types["perk_machine"].num_times_to_scale = 3; level.interaction_types["perk_machine"].num_times_to_scale = 3;
level.interaction_types["perk_machine"].unlock_cost = 2000; level.interaction_types["perk_machine"].unlock_cost = 2000;
if ( !is_gametype_active( "zgrief" ) ) if ( !is_gametype_active( "zgrief" ) )
{ {
level.interaction_types["blocker"] = spawnstruct(); level.interaction_types["blocker"] = spawnstruct();
level.interaction_types["blocker"].priority = 5; level.interaction_types["blocker"].priority = 5;
level.interaction_types["blocker"].animstate = "zm_smash_blocker"; level.interaction_types["blocker"].animstate = "zm_smash_blocker";
@ -131,7 +131,7 @@ setup_interaction_matrix()
level.interaction_types["trap"].spawn_bias = 400; level.interaction_types["trap"].spawn_bias = 400;
level.interaction_types["trap"].interaction_z_offset = -15; level.interaction_types["trap"].interaction_z_offset = -15;
level.interaction_types["craftable_table"] = spawnstruct(); level.interaction_types["craftable_table"] = spawnstruct();
level.interaction_types["craftable_table"].priority = 2; level.interaction_types["craftable_table"].priority = 2;
level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table"; level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
level.interaction_types["craftable_table"].notify_name = "table_smash_anim"; level.interaction_types["craftable_table"].notify_name = "table_smash_anim";
@ -165,116 +165,116 @@ setup_interaction_matrix()
level.interaction_types["plane_ramp"].fx_z_offset = -60; level.interaction_types["plane_ramp"].fx_z_offset = -60;
level.interaction_types["plane_ramp"].fx_x_offset = 70; level.interaction_types["plane_ramp"].fx_x_offset = 70;
level.interaction_types["plane_ramp"].fx_yaw_offset = 90; level.interaction_types["plane_ramp"].fx_yaw_offset = 90;
} }
level.interaction_priority = []; level.interaction_priority = [];
interaction_types = getarraykeys( level.interaction_types ); interaction_types = getarraykeys( level.interaction_types );
for ( i = 0; i < interaction_types.size; i++ ) for ( i = 0; i < interaction_types.size; i++ )
{ {
int_type = interaction_types[i]; int_type = interaction_types[i];
interaction = level.interaction_types[int_type]; interaction = level.interaction_types[int_type];
assert( !isdefined( level.interaction_priority[interaction.priority] ) ); assert( !isdefined( level.interaction_priority[interaction.priority] ) );
level.interaction_priority[interaction.priority] = int_type; level.interaction_priority[interaction.priority] = int_type;
} }
} }
check_craftable_table_valid( player ) check_craftable_table_valid( player )
{ {
if ( !isdefined( self.stub ) && ( isdefined( self.is_locked ) && self.is_locked ) ) if ( !isdefined( self.stub ) && ( isdefined( self.is_locked ) && self.is_locked ) )
{ {
if ( player.score >= self.locked_cost ) if ( player.score >= self.locked_cost )
{ {
player minus_to_player_score( self.locked_cost ); player minus_to_player_score( self.locked_cost );
self.is_locked = 0; self.is_locked = 0;
self.locked_cost = undefined; self.locked_cost = undefined;
self.lock_fx delete(); self.lock_fx delete();
} }
return false; return false;
} }
else if ( isdefined( self.stub ) && ( isdefined( self.stub.is_locked ) && self.stub.is_locked ) ) else if ( isdefined( self.stub ) && ( isdefined( self.stub.is_locked ) && self.stub.is_locked ) )
{ {
if ( player.score >= self.stub.locked_cost ) if ( player.score >= self.stub.locked_cost )
{ {
player minus_to_player_score( self.stub.locked_cost ); player minus_to_player_score( self.stub.locked_cost );
self.stub.is_locked = 0; self.stub.is_locked = 0;
self.stub.locked_cost = undefined; self.stub.locked_cost = undefined;
self.stub.lock_fx delete(); self.stub.lock_fx delete();
self scripts\zm\zm_prison\zm_prison_reimagined::craftabletrigger_update_prompt( player ); self scripts\zm\zm_prison\zm_prison_reimagined::craftabletrigger_update_prompt( player );
} }
return false; return false;
} }
return true; return true;
} }
brutus_round_tracker() brutus_round_tracker()
{ {
level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq );
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
flag_wait_any( "activate_cellblock_east", "activate_cellblock_west" ); flag_wait_any( "activate_cellblock_east", "activate_cellblock_west" );
while ( true ) while ( true )
{ {
level waittill( "between_round_over" ); level waittill( "between_round_over" );
players = get_players(); players = get_players();
if ( level.round_number < 9 && ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) ) if ( level.round_number < 9 && ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) )
continue; continue;
else if ( level.next_brutus_round <= level.round_number ) else if ( level.next_brutus_round <= level.round_number )
{ {
if ( maps\mp\zm_alcatraz_utility::is_team_on_golden_gate_bridge() ) if ( maps\mp\zm_alcatraz_utility::is_team_on_golden_gate_bridge() )
{ {
level.next_brutus_round = level.round_number + 1; level.next_brutus_round = level.round_number + 1;
continue; continue;
} }
wait( randomfloatrange( level.brutus_min_spawn_delay, level.brutus_max_spawn_delay ) ); wait( randomfloatrange( level.brutus_min_spawn_delay, level.brutus_max_spawn_delay ) );
if ( attempt_brutus_spawn( level.brutus_zombie_per_round ) ) if ( attempt_brutus_spawn( level.brutus_zombie_per_round ) )
{ {
level.music_round_override = 1; level.music_round_override = 1;
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "brutus_round_start" ); level thread maps\mp\zombies\_zm_audio::change_zombie_music( "brutus_round_start" );
level thread sndforcewait(); level thread sndforcewait();
level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq );
} }
} }
} }
} }
craftable_table_lock() craftable_table_lock()
{ {
self endon( "death" ); self endon( "death" );
table_struct = self.priority_item; table_struct = self.priority_item;
if ( !isdefined( table_struct ) ) if ( !isdefined( table_struct ) )
{ {
return; return;
} }
craftable_table = table_struct get_trigger_for_craftable(); craftable_table = table_struct get_trigger_for_craftable();
int_struct = level.interaction_types["craftable_table"]; int_struct = level.interaction_types["craftable_table"];
craftable_table.lock_fx = spawn( "script_model", table_struct.origin ); craftable_table.lock_fx = spawn( "script_model", table_struct.origin );
craftable_table.lock_fx.angles = table_struct.angles; craftable_table.lock_fx.angles = table_struct.angles;
craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx ); craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx );
craftable_table.lock_fx setmodel( "tag_origin" ); craftable_table.lock_fx setmodel( "tag_origin" );
playfxontag( level._effect["brutus_lockdown_lg"], craftable_table.lock_fx, "tag_origin" ); playfxontag( level._effect["brutus_lockdown_lg"], craftable_table.lock_fx, "tag_origin" );
craftable_table.lock_fx playsound( "zmb_ai_brutus_clang" ); craftable_table.lock_fx playsound( "zmb_ai_brutus_clang" );
craftable_table.is_locked = 1; craftable_table.is_locked = 1;
craftable_table.locked_cost = get_scaling_lock_cost( "craftable_table", craftable_table ); craftable_table.locked_cost = get_scaling_lock_cost( "craftable_table", craftable_table );
craftable_table.hint_string = get_lock_hint_string( craftable_table.locked_cost ); craftable_table.hint_string = get_lock_hint_string( craftable_table.locked_cost );
if ( !isdefined( craftable_table.equipname ) ) if ( !isdefined( craftable_table.equipname ) )
{ {
craftable_table sethintstring( craftable_table.hint_string ); craftable_table sethintstring( craftable_table.hint_string );
} }
if ( isdefined( craftable_table.targetname ) && craftable_table.targetname == "blundergat_upgrade" ) if ( isdefined( craftable_table.targetname ) && craftable_table.targetname == "blundergat_upgrade" )
{ {
level.lockdown_track["craft_kit"] = 1; level.lockdown_track["craft_kit"] = 1;
@ -283,134 +283,134 @@ craftable_table_lock()
t_upgrade sethintstring( craftable_table.hint_string ); t_upgrade sethintstring( craftable_table.hint_string );
} }
if ( isdefined( craftable_table.weaponname ) && craftable_table.weaponname == "alcatraz_shield_zm" ) if ( isdefined( craftable_table.weaponname ) && craftable_table.weaponname == "alcatraz_shield_zm" )
{ {
level.lockdown_track["craft_shield"] = 1; level.lockdown_track["craft_shield"] = 1;
} }
level notify( "brutus_locked_object" ); level notify( "brutus_locked_object" );
self.priority_item = undefined; self.priority_item = undefined;
} }
brutus_find_flesh() brutus_find_flesh()
{ {
self endon( "death" ); self endon( "death" );
level endon( "intermission" ); level endon( "intermission" );
if ( level.intermission ) if ( level.intermission )
return; return;
self.ai_state = "idle"; self.ai_state = "idle";
self.helitarget = 1; self.helitarget = 1;
self.ignoreme = 0; self.ignoreme = 0;
self.nododgemove = 1; self.nododgemove = 1;
self.ignore_player = []; self.ignore_player = [];
self thread brutus_watch_for_gondola(); self thread brutus_watch_for_gondola();
self thread brutus_stuck_watcher(); self thread brutus_stuck_watcher();
self thread brutus_goal_watcher(); self thread brutus_goal_watcher();
self thread watch_for_player_dist(); self thread watch_for_player_dist();
while ( true ) while ( true )
{ {
if ( self.not_interruptable ) if ( self.not_interruptable )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
player = brutus_get_closest_valid_player(); player = brutus_get_closest_valid_player();
brutus_zone = get_zone_from_position( self.origin ); brutus_zone = get_zone_from_position( self.origin );
if ( !isdefined( brutus_zone ) ) if ( !isdefined( brutus_zone ) )
{ {
brutus_zone = self.prev_zone; brutus_zone = self.prev_zone;
if ( !isdefined( brutus_zone ) ) if ( !isdefined( brutus_zone ) )
{ {
wait 1; wait 1;
continue; continue;
} }
} }
player_zone = undefined; player_zone = undefined;
self.prev_zone = brutus_zone; self.prev_zone = brutus_zone;
if ( !isdefined( player ) ) if ( !isdefined( player ) )
self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 );
else else
{ {
player_zone = player get_player_zone(); player_zone = player get_player_zone();
if ( isdefined( player_zone ) ) if ( isdefined( player_zone ) )
self.priority_item = self get_priority_item_for_brutus( player_zone ); self.priority_item = self get_priority_item_for_brutus( player_zone );
else else
self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 );
} }
if ( isdefined( player ) && distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isdefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) ) if ( isdefined( player ) && distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isdefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) )
{ {
self.favorite_enemy = player; self.favorite_enemy = player;
self.goal_pos = player.origin; self.goal_pos = player.origin;
brutus_start_basic_find_flesh(); brutus_start_basic_find_flesh();
} }
else if ( isdefined( self.priority_item ) ) else if ( isdefined( self.priority_item ) )
{ {
brutus_stop_basic_find_flesh(); brutus_stop_basic_find_flesh();
self.goalradius = 12; self.goalradius = 12;
self.custom_goalradius_override = 12; self.custom_goalradius_override = 12;
self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state ); self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state );
self setgoalpos( self.goal_pos ); self setgoalpos( self.goal_pos );
} }
else if ( isdefined( player ) ) else if ( isdefined( player ) )
{ {
self.favorite_enemy = player; self.favorite_enemy = player;
self.goal_pos = self.favorite_enemy.origin; self.goal_pos = self.favorite_enemy.origin;
brutus_start_basic_find_flesh(); brutus_start_basic_find_flesh();
} }
else else
{ {
self.goal_pos = self.origin; self.goal_pos = self.origin;
self.ai_state = "idle"; self.ai_state = "idle";
self setanimstatefromasd( "zm_idle" ); self setanimstatefromasd( "zm_idle" );
self setgoalpos( self.goal_pos ); self setgoalpos( self.goal_pos );
} }
wait 1; wait 1;
} }
} }
get_brutus_spawn_pos_val( brutus_pos ) get_brutus_spawn_pos_val( brutus_pos )
{ {
score = 0; score = 0;
zone_name = brutus_pos.zone_name; zone_name = brutus_pos.zone_name;
if ( !maps\mp\zombies\_zm_zonemgr::zone_is_enabled( zone_name ) ) if ( !maps\mp\zombies\_zm_zonemgr::zone_is_enabled( zone_name ) )
return 0; return 0;
a_players_in_zone = get_players_in_zone( zone_name, 1 ); a_players_in_zone = get_players_in_zone( zone_name, 1 );
if ( a_players_in_zone.size == 0 ) if ( a_players_in_zone.size == 0 )
return 0; return 0;
else else
{ {
n_score_addition = 1; n_score_addition = 1;
for ( i = 0; i < a_players_in_zone.size; i++ ) for ( i = 0; i < a_players_in_zone.size; i++ )
{ {
if ( findpath( brutus_pos.origin, a_players_in_zone[i].origin, self, 0, 0 ) ) if ( findpath( brutus_pos.origin, a_players_in_zone[i].origin, self, 0, 0 ) )
{ {
n_dist = distance2d( brutus_pos.origin, a_players_in_zone[i].origin ); n_dist = distance2d( brutus_pos.origin, a_players_in_zone[i].origin );
n_score_addition += linear_map( n_dist, 2000, 0, 0, level.brutus_players_in_zone_spawn_point_cap ); n_score_addition += linear_map( n_dist, 2000, 0, 0, level.brutus_players_in_zone_spawn_point_cap );
} }
} }
if ( n_score_addition > level.brutus_players_in_zone_spawn_point_cap ) if ( n_score_addition > level.brutus_players_in_zone_spawn_point_cap )
n_score_addition = level.brutus_players_in_zone_spawn_point_cap; n_score_addition = level.brutus_players_in_zone_spawn_point_cap;
score += n_score_addition; score += n_score_addition;
} }
interaction_types = getarraykeys( level.interaction_types ); interaction_types = getarraykeys( level.interaction_types );
interact_array = level.interaction_types; interact_array = level.interaction_types;
for ( i = 0; i < interaction_types.size; i++ ) for ( i = 0; i < interaction_types.size; i++ )
@ -426,7 +426,7 @@ get_brutus_spawn_pos_val( brutus_pos )
} }
} }
return score; return score;
} }
brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ) brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name )

View File

@ -12,22 +12,22 @@
enable_dog_rounds() enable_dog_rounds()
{ {
level.dog_rounds_enabled = 1; level.dog_rounds_enabled = 1;
if ( !isdefined( level.dog_round_track_override ) ) if ( !isdefined( level.dog_round_track_override ) )
level.dog_round_track_override = ::dog_round_tracker; level.dog_round_track_override = ::dog_round_tracker;
level thread [[ level.dog_round_track_override ]](); level thread [[ level.dog_round_track_override ]]();
} }
dog_round_tracker() dog_round_tracker()
{ {
level.dog_round_count = 1; level.dog_round_count = 1;
level.next_dog_round = level.round_number + randomintrange( 4, 6 ); level.next_dog_round = level.round_number + randomintrange( 4, 6 );
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
if (level.next_dog_round == 5) if (level.next_dog_round == 5)
{ {
level.prev_dog_round_amount = 4; level.prev_dog_round_amount = 4;
} }
@ -36,19 +36,19 @@ dog_round_tracker()
level.prev_dog_round_amount = 5; level.prev_dog_round_amount = 5;
} }
while ( true ) while ( true )
{ {
level waittill( "between_round_over" ); level waittill( "between_round_over" );
if ( level.round_number == level.next_dog_round ) if ( level.round_number == level.next_dog_round )
{ {
level.music_round_override = 1; level.music_round_override = 1;
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
dog_round_start(); dog_round_start();
level.round_spawn_func = ::dog_round_spawning; level.round_spawn_func = ::dog_round_spawning;
if( !isdefined( level.prev_dog_round_amount ) ) if( !isdefined( level.prev_dog_round_amount ) )
{ {
level.prev_dog_round_amount = randomintrange( 4, 6 ); level.prev_dog_round_amount = randomintrange( 4, 6 );
level.next_dog_round = level.round_number + level.prev_dog_round_amount; level.next_dog_round = level.round_number + level.prev_dog_round_amount;
@ -66,14 +66,14 @@ dog_round_tracker()
level.prev_dog_round_amount = undefined; level.prev_dog_round_amount = undefined;
} }
} }
else if ( flag( "dog_round" ) ) else if ( flag( "dog_round" ) )
{ {
dog_round_stop(); dog_round_stop();
level.round_spawn_func = old_spawn_func; level.round_spawn_func = old_spawn_func;
level.round_wait_func = old_wait_func; level.round_wait_func = old_wait_func;
level.music_round_override = 0; level.music_round_override = 0;
level.dog_round_count += 1; level.dog_round_count += 1;
} }
} }
} }

View File

@ -16,93 +16,93 @@
ghost_zone_spawning_think() ghost_zone_spawning_think()
{ {
level endon( "intermission" ); level endon( "intermission" );
if ( isdefined( level.intermission ) && level.intermission ) if ( isdefined( level.intermission ) && level.intermission )
return; return;
if ( !isdefined( level.female_ghost_spawner ) ) if ( !isdefined( level.female_ghost_spawner ) )
{ {
return; return;
} }
while ( true ) while ( true )
{ {
if ( level.zombie_ghost_count >= level.zombie_ai_limit_ghost ) if ( level.zombie_ghost_count >= level.zombie_ai_limit_ghost )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
valid_player_count = 0; valid_player_count = 0;
valid_players = []; valid_players = [];
while ( valid_player_count < 1 ) while ( valid_player_count < 1 )
{ {
players = getplayers(); players = getplayers();
valid_player_count = 0; valid_player_count = 0;
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) && !is_player_fully_claimed( player ) ) if ( is_player_valid( player ) && !is_player_fully_claimed( player ) )
{ {
if ( isdefined( player.is_in_ghost_zone ) && player.is_in_ghost_zone ) if ( isdefined( player.is_in_ghost_zone ) && player.is_in_ghost_zone )
{ {
valid_player_count++; valid_player_count++;
valid_players[valid_players.size] = player; valid_players[valid_players.size] = player;
} }
} }
} }
wait 0.1; wait 0.1;
} }
valid_players = array_randomize( valid_players ); valid_players = array_randomize( valid_players );
spawn_point = get_best_spawn_point( valid_players[0] ); spawn_point = get_best_spawn_point( valid_players[0] );
if ( !isdefined( spawn_point ) ) if ( !isdefined( spawn_point ) )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
ghost_ai = undefined; ghost_ai = undefined;
if ( isdefined( level.female_ghost_spawner ) ) if ( isdefined( level.female_ghost_spawner ) )
ghost_ai = spawn_zombie( level.female_ghost_spawner, level.female_ghost_spawner.targetname, spawn_point ); ghost_ai = spawn_zombie( level.female_ghost_spawner, level.female_ghost_spawner.targetname, spawn_point );
else else
{ {
return; return;
} }
if ( isdefined( ghost_ai ) ) if ( isdefined( ghost_ai ) )
{ {
ghost_ai setclientfield( "ghost_fx", 3 ); ghost_ai setclientfield( "ghost_fx", 3 );
ghost_ai.spawn_point = spawn_point; ghost_ai.spawn_point = spawn_point;
ghost_ai.is_ghost = 1; ghost_ai.is_ghost = 1;
ghost_ai.is_spawned_in_ghost_zone = 1; ghost_ai.is_spawned_in_ghost_zone = 1;
ghost_ai.find_target = 1; ghost_ai.find_target = 1;
level.zombie_ghost_count++; level.zombie_ghost_count++;
} }
else else
{ {
return; return;
} }
wait 0.1; wait 0.1;
} }
} }
should_last_ghost_drop_powerup() should_last_ghost_drop_powerup()
{ {
if ( flag( "time_bomb_restore_active" ) ) if ( flag( "time_bomb_restore_active" ) )
return false; return false;
if ( !isdefined( level.ghost_round_last_ghost_origin ) ) if ( !isdefined( level.ghost_round_last_ghost_origin ) )
return false; return false;
if ( !is_true( level.ghost_round_no_damage ) ) if ( !is_true( level.ghost_round_no_damage ) )
return false; return false;
return true; return true;
} }

View File

@ -15,10 +15,10 @@
leaper_round_tracker() leaper_round_tracker()
{ {
level.leaper_round_count = 1; level.leaper_round_count = 1;
level.next_leaper_round = level.round_number + randomintrange( 4, 6 ); level.next_leaper_round = level.round_number + randomintrange( 4, 6 );
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
if (level.next_leaper_round == 5) if (level.next_leaper_round == 5)
{ {
@ -29,18 +29,18 @@ leaper_round_tracker()
level.prev_leaper_round_amount = 5; level.prev_leaper_round_amount = 5;
} }
while ( true ) while ( true )
{ {
level waittill( "between_round_over" ); level waittill( "between_round_over" );
if ( level.round_number == level.next_leaper_round ) if ( level.round_number == level.next_leaper_round )
{ {
level.music_round_override = 1; level.music_round_override = 1;
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
leaper_round_start(); leaper_round_start();
level.round_spawn_func = ::leaper_round_spawning; level.round_spawn_func = ::leaper_round_spawning;
level.round_wait_func = ::leaper_round_wait; level.round_wait_func = ::leaper_round_wait;
if( !isdefined( level.prev_leaper_round_amount ) ) if( !isdefined( level.prev_leaper_round_amount ) )
{ {
@ -60,79 +60,79 @@ leaper_round_tracker()
level.prev_leaper_round_amount = undefined; level.prev_leaper_round_amount = undefined;
} }
} }
else if ( flag( "leaper_round" ) ) else if ( flag( "leaper_round" ) )
{ {
leaper_round_stop(); leaper_round_stop();
level.round_spawn_func = old_spawn_func; level.round_spawn_func = old_spawn_func;
level.round_wait_func = old_wait_func; level.round_wait_func = old_wait_func;
level.music_round_override = 0; level.music_round_override = 0;
level.leaper_round_count += 1; level.leaper_round_count += 1;
} }
} }
} }
leaper_round_accuracy_tracking() leaper_round_accuracy_tracking()
{ {
players = getplayers(); players = getplayers();
level.leaper_round_accurate_players = 0; level.leaper_round_accurate_players = 0;
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" );
players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" );
} }
level waittill( "last_leaper_down" ); level waittill( "last_leaper_down" );
players = getplayers(); players = getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ) - players[i].total_shots_start_leaper_round; total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ) - players[i].total_shots_start_leaper_round;
total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ) - players[i].total_hits_start_leaper_round; total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ) - players[i].total_hits_start_leaper_round;
if ( total_shots_end_leaper_round == total_hits_end_leaper_round ) if ( total_shots_end_leaper_round == total_hits_end_leaper_round )
level.leaper_round_accurate_players++; level.leaper_round_accurate_players++;
} }
if ( level.leaper_round_accurate_players == players.size ) if ( level.leaper_round_accurate_players == players.size )
{ {
if ( isdefined( level.last_leaper_origin ) ) if ( isdefined( level.last_leaper_origin ) )
{ {
trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 ); trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 );
power_up_origin = trace["position"]; power_up_origin = trace["position"];
level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorscale( ( 1, 1, 0 ), 30.0 ) ); level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorscale( ( 1, 1, 0 ), 30.0 ) );
} }
} }
} }
leaper_death() leaper_death()
{ {
self endon( "leaper_cleanup" ); self endon( "leaper_cleanup" );
self waittill( "death" ); self waittill( "death" );
self leaper_stop_trail_fx(); self leaper_stop_trail_fx();
self playsound( "zmb_vocals_leaper_death" ); self playsound( "zmb_vocals_leaper_death" );
playfx( level._effect["leaper_death"], self.origin ); playfx( level._effect["leaper_death"], self.origin );
if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) if ( get_current_zombie_count() == 0 && level.zombie_total == 0 )
{ {
level.last_leaper_origin = self.origin; level.last_leaper_origin = self.origin;
level notify( "last_leaper_down" ); level notify( "last_leaper_down" );
} }
if ( isplayer( self.attacker ) ) if ( isplayer( self.attacker ) )
{ {
self.deathpoints_already_given = 1; self.deathpoints_already_given = 1;
event = "death"; event = "death";
if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) if ( issubstr( self.damageweapon, "knife_ballistic_" ) )
event = "ballistic_knife_death"; event = "ballistic_knife_death";
self.attacker thread do_player_general_vox( "general", "leaper_killed", 20, 20 ); self.attacker thread do_player_general_vox( "general", "leaper_killed", 20, 20 );
self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 );
} }
} }

View File

@ -22,260 +22,260 @@
mechz_set_starting_health() mechz_set_starting_health()
{ {
self.maxhealth = level.mechz_health; self.maxhealth = level.mechz_health;
self.helmet_dmg = 0; self.helmet_dmg = 0;
self.helmet_dmg_for_removal = self.maxhealth * level.mechz_helmet_health_percentage; self.helmet_dmg_for_removal = self.maxhealth * level.mechz_helmet_health_percentage;
self.powerplant_cover_dmg = 0; self.powerplant_cover_dmg = 0;
self.powerplant_cover_dmg_for_removal = self.maxhealth * level.mechz_powerplant_expose_health_percentage; self.powerplant_cover_dmg_for_removal = self.maxhealth * level.mechz_powerplant_expose_health_percentage;
self.powerplant_dmg = 0; self.powerplant_dmg = 0;
self.powerplant_dmg_for_destroy = self.maxhealth * level.mechz_powerplant_destroyed_health_percentage; self.powerplant_dmg_for_destroy = self.maxhealth * level.mechz_powerplant_destroyed_health_percentage;
level.mechz_explosive_dmg_to_cancel_claw = self.maxhealth * level.mechz_explosive_dmg_to_cancel_claw_percentage; level.mechz_explosive_dmg_to_cancel_claw = self.maxhealth * level.mechz_explosive_dmg_to_cancel_claw_percentage;
self.health = level.mechz_health; self.health = level.mechz_health;
self.non_attacker_func = ::mechz_non_attacker_damage_override; self.non_attacker_func = ::mechz_non_attacker_damage_override;
self.non_attack_func_takes_attacker = 1; self.non_attack_func_takes_attacker = 1;
self.actor_damage_func = ::mechz_damage_override; self.actor_damage_func = ::mechz_damage_override;
self.instakill_func = ::mechz_instakill_override; self.instakill_func = ::mechz_instakill_override;
self.nuke_damage_func = ::mechz_nuke_override; self.nuke_damage_func = ::mechz_nuke_override;
} }
mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex ) mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex )
{ {
num_tiers = level.mechz_armor_info.size + 1; num_tiers = level.mechz_armor_info.size + 1;
old_health_tier = int( num_tiers * self.health / self.maxhealth ); old_health_tier = int( num_tiers * self.health / self.maxhealth );
bonename = getpartname( "c_zom_mech_body", boneindex ); bonename = getpartname( "c_zom_mech_body", boneindex );
if ( isdefined( attacker ) && isalive( attacker ) && isplayer( attacker ) && ( level.zombie_vars[attacker.team]["zombie_insta_kill"] || isdefined( attacker.personal_instakill ) && attacker.personal_instakill ) ) if ( isdefined( attacker ) && isalive( attacker ) && isplayer( attacker ) && ( level.zombie_vars[attacker.team]["zombie_insta_kill"] || isdefined( attacker.personal_instakill ) && attacker.personal_instakill ) )
{ {
n_mechz_damage_percent = 1.0; n_mechz_damage_percent = 1.0;
n_mechz_headshot_modifier = 2.0; n_mechz_headshot_modifier = 2.0;
} }
else else
{ {
n_mechz_damage_percent = level.mechz_damage_percent; n_mechz_damage_percent = level.mechz_damage_percent;
n_mechz_headshot_modifier = 1.0; n_mechz_headshot_modifier = 1.0;
} }
if ( isdefined( weapon ) && is_weapon_shotgun( weapon ) ) if ( isdefined( weapon ) && is_weapon_shotgun( weapon ) )
{ {
n_mechz_damage_percent *= level.mechz_shotgun_damage_mod; n_mechz_damage_percent *= level.mechz_shotgun_damage_mod;
n_mechz_headshot_modifier *= level.mechz_shotgun_damage_mod; n_mechz_headshot_modifier *= level.mechz_shotgun_damage_mod;
} }
if ( damage <= 10 ) if ( damage <= 10 )
n_mechz_damage_percent = 1.0; n_mechz_damage_percent = 1.0;
if ( ( is_explosive_damage( meansofdeath ) && weapon != "c96_upgraded_zm" && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" ) || issubstr( weapon, "staff" ) ) if ( ( is_explosive_damage( meansofdeath ) && weapon != "c96_upgraded_zm" && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" ) || issubstr( weapon, "staff" ) )
{ {
if ( n_mechz_damage_percent < 0.5 ) if ( n_mechz_damage_percent < 0.5 )
n_mechz_damage_percent = 0.5; n_mechz_damage_percent = 0.5;
if ( !( isdefined( self.has_helmet ) && self.has_helmet ) && issubstr( weapon, "staff" ) && n_mechz_damage_percent < 1.0 ) if ( !( isdefined( self.has_helmet ) && self.has_helmet ) && issubstr( weapon, "staff" ) && n_mechz_damage_percent < 1.0 )
n_mechz_damage_percent = 1.0; n_mechz_damage_percent = 1.0;
final_damage = damage * n_mechz_damage_percent; final_damage = damage * n_mechz_damage_percent;
if ( !isdefined( self.explosive_dmg_taken ) ) if ( !isdefined( self.explosive_dmg_taken ) )
self.explosive_dmg_taken = 0; self.explosive_dmg_taken = 0;
self.explosive_dmg_taken += final_damage; self.explosive_dmg_taken += final_damage;
self.helmet_dmg += final_damage; self.helmet_dmg += final_damage;
if ( isdefined( self.explosive_dmg_taken_on_grab_start ) ) if ( isdefined( self.explosive_dmg_taken_on_grab_start ) )
{ {
if ( isdefined( self.e_grabbed ) && self.explosive_dmg_taken - self.explosive_dmg_taken_on_grab_start > level.mechz_explosive_dmg_to_cancel_claw ) if ( isdefined( self.e_grabbed ) && self.explosive_dmg_taken - self.explosive_dmg_taken_on_grab_start > level.mechz_explosive_dmg_to_cancel_claw )
{ {
if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg < self.helmet_dmg_for_removal || !( isdefined( self.has_helmet ) && self.has_helmet ) ) if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg < self.helmet_dmg_for_removal || !( isdefined( self.has_helmet ) && self.has_helmet ) )
self thread mechz_claw_shot_pain_reaction(); self thread mechz_claw_shot_pain_reaction();
self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed );
self thread mechz_claw_release(); self thread mechz_claw_release();
} }
} }
} }
else if ( shitloc != "head" && shitloc != "helmet" ) else if ( shitloc != "head" && shitloc != "helmet" )
{ {
if ( bonename == "tag_powersupply" ) if ( bonename == "tag_powersupply" )
{ {
final_damage = damage * n_mechz_damage_percent; final_damage = damage * n_mechz_damage_percent;
if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) ) if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) )
self.powerplant_dmg += final_damage; self.powerplant_dmg += final_damage;
else else
self.powerplant_cover_dmg += final_damage; self.powerplant_cover_dmg += final_damage;
} }
if ( isdefined( self.e_grabbed ) && ( shitloc == "left_hand" || shitloc == "left_arm_lower" || shitloc == "left_arm_upper" ) ) if ( isdefined( self.e_grabbed ) && ( shitloc == "left_hand" || shitloc == "left_arm_lower" || shitloc == "left_arm_upper" ) )
{ {
if ( isdefined( self.e_grabbed ) ) if ( isdefined( self.e_grabbed ) )
self thread mechz_claw_shot_pain_reaction(); self thread mechz_claw_shot_pain_reaction();
self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed ); self thread ent_released_from_claw_grab_achievement( attacker, self.e_grabbed );
self thread mechz_claw_release( 1 ); self thread mechz_claw_release( 1 );
} }
final_damage = damage * n_mechz_damage_percent; final_damage = damage * n_mechz_damage_percent;
} }
else if ( !( isdefined( self.has_helmet ) && self.has_helmet ) ) else if ( !( isdefined( self.has_helmet ) && self.has_helmet ) )
final_damage = damage * n_mechz_headshot_modifier; final_damage = damage * n_mechz_headshot_modifier;
else else
{ {
final_damage = damage * n_mechz_damage_percent; final_damage = damage * n_mechz_damage_percent;
self.helmet_dmg += final_damage; self.helmet_dmg += final_damage;
} }
if ( !isdefined( weapon ) || weapon == "none" ) if ( !isdefined( weapon ) || weapon == "none" )
{ {
if ( !isplayer( attacker ) ) if ( !isplayer( attacker ) )
final_damage = 0; final_damage = 0;
} }
new_health_tier = int( num_tiers * ( self.health - final_damage ) / self.maxhealth ); new_health_tier = int( num_tiers * ( self.health - final_damage ) / self.maxhealth );
if ( old_health_tier > new_health_tier ) if ( old_health_tier > new_health_tier )
{ {
while ( old_health_tier > new_health_tier ) while ( old_health_tier > new_health_tier )
{ {
if ( old_health_tier < num_tiers ) if ( old_health_tier < num_tiers )
self mechz_launch_armor_piece(); self mechz_launch_armor_piece();
old_health_tier--; old_health_tier--;
} }
} }
if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg >= self.helmet_dmg_for_removal ) if ( isdefined( self.has_helmet ) && self.has_helmet && self.helmet_dmg >= self.helmet_dmg_for_removal )
{ {
self.has_helmet = 0; self.has_helmet = 0;
self detach( "c_zom_mech_faceplate", "J_Helmet" ); self detach( "c_zom_mech_faceplate", "J_Helmet" );
if ( sndmechzisnetworksafe( "destruction" ) ) if ( sndmechzisnetworksafe( "destruction" ) )
self playsound( "zmb_ai_mechz_destruction" ); self playsound( "zmb_ai_mechz_destruction" );
if ( sndmechzisnetworksafe( "angry" ) ) if ( sndmechzisnetworksafe( "angry" ) )
self playsound( "zmb_ai_mechz_vox_angry" ); self playsound( "zmb_ai_mechz_vox_angry" );
self.fx_field |= 1024; self.fx_field |= 1024;
self.fx_field &= ~2048; self.fx_field &= ~2048;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_pain_faceplate" ); self animscripted( self.origin, self.angles, "zm_pain_faceplate" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_faceplate" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_faceplate" );
} }
self thread shoot_mechz_head_vo(); self thread shoot_mechz_head_vo();
} }
if ( isdefined( self.powerplant_covered ) && self.powerplant_covered && self.powerplant_cover_dmg >= self.powerplant_cover_dmg_for_removal ) if ( isdefined( self.powerplant_covered ) && self.powerplant_covered && self.powerplant_cover_dmg >= self.powerplant_cover_dmg_for_removal )
{ {
self.powerplant_covered = 0; self.powerplant_covered = 0;
self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" ); self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" );
cap_model = spawn( "script_model", self gettagorigin( "tag_powersupply" ) ); cap_model = spawn( "script_model", self gettagorigin( "tag_powersupply" ) );
cap_model.angles = self gettagangles( "tag_powersupply" ); cap_model.angles = self gettagangles( "tag_powersupply" );
cap_model setmodel( "c_zom_mech_powersupply_cap" ); cap_model setmodel( "c_zom_mech_powersupply_cap" );
cap_model physicslaunch( cap_model.origin, anglestoforward( cap_model.angles ) ); cap_model physicslaunch( cap_model.origin, anglestoforward( cap_model.angles ) );
cap_model thread mechz_delayed_item_delete(); cap_model thread mechz_delayed_item_delete();
if ( sndmechzisnetworksafe( "destruction" ) ) if ( sndmechzisnetworksafe( "destruction" ) )
self playsound( "zmb_ai_mechz_destruction" ); self playsound( "zmb_ai_mechz_destruction" );
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_pain_powercore" ); self animscripted( self.origin, self.angles, "zm_pain_powercore" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_powercore" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_powercore" );
} }
} }
else if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) && ( isdefined( self.has_powerplant ) && self.has_powerplant ) && self.powerplant_dmg >= self.powerplant_dmg_for_destroy ) else if ( !( isdefined( self.powerplant_covered ) && self.powerplant_covered ) && ( isdefined( self.has_powerplant ) && self.has_powerplant ) && self.powerplant_dmg >= self.powerplant_dmg_for_destroy )
{ {
self.has_powerplant = 0; self.has_powerplant = 0;
self thread mechz_stun( level.mechz_powerplant_stun_time ); self thread mechz_stun( level.mechz_powerplant_stun_time );
if ( sndmechzisnetworksafe( "destruction" ) ) if ( sndmechzisnetworksafe( "destruction" ) )
self playsound( "zmb_ai_mechz_destruction" ); self playsound( "zmb_ai_mechz_destruction" );
} }
return final_damage; return final_damage;
} }
mechz_round_tracker() mechz_round_tracker()
{ {
maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_start(); maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_start();
level.num_mechz_spawned = 0; level.num_mechz_spawned = 0;
old_spawn_func = level.round_spawn_func; old_spawn_func = level.round_spawn_func;
old_wait_func = level.round_wait_func; old_wait_func = level.round_wait_func;
while ( !isdefined( level.zombie_mechz_locations ) ) while ( !isdefined( level.zombie_mechz_locations ) )
wait 0.05; wait 0.05;
flag_wait( "activate_zone_nml" ); flag_wait( "activate_zone_nml" );
mech_start_round_num = 8; mech_start_round_num = 8;
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
mech_start_round_num = 8; mech_start_round_num = 8;
while ( level.round_number < mech_start_round_num ) while ( level.round_number < mech_start_round_num )
level waittill( "between_round_over" ); level waittill( "between_round_over" );
level.next_mechz_round = level.round_number; level.next_mechz_round = level.round_number;
level thread debug_print_mechz_round(); level thread debug_print_mechz_round();
while ( true ) while ( true )
{ {
maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_start(); maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_start();
if ( level.num_mechz_spawned > 0 ) if ( level.num_mechz_spawned > 0 )
level.mechz_should_drop_powerup = 1; level.mechz_should_drop_powerup = 1;
if ( level.next_mechz_round <= level.round_number ) if ( level.next_mechz_round <= level.round_number )
{ {
a_zombies = getaispeciesarray( level.zombie_team, "all" ); a_zombies = getaispeciesarray( level.zombie_team, "all" );
foreach ( zombie in a_zombies ) foreach ( zombie in a_zombies )
{ {
if ( isdefined( zombie.is_mechz ) && zombie.is_mechz && isalive( zombie ) ) if ( isdefined( zombie.is_mechz ) && zombie.is_mechz && isalive( zombie ) )
{ {
level.next_mechz_round++; level.next_mechz_round++;
break; break;
} }
} }
} }
if ( level.mechz_left_to_spawn == 0 && level.next_mechz_round <= level.round_number ) if ( level.mechz_left_to_spawn == 0 && level.next_mechz_round <= level.round_number )
{ {
mechz_health_increases(); mechz_health_increases();
if ( get_players().size == 1 ) if ( get_players().size == 1 )
level.mechz_zombie_per_round = 1; level.mechz_zombie_per_round = 1;
else if ( level.mechz_round_count < 2 ) else if ( level.mechz_round_count < 2 )
level.mechz_zombie_per_round = 1; level.mechz_zombie_per_round = 1;
else if ( level.mechz_round_count < 5 ) else if ( level.mechz_round_count < 5 )
level.mechz_zombie_per_round = 2; level.mechz_zombie_per_round = 2;
else else
level.mechz_zombie_per_round = 3; level.mechz_zombie_per_round = 3;
level.mechz_left_to_spawn = level.mechz_zombie_per_round; level.mechz_left_to_spawn = level.mechz_zombie_per_round;
mechz_spawning = level.mechz_left_to_spawn; mechz_spawning = level.mechz_left_to_spawn;
wait( randomfloatrange( 10.0, 15.0 ) ); wait( randomfloatrange( 10.0, 15.0 ) );
level notify( "spawn_mechz" ); level notify( "spawn_mechz" );
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
n_round_gap = randomintrange( level.mechz_min_round_fq_solo, level.mechz_max_round_fq_solo ); n_round_gap = randomintrange( level.mechz_min_round_fq_solo, level.mechz_max_round_fq_solo );
else else
n_round_gap = randomintrange( level.mechz_min_round_fq, level.mechz_max_round_fq ); n_round_gap = randomintrange( level.mechz_min_round_fq, level.mechz_max_round_fq );
level.next_mechz_round = level.round_number + n_round_gap; level.next_mechz_round = level.round_number + n_round_gap;
level.mechz_round_count++; level.mechz_round_count++;
level thread debug_print_mechz_round(); level thread debug_print_mechz_round();
level.num_mechz_spawned += mechz_spawning; level.num_mechz_spawned += mechz_spawning;
} }
maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_end(); maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_round_tracker_loop_end();
level waittill( "between_round_over" ); level waittill( "between_round_over" );
mechz_clear_spawns(); mechz_clear_spawns();
} }
} }

View File

@ -12,281 +12,281 @@
screecher_spawning_logic() screecher_spawning_logic()
{ {
level endon( "intermission" ); level endon( "intermission" );
if ( level.intermission ) if ( level.intermission )
return; return;
if ( level.screecher_spawners.size < 1 ) if ( level.screecher_spawners.size < 1 )
{ {
return; return;
} }
while ( true ) while ( true )
{ {
while ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) while ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 )
wait 0.1; wait 0.1;
// while ( getdvarint( _hash_B0C0D38F ) ) // while ( getdvarint( _hash_B0C0D38F ) )
// wait 0.1; // wait 0.1;
if ( !flag( "spawn_zombies" ) ) if ( !flag( "spawn_zombies" ) )
flag_wait( "spawn_zombies" ); flag_wait( "spawn_zombies" );
valid_players_in_screecher_zone = 0; valid_players_in_screecher_zone = 0;
valid_players = []; valid_players = [];
while ( valid_players_in_screecher_zone <= level.zombie_screecher_count ) while ( valid_players_in_screecher_zone <= level.zombie_screecher_count )
{ {
players = getplayers(); players = getplayers();
valid_players_in_screecher_zone = 0; valid_players_in_screecher_zone = 0;
for ( p = 0; p < players.size; p++ ) for ( p = 0; p < players.size; p++ )
{ {
if ( is_player_valid( players[p] ) && player_in_screecher_zone( players[p] ) && !isdefined( players[p].screecher ) ) if ( is_player_valid( players[p] ) && player_in_screecher_zone( players[p] ) && !isdefined( players[p].screecher ) )
{ {
valid_players_in_screecher_zone++; valid_players_in_screecher_zone++;
valid_players[valid_players.size] = players[p]; valid_players[valid_players.size] = players[p];
} }
} }
wait 0.1; wait 0.1;
} }
if ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) if ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 )
continue; continue;
valid_players = array_randomize( valid_players ); valid_players = array_randomize( valid_players );
spawn_points = get_array_of_closest( valid_players[0].origin, level.zombie_screecher_locations ); spawn_points = get_array_of_closest( valid_players[0].origin, level.zombie_screecher_locations );
spawn_point = undefined; spawn_point = undefined;
if ( !isdefined( spawn_points ) || spawn_points.size == 0 ) if ( !isdefined( spawn_points ) || spawn_points.size == 0 )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
if ( !isdefined( level.last_spawn ) ) if ( !isdefined( level.last_spawn ) )
{ {
level.last_spawn_index = 0; level.last_spawn_index = 0;
level.last_spawn = []; level.last_spawn = [];
level.last_spawn[level.last_spawn_index] = spawn_points[0]; level.last_spawn[level.last_spawn_index] = spawn_points[0];
level.last_spawn_index = 1; level.last_spawn_index = 1;
spawn_point = spawn_points[0]; spawn_point = spawn_points[0];
} }
else else
{ {
foreach ( point in spawn_points ) foreach ( point in spawn_points )
{ {
if ( point == level.last_spawn[0] ) if ( point == level.last_spawn[0] )
continue; continue;
if ( isdefined( level.last_spawn[1] ) && point == level.last_spawn[1] ) if ( isdefined( level.last_spawn[1] ) && point == level.last_spawn[1] )
continue; continue;
spawn_point = point; spawn_point = point;
level.last_spawn[level.last_spawn_index] = spawn_point; level.last_spawn[level.last_spawn_index] = spawn_point;
level.last_spawn_index++; level.last_spawn_index++;
if ( level.last_spawn_index > 1 ) if ( level.last_spawn_index > 1 )
level.last_spawn_index = 0; level.last_spawn_index = 0;
break; break;
} }
} }
if ( !isdefined( spawn_point ) ) if ( !isdefined( spawn_point ) )
spawn_point = spawn_points[0]; spawn_point = spawn_points[0];
if ( isdefined( level.screecher_spawners ) ) if ( isdefined( level.screecher_spawners ) )
{ {
spawner = random( level.screecher_spawners ); spawner = random( level.screecher_spawners );
ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); ai = spawn_zombie( spawner, spawner.targetname, spawn_point );
} }
if ( isdefined( ai ) ) if ( isdefined( ai ) )
{ {
ai.spawn_point = spawn_point; ai.spawn_point = spawn_point;
level.zombie_screecher_count++; level.zombie_screecher_count++;
} }
wait 5; wait 5;
} }
} }
screecher_melee_damage( player ) screecher_melee_damage( player )
{ {
melee_score = 0; melee_score = 0;
if ( player hasweapon( "tazer_knuckles_zm" ) ) if ( player hasweapon( "tazer_knuckles_zm" ) )
{ {
melee_score = 30; melee_score = 30;
} }
else if ( player hasweapon( "bowie_knife_zm" ) ) else if ( player hasweapon( "bowie_knife_zm" ) )
{ {
melee_score = 15; melee_score = 15;
} }
else else
{ {
melee_score = 10; melee_score = 10;
} }
if ( self.screecher_score > 0 ) if ( self.screecher_score > 0 )
{ {
if ( melee_score > self.screecher_score ) if ( melee_score > self.screecher_score )
{ {
self.screecher_score = 0; self.screecher_score = 0;
} }
else else
{ {
self.screecher_score -= melee_score; self.screecher_score -= melee_score;
} }
} }
if ( self.screecher_score <= 0 ) if ( self.screecher_score <= 0 )
{ {
self.player_score += melee_score; self.player_score += melee_score;
} }
self playsound( "zmb_vocals_screecher_pain" ); self playsound( "zmb_vocals_screecher_pain" );
if ( level.zombie_vars[player.team]["zombie_insta_kill"] ) if ( level.zombie_vars[player.team]["zombie_insta_kill"] )
self.player_score = 30; self.player_score = 30;
else else
player thread do_player_general_vox( "general", "screecher_cut" ); player thread do_player_general_vox( "general", "screecher_cut" );
self screecher_check_score(); self screecher_check_score();
} }
screecher_detach( player ) screecher_detach( player )
{ {
self endon( "death" ); self endon( "death" );
self.state = "detached"; self.state = "detached";
if ( !isdefined( self.linked_ent ) ) if ( !isdefined( self.linked_ent ) )
return; return;
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
player clientnotify( "scrEnd" ); player clientnotify( "scrEnd" );
player allowprone( 1 ); player allowprone( 1 );
player takeweapon( "screecher_arms_zm" ); player takeweapon( "screecher_arms_zm" );
// if ( !getdvarint( _hash_E7EF8EB7 ) ) // if ( !getdvarint( _hash_E7EF8EB7 ) )
player stoppoisoning(); player stoppoisoning();
if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) )
player decrement_is_drinking(); player decrement_is_drinking();
if ( isdefined( player.screecher_weapon ) && player.screecher_weapon != "none" && is_player_valid( player ) && !is_equipment_that_blocks_purchase( player.screecher_weapon ) ) if ( isdefined( player.screecher_weapon ) && player.screecher_weapon != "none" && is_player_valid( player ) && !is_equipment_that_blocks_purchase( player.screecher_weapon ) )
player switchtoweapon( player.screecher_weapon ); player switchtoweapon( player.screecher_weapon );
else if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) else if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
primaryweapons = player getweaponslistprimaries(); primaryweapons = player getweaponslistprimaries();
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
player switchtoweapon( primaryweapons[0] ); player switchtoweapon( primaryweapons[0] );
} }
player.screecher_weapon = undefined; player.screecher_weapon = undefined;
} }
self unlink(); self unlink();
self setclientfield( "render_third_person", 0 ); self setclientfield( "render_third_person", 0 );
if ( isdefined( self.linked_ent ) ) if ( isdefined( self.linked_ent ) )
{ {
self.linked_ent.screecher = undefined; self.linked_ent.screecher = undefined;
self.linked_ent setmovespeedscale( 1 ); self.linked_ent setmovespeedscale( 1 );
self.linked_ent = undefined; self.linked_ent = undefined;
} }
self.green_light = player.green_light; self.green_light = player.green_light;
self animcustom( ::screecher_jump_down ); self animcustom( ::screecher_jump_down );
self waittill( "jump_down_done" ); self waittill( "jump_down_done" );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player );
self animmode( "normal" ); self animmode( "normal" );
self.ignoreall = 1; self.ignoreall = 1;
self setplayercollision( 1 ); self setplayercollision( 1 );
if ( isdefined( level.screecher_should_burrow ) ) if ( isdefined( level.screecher_should_burrow ) )
{ {
if ( self [[ level.screecher_should_burrow ]]() ) if ( self [[ level.screecher_should_burrow ]]() )
{ {
return; return;
} }
} }
self thread screecher_runaway(); self thread screecher_runaway();
} }
screecher_cleanup() screecher_cleanup()
{ {
self waittill( "death", attacker ); self waittill( "death", attacker );
if ( isdefined( attacker ) && isplayer( attacker ) ) if ( isdefined( attacker ) && isplayer( attacker ) )
{ {
if ( isdefined( self.damagelocation ) && isdefined( self.damagemod ) ) if ( isdefined( self.damagelocation ) && isdefined( self.damagemod ) )
level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( self.damagelocation, attacker, self.damagemod, self ); level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( self.damagelocation, attacker, self.damagemod, self );
} }
if ( isdefined( self.loopsoundent ) ) if ( isdefined( self.loopsoundent ) )
{ {
self.loopsoundent delete(); self.loopsoundent delete();
self.loopsoundent = undefined; self.loopsoundent = undefined;
} }
player = self.linked_ent; player = self.linked_ent;
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
player playsound( "zmb_vocals_screecher_death" ); player playsound( "zmb_vocals_screecher_death" );
player setmovespeedscale( 1 ); player setmovespeedscale( 1 );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player );
if ( isdefined( player.screecher_weapon ) ) if ( isdefined( player.screecher_weapon ) )
{ {
player clientnotify( "scrEnd" ); player clientnotify( "scrEnd" );
player allowprone( 1 ); player allowprone( 1 );
player takeweapon( "screecher_arms_zm" ); player takeweapon( "screecher_arms_zm" );
// if ( !getdvarint( _hash_E7EF8EB7 ) ) // if ( !getdvarint( _hash_E7EF8EB7 ) )
player stoppoisoning(); player stoppoisoning();
if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) )
player decrement_is_drinking(); player decrement_is_drinking();
if ( player.screecher_weapon != "none" && is_player_valid( player ) ) if ( player.screecher_weapon != "none" && is_player_valid( player ) )
player switchtoweapon( player.screecher_weapon ); player switchtoweapon( player.screecher_weapon );
else else
{ {
primaryweapons = player getweaponslistprimaries(); primaryweapons = player getweaponslistprimaries();
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
player switchtoweapon( primaryweapons[0] ); player switchtoweapon( primaryweapons[0] );
} }
player.screecher_weapon = undefined; player.screecher_weapon = undefined;
} }
} }
if ( isdefined( self.claw_fx ) ) if ( isdefined( self.claw_fx ) )
self.claw_fx destroy(); self.claw_fx destroy();
if ( isdefined( self.anchor ) ) if ( isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
if ( isdefined( level.screecher_cleanup ) ) if ( isdefined( level.screecher_cleanup ) )
self [[ level.screecher_cleanup ]](); self [[ level.screecher_cleanup ]]();
if ( level.zombie_screecher_count > 0 ) if ( level.zombie_screecher_count > 0 )
{ {
level.zombie_screecher_count--; level.zombie_screecher_count--;
} }
} }

View File

@ -26,294 +26,294 @@
sloth_init_start_funcs() sloth_init_start_funcs()
{ {
self.start_funcs = []; self.start_funcs = [];
self.start_funcs["jail_idle"] = ::start_jail_idle; self.start_funcs["jail_idle"] = ::start_jail_idle;
self.start_funcs["jail_cower"] = ::start_jail_cower; self.start_funcs["jail_cower"] = ::start_jail_cower;
self.start_funcs["jail_open"] = ::start_jail_open; self.start_funcs["jail_open"] = ::start_jail_open;
self.start_funcs["jail_run"] = ::start_jail_run; self.start_funcs["jail_run"] = ::start_jail_run;
self.start_funcs["jail_wait"] = ::start_jail_wait; self.start_funcs["jail_wait"] = ::start_jail_wait;
self.start_funcs["jail_close"] = ::start_jail_close; self.start_funcs["jail_close"] = ::start_jail_close;
self.start_funcs["player_idle"] = ::start_player_idle; self.start_funcs["player_idle"] = ::start_player_idle;
self.start_funcs["roam"] = ::start_roam; self.start_funcs["roam"] = ::start_roam;
self.start_funcs["follow"] = ::start_follow; self.start_funcs["follow"] = ::start_follow;
self.start_funcs["mansion"] = ::start_mansion; self.start_funcs["mansion"] = ::start_mansion;
self.start_funcs["berserk"] = ::start_berserk; self.start_funcs["berserk"] = ::start_berserk;
self.start_funcs["eat"] = ::start_eat; self.start_funcs["eat"] = ::start_eat;
self.start_funcs["crash"] = ::start_crash; self.start_funcs["crash"] = ::start_crash;
self.start_funcs["gunshop_run"] = ::start_gunshop_run; self.start_funcs["gunshop_run"] = ::start_gunshop_run;
self.start_funcs["gunshop_candy"] = ::start_gunshop_candy; self.start_funcs["gunshop_candy"] = ::start_gunshop_candy;
self.start_funcs["table_eat"] = ::start_table_eat; self.start_funcs["table_eat"] = ::start_table_eat;
self.start_funcs["headbang"] = ::start_headbang; self.start_funcs["headbang"] = ::start_headbang;
self.start_funcs["smell"] = ::start_smell; self.start_funcs["smell"] = ::start_smell;
self.start_funcs["context"] = ::start_context; self.start_funcs["context"] = ::start_context;
} }
sloth_init_update_funcs() sloth_init_update_funcs()
{ {
self.update_funcs = []; self.update_funcs = [];
self.update_funcs["jail_idle"] = ::update_jail_idle; self.update_funcs["jail_idle"] = ::update_jail_idle;
self.update_funcs["jail_cower"] = ::update_jail_cower; self.update_funcs["jail_cower"] = ::update_jail_cower;
self.update_funcs["jail_open"] = ::update_jail_open; self.update_funcs["jail_open"] = ::update_jail_open;
self.update_funcs["jail_run"] = ::update_jail_run; self.update_funcs["jail_run"] = ::update_jail_run;
self.update_funcs["jail_wait"] = ::update_jail_wait; self.update_funcs["jail_wait"] = ::update_jail_wait;
self.update_funcs["jail_close"] = ::update_jail_close; self.update_funcs["jail_close"] = ::update_jail_close;
self.update_funcs["player_idle"] = ::update_player_idle; self.update_funcs["player_idle"] = ::update_player_idle;
self.update_funcs["roam"] = ::update_roam; self.update_funcs["roam"] = ::update_roam;
self.update_funcs["follow"] = ::update_follow; self.update_funcs["follow"] = ::update_follow;
self.update_funcs["mansion"] = ::update_mansion; self.update_funcs["mansion"] = ::update_mansion;
self.update_funcs["berserk"] = ::update_berserk; self.update_funcs["berserk"] = ::update_berserk;
self.update_funcs["eat"] = ::update_eat; self.update_funcs["eat"] = ::update_eat;
self.update_funcs["crash"] = ::update_crash; self.update_funcs["crash"] = ::update_crash;
self.update_funcs["gunshop_run"] = ::update_gunshop_run; self.update_funcs["gunshop_run"] = ::update_gunshop_run;
self.update_funcs["gunshop_candy"] = ::update_gunshop_candy; self.update_funcs["gunshop_candy"] = ::update_gunshop_candy;
self.update_funcs["table_eat"] = ::update_table_eat; self.update_funcs["table_eat"] = ::update_table_eat;
self.update_funcs["headbang"] = ::update_headbang; self.update_funcs["headbang"] = ::update_headbang;
self.update_funcs["smell"] = ::update_smell; self.update_funcs["smell"] = ::update_smell;
self.update_funcs["context"] = ::update_context; self.update_funcs["context"] = ::update_context;
self.locomotion_func = ::update_locomotion; self.locomotion_func = ::update_locomotion;
} }
start_jail_run( do_pain ) start_jail_run( do_pain )
{ {
if ( self is_jail_state() ) if ( self is_jail_state() )
return false; return false;
if ( self.state == "berserk" || self.state == "crash" ) if ( self.state == "berserk" || self.state == "crash" )
return false; return false;
if ( self sloth_is_traversing() ) if ( self sloth_is_traversing() )
return false; return false;
if ( self.state == "gunshop_candy" || self.state == "table_eat" ) if ( self.state == "gunshop_candy" || self.state == "table_eat" )
{ {
if ( isdefined( self.bench ) ) if ( isdefined( self.bench ) )
{ {
if ( isdefined( level.weapon_bench_reset ) ) if ( isdefined( level.weapon_bench_reset ) )
self.bench [[ level.weapon_bench_reset ]](); self.bench [[ level.weapon_bench_reset ]]();
} }
} }
self stop_action(); self stop_action();
self thread sndchangebreathingstate( "happy" ); self thread sndchangebreathingstate( "happy" );
self thread action_jail_run( self.jail_start.origin, do_pain ); self thread action_jail_run( self.jail_start.origin, do_pain );
if ( self.state == "context" ) if ( self.state == "context" )
{ {
if ( isdefined( self.context.interrupt ) ) if ( isdefined( self.context.interrupt ) )
self [[ self.context.interrupt ]](); self [[ self.context.interrupt ]]();
} }
self sloth_init_roam_point(); self sloth_init_roam_point();
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.gift_trigger ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.gift_trigger );
return true; return true;
} }
action_jail_run( pos, do_pain ) action_jail_run( pos, do_pain )
{ {
self.needs_action = 0; self.needs_action = 0;
if ( isdefined( self.candy_model ) ) if ( isdefined( self.candy_model ) )
self.candy_model ghost(); self.candy_model ghost();
if ( isdefined( self.booze_model ) ) if ( isdefined( self.booze_model ) )
self.booze_model ghost(); self.booze_model ghost();
if ( is_true( do_pain ) ) if ( is_true( do_pain ) )
{ {
if ( !self sloth_is_traversing() && !is_true( self.is_pain ) ) if ( !self sloth_is_traversing() && !is_true( self.is_pain ) )
{ {
self.is_pain = 1; self.is_pain = 1;
self setanimstatefromasd( "zm_pain" ); self setanimstatefromasd( "zm_pain" );
self.reset_asd = "zm_pain"; self.reset_asd = "zm_pain";
self thread finish_pain(); self thread finish_pain();
maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
self notify( "pain_done" ); self notify( "pain_done" );
self.is_pain = 0; self.is_pain = 0;
} }
} }
while ( true ) while ( true )
{ {
if ( !self sloth_is_pain() ) if ( !self sloth_is_pain() )
break; break;
wait 0.1; wait 0.1;
} }
self.reset_asd = undefined; self.reset_asd = undefined;
self animmode( "normal" ); self animmode( "normal" );
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
self.locomotion = "run"; self.locomotion = "run";
self thread sloth_retreat_vo(); self thread sloth_retreat_vo();
self check_behind_mansion(); self check_behind_mansion();
if ( isdefined( self.mansion_goal ) ) if ( isdefined( self.mansion_goal ) )
{ {
self setgoalpos( self.mansion_goal.origin ); self setgoalpos( self.mansion_goal.origin );
self waittill( "goal" ); self waittill( "goal" );
self action_teleport_to_courtyard(); self action_teleport_to_courtyard();
} }
self.goalradius = 2; self.goalradius = 2;
self setgoalpos( self.jail_start.origin + (0, 128, 0) ); self setgoalpos( self.jail_start.origin + (0, 128, 0) );
self waittill( "goal" ); self waittill( "goal" );
self.goalradius = 16; self.goalradius = 16;
self orientmode( "face angle", self.jail_start.angles[1] ); self orientmode( "face angle", self.jail_start.angles[1] );
wait 0.5; wait 0.5;
self.needs_action = 1; self.needs_action = 1;
} }
start_jail_wait() start_jail_wait()
{ {
self stopanimscripted(); self stopanimscripted();
self action_jail_wait(); self action_jail_wait();
self thread sndchangebreathingstate( "happy" ); self thread sndchangebreathingstate( "happy" );
return 1; return 1;
} }
action_jail_wait() action_jail_wait()
{ {
self.needs_action = 0; self.needs_action = 0;
self setgoalpos( self.origin ); self setgoalpos( self.origin );
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self linkto( self.anchor );
self setanimstatefromasd( "zm_idle_protect" ); self setanimstatefromasd( "zm_idle_protect" );
self.needs_action = 1; self.needs_action = 1;
} }
update_jail_idle() update_jail_idle()
{ {
if ( is_true( self.open_jail ) ) if ( is_true( self.open_jail ) )
{ {
level notify( "cell_open" ); level notify( "cell_open" );
self.open_jail = 0; self.open_jail = 0;
} }
if ( is_true( level.cell_open ) ) if ( is_true( level.cell_open ) )
{ {
self stop_action(); self stop_action();
self sloth_set_state( "jail_idle" ); self sloth_set_state( "jail_idle" );
} }
} }
update_jail_wait() update_jail_wait()
{ {
if (is_true(self.dance_action)) if (is_true(self.dance_action))
{ {
return; return;
} }
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_jail" ) ) if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_jail" ) )
{ {
return; return;
} }
} }
if ( self.needs_action ) if ( self.needs_action )
self sloth_set_state( "jail_close" ); self sloth_set_state( "jail_close" );
} }
update_eat() update_eat()
{ {
if ( is_true( self.needs_action ) ) if ( is_true( self.needs_action ) )
{ {
self setclientfield( "sloth_eating", 0 ); self setclientfield( "sloth_eating", 0 );
if ( isdefined( self.candy_model ) ) if ( isdefined( self.candy_model ) )
self.candy_model ghost(); self.candy_model ghost();
context = self check_contextual_actions(); context = self check_contextual_actions();
if ( isdefined( context ) ) if ( isdefined( context ) )
{ {
self sloth_set_state( "context", context ); self sloth_set_state( "context", context );
return; return;
} }
self sloth_set_state( "roam" ); self sloth_set_state( "roam" );
} }
} }
sloth_check_ragdolls( ignore_zombie ) sloth_check_ragdolls( ignore_zombie )
{ {
non_ragdoll = 0; non_ragdoll = 0;
zombies = getaispeciesarray( level.zombie_team, "all" ); zombies = getaispeciesarray( level.zombie_team, "all" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
zombie = zombies[i]; zombie = zombies[i];
if ( is_true( zombie.is_sloth ) ) if ( is_true( zombie.is_sloth ) )
continue; continue;
if ( isdefined( ignore_zombie ) && zombie == ignore_zombie ) if ( isdefined( ignore_zombie ) && zombie == ignore_zombie )
continue; continue;
if ( isdefined( self.crawler ) && zombie == self.crawler ) if ( isdefined( self.crawler ) && zombie == self.crawler )
continue; continue;
if ( self is_facing( zombie ) ) if ( self is_facing( zombie ) )
{ {
dist = distancesquared( self.origin, zombie.origin ); dist = distancesquared( self.origin, zombie.origin );
if ( dist < 4096 ) if ( dist < 4096 )
{ {
if ( !self sloth_ragdoll_zombie( zombie ) ) if ( !self sloth_ragdoll_zombie( zombie ) )
{ {
if ( !is_true( self.no_gib ) && non_ragdoll % 3 == 0 ) if ( !is_true( self.no_gib ) && non_ragdoll % 3 == 0 )
{ {
zombie.force_gib = 1; zombie.force_gib = 1;
zombie.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) ); zombie.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) );
zombie thread maps\mp\animscripts\zm_death::do_gib(); zombie thread maps\mp\animscripts\zm_death::do_gib();
} }
non_ragdoll++; non_ragdoll++;
zombie dodamage( zombie.health * 10, zombie.origin ); zombie dodamage( zombie.health * 10, zombie.origin );
zombie playsound( "zmb_ai_sloth_attack_impact" ); zombie playsound( "zmb_ai_sloth_attack_impact" );
zombie.noragdoll = 1; zombie.noragdoll = 1;
zombie.nodeathragdoll = 1; zombie.nodeathragdoll = 1;
} }
if ( isdefined( self.target_zombie ) && self.target_zombie == zombie ) if ( isdefined( self.target_zombie ) && self.target_zombie == zombie )
self.target_zombie = undefined; self.target_zombie = undefined;
} }
} }
} }
} }
sloth_ragdoll_zombie( zombie ) sloth_ragdoll_zombie( zombie )
{ {
if ( !isdefined( self.ragdolls ) ) if ( !isdefined( self.ragdolls ) )
self.ragdolls = 0; self.ragdolls = 0;
if ( self.ragdolls < 4 ) if ( self.ragdolls < 4 )
{ {
self.ragdolls++; self.ragdolls++;
zombie dodamage( zombie.health * 10, zombie.origin ); zombie dodamage( zombie.health * 10, zombie.origin );
zombie playsound( "zmb_ai_sloth_attack_impact" ); zombie playsound( "zmb_ai_sloth_attack_impact" );
zombie startragdoll(); zombie startragdoll();
zombie setclientfield( "sloth_ragdoll_zombie", 1 ); zombie setclientfield( "sloth_ragdoll_zombie", 1 );
self thread sloth_ragdoll_wait(); self thread sloth_ragdoll_wait();
return true; return true;
} }
return false; return false;
} }
wait_start_candy_booze( piece ) wait_start_candy_booze( piece )
{ {
// remove // remove
} }

View File

@ -10,14 +10,14 @@
create_and_play_dialog( category, type, response, force_variant, override ) create_and_play_dialog( category, type, response, force_variant, override )
{ {
waittime = 0.25; waittime = 0.25;
if ( !isdefined( self.zmbvoxid ) ) if ( !isdefined( self.zmbvoxid ) )
{ {
return; return;
} }
if ( isdefined( self.dontspeak ) && self.dontspeak ) if ( isdefined( self.dontspeak ) && self.dontspeak )
{ {
return; return;
} }
@ -27,44 +27,44 @@ create_and_play_dialog( category, type, response, force_variant, override )
return; return;
} }
isresponse = 0; isresponse = 0;
alias_suffix = undefined; alias_suffix = undefined;
index = undefined; index = undefined;
prefix = undefined; prefix = undefined;
if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) ) if ( !isdefined( level.vox.speaker[self.zmbvoxid].alias[category][type] ) )
return; return;
prefix = level.vox.speaker[self.zmbvoxid].prefix; prefix = level.vox.speaker[self.zmbvoxid].prefix;
alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type]; alias_suffix = level.vox.speaker[self.zmbvoxid].alias[category][type];
if ( self is_player() ) if ( self is_player() )
{ {
if ( self.sessionstate != "playing" ) if ( self.sessionstate != "playing" )
return; return;
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( type != "revive_down" || type != "revive_up" ) ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( type != "revive_down" || type != "revive_up" ) )
return; return;
index = maps\mp\zombies\_zm_weapons::get_player_index( self ); index = maps\mp\zombies\_zm_weapons::get_player_index( self );
prefix = prefix + index + "_"; prefix = prefix + index + "_";
} }
if ( isdefined( response ) ) if ( isdefined( response ) )
{ {
if ( isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) ) if ( isdefined( level.vox.speaker[self.zmbvoxid].response[category][type] ) )
alias_suffix = response + level.vox.speaker[self.zmbvoxid].response[category][type]; alias_suffix = response + level.vox.speaker[self.zmbvoxid].response[category][type];
isresponse = 1; isresponse = 1;
} }
sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override ); sound_to_play = self zmbvoxgetlinevariant( prefix, alias_suffix, force_variant, override );
if ( isdefined( sound_to_play ) ) if ( isdefined( sound_to_play ) )
{ {
if ( isdefined( level._audio_custom_player_playvox ) ) if ( isdefined( level._audio_custom_player_playvox ) )
self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override ); self thread [[ level._audio_custom_player_playvox ]]( prefix, index, sound_to_play, waittime, category, type, override );
else else
self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse ); self thread do_player_or_npc_playvox( prefix, index, sound_to_play, waittime, category, type, override, isresponse );
} }
} }

View File

@ -16,170 +16,170 @@
door_buy() door_buy()
{ {
self waittill( "trigger", who, force ); self waittill( "trigger", who, force );
if ( isdefined( level.custom_door_buy_check ) ) if ( isdefined( level.custom_door_buy_check ) )
{ {
if ( !who [[ level.custom_door_buy_check ]]( self ) ) if ( !who [[ level.custom_door_buy_check ]]( self ) )
return false; return false;
} }
if ( getdvarint( "zombie_unlock_all" ) > 0 || isdefined( force ) && force ) if ( getdvarint( "zombie_unlock_all" ) > 0 || isdefined( force ) && force )
return true; return true;
if ( !who usebuttonpressed() ) if ( !who usebuttonpressed() )
return false; return false;
if ( who in_revive_trigger() ) if ( who in_revive_trigger() )
return false; return false;
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
players = get_players(); players = get_players();
cost = self.zombie_cost; cost = self.zombie_cost;
if ( who maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) if ( who maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
cost = who maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost ); cost = who maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost );
if ( self._door_open == 1 ) if ( self._door_open == 1 )
self.purchaser = undefined; self.purchaser = undefined;
else if ( who.score >= cost ) else if ( who.score >= cost )
{ {
who maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); who maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); maps\mp\_demo::bookmark( "zm_player_door", gettime(), who );
who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" );
who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" );
self.purchaser = who; self.purchaser = who;
} }
else else
{ {
play_sound_at_pos( "no_purchase", self.origin ); play_sound_at_pos( "no_purchase", self.origin );
if ( isdefined( level.custom_generic_deny_vo_func ) ) if ( isdefined( level.custom_generic_deny_vo_func ) )
who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); who thread [[ level.custom_generic_deny_vo_func ]]( 1 );
else else
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" );
return false; return false;
} }
} }
if ( isdefined( level._door_open_rumble_func ) ) if ( isdefined( level._door_open_rumble_func ) )
who thread [[ level._door_open_rumble_func ]](); who thread [[ level._door_open_rumble_func ]]();
return true; return true;
} }
door_opened( cost, quick_close ) door_opened( cost, quick_close )
{ {
if ( isdefined( self.door_is_moving ) && self.door_is_moving ) if ( isdefined( self.door_is_moving ) && self.door_is_moving )
return; return;
play_sound_at_pos( "purchase", self.origin ); play_sound_at_pos( "purchase", self.origin );
self.has_been_opened = 1; self.has_been_opened = 1;
all_trigs = getentarray( self.target, "target" ); all_trigs = getentarray( self.target, "target" );
self.door_is_moving = 1; self.door_is_moving = 1;
foreach ( trig in all_trigs ) foreach ( trig in all_trigs )
{ {
trig.door_is_moving = 1; trig.door_is_moving = 1;
trig trigger_off(); trig trigger_off();
trig.has_been_opened = 1; trig.has_been_opened = 1;
if ( !isdefined( trig._door_open ) || trig._door_open == 0 ) if ( !isdefined( trig._door_open ) || trig._door_open == 0 )
{ {
trig._door_open = 1; trig._door_open = 1;
trig notify( "door_opened" ); trig notify( "door_opened" );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "door_open" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "door_open" );
} }
else else
trig._door_open = 0; trig._door_open = 0;
if ( isdefined( trig.script_flag ) && trig._door_open == 1 ) if ( isdefined( trig.script_flag ) && trig._door_open == 1 )
{ {
tokens = strtok( trig.script_flag, "," ); tokens = strtok( trig.script_flag, "," );
for ( i = 0; i < tokens.size; i++ ) for ( i = 0; i < tokens.size; i++ )
flag_set( tokens[i] ); flag_set( tokens[i] );
} }
else if ( isdefined( trig.script_flag ) && trig._door_open == 0 ) else if ( isdefined( trig.script_flag ) && trig._door_open == 0 )
{ {
tokens = strtok( trig.script_flag, "," ); tokens = strtok( trig.script_flag, "," );
for ( i = 0; i < tokens.size; i++ ) for ( i = 0; i < tokens.size; i++ )
flag_clear( tokens[i] ); flag_clear( tokens[i] );
} }
if ( isdefined( quick_close ) && quick_close ) if ( isdefined( quick_close ) && quick_close )
{ {
trig set_hint_string( trig, "" ); trig set_hint_string( trig, "" );
continue; continue;
} }
if ( trig._door_open == 1 && flag( "door_can_close" ) ) if ( trig._door_open == 1 && flag( "door_can_close" ) )
{ {
trig set_hint_string( trig, "default_buy_door_close" ); trig set_hint_string( trig, "default_buy_door_close" );
continue; continue;
} }
if ( trig._door_open == 0 ) if ( trig._door_open == 0 )
trig set_hint_string( trig, "default_buy_door", cost ); trig set_hint_string( trig, "default_buy_door", cost );
} }
level notify( "door_opened" ); level notify( "door_opened" );
if ( isdefined( self.doors ) ) if ( isdefined( self.doors ) )
{ {
is_script_model_door = 0; is_script_model_door = 0;
have_moving_clip_for_door = 0; have_moving_clip_for_door = 0;
use_blocker_clip_for_pathing = 0; use_blocker_clip_for_pathing = 0;
foreach ( door in self.doors ) foreach ( door in self.doors )
{ {
if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) )
continue; continue;
if ( door.classname == "script_model" ) if ( door.classname == "script_model" )
{ {
is_script_model_door = 1; is_script_model_door = 1;
continue; continue;
} }
if ( door.classname == "script_brushmodel" && ( !isdefined( door.script_noteworthy ) || door.script_noteworthy != "clip" ) && ( !isdefined( door.script_string ) || door.script_string != "clip" ) ) if ( door.classname == "script_brushmodel" && ( !isdefined( door.script_noteworthy ) || door.script_noteworthy != "clip" ) && ( !isdefined( door.script_string ) || door.script_string != "clip" ) )
have_moving_clip_for_door = 1; have_moving_clip_for_door = 1;
} }
use_blocker_clip_for_pathing = is_script_model_door && !have_moving_clip_for_door; use_blocker_clip_for_pathing = is_script_model_door && !have_moving_clip_for_door;
for ( i = 0; i < self.doors.size; i++ ) for ( i = 0; i < self.doors.size; i++ )
{ {
self.doors[i] thread door_activate( self.doors[i].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); self.doors[i] thread door_activate( self.doors[i].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing );
} }
} }
level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
wait 1; wait 1;
self.door_is_moving = 0; self.door_is_moving = 0;
foreach ( trig in all_trigs ) foreach ( trig in all_trigs )
trig.door_is_moving = 0; trig.door_is_moving = 0;
if ( isdefined( quick_close ) && quick_close ) if ( isdefined( quick_close ) && quick_close )
{ {
for ( i = 0; i < all_trigs.size; i++ ) for ( i = 0; i < all_trigs.size; i++ )
all_trigs[i] trigger_on(); all_trigs[i] trigger_on();
return; return;
} }
if ( flag( "door_can_close" ) ) if ( flag( "door_can_close" ) )
{ {
wait 2.0; wait 2.0;
for ( i = 0; i < all_trigs.size; i++ ) for ( i = 0; i < all_trigs.size; i++ )
all_trigs[i] trigger_on(); all_trigs[i] trigger_on();
} }
} }
handle_post_board_repair_rewards( cost, zbarrier ) handle_post_board_repair_rewards( cost, zbarrier )
@ -204,26 +204,26 @@ handle_post_board_repair_rewards( cost, zbarrier )
player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required )
{ {
if ( !isdefined( trigger ) ) if ( !isdefined( trigger ) )
return true; return true;
if ( !is_player_valid( player ) ) if ( !is_player_valid( player ) )
return true; return true;
if ( players.size == 1 && isdefined( players[0].intermission ) && players[0].intermission == 1 ) if ( players.size == 1 && isdefined( players[0].intermission ) && players[0].intermission == 1 )
return true; return true;
if ( hold_required && !player usebuttonpressed() ) if ( hold_required && !player usebuttonpressed() )
return true; return true;
if ( !hold_required && !player use_button_held() ) if ( !hold_required && !player use_button_held() )
return true; return true;
if ( player in_revive_trigger() ) if ( player in_revive_trigger() )
return true; return true;
if ( player issprinting() || player isthrowinggrenade() ) if ( player issprinting() || player isthrowinggrenade() )
return true; return true;
return false; return false;
} }

View File

@ -79,7 +79,7 @@ buildable_place_think()
if ( self.stub.persistent == 4 ) if ( self.stub.persistent == 4 )
{ {
self [[ self.stub.custom_completion_callback ]]( player_built ); self [[ self.stub.custom_completion_callback ]]( player_built );
return; return;
} }
@ -182,209 +182,209 @@ buildable_place_think()
self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player );
} }
if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) ) if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) )
{ {
self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought; self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought;
} }
else else
{ {
if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) )
{ {
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED";
} }
else else
{ {
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX";
} }
} }
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
player maps\mp\zombies\_zm_buildables::track_buildables_pickedup( self.stub.weaponname ); player maps\mp\zombies\_zm_buildables::track_buildables_pickedup( self.stub.weaponname );
} }
} }
else while ( !isDefined( player_built ) || self scripts\zm\replaced\_zm_buildables_pooled::pooledbuildabletrigger_update_prompt( player_built ) ) else while ( !isDefined( player_built ) || self scripts\zm\replaced\_zm_buildables_pooled::pooledbuildabletrigger_update_prompt( player_built ) )
{
if ( isDefined( self.stub.model ) )
{ {
self.stub.model notsolid(); if ( isDefined( self.stub.model ) )
self.stub.model show();
}
if ( !isDefined( self.stub.stand_model ) && maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) )
{
self.stub.stand_model = spawn( "script_model", self.stub.model.origin );
self.stub.stand_model.angles = self.stub.model.angles;
if ( self.stub.weaponname == "jetgun_zm" )
{ {
self.stub.stand_model setModel( "p6_zm_buildable_sq_electric_box" ); self.stub.model notsolid();
self.stub.stand_model.origin += (0, 0, -23); self.stub.model show();
self.stub.stand_model.angles += (0, 90, 90);
}
}
while ( self.stub.persistent == 1 )
{
self waittill( "trigger", player );
if ( isDefined( player.screecher_weapon ) )
{
continue;
} }
if ( isDefined( self.stub.built ) && !self.stub.built ) if ( !isDefined( self.stub.stand_model ) && maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) )
{ {
self.stub.hint_string = ""; self.stub.stand_model = spawn( "script_model", self.stub.model.origin );
self sethintstring( self.stub.hint_string ); self.stub.stand_model.angles = self.stub.model.angles;
return;
}
if ( player != self.parent_player ) if ( self.stub.weaponname == "jetgun_zm" )
{
continue;
}
if ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0.5 );
}
if ( player has_player_equipment( self.stub.weaponname ) )
{
continue;
}
if (player.score < self.stub.cost)
{
self play_sound_on_ent( "no_purchase" );
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
continue;
}
if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) )
{
player maps\mp\zombies\_zm_score::minus_to_player_score( self.stub.cost );
self play_sound_on_ent( "purchase" );
player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname );
player giveweapon( self.stub.weaponname );
player setweaponammoclip( self.stub.weaponname, 1 );
if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) )
{ {
if ( isDefined( self.stub.model ) ) self.stub.stand_model setModel( "p6_zm_buildable_sq_electric_box" );
self.stub.stand_model.origin += (0, 0, -23);
self.stub.stand_model.angles += (0, 90, 90);
}
}
while ( self.stub.persistent == 1 )
{
self waittill( "trigger", player );
if ( isDefined( player.screecher_weapon ) )
{
continue;
}
if ( isDefined( self.stub.built ) && !self.stub.built )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return;
}
if ( player != self.parent_player )
{
continue;
}
if ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0.5 );
}
if ( player has_player_equipment( self.stub.weaponname ) )
{
continue;
}
if (player.score < self.stub.cost)
{
self play_sound_on_ent( "no_purchase" );
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
continue;
}
if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) )
{
player maps\mp\zombies\_zm_score::minus_to_player_score( self.stub.cost );
self play_sound_on_ent( "purchase" );
player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname );
player giveweapon( self.stub.weaponname );
player setweaponammoclip( self.stub.weaponname, 1 );
if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) )
{ {
self.stub.model thread model_go_away(self.stub.weaponname); if ( isDefined( self.stub.model ) )
{
self.stub.model thread model_go_away(self.stub.weaponname);
}
} }
}
if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) ) if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) )
{ {
self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player ); self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player );
} }
if ( self.stub.weaponname != "keys_zm" ) if ( self.stub.weaponname != "keys_zm" )
{ {
player setactionslot( 1, "weapon", self.stub.weaponname ); player setactionslot( 1, "weapon", self.stub.weaponname );
} }
if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) ) if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) )
{ {
self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought; self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought;
}
else
{
self.stub.hint_string = "";
}
self sethintstring( self.stub.hint_string );
player maps\mp\zombies\_zm_buildables::track_buildables_pickedup( self.stub.weaponname );
continue;
} }
else else
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
} }
self sethintstring( self.stub.hint_string );
player maps\mp\zombies\_zm_buildables::track_buildables_pickedup( self.stub.weaponname );
continue;
}
else
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
} }
} }
}
} }
player_can_build( buildable, continuing ) player_can_build( buildable, continuing )
{ {
if ( !isdefined( buildable ) ) if ( !isdefined( buildable ) )
return false; return false;
if ( isdefined( continuing ) && continuing ) if ( isdefined( continuing ) && continuing )
{ {
if ( buildable buildable_is_piece_built( buildable.pieces[0] ) ) if ( buildable buildable_is_piece_built( buildable.pieces[0] ) )
return false; return false;
} }
else if ( buildable buildable_is_piece_built_or_building( buildable.pieces[0] ) ) else if ( buildable buildable_is_piece_built_or_building( buildable.pieces[0] ) )
return false; return false;
if ( isdefined( buildable.stub ) && isdefined( buildable.stub.custom_buildablestub_update_prompt ) && isdefined( buildable.stub.playertrigger[0] ) && isdefined( buildable.stub.playertrigger[0].stub ) && !buildable.stub.playertrigger[0].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[0] ) ) if ( isdefined( buildable.stub ) && isdefined( buildable.stub.custom_buildablestub_update_prompt ) && isdefined( buildable.stub.playertrigger[0] ) && isdefined( buildable.stub.playertrigger[0].stub ) && !buildable.stub.playertrigger[0].stub [[ buildable.stub.custom_buildablestub_update_prompt ]]( self, 1, buildable.stub.playertrigger[0] ) )
return false; return false;
return true; return true;
} }
buildable_use_hold_think( player, bind_stub = self.stub ) buildable_use_hold_think( player, bind_stub = self.stub )
{ {
self thread buildable_play_build_fx( player ); self thread buildable_play_build_fx( player );
self thread buildable_use_hold_think_internal( player, bind_stub ); self thread buildable_use_hold_think_internal( player, bind_stub );
retval = self waittill_any_return( "build_succeed", "build_failed" ); retval = self waittill_any_return( "build_succeed", "build_failed" );
if ( retval == "build_succeed" ) if ( retval == "build_succeed" )
return true; return true;
return false; return false;
} }
buildable_use_hold_think_internal( player, bind_stub = self.stub ) buildable_use_hold_think_internal( player, bind_stub = self.stub )
{ {
wait 0.01; wait 0.01;
if ( !isdefined( self ) ) if ( !isdefined( self ) )
{ {
self notify( "build_failed" ); self notify( "build_failed" );
if ( isdefined( player.buildableaudio ) ) if ( isdefined( player.buildableaudio ) )
{ {
player.buildableaudio delete(); player.buildableaudio delete();
player.buildableaudio = undefined; player.buildableaudio = undefined;
} }
return; return;
} }
if ( !isdefined( self.usetime ) ) if ( !isdefined( self.usetime ) )
self.usetime = int( 3000 ); self.usetime = int( 3000 );
self.build_time = self.usetime; self.build_time = self.usetime;
self.build_start_time = gettime(); self.build_start_time = gettime();
build_time = self.build_time; build_time = self.build_time;
build_start_time = self.build_start_time; build_start_time = self.build_start_time;
player disable_player_move_states( 1 ); player disable_player_move_states( 1 );
player increment_is_drinking(); player increment_is_drinking();
orgweapon = player getcurrentweapon(); orgweapon = player getcurrentweapon();
build_weapon = "zombie_builder_zm"; build_weapon = "zombie_builder_zm";
if ( isdefined( bind_stub.build_weapon ) ) if ( isdefined( bind_stub.build_weapon ) )
build_weapon = bind_stub.build_weapon; build_weapon = bind_stub.build_weapon;
player giveweapon( build_weapon ); player giveweapon( build_weapon );
player switchtoweapon( build_weapon ); player switchtoweapon( build_weapon );
bind_stub.buildablezone buildable_set_piece_building( bind_stub.buildablezone.pieces[0] ); bind_stub.buildablezone buildable_set_piece_building( bind_stub.buildablezone.pieces[0] );
player thread player_progress_bar( build_start_time, build_time, bind_stub.building_prompt ); player thread player_progress_bar( build_start_time, build_time, bind_stub.building_prompt );
if ( isdefined( level.buildable_build_custom_func ) ) if ( isdefined( level.buildable_build_custom_func ) )
player thread [[ level.buildable_build_custom_func ]]( self.stub ); player thread [[ level.buildable_build_custom_func ]]( self.stub );
while ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time < self.build_time ) while ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time < self.build_time )
wait 0.05; wait 0.05;
player notify( "buildable_progress_end" ); player notify( "buildable_progress_end" );
if ( player hasWeapon( orgweapon ) ) if ( player hasWeapon( orgweapon ) )
{ {
@ -395,69 +395,69 @@ buildable_use_hold_think_internal( player, bind_stub = self.stub )
player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon );
} }
player takeweapon( "zombie_builder_zm" ); player takeweapon( "zombie_builder_zm" );
if ( isdefined( player.is_drinking ) && player.is_drinking ) if ( isdefined( player.is_drinking ) && player.is_drinking )
player decrement_is_drinking(); player decrement_is_drinking();
player enable_player_move_states(); player enable_player_move_states();
if ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time >= self.build_time ) if ( isdefined( self ) && player player_continue_building( bind_stub.buildablezone, self.stub ) && gettime() - self.build_start_time >= self.build_time )
{ {
buildable_clear_piece_building( bind_stub.buildablezone.pieces[0] ); buildable_clear_piece_building( bind_stub.buildablezone.pieces[0] );
self notify( "build_succeed" ); self notify( "build_succeed" );
} }
else else
{ {
if ( isdefined( player.buildableaudio ) ) if ( isdefined( player.buildableaudio ) )
{ {
player.buildableaudio delete(); player.buildableaudio delete();
player.buildableaudio = undefined; player.buildableaudio = undefined;
} }
buildable_clear_piece_building( bind_stub.buildablezone.pieces[0] ); buildable_clear_piece_building( bind_stub.buildablezone.pieces[0] );
self notify( "build_failed" ); self notify( "build_failed" );
} }
} }
player_continue_building( buildablezone, build_stub = buildablezone.stub ) player_continue_building( buildablezone, build_stub = buildablezone.stub )
{ {
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() )
return false; return false;
if ( self isthrowinggrenade() ) if ( self isthrowinggrenade() )
return false; return false;
if ( !self player_can_build( buildablezone, 1 ) ) if ( !self player_can_build( buildablezone, 1 ) )
return false; return false;
if ( isdefined( self.screecher ) ) if ( isdefined( self.screecher ) )
return false; return false;
if ( !self usebuttonpressed() ) if ( !self usebuttonpressed() )
return false; return false;
if ( !buildablezone buildable_is_piece_building( buildablezone.pieces[0] ) ) if ( !buildablezone buildable_is_piece_building( buildablezone.pieces[0] ) )
return false; return false;
trigger = build_stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); trigger = build_stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self );
if ( build_stub.script_unitrigger_type == "unitrigger_radius_use" ) if ( build_stub.script_unitrigger_type == "unitrigger_radius_use" )
{ {
torigin = build_stub unitrigger_origin(); torigin = build_stub unitrigger_origin();
porigin = self geteye(); porigin = self geteye();
radius_sq = 2.25 * build_stub.test_radius_sq; radius_sq = 2.25 * build_stub.test_radius_sq;
if ( distance2dsquared( torigin, porigin ) > radius_sq ) if ( distance2dsquared( torigin, porigin ) > radius_sq )
return false; return false;
} }
else if ( !isdefined( trigger ) || !trigger istouching( self ) ) else if ( !isdefined( trigger ) || !trigger istouching( self ) )
return false; return false;
if ( isdefined( build_stub.require_look_at ) && build_stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.4 ) ) if ( isdefined( build_stub.require_look_at ) && build_stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.4 ) )
return false; return false;
return true; return true;
} }
player_build( buildable, pieces ) player_build( buildable, pieces )
@ -467,85 +467,85 @@ player_build( buildable, pieces )
buildable buildable_set_piece_built( piece ); buildable buildable_set_piece_built( piece );
} }
if ( isdefined( buildable.stub.model ) ) if ( isdefined( buildable.stub.model ) )
{ {
for ( i = 0; i < buildable.pieces.size; i++ ) for ( i = 0; i < buildable.pieces.size; i++ )
{ {
if ( isdefined( buildable.pieces[i].part_name ) ) if ( isdefined( buildable.pieces[i].part_name ) )
{ {
buildable.stub.model notsolid(); buildable.stub.model notsolid();
if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) ) if ( !( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) )
{ {
buildable.stub.model hidepart( buildable.pieces[i].part_name ); buildable.stub.model hidepart( buildable.pieces[i].part_name );
continue; continue;
} }
buildable.stub.model show(); buildable.stub.model show();
buildable.stub.model showpart( buildable.pieces[i].part_name ); buildable.stub.model showpart( buildable.pieces[i].part_name );
} }
} }
} }
if ( isplayer( self ) ) if ( isplayer( self ) )
self track_buildable_pieces_built( buildable ); self track_buildable_pieces_built( buildable );
if ( buildable buildable_all_built() ) if ( buildable buildable_all_built() )
{ {
self player_finish_buildable( buildable ); self player_finish_buildable( buildable );
buildable.stub buildablestub_finish_build( self ); buildable.stub buildablestub_finish_build( self );
if ( isplayer( self ) ) if ( isplayer( self ) )
self track_buildables_built( buildable ); self track_buildables_built( buildable );
if ( isdefined( level.buildable_built_custom_func ) ) if ( isdefined( level.buildable_built_custom_func ) )
self thread [[ level.buildable_built_custom_func ]]( buildable ); self thread [[ level.buildable_built_custom_func ]]( buildable );
alias = sndbuildablecompletealias( buildable.buildable_name ); alias = sndbuildablecompletealias( buildable.buildable_name );
self playsound( alias ); self playsound( alias );
} }
else else
{ {
self playsound( "zmb_buildable_piece_add" ); self playsound( "zmb_buildable_piece_add" );
assert( isdefined( level.zombie_buildables[buildable.buildable_name].building ), "Missing builing hint" ); assert( isdefined( level.zombie_buildables[buildable.buildable_name].building ), "Missing builing hint" );
if ( isdefined( level.zombie_buildables[buildable.buildable_name].building ) ) if ( isdefined( level.zombie_buildables[buildable.buildable_name].building ) )
return level.zombie_buildables[buildable.buildable_name].building; return level.zombie_buildables[buildable.buildable_name].building;
} }
return ""; return "";
} }
player_progress_bar( start_time, build_time, building_prompt ) player_progress_bar( start_time, build_time, building_prompt )
{ {
self.usebar = self createprimaryprogressbar(); self.usebar = self createprimaryprogressbar();
self.usebartext = self createprimaryprogressbartext(); self.usebartext = self createprimaryprogressbartext();
if ( isdefined( building_prompt ) ) if ( isdefined( building_prompt ) )
self.usebartext settext( building_prompt ); self.usebartext settext( building_prompt );
else else
self.usebartext settext( &"ZOMBIE_BUILDING" ); self.usebartext settext( &"ZOMBIE_BUILDING" );
if ( isdefined( self ) && isdefined( start_time ) && isdefined( build_time ) ) if ( isdefined( self ) && isdefined( start_time ) && isdefined( build_time ) )
self player_progress_bar_update( start_time, build_time ); self player_progress_bar_update( start_time, build_time );
self.usebartext destroyelem(); self.usebartext destroyelem();
self.usebar destroyelem(); self.usebar destroyelem();
} }
player_progress_bar_update( start_time, build_time ) player_progress_bar_update( start_time, build_time )
{ {
self endon( "entering_last_stand" ); self endon( "entering_last_stand" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "buildable_progress_end" ); self endon( "buildable_progress_end" );
self.usebar updatebar( 0.01, 1000 / build_time ); self.usebar updatebar( 0.01, 1000 / build_time );
while ( isdefined( self ) && gettime() - start_time < build_time ) while ( isdefined( self ) && gettime() - start_time < build_time )
{ {
wait 0.05; wait 0.05;
} }
} }
model_go_away(weaponname) model_go_away(weaponname)
@ -563,18 +563,18 @@ model_go_away(weaponname)
model_fly_away(weaponname) model_fly_away(weaponname)
{ {
origin = self.origin; origin = self.origin;
self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 );
direction = self.origin; direction = self.origin;
direction = ( direction[1], direction[0], 0 ); direction = ( direction[1], direction[0], 0 );
if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 )
direction = ( direction[0], direction[1] * -1, 0 ); direction = ( direction[0], direction[1] * -1, 0 );
else if ( direction[0] < 0 ) else if ( direction[0] < 0 )
direction = ( direction[0] * -1, direction[1], 0 ); direction = ( direction[0] * -1, direction[1], 0 );
self vibrate( direction, 10, 0.5, 3 ); self vibrate( direction, 10, 0.5, 3 );
self waittill( "movedone" ); self waittill( "movedone" );
self.origin = origin; self.origin = origin;
self.angles = (0, self.angles[1], 0); self.angles = (0, self.angles[1], 0);
@ -598,7 +598,7 @@ model_fly_away_think(weaponname)
} }
joker_model rotateto( joker_model.angles + (90, 0, 0), 0.5 ); joker_model rotateto( joker_model.angles + (90, 0, 0), 0.5 );
joker_model waittill( "rotatedone" ); joker_model waittill( "rotatedone" );
while (maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( weaponname, undefined )) while (maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( weaponname, undefined ))
{ {
@ -606,6 +606,6 @@ model_fly_away_think(weaponname)
} }
joker_model rotateto( joker_model.angles - (90, 0, 0), 0.5 ); joker_model rotateto( joker_model.angles - (90, 0, 0), 0.5 );
joker_model waittill( "rotatedone" ); joker_model waittill( "rotatedone" );
} }
} }

View File

@ -5,65 +5,65 @@
add_buildable_to_pool( stub, poolname ) add_buildable_to_pool( stub, poolname )
{ {
if ( !isdefined( level.buildablepools ) ) if ( !isdefined( level.buildablepools ) )
level.buildablepools = []; level.buildablepools = [];
if ( !isdefined( level.buildablepools[poolname] ) ) if ( !isdefined( level.buildablepools[poolname] ) )
{ {
level.buildablepools[poolname] = spawnstruct(); level.buildablepools[poolname] = spawnstruct();
level.buildablepools[poolname].stubs = []; level.buildablepools[poolname].stubs = [];
} }
level.buildablepools[poolname].stubs[level.buildablepools[poolname].stubs.size] = stub; level.buildablepools[poolname].stubs[level.buildablepools[poolname].stubs.size] = stub;
if ( !isdefined( level.buildablepools[poolname].buildable_slot ) ) if ( !isdefined( level.buildablepools[poolname].buildable_slot ) )
level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot; level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot;
else else
assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot ); assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot );
stub.buildable_pool = level.buildablepools[poolname]; stub.buildable_pool = level.buildablepools[poolname];
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func; stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
stub.original_trigger_func = stub.trigger_func; stub.original_trigger_func = stub.trigger_func;
stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt; stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt;
reregister_unitrigger( stub, ::pooled_buildable_place_think ); reregister_unitrigger( stub, ::pooled_buildable_place_think );
} }
reregister_unitrigger( unitrigger_stub, new_trigger_func ) reregister_unitrigger( unitrigger_stub, new_trigger_func )
{ {
static = 0; static = 0;
if ( isdefined( unitrigger_stub.in_zone ) ) if ( isdefined( unitrigger_stub.in_zone ) )
static = 1; static = 1;
unregister_unitrigger( unitrigger_stub ); unregister_unitrigger( unitrigger_stub );
unitrigger_stub.trigger_func = new_trigger_func; unitrigger_stub.trigger_func = new_trigger_func;
if ( static ) if ( static )
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 ); register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
else else
register_unitrigger( unitrigger_stub, new_trigger_func ); register_unitrigger( unitrigger_stub, new_trigger_func );
} }
randomize_pooled_buildables( poolname ) randomize_pooled_buildables( poolname )
{ {
level waittill( "buildables_setup" ); level waittill( "buildables_setup" );
if ( isdefined( level.buildablepools[poolname] ) ) if ( isdefined( level.buildablepools[poolname] ) )
{ {
count = level.buildablepools[poolname].stubs.size; count = level.buildablepools[poolname].stubs.size;
if ( count > 1 ) if ( count > 1 )
{ {
for ( i = 0; i < count; i++ ) for ( i = 0; i < count; i++ )
{ {
rand = randomint(count); rand = randomint(count);
if ( rand != i ) if ( rand != i )
{ {
swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[rand] ); swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[rand] );
} }
} }
} }
} }
} }
pooledbuildabletrigger_update_prompt( player ) pooledbuildabletrigger_update_prompt( player )
@ -86,20 +86,20 @@ pooledbuildabletrigger_update_prompt( player )
pooledbuildablestub_update_prompt( player, trigger ) pooledbuildablestub_update_prompt( player, trigger )
{ {
if ( !self anystub_update_prompt( player ) ) if ( !self anystub_update_prompt( player ) )
return 0; return 0;
can_use = 1; can_use = 1;
if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) ) if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) )
return 0; return 0;
self.cursor_hint = "HINT_NOICON"; self.cursor_hint = "HINT_NOICON";
self.cursor_hint_weapon = undefined; self.cursor_hint_weapon = undefined;
piece = undefined; piece = undefined;
if ( !( isdefined( self.built ) && self.built ) ) if ( !( isdefined( self.built ) && self.built ) )
{ {
if (!is_true(self.solo_pool)) if (!is_true(self.solo_pool))
{ {
if (level.buildables_available.size > 1) if (level.buildables_available.size > 1)
@ -133,71 +133,71 @@ pooledbuildablestub_update_prompt( player, trigger )
return 1; return 1;
} }
if ( isdefined( level.zombie_buildables[self.equipname].hint ) ) if ( isdefined( level.zombie_buildables[self.equipname].hint ) )
self.hint_string = level.zombie_buildables[self.equipname].hint; self.hint_string = level.zombie_buildables[self.equipname].hint;
else else
self.hint_string = "Missing buildable hint"; self.hint_string = "Missing buildable hint";
} }
else else
return trigger [[ self.original_prompt_and_visibility_func ]]( player ); return trigger [[ self.original_prompt_and_visibility_func ]]( player );
return 1; return 1;
} }
find_bench( bench_name ) find_bench( bench_name )
{ {
return getent( bench_name, "targetname" ); return getent( bench_name, "targetname" );
} }
swap_buildable_fields( stub1, stub2 ) swap_buildable_fields( stub1, stub2 )
{ {
temp = stub2.buildablezone; temp = stub2.buildablezone;
stub2.buildablezone = stub1.buildablezone; stub2.buildablezone = stub1.buildablezone;
stub2.buildablezone.stub = stub2; stub2.buildablezone.stub = stub2;
stub1.buildablezone = temp; stub1.buildablezone = temp;
stub1.buildablezone.stub = stub1; stub1.buildablezone.stub = stub1;
temp = stub2.buildablestruct; temp = stub2.buildablestruct;
stub2.buildablestruct = stub1.buildablestruct; stub2.buildablestruct = stub1.buildablestruct;
stub1.buildablestruct = temp; stub1.buildablestruct = temp;
temp = stub2.equipname; temp = stub2.equipname;
stub2.equipname = stub1.equipname; stub2.equipname = stub1.equipname;
stub1.equipname = temp; stub1.equipname = temp;
temp = stub2.hint_string; temp = stub2.hint_string;
stub2.hint_string = stub1.hint_string; stub2.hint_string = stub1.hint_string;
stub1.hint_string = temp; stub1.hint_string = temp;
temp = stub2.trigger_hintstring; temp = stub2.trigger_hintstring;
stub2.trigger_hintstring = stub1.trigger_hintstring; stub2.trigger_hintstring = stub1.trigger_hintstring;
stub1.trigger_hintstring = temp; stub1.trigger_hintstring = temp;
temp = stub2.persistent; temp = stub2.persistent;
stub2.persistent = stub1.persistent; stub2.persistent = stub1.persistent;
stub1.persistent = temp; stub1.persistent = temp;
temp = stub2.onbeginuse; temp = stub2.onbeginuse;
stub2.onbeginuse = stub1.onbeginuse; stub2.onbeginuse = stub1.onbeginuse;
stub1.onbeginuse = temp; stub1.onbeginuse = temp;
temp = stub2.oncantuse; temp = stub2.oncantuse;
stub2.oncantuse = stub1.oncantuse; stub2.oncantuse = stub1.oncantuse;
stub1.oncantuse = temp; stub1.oncantuse = temp;
temp = stub2.onenduse; temp = stub2.onenduse;
stub2.onenduse = stub1.onenduse; stub2.onenduse = stub1.onenduse;
stub1.onenduse = temp; stub1.onenduse = temp;
temp = stub2.target; temp = stub2.target;
stub2.target = stub1.target; stub2.target = stub1.target;
stub1.target = temp; stub1.target = temp;
temp = stub2.targetname; temp = stub2.targetname;
stub2.targetname = stub1.targetname; stub2.targetname = stub1.targetname;
stub1.targetname = temp; stub1.targetname = temp;
temp = stub2.weaponname; temp = stub2.weaponname;
stub2.weaponname = stub1.weaponname; stub2.weaponname = stub1.weaponname;
stub1.weaponname = temp; stub1.weaponname = temp;
temp = stub2.cost; temp = stub2.cost;
stub2.cost = stub1.cost; stub2.cost = stub1.cost;
stub1.cost = temp; stub1.cost = temp;
temp = stub2.original_prompt_and_visibility_func; temp = stub2.original_prompt_and_visibility_func;
stub2.original_prompt_and_visibility_func = stub1.original_prompt_and_visibility_func; stub2.original_prompt_and_visibility_func = stub1.original_prompt_and_visibility_func;
stub1.original_prompt_and_visibility_func = temp; stub1.original_prompt_and_visibility_func = temp;
bench1 = undefined; bench1 = undefined;
bench2 = undefined; bench2 = undefined;
transfer_pos_as_is = 1; transfer_pos_as_is = 1;
if ( isdefined( stub1.model.target ) && isdefined( stub2.model.target ) ) if ( isdefined( stub1.model.target ) && isdefined( stub2.model.target ) )
{ {
@ -223,22 +223,22 @@ swap_buildable_fields( stub1, stub2 )
stub1.model.target = temp; stub1.model.target = temp;
} }
temp = stub2.model; temp = stub2.model;
stub2.model = stub1.model; stub2.model = stub1.model;
stub1.model = temp; stub1.model = temp;
if ( transfer_pos_as_is ) if ( transfer_pos_as_is )
{ {
temp = []; temp = [];
temp[0] = stub2.model.origin; temp[0] = stub2.model.origin;
temp[1] = stub2.model.angles; temp[1] = stub2.model.angles;
stub2.model.origin = stub1.model.origin; stub2.model.origin = stub1.model.origin;
stub2.model.angles = stub1.model.angles; stub2.model.angles = stub1.model.angles;
stub1.model.origin = temp[0]; stub1.model.origin = temp[0];
stub1.model.angles = temp[1]; stub1.model.angles = temp[1];
swap_buildable_fields_model_offset(stub1, stub2); swap_buildable_fields_model_offset(stub1, stub2);
} }
} }
swap_buildable_fields_model_offset(stub1, stub2) swap_buildable_fields_model_offset(stub1, stub2)
@ -399,85 +399,85 @@ swap_buildable_fields_model_offset(stub1, stub2)
pooled_buildable_place_think() pooled_buildable_place_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( isdefined( self.stub.built ) && self.stub.built ) if ( isdefined( self.stub.built ) && self.stub.built )
return scripts\zm\replaced\_zm_buildables::buildable_place_think(); return scripts\zm\replaced\_zm_buildables::buildable_place_think();
while ( !( isdefined( self.stub.built ) && self.stub.built ) ) while ( !( isdefined( self.stub.built ) && self.stub.built ) )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( player != self.parent_player ) if ( player != self.parent_player )
continue; continue;
if ( isdefined( player.screecher_weapon ) ) if ( isdefined( player.screecher_weapon ) )
continue; continue;
if ( !is_player_valid( player ) ) if ( !is_player_valid( player ) )
{ {
player thread ignore_triggers( 0.5 ); player thread ignore_triggers( 0.5 );
continue; continue;
} }
bind_to = self.stub.buildable_pool pooledbuildable_stub_for_equipname( level.buildables_available[self.stub.buildables_available_index] ); bind_to = self.stub.buildable_pool pooledbuildable_stub_for_equipname( level.buildables_available[self.stub.buildables_available_index] );
if ( !isdefined( bind_to ) || isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to || isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable ) if ( !isdefined( bind_to ) || isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to || isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isdefined( self.stub.oncantuse ) ) if ( isdefined( self.stub.oncantuse ) )
self.stub [[ self.stub.oncantuse ]]( player ); self.stub [[ self.stub.oncantuse ]]( player );
continue; continue;
} }
status = player scripts\zm\replaced\_zm_buildables::player_can_build( bind_to.buildablezone ); status = player scripts\zm\replaced\_zm_buildables::player_can_build( bind_to.buildablezone );
if ( !status ) if ( !status )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isdefined( bind_to.oncantuse ) ) if ( isdefined( bind_to.oncantuse ) )
bind_to [[ bind_to.oncantuse ]]( player ); bind_to [[ bind_to.oncantuse ]]( player );
} }
else else
{ {
if ( isdefined( bind_to.onbeginuse ) ) if ( isdefined( bind_to.onbeginuse ) )
self.stub [[ bind_to.onbeginuse ]]( player ); self.stub [[ bind_to.onbeginuse ]]( player );
result = self scripts\zm\replaced\_zm_buildables::buildable_use_hold_think( player, bind_to ); result = self scripts\zm\replaced\_zm_buildables::buildable_use_hold_think( player, bind_to );
team = player.pers["team"]; team = player.pers["team"];
if ( result ) if ( result )
{ {
if ( isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to ) if ( isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to )
result = 0; result = 0;
if ( isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable ) if ( isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
result = 0; result = 0;
} }
if ( isdefined( bind_to.onenduse ) ) if ( isdefined( bind_to.onenduse ) )
self.stub [[ bind_to.onenduse ]]( team, player, result ); self.stub [[ bind_to.onenduse ]]( team, player, result );
if ( !result ) if ( !result )
continue; continue;
if ( bind_to != self.stub ) if ( bind_to != self.stub )
{ {
swap_buildable_fields( self.stub, bind_to ); swap_buildable_fields( self.stub, bind_to );
} }
if ( isdefined( self.stub.onuse ) ) if ( isdefined( self.stub.onuse ) )
self.stub [[ self.stub.onuse ]]( player ); self.stub [[ self.stub.onuse ]]( player );
prompt = player scripts\zm\replaced\_zm_buildables::player_build( self.stub.buildablezone ); prompt = player scripts\zm\replaced\_zm_buildables::player_build( self.stub.buildablezone );
self.stub.hint_string = self.stub.trigger_hintstring; self.stub.hint_string = self.stub.trigger_hintstring;
} }
} }
self.stub maps\mp\zombies\_zm_buildables::buildablestub_remove(); self.stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
arrayremovevalue(level.buildables_available, self.stub.equipname); arrayremovevalue(level.buildables_available, self.stub.equipname);
@ -514,15 +514,15 @@ pooled_buildable_place_update_all()
pooledbuildable_stub_for_equipname( equipname ) pooledbuildable_stub_for_equipname( equipname )
{ {
foreach ( stub in self.stubs ) foreach ( stub in self.stubs )
{ {
if ( isdefined( stub.bound_to_buildable ) ) if ( isdefined( stub.bound_to_buildable ) )
continue; continue;
if ( stub.equipname == equipname ) if ( stub.equipname == equipname )
return stub; return stub;
} }
return undefined; return undefined;
} }
choose_open_buildable( player ) choose_open_buildable( player )

View File

@ -9,96 +9,96 @@
init() init()
{ {
level._challenges = spawnstruct(); level._challenges = spawnstruct();
stats_init(); stats_init();
level.a_m_challenge_boards = []; level.a_m_challenge_boards = [];
level.a_uts_challenge_boxes = []; level.a_uts_challenge_boxes = [];
a_m_challenge_boxes = getentarray( "challenge_box", "targetname" ); a_m_challenge_boxes = getentarray( "challenge_box", "targetname" );
array_thread( a_m_challenge_boxes, ::box_init ); array_thread( a_m_challenge_boxes, ::box_init );
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
n_bits = getminbitcountfornum( 14 ); n_bits = getminbitcountfornum( 14 );
registerclientfield( "toplayer", "challenge_complete_1", 14000, 1, "int" ); registerclientfield( "toplayer", "challenge_complete_1", 14000, 1, "int" );
registerclientfield( "toplayer", "challenge_complete_2", 14000, 1, "int" ); registerclientfield( "toplayer", "challenge_complete_2", 14000, 1, "int" );
registerclientfield( "toplayer", "challenge_complete_3", 14000, 1, "int" ); registerclientfield( "toplayer", "challenge_complete_3", 14000, 1, "int" );
registerclientfield( "toplayer", "challenge_complete_4", 14000, 1, "int" ); registerclientfield( "toplayer", "challenge_complete_4", 14000, 1, "int" );
} }
#using_animtree("fxanim_props_dlc4"); #using_animtree("fxanim_props_dlc4");
box_init() box_init()
{ {
self useanimtree( #animtree ); self useanimtree( #animtree );
s_unitrigger_stub = spawnstruct(); s_unitrigger_stub = spawnstruct();
s_unitrigger_stub.origin = self.origin + ( 0, 0, 0 ); s_unitrigger_stub.origin = self.origin + ( 0, 0, 0 );
s_unitrigger_stub.angles = self.angles; s_unitrigger_stub.angles = self.angles;
s_unitrigger_stub.radius = 64; s_unitrigger_stub.radius = 64;
s_unitrigger_stub.script_length = 64; s_unitrigger_stub.script_length = 64;
s_unitrigger_stub.script_width = 64; s_unitrigger_stub.script_width = 64;
s_unitrigger_stub.script_height = 64; s_unitrigger_stub.script_height = 64;
s_unitrigger_stub.cursor_hint = "HINT_NOICON"; s_unitrigger_stub.cursor_hint = "HINT_NOICON";
s_unitrigger_stub.hint_string = &""; s_unitrigger_stub.hint_string = &"";
s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; s_unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
s_unitrigger_stub.prompt_and_visibility_func = ::box_prompt_and_visiblity; s_unitrigger_stub.prompt_and_visibility_func = ::box_prompt_and_visiblity;
s_unitrigger_stub ent_flag_init( "waiting_for_grab" ); s_unitrigger_stub ent_flag_init( "waiting_for_grab" );
s_unitrigger_stub ent_flag_init( "reward_timeout" ); s_unitrigger_stub ent_flag_init( "reward_timeout" );
s_unitrigger_stub.b_busy = 0; s_unitrigger_stub.b_busy = 0;
s_unitrigger_stub.m_box = self; s_unitrigger_stub.m_box = self;
s_unitrigger_stub.b_disable_trigger = 0; s_unitrigger_stub.b_disable_trigger = 0;
if ( isdefined( self.script_string ) ) if ( isdefined( self.script_string ) )
s_unitrigger_stub.str_location = self.script_string; s_unitrigger_stub.str_location = self.script_string;
if ( isdefined( s_unitrigger_stub.m_box.target ) ) if ( isdefined( s_unitrigger_stub.m_box.target ) )
{ {
s_unitrigger_stub.m_board = getent( s_unitrigger_stub.m_box.target, "targetname" ); s_unitrigger_stub.m_board = getent( s_unitrigger_stub.m_box.target, "targetname" );
s_unitrigger_stub board_init( s_unitrigger_stub.m_board ); s_unitrigger_stub board_init( s_unitrigger_stub.m_board );
} }
unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 ); unitrigger_force_per_player_triggers( s_unitrigger_stub, 1 );
level.a_uts_challenge_boxes[level.a_uts_challenge_boxes.size] = s_unitrigger_stub; level.a_uts_challenge_boxes[level.a_uts_challenge_boxes.size] = s_unitrigger_stub;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::box_think ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_unitrigger_stub, ::box_think );
} }
box_think() box_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
s_team = level._challenges.s_team; s_team = level._challenges.s_team;
while ( true ) while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( !is_player_valid( player ) ) if ( !is_player_valid( player ) )
continue; continue;
if ( self.stub.b_busy ) if ( self.stub.b_busy )
{ {
current_weapon = player getcurrentweapon(); current_weapon = player getcurrentweapon();
if ( isdefined( player.intermission ) && player.intermission || is_melee_weapon( current_weapon ) || is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) || current_weapon == "none" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player isthrowinggrenade() || player in_revive_trigger() || player isswitchingweapons() || player.is_drinking > 0 ) if ( isdefined( player.intermission ) && player.intermission || is_melee_weapon( current_weapon ) || is_placeable_mine( current_weapon ) || is_equipment_that_blocks_purchase( current_weapon ) || current_weapon == "none" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player isthrowinggrenade() || player in_revive_trigger() || player isswitchingweapons() || player.is_drinking > 0 )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
if ( self.stub ent_flag( "waiting_for_grab" ) ) if ( self.stub ent_flag( "waiting_for_grab" ) )
{ {
if ( !isdefined( self.stub.player_using ) ) if ( !isdefined( self.stub.player_using ) )
self.stub.player_using = player; self.stub.player_using = player;
if ( player == self.stub.player_using ) if ( player == self.stub.player_using )
self.stub ent_flag_clear( "waiting_for_grab" ); self.stub ent_flag_clear( "waiting_for_grab" );
} }
wait 0.05; wait 0.05;
continue; continue;
} }
if ( self.b_can_open ) if ( self.b_can_open )
{ {
self.stub.hint_string = &""; self.stub.hint_string = &"";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
level thread open_box( player, self.stub ); level thread open_box( player, self.stub );
} }
} }
} }

View File

@ -6,9 +6,9 @@
chugabud_laststand() chugabud_laststand()
{ {
self endon( "player_suicide" ); self endon( "player_suicide" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "chugabud_bleedout" ); self endon( "chugabud_bleedout" );
if ( isdefined( self.e_chugabud_corpse ) ) if ( isdefined( self.e_chugabud_corpse ) )
{ {
@ -16,267 +16,267 @@ chugabud_laststand()
return; return;
} }
self maps\mp\zombies\_zm_laststand::increment_downed_stat(); self maps\mp\zombies\_zm_laststand::increment_downed_stat();
self.ignore_insta_kill = 1; self.ignore_insta_kill = 1;
self.health = self.maxhealth; self.health = self.maxhealth;
self chugabud_save_loadout(); self chugabud_save_loadout();
self chugabud_fake_death(); self chugabud_fake_death();
wait 3; wait 3;
if ( isdefined( self.insta_killed ) && self.insta_killed || isdefined( self.disable_chugabud_corpse ) ) if ( isdefined( self.insta_killed ) && self.insta_killed || isdefined( self.disable_chugabud_corpse ) )
create_corpse = 0; create_corpse = 0;
else else
create_corpse = 1; create_corpse = 1;
if ( create_corpse == 1 ) if ( create_corpse == 1 )
{ {
if ( isdefined( level._chugabug_reject_corpse_override_func ) ) if ( isdefined( level._chugabug_reject_corpse_override_func ) )
{ {
reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin ); reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin );
if ( reject_corpse ) if ( reject_corpse )
create_corpse = 0; create_corpse = 0;
} }
} }
if ( create_corpse == 1 ) if ( create_corpse == 1 )
{ {
self thread activate_chugabud_effects_and_audio(); self thread activate_chugabud_effects_and_audio();
corpse = self chugabud_spawn_corpse(); corpse = self chugabud_spawn_corpse();
self.e_chugabud_corpse = corpse; self.e_chugabud_corpse = corpse;
corpse.e_chugabud_player = self; corpse.e_chugabud_player = self;
corpse thread chugabud_corpse_revive_icon( self ); corpse thread chugabud_corpse_revive_icon( self );
corpse thread chugabud_corpse_cleanup_on_spectator( self ); corpse thread chugabud_corpse_cleanup_on_spectator( self );
corpse thread chugabud_corpse_cleanup_on_disconnect( self ); corpse thread chugabud_corpse_cleanup_on_disconnect( self );
if ( isdefined( level.whos_who_client_setup ) ) if ( isdefined( level.whos_who_client_setup ) )
corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 );
} }
self thread chugabud_fake_revive(); self thread chugabud_fake_revive();
wait 0.1; wait 0.1;
self.ignore_insta_kill = undefined; self.ignore_insta_kill = undefined;
self.disable_chugabud_corpse = undefined; self.disable_chugabud_corpse = undefined;
if ( create_corpse == 0 ) if ( create_corpse == 0 )
{ {
if ( is_player_valid( self ) ) if ( is_player_valid( self ) )
{ {
self.statusicon = ""; self.statusicon = "";
} }
self notify( "chugabud_effects_cleanup" ); self notify( "chugabud_effects_cleanup" );
return; return;
} }
bleedout_time = 30; bleedout_time = 30;
self thread chugabud_bleed_timeout( bleedout_time, corpse ); self thread chugabud_bleed_timeout( bleedout_time, corpse );
self thread chugabud_handle_multiple_instances( corpse ); self thread chugabud_handle_multiple_instances( corpse );
corpse waittill( "player_revived", e_reviver ); corpse waittill( "player_revived", e_reviver );
if ( isdefined( e_reviver ) && e_reviver == self ) if ( isdefined( e_reviver ) && e_reviver == self )
self notify( "whos_who_self_revive" ); self notify( "whos_who_self_revive" );
self perk_abort_drinking( 0.1 ); self perk_abort_drinking( 0.1 );
self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 );
self setorigin( corpse.origin ); self setorigin( corpse.origin );
self setplayerangles( corpse.angles ); self setplayerangles( corpse.angles );
if ( self player_is_in_laststand() ) if ( self player_is_in_laststand() )
{ {
self thread chugabud_laststand_cleanup( corpse, "player_revived" ); self thread chugabud_laststand_cleanup( corpse, "player_revived" );
self enableweaponcycling(); self enableweaponcycling();
self enableoffhandweapons(); self enableoffhandweapons();
self auto_revive( self, 1 ); self auto_revive( self, 1 );
return; return;
} }
self chugabud_laststand_cleanup( corpse, undefined ); self chugabud_laststand_cleanup( corpse, undefined );
} }
chugabud_save_loadout() chugabud_save_loadout()
{ {
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
currentweapon = self getcurrentweapon(); currentweapon = self getcurrentweapon();
self.loadout = spawnstruct(); self.loadout = spawnstruct();
self.loadout.player = self; self.loadout.player = self;
self.loadout.weapons = []; self.loadout.weapons = [];
self.loadout.score = self.score; self.loadout.score = self.score;
self.loadout.current_weapon = -1; self.loadout.current_weapon = -1;
foreach ( index, weapon in primaries ) foreach ( index, weapon in primaries )
{ {
self.loadout.weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon ); self.loadout.weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon );
if ( weapon == currentweapon || self.loadout.weapons[index]["alt_name"] == currentweapon ) if ( weapon == currentweapon || self.loadout.weapons[index]["alt_name"] == currentweapon )
self.loadout.current_weapon = index; self.loadout.current_weapon = index;
} }
self.loadout.equipment = self get_player_equipment(); self.loadout.equipment = self get_player_equipment();
if ( isdefined( self.loadout.equipment ) ) if ( isdefined( self.loadout.equipment ) )
self equipment_take( self.loadout.equipment ); self equipment_take( self.loadout.equipment );
self.loadout save_weapons_for_chugabud( self ); self.loadout save_weapons_for_chugabud( self );
if ( self hasweapon( "claymore_zm" ) ) if ( self hasweapon( "claymore_zm" ) )
{ {
self.loadout.hasclaymore = 1; self.loadout.hasclaymore = 1;
self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" );
} }
self.loadout.perks = chugabud_save_perks( self ); self.loadout.perks = chugabud_save_perks( self );
self chugabud_save_grenades(); self chugabud_save_grenades();
if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" ); self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" );
} }
chugabud_save_perks( ent ) chugabud_save_perks( ent )
{ {
perk_array = ent get_perk_array( 1 ); perk_array = ent get_perk_array( 1 );
foreach ( perk in perk_array ) foreach ( perk in perk_array )
{ {
if ( perk == "specialty_additionalprimaryweapon" ) if ( perk == "specialty_additionalprimaryweapon" )
{ {
ent maps\mp\zombies\_zm::take_additionalprimaryweapon(); ent maps\mp\zombies\_zm::take_additionalprimaryweapon();
} }
ent unsetperk( perk ); ent unsetperk( perk );
} }
return perk_array; return perk_array;
} }
chugabud_fake_death() chugabud_fake_death()
{ {
level notify( "fake_death" ); level notify( "fake_death" );
self notify( "fake_death" ); self notify( "fake_death" );
self takeallweapons(); self takeallweapons();
self allowstand( 0 ); self allowstand( 0 );
self allowcrouch( 0 ); self allowcrouch( 0 );
self allowprone( 1 ); self allowprone( 1 );
self setstance( "prone" ); self setstance( "prone" );
self.ignoreme = 1; self.ignoreme = 1;
self enableinvulnerability(); self enableinvulnerability();
if ( self is_jumping() ) if ( self is_jumping() )
{ {
while ( self is_jumping() ) while ( self is_jumping() )
wait 0.05; wait 0.05;
} }
self freezecontrols( 1 ); self freezecontrols( 1 );
} }
chugabud_fake_revive() chugabud_fake_revive()
{ {
level notify( "fake_revive" ); level notify( "fake_revive" );
self notify( "fake_revive" ); self notify( "fake_revive" );
playsoundatposition( "evt_ww_disappear", self.origin ); playsoundatposition( "evt_ww_disappear", self.origin );
playfx( level._effect["chugabud_revive_fx"], self.origin ); playfx( level._effect["chugabud_revive_fx"], self.origin );
spawnpoint = chugabud_get_spawnpoint(); spawnpoint = chugabud_get_spawnpoint();
if ( isdefined( level._chugabud_post_respawn_override_func ) ) if ( isdefined( level._chugabud_post_respawn_override_func ) )
self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin ); self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin );
if ( isdefined( level.chugabud_force_corpse_position ) ) if ( isdefined( level.chugabud_force_corpse_position ) )
{ {
if ( isdefined( self.e_chugabud_corpse ) ) if ( isdefined( self.e_chugabud_corpse ) )
self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position ); self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position );
level.chugabud_force_corpse_position = undefined; level.chugabud_force_corpse_position = undefined;
} }
if ( isdefined( level.chugabud_force_player_position ) ) if ( isdefined( level.chugabud_force_player_position ) )
{ {
spawnpoint.origin = level.chugabud_force_player_position; spawnpoint.origin = level.chugabud_force_player_position;
level.chugabud_force_player_position = undefined; level.chugabud_force_player_position = undefined;
} }
self allowstand( 1 ); self allowstand( 1 );
self allowcrouch( 1 ); self allowcrouch( 1 );
self allowprone( 1 ); self allowprone( 1 );
self setstance( "stand" ); self setstance( "stand" );
self chugabud_give_loadout(); self chugabud_give_loadout();
self seteverhadweaponall( 1 ); self seteverhadweaponall( 1 );
self.score = self.loadout.score; self.score = self.loadout.score;
self.pers["score"] = self.loadout.score; self.pers["score"] = self.loadout.score;
self setorigin( spawnpoint.origin ); self setorigin( spawnpoint.origin );
self setplayerangles( spawnpoint.angles ); self setplayerangles( spawnpoint.angles );
playsoundatposition( "evt_ww_appear", spawnpoint.origin ); playsoundatposition( "evt_ww_appear", spawnpoint.origin );
playfx( level._effect["chugabud_revive_fx"], spawnpoint.origin ); playfx( level._effect["chugabud_revive_fx"], spawnpoint.origin );
wait 0.5; wait 0.5;
self freezecontrols( 0 ); self freezecontrols( 0 );
wait 0.5; wait 0.5;
self.ignoreme = 0; self.ignoreme = 0;
wait 1; wait 1;
self disableinvulnerability(); self disableinvulnerability();
} }
chugabud_give_loadout() chugabud_give_loadout()
{ {
self takeallweapons(); self takeallweapons();
loadout = self.loadout; loadout = self.loadout;
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
if ( loadout.weapons.size > 1 || primaries.size > 1 ) if ( loadout.weapons.size > 1 || primaries.size > 1 )
{ {
foreach ( weapon in primaries ) foreach ( weapon in primaries )
self takeweapon( weapon ); self takeweapon( weapon );
} }
weapons_given = 0; weapons_given = 0;
for ( i = 0; i < loadout.weapons.size; i++ ) for ( i = 0; i < loadout.weapons.size; i++ )
{ {
if ( !isdefined( loadout.weapons[i] ) ) if ( !isdefined( loadout.weapons[i] ) )
continue; continue;
if ( loadout.weapons[i]["name"] == "none" ) if ( loadout.weapons[i]["name"] == "none" )
continue; continue;
self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] ); self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] );
weapons_given++; weapons_given++;
if (weapons_given >= 2) if (weapons_given >= 2)
{ {
break; break;
} }
} }
if ( loadout.current_weapon >= 0 && isdefined( loadout.weapons[loadout.current_weapon]["name"] ) ) if ( loadout.current_weapon >= 0 && isdefined( loadout.weapons[loadout.current_weapon]["name"] ) )
self switchtoweapon( loadout.weapons[loadout.current_weapon]["name"] ); self switchtoweapon( loadout.weapons[loadout.current_weapon]["name"] );
self giveweapon( "knife_zm" ); self giveweapon( "knife_zm" );
self.do_not_display_equipment_pickup_hint = 1; self.do_not_display_equipment_pickup_hint = 1;
self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment ); self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment );
self.do_not_display_equipment_pickup_hint = undefined; self.do_not_display_equipment_pickup_hint = undefined;
loadout restore_weapons_for_chugabud( self ); loadout restore_weapons_for_chugabud( self );
self chugabud_restore_claymore(); self chugabud_restore_claymore();
self.score = loadout.score; self.score = loadout.score;
self.pers["score"] = loadout.score; self.pers["score"] = loadout.score;
self chugabud_restore_grenades(); self chugabud_restore_grenades();
if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() ) if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
{ {
if ( loadout.zombie_cymbal_monkey_count ) if ( loadout.zombie_cymbal_monkey_count )
{ {
self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey();
self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count ); self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count );
} }
} }
self.loadout.weapons = undefined; self.loadout.weapons = undefined;
} }
chugabud_give_perks() chugabud_give_perks()
@ -284,137 +284,137 @@ chugabud_give_perks()
loadout = self.loadout; loadout = self.loadout;
if ( isdefined( loadout.perks ) && loadout.perks.size > 0 ) if ( isdefined( loadout.perks ) && loadout.perks.size > 0 )
{ {
for ( i = 0; i < loadout.perks.size; i++ ) for ( i = 0; i < loadout.perks.size; i++ )
{ {
if ( self hasperk( loadout.perks[i] ) ) if ( self hasperk( loadout.perks[i] ) )
continue; continue;
if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) ) if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) )
level.solo_game_free_player_quickrevive = 1; level.solo_game_free_player_quickrevive = 1;
if ( loadout.perks[i] == "specialty_finalstand" ) if ( loadout.perks[i] == "specialty_finalstand" )
continue; continue;
maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] ); maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] );
} }
} }
self.loadout.perks = undefined; self.loadout.perks = undefined;
} }
chugabud_spawn_corpse() chugabud_spawn_corpse()
{ {
corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader ); corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader );
corpse.angles = self.angles; corpse.angles = self.angles;
corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" ); corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" );
corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" ); corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" );
corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn(); corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn();
return corpse; return corpse;
} }
chugabud_bleed_timeout_hud_create( delay ) chugabud_bleed_timeout_hud_create( delay )
{ {
hud = self createbar((0.25, 0.25, 1), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight); hud = self createbar((0.25, 0.25, 1), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight);
hud setpoint("CENTER", undefined, level.secondaryprogressbarx, -2.25 * level.secondaryprogressbary); hud setpoint("CENTER", undefined, level.secondaryprogressbarx, -2.25 * level.secondaryprogressbary);
hud.hidewheninmenu = 1; hud.hidewheninmenu = 1;
hud.bar.hidewheninmenu = 1; hud.bar.hidewheninmenu = 1;
hud.barframe.hidewheninmenu = 1; hud.barframe.hidewheninmenu = 1;
hud.foreground = 1; hud.foreground = 1;
hud.bar.foreground = 1; hud.bar.foreground = 1;
hud.barframe.foreground = 1; hud.barframe.foreground = 1;
hud.sort = 1; hud.sort = 1;
hud.bar.sort = 2; hud.bar.sort = 2;
hud.barframe.sort = 3; hud.barframe.sort = 3;
hud.barframe destroy(); hud.barframe destroy();
hud thread scripts\zm\_zm_reimagined::destroy_on_intermission(); hud thread scripts\zm\_zm_reimagined::destroy_on_intermission();
hud updatebar(1); hud updatebar(1);
hud.bar scaleovertime(delay, 1, hud.height); hud.bar scaleovertime(delay, 1, hud.height);
return hud; return hud;
} }
chugabud_corpse_revive_icon( player ) chugabud_corpse_revive_icon( player )
{ {
self endon( "death" ); self endon( "death" );
height_offset = 30; height_offset = 30;
index = player.clientid; index = player.clientid;
self.revive_waypoint_origin = spawn( "script_model", self.origin + (0, 0, height_offset) ); self.revive_waypoint_origin = spawn( "script_model", self.origin + (0, 0, height_offset) );
self.revive_waypoint_origin setmodel( "tag_origin" ); self.revive_waypoint_origin setmodel( "tag_origin" );
self.revive_waypoint_origin linkto( self ); self.revive_waypoint_origin linkto( self );
hud_elem = newhudelem(); hud_elem = newhudelem();
self.revive_hud_elem = hud_elem; self.revive_hud_elem = hud_elem;
hud_elem.alpha = 1; hud_elem.alpha = 1;
hud_elem.archived = 1; hud_elem.archived = 1;
hud_elem.hidewheninmenu = 1; hud_elem.hidewheninmenu = 1;
hud_elem.immunetodemogamehudsettings = 1; hud_elem.immunetodemogamehudsettings = 1;
hud_elem setwaypoint( 1, "specialty_chugabud_zombies" ); hud_elem setwaypoint( 1, "specialty_chugabud_zombies" );
hud_elem settargetent( self.revive_waypoint_origin ); hud_elem settargetent( self.revive_waypoint_origin );
} }
chugabud_corpse_cleanup( corpse, was_revived ) chugabud_corpse_cleanup( corpse, was_revived )
{ {
self notify( "chugabud_effects_cleanup" ); self notify( "chugabud_effects_cleanup" );
if ( was_revived ) if ( was_revived )
{ {
playsoundatposition( "evt_ww_appear", corpse.origin ); playsoundatposition( "evt_ww_appear", corpse.origin );
playfx( level._effect["chugabud_revive_fx"], corpse.origin ); playfx( level._effect["chugabud_revive_fx"], corpse.origin );
} }
else else
{ {
playsoundatposition( "evt_ww_disappear", corpse.origin ); playsoundatposition( "evt_ww_disappear", corpse.origin );
playfx( level._effect["chugabud_bleedout_fx"], corpse.origin ); playfx( level._effect["chugabud_bleedout_fx"], corpse.origin );
self notify( "chugabud_bleedout" ); self notify( "chugabud_bleedout" );
} }
if ( isdefined( corpse.revivetrigger ) ) if ( isdefined( corpse.revivetrigger ) )
{ {
corpse notify( "stop_revive_trigger" ); corpse notify( "stop_revive_trigger" );
corpse.revivetrigger delete(); corpse.revivetrigger delete();
corpse.revivetrigger = undefined; corpse.revivetrigger = undefined;
} }
if ( isdefined( corpse.revive_hud_elem ) ) if ( isdefined( corpse.revive_hud_elem ) )
{ {
corpse.revive_hud_elem destroy(); corpse.revive_hud_elem destroy();
corpse.revive_hud_elem = undefined; corpse.revive_hud_elem = undefined;
} }
if ( isdefined( corpse.revive_waypoint_origin ) ) if ( isdefined( corpse.revive_waypoint_origin ) )
{ {
corpse.revive_waypoint_origin delete(); corpse.revive_waypoint_origin delete();
corpse.revive_waypoint_origin = undefined; corpse.revive_waypoint_origin = undefined;
} }
if ( isdefined( self.chugabud_bleed_timeout_hud ) ) if ( isdefined( self.chugabud_bleed_timeout_hud ) )
{ {
self.chugabud_bleed_timeout_hud destroy(); self.chugabud_bleed_timeout_hud destroy();
self.chugabud_bleed_timeout_hud.bar destroy(); self.chugabud_bleed_timeout_hud.bar destroy();
self.chugabud_bleed_timeout_hud.barframe destroy(); self.chugabud_bleed_timeout_hud.barframe destroy();
self.chugabud_bleed_timeout_hud = undefined; self.chugabud_bleed_timeout_hud = undefined;
} }
self.loadout = undefined; self.loadout = undefined;
wait 0.1; wait 0.1;
corpse delete(); corpse delete();
self.e_chugabud_corpse = undefined; self.e_chugabud_corpse = undefined;
if ( is_player_valid( self ) ) if ( is_player_valid( self ) )
{ {
self.statusicon = ""; self.statusicon = "";
} }
} }
chugabud_handle_multiple_instances( corpse ) chugabud_handle_multiple_instances( corpse )
{ {
corpse endon( "death" ); corpse endon( "death" );
self waittill( "chugabud_handle_multiple_instances" ); self waittill( "chugabud_handle_multiple_instances" );
self thread chugabud_laststand_wait( corpse ); self thread chugabud_laststand_wait( corpse );
self chugabud_corpse_cleanup( corpse, 0 ); self chugabud_corpse_cleanup( corpse, 0 );
} }
chugabud_laststand_wait( corpse ) chugabud_laststand_wait( corpse )
@ -428,47 +428,47 @@ chugabud_corpse_cleanup_on_disconnect( player )
{ {
self endon( "death" ); self endon( "death" );
player waittill( "disconnect" ); player waittill( "disconnect" );
player chugabud_corpse_cleanup( self, 0 ); player chugabud_corpse_cleanup( self, 0 );
} }
chugabud_laststand_cleanup( corpse, str_notify ) chugabud_laststand_cleanup( corpse, str_notify )
{ {
if ( isdefined( str_notify ) ) if ( isdefined( str_notify ) )
self waittill( str_notify ); self waittill( str_notify );
self setstance( "stand" ); self setstance( "stand" );
self thread chugabud_leave_freeze(); self thread chugabud_leave_freeze();
self thread chugabud_revive_invincible(); self thread chugabud_revive_invincible();
self chugabud_give_perks(); self chugabud_give_perks();
self chugabud_corpse_cleanup( corpse, 1 ); self chugabud_corpse_cleanup( corpse, 1 );
} }
chugabud_leave_freeze() chugabud_leave_freeze()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "end_game" ); level endon( "end_game" );
self freezecontrols( 1 ); self freezecontrols( 1 );
wait 0.5; wait 0.5;
if ( !is_true( self.hostmigrationcontrolsfrozen ) ) if ( !is_true( self.hostmigrationcontrolsfrozen ) )
self freezecontrols( 0 ); self freezecontrols( 0 );
} }
chugabud_revive_invincible() chugabud_revive_invincible()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
level endon( "end_game" ); level endon( "end_game" );
self.health = self.maxhealth; self.health = self.maxhealth;
self enableinvulnerability(); self enableinvulnerability();
wait 2; wait 2;
self disableinvulnerability(); self disableinvulnerability();
} }
chugabud_bleed_timeout( delay, corpse ) chugabud_bleed_timeout( delay, corpse )
@ -477,7 +477,7 @@ chugabud_bleed_timeout( delay, corpse )
self endon( "disconnect" ); self endon( "disconnect" );
corpse endon( "death" ); corpse endon( "death" );
self.chugabud_bleed_timeout_hud = self chugabud_bleed_timeout_hud_create( delay ); self.chugabud_bleed_timeout_hud = self chugabud_bleed_timeout_hud_create( delay );
wait delay; wait delay;

View File

@ -5,55 +5,55 @@
spawn_player_clone( player, origin = player.origin, forceweapon, forcemodel ) spawn_player_clone( player, origin = player.origin, forceweapon, forcemodel )
{ {
primaryweapons = player getweaponslistprimaries(); primaryweapons = player getweaponslistprimaries();
if ( isdefined( forceweapon ) ) if ( isdefined( forceweapon ) )
weapon = forceweapon; weapon = forceweapon;
else if ( primaryweapons.size ) else if ( primaryweapons.size )
weapon = primaryweapons[0]; weapon = primaryweapons[0];
else else
weapon = player getcurrentweapon(); weapon = player getcurrentweapon();
weaponmodel = getweaponmodel( weapon ); weaponmodel = getweaponmodel( weapon );
spawner = getent( "fake_player_spawner", "targetname" ); spawner = getent( "fake_player_spawner", "targetname" );
if ( isdefined( spawner ) ) if ( isdefined( spawner ) )
{ {
while ( getfreeactorcount() < 1 ) while ( getfreeactorcount() < 1 )
{ {
wait 0.05; wait 0.05;
} }
clone = spawner spawnactor(); clone = spawner spawnactor();
clone.origin = origin; clone.origin = origin;
clone.isactor = 1; clone.isactor = 1;
} }
else else
{ {
clone = spawn( "script_model", origin ); clone = spawn( "script_model", origin );
clone.isactor = 0; clone.isactor = 0;
} }
if ( isdefined( forcemodel ) ) if ( isdefined( forcemodel ) )
clone setmodel( forcemodel ); clone setmodel( forcemodel );
else else
{ {
clone setmodel( self.model ); clone setmodel( self.model );
if ( isdefined( player.headmodel ) ) if ( isdefined( player.headmodel ) )
{ {
clone.headmodel = player.headmodel; clone.headmodel = player.headmodel;
clone attach( clone.headmodel, "", 1 ); clone attach( clone.headmodel, "", 1 );
} }
} }
if ( weaponmodel != "" && weaponmodel != "none" ) if ( weaponmodel != "" && weaponmodel != "none" )
clone attach( weaponmodel, "tag_weapon_right" ); clone attach( weaponmodel, "tag_weapon_right" );
clone.team = player.team; clone.team = player.team;
clone.is_inert = 1; clone.is_inert = 1;
clone.zombie_move_speed = "walk"; clone.zombie_move_speed = "walk";
clone.script_noteworthy = "corpse_clone"; clone.script_noteworthy = "corpse_clone";
clone.actor_damage_func = ::clone_damage_func; clone.actor_damage_func = ::clone_damage_func;
return clone; return clone;
} }

View File

@ -12,125 +12,125 @@
choose_open_craftable( player ) choose_open_craftable( player )
{ {
self endon( "kill_choose_open_craftable" ); self endon( "kill_choose_open_craftable" );
n_playernum = player getentitynumber(); n_playernum = player getentitynumber();
self.b_open_craftable_checking_input = 1; self.b_open_craftable_checking_input = 1;
b_got_input = 1; b_got_input = 1;
hinttexthudelem = newclienthudelem( player ); hinttexthudelem = newclienthudelem( player );
hinttexthudelem.alignx = "center"; hinttexthudelem.alignx = "center";
hinttexthudelem.aligny = "middle"; hinttexthudelem.aligny = "middle";
hinttexthudelem.horzalign = "center"; hinttexthudelem.horzalign = "center";
hinttexthudelem.vertalign = "bottom"; hinttexthudelem.vertalign = "bottom";
hinttexthudelem.y = -100; hinttexthudelem.y = -100;
if ( player issplitscreen() ) if ( player issplitscreen() )
hinttexthudelem.y = -50; hinttexthudelem.y = -50;
hinttexthudelem.foreground = 1; hinttexthudelem.foreground = 1;
hinttexthudelem.hidewheninmenu = 1; hinttexthudelem.hidewheninmenu = 1;
hinttexthudelem.font = "default"; hinttexthudelem.font = "default";
hinttexthudelem.fontscale = 1.0; hinttexthudelem.fontscale = 1.0;
hinttexthudelem.alpha = 1; hinttexthudelem.alpha = 1;
hinttexthudelem.color = ( 1, 1, 1 ); hinttexthudelem.color = ( 1, 1, 1 );
hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" );
if ( !isdefined( self.opencraftablehudelem ) ) if ( !isdefined( self.opencraftablehudelem ) )
self.opencraftablehudelem = []; self.opencraftablehudelem = [];
self.opencraftablehudelem[n_playernum] = hinttexthudelem; self.opencraftablehudelem[n_playernum] = hinttexthudelem;
if ( self.n_open_craftable_choice < 0 ) if ( self.n_open_craftable_choice < 0 )
{ {
self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1;
self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname;
self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string;
self.playertrigger[n_playernum] sethintstring( self.hint_string ); self.playertrigger[n_playernum] sethintstring( self.hint_string );
} }
while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted ) while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted )
{ {
if (!player isTouching(self.playertrigger[n_playernum]) || !player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) || player isSprinting() || player isThrowingGrenade()) if (!player isTouching(self.playertrigger[n_playernum]) || !player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) || player isSprinting() || player isThrowingGrenade())
{ {
self.opencraftablehudelem[n_playernum].alpha = 0; self.opencraftablehudelem[n_playernum].alpha = 0;
wait 0.05; wait 0.05;
continue; continue;
} }
self.opencraftablehudelem[n_playernum].alpha = 1; self.opencraftablehudelem[n_playernum].alpha = 1;
if ( player actionslotonebuttonpressed() ) if ( player actionslotonebuttonpressed() )
{ {
self.n_open_craftable_choice++; self.n_open_craftable_choice++;
b_got_input = 1; b_got_input = 1;
} }
else if ( player actionslottwobuttonpressed() ) else if ( player actionslottwobuttonpressed() )
{ {
self.n_open_craftable_choice--; self.n_open_craftable_choice--;
b_got_input = 1; b_got_input = 1;
} }
if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size )
self.n_open_craftable_choice = 0; self.n_open_craftable_choice = 0;
else if ( self.n_open_craftable_choice < 0 ) else if ( self.n_open_craftable_choice < 0 )
self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1;
if ( b_got_input ) if ( b_got_input )
{ {
self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname;
self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string;
self.playertrigger[n_playernum] sethintstring( self.hint_string ); self.playertrigger[n_playernum] sethintstring( self.hint_string );
b_got_input = 0; b_got_input = 0;
} }
wait 0.05; wait 0.05;
} }
self.b_open_craftable_checking_input = 0; self.b_open_craftable_checking_input = 0;
self.opencraftablehudelem[n_playernum] destroy(); self.opencraftablehudelem[n_playernum] destroy();
self.opencraftablehudelem[n_playernum] = undefined; self.opencraftablehudelem[n_playernum] = undefined;
} }
craftable_use_hold_think_internal( player ) craftable_use_hold_think_internal( player )
{ {
wait 0.01; wait 0.01;
if ( !isdefined( self ) ) if ( !isdefined( self ) )
{ {
self notify( "craft_failed" ); self notify( "craft_failed" );
if ( isdefined( player.craftableaudio ) ) if ( isdefined( player.craftableaudio ) )
{ {
player.craftableaudio delete(); player.craftableaudio delete();
player.craftableaudio = undefined; player.craftableaudio = undefined;
} }
return; return;
} }
if ( !isdefined( self.usetime ) ) if ( !isdefined( self.usetime ) )
self.usetime = int( 3000 ); self.usetime = int( 3000 );
self.craft_time = self.usetime; self.craft_time = self.usetime;
self.craft_start_time = gettime(); self.craft_start_time = gettime();
craft_time = self.craft_time; craft_time = self.craft_time;
craft_start_time = self.craft_start_time; craft_start_time = self.craft_start_time;
player disable_player_move_states( 1 ); player disable_player_move_states( 1 );
player increment_is_drinking(); player increment_is_drinking();
orgweapon = player getcurrentweapon(); orgweapon = player getcurrentweapon();
player giveweapon( "zombie_builder_zm" ); player giveweapon( "zombie_builder_zm" );
player switchtoweapon( "zombie_builder_zm" ); player switchtoweapon( "zombie_builder_zm" );
self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece );
player thread player_progress_bar( craft_start_time, craft_time ); player thread player_progress_bar( craft_start_time, craft_time );
if ( isdefined( level.craftable_craft_custom_func ) ) if ( isdefined( level.craftable_craft_custom_func ) )
player thread [[ level.craftable_craft_custom_func ]]( self.stub ); player thread [[ level.craftable_craft_custom_func ]]( self.stub );
while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time ) while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time )
wait 0.05; wait 0.05;
player notify( "craftable_progress_end" ); player notify( "craftable_progress_end" );
if ( player hasWeapon( orgweapon ) ) if ( player hasWeapon( orgweapon ) )
{ {
player switchToWeapon( orgweapon ); player switchToWeapon( orgweapon );
} }
@ -139,73 +139,73 @@ craftable_use_hold_think_internal( player )
player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon );
} }
player takeweapon( "zombie_builder_zm" ); player takeweapon( "zombie_builder_zm" );
if ( isdefined( player.is_drinking ) && player.is_drinking ) if ( isdefined( player.is_drinking ) && player.is_drinking )
player decrement_is_drinking(); player decrement_is_drinking();
player enable_player_move_states(); player enable_player_move_states();
if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time ) if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time )
{ {
self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece );
self notify( "craft_succeed" ); self notify( "craft_succeed" );
} }
else else
{ {
if ( isdefined( player.craftableaudio ) ) if ( isdefined( player.craftableaudio ) )
{ {
player.craftableaudio delete(); player.craftableaudio delete();
player.craftableaudio = undefined; player.craftableaudio = undefined;
} }
self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece );
self notify( "craft_failed" ); self notify( "craft_failed" );
} }
} }
player_progress_bar_update( start_time, craft_time ) player_progress_bar_update( start_time, craft_time )
{ {
self endon( "entering_last_stand" ); self endon( "entering_last_stand" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "craftable_progress_end" ); self endon( "craftable_progress_end" );
self.usebar updatebar( 0.01, 1000 / craft_time ); self.usebar updatebar( 0.01, 1000 / craft_time );
while ( isdefined( self ) && gettime() - start_time < craft_time ) while ( isdefined( self ) && gettime() - start_time < craft_time )
{ {
wait 0.05; wait 0.05;
} }
} }
update_open_table_status() update_open_table_status()
{ {
thread update_open_table_status_actual(); thread update_open_table_status_actual();
} }
update_open_table_status_actual() update_open_table_status_actual()
{ {
wait 0.05; // wait for .crafted to be set wait 0.05; // wait for .crafted to be set
b_open_craftables_remaining = 0; b_open_craftables_remaining = 0;
foreach ( uts_craftable in level.a_uts_craftables ) foreach ( uts_craftable in level.a_uts_craftables )
{ {
if ( is_true( uts_craftable.craftablestub.is_open_table ) && !is_true( uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) if ( is_true( uts_craftable.craftablestub.is_open_table ) && !is_true( uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() )
{ {
b_open_craftables_remaining++; b_open_craftables_remaining++;
} }
} }
if ( !b_open_craftables_remaining ) if ( !b_open_craftables_remaining )
{ {
foreach ( uts_craftable in level.a_uts_craftables ) foreach ( uts_craftable in level.a_uts_craftables )
{ {
if ( uts_craftable.craftablespawn.craftable_name == "open_table" ) if ( uts_craftable.craftablespawn.craftable_name == "open_table" )
{ {
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable );
} }
} }
} }
} }

View File

@ -17,393 +17,393 @@
init_anim_slice_times() init_anim_slice_times()
{ {
level.headchopper_slice_times = []; level.headchopper_slice_times = [];
slice_times = getnotetracktimes( %o_zmb_chopper_slice_slow, "slice" ); slice_times = getnotetracktimes( %o_zmb_chopper_slice_slow, "slice" );
retract_times = getnotetracktimes( %o_zmb_chopper_slice_slow, "retract" ); retract_times = getnotetracktimes( %o_zmb_chopper_slice_slow, "retract" );
animlength = getanimlength( %o_zmb_chopper_slice_slow ); animlength = getanimlength( %o_zmb_chopper_slice_slow );
i = 0; i = 0;
foreach ( frac in slice_times ) foreach ( frac in slice_times )
{ {
if ( i != 6 ) if ( i != 6 )
{ {
i++; i++;
continue; continue;
} }
level.headchopper_slice_times[level.headchopper_slice_times.size] = animlength * frac; level.headchopper_slice_times[level.headchopper_slice_times.size] = animlength * frac;
i++; i++;
} }
i = 0; i = 0;
foreach ( frac in retract_times ) foreach ( frac in retract_times )
{ {
if ( i == 0 || i == 6 ) if ( i == 0 || i == 6 )
{ {
i++; i++;
continue; continue;
} }
level.headchopper_slice_times[level.headchopper_slice_times.size] = animlength * frac; level.headchopper_slice_times[level.headchopper_slice_times.size] = animlength * frac;
i++; i++;
} }
} }
headchopperthink( weapon, electricradius, armed ) headchopperthink( weapon, electricradius, armed )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_headchopper_zm_taken" ); self endon( "equip_headchopper_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
radiussquared = electricradius * electricradius; radiussquared = electricradius * electricradius;
traceposition = weapon getcentroid() + anglestoforward( flat_angle( weapon.angles ) ) * -15; traceposition = weapon getcentroid() + anglestoforward( flat_angle( weapon.angles ) ) * -15;
trace = bullettrace( traceposition, traceposition + vectorscale( ( 0, 0, -1 ), 48.0 ), 1, weapon ); trace = bullettrace( traceposition, traceposition + vectorscale( ( 0, 0, -1 ), 48.0 ), 1, weapon );
trigger_origin = weapon gettagorigin( "TAG_SAW" ); trigger_origin = weapon gettagorigin( "TAG_SAW" );
trigger = spawn( "trigger_box", trigger_origin, 1, 16, 128, 64 ); trigger = spawn( "trigger_box", trigger_origin, 1, 16, 128, 64 );
trigger.origin += anglestoup( weapon.angles ) * 32.0; trigger.origin += anglestoup( weapon.angles ) * 32.0;
trigger.angles = weapon.angles; trigger.angles = weapon.angles;
trigger enablelinkto(); trigger enablelinkto();
trigger linkto( weapon ); trigger linkto( weapon );
weapon.trigger = trigger; weapon.trigger = trigger;
weapon thread headchopperthinkcleanup( trigger ); weapon thread headchopperthinkcleanup( trigger );
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
direction_vector = vectorscale( direction_forward, 1024 ); direction_vector = vectorscale( direction_forward, 1024 );
direction_origin = weapon.origin + direction_vector; direction_origin = weapon.origin + direction_vector;
home_angles = weapon.angles; home_angles = weapon.angles;
weapon.is_armed = 0; weapon.is_armed = 0;
self thread headchopper_fx( weapon ); self thread headchopper_fx( weapon );
self thread headchopper_animate( weapon, armed ); self thread headchopper_animate( weapon, armed );
while ( !( isdefined( weapon.is_armed ) && weapon.is_armed ) ) while ( !( isdefined( weapon.is_armed ) && weapon.is_armed ) )
wait 0.5; wait 0.5;
weapon.chop_targets = []; weapon.chop_targets = [];
self thread targeting_thread( weapon, trigger ); self thread targeting_thread( weapon, trigger );
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
wait_for_targets( weapon ); wait_for_targets( weapon );
if ( isdefined( weapon.chop_targets ) && weapon.chop_targets.size > 0 ) if ( isdefined( weapon.chop_targets ) && weapon.chop_targets.size > 0 )
{ {
is_slicing = 1; is_slicing = 1;
slice_count = 0; slice_count = 0;
weapon.headchopper_kills++; weapon.headchopper_kills++;
while ( isdefined( is_slicing ) && is_slicing ) while ( isdefined( is_slicing ) && is_slicing )
{ {
weapon notify( "chop", 1 ); weapon notify( "chop", 1 );
weapon.is_armed = 0; weapon.is_armed = 0;
weapon.zombies_only = 1; weapon.zombies_only = 1;
self headchopper_add_chop_ents( weapon, trigger ); self headchopper_add_chop_ents( weapon, trigger );
foreach ( ent in weapon.chop_targets ) foreach ( ent in weapon.chop_targets )
self thread headchopperattack( weapon, ent ); self thread headchopperattack( weapon, ent );
weapon.chop_targets = []; weapon.chop_targets = [];
weapon waittill_any( "slicing", "end" ); weapon waittill_any( "slicing", "end" );
slice_count++; slice_count++;
is_slicing = weapon.is_slicing; is_slicing = weapon.is_slicing;
} }
weapon notify( "slice_done" ); weapon notify( "slice_done" );
while ( !( isdefined( weapon.is_armed ) && weapon.is_armed ) ) while ( !( isdefined( weapon.is_armed ) && weapon.is_armed ) )
wait 0.05; wait 0.05;
if ( weapon.headchopper_kills >= 10 ) if ( weapon.headchopper_kills >= 10 )
{ {
self thread headchopper_expired( weapon ); self thread headchopper_expired( weapon );
return; return;
} }
} }
else else
wait 0.1; wait 0.1;
} }
} }
targeting_thread( weapon, trigger ) targeting_thread( weapon, trigger )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_headchopper_zm_taken" ); self endon( "equip_headchopper_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
weapon.zombies_only = 1; weapon.zombies_only = 1;
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
if ( weapon.is_armed || isdefined( weapon.is_slicing ) && weapon.is_slicing ) if ( weapon.is_armed || isdefined( weapon.is_slicing ) && weapon.is_slicing )
{ {
if ( isdefined( weapon.is_slicing ) && weapon.is_slicing ) if ( isdefined( weapon.is_slicing ) && weapon.is_slicing )
weapon waittill( "slice_done" ); weapon waittill( "slice_done" );
self headchopper_add_chop_ents( weapon, trigger ); self headchopper_add_chop_ents( weapon, trigger );
if ( !weapon.zombies_only ) if ( !weapon.zombies_only )
weapon notify( "hi_priority_target" ); weapon notify( "hi_priority_target" );
} }
wait 0.05; wait 0.05;
} }
} }
headchopper_add_chop_ents( weapon, trigger ) headchopper_add_chop_ents( weapon, trigger )
{ {
zombies = getaiarray( level.zombie_team ); zombies = getaiarray( level.zombie_team );
foreach ( zombie in zombies ) foreach ( zombie in zombies )
{ {
if ( !isdefined( zombie ) || !isalive( zombie ) ) if ( !isdefined( zombie ) || !isalive( zombie ) )
continue; continue;
if ( isdefined( zombie.ignore_headchopper ) && zombie.ignore_headchopper ) if ( isdefined( zombie.ignore_headchopper ) && zombie.ignore_headchopper )
continue; continue;
if ( zombie istouching( trigger ) ) if ( zombie istouching( trigger ) )
weapon headchopper_add_chop_ent( zombie ); weapon headchopper_add_chop_ent( zombie );
} }
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) && player istouching( trigger ) ) if ( is_player_valid( player ) && player istouching( trigger ) )
{ {
weapon headchopper_add_chop_ent( player ); weapon headchopper_add_chop_ent( player );
weapon.zombies_only = 0; weapon.zombies_only = 0;
} }
} }
} }
wait_for_targets( weapon ) wait_for_targets( weapon )
{ {
weapon endon( "hi_priority_target" ); weapon endon( "hi_priority_target" );
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
if ( isdefined( weapon.chop_targets ) && weapon.chop_targets.size > 0 ) if ( isdefined( weapon.chop_targets ) && weapon.chop_targets.size > 0 )
{ {
return; return;
} }
wait 0.05; wait 0.05;
} }
} }
headchopperattack( weapon, ent ) headchopperattack( weapon, ent )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_headchopper_zm_taken" ); self endon( "equip_headchopper_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
if ( !isdefined( ent ) || !isalive( ent ) ) if ( !isdefined( ent ) || !isalive( ent ) )
return; return;
eye_position = ent geteye(); eye_position = ent geteye();
head_position = eye_position[2] + 13; head_position = eye_position[2] + 13;
foot_position = ent.origin[2]; foot_position = ent.origin[2];
length_head_to_toe = abs( head_position - foot_position ); length_head_to_toe = abs( head_position - foot_position );
length_head_to_toe_25_percent = length_head_to_toe * 0.25; length_head_to_toe_25_percent = length_head_to_toe * 0.25;
is_headchop = weapon.origin[2] >= head_position - length_head_to_toe_25_percent; is_headchop = weapon.origin[2] >= head_position - length_head_to_toe_25_percent;
is_torsochop = weapon.origin[2] >= foot_position + length_head_to_toe_25_percent; is_torsochop = weapon.origin[2] >= foot_position + length_head_to_toe_25_percent;
is_footchop = abs( foot_position - weapon.origin[2] ) <= length_head_to_toe_25_percent; is_footchop = abs( foot_position - weapon.origin[2] ) <= length_head_to_toe_25_percent;
trace_point = undefined; trace_point = undefined;
if ( isdefined( is_headchop ) && is_headchop ) if ( isdefined( is_headchop ) && is_headchop )
trace_point = eye_position; trace_point = eye_position;
else if ( isdefined( is_torsochop ) && is_torsochop ) else if ( isdefined( is_torsochop ) && is_torsochop )
trace_point = ent.origin + ( 0, 0, length_head_to_toe_25_percent * 2 ); trace_point = ent.origin + ( 0, 0, length_head_to_toe_25_percent * 2 );
else else
trace_point = ent.origin + ( 0, 0, length_head_to_toe_25_percent ); trace_point = ent.origin + ( 0, 0, length_head_to_toe_25_percent );
fwdangles = anglestoup( weapon.angles ); fwdangles = anglestoup( weapon.angles );
tracefwd = bullettrace( weapon.origin + fwdangles * 5, trace_point, 0, weapon, 1, 1 ); tracefwd = bullettrace( weapon.origin + fwdangles * 5, trace_point, 0, weapon, 1, 1 );
if ( !isdefined( tracefwd ) || !isdefined( tracefwd["position"] ) || tracefwd["position"] != trace_point ) if ( !isdefined( tracefwd ) || !isdefined( tracefwd["position"] ) || tracefwd["position"] != trace_point )
return; return;
if ( isplayer( ent ) ) if ( isplayer( ent ) )
{ {
if ( isdefined( is_headchop ) && is_headchop ) if ( isdefined( is_headchop ) && is_headchop )
{ {
radiusdamage( ent.origin + (0, 0, 5), 10, 50, 50, weapon, "MOD_MELEE" ); radiusdamage( ent.origin + (0, 0, 5), 10, 50, 50, weapon, "MOD_MELEE" );
} }
else else
{ {
radiusdamage( ent.origin + (0, 0, 5), 10, 25, 25, weapon, "MOD_MELEE" ); radiusdamage( ent.origin + (0, 0, 5), 10, 25, 25, weapon, "MOD_MELEE" );
} }
} }
else else
{ {
if ( !( isdefined( is_headchop ) && is_headchop ) || !( isdefined( is_headchop ) && is_headchop ) && !( isdefined( ent.has_legs ) && ent.has_legs ) ) if ( !( isdefined( is_headchop ) && is_headchop ) || !( isdefined( is_headchop ) && is_headchop ) && !( isdefined( ent.has_legs ) && ent.has_legs ) )
{ {
headchop_height = 25; headchop_height = 25;
if ( !( isdefined( ent.has_legs ) && ent.has_legs ) ) if ( !( isdefined( ent.has_legs ) && ent.has_legs ) )
headchop_height = 35; headchop_height = 35;
is_headchop = abs( eye_position[2] - weapon.origin[2] ) <= headchop_height; is_headchop = abs( eye_position[2] - weapon.origin[2] ) <= headchop_height;
} }
if ( isdefined( is_headchop ) && is_headchop ) if ( isdefined( is_headchop ) && is_headchop )
{ {
if ( !( isdefined( ent.no_gib ) && ent.no_gib ) ) if ( !( isdefined( ent.no_gib ) && ent.no_gib ) )
ent maps\mp\zombies\_zm_spawner::zombie_head_gib(); ent maps\mp\zombies\_zm_spawner::zombie_head_gib();
ent dodamage( ent.health + 666, weapon.origin ); ent dodamage( ent.health + 666, weapon.origin );
ent.headchopper_last_damage_time = gettime(); ent.headchopper_last_damage_time = gettime();
ent playsound( "zmb_exp_jib_headchopper_zombie" ); ent playsound( "zmb_exp_jib_headchopper_zombie" );
self thread headchopper_kill_vo( ent ); self thread headchopper_kill_vo( ent );
} }
else if ( isdefined( is_torsochop ) && is_torsochop ) else if ( isdefined( is_torsochop ) && is_torsochop )
{ {
if ( ent.health <= 20 ) if ( ent.health <= 20 )
{ {
ent playsound( "zmb_exp_jib_headchopper_zombie" ); ent playsound( "zmb_exp_jib_headchopper_zombie" );
self thread headchopper_kill_vo( ent ); self thread headchopper_kill_vo( ent );
} }
ent dodamage( 20, weapon.origin ); ent dodamage( 20, weapon.origin );
ent.headchopper_last_damage_time = gettime(); ent.headchopper_last_damage_time = gettime();
} }
else if ( isdefined( is_footchop ) && is_footchop ) else if ( isdefined( is_footchop ) && is_footchop )
{ {
if ( !( isdefined( ent.no_gib ) && ent.no_gib ) ) if ( !( isdefined( ent.no_gib ) && ent.no_gib ) )
{ {
ent.a.gib_ref = "no_legs"; ent.a.gib_ref = "no_legs";
ent thread maps\mp\animscripts\zm_death::do_gib(); ent thread maps\mp\animscripts\zm_death::do_gib();
ent.has_legs = 0; ent.has_legs = 0;
ent allowedstances( "crouch" ); ent allowedstances( "crouch" );
ent setphysparams( 15, 0, 24 ); ent setphysparams( 15, 0, 24 );
ent allowpitchangle( 1 ); ent allowpitchangle( 1 );
ent setpitchorient(); ent setpitchorient();
ent thread maps\mp\animscripts\zm_run::needsdelayedupdate(); ent thread maps\mp\animscripts\zm_run::needsdelayedupdate();
if ( isdefined( ent.crawl_anim_override ) ) if ( isdefined( ent.crawl_anim_override ) )
ent [[ ent.crawl_anim_override ]](); ent [[ ent.crawl_anim_override ]]();
} }
if ( ent.health <= 10 ) if ( ent.health <= 10 )
{ {
ent playsound( "zmb_exp_jib_headchopper_zombie" ); ent playsound( "zmb_exp_jib_headchopper_zombie" );
self thread headchopper_kill_vo( ent ); self thread headchopper_kill_vo( ent );
} }
ent dodamage( 10, weapon.origin ); ent dodamage( 10, weapon.origin );
ent.headchopper_last_damage_time = gettime(); ent.headchopper_last_damage_time = gettime();
} }
} }
} }
setupwatchers() setupwatchers()
{ {
self waittill( "weapon_watchers_created" ); self waittill( "weapon_watchers_created" );
watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_headchopper" ); watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_headchopper" );
watcher.onspawnretrievetriggers = ::equipment_onspawnretrievableweaponobject; watcher.onspawnretrievetriggers = ::equipment_onspawnretrievableweaponobject;
} }
equipment_onspawnretrievableweaponobject( watcher, player ) equipment_onspawnretrievableweaponobject( watcher, player )
{ {
self.plant_parent = self; self.plant_parent = self;
iswallmount = isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount"; iswallmount = isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount";
if ( !isdefined( player.turret_placement ) || !player.turret_placement["result"] ) if ( !isdefined( player.turret_placement ) || !player.turret_placement["result"] )
{ {
if ( iswallmount || !getdvarint( "tu11_zombie_turret_placement_ignores_bodies" ) ) if ( iswallmount || !getdvarint( "tu11_zombie_turret_placement_ignores_bodies" ) )
{ {
self waittill( "stationary" ); self waittill( "stationary" );
waittillframeend; waittillframeend;
if ( iswallmount ) if ( iswallmount )
{ {
if ( isdefined( player.planted_wallmount_on_a_zombie ) && player.planted_wallmount_on_a_zombie ) if ( isdefined( player.planted_wallmount_on_a_zombie ) && player.planted_wallmount_on_a_zombie )
{ {
equip_name = self.name; equip_name = self.name;
equipment_disappear_fx( self.origin, undefined, self.angles ); equipment_disappear_fx( self.origin, undefined, self.angles );
self delete(); self delete();
player.do_not_display_equipment_pickup_hint = 1; player.do_not_display_equipment_pickup_hint = 1;
player maps\mp\zombies\_zm_equipment::equipment_take( equip_name ); player maps\mp\zombies\_zm_equipment::equipment_take( equip_name );
player maps\mp\zombies\_zm_equipment::equipment_give( equip_name ); player maps\mp\zombies\_zm_equipment::equipment_give( equip_name );
player.do_not_display_equipment_pickup_hint = undefined; player.do_not_display_equipment_pickup_hint = undefined;
player.planted_wallmount_on_a_zombie = undefined; player.planted_wallmount_on_a_zombie = undefined;
return; return;
} }
} }
} }
else else
{ {
self.plant_parent = player; self.plant_parent = player;
self.origin = player.origin; self.origin = player.origin;
self.angles = player.angles; self.angles = player.angles;
wait_network_frame(); wait_network_frame();
} }
} }
equipment = watcher.name + "_zm"; equipment = watcher.name + "_zm";
if ( isdefined( player.current_equipment ) && player.current_equipment == equipment ) if ( isdefined( player.current_equipment ) && player.current_equipment == equipment )
player equipment_to_deployed( equipment ); player equipment_to_deployed( equipment );
if ( isdefined( level.zombie_equipment[equipment].place_fn ) ) if ( isdefined( level.zombie_equipment[equipment].place_fn ) )
{ {
if ( isdefined( player.turret_placement ) && player.turret_placement["result"] ) if ( isdefined( player.turret_placement ) && player.turret_placement["result"] )
{ {
plant_origin = player.turret_placement["origin"]; plant_origin = player.turret_placement["origin"];
plant_angles = player.turret_placement["angles"]; plant_angles = player.turret_placement["angles"];
} }
else if ( isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount" ) else if ( isdefined( level.placeable_equipment_type[self.name] ) && level.placeable_equipment_type[self.name] == "wallmount" )
{ {
plant_origin = self.origin; plant_origin = self.origin;
plant_angles = self.angles; plant_angles = self.angles;
} }
else else
{ {
plant_origin = self.origin; plant_origin = self.origin;
plant_angles = self.angles; plant_angles = self.angles;
} }
if ( isdefined( level.check_force_deploy_origin ) ) if ( isdefined( level.check_force_deploy_origin ) )
{ {
if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) )
{ {
plant_origin = player.origin; plant_origin = player.origin;
plant_angles = player.angles; plant_angles = player.angles;
self.plant_parent = player; self.plant_parent = player;
} }
} }
else if ( isdefined( level.check_force_deploy_z ) ) else if ( isdefined( level.check_force_deploy_z ) )
{ {
if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) )
plant_origin = ( plant_origin[0], plant_origin[1], player.origin[2] + 10 ); plant_origin = ( plant_origin[0], plant_origin[1], player.origin[2] + 10 );
} }
if ( isdefined( iswallmount ) && iswallmount ) if ( isdefined( iswallmount ) && iswallmount )
self ghost(); self ghost();
replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( plant_origin, plant_angles ); replacement = player [[ level.zombie_equipment[equipment].place_fn ]]( plant_origin, plant_angles );
if ( isdefined( replacement ) ) if ( isdefined( replacement ) )
{ {
replacement.owner = player; replacement.owner = player;
replacement.original_owner = player; replacement.original_owner = player;
replacement.name = self.name; replacement.name = self.name;
player notify( "equipment_placed", replacement, self.name ); player notify( "equipment_placed", replacement, self.name );
if ( isdefined( level.equipment_planted ) ) if ( isdefined( level.equipment_planted ) )
player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent ); player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent );
player maps\mp\zombies\_zm_buildables::track_buildables_planted( self ); player maps\mp\zombies\_zm_buildables::track_buildables_planted( self );
} }
if ( isdefined( self ) ) if ( isdefined( self ) )
self delete(); self delete();
} }
} }

View File

@ -11,181 +11,181 @@
springpadthink( weapon, electricradius, armed ) springpadthink( weapon, electricradius, armed )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
radiussquared = electricradius * electricradius; radiussquared = electricradius * electricradius;
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15;
trigger.angles = weapon.angles; trigger.angles = weapon.angles;
trigger enablelinkto(); trigger enablelinkto();
trigger linkto( weapon ); trigger linkto( weapon );
weapon.trigger = trigger; weapon.trigger = trigger;
weapon thread springpadthinkcleanup( trigger ); weapon thread springpadthinkcleanup( trigger );
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
direction_vector = vectorscale( direction_forward, 1024 ); direction_vector = vectorscale( direction_forward, 1024 );
direction_origin = weapon.origin + direction_vector; direction_origin = weapon.origin + direction_vector;
home_angles = weapon.angles; home_angles = weapon.angles;
weapon.is_armed = 0; weapon.is_armed = 0;
self thread springpad_fx( weapon ); self thread springpad_fx( weapon );
self thread springpad_animate( weapon, armed ); self thread springpad_animate( weapon, armed );
weapon waittill( "armed" ); weapon waittill( "armed" );
weapon.is_armed = 1; weapon.is_armed = 1;
weapon.fling_targets = []; weapon.fling_targets = [];
self thread targeting_thread( weapon, trigger ); self thread targeting_thread( weapon, trigger );
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
wait_for_targets( weapon ); wait_for_targets( weapon );
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
{ {
weapon notify( "fling", weapon.zombies_only ); weapon notify( "fling", weapon.zombies_only );
weapon.is_armed = 0; weapon.is_armed = 0;
weapon.zombies_only = 1; weapon.zombies_only = 1;
weapon.springpad_kills++; weapon.springpad_kills++;
foreach ( ent in weapon.fling_targets ) foreach ( ent in weapon.fling_targets )
{ {
if ( isplayer( ent ) ) if ( isplayer( ent ) )
{ {
ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon );
continue; continue;
} }
if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) )
{ {
if ( !isdefined( self.num_zombies_flung ) ) if ( !isdefined( self.num_zombies_flung ) )
self.num_zombies_flung = 0; self.num_zombies_flung = 0;
self.num_zombies_flung++; self.num_zombies_flung++;
self notify( "zombie_flung" ); self notify( "zombie_flung" );
ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
continue; continue;
} }
if ( isdefined( ent ) ) if ( isdefined( ent ) )
{ {
if ( !isdefined( self.num_zombies_flung ) ) if ( !isdefined( self.num_zombies_flung ) )
self.num_zombies_flung = 0; self.num_zombies_flung = 0;
self.num_zombies_flung++; self.num_zombies_flung++;
self notify( "zombie_flung" ); self notify( "zombie_flung" );
if ( !isdefined( weapon.fling_scaler ) ) if ( !isdefined( weapon.fling_scaler ) )
weapon.fling_scaler = 1; weapon.fling_scaler = 1;
if ( isdefined( weapon.direction_vec_override ) ) if ( isdefined( weapon.direction_vec_override ) )
direction_vector = weapon.direction_vec_override; direction_vector = weapon.direction_vec_override;
ent dodamage( ent.health + 666, ent.origin ); ent dodamage( ent.health + 666, ent.origin );
ent startragdoll(); ent startragdoll();
ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
} }
} }
weapon.fling_targets = []; weapon.fling_targets = [];
weapon waittill( "armed" ); weapon waittill( "armed" );
weapon.is_armed = 1; weapon.is_armed = 1;
if ( weapon.springpad_kills >= 15 ) if ( weapon.springpad_kills >= 15 )
{ {
self thread springpad_expired( weapon ); self thread springpad_expired( weapon );
return; return;
} }
} }
else else
wait 0.1; wait 0.1;
} }
} }
player_fling( origin, angles, velocity, weapon ) player_fling( origin, angles, velocity, weapon )
{ {
torigin = ( self.origin[0], self.origin[1], origin[2] ); torigin = ( self.origin[0], self.origin[1], origin[2] );
aorigin = ( origin + torigin ) * 0.5; aorigin = ( origin + torigin ) * 0.5;
trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
self setorigin( aorigin ); self setorigin( aorigin );
wait_network_frame(); wait_network_frame();
self setvelocity( velocity ); self setvelocity( velocity );
} }
wait_for_targets( weapon ) wait_for_targets( weapon )
{ {
weapon endon( "hi_priority_target" ); weapon endon( "hi_priority_target" );
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
{ {
return; return;
} }
wait 0.05; wait 0.05;
} }
} }
#using_animtree("zombie_springpad"); #using_animtree("zombie_springpad");
springpad_animate( weapon, armed ) springpad_animate( weapon, armed )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
weapon useanimtree( #animtree ); weapon useanimtree( #animtree );
f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie );
r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset );
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
weapon thread springpad_audio(); weapon thread springpad_audio();
prearmed = 0; prearmed = 0;
if ( isdefined( armed ) && armed ) if ( isdefined( armed ) && armed )
prearmed = 1; prearmed = 1;
fast_reset = 0; fast_reset = 0;
while ( isdefined( weapon ) ) while ( isdefined( weapon ) )
{ {
if ( !prearmed ) if ( !prearmed )
{ {
if ( fast_reset ) if ( fast_reset )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
weapon thread playspringpadresetaudio( f_animlength ); weapon thread playspringpadresetaudio( f_animlength );
wait( f_animlength ); wait( f_animlength );
} }
else else
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_reset ); weapon setanim( %o_zombie_buildable_tramplesteam_reset );
weapon thread playspringpadresetaudio( r_animlength ); weapon thread playspringpadresetaudio( r_animlength );
wait( r_animlength ); wait( r_animlength );
} }
} }
else else
wait 0.05; wait 0.05;
prearmed = 0; prearmed = 0;
weapon notify( "armed" ); weapon notify( "armed" );
fast_reset = 1; fast_reset = 1;
if ( isdefined( weapon ) ) if ( isdefined( weapon ) )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
weapon waittill( "fling", fast ); weapon waittill( "fling", fast );
} }
if ( isdefined( weapon ) ) if ( isdefined( weapon ) )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_launch ); weapon setanim( %o_zombie_buildable_tramplesteam_launch );
wait( l_animlength ); wait( l_animlength );
} }
} }
} }

View File

@ -95,48 +95,48 @@ item_watch_damage()
item_damage( damage ) item_damage( damage )
{ {
if ( isdefined( self.isriotshield ) && self.isriotshield ) if ( isdefined( self.isriotshield ) && self.isriotshield )
{ {
if ( isdefined( level.riotshield_damage_callback ) && isdefined( self.owner ) ) if ( isdefined( level.riotshield_damage_callback ) && isdefined( self.owner ) )
self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); self.owner [[ level.riotshield_damage_callback ]]( damage, 0 );
else if ( isdefined( level.deployed_riotshield_damage_callback ) ) else if ( isdefined( level.deployed_riotshield_damage_callback ) )
self [[ level.deployed_riotshield_damage_callback ]]( damage ); self [[ level.deployed_riotshield_damage_callback ]]( damage );
} }
else if ( isdefined( self.owner ) ) else if ( isdefined( self.owner ) )
{ {
self.owner player_damage_equipment( self.equipname, damage, self.origin, self.stub ); self.owner player_damage_equipment( self.equipname, damage, self.origin, self.stub );
} }
else else
{ {
if ( !isdefined( self.damage ) ) if ( !isdefined( self.damage ) )
self.damage = 0; self.damage = 0;
self.damage += damage; self.damage += damage;
if ( self.damage >= 1500 ) if ( self.damage >= 1500 )
self thread maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); self thread maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
} }
} }
player_damage_equipment( equipment, damage, origin, stub ) player_damage_equipment( equipment, damage, origin, stub )
{ {
if ( !isdefined( self.equipment_damage ) ) if ( !isdefined( self.equipment_damage ) )
self.equipment_damage = []; self.equipment_damage = [];
if ( !isdefined( self.equipment_damage[equipment] ) ) if ( !isdefined( self.equipment_damage[equipment] ) )
self.equipment_damage[equipment] = 0; self.equipment_damage[equipment] = 0;
self.equipment_damage[equipment] += damage; self.equipment_damage[equipment] += damage;
if ( self.equipment_damage[equipment] >= 1500 ) if ( self.equipment_damage[equipment] >= 1500 )
{ {
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
if ( isdefined( level.placeable_equipment_destroy_fn[equipment] ) ) if ( isdefined( level.placeable_equipment_destroy_fn[equipment] ) )
self [[ level.placeable_equipment_destroy_fn[equipment] ]](); self [[ level.placeable_equipment_destroy_fn[equipment] ]]();
else else
equipment_disappear_fx( origin ); equipment_disappear_fx( origin );
self equipment_release( equipment ); self equipment_release( equipment );
} }
} }

View File

@ -221,173 +221,173 @@ hide_gump_loading_for_hotjoiners()
menu_onmenuresponse() menu_onmenuresponse()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
for (;;) for (;;)
{ {
self waittill( "menuresponse", menu, response ); self waittill( "menuresponse", menu, response );
if ( response == "back" ) if ( response == "back" )
{ {
self closemenu();
self closeingamemenu();
if ( level.console )
{
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] )
{
if ( self.pers["team"] == "allies" )
self openmenu( game["menu_class"] );
if ( self.pers["team"] == "axis" )
self openmenu( game["menu_class"] );
}
}
continue;
}
if ( menu == game["menu_team"] )
{
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
if ( level.console )
{
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] )
{
if ( self.pers["team"] == "allies" )
self openmenu( game["menu_class"] );
if ( self.pers["team"] == "axis" )
self openmenu( game["menu_class"] );
}
}
continue;
}
if ( menu == game["menu_team"] )
{
self closemenu();
self closeingamemenu();
self thread do_team_change(); self thread do_team_change();
continue; continue;
} }
if ( response == "changeclass_marines" ) if ( response == "changeclass_marines" )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
self openmenu( game["menu_changeclass_allies"] ); self openmenu( game["menu_changeclass_allies"] );
continue; continue;
} }
if ( response == "changeclass_opfor" ) if ( response == "changeclass_opfor" )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
self openmenu( game["menu_changeclass_axis"] ); self openmenu( game["menu_changeclass_axis"] );
continue; continue;
} }
if ( response == "changeclass_wager" ) if ( response == "changeclass_wager" )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
self openmenu( game["menu_changeclass_wager"] ); self openmenu( game["menu_changeclass_wager"] );
continue; continue;
} }
if ( response == "changeclass_custom" ) if ( response == "changeclass_custom" )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
self openmenu( game["menu_changeclass_custom"] ); self openmenu( game["menu_changeclass_custom"] );
continue; continue;
} }
if ( response == "changeclass_barebones" ) if ( response == "changeclass_barebones" )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
self openmenu( game["menu_changeclass_barebones"] ); self openmenu( game["menu_changeclass_barebones"] );
continue; continue;
} }
if ( response == "changeclass_marines_splitscreen" ) if ( response == "changeclass_marines_splitscreen" )
self openmenu( "changeclass_marines_splitscreen" ); self openmenu( "changeclass_marines_splitscreen" );
if ( response == "changeclass_opfor_splitscreen" ) if ( response == "changeclass_opfor_splitscreen" )
self openmenu( "changeclass_opfor_splitscreen" ); self openmenu( "changeclass_opfor_splitscreen" );
if ( response == "endgame" ) if ( response == "endgame" )
{ {
if ( self issplitscreen() ) if ( self issplitscreen() )
{ {
level.skipvote = 1; level.skipvote = 1;
if ( !( isdefined( level.gameended ) && level.gameended ) ) if ( !( isdefined( level.gameended ) && level.gameended ) )
{ {
self maps\mp\zombies\_zm_laststand::add_weighted_down(); self maps\mp\zombies\_zm_laststand::add_weighted_down();
self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" );
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat();
level.host_ended_game = 1; level.host_ended_game = 1;
maps\mp\zombies\_zm_game_module::freeze_players( 1 ); maps\mp\zombies\_zm_game_module::freeze_players( 1 );
level notify( "end_game" ); level notify( "end_game" );
} }
} }
continue; continue;
} }
if ( response == "restart_level_zm" ) if ( response == "restart_level_zm" )
{ {
self maps\mp\zombies\_zm_laststand::add_weighted_down(); self maps\mp\zombies\_zm_laststand::add_weighted_down();
self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "deaths" );
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat();
missionfailed(); missionfailed();
} }
if ( response == "killserverpc" ) if ( response == "killserverpc" )
{ {
level thread maps\mp\gametypes_zm\_globallogic::killserverpc(); level thread maps\mp\gametypes_zm\_globallogic::killserverpc();
continue; continue;
} }
if ( response == "endround" ) if ( response == "endround" )
{ {
if ( !( isdefined( level.gameended ) && level.gameended ) ) if ( !( isdefined( level.gameended ) && level.gameended ) )
{ {
self maps\mp\gametypes_zm\_globallogic::gamehistoryplayerquit(); self maps\mp\gametypes_zm\_globallogic::gamehistoryplayerquit();
self maps\mp\zombies\_zm_laststand::add_weighted_down(); self maps\mp\zombies\_zm_laststand::add_weighted_down();
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
level.host_ended_game = 1; level.host_ended_game = 1;
maps\mp\zombies\_zm_game_module::freeze_players( 1 ); maps\mp\zombies\_zm_game_module::freeze_players( 1 );
level notify( "end_game" ); level notify( "end_game" );
} }
continue; continue;
} }
if ( menu == game["menu_team"] && level.allow_teamchange == "1" ) if ( menu == game["menu_team"] && level.allow_teamchange == "1" )
{ {
switch ( response ) switch ( response )
{ {
case "allies": case "allies":
self [[ level.allies ]](); self [[ level.allies ]]();
break; break;
case "axis": case "axis":
self [[ level.teammenu ]]( response ); self [[ level.teammenu ]]( response );
break; break;
case "autoassign": case "autoassign":
self [[ level.autoassign ]]( 1 ); self [[ level.autoassign ]]( 1 );
break; break;
case "spectator": case "spectator":
self [[ level.spectator ]](); self [[ level.spectator ]]();
break; break;
} }
continue; continue;
} }
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] ) if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] )
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
if ( level.rankedmatch && issubstr( response, "custom" ) ) if ( level.rankedmatch && issubstr( response, "custom" ) )
{ {
} }
self.selectedclass = 1; self.selectedclass = 1;
self [[ level.class ]]( response ); self [[ level.class ]]( response );
} }
} }
} }
do_team_change() do_team_change()

View File

@ -47,14 +47,14 @@ revive_do_revive( playerbeingrevived, revivergun )
playerbeingrevived startrevive( self ); playerbeingrevived startrevive( self );
} }
if ( !isDefined( playerbeingrevived_player.beingrevivedprogressbar ) && playerbeingrevived_player != self ) if ( !isDefined( playerbeingrevived_player.beingrevivedprogressbar ) && playerbeingrevived_player != self )
{ {
playerbeingrevived_player.beingrevivedprogressbar = playerbeingrevived_player createprimaryprogressbar(); playerbeingrevived_player.beingrevivedprogressbar = playerbeingrevived_player createprimaryprogressbar();
playerbeingrevived_player.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, beingrevivedprogressbar_y); playerbeingrevived_player.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, beingrevivedprogressbar_y);
playerbeingrevived_player.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); playerbeingrevived_player.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1);
playerbeingrevived_player.beingrevivedprogressbar.hidewheninmenu = 1; playerbeingrevived_player.beingrevivedprogressbar.hidewheninmenu = 1;
playerbeingrevived_player.beingrevivedprogressbar.bar.hidewheninmenu = 1; playerbeingrevived_player.beingrevivedprogressbar.bar.hidewheninmenu = 1;
playerbeingrevived_player.beingrevivedprogressbar.barframe.hidewheninmenu = 1; playerbeingrevived_player.beingrevivedprogressbar.barframe.hidewheninmenu = 1;
playerbeingrevived_player.beingrevivedprogressbar.sort = 1; playerbeingrevived_player.beingrevivedprogressbar.sort = 1;
playerbeingrevived_player.beingrevivedprogressbar.bar.sort = 2; playerbeingrevived_player.beingrevivedprogressbar.bar.sort = 2;
playerbeingrevived_player.beingrevivedprogressbar.barframe.sort = 3; playerbeingrevived_player.beingrevivedprogressbar.barframe.sort = 3;
@ -65,10 +65,10 @@ revive_do_revive( playerbeingrevived, revivergun )
if ( !isDefined( self.reviveprogressbar ) ) if ( !isDefined( self.reviveprogressbar ) )
{ {
self.reviveprogressbar = self createprimaryprogressbar(); self.reviveprogressbar = self createprimaryprogressbar();
self.reviveprogressbar.bar.color = (0.5, 0.5, 1); self.reviveprogressbar.bar.color = (0.5, 0.5, 1);
self.reviveprogressbar.foreground = 1; self.reviveprogressbar.foreground = 1;
self.reviveprogressbar.bar.foreground = 1; self.reviveprogressbar.bar.foreground = 1;
self.reviveprogressbar.barframe.foreground = 1; self.reviveprogressbar.barframe.foreground = 1;
self.reviveprogressbar.sort = 1; self.reviveprogressbar.sort = 1;
self.reviveprogressbar.bar.sort = 2; self.reviveprogressbar.bar.sort = 2;
self.reviveprogressbar.barframe.sort = 3; self.reviveprogressbar.barframe.sort = 3;
@ -91,7 +91,7 @@ revive_do_revive( playerbeingrevived, revivergun )
self.is_reviving_any++; self.is_reviving_any++;
self thread laststand_clean_up_reviving_any( playerbeingrevived_player ); self thread laststand_clean_up_reviving_any( playerbeingrevived_player );
self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); self.reviveprogressbar updatebar( 0.01, 1 / revivetime );
playerbeingrevived_player.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); playerbeingrevived_player.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime );
if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) ) if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) )
{ {
@ -146,7 +146,7 @@ revive_do_revive( playerbeingrevived, revivergun )
} }
} }
if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) ) if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) )
{ {
if ( !flag( "wait_and_revive" ) ) if ( !flag( "wait_and_revive" ) )
{ {
@ -291,7 +291,7 @@ revive_give_back_weapons( gun )
{ {
revive_tool = level.revive_tool; revive_tool = level.revive_tool;
if ( is_true( self.afterlife ) ) if ( is_true( self.afterlife ) )
{ {
revive_tool = level.afterlife_revive_tool; revive_tool = level.afterlife_revive_tool;
} }
@ -304,20 +304,20 @@ revive_give_back_weapons( gun )
return; return;
} }
if ( cur_wep != revive_tool && is_true( self.revive_weapon_changed ) ) if ( cur_wep != revive_tool && is_true( self.revive_weapon_changed ) )
{ {
return; return;
} }
if ( self hasWeapon( "item_meat_zm" ) ) if ( self hasWeapon( "item_meat_zm" ) )
{ {
return; return;
} }
if ( self hasWeapon( "screecher_arms_zm" ) ) if ( self hasWeapon( "screecher_arms_zm" ) )
{ {
return; return;
} }
if ( gun != "none" && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) ) if ( gun != "none" && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) )
{ {
@ -401,43 +401,43 @@ revive_hud_think()
auto_revive( reviver, dont_enable_weapons ) auto_revive( reviver, dont_enable_weapons )
{ {
if ( isdefined( self.revivetrigger ) ) if ( isdefined( self.revivetrigger ) )
{ {
self.revivetrigger.auto_revive = 1; self.revivetrigger.auto_revive = 1;
if ( self.revivetrigger.beingrevived == 1 ) if ( self.revivetrigger.beingrevived == 1 )
{ {
while ( true ) while ( true )
{ {
if ( self.revivetrigger.beingrevived == 0 ) if ( self.revivetrigger.beingrevived == 0 )
break; break;
wait_network_frame(); wait_network_frame();
} }
} }
self.revivetrigger.auto_trigger = 0; self.revivetrigger.auto_trigger = 0;
} }
self reviveplayer(); self reviveplayer();
self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 );
setclientsysstate( "lsm", "0", self ); setclientsysstate( "lsm", "0", self );
self notify( "stop_revive_trigger" ); self notify( "stop_revive_trigger" );
if ( isdefined( self.revivetrigger ) ) if ( isdefined( self.revivetrigger ) )
{ {
self.revivetrigger delete(); self.revivetrigger delete();
self.revivetrigger = undefined; self.revivetrigger = undefined;
} }
self cleanup_suicide_hud(); self cleanup_suicide_hud();
if ( !isdefined( dont_enable_weapons ) || dont_enable_weapons == 0 ) if ( !isdefined( dont_enable_weapons ) || dont_enable_weapons == 0 )
self laststand_enable_player_weapons(); self laststand_enable_player_weapons();
self allowjump( 1 ); self allowjump( 1 );
self.ignoreme = 0; self.ignoreme = 0;
self.laststand = undefined; self.laststand = undefined;
valid_reviver = 1; valid_reviver = 1;
if ( is_gametype_active( "zgrief" ) && reviver == self ) if ( is_gametype_active( "zgrief" ) && reviver == self )
@ -445,80 +445,80 @@ auto_revive( reviver, dont_enable_weapons )
valid_reviver = 0; valid_reviver = 0;
} }
if ( valid_reviver ) if ( valid_reviver )
{ {
reviver.revives++; reviver.revives++;
reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" ); reviver maps\mp\zombies\_zm_stats::increment_client_stat( "revives" );
reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" ); reviver maps\mp\zombies\_zm_stats::increment_player_stat( "revives" );
self recordplayerrevivezombies( reviver ); self recordplayerrevivezombies( reviver );
maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver ); maps\mp\_demo::bookmark( "zm_player_revived", gettime(), self, reviver );
} }
self notify( "player_revived", reviver ); self notify( "player_revived", reviver );
} }
playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) playerlaststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
{ {
self notify( "entering_last_stand" ); self notify( "entering_last_stand" );
if ( isdefined( level._game_module_player_laststand_callback ) ) if ( isdefined( level._game_module_player_laststand_callback ) )
self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); self [[ level._game_module_player_laststand_callback ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration );
if ( self player_is_in_laststand() ) if ( self player_is_in_laststand() )
return; return;
if ( isdefined( self.in_zombify_call ) && self.in_zombify_call ) if ( isdefined( self.in_zombify_call ) && self.in_zombify_call )
return; return;
self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); self thread player_last_stand_stats( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration );
if ( isdefined( level.playerlaststand_func ) ) if ( isdefined( level.playerlaststand_func ) )
[[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); [[ level.playerlaststand_func ]]( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration );
self.health = 1; self.health = 1;
self.laststand = 1; self.laststand = 1;
self.ignoreme = 1; self.ignoreme = 1;
self thread maps\mp\gametypes_zm\_gameobjects::onplayerlaststand(); self thread maps\mp\gametypes_zm\_gameobjects::onplayerlaststand();
self thread maps\mp\zombies\_zm_buildables::onplayerlaststand(); self thread maps\mp\zombies\_zm_buildables::onplayerlaststand();
if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) ) if ( !( isdefined( self.no_revive_trigger ) && self.no_revive_trigger ) )
self revive_trigger_spawn(); self revive_trigger_spawn();
else else
self undolaststand(); self undolaststand();
if ( isdefined( self.is_zombie ) && self.is_zombie ) if ( isdefined( self.is_zombie ) && self.is_zombie )
{ {
self takeallweapons(); self takeallweapons();
if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self ) if ( isdefined( attacker ) && isplayer( attacker ) && attacker != self )
attacker notify( "killed_a_zombie_player", einflictor, self, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ); attacker notify( "killed_a_zombie_player", einflictor, self, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration );
} }
else else
{ {
self laststand_disable_player_weapons(); self laststand_disable_player_weapons();
self laststand_give_pistol(); self laststand_give_pistol();
} }
if ( isdefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 ) if ( isdefined( level.playersuicideallowed ) && level.playersuicideallowed && get_players().size > 1 )
{ {
if ( !isdefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() ) if ( !isdefined( level.canplayersuicide ) || self [[ level.canplayersuicide ]]() )
self thread suicide_trigger_spawn(); self thread suicide_trigger_spawn();
} }
if ( level.laststandgetupallowed ) if ( level.laststandgetupallowed )
self thread laststand_getup(); self thread laststand_getup();
else else
{ {
bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" );
self thread laststand_bleedout( bleedout_time ); self thread laststand_bleedout( bleedout_time );
} }
if ( "zcleansed" != level.gametype ) if ( "zcleansed" != level.gametype )
maps\mp\_demo::bookmark( "zm_player_downed", gettime(), self ); maps\mp\_demo::bookmark( "zm_player_downed", gettime(), self );
self notify( "player_downed" ); self notify( "player_downed" );
self thread refire_player_downed(); self thread refire_player_downed();
self thread cleanup_laststand_on_disconnect(); self thread cleanup_laststand_on_disconnect();
} }
revive_hud_create() revive_hud_create()
@ -528,17 +528,17 @@ revive_hud_create()
return; return;
} }
self.revive_hud = newclienthudelem( self ); self.revive_hud = newclienthudelem( self );
self.revive_hud.alignx = "center"; self.revive_hud.alignx = "center";
self.revive_hud.aligny = "middle"; self.revive_hud.aligny = "middle";
self.revive_hud.horzalign = "center"; self.revive_hud.horzalign = "center";
self.revive_hud.vertalign = "bottom"; self.revive_hud.vertalign = "bottom";
self.revive_hud.foreground = 1; self.revive_hud.foreground = 1;
self.revive_hud.font = "default"; self.revive_hud.font = "default";
self.revive_hud.fontscale = 1.5; self.revive_hud.fontscale = 1.5;
self.revive_hud.alpha = 0; self.revive_hud.alpha = 0;
self.revive_hud.color = ( 1, 1, 1 ); self.revive_hud.color = ( 1, 1, 1 );
self.revive_hud.hidewheninmenu = 1; self.revive_hud.hidewheninmenu = 1;
self.revive_hud settext( "" ); self.revive_hud settext( "" );
self.revive_hud.y = -160; self.revive_hud.y = -160;
} }

File diff suppressed because it is too large Load Diff

View File

@ -16,9 +16,9 @@ change_melee_weapon( weapon_name, current_weapon )
had_ballistic = 0; had_ballistic = 0;
had_ballistic_upgraded = 0; had_ballistic_upgraded = 0;
ballistic_was_primary = 0; ballistic_was_primary = 0;
old_ballistic = undefined; old_ballistic = undefined;
ballistic_ammo_clip = 0; ballistic_ammo_clip = 0;
ballistic_ammo_stock = 0; ballistic_ammo_stock = 0;
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
i = 0; i = 0;
while ( i < primaryweapons.size ) while ( i < primaryweapons.size )
@ -31,10 +31,10 @@ change_melee_weapon( weapon_name, current_weapon )
{ {
ballistic_was_primary = 1; ballistic_was_primary = 1;
} }
old_ballistic = primary_weapon; old_ballistic = primary_weapon;
ballistic_ammo_clip = self getWeaponAmmoClip( primary_weapon ); ballistic_ammo_clip = self getWeaponAmmoClip( primary_weapon );
ballistic_ammo_stock = self getWeaponAmmoStock( primary_weapon ); ballistic_ammo_stock = self getWeaponAmmoStock( primary_weapon );
self notify( "zmb_lost_knife" ); self notify( "zmb_lost_knife" );
self takeweapon( primary_weapon ); self takeweapon( primary_weapon );
unacquire_weapon_toggle( primary_weapon ); unacquire_weapon_toggle( primary_weapon );
if ( issubstr( primary_weapon, "upgraded" ) ) if ( issubstr( primary_weapon, "upgraded" ) )
@ -64,7 +64,7 @@ change_melee_weapon( weapon_name, current_weapon )
} }
self giveweapon( new_ballistic, 0 ); self giveweapon( new_ballistic, 0 );
} }
self giveMaxAmmo( new_ballistic ); self giveMaxAmmo( new_ballistic );
self seteverhadweaponall( 1 ); self seteverhadweaponall( 1 );
} }
return current_weapon; return current_weapon;
@ -72,28 +72,28 @@ change_melee_weapon( weapon_name, current_weapon )
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
{ {
if ( isdefined( flourish_fn ) ) if ( isdefined( flourish_fn ) )
self thread [[ flourish_fn ]](); self thread [[ flourish_fn ]]();
self thread do_melee_weapon_change( weapon_name ); self thread do_melee_weapon_change( weapon_name );
self.pre_temp_weapon = self do_melee_weapon_flourish_begin( flourish_weapon_name ); self.pre_temp_weapon = self do_melee_weapon_flourish_begin( flourish_weapon_name );
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
self do_melee_weapon_flourish_end( self.pre_temp_weapon, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); self do_melee_weapon_flourish_end( self.pre_temp_weapon, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
return; return;
self.pre_temp_weapon = undefined; self.pre_temp_weapon = undefined;
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
{ {
if ( isdefined( trigger ) ) if ( isdefined( trigger ) )
trigger setinvisibletoplayer( self ); trigger setinvisibletoplayer( self );
self trigger_hide_all(); self trigger_hide_all();
} }
} }
do_melee_weapon_change( weapon_name ) do_melee_weapon_change( weapon_name )
@ -106,46 +106,46 @@ do_melee_weapon_change( weapon_name )
self waittill_any( "weapon_change", "weapon_change_complete" ); self waittill_any( "weapon_change", "weapon_change_complete" );
self giveweapon( weapon_name ); self giveweapon( weapon_name );
self.pre_temp_weapon = change_melee_weapon( weapon_name, self.pre_temp_weapon ); self.pre_temp_weapon = change_melee_weapon( weapon_name, self.pre_temp_weapon );
} }
do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
{ {
assert( !is_zombie_perk_bottle( gun ) ); assert( !is_zombie_perk_bottle( gun ) );
assert( gun != level.revive_tool ); assert( gun != level.revive_tool );
self enable_player_move_states(); self enable_player_move_states();
self takeweapon( flourish_weapon_name ); self takeweapon( flourish_weapon_name );
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
{ {
self.lastactiveweapon = self.pre_temp_weapon; self.lastactiveweapon = self.pre_temp_weapon;
return; return;
} }
if ( self is_multiple_drinking() ) if ( self is_multiple_drinking() )
{ {
self decrement_is_drinking(); self decrement_is_drinking();
return; return;
} }
else if ( is_melee_weapon( gun ) ) else if ( is_melee_weapon( gun ) )
{ {
self switchtoweapon( weapon_name ); self switchtoweapon( weapon_name );
self decrement_is_drinking(); self decrement_is_drinking();
return; return;
} }
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
self switchtoweapon( gun ); self switchtoweapon( gun );
else else
{ {
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
self switchtoweapon( primaryweapons[0] ); self switchtoweapon( primaryweapons[0] );
} }
self waittill( "weapon_change_complete" ); self waittill( "weapon_change_complete" );
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
self decrement_is_drinking(); self decrement_is_drinking();
} }

View File

@ -10,33 +10,33 @@
electric_cherry_laststand() electric_cherry_laststand()
{ {
visionsetlaststand( "zombie_last_stand", 1 ); visionsetlaststand( "zombie_last_stand", 1 );
if ( isdefined( self ) ) if ( isdefined( self ) )
{ {
playfx( level._effect["electric_cherry_explode"], self.origin ); playfx( level._effect["electric_cherry_explode"], self.origin );
self playsound( "zmb_cherry_explode" ); self playsound( "zmb_cherry_explode" );
self notify( "electric_cherry_start" ); self notify( "electric_cherry_start" );
wait 0.05; wait 0.05;
a_zombies = get_round_enemy_array(); a_zombies = get_round_enemy_array();
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 );
for ( i = 0; i < a_zombies.size; i++ ) for ( i = 0; i < a_zombies.size; i++ )
{ {
if ( isalive( self ) ) if ( isalive( self ) )
{ {
a_zombies[i] thread electric_cherry_death_fx(); a_zombies[i] thread electric_cherry_death_fx();
if ( isdefined( self.cherry_kills ) ) if ( isdefined( self.cherry_kills ) )
self.cherry_kills++; self.cherry_kills++;
self maps\mp\zombies\_zm_score::add_to_player_score( 40 ); self maps\mp\zombies\_zm_score::add_to_player_score( 40 );
wait 0.1; wait 0.1;
a_zombies[i] dodamage( a_zombies[i].health + 1000, self.origin, self, self, "none" ); a_zombies[i] dodamage( a_zombies[i].health + 1000, self.origin, self, self, "none" );
} }
} }
self notify( "electric_cherry_end" ); self notify( "electric_cherry_end" );
} }
} }

View File

@ -11,63 +11,63 @@
machine_selector() machine_selector()
{ {
while ( true ) while ( true )
{ {
level waittill( "random_perk_moving" ); level waittill( "random_perk_moving" );
machines = getentarray( "random_perk_machine", "targetname" ); machines = getentarray( "random_perk_machine", "targetname" );
if ( machines.size == 1 ) if ( machines.size == 1 )
{ {
new_machine = machines[0]; new_machine = machines[0];
new_machine thread machine_think(); new_machine thread machine_think();
continue; continue;
} }
do do
new_machine = machines[randomint( machines.size )]; new_machine = machines[randomint( machines.size )];
while ( new_machine == level.random_perk_start_machine ); while ( new_machine == level.random_perk_start_machine );
level.random_perk_start_machine = new_machine; level.random_perk_start_machine = new_machine;
new_machine thread machine_think(); new_machine thread machine_think();
} }
} }
trigger_visible_to_player( player ) trigger_visible_to_player( player )
{ {
self setinvisibletoplayer( player ); self setinvisibletoplayer( player );
visible = 1; visible = 1;
if ( isdefined( self.stub.trigger_target.machine_user ) ) if ( isdefined( self.stub.trigger_target.machine_user ) )
{ {
if ( player != self.stub.trigger_target.machine_user ) if ( player != self.stub.trigger_target.machine_user )
visible = 0; visible = 0;
} }
else if ( !player can_buy_perk() ) else if ( !player can_buy_perk() )
visible = 0; visible = 0;
if ( !visible ) if ( !visible )
return false; return false;
self setvisibletoplayer( player ); self setvisibletoplayer( player );
return true; return true;
} }
can_buy_perk() can_buy_perk()
{ {
if ( isdefined( self.is_drinking ) && self.is_drinking > 0 ) if ( isdefined( self.is_drinking ) && self.is_drinking > 0 )
return false; return false;
current_weapon = self getcurrentweapon(); current_weapon = self getcurrentweapon();
if ( is_equipment_that_blocks_purchase( current_weapon ) ) if ( is_equipment_that_blocks_purchase( current_weapon ) )
return false; return false;
if ( self in_revive_trigger() ) if ( self in_revive_trigger() )
return false; return false;
if ( current_weapon == "none" ) if ( current_weapon == "none" )
return false; return false;
return true; return true;
} }

View File

@ -14,21 +14,21 @@
_is_player_in_zombie_stink( a_points ) _is_player_in_zombie_stink( a_points )
{ {
velocity = self getVelocity() * (1, 1, 0); velocity = self getVelocity() * (1, 1, 0);
speed = length(velocity); speed = length(velocity);
if (self getStance() == "stand" && speed != 0) if (self getStance() == "stand" && speed != 0)
{ {
return 0; return 0;
} }
b_is_in_stink = 0; b_is_in_stink = 0;
for ( i = 0; i < a_points.size; i++ ) for ( i = 0; i < a_points.size; i++ )
{ {
if ( distancesquared( a_points[i].origin, self.origin ) < 4900 ) if ( distancesquared( a_points[i].origin, self.origin ) < 4900 )
b_is_in_stink = 1; b_is_in_stink = 1;
} }
return b_is_in_stink; return b_is_in_stink;
} }

File diff suppressed because it is too large Load Diff

View File

@ -10,5 +10,5 @@
is_pers_system_disabled() is_pers_system_disabled()
{ {
return true; return true;
} }

View File

@ -4,5 +4,5 @@
check_pers_upgrade( pers_upgrade ) check_pers_upgrade( pers_upgrade )
{ {
return 0; return 0;
} }

View File

@ -7,124 +7,124 @@
zombie_blood_powerup( m_powerup, e_player ) zombie_blood_powerup( m_powerup, e_player )
{ {
e_player notify( "zombie_blood" ); e_player notify( "zombie_blood" );
e_player endon( "zombie_blood" ); e_player endon( "zombie_blood" );
e_player endon( "disconnect" ); e_player endon( "disconnect" );
e_player thread powerup_vo( "zombie_blood" ); e_player thread powerup_vo( "zombie_blood" );
e_player._show_solo_hud = 1; e_player._show_solo_hud = 1;
if (is_true(e_player.zombie_vars["zombie_powerup_zombie_blood_on"])) if (is_true(e_player.zombie_vars["zombie_powerup_zombie_blood_on"]))
{ {
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] += 30; e_player.zombie_vars["zombie_powerup_zombie_blood_time"] += 30;
} }
else else
{ {
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30; e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30;
} }
e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 1; e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 1;
level notify( "player_zombie_blood", e_player ); level notify( "player_zombie_blood", e_player );
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_powerup_zombie_blood_visionset", e_player );
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_powerup_zombie_blood_overlay", e_player );
e_player setclientfield( "player_zombie_blood_fx", 1 ); e_player setclientfield( "player_zombie_blood_fx", 1 );
__new = []; __new = [];
foreach ( __key, __value in level.a_zombie_blood_entities ) foreach ( __key, __value in level.a_zombie_blood_entities )
{ {
if ( isdefined( __value ) ) if ( isdefined( __value ) )
{ {
if ( isstring( __key ) ) if ( isstring( __key ) )
{ {
__new[__key] = __value; __new[__key] = __value;
continue; continue;
} }
__new[__new.size] = __value; __new[__new.size] = __value;
} }
} }
level.a_zombie_blood_entities = __new; level.a_zombie_blood_entities = __new;
foreach ( e_zombie_blood in level.a_zombie_blood_entities ) foreach ( e_zombie_blood in level.a_zombie_blood_entities )
{ {
if ( isdefined( e_zombie_blood.e_unique_player ) ) if ( isdefined( e_zombie_blood.e_unique_player ) )
{ {
if ( e_zombie_blood.e_unique_player == e_player ) if ( e_zombie_blood.e_unique_player == e_player )
e_zombie_blood setvisibletoplayer( e_player ); e_zombie_blood setvisibletoplayer( e_player );
continue; continue;
} }
e_zombie_blood setvisibletoplayer( e_player ); e_zombie_blood setvisibletoplayer( e_player );
} }
if ( !isdefined( e_player.m_fx ) ) if ( !isdefined( e_player.m_fx ) )
{ {
v_origin = e_player gettagorigin( "J_Eyeball_LE" ); v_origin = e_player gettagorigin( "J_Eyeball_LE" );
v_angles = e_player gettagangles( "J_Eyeball_LE" ); v_angles = e_player gettagangles( "J_Eyeball_LE" );
m_fx = spawn( "script_model", v_origin ); m_fx = spawn( "script_model", v_origin );
m_fx setmodel( "tag_origin" ); m_fx setmodel( "tag_origin" );
m_fx.angles = v_angles; m_fx.angles = v_angles;
m_fx linkto( e_player, "J_Eyeball_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) ); m_fx linkto( e_player, "J_Eyeball_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) );
m_fx thread fx_disconnect_watch( e_player ); m_fx thread fx_disconnect_watch( e_player );
playfxontag( level._effect["zombie_blood"], m_fx, "tag_origin" ); playfxontag( level._effect["zombie_blood"], m_fx, "tag_origin" );
e_player.m_fx = m_fx; e_player.m_fx = m_fx;
e_player.m_fx playloopsound( "zmb_zombieblood_3rd_loop", 1 ); e_player.m_fx playloopsound( "zmb_zombieblood_3rd_loop", 1 );
if ( isdefined( level.str_zombie_blood_model ) ) if ( isdefined( level.str_zombie_blood_model ) )
{ {
e_player.hero_model = e_player.model; e_player.hero_model = e_player.model;
e_player setmodel( level.str_zombie_blood_model ); e_player setmodel( level.str_zombie_blood_model );
} }
} }
e_player thread watch_zombie_blood_early_exit(); e_player thread watch_zombie_blood_early_exit();
while ( e_player.zombie_vars["zombie_powerup_zombie_blood_time"] >= 0 ) while ( e_player.zombie_vars["zombie_powerup_zombie_blood_time"] >= 0 )
{ {
wait 0.05; wait 0.05;
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] -= 0.05; e_player.zombie_vars["zombie_powerup_zombie_blood_time"] -= 0.05;
} }
e_player notify( "zombie_blood_over" ); e_player notify( "zombie_blood_over" );
if ( isdefined( e_player.characterindex ) ) if ( isdefined( e_player.characterindex ) )
e_player playsound( "vox_plr_" + e_player.characterindex + "_exert_grunt_" + randomintrange( 0, 3 ) ); e_player playsound( "vox_plr_" + e_player.characterindex + "_exert_grunt_" + randomintrange( 0, 3 ) );
e_player.m_fx delete(); e_player.m_fx delete();
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_powerup_zombie_blood_visionset", e_player ); maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_powerup_zombie_blood_visionset", e_player );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_powerup_zombie_blood_overlay", e_player ); maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_powerup_zombie_blood_overlay", e_player );
e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 0; e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 0;
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30; e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30;
e_player._show_solo_hud = 0; e_player._show_solo_hud = 0;
e_player setclientfield( "player_zombie_blood_fx", 0 ); e_player setclientfield( "player_zombie_blood_fx", 0 );
e_player.early_exit = undefined; e_player.early_exit = undefined;
__new = []; __new = [];
foreach ( __key, __value in level.a_zombie_blood_entities ) foreach ( __key, __value in level.a_zombie_blood_entities )
{ {
if ( isdefined( __value ) ) if ( isdefined( __value ) )
{ {
if ( isstring( __key ) ) if ( isstring( __key ) )
{ {
__new[__key] = __value; __new[__key] = __value;
continue; continue;
} }
__new[__new.size] = __value; __new[__new.size] = __value;
} }
} }
level.a_zombie_blood_entities = __new; level.a_zombie_blood_entities = __new;
foreach ( e_zombie_blood in level.a_zombie_blood_entities ) foreach ( e_zombie_blood in level.a_zombie_blood_entities )
e_zombie_blood setinvisibletoplayer( e_player ); e_zombie_blood setinvisibletoplayer( e_player );
if ( isdefined( e_player.hero_model ) ) if ( isdefined( e_player.hero_model ) )
{ {
e_player setmodel( e_player.hero_model ); e_player setmodel( e_player.hero_model );
e_player.hero_model = undefined; e_player.hero_model = undefined;
} }
} }

View File

@ -4,81 +4,81 @@
powerup_drop( drop_point ) powerup_drop( drop_point )
{ {
if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] ) if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] )
{ {
return; return;
} }
if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) if ( !isdefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 )
return; return;
rand_drop = randomint( 100 ); rand_drop = randomint( 100 );
powerup_chance = 2; powerup_chance = 2;
if ( rand_drop >= powerup_chance ) if ( rand_drop >= powerup_chance )
{ {
if ( !level.zombie_vars["zombie_drop_item"] ) if ( !level.zombie_vars["zombie_drop_item"] )
return; return;
debug = "score"; debug = "score";
} }
else else
debug = "random"; debug = "random";
playable_area = getentarray( "player_volume", "script_noteworthy" ); playable_area = getentarray( "player_volume", "script_noteworthy" );
level.powerup_drop_count++; level.powerup_drop_count++;
powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) ); powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorscale( ( 0, 0, 1 ), 40.0 ) );
valid_drop = 0; valid_drop = 0;
for ( i = 0; i < playable_area.size; i++ ) for ( i = 0; i < playable_area.size; i++ )
{ {
if ( powerup istouching( playable_area[i] ) ) if ( powerup istouching( playable_area[i] ) )
valid_drop = 1; valid_drop = 1;
} }
if ( valid_drop && level.rare_powerups_active ) if ( valid_drop && level.rare_powerups_active )
{ {
pos = ( drop_point[0], drop_point[1], drop_point[2] + 42 ); pos = ( drop_point[0], drop_point[1], drop_point[2] + 42 );
if ( check_for_rare_drop_override( pos ) ) if ( check_for_rare_drop_override( pos ) )
{ {
level.zombie_vars["zombie_drop_item"] = 0; level.zombie_vars["zombie_drop_item"] = 0;
valid_drop = 0; valid_drop = 0;
} }
} }
if ( !valid_drop ) if ( !valid_drop )
{ {
level.powerup_drop_count--; level.powerup_drop_count--;
powerup delete(); powerup delete();
return; return;
} }
powerup powerup_setup(); powerup powerup_setup();
print_powerup_drop( powerup.powerup_name, debug ); print_powerup_drop( powerup.powerup_name, debug );
powerup thread powerup_timeout(); powerup thread powerup_timeout();
powerup thread powerup_wobble(); powerup thread powerup_wobble();
powerup thread powerup_grab(); powerup thread powerup_grab();
powerup thread powerup_move(); powerup thread powerup_move();
powerup thread powerup_emp(); powerup thread powerup_emp();
level.zombie_vars["zombie_drop_item"] = 0; level.zombie_vars["zombie_drop_item"] = 0;
level notify( "powerup_dropped", powerup ); level notify( "powerup_dropped", powerup );
} }
get_next_powerup() get_next_powerup()
{ {
powerup = level.zombie_powerup_array[level.zombie_powerup_index]; powerup = level.zombie_powerup_array[level.zombie_powerup_index];
level.zombie_powerup_index++; level.zombie_powerup_index++;
if ( level.zombie_powerup_index >= level.zombie_powerup_array.size ) if ( level.zombie_powerup_index >= level.zombie_powerup_array.size )
{ {
level.zombie_powerup_index = 0; level.zombie_powerup_index = 0;
randomize_powerups(); randomize_powerups();
level thread play_fx_on_powerup_dropped(); level thread play_fx_on_powerup_dropped();
} }
return powerup; return powerup;
} }
play_fx_on_powerup_dropped() play_fx_on_powerup_dropped()
@ -104,195 +104,195 @@ play_fx_on_powerup_dropped()
powerup_grab( powerup_team ) powerup_grab( powerup_team )
{ {
if ( isdefined( self ) && self.zombie_grabbable ) if ( isdefined( self ) && self.zombie_grabbable )
{ {
self thread powerup_zombie_grab( powerup_team ); self thread powerup_zombie_grab( powerup_team );
return; return;
} }
self endon( "powerup_timedout" ); self endon( "powerup_timedout" );
self endon( "powerup_grabbed" ); self endon( "powerup_grabbed" );
range_squared = 4096; range_squared = 4096;
while ( isdefined( self ) ) while ( isdefined( self ) )
{ {
players = array_randomize(get_players()); players = array_randomize(get_players());
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( ( self.powerup_name == "minigun" || self.powerup_name == "tesla" || self.powerup_name == "random_weapon" || self.powerup_name == "meat_stink" ) && ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i] usebuttonpressed() && players[i] in_revive_trigger() ) ) if ( ( self.powerup_name == "minigun" || self.powerup_name == "tesla" || self.powerup_name == "random_weapon" || self.powerup_name == "meat_stink" ) && ( players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[i] usebuttonpressed() && players[i] in_revive_trigger() ) )
continue; continue;
if ( isdefined( self.can_pick_up_in_last_stand ) && !self.can_pick_up_in_last_stand && players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( isdefined( self.can_pick_up_in_last_stand ) && !self.can_pick_up_in_last_stand && players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
continue; continue;
if ( players[i].sessionstate != "playing" ) if ( players[i].sessionstate != "playing" )
continue; continue;
ignore_range = 0; ignore_range = 0;
if ( isdefined( players[i].ignore_range_powerup ) && players[i].ignore_range_powerup == self ) if ( isdefined( players[i].ignore_range_powerup ) && players[i].ignore_range_powerup == self )
{ {
players[i].ignore_range_powerup = undefined; players[i].ignore_range_powerup = undefined;
ignore_range = 1; ignore_range = 1;
} }
if ( distancesquared( players[i] getCentroid(), self.origin ) < range_squared || ignore_range ) if ( distancesquared( players[i] getCentroid(), self.origin ) < range_squared || ignore_range )
{ {
if ( isdefined( level._powerup_grab_check ) ) if ( isdefined( level._powerup_grab_check ) )
{ {
if ( !self [[ level._powerup_grab_check ]]( players[i] ) ) if ( !self [[ level._powerup_grab_check ]]( players[i] ) )
continue; continue;
} }
self.power_up_grab_player = players[i]; self.power_up_grab_player = players[i];
if ( isdefined( level.zombie_powerup_grab_func ) ) if ( isdefined( level.zombie_powerup_grab_func ) )
level thread [[ level.zombie_powerup_grab_func ]](); level thread [[ level.zombie_powerup_grab_func ]]();
else else
{ {
switch ( self.powerup_name ) switch ( self.powerup_name )
{ {
case "nuke": case "nuke":
level thread nuke_powerup( self, players[i].team ); level thread nuke_powerup( self, players[i].team );
players[i] thread powerup_vo( "nuke" ); players[i] thread powerup_vo( "nuke" );
zombies = getaiarray( level.zombie_team ); zombies = getaiarray( level.zombie_team );
players[i].zombie_nuked = arraysort( zombies, self.origin ); players[i].zombie_nuked = arraysort( zombies, self.origin );
players[i] notify( "nuke_triggered" ); players[i] notify( "nuke_triggered" );
break; break;
case "full_ammo": case "full_ammo":
level thread full_ammo_powerup( self, players[i] ); level thread full_ammo_powerup( self, players[i] );
players[i] thread powerup_vo( "full_ammo" ); players[i] thread powerup_vo( "full_ammo" );
break; break;
case "double_points": case "double_points":
level thread double_points_powerup( self, players[i] ); level thread double_points_powerup( self, players[i] );
players[i] thread powerup_vo( "double_points" ); players[i] thread powerup_vo( "double_points" );
break; break;
case "insta_kill": case "insta_kill":
level thread insta_kill_powerup( self, players[i] ); level thread insta_kill_powerup( self, players[i] );
players[i] thread powerup_vo( "insta_kill" ); players[i] thread powerup_vo( "insta_kill" );
break; break;
case "carpenter": case "carpenter":
if ( is_classic() ) if ( is_classic() )
players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check(); players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check();
if ( isdefined( level.use_new_carpenter_func ) ) if ( isdefined( level.use_new_carpenter_func ) )
level thread [[ level.use_new_carpenter_func ]]( self.origin ); level thread [[ level.use_new_carpenter_func ]]( self.origin );
else else
level thread start_carpenter( self.origin ); level thread start_carpenter( self.origin );
players[i] thread powerup_vo( "carpenter" ); players[i] thread powerup_vo( "carpenter" );
break; break;
case "fire_sale": case "fire_sale":
level thread start_fire_sale( self ); level thread start_fire_sale( self );
players[i] thread powerup_vo( "firesale" ); players[i] thread powerup_vo( "firesale" );
break; break;
case "bonfire_sale": case "bonfire_sale":
level thread start_bonfire_sale( self ); level thread start_bonfire_sale( self );
players[i] thread powerup_vo( "firesale" ); players[i] thread powerup_vo( "firesale" );
break; break;
case "minigun": case "minigun":
level thread minigun_weapon_powerup( players[i] ); level thread minigun_weapon_powerup( players[i] );
players[i] thread powerup_vo( "minigun" ); players[i] thread powerup_vo( "minigun" );
break; break;
case "free_perk": case "free_perk":
level thread free_perk_powerup( self ); level thread free_perk_powerup( self );
break; break;
case "tesla": case "tesla":
level thread tesla_weapon_powerup( players[i] ); level thread tesla_weapon_powerup( players[i] );
players[i] thread powerup_vo( "tesla" ); players[i] thread powerup_vo( "tesla" );
break; break;
case "random_weapon": case "random_weapon":
if ( !level random_weapon_powerup( self, players[i] ) ) if ( !level random_weapon_powerup( self, players[i] ) )
continue; continue;
break; break;
case "bonus_points_player": case "bonus_points_player":
level thread bonus_points_player_powerup( self, players[i] ); level thread bonus_points_player_powerup( self, players[i] );
players[i] thread powerup_vo( "bonus_points_solo" ); players[i] thread powerup_vo( "bonus_points_solo" );
break; break;
case "bonus_points_team": case "bonus_points_team":
level thread bonus_points_team_powerup( self ); level thread bonus_points_team_powerup( self );
players[i] thread powerup_vo( "bonus_points_team" ); players[i] thread powerup_vo( "bonus_points_team" );
break; break;
case "teller_withdrawl": case "teller_withdrawl":
level thread teller_withdrawl( self, players[i] ); level thread teller_withdrawl( self, players[i] );
break; break;
default: default:
if ( isdefined( level._zombiemode_powerup_grab ) ) if ( isdefined( level._zombiemode_powerup_grab ) )
level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] ); level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] );
break; break;
} }
} }
maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[i] ); maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[i] );
if ( should_award_stat( self.powerup_name ) ) if ( should_award_stat( self.powerup_name ) )
{ {
players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" ); players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" );
players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "drops" ); players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "drops" );
players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" );
players[i] maps\mp\zombies\_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" ); players[i] maps\mp\zombies\_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" );
} }
if ( self.solo ) if ( self.solo )
{ {
playfx( level._effect["powerup_grabbed_solo"], self.origin ); playfx( level._effect["powerup_grabbed_solo"], self.origin );
playfx( level._effect["powerup_grabbed_wave_solo"], self.origin ); playfx( level._effect["powerup_grabbed_wave_solo"], self.origin );
} }
else if ( self.caution ) else if ( self.caution )
{ {
playfx( level._effect["powerup_grabbed_caution"], self.origin ); playfx( level._effect["powerup_grabbed_caution"], self.origin );
playfx( level._effect["powerup_grabbed_wave_caution"], self.origin ); playfx( level._effect["powerup_grabbed_wave_caution"], self.origin );
} }
else else
{ {
playfx( level._effect["powerup_grabbed"], self.origin ); playfx( level._effect["powerup_grabbed"], self.origin );
playfx( level._effect["powerup_grabbed_wave"], self.origin ); playfx( level._effect["powerup_grabbed_wave"], self.origin );
} }
if ( isdefined( self.stolen ) && self.stolen ) if ( isdefined( self.stolen ) && self.stolen )
level notify( "monkey_see_monkey_dont_achieved" ); level notify( "monkey_see_monkey_dont_achieved" );
if ( isdefined( self.grabbed_level_notify ) ) if ( isdefined( self.grabbed_level_notify ) )
level notify( self.grabbed_level_notify ); level notify( self.grabbed_level_notify );
self.claimed = 1; self.claimed = 1;
wait 0.1; wait 0.1;
playsoundatposition( "zmb_powerup_grabbed", self.origin ); playsoundatposition( "zmb_powerup_grabbed", self.origin );
self stoploopsound(); self stoploopsound();
self hide(); self hide();
if ( self.powerup_name != "fire_sale" ) if ( self.powerup_name != "fire_sale" )
{ {
if ( isdefined( self.power_up_grab_player ) ) if ( isdefined( self.power_up_grab_player ) )
{ {
if ( isdefined( level.powerup_intro_vox ) ) if ( isdefined( level.powerup_intro_vox ) )
{ {
level thread [[ level.powerup_intro_vox ]]( self ); level thread [[ level.powerup_intro_vox ]]( self );
return; return;
} }
else if ( isdefined( level.powerup_vo_available ) ) else if ( isdefined( level.powerup_vo_available ) )
{ {
can_say_vo = [[ level.powerup_vo_available ]](); can_say_vo = [[ level.powerup_vo_available ]]();
if ( !can_say_vo ) if ( !can_say_vo )
{ {
self powerup_delete(); self powerup_delete();
self notify( "powerup_grabbed" ); self notify( "powerup_grabbed" );
return; return;
} }
} }
} }
} }
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers["team"] ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers["team"] );
self powerup_delete(); self powerup_delete();
self notify( "powerup_grabbed" ); self notify( "powerup_grabbed" );
} }
} }
wait 0.1; wait 0.1;
} }
} }
full_ammo_powerup( drop_item, player ) full_ammo_powerup( drop_item, player )
@ -390,32 +390,32 @@ full_ammo_powerup( drop_item, player )
full_ammo_on_hud( drop_item, player_team ) full_ammo_on_hud( drop_item, player_team )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
hudelem = maps\mp\gametypes_zm\_hud_util::createserverfontstring( "objective", 2, player_team ); hudelem = maps\mp\gametypes_zm\_hud_util::createserverfontstring( "objective", 2, player_team );
hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - level.zombie_vars["zombie_timer_offset_interval"] * 2 ); hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - level.zombie_vars["zombie_timer_offset_interval"] * 2 );
hudelem.sort = 0.5; hudelem.sort = 0.5;
hudelem.alpha = 0; hudelem.alpha = 0;
hudelem fadeovertime( 0.5 ); hudelem fadeovertime( 0.5 );
hudelem.alpha = 1; hudelem.alpha = 1;
if ( isdefined( drop_item ) ) if ( isdefined( drop_item ) )
hudelem.label = drop_item.hint; hudelem.label = drop_item.hint;
hudelem thread full_ammo_move_hud( player_team ); hudelem thread full_ammo_move_hud( player_team );
} }
full_ammo_move_hud( player_team ) full_ammo_move_hud( player_team )
{ {
players = get_players( player_team ); players = get_players( player_team );
players[0] playsoundtoteam( "zmb_full_ammo", player_team ); players[0] playsoundtoteam( "zmb_full_ammo", player_team );
wait 0.5; wait 0.5;
move_fade_time = 1.5; move_fade_time = 1.5;
self fadeovertime( move_fade_time ); self fadeovertime( move_fade_time );
self moveovertime( move_fade_time ); self moveovertime( move_fade_time );
self.y = 270; self.y = 270;
self.alpha = 0; self.alpha = 0;
wait( move_fade_time ); wait( move_fade_time );
self destroyelem(); self destroyelem();
} }
empty_clip_powerup( drop_item, player ) empty_clip_powerup( drop_item, player )
@ -495,48 +495,48 @@ nuke_powerup( drop_item, player_team )
zombies_nuked = []; zombies_nuked = [];
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].ignore_nuke ) && zombies[i].ignore_nuke ) if ( isdefined( zombies[i].ignore_nuke ) && zombies[i].ignore_nuke )
continue; continue;
if ( isdefined( zombies[i].marked_for_death ) && zombies[i].marked_for_death ) if ( isdefined( zombies[i].marked_for_death ) && zombies[i].marked_for_death )
continue; continue;
if ( isdefined( zombies[i].nuke_damage_func ) ) if ( isdefined( zombies[i].nuke_damage_func ) )
{ {
zombies[i] thread [[ zombies[i].nuke_damage_func ]](); zombies[i] thread [[ zombies[i].nuke_damage_func ]]();
continue; continue;
} }
if ( is_magic_bullet_shield_enabled( zombies[i] ) ) if ( is_magic_bullet_shield_enabled( zombies[i] ) )
continue; continue;
zombies[i].marked_for_death = 1; zombies[i].marked_for_death = 1;
zombies[i].nuked = 1; zombies[i].nuked = 1;
zombies_nuked[zombies_nuked.size] = zombies[i]; zombies_nuked[zombies_nuked.size] = zombies[i];
} }
for ( i = 0; i < zombies_nuked.size; i++ ) for ( i = 0; i < zombies_nuked.size; i++ )
{ {
if ( !isdefined( zombies_nuked[i] ) ) if ( !isdefined( zombies_nuked[i] ) )
continue; continue;
if ( is_magic_bullet_shield_enabled( zombies_nuked[i] ) ) if ( is_magic_bullet_shield_enabled( zombies_nuked[i] ) )
continue; continue;
if ( i < 5 && !zombies_nuked[i].isdog ) if ( i < 5 && !zombies_nuked[i].isdog )
zombies_nuked[i] thread maps\mp\animscripts\zm_death::flame_death_fx(); zombies_nuked[i] thread maps\mp\animscripts\zm_death::flame_death_fx();
if ( !zombies_nuked[i].isdog ) if ( !zombies_nuked[i].isdog )
{ {
if ( !( isdefined( zombies_nuked[i].no_gib ) && zombies_nuked[i].no_gib ) ) if ( !( isdefined( zombies_nuked[i].no_gib ) && zombies_nuked[i].no_gib ) )
zombies_nuked[i] maps\mp\zombies\_zm_spawner::zombie_head_gib(); zombies_nuked[i] maps\mp\zombies\_zm_spawner::zombie_head_gib();
zombies_nuked[i] playsound( "evt_nuked" ); zombies_nuked[i] playsound( "evt_nuked" );
} }
zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin ); zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin );
} }
players = get_players( player_team ); players = get_players( player_team );
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
@ -779,20 +779,20 @@ start_fire_sale( item )
{ {
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "fire_sale", getotherteam( item.power_up_grab_player.pers["team"] ) ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "fire_sale", getotherteam( item.power_up_grab_player.pers["team"] ) );
if ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 && is_true( level.zombie_vars["zombie_powerup_fire_sale_on"] ) ) if ( level.zombie_vars["zombie_powerup_fire_sale_time"] > 0 && is_true( level.zombie_vars["zombie_powerup_fire_sale_on"] ) )
{ {
level.zombie_vars["zombie_powerup_fire_sale_time"] += 30; level.zombie_vars["zombie_powerup_fire_sale_time"] += 30;
return; return;
} }
level notify( "powerup fire sale" ); level notify( "powerup fire sale" );
level endon( "powerup fire sale" ); level endon( "powerup fire sale" );
level.zombie_vars["zombie_powerup_fire_sale_on"] = 1; level.zombie_vars["zombie_powerup_fire_sale_on"] = 1;
level thread toggle_fire_sale_on(); level thread toggle_fire_sale_on();
for ( level.zombie_vars["zombie_powerup_fire_sale_time"] = 30; level.zombie_vars["zombie_powerup_fire_sale_time"] > 0; level.zombie_vars["zombie_powerup_fire_sale_time"] -= 0.05 ) for ( level.zombie_vars["zombie_powerup_fire_sale_time"] = 30; level.zombie_vars["zombie_powerup_fire_sale_time"] > 0; level.zombie_vars["zombie_powerup_fire_sale_time"] -= 0.05 )
wait 0.05; wait 0.05;
level.zombie_vars["zombie_powerup_fire_sale_on"] = 0; level.zombie_vars["zombie_powerup_fire_sale_on"] = 0;
level notify( "fire_sale_off" ); level notify( "fire_sale_off" );
} }

View File

@ -9,139 +9,139 @@
doriotshielddeploy( origin, angles ) doriotshielddeploy( origin, angles )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "start_riotshield_deploy" ); self endon( "start_riotshield_deploy" );
self notify( "deployed_riotshield" ); self notify( "deployed_riotshield" );
self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name );
if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name );
zoffset = level.riotshield_placement_zoffset; zoffset = level.riotshield_placement_zoffset;
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
item_ent = deployriotshield( self, shield_ent ); item_ent = deployriotshield( self, shield_ent );
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep);
if ( isdefined( level.equipment_planted ) ) if ( isdefined( level.equipment_planted ) )
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
if ( isdefined( level.equipment_safe_to_drop ) ) if ( isdefined( level.equipment_safe_to_drop ) )
{ {
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
{ {
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
shield_ent delete(); shield_ent delete();
item_ent delete(); item_ent delete();
return; return;
} }
} }
self.riotshieldretrievetrigger = item_ent; self.riotshieldretrievetrigger = item_ent;
self.riotshieldentity = shield_ent; self.riotshieldentity = shield_ent;
self thread watchdeployedriotshieldents(); self thread watchdeployedriotshieldents();
self thread deleteshieldondamage( self.riotshieldentity ); self thread deleteshieldondamage( self.riotshieldentity );
self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger );
self thread deleteriotshieldonplayerdeath(); self thread deleteriotshieldonplayerdeath();
self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger );
self.riotshieldentity thread watchdeployedriotshielddamage(); self.riotshieldentity thread watchdeployedriotshielddamage();
return shield_ent; return shield_ent;
} }
trackriotshield() trackriotshield()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name;
self.shield_placement = 0; self.shield_placement = 0;
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
else else
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
} }
for (;;) for (;;)
{ {
self waittill( "weapon_change", newweapon ); self waittill( "weapon_change", newweapon );
foreach (wep in self getWeaponsListPrimaries()) foreach (wep in self getWeaponsListPrimaries())
{ {
if (wep == newweapon) if (wep == newweapon)
{ {
self.riotshield_prev_wep = newweapon; self.riotshield_prev_wep = newweapon;
break; break;
} }
} }
if ( newweapon == level.riotshield_name ) if ( newweapon == level.riotshield_name )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
continue; continue;
if ( isdefined( self.riotshieldentity ) ) if ( isdefined( self.riotshieldentity ) )
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
self.hasriotshieldequipped = 1; self.hasriotshieldequipped = 1;
continue; continue;
} }
if ( self ismantling() && newweapon == "none" ) if ( self ismantling() && newweapon == "none" )
continue; continue;
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
assert( self.hasriotshield ); assert( self.hasriotshield );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden )
{ {
} }
else if ( self.hasriotshield ) else if ( self.hasriotshield )
self.shield_placement = 2; self.shield_placement = 2;
else if ( isdefined( self.shield_ent ) ) else if ( isdefined( self.shield_ent ) )
assert( self.shield_placement == 3 ); assert( self.shield_placement == 3 );
else else
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshieldequipped = 0; self.hasriotshieldequipped = 0;
continue; continue;
} }
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( !self hasweapon( level.riotshield_name ) ) if ( !self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 0; self.hasriotshield = 0;
} }
continue; continue;
} }
if ( self hasweapon( level.riotshield_name ) ) if ( self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
} }
} }
} }

View File

@ -9,139 +9,139 @@
doriotshielddeploy( origin, angles ) doriotshielddeploy( origin, angles )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "start_riotshield_deploy" ); self endon( "start_riotshield_deploy" );
self notify( "deployed_riotshield" ); self notify( "deployed_riotshield" );
self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name );
if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name );
zoffset = level.riotshield_placement_zoffset; zoffset = level.riotshield_placement_zoffset;
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
item_ent = deployriotshield( self, shield_ent ); item_ent = deployriotshield( self, shield_ent );
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep);
if ( isdefined( level.equipment_planted ) ) if ( isdefined( level.equipment_planted ) )
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
if ( isdefined( level.equipment_safe_to_drop ) ) if ( isdefined( level.equipment_safe_to_drop ) )
{ {
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
{ {
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
shield_ent delete(); shield_ent delete();
item_ent delete(); item_ent delete();
return; return;
} }
} }
self.riotshieldretrievetrigger = item_ent; self.riotshieldretrievetrigger = item_ent;
self.riotshieldentity = shield_ent; self.riotshieldentity = shield_ent;
self thread watchdeployedriotshieldents(); self thread watchdeployedriotshieldents();
self thread deleteshieldondamage( self.riotshieldentity ); self thread deleteshieldondamage( self.riotshieldentity );
self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger );
self thread deleteriotshieldonplayerdeath(); self thread deleteriotshieldonplayerdeath();
self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger );
self.riotshieldentity thread watchdeployedriotshielddamage(); self.riotshieldentity thread watchdeployedriotshielddamage();
return shield_ent; return shield_ent;
} }
trackriotshield() trackriotshield()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name;
self.shield_placement = 0; self.shield_placement = 0;
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
else else
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
} }
for (;;) for (;;)
{ {
self waittill( "weapon_change", newweapon ); self waittill( "weapon_change", newweapon );
foreach (wep in self getWeaponsListPrimaries()) foreach (wep in self getWeaponsListPrimaries())
{ {
if (wep == newweapon) if (wep == newweapon)
{ {
self.riotshield_prev_wep = newweapon; self.riotshield_prev_wep = newweapon;
break; break;
} }
} }
if ( newweapon == level.riotshield_name ) if ( newweapon == level.riotshield_name )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
continue; continue;
if ( isdefined( self.riotshieldentity ) ) if ( isdefined( self.riotshieldentity ) )
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
self.hasriotshieldequipped = 1; self.hasriotshieldequipped = 1;
continue; continue;
} }
if ( self ismantling() && newweapon == "none" ) if ( self ismantling() && newweapon == "none" )
continue; continue;
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
assert( self.hasriotshield ); assert( self.hasriotshield );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden )
{ {
} }
else if ( self.hasriotshield ) else if ( self.hasriotshield )
self.shield_placement = 2; self.shield_placement = 2;
else if ( isdefined( self.shield_ent ) ) else if ( isdefined( self.shield_ent ) )
assert( self.shield_placement == 3 ); assert( self.shield_placement == 3 );
else else
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshieldequipped = 0; self.hasriotshieldequipped = 0;
continue; continue;
} }
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( !self hasweapon( level.riotshield_name ) ) if ( !self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 0; self.hasriotshield = 0;
} }
continue; continue;
} }
if ( self hasweapon( level.riotshield_name ) ) if ( self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
} }
} }
} }

View File

@ -9,139 +9,139 @@
doriotshielddeploy( origin, angles ) doriotshielddeploy( origin, angles )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "start_riotshield_deploy" ); self endon( "start_riotshield_deploy" );
self notify( "deployed_riotshield" ); self notify( "deployed_riotshield" );
self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name );
if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name );
zoffset = level.riotshield_placement_zoffset; zoffset = level.riotshield_placement_zoffset;
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
item_ent = deployriotshield( self, shield_ent ); item_ent = deployriotshield( self, shield_ent );
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep);
if ( isdefined( level.equipment_planted ) ) if ( isdefined( level.equipment_planted ) )
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
if ( isdefined( level.equipment_safe_to_drop ) ) if ( isdefined( level.equipment_safe_to_drop ) )
{ {
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
{ {
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
shield_ent delete(); shield_ent delete();
item_ent delete(); item_ent delete();
return; return;
} }
} }
self.riotshieldretrievetrigger = item_ent; self.riotshieldretrievetrigger = item_ent;
self.riotshieldentity = shield_ent; self.riotshieldentity = shield_ent;
self thread watchdeployedriotshieldents(); self thread watchdeployedriotshieldents();
self thread deleteshieldondamage( self.riotshieldentity ); self thread deleteshieldondamage( self.riotshieldentity );
self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger );
self thread deleteriotshieldonplayerdeath(); self thread deleteriotshieldonplayerdeath();
self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger );
self.riotshieldentity thread watchdeployedriotshielddamage(); self.riotshieldentity thread watchdeployedriotshielddamage();
return shield_ent; return shield_ent;
} }
trackriotshield() trackriotshield()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name;
self.shield_placement = 0; self.shield_placement = 0;
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
else else
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
} }
} }
for (;;) for (;;)
{ {
self waittill( "weapon_change", newweapon ); self waittill( "weapon_change", newweapon );
foreach (wep in self getWeaponsListPrimaries()) foreach (wep in self getWeaponsListPrimaries())
{ {
if (wep == newweapon) if (wep == newweapon)
{ {
self.riotshield_prev_wep = newweapon; self.riotshield_prev_wep = newweapon;
break; break;
} }
} }
if ( newweapon == level.riotshield_name ) if ( newweapon == level.riotshield_name )
{ {
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
continue; continue;
if ( isdefined( self.riotshieldentity ) ) if ( isdefined( self.riotshieldentity ) )
self notify( "destroy_riotshield" ); self notify( "destroy_riotshield" );
self.shield_placement = 1; self.shield_placement = 1;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
self.hasriotshieldequipped = 1; self.hasriotshieldequipped = 1;
continue; continue;
} }
if ( self ismantling() && newweapon == "none" ) if ( self ismantling() && newweapon == "none" )
continue; continue;
if ( self.hasriotshieldequipped ) if ( self.hasriotshieldequipped )
{ {
assert( self.hasriotshield ); assert( self.hasriotshield );
self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshield = self hasweapon( level.riotshield_name );
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden )
{ {
} }
else if ( self.hasriotshield ) else if ( self.hasriotshield )
self.shield_placement = 2; self.shield_placement = 2;
else if ( isdefined( self.shield_ent ) ) else if ( isdefined( self.shield_ent ) )
assert( self.shield_placement == 3 ); assert( self.shield_placement == 3 );
else else
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshieldequipped = 0; self.hasriotshieldequipped = 0;
continue; continue;
} }
if ( self.hasriotshield ) if ( self.hasriotshield )
{ {
if ( !self hasweapon( level.riotshield_name ) ) if ( !self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 0; self.shield_placement = 0;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 0; self.hasriotshield = 0;
} }
continue; continue;
} }
if ( self hasweapon( level.riotshield_name ) ) if ( self hasweapon( level.riotshield_name ) )
{ {
self.shield_placement = 2; self.shield_placement = 2;
self updateriotshieldmodel(); self updateriotshieldmodel();
self.hasriotshield = 1; self.hasriotshield = 1;
} }
} }
} }

View File

@ -13,7 +13,7 @@ add_to_player_score( points, add_to_total )
{ {
return; return;
} }
points = int(points); // points must be an int points = int(points); // points must be an int
self.score += points; self.score += points;
self.pers[ "score" ] = self.score; self.pers[ "score" ] = self.score;
if ( add_to_total ) if ( add_to_total )
@ -29,42 +29,42 @@ minus_to_player_score( points )
{ {
return; return;
} }
points = int(points); // points must be an int points = int(points); // points must be an int
self.score -= points; self.score -= points;
self.pers[ "score" ] = self.score; self.pers[ "score" ] = self.score;
} }
player_add_points_kill_bonus( mod, hit_location ) player_add_points_kill_bonus( mod, hit_location )
{ {
if ( mod == "MOD_MELEE" ) if ( mod == "MOD_MELEE" )
{ {
self score_cf_increment_info( "death_melee" ); self score_cf_increment_info( "death_melee" );
return level.zombie_vars["zombie_score_bonus_melee"]; return level.zombie_vars["zombie_score_bonus_melee"];
} }
if ( mod == "MOD_BURNED" ) if ( mod == "MOD_BURNED" )
{ {
self score_cf_increment_info( "death_torso" ); self score_cf_increment_info( "death_torso" );
return level.zombie_vars["zombie_score_bonus_burn"]; return level.zombie_vars["zombie_score_bonus_burn"];
} }
score = 0; score = 0;
if ( isdefined( hit_location ) ) if ( isdefined( hit_location ) )
{ {
switch ( hit_location ) switch ( hit_location )
{ {
case "helmet": case "helmet":
case "head": case "head":
case "neck": case "neck":
self score_cf_increment_info( "death_head" ); self score_cf_increment_info( "death_head" );
score = level.zombie_vars["zombie_score_bonus_head"]; score = level.zombie_vars["zombie_score_bonus_head"];
break; break;
default: default:
self score_cf_increment_info( "death_normal" ); self score_cf_increment_info( "death_normal" );
break; break;
} }
} }
return score; return score;
} }

View File

@ -69,11 +69,11 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
damage = 2000; damage = 2000;
} }
max_damage = 9000; max_damage = 9000;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
} }
if ( isDefined( self.zombie_damage_claymore_func ) ) if ( isDefined( self.zombie_damage_claymore_func ) )
{ {
@ -96,11 +96,11 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
damage = 500; damage = 500;
} }
max_damage = 1500; max_damage = 1500;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
} }
if ( isDefined( player ) && isalive( player ) ) if ( isDefined( player ) && isalive( player ) )
{ {
@ -121,11 +121,11 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
damage = 1000; damage = 1000;
} }
max_damage = 3000; max_damage = 3000;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
} }
if ( isDefined( player ) && isalive( player ) ) if ( isDefined( player ) && isalive( player ) )
{ {
@ -171,128 +171,128 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
zombie_gib_on_damage() zombie_gib_on_damage()
{ {
while ( true ) while ( true )
{ {
self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname ); self waittill( "damage", amount, attacker, direction_vec, point, type, tagname, modelname, partname, weaponname );
if ( !isdefined( self ) ) if ( !isdefined( self ) )
return; return;
if ( !self zombie_should_gib( amount, attacker, type ) ) if ( !self zombie_should_gib( amount, attacker, type ) )
continue; continue;
if ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" ) if ( self head_should_gib( attacker, type, point ) && type != "MOD_BURNED" )
{ {
self zombie_head_gib( attacker, type ); self zombie_head_gib( attacker, type );
continue; continue;
} }
if ( !self.gibbed ) if ( !self.gibbed )
{ {
if ( self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) if ( self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) )
continue; continue;
refs = []; refs = [];
switch ( self.damagelocation ) switch ( self.damagelocation )
{ {
case "torso_upper": case "torso_upper":
case "torso_lower": case "torso_lower":
refs[refs.size] = "guts"; refs[refs.size] = "guts";
refs[refs.size] = "right_arm"; refs[refs.size] = "right_arm";
break; break;
case "right_hand": case "right_hand":
case "right_arm_upper": case "right_arm_upper":
case "right_arm_lower": case "right_arm_lower":
refs[refs.size] = "right_arm"; refs[refs.size] = "right_arm";
break; break;
case "left_hand": case "left_hand":
case "left_arm_upper": case "left_arm_upper":
case "left_arm_lower": case "left_arm_lower":
refs[refs.size] = "left_arm"; refs[refs.size] = "left_arm";
break; break;
case "right_leg_upper": case "right_leg_upper":
case "right_leg_lower": case "right_leg_lower":
case "right_foot": case "right_foot":
if ( self.health <= 0 ) if ( self.health <= 0 )
{ {
refs[refs.size] = "right_leg"; refs[refs.size] = "right_leg";
refs[refs.size] = "right_leg"; refs[refs.size] = "right_leg";
refs[refs.size] = "right_leg"; refs[refs.size] = "right_leg";
refs[refs.size] = "no_legs"; refs[refs.size] = "no_legs";
} }
break; break;
case "left_leg_upper": case "left_leg_upper":
case "left_leg_lower": case "left_leg_lower":
case "left_foot": case "left_foot":
if ( self.health <= 0 ) if ( self.health <= 0 )
{ {
refs[refs.size] = "left_leg"; refs[refs.size] = "left_leg";
refs[refs.size] = "left_leg"; refs[refs.size] = "left_leg";
refs[refs.size] = "left_leg"; refs[refs.size] = "left_leg";
refs[refs.size] = "no_legs"; refs[refs.size] = "no_legs";
} }
break; break;
default: default:
if ( self.damagelocation == "none" ) if ( self.damagelocation == "none" )
{ {
if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" )
{ {
refs = self derive_damage_refs( point ); refs = self derive_damage_refs( point );
break; break;
} }
} }
else else
{ {
refs[refs.size] = "guts"; refs[refs.size] = "guts";
refs[refs.size] = "right_arm"; refs[refs.size] = "right_arm";
refs[refs.size] = "left_arm"; refs[refs.size] = "left_arm";
refs[refs.size] = "right_leg"; refs[refs.size] = "right_leg";
refs[refs.size] = "left_leg"; refs[refs.size] = "left_leg";
refs[refs.size] = "no_legs"; refs[refs.size] = "no_legs";
break; break;
} }
} }
if ( isdefined( level.custom_derive_damage_refs ) ) if ( isdefined( level.custom_derive_damage_refs ) )
refs = self [[ level.custom_derive_damage_refs ]]( refs, point, weaponname ); refs = self [[ level.custom_derive_damage_refs ]]( refs, point, weaponname );
if ( refs.size ) if ( refs.size )
{ {
self.a.gib_ref = maps\mp\animscripts\zm_death::get_random( refs ); self.a.gib_ref = maps\mp\animscripts\zm_death::get_random( refs );
if ( ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) && self.health > 0 ) if ( ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) && self.health > 0 )
{ {
self.has_legs = 0; self.has_legs = 0;
self allowedstances( "crouch" ); self allowedstances( "crouch" );
self setphysparams( 15, 0, 24 ); self setphysparams( 15, 0, 24 );
self allowpitchangle( 1 ); self allowpitchangle( 1 );
self setpitchorient(); self setpitchorient();
health = self.health; health = self.health;
health *= 0.1; health *= 0.1;
self thread maps\mp\animscripts\zm_run::needsdelayedupdate(); self thread maps\mp\animscripts\zm_run::needsdelayedupdate();
if (level.scr_zm_ui_gametype == "zgrief") if (level.scr_zm_ui_gametype == "zgrief")
{ {
self thread bleedout_watcher(); self thread bleedout_watcher();
} }
if ( isdefined( self.crawl_anim_override ) ) if ( isdefined( self.crawl_anim_override ) )
self [[ self.crawl_anim_override ]](); self [[ self.crawl_anim_override ]]();
} }
} }
if ( self.health > 0 ) if ( self.health > 0 )
{ {
self thread maps\mp\animscripts\zm_death::do_gib(); self thread maps\mp\animscripts\zm_death::do_gib();
if ( isdefined( level.gib_on_damage ) ) if ( isdefined( level.gib_on_damage ) )
self thread [[ level.gib_on_damage ]](); self thread [[ level.gib_on_damage ]]();
} }
} }
} }
} }
bleedout_watcher() bleedout_watcher()
@ -355,35 +355,35 @@ head_should_gib( attacker, type, point )
weapon = attacker getcurrentweapon(); weapon = attacker getcurrentweapon();
if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" ) if ( type != "MOD_RIFLE_BULLET" && type != "MOD_PISTOL_BULLET" )
{ {
if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" ) if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" )
{ {
if ( ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) || ( self.health > 0 ) ) if ( ( distance( point, self gettagorigin( "j_head" ) ) > 55 ) || ( self.health > 0 ) )
{ {
return 0; return 0;
} }
else else
{ {
return 1; return 1;
} }
} }
else if ( type == "MOD_PROJECTILE" ) else if ( type == "MOD_PROJECTILE" )
{ {
if ( ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) || ( self.health > 0 ) ) if ( ( distance( point, self gettagorigin( "j_head" ) ) > 10 ) || ( self.health > 0 ) )
{ {
return 0; return 0;
} }
else else
{ {
return 1; return 1;
} }
} }
else if ( weaponclass( weapon ) != "spread" ) else if ( weaponclass( weapon ) != "spread" )
{ {
return 0; return 0;
} }
} }
if ( !self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) ) if ( !self maps\mp\animscripts\zm_utility::damagelocationisany( "head", "helmet", "neck" ) )
{ {
@ -395,7 +395,7 @@ head_should_gib( attacker, type, point )
return 0; return 0;
} }
self zombie_hat_gib( attacker, type ); self zombie_hat_gib( attacker, type );
if ( self.health > 0 ) if ( self.health > 0 )
{ {
@ -407,13 +407,13 @@ head_should_gib( attacker, type, point )
zombie_can_drop_powerups( zombie ) zombie_can_drop_powerups( zombie )
{ {
if ( !flag( "zombie_drop_powerups" ) ) if ( !flag( "zombie_drop_powerups" ) )
return false; return false;
if ( isdefined( zombie.no_powerups ) && zombie.no_powerups ) if ( isdefined( zombie.no_powerups ) && zombie.no_powerups )
return false; return false;
return true; return true;
} }
zombie_complete_emerging_into_playable_area() zombie_complete_emerging_into_playable_area()
@ -423,8 +423,8 @@ zombie_complete_emerging_into_playable_area()
self setphysparams( 15, 0, 60 ); self setphysparams( 15, 0, 60 );
} }
self.completed_emerging_into_playable_area = 1; self.completed_emerging_into_playable_area = 1;
self notify( "completed_emerging_into_playable_area" ); self notify( "completed_emerging_into_playable_area" );
self.no_powerups = 0; self.no_powerups = 0;
self thread zombie_free_cam_allowed(); self thread zombie_free_cam_allowed();
} }

View File

@ -4,25 +4,25 @@
navcomputer_waitfor_navcard() navcomputer_waitfor_navcard()
{ {
trig_pos = getstruct( "sq_common_key", "targetname" ); trig_pos = getstruct( "sq_common_key", "targetname" );
navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 ); navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 );
navcomputer_use_trig.cost = 100000; navcomputer_use_trig.cost = 100000;
navcomputer_use_trig setcursorhint( "HINT_NOICON" ); navcomputer_use_trig setcursorhint( "HINT_NOICON" );
navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE", " [Cost: " + navcomputer_use_trig.cost + "]" ); navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE", " [Cost: " + navcomputer_use_trig.cost + "]" );
navcomputer_use_trig triggerignoreteam(); navcomputer_use_trig triggerignoreteam();
while ( true ) while ( true )
{ {
navcomputer_use_trig waittill( "trigger", who ); navcomputer_use_trig waittill( "trigger", who );
if ( isplayer( who ) && is_player_valid( who ) ) if ( isplayer( who ) && is_player_valid( who ) )
{ {
if ( who.score >= navcomputer_use_trig.cost ) if ( who.score >= navcomputer_use_trig.cost )
{ {
who maps\mp\zombies\_zm_score::minus_to_player_score( navcomputer_use_trig.cost ); who maps\mp\zombies\_zm_score::minus_to_player_score( navcomputer_use_trig.cost );
navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" ); navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" );
navcomputer_use_trig playsound( "zmb_sq_navcard_success" ); navcomputer_use_trig playsound( "zmb_sq_navcard_success" );
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
@ -32,52 +32,52 @@ navcomputer_waitfor_navcard()
level notify( "end_game" ); level notify( "end_game" );
return; return;
} }
else else
{ {
navcomputer_use_trig playsound( "zmb_sq_navcard_fail" ); navcomputer_use_trig playsound( "zmb_sq_navcard_fail" );
} }
} }
} }
} }
sq_give_player_all_perks() sq_give_player_all_perks()
{ {
perks = []; perks = [];
if ( isDefined( level._random_perk_machine_perk_list ) ) if ( isDefined( level._random_perk_machine_perk_list ) )
{ {
perks = array_randomize( level._random_perk_machine_perk_list ); perks = array_randomize( level._random_perk_machine_perk_list );
} }
else else
{ {
machines = array_randomize( getentarray( "zombie_vending", "targetname" ) ); machines = array_randomize( getentarray( "zombie_vending", "targetname" ) );
for ( i = 0; i < machines.size; i++ ) for ( i = 0; i < machines.size; i++ )
{ {
if ( machines[i].script_noteworthy == "specialty_weapupgrade" ) if ( machines[i].script_noteworthy == "specialty_weapupgrade" )
continue; continue;
perks[perks.size] = machines[i].script_noteworthy; perks[perks.size] = machines[i].script_noteworthy;
} }
} }
foreach ( perk in perks ) foreach ( perk in perks )
{ {
if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk )
continue; continue;
if ( self hasperk( perk ) || self maps\mp\zombies\_zm_perks::has_perk_paused( perk ) ) if ( self hasperk( perk ) || self maps\mp\zombies\_zm_perks::has_perk_paused( perk ) )
continue; continue;
self maps\mp\zombies\_zm_perks::give_perk( perk, 0 ); self maps\mp\zombies\_zm_perks::give_perk( perk, 0 );
wait 0.25; wait 0.25;
} }
} }
sq_complete_time_hud() sq_complete_time_hud()
{ {
hud = newHudElem(); hud = newHudElem();
hud.alignx = "center"; hud.alignx = "center";
hud.aligny = "top"; hud.aligny = "top";
hud.horzalign = "user_center"; hud.horzalign = "user_center";
@ -90,22 +90,22 @@ sq_complete_time_hud()
hud.foreground = 1; hud.foreground = 1;
hud.label = &"Quest Complete! Time: "; hud.label = &"Quest Complete! Time: ";
hud endon("death"); hud endon("death");
hud thread scripts\zm\_zm_reimagined::destroy_on_intermission(); hud thread scripts\zm\_zm_reimagined::destroy_on_intermission();
fade_time = 0.5; fade_time = 0.5;
hud fadeOverTime(fade_time); hud fadeOverTime(fade_time);
hud.alpha = 1; hud.alpha = 1;
time = int((getTime() - level.timer_hud_start_time) / 1000); time = int((getTime() - level.timer_hud_start_time) / 1000);
hud thread scripts\zm\_zm_reimagined::set_time_frozen(time, "forever"); hud thread scripts\zm\_zm_reimagined::set_time_frozen(time, "forever");
wait 10; wait 10;
hud fadeOverTime(fade_time); hud fadeOverTime(fade_time);
hud.alpha = 0; hud.alpha = 0;
wait fade_time; wait fade_time;

View File

@ -9,11 +9,11 @@
set_global_stat( stat_name, value ) set_global_stat( stat_name, value )
{ {
if ( is_true( level.zm_disable_recording_stats ) ) if ( is_true( level.zm_disable_recording_stats ) )
return; return;
if ( issubstr( tolower( stat_name ), "sq_" ) || issubstr( tolower( stat_name ), "navcard_" ) ) if ( issubstr( tolower( stat_name ), "sq_" ) || issubstr( tolower( stat_name ), "navcard_" ) )
value = 0; value = 0;
self setdstat( "PlayerStatsList", stat_name, "StatValue", value ); self setdstat( "PlayerStatsList", stat_name, "StatValue", value );
} }

View File

@ -9,8 +9,8 @@ player_elec_damage()
if ( !isDefined( self.is_burning ) && is_player_valid( self ) ) if ( !isDefined( self.is_burning ) && is_player_valid( self ) )
{ {
self.is_burning = 1; self.is_burning = 1;
shocktime = 1.25; shocktime = 1.25;
if ( is_true( level.trap_electric_visionset_registered ) ) if ( is_true( level.trap_electric_visionset_registered ) )
{ {
@ -23,10 +23,10 @@ player_elec_damage()
self shellshock( "electrocution", shocktime ); self shellshock( "electrocution", shocktime );
self playsound( "zmb_zombie_arc" ); self playsound( "zmb_zombie_arc" );
radiusdamage( self.origin + (0, 0, 5), 10, 25, 25 ); radiusdamage( self.origin + (0, 0, 5), 10, 25, 25 );
wait 0.1; wait 0.1;
self.is_burning = undefined; self.is_burning = undefined;
} }
} }

View File

@ -12,11 +12,11 @@ init_player_offhand_weapons()
} }
} }
init_player_lethal_grenade(); init_player_lethal_grenade();
init_player_tactical_grenade(); init_player_tactical_grenade();
init_player_placeable_mine(); init_player_placeable_mine();
init_player_melee_weapon(); init_player_melee_weapon();
init_player_equipment(); init_player_equipment();
} }
is_headshot( sweapon, shitloc, smeansofdeath ) is_headshot( sweapon, shitloc, smeansofdeath )
@ -36,35 +36,35 @@ is_headshot( sweapon, shitloc, smeansofdeath )
shock_onpain() shock_onpain()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self notify( "stop_shock_onpain" ); self notify( "stop_shock_onpain" );
self endon( "stop_shock_onpain" ); self endon( "stop_shock_onpain" );
if ( getdvar( "blurpain" ) == "" ) if ( getdvar( "blurpain" ) == "" )
setdvar( "blurpain", "on" ); setdvar( "blurpain", "on" );
while ( true ) while ( true )
{ {
oldhealth = self.health; oldhealth = self.health;
self waittill( "damage", damage, attacker, direction_vec, point, mod ); self waittill( "damage", damage, attacker, direction_vec, point, mod );
if ( isdefined( level.shock_onpain ) && !level.shock_onpain ) if ( isdefined( level.shock_onpain ) && !level.shock_onpain )
continue; continue;
if ( isdefined( self.shock_onpain ) && !self.shock_onpain ) if ( isdefined( self.shock_onpain ) && !self.shock_onpain )
continue; continue;
if ( self.health < 1 ) if ( self.health < 1 )
continue; continue;
if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" || mod == "MOD_EXPLOSIVE" ) if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_GRENADE_SPLASH" || mod == "MOD_GRENADE" || mod == "MOD_EXPLOSIVE" )
{ {
if ( is_true( self.is_burning ) ) if ( is_true( self.is_burning ) )
{ {
self shock_onexplosion( damage, "lava", "lava_small" ); self shock_onexplosion( damage, "lava", "lava_small" );
} }
else if ( mod == "MOD_EXPLOSIVE" ) else if ( mod == "MOD_EXPLOSIVE" )
{ {
self shock_onexplosion( damage ); self shock_onexplosion( damage );
@ -73,12 +73,12 @@ shock_onpain()
{ {
self shellshock( "pain", 0.5 ); self shellshock( "pain", 0.5 );
} }
} }
else if ( getdvar( "blurpain" ) == "on" ) else if ( getdvar( "blurpain" ) == "on" )
{ {
self shellshock( "pain", 0.5 ); self shellshock( "pain", 0.5 );
} }
} }
} }
create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width ) create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per_dist, attractor_width )
@ -164,96 +164,96 @@ create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per
check_point_in_life_brush( origin ) check_point_in_life_brush( origin )
{ {
life_brushes = getentarray( "life_brush", "script_noteworthy" ); life_brushes = getentarray( "life_brush", "script_noteworthy" );
if ( !isdefined( life_brushes ) ) if ( !isdefined( life_brushes ) )
return false; return false;
check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) );
valid_point = 0; valid_point = 0;
for ( i = 0; i < life_brushes.size; i++ ) for ( i = 0; i < life_brushes.size; i++ )
{ {
if ( check_model istouching( life_brushes[i] ) ) if ( check_model istouching( life_brushes[i] ) )
{ {
valid_point = 1; valid_point = 1;
break; break;
} }
} }
check_model delete(); check_model delete();
return valid_point; return valid_point;
} }
check_point_in_kill_brush( origin ) check_point_in_kill_brush( origin )
{ {
kill_brushes = getentarray( "kill_brush", "script_noteworthy" ); kill_brushes = getentarray( "kill_brush", "script_noteworthy" );
if ( !isdefined( kill_brushes ) ) if ( !isdefined( kill_brushes ) )
return false; return false;
check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ); check_model = spawn( "script_model", origin + vectorscale( ( 0, 0, 1 ), 40.0 ) );
valid_point = 0; valid_point = 0;
for ( i = 0; i < kill_brushes.size; i++ ) for ( i = 0; i < kill_brushes.size; i++ )
{ {
if ( check_model istouching( kill_brushes[i] ) ) if ( check_model istouching( kill_brushes[i] ) )
{ {
valid_point = 1; valid_point = 1;
break; break;
} }
} }
check_model delete(); check_model delete();
return valid_point; return valid_point;
} }
get_current_zone( return_zone ) get_current_zone( return_zone )
{ {
flag_wait( "zones_initialized" ); flag_wait( "zones_initialized" );
if ( isDefined( self.prev_zone ) ) if ( isDefined( self.prev_zone ) )
{ {
for ( i = 0; i < self.prev_zone.volumes.size; i++ ) for ( i = 0; i < self.prev_zone.volumes.size; i++ )
{ {
if ( self istouching( self.prev_zone.volumes[i] ) ) if ( self istouching( self.prev_zone.volumes[i] ) )
{ {
if ( isdefined( return_zone ) && return_zone ) if ( isdefined( return_zone ) && return_zone )
{ {
return self.prev_zone; return self.prev_zone;
} }
return self.prev_zone_name; return self.prev_zone_name;
} }
} }
} }
for ( z = 0; z < level.zone_keys.size; z++ ) for ( z = 0; z < level.zone_keys.size; z++ )
{ {
zone_name = level.zone_keys[z]; zone_name = level.zone_keys[z];
zone = level.zones[zone_name]; zone = level.zones[zone_name];
for ( i = 0; i < zone.volumes.size; i++ ) for ( i = 0; i < zone.volumes.size; i++ )
{ {
if ( self istouching( zone.volumes[i] ) ) if ( self istouching( zone.volumes[i] ) )
{ {
self.prev_zone = zone; self.prev_zone = zone;
self.prev_zone_name = zone_name; self.prev_zone_name = zone_name;
if ( isdefined( return_zone ) && return_zone ) if ( isdefined( return_zone ) && return_zone )
{ {
return zone; return zone;
} }
return zone_name; return zone_name;
} }
} }
} }
self.prev_zone = undefined; self.prev_zone = undefined;
self.prev_zone_name = undefined; self.prev_zone_name = undefined;
return undefined; return undefined;
} }
is_temporary_zombie_weapon( str_weapon ) is_temporary_zombie_weapon( str_weapon )
@ -263,12 +263,12 @@ is_temporary_zombie_weapon( str_weapon )
return 1; return 1;
} }
return is_zombie_perk_bottle( str_weapon ) || str_weapon == level.revive_tool || str_weapon == "zombie_builder_zm" || str_weapon == "chalk_draw_zm" || str_weapon == "no_hands_zm" || issubstr( str_weapon, "_flourish" ); return is_zombie_perk_bottle( str_weapon ) || str_weapon == level.revive_tool || str_weapon == "zombie_builder_zm" || str_weapon == "chalk_draw_zm" || str_weapon == "no_hands_zm" || issubstr( str_weapon, "_flourish" );
} }
wait_network_frame() wait_network_frame()
{ {
wait 0.1; wait 0.1;
} }
track_players_intersection_tracker() track_players_intersection_tracker()

View File

@ -10,14 +10,14 @@ on_spawn( watcher, player )
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
level endon( "game_ended" ); level endon( "game_ended" );
is_upgraded = player maps\mp\zombies\_zm_melee_weapon::has_upgraded_ballistic_knife(); is_upgraded = player maps\mp\zombies\_zm_melee_weapon::has_upgraded_ballistic_knife();
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
if( is_upgraded && isDefined( prey ) && isplayer( prey ) && prey.team == player.team && prey maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if( is_upgraded && isDefined( prey ) && isplayer( prey ) && prey.team == player.team && prey maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
return; return;
} }
if ( isDefined( endpos ) ) if ( isDefined( endpos ) )
{ {
@ -27,7 +27,7 @@ on_spawn( watcher, player )
retrievable_model.owner = player; retrievable_model.owner = player;
retrievable_model.angles = angles; retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon; retrievable_model.name = watcher.weapon;
isfriendly = 0; isfriendly = 0;
if ( isDefined( prey ) ) if ( isDefined( prey ) )
{ {
if ( isplayer( prey ) ) if ( isplayer( prey ) )
@ -38,11 +38,11 @@ on_spawn( watcher, player )
{ {
isfriendly = 1; isfriendly = 1;
} }
if ( isfriendly ) if ( isfriendly )
{ {
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 ); normal = ( 0, 0, 1 );
} }
else else
{ {
retrievable_model linkto( prey, bone ); retrievable_model linkto( prey, bone );
@ -51,14 +51,14 @@ on_spawn( watcher, player )
} }
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
retrievable_model thread drop_knives_to_ground( player ); retrievable_model thread drop_knives_to_ground( player );
if( isfriendly ) if( isfriendly )
{ {
player notify( "ballistic_knife_stationary", retrievable_model, normal ); player notify( "ballistic_knife_stationary", retrievable_model, normal );
} }
else else
{ {
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
} }
} }
} }
@ -83,30 +83,30 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
{ {
continue; continue;
} }
if ( isDefined( trigger.owner ) && player != trigger.owner ) if ( isDefined( trigger.owner ) && player != trigger.owner )
{ {
continue; continue;
} }
if ( player getcurrentweapon() == weapon && player getweaponammostock( weapon ) >= weaponmaxammo( weapon ) ) if ( player getcurrentweapon() == weapon && player getweaponammostock( weapon ) >= weaponmaxammo( weapon ) )
{ {
continue; continue;
} }
if ( !autorecover && !is_true( trigger.force_pickup ) ) if ( !autorecover && !is_true( trigger.force_pickup ) )
{ {
if( player.throwinggrenade || player meleebuttonpressed() ) if( player.throwinggrenade || player meleebuttonpressed() )
{ {
continue; continue;
} }
} }
if ( isDefined( playersoundonuse ) ) if ( isDefined( playersoundonuse ) )
{ {
player playlocalsound( playersoundonuse ); player playlocalsound( playersoundonuse );
} }
if ( isDefined( npcsoundonuse ) ) if ( isDefined( npcsoundonuse ) )
{ {
player playsound( npcsoundonuse ); player playsound( npcsoundonuse );
} }
player thread [[ callback ]]( weapon, model, trigger ); player thread [[ callback ]]( weapon, model, trigger );
return; return;
} }
} }

View File

@ -11,200 +11,200 @@
player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff ) player_throw_beacon( grenade, num_attractors, max_attract_dist, attract_dist_diff )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "starting_beacon_watch" ); self endon( "starting_beacon_watch" );
if ( isdefined( grenade ) ) if ( isdefined( grenade ) )
{ {
grenade endon( "death" ); grenade endon( "death" );
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
if ( isdefined( grenade.damagearea ) ) if ( isdefined( grenade.damagearea ) )
grenade.damagearea delete(); grenade.damagearea delete();
grenade delete(); grenade delete();
return; return;
} }
grenade hide(); grenade hide();
model = spawn( "script_model", grenade.origin ); model = spawn( "script_model", grenade.origin );
model endon( "weapon_beacon_timeout" ); model endon( "weapon_beacon_timeout" );
model setmodel( "t6_wpn_zmb_homing_beacon_world" ); model setmodel( "t6_wpn_zmb_homing_beacon_world" );
model useanimtree( #animtree ); model useanimtree( #animtree );
model linkto( grenade ); model linkto( grenade );
model.angles = grenade.angles; model.angles = grenade.angles;
model thread beacon_cleanup( grenade ); model thread beacon_cleanup( grenade );
model.owner = self; model.owner = self;
clone = undefined; clone = undefined;
if ( isdefined( level.beacon_dual_view ) && level.beacon_dual_view ) if ( isdefined( level.beacon_dual_view ) && level.beacon_dual_view )
{ {
model setvisibletoallexceptteam( level.zombie_team ); model setvisibletoallexceptteam( level.zombie_team );
clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.beacon_clone_weapon, undefined ); clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.beacon_clone_weapon, undefined );
model.simulacrum = clone; model.simulacrum = clone;
clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); clone maps\mp\zombies\_zm_clone::clone_animate( "idle" );
clone thread clone_player_angles( self ); clone thread clone_player_angles( self );
clone notsolid(); clone notsolid();
clone ghost(); clone ghost();
} }
grenade thread watch_for_dud( model, clone ); grenade thread watch_for_dud( model, clone );
info = spawnstruct(); info = spawnstruct();
info.sound_attractors = []; info.sound_attractors = [];
grenade thread monitor_zombie_groans( info ); grenade thread monitor_zombie_groans( info );
grenade waittill( "stationary" ); grenade waittill( "stationary" );
if ( isdefined( level.grenade_planted ) ) if ( isdefined( level.grenade_planted ) )
self thread [[ level.grenade_planted ]]( grenade, model ); self thread [[ level.grenade_planted ]]( grenade, model );
if ( isdefined( grenade ) ) if ( isdefined( grenade ) )
{ {
if ( isdefined( model ) ) if ( isdefined( model ) )
{ {
model thread weapon_beacon_anims(); model thread weapon_beacon_anims();
if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) ) if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) )
{ {
model unlink(); model unlink();
model.origin = grenade.origin; model.origin = grenade.origin;
model.angles = grenade.angles; model.angles = grenade.angles;
} }
} }
if ( isdefined( clone ) ) if ( isdefined( clone ) )
{ {
clone forceteleport( grenade.origin, grenade.angles ); clone forceteleport( grenade.origin, grenade.angles );
clone thread hide_owner( self ); clone thread hide_owner( self );
grenade thread proximity_detonate( self ); grenade thread proximity_detonate( self );
clone show(); clone show();
clone setinvisibletoall(); clone setinvisibletoall();
clone setvisibletoteam( level.zombie_team ); clone setvisibletoteam( level.zombie_team );
} }
grenade resetmissiledetonationtime(); grenade resetmissiledetonationtime();
model setclientfield( "play_beacon_fx", 1 ); model setclientfield( "play_beacon_fx", 1 );
valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined );
if ( isdefined( level.check_valid_poi ) ) if ( isdefined( level.check_valid_poi ) )
valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi );
if ( valid_poi ) if ( valid_poi )
{ {
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
grenade.attract_to_origin = 1; grenade.attract_to_origin = 1;
grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff );
grenade thread wait_for_attractor_positions_complete(); grenade thread wait_for_attractor_positions_complete();
grenade thread do_beacon_sound( model, info ); grenade thread do_beacon_sound( model, info );
model thread wait_and_explode( grenade ); model thread wait_and_explode( grenade );
model.time_thrown = gettime(); model.time_thrown = gettime();
while ( isdefined( level.weapon_beacon_busy ) && level.weapon_beacon_busy ) while ( isdefined( level.weapon_beacon_busy ) && level.weapon_beacon_busy )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
if ( flag( "three_robot_round" ) && flag( "fire_link_enabled" ) ) if ( flag( "three_robot_round" ) && flag( "fire_link_enabled" ) )
model thread start_artillery_launch_ee( grenade ); model thread start_artillery_launch_ee( grenade );
else else
model thread start_artillery_launch_normal( grenade ); model thread start_artillery_launch_normal( grenade );
level.beacons[level.beacons.size] = grenade; level.beacons[level.beacons.size] = grenade;
} }
else else
{ {
grenade.script_noteworthy = undefined; grenade.script_noteworthy = undefined;
self thread grenade_stolen_by_sam( grenade, model, clone ); self thread grenade_stolen_by_sam( grenade, model, clone );
} }
} }
else else
{ {
grenade.script_noteworthy = undefined; grenade.script_noteworthy = undefined;
self thread grenade_stolen_by_sam( grenade, model, clone ); self thread grenade_stolen_by_sam( grenade, model, clone );
} }
} }
} }
grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor )
{ {
if ( !isdefined( ent_model ) ) if ( !isdefined( ent_model ) )
return; return;
direction = ent_model.origin; direction = ent_model.origin;
direction = ( direction[1], direction[0], 0 ); direction = ( direction[1], direction[0], 0 );
if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 )
direction = ( direction[0], direction[1] * -1, 0 ); direction = ( direction[0], direction[1] * -1, 0 );
else if ( direction[0] < 0 ) else if ( direction[0] < 0 )
direction = ( direction[0] * -1, direction[1], 0 ); direction = ( direction[0] * -1, direction[1], 0 );
self playlocalsound( level.zmb_laugh_alias ); self playlocalsound( level.zmb_laugh_alias );
playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" ); playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" );
ent_model movez( 60, 1.0, 0.25, 0.25 ); ent_model movez( 60, 1.0, 0.25, 0.25 );
ent_model vibrate( direction, 1.5, 2.5, 1.0 ); ent_model vibrate( direction, 1.5, 2.5, 1.0 );
ent_model waittill( "movedone" ); ent_model waittill( "movedone" );
if ( isdefined( self.damagearea ) ) if ( isdefined( self.damagearea ) )
self.damagearea delete(); self.damagearea delete();
ent_model delete(); ent_model delete();
if ( isdefined( ent_actor ) ) if ( isdefined( ent_actor ) )
ent_actor delete(); ent_actor delete();
if ( isdefined( ent_grenade ) ) if ( isdefined( ent_grenade ) )
{ {
if ( isdefined( ent_grenade.damagearea ) ) if ( isdefined( ent_grenade.damagearea ) )
ent_grenade.damagearea delete(); ent_grenade.damagearea delete();
ent_grenade delete(); ent_grenade delete();
} }
} }
wait_and_do_weapon_beacon_damage( index ) wait_and_do_weapon_beacon_damage( index )
{ {
wait 3.0; wait 3.0;
v_damage_origin = self.a_v_land_spots[index]; v_damage_origin = self.a_v_land_spots[index];
level.n_weap_beacon_zombie_thrown_count = 0; level.n_weap_beacon_zombie_thrown_count = 0;
a_zombies_to_kill = []; a_zombies_to_kill = [];
a_zombies = getaispeciesarray( "axis", "all" ); a_zombies = getaispeciesarray( "axis", "all" );
foreach ( zombie in a_zombies ) foreach ( zombie in a_zombies )
{ {
n_distance = distance( zombie.origin, v_damage_origin ); n_distance = distance( zombie.origin, v_damage_origin );
if ( n_distance <= 200 ) if ( n_distance <= 200 )
{ {
a_zombies_to_kill[a_zombies_to_kill.size] = zombie; a_zombies_to_kill[a_zombies_to_kill.size] = zombie;
} }
} }
if ( index == 0 ) if ( index == 0 )
{ {
radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), 10, 1, 1, self.owner, "MOD_GRENADE_SPLASH", "beacon_zm" ); radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), 10, 1, 1, self.owner, "MOD_GRENADE_SPLASH", "beacon_zm" );
self ghost(); self ghost();
self stopanimscripted( 0 ); self stopanimscripted( 0 );
} }
level thread weap_beacon_zombie_death( self, a_zombies_to_kill ); level thread weap_beacon_zombie_death( self, a_zombies_to_kill );
self thread weap_beacon_rumble(); self thread weap_beacon_rumble();
} }
weap_beacon_zombie_death( model, a_zombies_to_kill ) weap_beacon_zombie_death( model, a_zombies_to_kill )
{ {
for ( i = 0; i < a_zombies_to_kill.size; i++ ) for ( i = 0; i < a_zombies_to_kill.size; i++ )
{ {
zombie = a_zombies_to_kill[i]; zombie = a_zombies_to_kill[i];
if ( !isdefined( zombie ) || !isalive( zombie ) ) if ( !isdefined( zombie ) || !isalive( zombie ) )
continue; continue;
zombie thread set_beacon_damage(); zombie thread set_beacon_damage();
zombie dodamage( zombie.health, zombie.origin, model.owner, model.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" ); zombie dodamage( zombie.health, zombie.origin, model.owner, model.owner, "none", "MOD_GRENADE_SPLASH", 0, "beacon_zm" );
zombie thread weapon_beacon_launch_ragdoll(); zombie thread weapon_beacon_launch_ragdoll();
} }
} }

View File

@ -9,117 +9,117 @@
wait_for_blundersplat_fired() wait_for_blundersplat_fired()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "spawned_player" ); self waittill( "spawned_player" );
for (;;) for (;;)
{ {
self waittill( "weapon_fired", str_weapon ); self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_zm" ) if ( str_weapon == "blundersplat_zm" )
{ {
_titus_locate_target( 1, 0 ); _titus_locate_target( 1, 0 );
wait_network_frame(); wait_network_frame();
_titus_locate_target( 1, 1 ); _titus_locate_target( 1, 1 );
wait_network_frame(); wait_network_frame();
_titus_locate_target( 1, 2 ); _titus_locate_target( 1, 2 );
wait_network_frame(); wait_network_frame();
} }
} }
} }
wait_for_blundersplat_upgraded_fired() wait_for_blundersplat_upgraded_fired()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "spawned_player" ); self waittill( "spawned_player" );
for (;;) for (;;)
{ {
self waittill( "weapon_fired", str_weapon ); self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_upgraded_zm" ) if ( str_weapon == "blundersplat_upgraded_zm" )
{ {
_titus_locate_target( 0, 0 ); _titus_locate_target( 0, 0 );
wait_network_frame(); wait_network_frame();
_titus_locate_target( 0, 1 ); _titus_locate_target( 0, 1 );
wait_network_frame(); wait_network_frame();
_titus_locate_target( 0, 2 ); _titus_locate_target( 0, 2 );
wait_network_frame(); wait_network_frame();
} }
} }
} }
_titus_locate_target( is_not_upgraded = 1, count ) _titus_locate_target( is_not_upgraded = 1, count )
{ {
fire_angles = self getplayerangles(); fire_angles = self getplayerangles();
fire_origin = self getplayercamerapos(); fire_origin = self getplayercamerapos();
if ( is_not_upgraded ) if ( is_not_upgraded )
n_fuse_timer = randomfloatrange( 1.0, 2.5 ); n_fuse_timer = randomfloatrange( 1.0, 2.5 );
else else
n_fuse_timer = randomfloatrange( 3.0, 4.0 ); n_fuse_timer = randomfloatrange( 3.0, 4.0 );
n_spread = 5; n_spread = 5;
if (isads(self)) if (isads(self))
{ {
n_spread *= 0.5; n_spread *= 0.5;
} }
else if (self hasPerk("specialty_deadshot")) else if (self hasPerk("specialty_deadshot"))
{ {
n_spread *= getdvarfloat("perk_weapSpreadMultiplier"); n_spread *= getdvarfloat("perk_weapSpreadMultiplier");
} }
if (count == 1) if (count == 1)
{ {
fire_angles += (0, n_spread, 0); fire_angles += (0, n_spread, 0);
} }
else if (count == 2) else if (count == 2)
{ {
fire_angles -= (0, n_spread, 0); fire_angles -= (0, n_spread, 0);
} }
vec = anglestoforward( fire_angles ); vec = anglestoforward( fire_angles );
trace_end = fire_origin + vec * 20000; trace_end = fire_origin + vec * 20000;
trace = bullettrace( fire_origin, trace_end, 1, self ); trace = bullettrace( fire_origin, trace_end, 1, self );
offsetpos = trace["position"]; offsetpos = trace["position"];
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self ); e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer ); e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
} }
_titus_reset_grenade_fuse( n_fuse_timer = randomfloatrange( 1, 1.5 ), is_not_upgraded = 1 ) _titus_reset_grenade_fuse( n_fuse_timer = randomfloatrange( 1, 1.5 ), is_not_upgraded = 1 )
{ {
self waittill( "death" ); self waittill( "death" );
a_grenades = getentarray( "grenade", "classname" ); a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades ) foreach ( e_grenade in a_grenades )
{ {
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined( e_grenade.fuse_reset ) ) if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined( e_grenade.fuse_reset ) )
{ {
e_grenade.fuse_reset = 1; e_grenade.fuse_reset = 1;
e_grenade.fuse_time = n_fuse_timer; e_grenade.fuse_time = n_fuse_timer;
e_grenade resetmissiledetonationtime( n_fuse_timer ); e_grenade resetmissiledetonationtime( n_fuse_timer );
if ( is_not_upgraded ) if ( is_not_upgraded )
e_grenade create_zombie_point_of_interest( 250, 15, 10000 ); e_grenade create_zombie_point_of_interest( 250, 15, 10000 );
else else
e_grenade create_zombie_point_of_interest( 500, 30, 10000 ); e_grenade create_zombie_point_of_interest( 500, 30, 10000 );
return; return;
} }
} }
} }
_titus_target_animate_and_die( n_fuse_timer, inflictor ) _titus_target_animate_and_die( n_fuse_timer, inflictor )
{ {
self endon( "death" ); self endon( "death" );
self endon( "titus_target_timeout" ); self endon( "titus_target_timeout" );
self thread _titus_target_timeout( n_fuse_timer ); self thread _titus_target_timeout( n_fuse_timer );
self thread _titus_check_for_target_death( inflictor ); self thread _titus_check_for_target_death( inflictor );
self thread _blundersplat_target_acid_stun_anim(); self thread _blundersplat_target_acid_stun_anim();
wait( n_fuse_timer ); wait( n_fuse_timer );
self notify( "killed_by_a_blundersplat", inflictor ); self notify( "killed_by_a_blundersplat", inflictor );
self dodamage( self.health + 1000, self.origin, inflictor ); self dodamage( self.health + 1000, self.origin, inflictor );
} }

View File

@ -37,10 +37,10 @@ buy_claymores()
{ {
play_sound_at_pos( "purchase", self.origin ); play_sound_at_pos( "purchase", self.origin );
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
if ( !who is_player_placeable_mine( "claymore_zm" ) ) if ( !who is_player_placeable_mine( "claymore_zm" ) )
{ {
who thread show_claymore_hint( "claymore_purchased" ); who thread show_claymore_hint( "claymore_purchased" );
} }
who thread claymore_setup(); who thread claymore_setup();
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) ) if ( isDefined( self.stub ) )
@ -112,7 +112,7 @@ claymore_detonation()
{ {
continue; continue;
} }
if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == getOtherTeam( self.team ) ) if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == getOtherTeam( self.team ) )
{ {
continue; continue;
} }
@ -143,12 +143,12 @@ claymore_detonation()
claymore_setup() claymore_setup()
{ {
if ( !isdefined( self.claymores ) ) if ( !isdefined( self.claymores ) )
self.claymores = []; self.claymores = [];
self thread claymore_watch(); self thread claymore_watch();
self giveweapon( "claymore_zm" ); self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" ); self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" ); self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 ); self setweaponammostock( "claymore_zm", 2 );
} }

View File

@ -9,168 +9,168 @@
player_handle_cymbal_monkey() player_handle_cymbal_monkey()
{ {
self notify( "starting_monkey_watch" ); self notify( "starting_monkey_watch" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "starting_monkey_watch" ); self endon( "starting_monkey_watch" );
attract_dist_diff = level.monkey_attract_dist_diff; attract_dist_diff = level.monkey_attract_dist_diff;
if ( !isdefined( attract_dist_diff ) ) if ( !isdefined( attract_dist_diff ) )
attract_dist_diff = 45; attract_dist_diff = 45;
num_attractors = level.num_monkey_attractors; num_attractors = level.num_monkey_attractors;
if ( !isdefined( num_attractors ) ) if ( !isdefined( num_attractors ) )
num_attractors = 96; num_attractors = 96;
max_attract_dist = level.monkey_attract_dist; max_attract_dist = level.monkey_attract_dist;
if ( !isdefined( max_attract_dist ) ) if ( !isdefined( max_attract_dist ) )
max_attract_dist = 1536; max_attract_dist = 1536;
while ( true ) while ( true )
{ {
grenade = get_thrown_monkey(); grenade = get_thrown_monkey();
self thread player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); self thread player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
} }
} }
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "starting_monkey_watch" ); self endon( "starting_monkey_watch" );
if ( isdefined( grenade ) ) if ( isdefined( grenade ) )
{ {
grenade endon( "death" ); grenade endon( "death" );
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
if ( isdefined( grenade.damagearea ) ) if ( isdefined( grenade.damagearea ) )
grenade.damagearea delete(); grenade.damagearea delete();
grenade delete(); grenade delete();
return; return;
} }
grenade hide(); grenade hide();
model = spawn( "script_model", grenade.origin ); model = spawn( "script_model", grenade.origin );
model setmodel( level.cymbal_monkey_model ); model setmodel( level.cymbal_monkey_model );
model useanimtree( #animtree ); model useanimtree( #animtree );
model linkto( grenade ); model linkto( grenade );
model.angles = grenade.angles; model.angles = grenade.angles;
model thread monkey_cleanup( grenade ); model thread monkey_cleanup( grenade );
clone = undefined; clone = undefined;
if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) if ( isdefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view )
{ {
model setvisibletoallexceptteam( level.zombie_team ); model setvisibletoallexceptteam( level.zombie_team );
clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.cymbal_monkey_clone_weapon, undefined ); clone = maps\mp\zombies\_zm_clone::spawn_player_clone( self, vectorscale( ( 0, 0, -1 ), 999.0 ), level.cymbal_monkey_clone_weapon, undefined );
model.simulacrum = clone; model.simulacrum = clone;
clone maps\mp\zombies\_zm_clone::clone_animate( "idle" ); clone maps\mp\zombies\_zm_clone::clone_animate( "idle" );
clone thread clone_player_angles( self ); clone thread clone_player_angles( self );
clone notsolid(); clone notsolid();
clone ghost(); clone ghost();
} }
grenade thread watch_for_dud( model, clone ); grenade thread watch_for_dud( model, clone );
grenade thread watch_for_emp( model, clone ); grenade thread watch_for_emp( model, clone );
info = spawnstruct(); info = spawnstruct();
info.sound_attractors = []; info.sound_attractors = [];
grenade thread monitor_zombie_groans( info ); grenade thread monitor_zombie_groans( info );
grenade waittill( "stationary" ); grenade waittill( "stationary" );
if ( isdefined( level.grenade_planted ) ) if ( isdefined( level.grenade_planted ) )
self thread [[ level.grenade_planted ]]( grenade, model ); self thread [[ level.grenade_planted ]]( grenade, model );
if ( isdefined( grenade ) ) if ( isdefined( grenade ) )
{ {
if ( isdefined( model ) ) if ( isdefined( model ) )
{ {
model setanim( %o_monkey_bomb ); model setanim( %o_monkey_bomb );
if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) ) if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) )
{ {
model unlink(); model unlink();
model.origin = grenade.origin; model.origin = grenade.origin;
model.angles = grenade.angles; model.angles = grenade.angles;
} }
} }
if ( isdefined( clone ) ) if ( isdefined( clone ) )
{ {
clone forceteleport( grenade.origin, grenade.angles ); clone forceteleport( grenade.origin, grenade.angles );
clone thread hide_owner( self ); clone thread hide_owner( self );
grenade thread proximity_detonate( self ); grenade thread proximity_detonate( self );
clone show(); clone show();
clone setinvisibletoall(); clone setinvisibletoall();
clone setvisibletoteam( level.zombie_team ); clone setvisibletoteam( level.zombie_team );
} }
grenade resetmissiledetonationtime(); grenade resetmissiledetonationtime();
playfxontag( level._effect["monkey_glow"], model, "origin_animate_jnt" ); playfxontag( level._effect["monkey_glow"], model, "origin_animate_jnt" );
valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined );
if ( isdefined( level.check_valid_poi ) ) if ( isdefined( level.check_valid_poi ) )
valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi );
if ( valid_poi ) if ( valid_poi )
{ {
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
grenade.attract_to_origin = 1; grenade.attract_to_origin = 1;
grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff );
grenade thread wait_for_attractor_positions_complete(); grenade thread wait_for_attractor_positions_complete();
grenade thread do_monkey_sound( model, info ); grenade thread do_monkey_sound( model, info );
level.cymbal_monkeys[level.cymbal_monkeys.size] = grenade; level.cymbal_monkeys[level.cymbal_monkeys.size] = grenade;
} }
else else
{ {
grenade.script_noteworthy = undefined; grenade.script_noteworthy = undefined;
self thread grenade_stolen_by_sam( grenade, model, clone ); self thread grenade_stolen_by_sam( grenade, model, clone );
} }
} }
else else
{ {
grenade.script_noteworthy = undefined; grenade.script_noteworthy = undefined;
self thread grenade_stolen_by_sam( grenade, model, clone ); self thread grenade_stolen_by_sam( grenade, model, clone );
} }
} }
} }
grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor )
{ {
if ( !isdefined( ent_model ) ) if ( !isdefined( ent_model ) )
return; return;
direction = ent_model.origin; direction = ent_model.origin;
direction = ( direction[1], direction[0], 0 ); direction = ( direction[1], direction[0], 0 );
if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 )
direction = ( direction[0], direction[1] * -1, 0 ); direction = ( direction[0], direction[1] * -1, 0 );
else if ( direction[0] < 0 ) else if ( direction[0] < 0 )
direction = ( direction[0] * -1, direction[1], 0 ); direction = ( direction[0] * -1, direction[1], 0 );
self playlocalsound( level.zmb_laugh_alias ); self playlocalsound( level.zmb_laugh_alias );
playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" ); playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" );
ent_model movez( 60, 1.0, 0.25, 0.25 ); ent_model movez( 60, 1.0, 0.25, 0.25 );
ent_model vibrate( direction, 1.5, 2.5, 1.0 ); ent_model vibrate( direction, 1.5, 2.5, 1.0 );
ent_model waittill( "movedone" ); ent_model waittill( "movedone" );
if ( isdefined( self.damagearea ) ) if ( isdefined( self.damagearea ) )
self.damagearea delete(); self.damagearea delete();
ent_model delete(); ent_model delete();
if ( isdefined( ent_actor ) ) if ( isdefined( ent_actor ) )
ent_actor delete(); ent_actor delete();
if ( isdefined( ent_grenade ) ) if ( isdefined( ent_grenade ) )
{ {
if ( isdefined( ent_grenade.damagearea ) ) if ( isdefined( ent_grenade.damagearea ) )
ent_grenade.damagearea delete(); ent_grenade.damagearea delete();
ent_grenade delete(); ent_grenade delete();
} }
} }

View File

@ -46,98 +46,98 @@ emp_detonate(grenade)
emp_detonate_zombies( grenade_origin, grenade_owner ) emp_detonate_zombies( grenade_origin, grenade_owner )
{ {
zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars["emp_stun_range"] ); zombies = get_array_of_closest( grenade_origin, getaispeciesarray( level.zombie_team, "all" ), undefined, undefined, level.zombie_vars["emp_stun_range"] );
if ( !isdefined( zombies ) ) if ( !isdefined( zombies ) )
return; return;
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert )
continue; continue;
if ( is_true( zombies[i].in_the_ground ) ) if ( is_true( zombies[i].in_the_ground ) )
continue; continue;
zombies[i].becoming_inert = 1; zombies[i].becoming_inert = 1;
} }
stunned = 0; stunned = 0;
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert ) if ( !isdefined( zombies[i] ) || isdefined( zombies[i].ignore_inert ) && zombies[i].ignore_inert )
continue; continue;
if ( is_true( zombies[i].in_the_ground ) ) if ( is_true( zombies[i].in_the_ground ) )
continue; continue;
stunned++; stunned++;
zombies[i] thread stun_zombie(); zombies[i] thread stun_zombie();
wait 0.05; wait 0.05;
} }
if ( stunned >= 10 && isdefined( grenade_owner ) ) if ( stunned >= 10 && isdefined( grenade_owner ) )
grenade_owner notify( "the_lights_of_their_eyes" ); grenade_owner notify( "the_lights_of_their_eyes" );
} }
destroyequipment( origin, radius ) destroyequipment( origin, radius )
{ {
grenades = getentarray( "grenade", "classname" ); grenades = getentarray( "grenade", "classname" );
rsquared = radius * radius; rsquared = radius * radius;
for ( i = 0; i < grenades.size; i++ ) for ( i = 0; i < grenades.size; i++ )
{ {
item = grenades[i]; item = grenades[i];
if ( distancesquared( origin, item.origin ) > rsquared ) if ( distancesquared( origin, item.origin ) > rsquared )
continue; continue;
if ( !isdefined( item.name ) ) if ( !isdefined( item.name ) )
continue; continue;
if ( !is_offhand_weapon( item.name ) ) if ( !is_offhand_weapon( item.name ) )
continue; continue;
watcher = item.owner getwatcherforweapon( item.name ); watcher = item.owner getwatcherforweapon( item.name );
if ( !isdefined( watcher ) ) if ( !isdefined( watcher ) )
continue; continue;
watcher thread waitanddetonate( item, 0.0, self, "emp_grenade_zm" ); watcher thread waitanddetonate( item, 0.0, self, "emp_grenade_zm" );
} }
equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list(); equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list();
for ( i = 0; i < equipment.size; i++ ) for ( i = 0; i < equipment.size; i++ )
{ {
item = equipment[i]; item = equipment[i];
if ( !isdefined( item ) ) if ( !isdefined( item ) )
continue; continue;
if ( distancesquared( origin, item.origin ) > rsquared ) if ( distancesquared( origin, item.origin ) > rsquared )
continue; continue;
waitanddamage( item, 1505 ); waitanddamage( item, 1505 );
} }
} }
waitanddamage( object, damage ) waitanddamage( object, damage )
{ {
object endon( "death" ); object endon( "death" );
object endon( "hacked" ); object endon( "hacked" );
object.stun_fx = 1; object.stun_fx = 1;
if ( isdefined( level._equipment_emp_destroy_fx ) ) if ( isdefined( level._equipment_emp_destroy_fx ) )
playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) );
delay = 1.1; delay = 1.1;
if ( delay ) if ( delay )
wait( delay ); wait( delay );
object thread scripts\zm\replaced\_zm_equipment::item_damage( damage ); object thread scripts\zm\replaced\_zm_equipment::item_damage( damage );
} }
emp_players(origin, radius, owner) emp_players(origin, radius, owner)

View File

@ -5,76 +5,76 @@
watch_overheat() watch_overheat()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self endon( "weapon_change" ); self endon( "weapon_change" );
while ( true ) while ( true )
{ {
if ( self getcurrentweapon() == "jetgun_zm" ) if ( self getcurrentweapon() == "jetgun_zm" )
{ {
overheating = self isweaponoverheating( 0 ); overheating = self isweaponoverheating( 0 );
heat = self isweaponoverheating( 1 ); heat = self isweaponoverheating( 1 );
self.jetgun_overheating = overheating; self.jetgun_overheating = overheating;
self.jetgun_heatval = heat; self.jetgun_heatval = heat;
if ( overheating ) if ( overheating )
self notify( "jetgun_overheated" ); self notify( "jetgun_overheated" );
if ( heat > 75 ) if ( heat > 75 )
self thread play_overheat_fx(); self thread play_overheat_fx();
} }
wait 0.05; wait 0.05;
} }
} }
jetgun_firing() jetgun_firing()
{ {
if ( !isdefined( self.jetsound_ent ) ) if ( !isdefined( self.jetsound_ent ) )
{ {
self.jetsound_ent = spawn( "script_origin", self.origin ); self.jetsound_ent = spawn( "script_origin", self.origin );
self.jetsound_ent linkto( self, "tag_origin" ); self.jetsound_ent linkto( self, "tag_origin" );
} }
jetgun_fired = 0; jetgun_fired = 0;
if ( self is_jetgun_firing() && jetgun_fired == 0 ) if ( self is_jetgun_firing() && jetgun_fired == 0 )
{ {
self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 ); self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 );
self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" ); self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" );
self notify( "jgun_snd" ); self notify( "jgun_snd" );
} }
while ( self is_jetgun_firing() ) while ( self is_jetgun_firing() )
{ {
jetgun_fired = 1; jetgun_fired = 1;
self thread jetgun_fired(); self thread jetgun_fired();
view_pos = self gettagorigin( "tag_flash" ); view_pos = self gettagorigin( "tag_flash" );
view_angles = self gettagangles( "tag_flash" ); view_angles = self gettagangles( "tag_flash" );
if ( self get_jetgun_engine_direction() < 0 ) if ( self get_jetgun_engine_direction() < 0 )
playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ), anglestoup( view_angles ) ); playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ), anglestoup( view_angles ) );
else else
playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ) * -1, anglestoup( view_angles ) ); playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ) * -1, anglestoup( view_angles ) );
wait 0.25; wait 0.25;
} }
if ( jetgun_fired == 1 ) if ( jetgun_fired == 1 )
{ {
self.jetsound_ent stoploopsound( 0.5 ); self.jetsound_ent stoploopsound( 0.5 );
self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" ); self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" );
self thread sound_ent_cleanup(); self thread sound_ent_cleanup();
jetgun_fired = 0; jetgun_fired = 0;
} }
} }
sound_ent_cleanup() sound_ent_cleanup()
{ {
self endon( "jgun_snd" ); self endon( "jgun_snd" );
wait 4; wait 4;
if ( isdefined( self.jetsound_ent ) ) if ( isdefined( self.jetsound_ent ) )
{ {
self.jetsound_ent delete(); self.jetsound_ent delete();
} }
@ -82,10 +82,10 @@ sound_ent_cleanup()
is_jetgun_firing() is_jetgun_firing()
{ {
if(!self attackButtonPressed()) if(!self attackButtonPressed())
{ {
return 0; return 0;
} }
return abs( self get_jetgun_engine_direction() ) > 0.2; return abs( self get_jetgun_engine_direction() ) > 0.2;
} }
@ -148,14 +148,14 @@ jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_s
} }
else else
{ {
if ( !isDefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" ) if ( !isDefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" )
{ {
return; return;
} }
if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground ) if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground )
{ {
return; return;
} }
if ( test_range_squared < drag_range_squared && dot > 0 ) if ( test_range_squared < drag_range_squared && dot > 0 )
{ {
@ -182,7 +182,7 @@ jetgun_grind_zombie( player )
} }
self.nodeathragdoll = 1; self.nodeathragdoll = 1;
self.handle_death_notetracks = ::jetgun_handle_death_notetracks; self.handle_death_notetracks = ::jetgun_handle_death_notetracks;
player maps\mp\zombies\_zm_score::add_to_player_score(50 * maps\mp\zombies\_zm_score::get_points_multiplier(player)); player maps\mp\zombies\_zm_score::add_to_player_score(50 * maps\mp\zombies\_zm_score::get_points_multiplier(player));
self dodamage( self.health + 666, player.origin, player ); self dodamage( self.health + 666, player.origin, player );
} }
} }
@ -196,7 +196,7 @@ handle_overheated_jetgun()
if ( self getcurrentweapon() == "jetgun_zm" ) if ( self getcurrentweapon() == "jetgun_zm" )
{ {
weapon_org = self gettagorigin( "tag_weapon" ); weapon_org = self gettagorigin( "tag_weapon" );
if ( isDefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun ) if ( isDefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun )
{ {
@ -207,23 +207,23 @@ handle_overheated_jetgun()
} }
else if ( isDefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun ) else if ( isDefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun )
{ {
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" ); self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
maps\mp\zombies\_zm_buildables::unbuild_buildable( "jetgun_zm", 1 ); maps\mp\zombies\_zm_buildables::unbuild_buildable( "jetgun_zm", 1 );
self dodamage( 50, weapon_org ); self dodamage( 50, weapon_org );
}
else if ( isDefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun )
{
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
self dodamage( 50, weapon_org );
}
else
{
continue;
} }
else if ( isDefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun )
{
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
self dodamage( 50, weapon_org );
}
else
{
continue;
}
self.jetgun_overheating = undefined; self.jetgun_overheating = undefined;
self.jetgun_heatval = undefined; self.jetgun_heatval = undefined;
self playsound( "wpn_jetgun_explo" ); self playsound( "wpn_jetgun_explo" );
} }
} }
} }

View File

@ -13,51 +13,51 @@
monitor_melee_swipe() monitor_melee_swipe()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self notify( "stop_monitor_melee_swipe" ); self notify( "stop_monitor_melee_swipe" );
self endon( "stop_monitor_melee_swipe" ); self endon( "stop_monitor_melee_swipe" );
self endon( "bled_out" ); self endon( "bled_out" );
self endon( "gr_head_forced_bleed_out" ); self endon( "gr_head_forced_bleed_out" );
while ( true ) while ( true )
{ {
while ( !self ismeleeing() ) while ( !self ismeleeing() )
wait 0.05; wait 0.05;
if ( self getcurrentweapon() == level.riotshield_name ) if ( self getcurrentweapon() == level.riotshield_name )
{ {
wait 0.1; wait 0.1;
continue; continue;
} }
range_mod = 1; range_mod = 1;
self setclientfield( "oneinchpunch_impact", 1 ); self setclientfield( "oneinchpunch_impact", 1 );
wait_network_frame(); wait_network_frame();
self setclientfield( "oneinchpunch_impact", 0 ); self setclientfield( "oneinchpunch_impact", 0 );
v_punch_effect_fwd = anglestoforward( self getplayerangles() ); v_punch_effect_fwd = anglestoforward( self getplayerangles() );
v_punch_yaw = get2dyaw( ( 0, 0, 0 ), v_punch_effect_fwd ); v_punch_yaw = get2dyaw( ( 0, 0, 0 ), v_punch_effect_fwd );
if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isdefined( self.str_punch_element ) && self.str_punch_element == "air" ) if ( isdefined( self.b_punch_upgraded ) && self.b_punch_upgraded && isdefined( self.str_punch_element ) && self.str_punch_element == "air" )
range_mod *= 2; range_mod *= 2;
a_zombies = getaispeciesarray( level.zombie_team, "all" ); a_zombies = getaispeciesarray( level.zombie_team, "all" );
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 100 ); a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 100 );
foreach ( zombie in a_zombies ) foreach ( zombie in a_zombies )
{ {
if ( self is_player_facing( zombie, v_punch_yaw ) && distancesquared( self.origin, zombie.origin ) <= 4096 * range_mod ) if ( self is_player_facing( zombie, v_punch_yaw ) && distancesquared( self.origin, zombie.origin ) <= 4096 * range_mod )
{ {
self thread zombie_punch_damage( zombie, 1 ); self thread zombie_punch_damage( zombie, 1 );
continue; continue;
} }
if ( self is_player_facing( zombie, v_punch_yaw ) ) if ( self is_player_facing( zombie, v_punch_yaw ) )
self thread zombie_punch_damage( zombie, 0.5 ); self thread zombie_punch_damage( zombie, 0.5 );
} }
while ( self ismeleeing() ) while ( self ismeleeing() )
wait 0.05; wait 0.05;
wait 0.05; wait 0.05;
} }
} }

View File

@ -15,217 +15,217 @@
init() init()
{ {
maps\mp\zombies\_zm_riotshield::init(); maps\mp\zombies\_zm_riotshield::init();
set_zombie_var( "riotshield_cylinder_radius", 360 ); set_zombie_var( "riotshield_cylinder_radius", 360 );
set_zombie_var( "riotshield_fling_range", 90 ); set_zombie_var( "riotshield_fling_range", 90 );
set_zombie_var( "riotshield_gib_range", 90 ); set_zombie_var( "riotshield_gib_range", 90 );
set_zombie_var( "riotshield_gib_damage", 75 ); set_zombie_var( "riotshield_gib_damage", 75 );
set_zombie_var( "riotshield_knockdown_range", 90 ); set_zombie_var( "riotshield_knockdown_range", 90 );
set_zombie_var( "riotshield_knockdown_damage", 15 ); set_zombie_var( "riotshield_knockdown_damage", 15 );
set_zombie_var( "riotshield_hit_points", 2250 ); set_zombie_var( "riotshield_hit_points", 2250 );
set_zombie_var( "riotshield_fling_damage_shield", 100 ); set_zombie_var( "riotshield_fling_damage_shield", 100 );
set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); set_zombie_var( "riotshield_knockdown_damage_shield", 15 );
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
level.riotshield_gib_refs = []; level.riotshield_gib_refs = [];
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm";
level.riotshield_damage_callback = ::player_damage_shield; level.riotshield_damage_callback = ::player_damage_shield;
level.deployed_riotshield_damage_callback = ::deployed_damage_shield; level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
level.transferriotshield = ::transferriotshield; level.transferriotshield = ::transferriotshield;
level.cantransferriotshield = ::cantransferriotshield; level.cantransferriotshield = ::cantransferriotshield;
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
maps\mp\zombies\_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); maps\mp\zombies\_zm_equipment::register_equipment( "riotshield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
} }
onplayerconnect() onplayerconnect()
{ {
self.player_shield_reset_health = ::player_init_shield_health; self.player_shield_reset_health = ::player_init_shield_health;
self.player_shield_apply_damage = ::player_damage_shield; self.player_shield_apply_damage = ::player_damage_shield;
self.player_shield_reset_location = ::player_init_shield_location; self.player_shield_reset_location = ::player_init_shield_location;
self thread watchriotshielduse(); self thread watchriotshielduse();
self thread watchriotshieldmelee(); self thread watchriotshieldmelee();
self thread player_watch_laststand(); self thread player_watch_laststand();
} }
player_damage_shield( idamage, bheld ) player_damage_shield( idamage, bheld )
{ {
damagemax = level.zombie_vars["riotshield_hit_points"]; damagemax = level.zombie_vars["riotshield_hit_points"];
if ( !isdefined( self.shielddamagetaken ) ) if ( !isdefined( self.shielddamagetaken ) )
self.shielddamagetaken = 0; self.shielddamagetaken = 0;
self.shielddamagetaken += idamage; self.shielddamagetaken += idamage;
if ( self.shielddamagetaken >= damagemax ) if ( self.shielddamagetaken >= damagemax )
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_heavy" ); self playrumbleonentity( "damage_heavy" );
earthquake( 1.0, 0.75, self.origin, 100 ); earthquake( 1.0, 0.75, self.origin, 100 );
self playsound( "wpn_riotshield_zm_destroy" ); self playsound( "wpn_riotshield_zm_destroy" );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
if ( is_true( self.shield_ent.destroy_begun ) ) if ( is_true( self.shield_ent.destroy_begun ) )
return; return;
self.shield_ent.destroy_begun = 1; self.shield_ent.destroy_begun = 1;
self thread player_wait_and_take_riotshield(); self thread player_wait_and_take_riotshield();
} }
} }
else else
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_light" ); self playrumbleonentity( "damage_light" );
earthquake( 0.5, 0.5, self.origin, 100 ); earthquake( 0.5, 0.5, self.origin, 100 );
self playsound( "fly_riotshield_zm_impact_zombies" ); self playsound( "fly_riotshield_zm_impact_zombies" );
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
} }
self player_set_shield_health( self.shielddamagetaken, damagemax ); self player_set_shield_health( self.shielddamagetaken, damagemax );
} }
} }
player_wait_and_take_riotshield() player_wait_and_take_riotshield()
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
wait 1; wait 1;
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
watchriotshieldmelee() watchriotshieldmelee()
{ {
for (;;) for (;;)
{ {
self waittill( "weapon_melee", weapon ); self waittill( "weapon_melee", weapon );
if ( weapon == level.riotshield_name ) if ( weapon == level.riotshield_name )
self riotshield_melee(); self riotshield_melee();
} }
} }
riotshield_melee() riotshield_melee()
{ {
if ( !isdefined( level.riotshield_knockdown_enemies ) ) if ( !isdefined( level.riotshield_knockdown_enemies ) )
{ {
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
} }
self riotshield_get_enemies_in_range(); self riotshield_get_enemies_in_range();
shield_damage = 0; shield_damage = 0;
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
if ( isdefined( level.riotshield_fling_enemies[i] ) ) if ( isdefined( level.riotshield_fling_enemies[i] ) )
{ {
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
} }
} }
for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
} }
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
if ( shield_damage ) if ( shield_damage )
self player_damage_shield( shield_damage, 0 ); self player_damage_shield( shield_damage, 0 );
} }
riotshield_fling_zombie( player, fling_vec, index ) riotshield_fling_zombie( player, fling_vec, index )
{ {
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield )
return; return;
if ( isdefined( self.riotshield_fling_func ) ) if ( isdefined( self.riotshield_fling_func ) )
{ {
self [[ self.riotshield_fling_func ]]( player ); self [[ self.riotshield_fling_func ]]( player );
return; return;
} }
damage = 2500; damage = 2500;
self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
self.riotshield_death = 1; self.riotshield_death = 1;
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
self startragdoll(); self startragdoll();
self launchragdoll( fling_vec ); self launchragdoll( fling_vec );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }
zombie_knockdown( player, gib ) zombie_knockdown( player, gib )
{ {
if ( isdefined( level.override_riotshield_damage_func ) ) if ( isdefined( level.override_riotshield_damage_func ) )
self [[ level.override_riotshield_damage_func ]]( player, gib ); self [[ level.override_riotshield_damage_func ]]( player, gib );
else else
{ {
if ( gib ) if ( gib )
{ {
self.a.gib_ref = random( level.riotshield_gib_refs ); self.a.gib_ref = random( level.riotshield_gib_refs );
self thread maps\mp\animscripts\zm_death::do_gib(); self thread maps\mp\animscripts\zm_death::do_gib();
} }
} }
} }
riotshield_knockdown_zombie( player, gib ) riotshield_knockdown_zombie( player, gib )
{ {
self endon( "death" ); self endon( "death" );
playsoundatposition( "vox_riotshield_forcehit", self.origin ); playsoundatposition( "vox_riotshield_forcehit", self.origin );
playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.riotshield_knockdown_func ) ) if ( isdefined( self.riotshield_knockdown_func ) )
self [[ self.riotshield_knockdown_func ]]( player, gib ); self [[ self.riotshield_knockdown_func ]]( player, gib );
else else
self zombie_knockdown( player, gib ); self zombie_knockdown( player, gib );
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
self playsound( "fly_riotshield_forcehit" ); self playsound( "fly_riotshield_forcehit" );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }

View File

@ -15,217 +15,217 @@
init() init()
{ {
maps\mp\zombies\_zm_riotshield_prison::init(); maps\mp\zombies\_zm_riotshield_prison::init();
set_zombie_var( "riotshield_cylinder_radius", 360 ); set_zombie_var( "riotshield_cylinder_radius", 360 );
set_zombie_var( "riotshield_fling_range", 90 ); set_zombie_var( "riotshield_fling_range", 90 );
set_zombie_var( "riotshield_gib_range", 90 ); set_zombie_var( "riotshield_gib_range", 90 );
set_zombie_var( "riotshield_gib_damage", 75 ); set_zombie_var( "riotshield_gib_damage", 75 );
set_zombie_var( "riotshield_knockdown_range", 90 ); set_zombie_var( "riotshield_knockdown_range", 90 );
set_zombie_var( "riotshield_knockdown_damage", 15 ); set_zombie_var( "riotshield_knockdown_damage", 15 );
set_zombie_var( "riotshield_hit_points", 1500 ); set_zombie_var( "riotshield_hit_points", 1500 );
set_zombie_var( "riotshield_fling_damage_shield", 100 ); set_zombie_var( "riotshield_fling_damage_shield", 100 );
set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); set_zombie_var( "riotshield_knockdown_damage_shield", 15 );
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
level.riotshield_gib_refs = []; level.riotshield_gib_refs = [];
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm";
level.riotshield_damage_callback = ::player_damage_shield; level.riotshield_damage_callback = ::player_damage_shield;
level.deployed_riotshield_damage_callback = ::deployed_damage_shield; level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
level.transferriotshield = ::transferriotshield; level.transferriotshield = ::transferriotshield;
level.cantransferriotshield = ::cantransferriotshield; level.cantransferriotshield = ::cantransferriotshield;
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
maps\mp\zombies\_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); maps\mp\zombies\_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
} }
onplayerconnect() onplayerconnect()
{ {
self.player_shield_reset_health = ::player_init_shield_health; self.player_shield_reset_health = ::player_init_shield_health;
self.player_shield_apply_damage = ::player_damage_shield; self.player_shield_apply_damage = ::player_damage_shield;
self.player_shield_reset_location = ::player_init_shield_location; self.player_shield_reset_location = ::player_init_shield_location;
self thread watchriotshielduse(); self thread watchriotshielduse();
self thread watchriotshieldmelee(); self thread watchriotshieldmelee();
self thread player_watch_laststand(); self thread player_watch_laststand();
} }
player_damage_shield( idamage, bheld ) player_damage_shield( idamage, bheld )
{ {
damagemax = level.zombie_vars["riotshield_hit_points"]; damagemax = level.zombie_vars["riotshield_hit_points"];
if ( !isdefined( self.shielddamagetaken ) ) if ( !isdefined( self.shielddamagetaken ) )
self.shielddamagetaken = 0; self.shielddamagetaken = 0;
self.shielddamagetaken += idamage; self.shielddamagetaken += idamage;
if ( self.shielddamagetaken >= damagemax ) if ( self.shielddamagetaken >= damagemax )
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_heavy" ); self playrumbleonentity( "damage_heavy" );
earthquake( 1.0, 0.75, self.origin, 100 ); earthquake( 1.0, 0.75, self.origin, 100 );
self playsound( "wpn_riotshield_zm_destroy" ); self playsound( "wpn_riotshield_zm_destroy" );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
if ( is_true( self.shield_ent.destroy_begun ) ) if ( is_true( self.shield_ent.destroy_begun ) )
return; return;
self.shield_ent.destroy_begun = 1; self.shield_ent.destroy_begun = 1;
self thread player_wait_and_take_riotshield(); self thread player_wait_and_take_riotshield();
} }
} }
else else
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_light" ); self playrumbleonentity( "damage_light" );
earthquake( 0.5, 0.5, self.origin, 100 ); earthquake( 0.5, 0.5, self.origin, 100 );
self playsound( "fly_riotshield_zm_impact_zombies" ); self playsound( "fly_riotshield_zm_impact_zombies" );
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
} }
self player_set_shield_health( self.shielddamagetaken, damagemax ); self player_set_shield_health( self.shielddamagetaken, damagemax );
} }
} }
player_wait_and_take_riotshield() player_wait_and_take_riotshield()
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
wait 1; wait 1;
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
watchriotshieldmelee() watchriotshieldmelee()
{ {
for (;;) for (;;)
{ {
self waittill( "weapon_melee", weapon ); self waittill( "weapon_melee", weapon );
if ( weapon == level.riotshield_name ) if ( weapon == level.riotshield_name )
self riotshield_melee(); self riotshield_melee();
} }
} }
riotshield_melee() riotshield_melee()
{ {
if ( !isdefined( level.riotshield_knockdown_enemies ) ) if ( !isdefined( level.riotshield_knockdown_enemies ) )
{ {
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
} }
self riotshield_get_enemies_in_range(); self riotshield_get_enemies_in_range();
shield_damage = 0; shield_damage = 0;
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
if ( isdefined( level.riotshield_fling_enemies[i] ) ) if ( isdefined( level.riotshield_fling_enemies[i] ) )
{ {
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
} }
} }
for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
} }
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
if ( shield_damage ) if ( shield_damage )
self player_damage_shield( shield_damage, 0 ); self player_damage_shield( shield_damage, 0 );
} }
riotshield_fling_zombie( player, fling_vec, index ) riotshield_fling_zombie( player, fling_vec, index )
{ {
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield )
return; return;
if ( isdefined( self.riotshield_fling_func ) ) if ( isdefined( self.riotshield_fling_func ) )
{ {
self [[ self.riotshield_fling_func ]]( player ); self [[ self.riotshield_fling_func ]]( player );
return; return;
} }
damage = 2500; damage = 2500;
self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
self.riotshield_death = 1; self.riotshield_death = 1;
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
self startragdoll(); self startragdoll();
self launchragdoll( fling_vec ); self launchragdoll( fling_vec );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }
zombie_knockdown( player, gib ) zombie_knockdown( player, gib )
{ {
if ( isdefined( level.override_riotshield_damage_func ) ) if ( isdefined( level.override_riotshield_damage_func ) )
self [[ level.override_riotshield_damage_func ]]( player, gib ); self [[ level.override_riotshield_damage_func ]]( player, gib );
else else
{ {
if ( gib ) if ( gib )
{ {
self.a.gib_ref = random( level.riotshield_gib_refs ); self.a.gib_ref = random( level.riotshield_gib_refs );
self thread maps\mp\animscripts\zm_death::do_gib(); self thread maps\mp\animscripts\zm_death::do_gib();
} }
} }
} }
riotshield_knockdown_zombie( player, gib ) riotshield_knockdown_zombie( player, gib )
{ {
self endon( "death" ); self endon( "death" );
playsoundatposition( "vox_riotshield_forcehit", self.origin ); playsoundatposition( "vox_riotshield_forcehit", self.origin );
playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.riotshield_knockdown_func ) ) if ( isdefined( self.riotshield_knockdown_func ) )
self [[ self.riotshield_knockdown_func ]]( player, gib ); self [[ self.riotshield_knockdown_func ]]( player, gib );
else else
self zombie_knockdown( player, gib ); self zombie_knockdown( player, gib );
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
self playsound( "fly_riotshield_forcehit" ); self playsound( "fly_riotshield_forcehit" );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }

View File

@ -16,217 +16,217 @@
init() init()
{ {
maps\mp\zombies\_zm_riotshield_tomb::init(); maps\mp\zombies\_zm_riotshield_tomb::init();
set_zombie_var( "riotshield_cylinder_radius", 360 ); set_zombie_var( "riotshield_cylinder_radius", 360 );
set_zombie_var( "riotshield_fling_range", 90 ); set_zombie_var( "riotshield_fling_range", 90 );
set_zombie_var( "riotshield_gib_range", 90 ); set_zombie_var( "riotshield_gib_range", 90 );
set_zombie_var( "riotshield_gib_damage", 75 ); set_zombie_var( "riotshield_gib_damage", 75 );
set_zombie_var( "riotshield_knockdown_range", 90 ); set_zombie_var( "riotshield_knockdown_range", 90 );
set_zombie_var( "riotshield_knockdown_damage", 15 ); set_zombie_var( "riotshield_knockdown_damage", 15 );
set_zombie_var( "riotshield_hit_points", 1500 ); set_zombie_var( "riotshield_hit_points", 1500 );
set_zombie_var( "riotshield_fling_damage_shield", 100 ); set_zombie_var( "riotshield_fling_damage_shield", 100 );
set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); set_zombie_var( "riotshield_knockdown_damage_shield", 15 );
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
level.riotshield_gib_refs = []; level.riotshield_gib_refs = [];
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm";
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm";
level.riotshield_damage_callback = ::player_damage_shield; level.riotshield_damage_callback = ::player_damage_shield;
level.deployed_riotshield_damage_callback = ::deployed_damage_shield; level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
level.transferriotshield = ::transferriotshield; level.transferriotshield = ::transferriotshield;
level.cantransferriotshield = ::cantransferriotshield; level.cantransferriotshield = ::cantransferriotshield;
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
maps\mp\zombies\_zm_equipment::register_equipment( "tomb_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); maps\mp\zombies\_zm_equipment::register_equipment( "tomb_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
} }
onplayerconnect() onplayerconnect()
{ {
self.player_shield_reset_health = ::player_init_shield_health; self.player_shield_reset_health = ::player_init_shield_health;
self.player_shield_apply_damage = ::player_damage_shield; self.player_shield_apply_damage = ::player_damage_shield;
self.player_shield_reset_location = ::player_init_shield_location; self.player_shield_reset_location = ::player_init_shield_location;
self thread watchriotshielduse(); self thread watchriotshielduse();
self thread watchriotshieldmelee(); self thread watchriotshieldmelee();
self thread player_watch_laststand(); self thread player_watch_laststand();
} }
player_damage_shield( idamage, bheld ) player_damage_shield( idamage, bheld )
{ {
damagemax = level.zombie_vars["riotshield_hit_points"]; damagemax = level.zombie_vars["riotshield_hit_points"];
if ( !isdefined( self.shielddamagetaken ) ) if ( !isdefined( self.shielddamagetaken ) )
self.shielddamagetaken = 0; self.shielddamagetaken = 0;
self.shielddamagetaken += idamage; self.shielddamagetaken += idamage;
if ( self.shielddamagetaken >= damagemax ) if ( self.shielddamagetaken >= damagemax )
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_heavy" ); self playrumbleonentity( "damage_heavy" );
earthquake( 1.0, 0.75, self.origin, 100 ); earthquake( 1.0, 0.75, self.origin, 100 );
self playsound( "wpn_riotshield_zm_destroy" ); self playsound( "wpn_riotshield_zm_destroy" );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
if ( is_true( self.shield_ent.destroy_begun ) ) if ( is_true( self.shield_ent.destroy_begun ) )
return; return;
self.shield_ent.destroy_begun = 1; self.shield_ent.destroy_begun = 1;
self thread player_wait_and_take_riotshield(); self thread player_wait_and_take_riotshield();
} }
} }
else else
{ {
if ( bheld || !isdefined( self.shield_ent ) ) if ( bheld || !isdefined( self.shield_ent ) )
{ {
self playrumbleonentity( "damage_light" ); self playrumbleonentity( "damage_light" );
earthquake( 0.5, 0.5, self.origin, 100 ); earthquake( 0.5, 0.5, self.origin, 100 );
self playsound( "fly_riotshield_zm_impact_zombies" ); self playsound( "fly_riotshield_zm_impact_zombies" );
} }
else else
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin ); playsoundatposition( "fly_riotshield_zm_impact_zombies", shield_origin );
} }
self player_set_shield_health( self.shielddamagetaken, damagemax ); self player_set_shield_health( self.shielddamagetaken, damagemax );
} }
} }
player_wait_and_take_riotshield() player_wait_and_take_riotshield()
{ {
shield_origin = self.shield_ent.origin; shield_origin = self.shield_ent.origin;
level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
wait 1; wait 1;
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
self thread player_take_riotshield(); self thread player_take_riotshield();
} }
watchriotshieldmelee() watchriotshieldmelee()
{ {
for (;;) for (;;)
{ {
self waittill( "weapon_melee", weapon ); self waittill( "weapon_melee", weapon );
if ( weapon == level.riotshield_name ) if ( weapon == level.riotshield_name )
self riotshield_melee(); self riotshield_melee();
} }
} }
riotshield_melee() riotshield_melee()
{ {
if ( !isdefined( level.riotshield_knockdown_enemies ) ) if ( !isdefined( level.riotshield_knockdown_enemies ) )
{ {
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
} }
self riotshield_get_enemies_in_range(); self riotshield_get_enemies_in_range();
shield_damage = 0; shield_damage = 0;
level.riotshield_network_choke_count = 0; level.riotshield_network_choke_count = 0;
for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
if ( isdefined( level.riotshield_fling_enemies[i] ) ) if ( isdefined( level.riotshield_fling_enemies[i] ) )
{ {
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
} }
} }
for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
{ {
riotshield_network_choke(); riotshield_network_choke();
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
} }
level.riotshield_knockdown_enemies = []; level.riotshield_knockdown_enemies = [];
level.riotshield_knockdown_gib = []; level.riotshield_knockdown_gib = [];
level.riotshield_fling_enemies = []; level.riotshield_fling_enemies = [];
level.riotshield_fling_vecs = []; level.riotshield_fling_vecs = [];
if ( shield_damage ) if ( shield_damage )
self player_damage_shield( shield_damage, 0 ); self player_damage_shield( shield_damage, 0 );
} }
riotshield_fling_zombie( player, fling_vec, index ) riotshield_fling_zombie( player, fling_vec, index )
{ {
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield )
return; return;
if ( isdefined( self.riotshield_fling_func ) ) if ( isdefined( self.riotshield_fling_func ) )
{ {
self [[ self.riotshield_fling_func ]]( player ); self [[ self.riotshield_fling_func ]]( player );
return; return;
} }
damage = 2500; damage = 2500;
self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( damage, player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
self.riotshield_death = 1; self.riotshield_death = 1;
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
self startragdoll(); self startragdoll();
self launchragdoll( fling_vec ); self launchragdoll( fling_vec );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }
zombie_knockdown( player, gib ) zombie_knockdown( player, gib )
{ {
if ( isdefined( level.override_riotshield_damage_func ) ) if ( isdefined( level.override_riotshield_damage_func ) )
self [[ level.override_riotshield_damage_func ]]( player, gib ); self [[ level.override_riotshield_damage_func ]]( player, gib );
else else
{ {
if ( gib ) if ( gib )
{ {
self.a.gib_ref = random( level.riotshield_gib_refs ); self.a.gib_ref = random( level.riotshield_gib_refs );
self thread maps\mp\animscripts\zm_death::do_gib(); self thread maps\mp\animscripts\zm_death::do_gib();
} }
} }
} }
riotshield_knockdown_zombie( player, gib ) riotshield_knockdown_zombie( player, gib )
{ {
self endon( "death" ); self endon( "death" );
playsoundatposition( "vox_riotshield_forcehit", self.origin ); playsoundatposition( "vox_riotshield_forcehit", self.origin );
playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
if ( !isdefined( self ) || !isalive( self ) ) if ( !isdefined( self ) || !isalive( self ) )
return; return;
if ( isdefined( self.riotshield_knockdown_func ) ) if ( isdefined( self.riotshield_knockdown_func ) )
self [[ self.riotshield_knockdown_func ]]( player, gib ); self [[ self.riotshield_knockdown_func ]]( player, gib );
else else
self zombie_knockdown( player, gib ); self zombie_knockdown( player, gib );
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name ); self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player, player, 0, "MOD_MELEE", 0, level.riotshield_name );
self playsound( "fly_riotshield_forcehit" ); self playsound( "fly_riotshield_forcehit" );
if ( self.health < 1 ) if ( self.health < 1 )
{ {
player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" ); player maps\mp\zombies\_zm_score::player_add_points( "death", "MOD_MELEE" );
} }
else else
{ {
player maps\mp\zombies\_zm_score::player_add_points( "damage_light" ); player maps\mp\zombies\_zm_score::player_add_points( "damage_light" );
} }
} }

View File

@ -15,184 +15,184 @@
init() init()
{ {
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slipgun_zm" ) ) if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slipgun_zm" ) )
return; return;
precachemodel( "t5_weapon_crossbow_bolt" ); precachemodel( "t5_weapon_crossbow_bolt" );
precacheitem( "slip_bolt_zm" ); precacheitem( "slip_bolt_zm" );
precacheitem( "slip_bolt_upgraded_zm" ); precacheitem( "slip_bolt_upgraded_zm" );
if ( is_true( level.slipgun_as_equipment ) ) if ( is_true( level.slipgun_as_equipment ) )
{ {
maps\mp\zombies\_zm_equipment::register_equipment( "slipgun_zm", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SLIPGUN_HOWTO", "jetgun_zm_icon", "slipgun", ::slipgun_activation_watcher_thread, ::transferslipgun, ::dropslipgun, ::pickupslipgun ); maps\mp\zombies\_zm_equipment::register_equipment( "slipgun_zm", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SLIPGUN_HOWTO", "jetgun_zm_icon", "slipgun", ::slipgun_activation_watcher_thread, ::transferslipgun, ::dropslipgun, ::pickupslipgun );
maps\mp\zombies\_zm_equipment::enemies_ignore_equipment( "slipgun_zm" ); maps\mp\zombies\_zm_equipment::enemies_ignore_equipment( "slipgun_zm" );
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "slipgun", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING" ); maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "slipgun", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING" );
} }
set_zombie_var_once( "slipgun_reslip_max_spots", 8 ); set_zombie_var_once( "slipgun_reslip_max_spots", 8 );
set_zombie_var_once( "slipgun_reslip_rate", 6 ); set_zombie_var_once( "slipgun_reslip_rate", 6 );
set_zombie_var_once( "slipgun_max_kill_chain_depth", 16 ); set_zombie_var_once( "slipgun_max_kill_chain_depth", 16 );
set_zombie_var_once( "slipgun_max_kill_round", 100 ); set_zombie_var_once( "slipgun_max_kill_round", 100 );
set_zombie_var_once( "slipgun_chain_radius", 120 ); set_zombie_var_once( "slipgun_chain_radius", 120 );
set_zombie_var_once( "slipgun_chain_wait_min", 0.75, 1 ); set_zombie_var_once( "slipgun_chain_wait_min", 0.75, 1 );
set_zombie_var_once( "slipgun_chain_wait_max", 1.5, 1 ); set_zombie_var_once( "slipgun_chain_wait_max", 1.5, 1 );
level.slippery_spot_count = 0; level.slippery_spot_count = 0;
level.sliquifier_distance_checks = 0; level.sliquifier_distance_checks = 0;
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slipgun_zombie_damage_response ); maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slipgun_zombie_damage_response );
maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slipgun_zombie_death_response ); maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slipgun_zombie_death_response );
level._effect["slipgun_explode"] = loadfx( "weapon/liquifier/fx_liquifier_goo_explo" ); level._effect["slipgun_explode"] = loadfx( "weapon/liquifier/fx_liquifier_goo_explo" );
level._effect["slipgun_splatter"] = loadfx( "maps/zombie/fx_zmb_goo_splat" ); level._effect["slipgun_splatter"] = loadfx( "maps/zombie/fx_zmb_goo_splat" );
level._effect["slipgun_simmer"] = loadfx( "weapon/liquifier/fx_liquifier_goo_sizzle" ); level._effect["slipgun_simmer"] = loadfx( "weapon/liquifier/fx_liquifier_goo_sizzle" );
level._effect["slipgun_viewmodel_eject"] = loadfx( "weapon/liquifier/fx_liquifier_clip_eject" ); level._effect["slipgun_viewmodel_eject"] = loadfx( "weapon/liquifier/fx_liquifier_clip_eject" );
level._effect["slipgun_viewmodel_reload"] = loadfx( "weapon/liquifier/fx_liquifier_reload_steam" ); level._effect["slipgun_viewmodel_reload"] = loadfx( "weapon/liquifier/fx_liquifier_reload_steam" );
onplayerconnect_callback( ::slipgun_player_connect ); onplayerconnect_callback( ::slipgun_player_connect );
thread wait_init_damage(); thread wait_init_damage();
} }
slipgun_zombie_death_response() slipgun_zombie_death_response()
{ {
if ( !isDefined( self.goo_chain_depth ) ) if ( !isDefined( self.goo_chain_depth ) )
return false; return false;
level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self ); level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self );
self explode_into_goo( self.attacker, 0 ); self explode_into_goo( self.attacker, 0 );
return true; return true;
} }
slipgun_zombie_1st_hit_response( upgraded, player ) slipgun_zombie_1st_hit_response( upgraded, player )
{ {
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self orientmode( "face default" ); self orientmode( "face default" );
self.ignoreall = 1; self.ignoreall = 1;
self.gibbed = 1; self.gibbed = 1;
if ( isalive( self ) ) if ( isalive( self ) )
{ {
if ( !isdefined( self.goo_chain_depth ) ) if ( !isdefined( self.goo_chain_depth ) )
self.goo_chain_depth = 0; self.goo_chain_depth = 0;
self.goo_upgraded = upgraded; self.goo_upgraded = upgraded;
if ( self.health > 0 ) if ( self.health > 0 )
{ {
if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() )
self.health = 1; self.health = 1;
self dodamage( level.slipgun_damage, self.origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); self dodamage( level.slipgun_damage, self.origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" );
} }
} }
} }
explode_into_goo( player, chain_depth ) explode_into_goo( player, chain_depth )
{ {
if ( isdefined( self.marked_for_insta_upgraded_death ) ) if ( isdefined( self.marked_for_insta_upgraded_death ) )
return; return;
tag = "J_SpineLower"; tag = "J_SpineLower";
if ( is_true( self.isdog ) ) if ( is_true( self.isdog ) )
tag = "tag_origin"; tag = "tag_origin";
self.guts_explosion = 1; self.guts_explosion = 1;
self playsound( "wpn_slipgun_zombie_explode" ); self playsound( "wpn_slipgun_zombie_explode" );
if ( isdefined( level._effect["slipgun_explode"] ) ) if ( isdefined( level._effect["slipgun_explode"] ) )
playfx( level._effect["slipgun_explode"], self gettagorigin( tag ) ); playfx( level._effect["slipgun_explode"], self gettagorigin( tag ) );
if ( !is_true( self.isdog ) ) if ( !is_true( self.isdog ) )
wait 0.1; wait 0.1;
self ghost(); self ghost();
if ( !isdefined( self.goo_chain_depth ) ) if ( !isdefined( self.goo_chain_depth ) )
self.goo_chain_depth = chain_depth; self.goo_chain_depth = chain_depth;
chain_radius = level.zombie_vars["slipgun_chain_radius"]; chain_radius = level.zombie_vars["slipgun_chain_radius"];
if ( is_true( self.goo_upgraded ) ) if ( is_true( self.goo_upgraded ) )
{ {
chain_radius *= 1.5; chain_radius *= 1.5;
} }
level thread explode_to_near_zombies( player, self.origin, chain_radius, self.goo_chain_depth, self.goo_upgraded ); level thread explode_to_near_zombies( player, self.origin, chain_radius, self.goo_chain_depth, self.goo_upgraded );
} }
explode_to_near_zombies( player, origin, radius, chain_depth, goo_upgraded ) explode_to_near_zombies( player, origin, radius, chain_depth, goo_upgraded )
{ {
if ( level.zombie_vars["slipgun_max_kill_chain_depth"] > 0 && chain_depth > level.zombie_vars["slipgun_max_kill_chain_depth"] ) if ( level.zombie_vars["slipgun_max_kill_chain_depth"] > 0 && chain_depth > level.zombie_vars["slipgun_max_kill_chain_depth"] )
return; return;
enemies = get_round_enemy_array(); enemies = get_round_enemy_array();
enemies = get_array_of_closest( origin, enemies ); enemies = get_array_of_closest( origin, enemies );
minchainwait = level.zombie_vars["slipgun_chain_wait_min"]; minchainwait = level.zombie_vars["slipgun_chain_wait_min"];
maxchainwait = level.zombie_vars["slipgun_chain_wait_max"]; maxchainwait = level.zombie_vars["slipgun_chain_wait_max"];
rsquared = radius * radius; rsquared = radius * radius;
tag = "J_Head"; tag = "J_Head";
marked_zombies = []; marked_zombies = [];
if ( isdefined( enemies ) && enemies.size ) if ( isdefined( enemies ) && enemies.size )
{ {
index = 0; index = 0;
for ( enemy = enemies[index]; distancesquared( enemy.origin, origin ) < rsquared; enemy = enemies[index] ) for ( enemy = enemies[index]; distancesquared( enemy.origin, origin ) < rsquared; enemy = enemies[index] )
{ {
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) && !isdefined( enemy.slipgun_sizzle ) ) if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) && !isdefined( enemy.slipgun_sizzle ) )
{ {
trace = bullettrace( origin + vectorscale( ( 0, 0, 1 ), 50.0 ), enemy.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), 0, undefined, 1 ); trace = bullettrace( origin + vectorscale( ( 0, 0, 1 ), 50.0 ), enemy.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), 0, undefined, 1 );
if ( isdefined( trace["fraction"] ) && trace["fraction"] == 1 ) if ( isdefined( trace["fraction"] ) && trace["fraction"] == 1 )
{ {
enemy.slipgun_sizzle = playfxontag( level._effect["slipgun_simmer"], enemy, tag ); enemy.slipgun_sizzle = playfxontag( level._effect["slipgun_simmer"], enemy, tag );
marked_zombies[marked_zombies.size] = enemy; marked_zombies[marked_zombies.size] = enemy;
} }
} }
index++; index++;
if ( index >= enemies.size ) if ( index >= enemies.size )
break; break;
} }
} }
if ( isdefined( marked_zombies ) && marked_zombies.size ) if ( isdefined( marked_zombies ) && marked_zombies.size )
{ {
foreach ( enemy in marked_zombies ) foreach ( enemy in marked_zombies )
{ {
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) )
{ {
wait( randomfloatrange( minchainwait, maxchainwait ) ); wait( randomfloatrange( minchainwait, maxchainwait ) );
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) )
{ {
if ( !isdefined( enemy.goo_chain_depth ) ) if ( !isdefined( enemy.goo_chain_depth ) )
enemy.goo_chain_depth = chain_depth; enemy.goo_chain_depth = chain_depth;
enemy.goo_upgraded = goo_upgraded; enemy.goo_upgraded = goo_upgraded;
if ( enemy.health > 0 ) if ( enemy.health > 0 )
{ {
if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() )
enemy.health = 1; enemy.health = 1;
enemy dodamage( level.slipgun_damage, origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); enemy dodamage( level.slipgun_damage, origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" );
} }
if ( level.slippery_spot_count < level.zombie_vars["slipgun_reslip_max_spots"] ) if ( level.slippery_spot_count < level.zombie_vars["slipgun_reslip_max_spots"] )
{ {
if ( ( !isdefined( enemy.slick_count ) || enemy.slick_count == 0 ) && enemy.health <= 0 ) if ( ( !isdefined( enemy.slick_count ) || enemy.slick_count == 0 ) && enemy.health <= 0 )
{ {
if ( level.zombie_vars["slipgun_reslip_rate"] > 0 && randomint( level.zombie_vars["slipgun_reslip_rate"] ) == 0 ) if ( level.zombie_vars["slipgun_reslip_rate"] > 0 && randomint( level.zombie_vars["slipgun_reslip_rate"] ) == 0 )
{ {
startpos = origin; startpos = origin;
duration = 24; duration = 24;
thread add_slippery_spot( enemy.origin, duration, startpos ); thread add_slippery_spot( enemy.origin, duration, startpos );
} }
} }
} }
} }
} }
} }
} }
} }

View File

@ -10,104 +10,104 @@
init() init()
{ {
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slowgun_zm" ) ) if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slowgun_zm" ) )
return; return;
registerclientfield( "actor", "slowgun_fx", 12000, 3, "int" ); registerclientfield( "actor", "slowgun_fx", 12000, 3, "int" );
registerclientfield( "actor", "anim_rate", 7000, 5, "float" ); registerclientfield( "actor", "anim_rate", 7000, 5, "float" );
registerclientfield( "allplayers", "anim_rate", 7000, 5, "float" ); registerclientfield( "allplayers", "anim_rate", 7000, 5, "float" );
registerclientfield( "toplayer", "sndParalyzerLoop", 12000, 1, "int" ); registerclientfield( "toplayer", "sndParalyzerLoop", 12000, 1, "int" );
registerclientfield( "toplayer", "slowgun_fx", 12000, 1, "int" ); registerclientfield( "toplayer", "slowgun_fx", 12000, 1, "int" );
level.sliquifier_distance_checks = 0; level.sliquifier_distance_checks = 0;
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::slowgun_on_zombie_spawned ); maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::slowgun_on_zombie_spawned );
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slowgun_zombie_damage_response ); maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slowgun_zombie_damage_response );
maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slowgun_zombie_death_response ); maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slowgun_zombie_death_response );
level._effect["zombie_slowgun_explosion"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate" ); level._effect["zombie_slowgun_explosion"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate" );
level._effect["zombie_slowgun_explosion_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate_ug" ); level._effect["zombie_slowgun_explosion_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate_ug" );
level._effect["zombie_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg" ); level._effect["zombie_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg" );
level._effect["zombie_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg_ug" ); level._effect["zombie_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg_ug" );
level._effect["player_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" ); level._effect["player_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" );
level._effect["player_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" ); level._effect["player_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" );
level._effect["player_slowgun_sizzle_1st"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm_view" ); level._effect["player_slowgun_sizzle_1st"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm_view" );
onplayerconnect_callback( ::slowgun_player_connect ); onplayerconnect_callback( ::slowgun_player_connect );
level.slowgun_damage = 40; level.slowgun_damage = 40;
level.slowgun_damage_ug = 60; level.slowgun_damage_ug = 60;
level.slowgun_damage_mod = "MOD_PROJECTILE_SPLASH"; level.slowgun_damage_mod = "MOD_PROJECTILE_SPLASH";
precacherumble( "damage_heavy" ); precacherumble( "damage_heavy" );
} }
slowgun_on_zombie_spawned() slowgun_on_zombie_spawned()
{ {
self set_anim_rate( 1.0 ); self set_anim_rate( 1.0 );
self.paralyzer_hit_callback = ::zombie_paralyzed; self.paralyzer_hit_callback = ::zombie_paralyzed;
self.paralyzer_damaged_multiplier = 1; self.paralyzer_damaged_multiplier = 1;
self.paralyzer_score_time_ms = gettime(); self.paralyzer_score_time_ms = gettime();
self.paralyzer_slowtime = 0; self.paralyzer_slowtime = 0;
self setclientfield( "slowgun_fx", 0 ); self setclientfield( "slowgun_fx", 0 );
} }
zombie_paralyzed( player, upgraded ) zombie_paralyzed( player, upgraded )
{ {
if ( !can_be_paralyzed( self ) ) if ( !can_be_paralyzed( self ) )
return; return;
insta = player maps\mp\zombies\_zm_powerups::is_insta_kill_active(); insta = player maps\mp\zombies\_zm_powerups::is_insta_kill_active();
if ( upgraded ) if ( upgraded )
self setclientfield( "slowgun_fx", 5 ); self setclientfield( "slowgun_fx", 5 );
else else
self setclientfield( "slowgun_fx", 1 ); self setclientfield( "slowgun_fx", 1 );
if ( self.slowgun_anim_rate <= 0.1 || insta && self.slowgun_anim_rate <= 0.5 ) if ( self.slowgun_anim_rate <= 0.1 || insta && self.slowgun_anim_rate <= 0.5 )
{ {
if ( upgraded ) if ( upgraded )
damage = level.slowgun_damage_ug; damage = level.slowgun_damage_ug;
else else
damage = level.slowgun_damage; damage = level.slowgun_damage;
damage *= randomfloatrange( 0.667, 1.5 ); damage *= randomfloatrange( 0.667, 1.5 );
damage *= self.paralyzer_damaged_multiplier; damage *= self.paralyzer_damaged_multiplier;
if ( !isdefined( self.paralyzer_damage ) ) if ( !isdefined( self.paralyzer_damage ) )
self.paralyzer_damage = 0; self.paralyzer_damage = 0;
// if ( self.paralyzer_damage > 47073 ) // if ( self.paralyzer_damage > 47073 )
// damage *= 47073 / self.paralyzer_damage; // damage *= 47073 / self.paralyzer_damage;
self.paralyzer_damage += damage; self.paralyzer_damage += damage;
if ( insta ) if ( insta )
damage = self.health + 666; damage = self.health + 666;
if ( isalive( self ) ) if ( isalive( self ) )
self dodamage( damage, player.origin, player, player, "none", level.slowgun_damage_mod, 0, "slowgun_zm" ); self dodamage( damage, player.origin, player, player, "none", level.slowgun_damage_mod, 0, "slowgun_zm" );
self.paralyzer_damaged_multiplier *= 1.15; self.paralyzer_damaged_multiplier *= 1.15;
self.paralyzer_damaged_multiplier = min( self.paralyzer_damaged_multiplier, 50 ); self.paralyzer_damaged_multiplier = min( self.paralyzer_damaged_multiplier, 50 );
} }
else else
self.paralyzer_damaged_multiplier = 1; self.paralyzer_damaged_multiplier = 1;
self zombie_slow_for_time( 0.2 ); self zombie_slow_for_time( 0.2 );
} }
player_slow_for_time( time ) player_slow_for_time( time )
{ {
self notify( "player_slow_for_time" ); self notify( "player_slow_for_time" );
self endon( "player_slow_for_time" ); self endon( "player_slow_for_time" );
self endon( "disconnect" ); self endon( "disconnect" );
if ( !is_true( self.slowgun_flying ) ) if ( !is_true( self.slowgun_flying ) )
self thread player_fly_rumble(); self thread player_fly_rumble();
self setclientfieldtoplayer( "slowgun_fx", 1 ); self setclientfieldtoplayer( "slowgun_fx", 1 );
self set_anim_rate( 0.2 ); self set_anim_rate( 0.2 );
wait( time ); wait( time );
self set_anim_rate( 1.0 ); self set_anim_rate( 1.0 );
self setclientfieldtoplayer( "slowgun_fx", 0 ); self setclientfieldtoplayer( "slowgun_fx", 0 );
self.slowgun_flying = 0; self.slowgun_flying = 0;
} }
watch_reset_anim_rate() watch_reset_anim_rate()

View File

@ -12,54 +12,54 @@
whirlwind_kill_zombies( n_level, str_weapon ) whirlwind_kill_zombies( n_level, str_weapon )
{ {
self endon( "death" ); self endon( "death" );
n_range = get_air_blast_range( n_level ); n_range = get_air_blast_range( n_level );
self.n_charge_level = n_level; self.n_charge_level = n_level;
while ( true ) while ( true )
{ {
a_zombies = staff_air_zombie_range( self.origin, n_range ); a_zombies = staff_air_zombie_range( self.origin, n_range );
a_zombies = get_array_of_closest( self.origin, a_zombies ); a_zombies = get_array_of_closest( self.origin, a_zombies );
for ( i = 0; i < a_zombies.size; i++ ) for ( i = 0; i < a_zombies.size; i++ )
{ {
if ( !isdefined( a_zombies[i] ) ) if ( !isdefined( a_zombies[i] ) )
continue; continue;
if ( a_zombies[i].ai_state != "find_flesh" ) if ( a_zombies[i].ai_state != "find_flesh" )
continue; continue;
if ( is_true( self._whirlwind_attract_anim ) ) if ( is_true( self._whirlwind_attract_anim ) )
continue; continue;
v_offset = ( 10, 10, 32 ); v_offset = ( 10, 10, 32 );
if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) ) if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) )
continue; continue;
if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) ) if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) )
continue; continue;
v_offset = ( -10, -10, 64 ); v_offset = ( -10, -10, 64 );
if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) ) if ( !bullet_trace_throttled( self.origin + v_offset, a_zombies[i].origin + v_offset, undefined ) )
continue; continue;
if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) ) if ( !isdefined( a_zombies[i] ) || !isalive( a_zombies[i] ) )
continue; continue;
if ( is_true( a_zombies[i].is_mechz ) ) if ( is_true( a_zombies[i].is_mechz ) )
{ {
a_zombies[i] do_damage_network_safe( self.player_owner, 3300, str_weapon, "MOD_IMPACT" ); a_zombies[i] do_damage_network_safe( self.player_owner, 3300, str_weapon, "MOD_IMPACT" );
} }
else else
{ {
a_zombies[i] thread whirlwind_drag_zombie( self, str_weapon ); a_zombies[i] thread whirlwind_drag_zombie( self, str_weapon );
} }
wait 0.5; wait 0.5;
} }
wait_network_frame(); wait_network_frame();
} }
} }

View File

@ -21,49 +21,49 @@
flame_damage_fx( damageweapon, e_attacker, pct_damage = 1.0 ) flame_damage_fx( damageweapon, e_attacker, pct_damage = 1.0 )
{ {
was_on_fire = is_true( self.is_on_fire ); was_on_fire = is_true( self.is_on_fire );
n_initial_dmg = get_impact_damage( damageweapon ) * pct_damage; n_initial_dmg = get_impact_damage( damageweapon ) * pct_damage;
is_upgraded = damageweapon == "staff_fire_upgraded_zm" || damageweapon == "staff_fire_upgraded2_zm" || damageweapon == "staff_fire_upgraded3_zm"; is_upgraded = damageweapon == "staff_fire_upgraded_zm" || damageweapon == "staff_fire_upgraded2_zm" || damageweapon == "staff_fire_upgraded3_zm";
if ( is_upgraded ) if ( is_upgraded )
{ {
self do_damage_network_safe( e_attacker, self.health, damageweapon, "MOD_BURNED" ); self do_damage_network_safe( e_attacker, self.health, damageweapon, "MOD_BURNED" );
if ( cointoss() ) if ( cointoss() )
self thread zombie_gib_all(); self thread zombie_gib_all();
else else
self thread zombie_gib_guts(); self thread zombie_gib_guts();
return; return;
} }
self endon( "death" ); self endon( "death" );
if ( !is_upgraded && !was_on_fire ) if ( !is_upgraded && !was_on_fire )
{ {
self.is_on_fire = 1; self.is_on_fire = 1;
self thread zombie_set_and_restore_flame_state(); self thread zombie_set_and_restore_flame_state();
wait 0.5; wait 0.5;
self thread flame_damage_over_time( e_attacker, damageweapon, pct_damage ); self thread flame_damage_over_time( e_attacker, damageweapon, pct_damage );
} }
if ( n_initial_dmg > 0 ) if ( n_initial_dmg > 0 )
self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" ); self do_damage_network_safe( e_attacker, n_initial_dmg, damageweapon, "MOD_BURNED" );
} }
get_impact_damage( damageweapon ) get_impact_damage( damageweapon )
{ {
switch ( damageweapon ) switch ( damageweapon )
{ {
case "staff_fire_zm": case "staff_fire_zm":
return 2050; return 2050;
case "staff_fire_upgraded_zm": case "staff_fire_upgraded_zm":
case "staff_fire_upgraded2_zm": case "staff_fire_upgraded2_zm":
case "staff_fire_upgraded3_zm": case "staff_fire_upgraded3_zm":
return 3300; return 3300;
case "one_inch_punch_fire_zm": case "one_inch_punch_fire_zm":
return 0; return 0;
default: default:
return 0; return 0;
} }
} }

View File

@ -12,171 +12,171 @@
staff_lightning_ball_kill_zombies( e_attacker ) staff_lightning_ball_kill_zombies( e_attacker )
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_killing" ); self endon( "stop_killing" );
while ( true ) while ( true )
{ {
a_zombies = staff_lightning_get_valid_targets( e_attacker, self.origin ); a_zombies = staff_lightning_get_valid_targets( e_attacker, self.origin );
if ( isdefined( a_zombies ) ) if ( isdefined( a_zombies ) )
{ {
foreach ( zombie in a_zombies ) foreach ( zombie in a_zombies )
{ {
if ( staff_lightning_is_target_valid( zombie ) ) if ( staff_lightning_is_target_valid( zombie ) )
{ {
e_attacker thread staff_lightning_arc_fx( self, zombie ); e_attacker thread staff_lightning_arc_fx( self, zombie );
wait 0.2; wait 0.2;
} }
} }
} }
wait 0.05; wait 0.05;
} }
} }
staff_lightning_get_valid_targets( player, v_source ) staff_lightning_get_valid_targets( player, v_source )
{ {
player endon( "disconnect" ); player endon( "disconnect" );
a_enemies = []; a_enemies = [];
a_zombies = getaiarray( level.zombie_team ); a_zombies = getaiarray( level.zombie_team );
a_zombies = get_array_of_closest( v_source, a_zombies, undefined, undefined, self.n_range ); a_zombies = get_array_of_closest( v_source, a_zombies, undefined, undefined, self.n_range );
if ( isdefined( a_zombies ) ) if ( isdefined( a_zombies ) )
{ {
foreach ( ai_zombie in a_zombies ) foreach ( ai_zombie in a_zombies )
{ {
if ( staff_lightning_is_target_valid( ai_zombie ) ) if ( staff_lightning_is_target_valid( ai_zombie ) )
a_enemies[a_enemies.size] = ai_zombie; a_enemies[a_enemies.size] = ai_zombie;
} }
} }
return a_enemies; return a_enemies;
} }
staff_lightning_is_target_valid( ai_zombie ) staff_lightning_is_target_valid( ai_zombie )
{ {
if ( !isdefined( ai_zombie ) ) if ( !isdefined( ai_zombie ) )
return false; return false;
if ( is_true( ai_zombie.is_being_zapped ) ) if ( is_true( ai_zombie.is_being_zapped ) )
return false; return false;
return true; return true;
} }
staff_lightning_arc_fx( e_source, ai_zombie ) staff_lightning_arc_fx( e_source, ai_zombie )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( !isdefined( ai_zombie ) ) if ( !isdefined( ai_zombie ) )
return; return;
if ( !bullet_trace_throttled( e_source.origin, ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), ai_zombie ) ) if ( !bullet_trace_throttled( e_source.origin, ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), ai_zombie ) )
{ {
return; return;
} }
if ( isdefined( e_source ) && isdefined( ai_zombie ) && isalive( ai_zombie ) ) if ( isdefined( e_source ) && isdefined( ai_zombie ) && isalive( ai_zombie ) )
{ {
if ( is_true( ai_zombie.is_mechz ) ) if ( is_true( ai_zombie.is_mechz ) )
{ {
level thread staff_lightning_ball_damage_over_time_mechz( e_source, ai_zombie, self ); level thread staff_lightning_ball_damage_over_time_mechz( e_source, ai_zombie, self );
} }
else else
{ {
level thread staff_lightning_ball_damage_over_time( e_source, ai_zombie, self ); level thread staff_lightning_ball_damage_over_time( e_source, ai_zombie, self );
} }
} }
} }
staff_lightning_ball_damage_over_time( e_source, e_target, e_attacker ) staff_lightning_ball_damage_over_time( e_source, e_target, e_attacker )
{ {
e_attacker endon( "disconnect" ); e_attacker endon( "disconnect" );
e_target setclientfield( "lightning_impact_fx", 1 ); e_target setclientfield( "lightning_impact_fx", 1 );
e_target thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", e_target.animname ); e_target thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "electrocute", e_target.animname );
n_range_sq = e_source.n_range * e_source.n_range; n_range_sq = e_source.n_range * e_source.n_range;
e_target.is_being_zapped = 1; e_target.is_being_zapped = 1;
e_target setclientfield( "lightning_arc_fx", 1 ); e_target setclientfield( "lightning_arc_fx", 1 );
wait 0.5; wait 0.5;
if ( isdefined( e_source ) ) if ( isdefined( e_source ) )
{ {
if ( !isdefined( e_source.n_damage_per_sec ) ) if ( !isdefined( e_source.n_damage_per_sec ) )
e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel ); e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel );
n_damage_per_pulse = e_source.n_damage_per_sec * 1.0; n_damage_per_pulse = e_source.n_damage_per_sec * 1.0;
} }
while ( isdefined( e_source ) && isalive( e_target ) ) while ( isdefined( e_source ) && isalive( e_target ) )
{ {
e_target thread stun_zombie(); e_target thread stun_zombie();
wait 1.0; wait 1.0;
if ( !isdefined( e_source ) || !isalive( e_target ) ) if ( !isdefined( e_source ) || !isalive( e_target ) )
break; break;
n_dist_sq = distancesquared( e_source.origin, e_target.origin ); n_dist_sq = distancesquared( e_source.origin, e_target.origin );
if ( n_dist_sq > n_range_sq ) if ( n_dist_sq > n_range_sq )
break; break;
if ( isalive( e_target ) && isdefined( e_source ) ) if ( isalive( e_target ) && isdefined( e_source ) )
{ {
e_target thread zombie_shock_eyes(); e_target thread zombie_shock_eyes();
e_target thread staff_lightning_kill_zombie( e_attacker, e_source.str_weapon ); e_target thread staff_lightning_kill_zombie( e_attacker, e_source.str_weapon );
break; break;
} }
} }
if ( isdefined( e_target ) ) if ( isdefined( e_target ) )
{ {
e_target.is_being_zapped = 0; e_target.is_being_zapped = 0;
e_target setclientfield( "lightning_arc_fx", 0 ); e_target setclientfield( "lightning_arc_fx", 0 );
} }
} }
staff_lightning_ball_damage_over_time_mechz( e_source, e_target, e_attacker ) staff_lightning_ball_damage_over_time_mechz( e_source, e_target, e_attacker )
{ {
e_attacker endon( "disconnect" ); e_attacker endon( "disconnect" );
n_range_sq = e_source.n_range * e_source.n_range; n_range_sq = e_source.n_range * e_source.n_range;
e_target.is_being_zapped = 1; e_target.is_being_zapped = 1;
wait 0.5; wait 0.5;
if ( isdefined( e_source ) ) if ( isdefined( e_source ) )
{ {
if ( !isdefined( e_source.n_damage_per_sec ) ) if ( !isdefined( e_source.n_damage_per_sec ) )
e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel ); e_source.n_damage_per_sec = get_lightning_ball_damage_per_sec( e_attacker.chargeshotlevel );
n_damage_per_pulse = e_source.n_damage_per_sec * 1.0; n_damage_per_pulse = e_source.n_damage_per_sec * 1.0;
} }
while ( isdefined( e_source ) && isalive( e_target ) ) while ( isdefined( e_source ) && isalive( e_target ) )
{ {
wait 1.0; wait 1.0;
if ( !isdefined( e_source ) || !isalive( e_target ) ) if ( !isdefined( e_source ) || !isalive( e_target ) )
break; break;
n_dist_sq = distancesquared( e_source.origin, e_target.origin ); n_dist_sq = distancesquared( e_source.origin, e_target.origin );
if ( n_dist_sq > n_range_sq ) if ( n_dist_sq > n_range_sq )
break; break;
if ( isalive( e_target ) && isdefined( e_source ) ) if ( isalive( e_target ) && isdefined( e_source ) )
{ {
e_target do_damage_network_safe( e_attacker, e_source.n_damage_per_sec, e_source.str_weapon, "MOD_RIFLE_BULLET" ); e_target do_damage_network_safe( e_attacker, e_source.n_damage_per_sec, e_source.str_weapon, "MOD_RIFLE_BULLET" );
break; break;
} }
} }
if ( isdefined( e_target ) ) if ( isdefined( e_target ) )
{ {
e_target.is_being_zapped = 0; e_target.is_being_zapped = 0;
} }
} }
get_lightning_ball_damage_per_sec( n_charge ) get_lightning_ball_damage_per_sec( n_charge )
{ {
return 2500; return 2500;
} }

View File

@ -8,60 +8,60 @@
watch_staff_revive_fired() watch_staff_revive_fired()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
while ( true ) while ( true )
{ {
self waittill( "missile_fire", e_projectile, str_weapon ); self waittill( "missile_fire", e_projectile, str_weapon );
if ( !( str_weapon == "staff_revive_zm" ) ) if ( !( str_weapon == "staff_revive_zm" ) )
continue; continue;
self thread staff_revive_impact_wait(); self thread staff_revive_impact_wait();
self thread staff_revive_reload( str_weapon ); self thread staff_revive_reload( str_weapon );
} }
} }
staff_revive_impact_wait() staff_revive_impact_wait()
{ {
self waittill( "projectile_impact", e_ent, v_explode_point, n_radius, str_name, n_impact ); self waittill( "projectile_impact", e_ent, v_explode_point, n_radius, str_name, n_impact );
self thread staff_revive_impact( v_explode_point ); self thread staff_revive_impact( v_explode_point );
} }
staff_revive_reload( str_weapon ) staff_revive_reload( str_weapon )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
wait 0.4; wait 0.4;
ammo_clip = self getWeaponAmmoClip(str_weapon); ammo_clip = self getWeaponAmmoClip(str_weapon);
ammo_stock = self getWeaponAmmoStock(str_weapon); ammo_stock = self getWeaponAmmoStock(str_weapon);
if (ammo_clip < 1 && ammo_stock >= 1) if (ammo_clip < 1 && ammo_stock >= 1)
{ {
self setWeaponAmmoClip(str_weapon, ammo_clip + 1); self setWeaponAmmoClip(str_weapon, ammo_clip + 1);
self setWeaponAmmoStock(str_weapon, ammo_stock - 1); self setWeaponAmmoStock(str_weapon, ammo_stock - 1);
return; return;
} }
while (1) while (1)
{ {
self waittill( "weapon_change" ); self waittill( "weapon_change" );
if (self getCurrentWeapon() == str_weapon) if (self getCurrentWeapon() == str_weapon)
{ {
ammo_clip = self getWeaponAmmoClip(str_weapon); ammo_clip = self getWeaponAmmoClip(str_weapon);
ammo_stock = self getWeaponAmmoStock(str_weapon); ammo_stock = self getWeaponAmmoStock(str_weapon);
if (ammo_clip < 1 && ammo_stock >= 1) if (ammo_clip < 1 && ammo_stock >= 1)
{ {
self setWeaponAmmoClip(str_weapon, ammo_clip + 1); self setWeaponAmmoClip(str_weapon, ammo_clip + 1);
self setWeaponAmmoStock(str_weapon, ammo_stock - 1); self setWeaponAmmoStock(str_weapon, ammo_stock - 1);
} }
return; return;
} }
} }
} }

View File

@ -21,268 +21,268 @@
init_time_bomb() init_time_bomb()
{ {
time_bomb_precache(); time_bomb_precache();
level thread time_bomb_post_init(); level thread time_bomb_post_init();
flag_init( "time_bomb_round_killed" ); flag_init( "time_bomb_round_killed" );
flag_init( "time_bomb_enemies_restored" ); flag_init( "time_bomb_enemies_restored" );
flag_init( "time_bomb_zombie_respawning_done" ); flag_init( "time_bomb_zombie_respawning_done" );
flag_init( "time_bomb_restore_active" ); flag_init( "time_bomb_restore_active" );
flag_init( "time_bomb_restore_done" ); flag_init( "time_bomb_restore_done" );
flag_init( "time_bomb_global_restore_done" ); flag_init( "time_bomb_global_restore_done" );
flag_init( "time_bomb_detonation_enabled" ); flag_init( "time_bomb_detonation_enabled" );
flag_init( "time_bomb_stores_door_state" ); flag_init( "time_bomb_stores_door_state" );
registerclientfield( "world", "time_bomb_saved_round_number", 12000, 8, "int" ); registerclientfield( "world", "time_bomb_saved_round_number", 12000, 8, "int" );
registerclientfield( "world", "time_bomb_lua_override", 12000, 1, "int" ); registerclientfield( "world", "time_bomb_lua_override", 12000, 1, "int" );
registerclientfield( "world", "time_bomb_hud_toggle", 12000, 1, "int" ); registerclientfield( "world", "time_bomb_hud_toggle", 12000, 1, "int" );
registerclientfield( "toplayer", "sndTimebombLoop", 12000, 2, "int" ); registerclientfield( "toplayer", "sndTimebombLoop", 12000, 2, "int" );
maps\mp\zombies\_zm_weapons::register_zombie_weapon_callback( "time_bomb_zm", ::player_give_time_bomb ); maps\mp\zombies\_zm_weapons::register_zombie_weapon_callback( "time_bomb_zm", ::player_give_time_bomb );
level.zombiemode_time_bomb_give_func = ::player_give_time_bomb; level.zombiemode_time_bomb_give_func = ::player_give_time_bomb;
include_weapon( "time_bomb_zm", 1 ); include_weapon( "time_bomb_zm", 1 );
maps\mp\zombies\_zm_weapons::add_limited_weapon( "time_bomb_zm", 1 ); maps\mp\zombies\_zm_weapons::add_limited_weapon( "time_bomb_zm", 1 );
add_time_bomb_to_mystery_box(); add_time_bomb_to_mystery_box();
register_equipment_for_level( "time_bomb_zm" ); register_equipment_for_level( "time_bomb_zm" );
register_equipment_for_level( "time_bomb_detonator_zm" ); register_equipment_for_level( "time_bomb_detonator_zm" );
if ( !isdefined( level.round_wait_func ) ) if ( !isdefined( level.round_wait_func ) )
level.round_wait_func = ::time_bomb_round_wait; level.round_wait_func = ::time_bomb_round_wait;
level.zombie_round_change_custom = ::time_bomb_custom_round_change; level.zombie_round_change_custom = ::time_bomb_custom_round_change;
level._effect["time_bomb_set"] = loadfx( "weapon/time_bomb/fx_time_bomb_detonate" ); level._effect["time_bomb_set"] = loadfx( "weapon/time_bomb/fx_time_bomb_detonate" );
level._effect["time_bomb_ammo_fx"] = loadfx( "misc/fx_zombie_powerup_on" ); level._effect["time_bomb_ammo_fx"] = loadfx( "misc/fx_zombie_powerup_on" );
level._effect["time_bomb_respawns_enemy"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" ); level._effect["time_bomb_respawns_enemy"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" );
level._effect["time_bomb_kills_enemy"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_death" ); level._effect["time_bomb_kills_enemy"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_death" );
level._time_bomb = spawnstruct(); level._time_bomb = spawnstruct();
level._time_bomb.enemy_type = []; level._time_bomb.enemy_type = [];
register_time_bomb_enemy( "zombie", ::is_zombie_round, ::time_bomb_saves_zombie_data, ::time_bomb_respawns_zombies ); register_time_bomb_enemy( "zombie", ::is_zombie_round, ::time_bomb_saves_zombie_data, ::time_bomb_respawns_zombies );
register_time_bomb_enemy_default( "zombie" ); register_time_bomb_enemy_default( "zombie" );
level._time_bomb.last_round_restored = -1; level._time_bomb.last_round_restored = -1;
flag_set( "time_bomb_detonation_enabled" ); flag_set( "time_bomb_detonation_enabled" );
} }
player_give_time_bomb() player_give_time_bomb()
{ {
assert( isplayer( self ), "player_give_time_bomb can only be used on players!" ); assert( isplayer( self ), "player_give_time_bomb can only be used on players!" );
self giveweapon( "time_bomb_zm" ); self giveweapon( "time_bomb_zm" );
self swap_weapon_to_time_bomb(); self swap_weapon_to_time_bomb();
self thread show_time_bomb_hints(); self thread show_time_bomb_hints();
self thread time_bomb_think(); self thread time_bomb_think();
self thread detonator_think(); self thread detonator_think();
self thread time_bomb_inventory_slot_think(); self thread time_bomb_inventory_slot_think();
self thread destroy_time_bomb_save_if_user_bleeds_out_or_disconnects(); self thread destroy_time_bomb_save_if_user_bleeds_out_or_disconnects();
self thread sndwatchforweapswitch(); self thread sndwatchforweapswitch();
} }
show_time_bomb_hints() show_time_bomb_hints()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self endon( "player_lost_time_bomb" ); self endon( "player_lost_time_bomb" );
if ( !isdefined( self.time_bomb_hints_shown ) ) if ( !isdefined( self.time_bomb_hints_shown ) )
self.time_bomb_hints_shown = 0; self.time_bomb_hints_shown = 0;
if ( !self.time_bomb_hints_shown ) if ( !self.time_bomb_hints_shown )
{ {
self.time_bomb_hints_shown = 1; self.time_bomb_hints_shown = 1;
wait 0.5; wait 0.5;
self show_time_bomb_notification( &"ZOMBIE_TIMEBOMB_PICKUP" ); self show_time_bomb_notification( &"ZOMBIE_TIMEBOMB_PICKUP" );
self thread _watch_for_player_switch_to_time_bomb(); self thread _watch_for_player_switch_to_time_bomb();
wait 3.5; wait 3.5;
self clean_up_time_bomb_notifications(); self clean_up_time_bomb_notifications();
} }
} }
time_bomb_think() time_bomb_think()
{ {
self notify( "_time_bomb_kill_thread" ); self notify( "_time_bomb_kill_thread" );
self endon( "_time_bomb_kill_thread" ); self endon( "_time_bomb_kill_thread" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "player_lost_time_bomb" ); self endon( "player_lost_time_bomb" );
while ( true ) while ( true )
{ {
self waittill( "grenade_fire", e_grenade, str_grenade_name ); self waittill( "grenade_fire", e_grenade, str_grenade_name );
if ( str_grenade_name == "time_bomb_zm" ) if ( str_grenade_name == "time_bomb_zm" )
{ {
if ( isdefined( str_grenade_name ) && str_grenade_name == "time_bomb_zm" ) if ( isdefined( str_grenade_name ) && str_grenade_name == "time_bomb_zm" )
{ {
e_grenade thread setup_time_bomb_detonation_model(); e_grenade thread setup_time_bomb_detonation_model();
time_bomb_saves_data(0); time_bomb_saves_data(0);
e_grenade time_bomb_model_init(); e_grenade time_bomb_model_init();
self thread swap_weapon_to_detonator( e_grenade ); self thread swap_weapon_to_detonator( e_grenade );
self thread time_bomb_thrown_vo(); self thread time_bomb_thrown_vo();
} }
} }
} }
} }
swap_weapon_to_detonator( e_grenade ) swap_weapon_to_detonator( e_grenade )
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self endon( "player_lost_time_bomb" ); self endon( "player_lost_time_bomb" );
b_switch_to_weapon = 0; b_switch_to_weapon = 0;
if ( isdefined( e_grenade ) ) if ( isdefined( e_grenade ) )
{ {
b_switch_to_weapon = 1; b_switch_to_weapon = 1;
wait 0.4; wait 0.4;
} }
self takeweapon( "time_bomb_zm" ); self takeweapon( "time_bomb_zm" );
self giveweapon( "time_bomb_detonator_zm" ); self giveweapon( "time_bomb_detonator_zm" );
self setweaponammoclip( "time_bomb_detonator_zm", 0 ); self setweaponammoclip( "time_bomb_detonator_zm", 0 );
self setweaponammostock( "time_bomb_detonator_zm", 0 ); self setweaponammostock( "time_bomb_detonator_zm", 0 );
self setactionslot( 2, "weapon", "time_bomb_detonator_zm" ); self setactionslot( 2, "weapon", "time_bomb_detonator_zm" );
if ( b_switch_to_weapon ) if ( b_switch_to_weapon )
self switchtoweapon( "time_bomb_detonator_zm" ); self switchtoweapon( "time_bomb_detonator_zm" );
self giveweapon( "time_bomb_zm" ); self giveweapon( "time_bomb_zm" );
} }
detonator_think() detonator_think()
{ {
self notify( "_detonator_think_done" ); self notify( "_detonator_think_done" );
self endon( "_detonator_think_done" ); self endon( "_detonator_think_done" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "player_lost_time_bomb" ); self endon( "player_lost_time_bomb" );
debug_time_bomb_print( "player picked up detonator" ); debug_time_bomb_print( "player picked up detonator" );
while ( true ) while ( true )
{ {
self waittill( "detonate" ); self waittill( "detonate" );
debug_time_bomb_print( "detonate detected! " ); debug_time_bomb_print( "detonate detected! " );
if ( time_bomb_save_exists() && flag( "time_bomb_detonation_enabled" ) ) if ( time_bomb_save_exists() && flag( "time_bomb_detonation_enabled" ) )
{ {
level.time_bomb_save_data.player_used = self; level.time_bomb_save_data.player_used = self;
level.time_bomb_save_data.time_bomb_model thread detonate_time_bomb(); level.time_bomb_save_data.time_bomb_model thread detonate_time_bomb();
self notify( "player_activates_timebomb" ); self notify( "player_activates_timebomb" );
self thread time_bomb_detonation_vo(); self thread time_bomb_detonation_vo();
} }
} }
} }
detonate_time_bomb() detonate_time_bomb()
{ {
if ( isdefined( level.time_bomb_save_data.time_bomb_model ) && isdefined( level.time_bomb_save_data.time_bomb_model.origin ) ) if ( isdefined( level.time_bomb_save_data.time_bomb_model ) && isdefined( level.time_bomb_save_data.time_bomb_model.origin ) )
playsoundatposition( "zmb_timebomb_3d_timer_end", level.time_bomb_save_data.time_bomb_model.origin ); playsoundatposition( "zmb_timebomb_3d_timer_end", level.time_bomb_save_data.time_bomb_model.origin );
if ( time_bomb_save_exists() ) if ( time_bomb_save_exists() )
time_bomb_detonation(); time_bomb_detonation();
else else
delete_time_bomb_model(); delete_time_bomb_model();
} }
time_bomb_detonation() time_bomb_detonation()
{ {
level setclientfield( "time_bomb_lua_override", 1 ); level setclientfield( "time_bomb_lua_override", 1 );
playsoundatposition( "zmb_timebomb_timechange_2d", ( 0, 0, 0 ) ); playsoundatposition( "zmb_timebomb_timechange_2d", ( 0, 0, 0 ) );
_time_bomb_show_overlay(); _time_bomb_show_overlay();
time_bomb_clears_global_data(); time_bomb_clears_global_data();
time_bomb_clears_player_data(); time_bomb_clears_player_data();
wait 4; wait 4;
_time_bomb_kill_all_active_enemies(); _time_bomb_kill_all_active_enemies();
delete_time_bomb_model(); delete_time_bomb_model();
_time_bomb_hide_overlay(); _time_bomb_hide_overlay();
level thread set_time_bomb_restore_active(); level thread set_time_bomb_restore_active();
level setclientfield( "time_bomb_lua_override", 0 ); level setclientfield( "time_bomb_lua_override", 0 );
if ( isdefined( level._time_bomb.functionality_override ) && level._time_bomb.functionality_override ) if ( isdefined( level._time_bomb.functionality_override ) && level._time_bomb.functionality_override )
return; return;
level notify( "time_bomb_detonation_complete" ); level notify( "time_bomb_detonation_complete" );
} }
_time_bomb_show_overlay() _time_bomb_show_overlay()
{ {
flag_clear( "time_bomb_restore_done" ); flag_clear( "time_bomb_restore_done" );
a_players = get_players(); a_players = get_players();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zombie_time_bomb_overlay", player ); maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zombie_time_bomb_overlay", player );
player freezecontrols( 1 ); player freezecontrols( 1 );
player enableinvulnerability(); player enableinvulnerability();
} }
level thread kill_overlay_at_match_end(); level thread kill_overlay_at_match_end();
} }
_time_bomb_hide_overlay( n_time_start ) _time_bomb_hide_overlay( n_time_start )
{ {
n_time_end = gettime(); n_time_end = gettime();
if ( isdefined( n_time_start ) ) if ( isdefined( n_time_start ) )
{ {
n_time_elapsed = ( n_time_end - n_time_start ) * 0.001; n_time_elapsed = ( n_time_end - n_time_start ) * 0.001;
n_delay = 4 - n_time_elapsed; n_delay = 4 - n_time_elapsed;
n_delay = clamp( n_delay, 0, 4 ); n_delay = clamp( n_delay, 0, 4 );
if ( n_delay > 0 ) if ( n_delay > 0 )
{ {
wait( n_delay ); wait( n_delay );
timebomb_wait_for_hostmigration(); timebomb_wait_for_hostmigration();
} }
} }
timebomb_wait_for_hostmigration(); timebomb_wait_for_hostmigration();
a_players = get_players(); a_players = get_players();
flag_set( "time_bomb_restore_done" ); flag_set( "time_bomb_restore_done" );
foreach ( player in a_players ) foreach ( player in a_players )
{ {
player freezecontrols( 0 ); player freezecontrols( 0 );
player disableInvulnerability(); player disableInvulnerability();
} }
} }
set_time_bomb_restore_active() set_time_bomb_restore_active()
{ {
flag_set( "time_bomb_restore_active" ); flag_set( "time_bomb_restore_active" );
wait 0.05; wait 0.05;
flag_clear( "time_bomb_restore_active" ); flag_clear( "time_bomb_restore_active" );
} }
_time_bomb_kill_all_active_enemies() _time_bomb_kill_all_active_enemies()
{ {
for ( zombies = time_bomb_get_enemy_array(); zombies.size > 0; zombies = time_bomb_get_enemy_array() ) for ( zombies = time_bomb_get_enemy_array(); zombies.size > 0; zombies = time_bomb_get_enemy_array() )
{ {
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
timebomb_wait_for_hostmigration(); timebomb_wait_for_hostmigration();
if ( isdefined( zombies[i] ) ) if ( isdefined( zombies[i] ) )
zombies[i] thread _kill_time_bomb_enemy(); zombies[i] thread _kill_time_bomb_enemy();
} }
} }
} }
_kill_time_bomb_enemy() _kill_time_bomb_enemy()
{ {
self dodamage( self.health + 100, self.origin, level.time_bomb_save_data.player_used, level.time_bomb_save_data.player_used, self.origin ); self dodamage( self.health + 100, self.origin, level.time_bomb_save_data.player_used, level.time_bomb_save_data.player_used, self.origin );
self ghost(); self ghost();
playfx( level._effect["time_bomb_kills_enemy"], self.origin ); playfx( level._effect["time_bomb_kills_enemy"], self.origin );
if ( isdefined( self ) && isdefined( self.anchor ) ) if ( isdefined( self ) && isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
wait_network_frame(); wait_network_frame();
if ( isdefined( self ) ) if ( isdefined( self ) )
{ {
if ( isdefined( self.script_mover ) ) if ( isdefined( self.script_mover ) )
self.script_mover delete(); self.script_mover delete();
self delete(); self delete();
} }
} }

View File

@ -9,135 +9,135 @@
calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk )
{ {
if ( self.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) if ( self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
{ {
return n_target_zombie.health + 1; return n_target_zombie.health + 1;
} }
else else
{ {
return 2000; return 2000;
} }
} }
get_grenade_charge_power( player ) get_grenade_charge_power( player )
{ {
player endon( "disconnect" ); player endon( "disconnect" );
if ( self.n_cookedtime >= 1000 && self.n_cookedtime < 2000 ) if ( self.n_cookedtime >= 1000 && self.n_cookedtime < 2000 )
{ {
return 3; return 3;
} }
else if ( self.n_cookedtime >= 2000 && self.n_cookedtime < 3000 ) else if ( self.n_cookedtime >= 2000 && self.n_cookedtime < 3000 )
{ {
return 6; return 6;
} }
else if ( self.n_cookedtime >= 3000 ) else if ( self.n_cookedtime >= 3000 )
{ {
if ( player.current_tomahawk_weapon != "upgraded_tomahawk_zm" ) if ( player.current_tomahawk_weapon != "upgraded_tomahawk_zm" )
{ {
return 6; return 6;
} }
else else
{ {
return 9; return 9;
} }
} }
return 1; return 1;
} }
tomahawk_attack_zombies( m_tomahawk, a_zombies ) tomahawk_attack_zombies( m_tomahawk, a_zombies )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( !isdefined( a_zombies ) ) if ( !isdefined( a_zombies ) )
{ {
self thread tomahawk_return_player( m_tomahawk, 0 ); self thread tomahawk_return_player( m_tomahawk, 0 );
return; return;
} }
n_attack_limit = m_tomahawk.n_grenade_charge_power - 1; n_attack_limit = m_tomahawk.n_grenade_charge_power - 1;
if ( a_zombies.size <= n_attack_limit ) if ( a_zombies.size <= n_attack_limit )
n_attack_limit = a_zombies.size; n_attack_limit = a_zombies.size;
for ( i = 0; i < n_attack_limit; i++ ) for ( i = 0; i < n_attack_limit; i++ )
{ {
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) ) if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
{ {
tag = "J_Head"; tag = "J_Head";
if ( a_zombies[i].isdog ) if ( a_zombies[i].isdog )
tag = "J_Spine1"; tag = "J_Spine1";
if ( isdefined( a_zombies[i].hit_by_tomahawk ) && !a_zombies[i].hit_by_tomahawk ) if ( isdefined( a_zombies[i].hit_by_tomahawk ) && !a_zombies[i].hit_by_tomahawk )
{ {
v_target = a_zombies[i] gettagorigin( tag ); v_target = a_zombies[i] gettagorigin( tag );
m_tomahawk moveto( v_target, 0.3 ); m_tomahawk moveto( v_target, 0.3 );
m_tomahawk waittill( "movedone" ); m_tomahawk waittill( "movedone" );
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) ) if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
{ {
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag ); playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag );
else else
playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag ); playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag );
playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" ); playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" );
a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 ); a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 );
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk ); n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk );
a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
a_zombies[i].hit_by_tomahawk = 1; a_zombies[i].hit_by_tomahawk = 1;
self maps\mp\zombies\_zm_score::add_to_player_score( 10 ); self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
} }
} }
} }
wait 0.2; wait 0.2;
} }
self thread tomahawk_return_player( m_tomahawk, n_attack_limit ); self thread tomahawk_return_player( m_tomahawk, n_attack_limit );
} }
tomahawk_return_player( m_tomahawk, num_zombie_hit = 5 ) tomahawk_return_player( m_tomahawk, num_zombie_hit = 5 )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
n_dist = distance2dsquared( m_tomahawk.origin, self.origin ); n_dist = distance2dsquared( m_tomahawk.origin, self.origin );
n_attack_limit = m_tomahawk.n_grenade_charge_power - 1; n_attack_limit = m_tomahawk.n_grenade_charge_power - 1;
while ( n_dist > 4096 ) while ( n_dist > 4096 )
{ {
m_tomahawk moveto( self geteye(), 0.25 ); m_tomahawk moveto( self geteye(), 0.25 );
if ( num_zombie_hit < n_attack_limit ) if ( num_zombie_hit < n_attack_limit )
{ {
self tomahawk_check_for_zombie( m_tomahawk ); self tomahawk_check_for_zombie( m_tomahawk );
num_zombie_hit++; num_zombie_hit++;
} }
wait 0.1; wait 0.1;
n_dist = distance2dsquared( m_tomahawk.origin, self geteye() ); n_dist = distance2dsquared( m_tomahawk.origin, self geteye() );
} }
if ( isdefined( m_tomahawk.a_has_powerup ) ) if ( isdefined( m_tomahawk.a_has_powerup ) )
{ {
foreach ( powerup in m_tomahawk.a_has_powerup ) foreach ( powerup in m_tomahawk.a_has_powerup )
{ {
if ( isdefined( powerup ) ) if ( isdefined( powerup ) )
powerup.origin = self.origin; powerup.origin = self.origin;
} }
} }
m_tomahawk delete(); m_tomahawk delete();
self playsoundtoplayer( "wpn_tomahawk_catch_plr", self ); self playsoundtoplayer( "wpn_tomahawk_catch_plr", self );
self playsound( "wpn_tomahawk_catch_npc" ); self playsound( "wpn_tomahawk_catch_npc" );
wait 5; wait 5;
self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self ); self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self );
self givemaxammo( self.current_tomahawk_weapon ); self givemaxammo( self.current_tomahawk_weapon );
a_zombies = getaispeciesarray( "axis", "all" ); a_zombies = getaispeciesarray( "axis", "all" );
foreach ( ai_zombie in a_zombies ) foreach ( ai_zombie in a_zombies )
ai_zombie.hit_by_tomahawk = 0; ai_zombie.hit_by_tomahawk = 0;
self setclientfieldtoplayer( "tomahawk_in_use", 3 ); self setclientfieldtoplayer( "tomahawk_in_use", 3 );
} }

View File

@ -12,40 +12,40 @@ triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
{ {
self thread show_current_weapon(player); self thread show_current_weapon(player);
retrievingweapon = player wl_has_stored_weapondata(); retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon ) if ( !retrievingweapon )
{ {
weaponname = player get_nonalternate_weapon( weaponname ); weaponname = player get_nonalternate_weapon( weaponname );
if ( !triggerweaponslockerisvalidweapon( weaponname ) ) if ( !triggerweaponslockerisvalidweapon( weaponname ) )
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
else else
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
} }
else else
{ {
weapondata = player wl_get_stored_weapondata(); weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) ) if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
weapontogive = weapondata["name"]; weapontogive = weapondata["name"];
primaries = player getweaponslistprimaries(); primaries = player getweaponslistprimaries();
maxweapons = get_player_weapon_limit( player ); maxweapons = get_player_weapon_limit( player );
weaponname = player get_nonalternate_weapon( weaponname ); weaponname = player get_nonalternate_weapon( weaponname );
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
{ {
if ( !triggerweaponslockerisvalidweapon( weaponname ) ) if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{ {
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
return; return;
} }
} }
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
} }
} }
show_current_weapon(player) show_current_weapon(player)
@ -59,16 +59,16 @@ show_current_weapon(player)
num = player getentitynumber(); num = player getentitynumber();
displayname = "None"; displayname = "None";
if (player wl_has_stored_weapondata()) if (player wl_has_stored_weapondata())
{ {
weapondata = player wl_get_stored_weapondata(); weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) ) if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
displayname = getweapondisplayname( weapondata["name"] ); displayname = getweapondisplayname( weapondata["name"] );
} }
if (isDefined(stub.weaponlockerhud[num])) if (isDefined(stub.weaponlockerhud[num]))
{ {
@ -146,8 +146,8 @@ wl_set_stored_weapondata( weapondata )
weapondata["alt_stock"] -= clip_alt_missing; weapondata["alt_stock"] -= clip_alt_missing;
} }
if ( level.weapon_locker_online ) if ( level.weapon_locker_online )
self set_stored_weapondata( weapondata, level.weapon_locker_map ); self set_stored_weapondata( weapondata, level.weapon_locker_map );
else else
self.stored_weapon_data = weapondata; self.stored_weapon_data = weapondata;
} }

View File

@ -5,310 +5,310 @@
init_weapon_upgrade() init_weapon_upgrade()
{ {
init_spawnable_weapon_upgrade(); init_spawnable_weapon_upgrade();
weapon_spawns = []; weapon_spawns = [];
weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); weapon_spawns = getentarray( "weapon_upgrade", "targetname" );
for ( i = 0; i < weapon_spawns.size; i++ ) for ( i = 0; i < weapon_spawns.size; i++ )
{ {
scripts\zm\replaced\utility::wallbuy( weapon_spawns[i].zombie_weapon_upgrade, weapon_spawns[i].target + "_weapon_upgrade", weapon_spawns[i].targetname, weapon_spawns[i].origin, weapon_spawns[i].angles, 0 ); scripts\zm\replaced\utility::wallbuy( weapon_spawns[i].zombie_weapon_upgrade, weapon_spawns[i].target + "_weapon_upgrade", weapon_spawns[i].targetname, weapon_spawns[i].origin, weapon_spawns[i].angles, 0 );
} }
} }
init_spawnable_weapon_upgrade() init_spawnable_weapon_upgrade()
{ {
spawn_list = []; spawn_list = [];
spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 );
if ( !is_true( level.headshots_only ) ) if ( !is_true( level.headshots_only ) )
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 );
match_string = ""; match_string = "";
location = level.scr_zm_map_start_location; location = level.scr_zm_map_start_location;
if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) )
location = level.default_start_location; location = level.default_start_location;
match_string = level.scr_zm_ui_gametype; match_string = level.scr_zm_ui_gametype;
if ( "" != location ) if ( "" != location )
match_string = match_string + "_" + location; match_string = match_string + "_" + location;
match_string_plus_space = " " + match_string; match_string_plus_space = " " + match_string;
for ( i = 0; i < spawnable_weapon_spawns.size; i++ ) for ( i = 0; i < spawnable_weapon_spawns.size; i++ )
{ {
spawnable_weapon = spawnable_weapon_spawns[i]; spawnable_weapon = spawnable_weapon_spawns[i];
if ( isdefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) ) if ( isdefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) )
continue; continue;
if ( !isdefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) if ( !isdefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" )
{ {
spawn_list[spawn_list.size] = spawnable_weapon; spawn_list[spawn_list.size] = spawnable_weapon;
continue; continue;
} }
matches = strtok( spawnable_weapon.script_noteworthy, "," ); matches = strtok( spawnable_weapon.script_noteworthy, "," );
for ( j = 0; j < matches.size; j++ ) for ( j = 0; j < matches.size; j++ )
{ {
if ( matches[j] == match_string || matches[j] == match_string_plus_space ) if ( matches[j] == match_string || matches[j] == match_string_plus_space )
spawn_list[spawn_list.size] = spawnable_weapon; spawn_list[spawn_list.size] = spawnable_weapon;
} }
} }
tempmodel = spawn( "script_model", ( 0, 0, 0 ) ); tempmodel = spawn( "script_model", ( 0, 0, 0 ) );
for ( i = 0; i < spawn_list.size; i++ ) for ( i = 0; i < spawn_list.size; i++ )
{ {
clientfieldname = spawn_list[i].zombie_weapon_upgrade + "_" + spawn_list[i].origin; clientfieldname = spawn_list[i].zombie_weapon_upgrade + "_" + spawn_list[i].origin;
numbits = 2; numbits = 2;
if ( isdefined( level._wallbuy_override_num_bits ) ) if ( isdefined( level._wallbuy_override_num_bits ) )
numbits = level._wallbuy_override_num_bits; numbits = level._wallbuy_override_num_bits;
registerclientfield( "world", clientfieldname, 1, numbits, "int" ); registerclientfield( "world", clientfieldname, 1, numbits, "int" );
target_struct = getstruct( spawn_list[i].target, "targetname" ); target_struct = getstruct( spawn_list[i].target, "targetname" );
if ( spawn_list[i].targetname == "buildable_wallbuy" ) if ( spawn_list[i].targetname == "buildable_wallbuy" )
{ {
bits = 4; bits = 4;
if ( isdefined( level.buildable_wallbuy_weapons ) ) if ( isdefined( level.buildable_wallbuy_weapons ) )
bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 ); bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 );
registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" ); registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" );
spawn_list[i].clientfieldname = clientfieldname; spawn_list[i].clientfieldname = clientfieldname;
continue; continue;
} }
precachemodel( target_struct.model ); precachemodel( target_struct.model );
unitrigger_stub = spawnstruct(); unitrigger_stub = spawnstruct();
unitrigger_stub.origin = spawn_list[i].origin; unitrigger_stub.origin = spawn_list[i].origin;
unitrigger_stub.angles = spawn_list[i].angles; unitrigger_stub.angles = spawn_list[i].angles;
tempmodel.origin = spawn_list[i].origin; tempmodel.origin = spawn_list[i].origin;
tempmodel.angles = spawn_list[i].angles; tempmodel.angles = spawn_list[i].angles;
mins = undefined; mins = undefined;
maxs = undefined; maxs = undefined;
absmins = undefined; absmins = undefined;
absmaxs = undefined; absmaxs = undefined;
tempmodel setmodel( target_struct.model ); tempmodel setmodel( target_struct.model );
tempmodel useweaponhidetags( spawn_list[i].zombie_weapon_upgrade ); tempmodel useweaponhidetags( spawn_list[i].zombie_weapon_upgrade );
mins = tempmodel getmins(); mins = tempmodel getmins();
maxs = tempmodel getmaxs(); maxs = tempmodel getmaxs();
absmins = tempmodel getabsmins(); absmins = tempmodel getabsmins();
absmaxs = tempmodel getabsmaxs(); absmaxs = tempmodel getabsmaxs();
bounds = absmaxs - absmins; bounds = absmaxs - absmins;
unitrigger_stub.script_length = 64; unitrigger_stub.script_length = 64;
unitrigger_stub.script_width = bounds[1]; unitrigger_stub.script_width = bounds[1];
unitrigger_stub.script_height = bounds[2]; unitrigger_stub.script_height = bounds[2];
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 ); unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 );
unitrigger_stub.target = spawn_list[i].target; unitrigger_stub.target = spawn_list[i].target;
unitrigger_stub.targetname = spawn_list[i].targetname; unitrigger_stub.targetname = spawn_list[i].targetname;
unitrigger_stub.cursor_hint = "HINT_NOICON"; unitrigger_stub.cursor_hint = "HINT_NOICON";
if ( spawn_list[i].targetname == "weapon_upgrade" ) if ( spawn_list[i].targetname == "weapon_upgrade" )
{ {
unitrigger_stub.cost = get_weapon_cost( spawn_list[i].zombie_weapon_upgrade ); unitrigger_stub.cost = get_weapon_cost( spawn_list[i].zombie_weapon_upgrade );
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
{ {
unitrigger_stub.hint_string = get_weapon_hint( spawn_list[i].zombie_weapon_upgrade ); unitrigger_stub.hint_string = get_weapon_hint( spawn_list[i].zombie_weapon_upgrade );
unitrigger_stub.hint_parm1 = unitrigger_stub.cost; unitrigger_stub.hint_parm1 = unitrigger_stub.cost;
} }
else else
{ {
unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[i].zombie_weapon_upgrade ); unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[i].zombie_weapon_upgrade );
if ( !isdefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) if ( !isdefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" )
unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[i].zombie_weapon_upgrade; unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[i].zombie_weapon_upgrade;
unitrigger_stub.hint_parm2 = unitrigger_stub.cost; unitrigger_stub.hint_parm2 = unitrigger_stub.cost;
unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
} }
} }
unitrigger_stub.weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; unitrigger_stub.weapon_upgrade = spawn_list[i].zombie_weapon_upgrade;
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.require_look_at = 1; unitrigger_stub.require_look_at = 1;
if ( isdefined( spawn_list[i].require_look_from ) && spawn_list[i].require_look_from ) if ( isdefined( spawn_list[i].require_look_from ) && spawn_list[i].require_look_from )
unitrigger_stub.require_look_from = 1; unitrigger_stub.require_look_from = 1;
unitrigger_stub.zombie_weapon_upgrade = spawn_list[i].zombie_weapon_upgrade; unitrigger_stub.zombie_weapon_upgrade = spawn_list[i].zombie_weapon_upgrade;
unitrigger_stub.clientfieldname = clientfieldname; unitrigger_stub.clientfieldname = clientfieldname;
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) )
{ {
if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" ) if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" )
unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2); unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2);
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
} }
else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" )
{ {
unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weap_claymore::claymore_unitrigger_update_prompt; unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weap_claymore::claymore_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, scripts\zm\replaced\_zm_weap_claymore::buy_claymores ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, scripts\zm\replaced\_zm_weap_claymore::buy_claymores );
} }
else else
{ {
if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) ) if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) )
unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt; unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt;
else else
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
} }
spawn_list[i].trigger_stub = unitrigger_stub; spawn_list[i].trigger_stub = unitrigger_stub;
} }
level._spawned_wallbuys = spawn_list; level._spawned_wallbuys = spawn_list;
tempmodel delete(); tempmodel delete();
} }
add_dynamic_wallbuy( weapon, wallbuy, pristine ) add_dynamic_wallbuy( weapon, wallbuy, pristine )
{ {
spawned_wallbuy = undefined; spawned_wallbuy = undefined;
for ( i = 0; i < level._spawned_wallbuys.size; i++ ) for ( i = 0; i < level._spawned_wallbuys.size; i++ )
{ {
if ( level._spawned_wallbuys[i].target == wallbuy ) if ( level._spawned_wallbuys[i].target == wallbuy )
{ {
spawned_wallbuy = level._spawned_wallbuys[i]; spawned_wallbuy = level._spawned_wallbuys[i];
break; break;
} }
} }
if ( !isdefined( spawned_wallbuy ) ) if ( !isdefined( spawned_wallbuy ) )
{ {
return; return;
} }
if ( isdefined( spawned_wallbuy.trigger_stub ) ) if ( isdefined( spawned_wallbuy.trigger_stub ) )
{ {
return; return;
} }
target_struct = getstruct( wallbuy, "targetname" ); target_struct = getstruct( wallbuy, "targetname" );
wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles ); wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles );
clientfieldname = spawned_wallbuy.clientfieldname; clientfieldname = spawned_wallbuy.clientfieldname;
model = getweaponmodel( weapon ); model = getweaponmodel( weapon );
unitrigger_stub = spawnstruct(); unitrigger_stub = spawnstruct();
unitrigger_stub.origin = target_struct.origin; unitrigger_stub.origin = target_struct.origin;
unitrigger_stub.angles = target_struct.angles; unitrigger_stub.angles = target_struct.angles;
wallmodel.origin = target_struct.origin; wallmodel.origin = target_struct.origin;
wallmodel.angles = target_struct.angles; wallmodel.angles = target_struct.angles;
mins = undefined; mins = undefined;
maxs = undefined; maxs = undefined;
absmins = undefined; absmins = undefined;
absmaxs = undefined; absmaxs = undefined;
wallmodel setmodel( model ); wallmodel setmodel( model );
wallmodel useweaponhidetags( weapon ); wallmodel useweaponhidetags( weapon );
mins = wallmodel getmins(); mins = wallmodel getmins();
maxs = wallmodel getmaxs(); maxs = wallmodel getmaxs();
absmins = wallmodel getabsmins(); absmins = wallmodel getabsmins();
absmaxs = wallmodel getabsmaxs(); absmaxs = wallmodel getabsmaxs();
bounds = absmaxs - absmins; bounds = absmaxs - absmins;
unitrigger_stub.script_length = 64; unitrigger_stub.script_length = 64;
unitrigger_stub.script_width = bounds[1]; unitrigger_stub.script_width = bounds[1];
unitrigger_stub.script_height = bounds[2]; unitrigger_stub.script_height = bounds[2];
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 ); unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 );
unitrigger_stub.target = spawned_wallbuy.target; unitrigger_stub.target = spawned_wallbuy.target;
unitrigger_stub.targetname = "weapon_upgrade"; unitrigger_stub.targetname = "weapon_upgrade";
unitrigger_stub.cursor_hint = "HINT_NOICON"; unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.first_time_triggered = !pristine; unitrigger_stub.first_time_triggered = !pristine;
if ( !is_melee_weapon( weapon ) ) if ( !is_melee_weapon( weapon ) )
{ {
if ( pristine || weapon == "claymore_zm" ) if ( pristine || weapon == "claymore_zm" )
unitrigger_stub.hint_string = get_weapon_hint( weapon ); unitrigger_stub.hint_string = get_weapon_hint( weapon );
else else
unitrigger_stub.hint_string = get_weapon_hint_ammo(); unitrigger_stub.hint_string = get_weapon_hint_ammo();
unitrigger_stub.cost = get_weapon_cost( weapon ); unitrigger_stub.cost = get_weapon_cost( weapon );
unitrigger_stub.hint_parm1 = unitrigger_stub.cost; unitrigger_stub.hint_parm1 = unitrigger_stub.cost;
} }
unitrigger_stub.weapon_upgrade = weapon; unitrigger_stub.weapon_upgrade = weapon;
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.require_look_at = 1; unitrigger_stub.require_look_at = 1;
unitrigger_stub.zombie_weapon_upgrade = weapon; unitrigger_stub.zombie_weapon_upgrade = weapon;
unitrigger_stub.clientfieldname = clientfieldname; unitrigger_stub.clientfieldname = clientfieldname;
unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
if ( is_melee_weapon( weapon ) ) if ( is_melee_weapon( weapon ) )
{ {
if ( weapon == "tazer_knuckles_zm" ) if ( weapon == "tazer_knuckles_zm" )
unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2); unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2);
maps\mp\zombies\_zm_melee_weapon::add_stub( unitrigger_stub, weapon ); maps\mp\zombies\_zm_melee_weapon::add_stub( unitrigger_stub, weapon );
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_melee_weapon::melee_weapon_think ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_melee_weapon::melee_weapon_think );
} }
else if ( weapon == "claymore_zm" ) else if ( weapon == "claymore_zm" )
{ {
unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt; unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores );
} }
else else
{ {
if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) ) if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) )
unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt; unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt;
else else
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
} }
spawned_wallbuy.trigger_stub = unitrigger_stub; spawned_wallbuy.trigger_stub = unitrigger_stub;
weaponidx = undefined; weaponidx = undefined;
if ( isdefined( level.buildable_wallbuy_weapons ) ) if ( isdefined( level.buildable_wallbuy_weapons ) )
{ {
for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ ) for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ )
{ {
if ( weapon == level.buildable_wallbuy_weapons[i] ) if ( weapon == level.buildable_wallbuy_weapons[i] )
{ {
weaponidx = i; weaponidx = i;
break; break;
} }
} }
} }
if ( isdefined( weaponidx ) ) if ( isdefined( weaponidx ) )
{ {
level setclientfield( clientfieldname + "_idx", weaponidx + 1 ); level setclientfield( clientfieldname + "_idx", weaponidx + 1 );
wallmodel delete(); wallmodel delete();
if ( !pristine ) if ( !pristine )
level setclientfield( clientfieldname, 1 ); level setclientfield( clientfieldname, 1 );
} }
else else
{ {
level setclientfield( clientfieldname, 1 ); level setclientfield( clientfieldname, 1 );
wallmodel show(); wallmodel show();
} }
} }
lethal_grenade_update_prompt( player ) lethal_grenade_update_prompt( player )
{ {
weapon = self.stub.zombie_weapon_upgrade; weapon = self.stub.zombie_weapon_upgrade;
cost = get_weapon_cost( weapon ); cost = get_weapon_cost( weapon );
self.stub.hint_string = get_weapon_hint( weapon ); self.stub.hint_string = get_weapon_hint( weapon );
self sethintstring( self.stub.hint_string, cost ); self sethintstring( self.stub.hint_string, cost );
self.stub.cursor_hint = "HINT_WEAPON"; self.stub.cursor_hint = "HINT_WEAPON";
self.stub.cursor_hint_weapon = weapon; self.stub.cursor_hint_weapon = weapon;
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
return 1; return 1;
} }
weapon_give( weapon, is_upgrade, magic_box, nosound ) weapon_give( weapon, is_upgrade, magic_box, nosound )
@ -471,17 +471,17 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
ammo_give( weapon ) ammo_give( weapon )
{ {
give_ammo = 0; give_ammo = 0;
if ( !is_offhand_weapon( weapon ) ) if ( !is_offhand_weapon( weapon ) )
{ {
weapon = get_weapon_with_attachments( weapon ); weapon = get_weapon_with_attachments( weapon );
if ( isdefined( weapon ) ) if ( isdefined( weapon ) )
{ {
stockmax = weaponstartammo( weapon ); stockmax = weaponstartammo( weapon );
clipmax = weaponclipsize( weapon ); clipmax = weaponclipsize( weapon );
ammocount = self getammocount( weapon ); ammocount = self getammocount( weapon );
give_ammo = ammocount < (stockmax + clipmax); give_ammo = ammocount < (stockmax + clipmax);
@ -498,22 +498,22 @@ ammo_give( weapon )
give_ammo = ammocount < (stockmax + clipmax); give_ammo = ammocount < (stockmax + clipmax);
} }
} }
} }
} }
else if ( self has_weapon_or_upgrade( weapon ) ) else if ( self has_weapon_or_upgrade( weapon ) )
{ {
if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) if ( self getammocount( weapon ) < weaponmaxammo( weapon ) )
give_ammo = 1; give_ammo = 1;
} }
if ( give_ammo ) if ( give_ammo )
{ {
self play_sound_on_ent( "purchase" ); self play_sound_on_ent( "purchase" );
self givemaxammo( weapon ); self givemaxammo( weapon );
self setWeaponAmmoClip( weapon, weaponClipSize(weapon) ); self setWeaponAmmoClip( weapon, weaponClipSize(weapon) );
alt_weap = weaponaltweaponname( weapon ); alt_weap = weaponaltweaponname( weapon );
if ( "none" != alt_weap ) if ( "none" != alt_weap )
{ {
self givemaxammo( alt_weap ); self givemaxammo( alt_weap );
self setWeaponAmmoClip( alt_weap, weaponClipSize(alt_weap) ); self setWeaponAmmoClip( alt_weap, weaponClipSize(alt_weap) );
@ -521,11 +521,11 @@ ammo_give( weapon )
self notify("weapon_ammo_change"); self notify("weapon_ammo_change");
return true; return true;
} }
if ( !give_ammo ) if ( !give_ammo )
return false; return false;
} }
weapon_spawn_think() weapon_spawn_think()

View File

@ -20,8 +20,8 @@ game_mode_spawn_player_logic()
meat_bounce_override( pos, normal, ent, bounce ) meat_bounce_override( pos, normal, ent, bounce )
{ {
if ( isdefined( ent ) && isplayer( ent ) && is_player_valid(ent) && !ent hasWeapon("item_meat_zm") && !is_true(ent.dont_touch_the_meat) ) if ( isdefined( ent ) && isplayer( ent ) && is_player_valid(ent) && !ent hasWeapon("item_meat_zm") && !is_true(ent.dont_touch_the_meat) )
{ {
level thread meat_stink_player( ent ); level thread meat_stink_player( ent );
if ( isdefined( self.owner ) ) if ( isdefined( self.owner ) )
@ -33,48 +33,48 @@ meat_bounce_override( pos, normal, ent, bounce )
self delete(); self delete();
return; return;
} }
else else
{ {
players = getplayers(); players = getplayers();
closest_player = undefined; closest_player = undefined;
closest_player_dist = 10000.0; closest_player_dist = 10000.0;
foreach (player in players) foreach (player in players)
{ {
if ( !is_player_valid(player) ) if ( !is_player_valid(player) )
continue; continue;
if ( player hasWeapon("item_meat_zm") ) if ( player hasWeapon("item_meat_zm") )
continue; continue;
if ( is_true(player.dont_touch_the_meat) ) if ( is_true(player.dont_touch_the_meat) )
continue; continue;
distsq = distancesquared( pos, player.origin ); distsq = distancesquared( pos, player.origin );
if ( distsq < closest_player_dist ) if ( distsq < closest_player_dist )
{ {
closest_player = player; closest_player = player;
closest_player_dist = distsq; closest_player_dist = distsq;
} }
} }
if ( isdefined( closest_player ) ) if ( isdefined( closest_player ) )
{ {
level thread meat_stink_player( closest_player ); level thread meat_stink_player( closest_player );
if ( isdefined( self.owner ) ) if ( isdefined( self.owner ) )
{ {
maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self );
self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" );
} }
self delete(); self delete();
return; return;
} }
} }
playfx( level._effect["meat_impact"], self.origin ); playfx( level._effect["meat_impact"], self.origin );
@ -152,14 +152,14 @@ meat_stink( who )
return; return;
} }
who.pre_meat_weapon = who getcurrentweapon(); who.pre_meat_weapon = who getcurrentweapon();
level notify( "meat_grabbed" ); level notify( "meat_grabbed" );
who notify( "meat_grabbed" ); who notify( "meat_grabbed" );
who playsound( "zmb_pickup_meat" ); who playsound( "zmb_pickup_meat" );
who increment_is_drinking(); who increment_is_drinking();
who giveweapon( "item_meat_zm" ); who giveweapon( "item_meat_zm" );
who switchtoweapon( "item_meat_zm" ); who switchtoweapon( "item_meat_zm" );
who setweaponammoclip( "item_meat_zm", 1 ); who setweaponammoclip( "item_meat_zm", 1 );
who setMoveSpeedScale(0.75); who setMoveSpeedScale(0.75);
who.ignoreme = 0; who.ignoreme = 0;
level.meat_player = who; level.meat_player = who;
@ -370,12 +370,12 @@ meat_stink_cleanup_on_downed()
meat_powerup_reset_on_disconnect() meat_powerup_reset_on_disconnect()
{ {
level endon("meat_thrown"); level endon("meat_thrown");
level endon("meat_grabbed"); level endon("meat_grabbed");
self endon("player_downed"); self endon("player_downed");
self endon("bled_out"); self endon("bled_out");
self waittill("disconnect"); self waittill("disconnect");
level.meat_player = undefined; level.meat_player = undefined;
@ -388,7 +388,7 @@ meat_powerup_reset_on_disconnect()
} }
} }
level notify("meat_inactive"); level notify("meat_inactive");
} }
meat_stink_on_ground(position_to_play) meat_stink_on_ground(position_to_play)
@ -457,15 +457,15 @@ meat_stink_player( who )
meat_stink_player_create() meat_stink_player_create()
{ {
self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
tagname = "J_SpineLower"; tagname = "J_SpineLower";
self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) );
self.meat_stink_3p setmodel( "tag_origin" ); self.meat_stink_3p setmodel( "tag_origin" );
self.meat_stink_3p linkto( self, tagname ); self.meat_stink_3p linkto( self, tagname );
playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" );
self setclientfieldtoplayer( "meat_stink", 1 ); self setclientfieldtoplayer( "meat_stink", 1 );
} }
print_meat_msg(meat_player, verb) print_meat_msg(meat_player, verb)

View File

@ -12,148 +12,148 @@
init_craftables() init_craftables()
{ {
precachestring( &"ZM_PRISON_KEY_DOOR" ); precachestring( &"ZM_PRISON_KEY_DOOR" );
level.craftable_piece_count = 10; level.craftable_piece_count = 10;
register_clientfields(); register_clientfields();
add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 ); add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 );
add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" ); add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" );
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) ); make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) );
add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 ); add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 );
add_zombie_craftable_vox_category( "packasplat", "build_bsm" ); add_zombie_craftable_vox_category( "packasplat", "build_bsm" );
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorscale( ( 0, -1, 0 ), 90.0 ) ); make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorscale( ( 0, -1, 0 ), 90.0 ) );
level.craftable_piece_swap_allowed = 0; level.craftable_piece_swap_allowed = 0;
add_zombie_craftable( "quest_key1" ); add_zombie_craftable( "quest_key1" );
add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane, 1 ); add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane, 1 );
add_zombie_craftable( "refuelable_plane", &"ZM_PRISON_REFUEL_PLANE", &"ZM_PRISON_REFUELING_PLANE", undefined, ::onfullycrafted_refueled, 1 ); add_zombie_craftable( "refuelable_plane", &"ZM_PRISON_REFUEL_PLANE", &"ZM_PRISON_REFUELING_PLANE", undefined, ::onfullycrafted_refueled, 1 );
in_game_checklist_setup(); in_game_checklist_setup();
} }
include_craftables() include_craftables()
{ {
level.zombie_include_craftables["open_table"].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt; level.zombie_include_craftables["open_table"].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt;
craftable_name = "packasplat"; craftable_name = "packasplat";
packasplat_case = generate_zombie_craftable_piece( craftable_name, "case", "p6_zm_al_packasplat_suitcase", 48, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_case", 1, "build_bsm" ); packasplat_case = generate_zombie_craftable_piece( craftable_name, "case", "p6_zm_al_packasplat_suitcase", 48, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_case", 1, "build_bsm" );
packasplat_fuse = generate_zombie_craftable_piece( craftable_name, "fuse", "p6_zm_al_packasplat_engine", 32, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_fuse", 1, "build_bsm" ); packasplat_fuse = generate_zombie_craftable_piece( craftable_name, "fuse", "p6_zm_al_packasplat_engine", 32, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_fuse", 1, "build_bsm" );
packasplat_blood = generate_zombie_craftable_piece( craftable_name, "blood", "p6_zm_al_packasplat_iv", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_blood", 1, "build_bsm" ); packasplat_blood = generate_zombie_craftable_piece( craftable_name, "blood", "p6_zm_al_packasplat_iv", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_blood", 1, "build_bsm" );
packasplat = spawnstruct(); packasplat = spawnstruct();
packasplat.name = craftable_name; packasplat.name = craftable_name;
packasplat add_craftable_piece( packasplat_case ); packasplat add_craftable_piece( packasplat_case );
packasplat add_craftable_piece( packasplat_fuse ); packasplat add_craftable_piece( packasplat_fuse );
packasplat add_craftable_piece( packasplat_blood ); packasplat add_craftable_piece( packasplat_blood );
packasplat.triggerthink = ::packasplatcraftable; packasplat.triggerthink = ::packasplatcraftable;
include_craftable( packasplat ); include_craftable( packasplat );
craftable_name = "alcatraz_shield_zm"; craftable_name = "alcatraz_shield_zm";
riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" ); riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" );
riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" ); riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" );
riotshield_clamp = generate_zombie_craftable_piece( craftable_name, "clamp", "t6_wpn_zmb_shield_dlc2_shackles", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" ); riotshield_clamp = generate_zombie_craftable_piece( craftable_name, "clamp", "t6_wpn_zmb_shield_dlc2_shackles", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" );
riotshield = spawnstruct(); riotshield = spawnstruct();
riotshield.name = craftable_name; riotshield.name = craftable_name;
riotshield add_craftable_piece( riotshield_dolly ); riotshield add_craftable_piece( riotshield_dolly );
riotshield add_craftable_piece( riotshield_door ); riotshield add_craftable_piece( riotshield_door );
riotshield add_craftable_piece( riotshield_clamp ); riotshield add_craftable_piece( riotshield_clamp );
riotshield.onbuyweapon = ::onbuyweapon_riotshield; riotshield.onbuyweapon = ::onbuyweapon_riotshield;
riotshield.triggerthink = ::riotshieldcraftable; riotshield.triggerthink = ::riotshieldcraftable;
include_craftable( riotshield ); include_craftable( riotshield );
include_key_craftable( "quest_key1", "p6_zm_al_key" ); include_key_craftable( "quest_key1", "p6_zm_al_key" );
craftable_name = "plane"; craftable_name = "plane";
plane_cloth = generate_zombie_craftable_piece( craftable_name, "cloth", "p6_zm_al_clothes_pile_lrg", 48, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 1 ); plane_cloth = generate_zombie_craftable_piece( craftable_name, "cloth", "p6_zm_al_clothes_pile_lrg", 48, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 1 );
plane_fueltanks = generate_zombie_craftable_piece( craftable_name, "fueltanks", "veh_t6_dlc_zombie_part_fuel", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_feul_tanks", undefined, 2 ); plane_fueltanks = generate_zombie_craftable_piece( craftable_name, "fueltanks", "veh_t6_dlc_zombie_part_fuel", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_feul_tanks", undefined, 2 );
plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 ); plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 );
plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 ); plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 );
plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 ); plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 );
plane_cloth.is_shared = 1; plane_cloth.is_shared = 1;
plane_fueltanks.is_shared = 1; plane_fueltanks.is_shared = 1;
plane_engine.is_shared = 1; plane_engine.is_shared = 1;
plane_steering.is_shared = 1; plane_steering.is_shared = 1;
plane_rigging.is_shared = 1; plane_rigging.is_shared = 1;
plane_cloth.client_field_state = undefined; plane_cloth.client_field_state = undefined;
plane_fueltanks.client_field_state = undefined; plane_fueltanks.client_field_state = undefined;
plane_engine.client_field_state = undefined; plane_engine.client_field_state = undefined;
plane_steering.client_field_state = undefined; plane_steering.client_field_state = undefined;
plane_rigging.client_field_state = undefined; plane_rigging.client_field_state = undefined;
plane_cloth.pickup_alias = "sidequest_sheets"; plane_cloth.pickup_alias = "sidequest_sheets";
plane_fueltanks.pickup_alias = "sidequest_oxygen"; plane_fueltanks.pickup_alias = "sidequest_oxygen";
plane_engine.pickup_alias = "sidequest_engine"; plane_engine.pickup_alias = "sidequest_engine";
plane_steering.pickup_alias = "sidequest_valves"; plane_steering.pickup_alias = "sidequest_valves";
plane_rigging.pickup_alias = "sidequest_rigging"; plane_rigging.pickup_alias = "sidequest_rigging";
plane = spawnstruct(); plane = spawnstruct();
plane.name = craftable_name; plane.name = craftable_name;
plane add_craftable_piece( plane_cloth ); plane add_craftable_piece( plane_cloth );
plane add_craftable_piece( plane_engine ); plane add_craftable_piece( plane_engine );
plane add_craftable_piece( plane_fueltanks ); plane add_craftable_piece( plane_fueltanks );
plane add_craftable_piece( plane_steering ); plane add_craftable_piece( plane_steering );
plane add_craftable_piece( plane_rigging ); plane add_craftable_piece( plane_rigging );
plane.triggerthink = ::planecraftable; plane.triggerthink = ::planecraftable;
plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt;
include_craftable( plane ); include_craftable( plane );
craftable_name = "refuelable_plane"; craftable_name = "refuelable_plane";
refuelable_plane_gas1 = generate_zombie_craftable_piece( craftable_name, "fuel1", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 6 ); refuelable_plane_gas1 = generate_zombie_craftable_piece( craftable_name, "fuel1", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 6 );
refuelable_plane_gas2 = generate_zombie_craftable_piece( craftable_name, "fuel2", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 7 ); refuelable_plane_gas2 = generate_zombie_craftable_piece( craftable_name, "fuel2", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 7 );
refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 ); refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 );
refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 ); refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 );
refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 ); refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 );
refuelable_plane_gas1.is_shared = 1; refuelable_plane_gas1.is_shared = 1;
refuelable_plane_gas2.is_shared = 1; refuelable_plane_gas2.is_shared = 1;
refuelable_plane_gas3.is_shared = 1; refuelable_plane_gas3.is_shared = 1;
refuelable_plane_gas4.is_shared = 1; refuelable_plane_gas4.is_shared = 1;
refuelable_plane_gas5.is_shared = 1; refuelable_plane_gas5.is_shared = 1;
refuelable_plane_gas1.client_field_state = undefined; refuelable_plane_gas1.client_field_state = undefined;
refuelable_plane_gas2.client_field_state = undefined; refuelable_plane_gas2.client_field_state = undefined;
refuelable_plane_gas3.client_field_state = undefined; refuelable_plane_gas3.client_field_state = undefined;
refuelable_plane_gas4.client_field_state = undefined; refuelable_plane_gas4.client_field_state = undefined;
refuelable_plane_gas5.client_field_state = undefined; refuelable_plane_gas5.client_field_state = undefined;
refuelable_plane = spawnstruct(); refuelable_plane = spawnstruct();
refuelable_plane.name = craftable_name; refuelable_plane.name = craftable_name;
refuelable_plane add_craftable_piece( refuelable_plane_gas1 ); refuelable_plane add_craftable_piece( refuelable_plane_gas1 );
refuelable_plane add_craftable_piece( refuelable_plane_gas2 ); refuelable_plane add_craftable_piece( refuelable_plane_gas2 );
refuelable_plane add_craftable_piece( refuelable_plane_gas3 ); refuelable_plane add_craftable_piece( refuelable_plane_gas3 );
refuelable_plane add_craftable_piece( refuelable_plane_gas4 ); refuelable_plane add_craftable_piece( refuelable_plane_gas4 );
refuelable_plane add_craftable_piece( refuelable_plane_gas5 ); refuelable_plane add_craftable_piece( refuelable_plane_gas5 );
refuelable_plane.triggerthink = ::planefuelable; refuelable_plane.triggerthink = ::planefuelable;
plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt;
include_craftable( refuelable_plane ); include_craftable( refuelable_plane );
} }
include_key_craftable( craftable_name, model_name ) include_key_craftable( craftable_name, model_name )
{ {
part_key = generate_zombie_craftable_piece( craftable_name, undefined, model_name, 32, 15, 0, undefined, ::onpickup_key, undefined, undefined, undefined, undefined, undefined, undefined, 1 ); part_key = generate_zombie_craftable_piece( craftable_name, undefined, model_name, 32, 15, 0, undefined, ::onpickup_key, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
part = spawnstruct(); part = spawnstruct();
part.name = craftable_name; part.name = craftable_name;
part add_craftable_piece( part_key ); part add_craftable_piece( part_key );
part.triggerthink = maps\mp\zombies\_zm_craftables::setup_craftable_pieces; part.triggerthink = maps\mp\zombies\_zm_craftables::setup_craftable_pieces;
include_craftable( part ); include_craftable( part );
} }
onpickup_key( player ) onpickup_key( player )
{ {
flag_set( "key_found" ); flag_set( "key_found" );
if ( level.is_master_key_west ) if ( level.is_master_key_west )
level clientnotify( "fxanim_west_pulley_up_start" ); level clientnotify( "fxanim_west_pulley_up_start" );
else else
level clientnotify( "fxanim_east_pulley_up_start" ); level clientnotify( "fxanim_east_pulley_up_start" );
a_m_checklist = getentarray( "plane_checklist", "targetname" ); a_m_checklist = getentarray( "plane_checklist", "targetname" );
foreach ( m_checklist in a_m_checklist ) foreach ( m_checklist in a_m_checklist )
{ {
m_checklist showpart( "j_check_key" ); m_checklist showpart( "j_check_key" );
m_checklist showpart( "j_strike_key" ); m_checklist showpart( "j_strike_key" );
} }
a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" ); a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" );
foreach ( struct in a_door_structs ) foreach ( struct in a_door_structs )
{ {
if ( isdefined( struct.unitrigger_stub ) ) if ( isdefined( struct.unitrigger_stub ) )
struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers();
} }
player playsound( "evt_key_pickup" ); player playsound( "evt_key_pickup" );
player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 ); player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 );
//level setclientfield( "piece_key_warden", 1 ); //level setclientfield( "piece_key_warden", 1 );
} }

View File

@ -6,68 +6,68 @@
delete_zombie_noone_looking( how_close, how_high ) delete_zombie_noone_looking( how_close, how_high )
{ {
self endon( "death" ); self endon( "death" );
if ( !isdefined( how_close ) ) if ( !isdefined( how_close ) )
how_close = 1500; how_close = 1500;
if ( !isdefined( how_high ) ) if ( !isdefined( how_high ) )
how_close = 600; how_close = 600;
distance_squared_check = how_close * how_close; distance_squared_check = how_close * how_close;
too_far_dist = distance_squared_check * 3; too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) ) if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0; self.inview = 0;
self.player_close = 0; self.player_close = 0;
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( players[i].sessionstate == "spectator" ) if ( players[i].sessionstate == "spectator" )
continue; continue;
if ( isdefined( level.only_track_targeted_players ) ) if ( isdefined( level.only_track_targeted_players ) )
{ {
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
continue; continue;
} }
can_be_seen = self player_can_see_me( players[i] ); can_be_seen = self player_can_see_me( players[i] );
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
self.inview++; self.inview++;
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high ) if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
self.player_close++; self.player_close++;
} }
wait 0.1; wait 0.1;
if ( self.inview == 0 && self.player_close == 0 ) if ( self.inview == 0 && self.player_close == 0 )
{ {
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return; return;
if ( isdefined( self.electrified ) && self.electrified == 1 ) if ( isdefined( self.electrified ) && self.electrified == 1 )
return; return;
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
return; return;
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{ {
level.zombie_total++; level.zombie_total++;
if ( self.health < level.zombie_health ) if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
} }
self maps\mp\zombies\_zm_spawner::reset_attack_spot(); self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" ); self notify( "zombie_delete" );
self delete(); self delete();
recalc_zombie_array(); recalc_zombie_array();
} }
} }

View File

@ -13,17 +13,17 @@
init() init()
{ {
level.custom_vending_precaching = maps\mp\zm_prison::custom_vending_precaching; level.custom_vending_precaching = maps\mp\zm_prison::custom_vending_precaching;
add_map_gamemode( "zclassic", maps\mp\zm_prison::zclassic_preinit, undefined, undefined ); add_map_gamemode( "zclassic", maps\mp\zm_prison::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zgrief", scripts\zm\replaced\zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined ); add_map_gamemode( "zgrief", scripts\zm\replaced\zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "prison", maps\mp\zm_alcatraz_classic::precache, maps\mp\zm_alcatraz_classic::main ); add_map_location_gamemode( "zclassic", "prison", maps\mp\zm_alcatraz_classic::precache, maps\mp\zm_alcatraz_classic::main );
add_map_location_gamemode( "zgrief", "cellblock", scripts\zm\replaced\zm_alcatraz_grief_cellblock::precache, scripts\zm\replaced\zm_alcatraz_grief_cellblock::main ); add_map_location_gamemode( "zgrief", "cellblock", scripts\zm\replaced\zm_alcatraz_grief_cellblock::precache, scripts\zm\replaced\zm_alcatraz_grief_cellblock::main );
if (getDvar("ui_zm_mapstartlocation_fake") == "docks") if (getDvar("ui_zm_mapstartlocation_fake") == "docks")
{ {
scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zgrief", "cellblock", scripts\zm\locs\zm_prison_loc_docks::struct_init ); scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zgrief", "cellblock", scripts\zm\locs\zm_prison_loc_docks::struct_init );
} }
} }

View File

@ -62,22 +62,22 @@ give_team_characters()
} }
switch( self.characterindex ) switch( self.characterindex )
{ {
case 0: case 0:
case 2: case 2:
self setmodel( "c_zom_player_grief_inmate_fb" ); self setmodel( "c_zom_player_grief_inmate_fb" );
self.voice = "american"; self.voice = "american";
self.skeleton = "base"; self.skeleton = "base";
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
self.characterindex = 0; self.characterindex = 0;
break; break;
case 1: case 1:
case 3: case 3:
self setmodel( "c_zom_player_grief_guard_fb" ); self setmodel( "c_zom_player_grief_guard_fb" );
self.voice = "american"; self.voice = "american";
self.skeleton = "base"; self.skeleton = "base";
self setviewmodel( "c_zom_grief_guard_viewhands" ); self setviewmodel( "c_zom_grief_guard_viewhands" );
self.characterindex = 1; self.characterindex = 1;
break; break;
} }
self setmovespeedscale( 1 ); self setmovespeedscale( 1 );
self setsprintduration( 4 ); self setsprintduration( 4 );

View File

@ -24,417 +24,417 @@
start_alcatraz_sidequest() start_alcatraz_sidequest()
{ {
init(); init();
onplayerconnect_callback( ::player_disconnect_watcher ); onplayerconnect_callback( ::player_disconnect_watcher );
onplayerconnect_callback( ::player_death_watcher ); onplayerconnect_callback( ::player_death_watcher );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
level.n_quest_iteration_count = 1; level.n_quest_iteration_count = 1;
level.n_plane_fuel_count = 5; level.n_plane_fuel_count = 5;
level.n_plane_pieces_found = 0; level.n_plane_pieces_found = 0;
level.final_flight_players = []; level.final_flight_players = [];
level.final_flight_activated = 0; level.final_flight_activated = 0;
level.characters_in_nml = []; level.characters_in_nml = [];
level.someone_has_visited_nml = 0; level.someone_has_visited_nml = 0;
level.custom_game_over_hud_elem = maps\mp\zm_prison_sq_final::custom_game_over_hud_elem; level.custom_game_over_hud_elem = maps\mp\zm_prison_sq_final::custom_game_over_hud_elem;
prevent_theater_mode_spoilers(); prevent_theater_mode_spoilers();
setup_key_doors(); setup_key_doors();
setup_puzzle_piece_glint(); setup_puzzle_piece_glint();
setup_puzzles(); setup_puzzles();
setup_quest_triggers(); setup_quest_triggers();
flag_set( "docks_gates_remain_open" ); flag_set( "docks_gates_remain_open" );
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty != 0 ) if ( isdefined( level.gamedifficulty ) && level.gamedifficulty != 0 )
maps\mp\zm_prison_sq_final::final_flight_setup(); maps\mp\zm_prison_sq_final::final_flight_setup();
level thread warden_fence_hotjoin_handler(); level thread warden_fence_hotjoin_handler();
if ( isdefined( level.host_migration_listener_custom_func ) ) if ( isdefined( level.host_migration_listener_custom_func ) )
level thread [[ level.host_migration_listener_custom_func ]](); level thread [[ level.host_migration_listener_custom_func ]]();
else else
level thread host_migration_listener(); level thread host_migration_listener();
if ( isdefined( level.manage_electric_chairs_custom_func ) ) if ( isdefined( level.manage_electric_chairs_custom_func ) )
level thread [[ level.manage_electric_chairs_custom_func ]](); level thread [[ level.manage_electric_chairs_custom_func ]]();
else else
level thread manage_electric_chairs(); level thread manage_electric_chairs();
if ( isdefined( level.plane_flight_thread_custom_func ) ) if ( isdefined( level.plane_flight_thread_custom_func ) )
level thread [[ level.plane_flight_thread_custom_func ]](); level thread [[ level.plane_flight_thread_custom_func ]]();
else else
level thread plane_flight_thread(); level thread plane_flight_thread();
if ( isdefined( level.track_quest_status_thread_custom_func ) ) if ( isdefined( level.track_quest_status_thread_custom_func ) )
level thread [[ level.track_quest_status_thread_custom_func ]](); level thread [[ level.track_quest_status_thread_custom_func ]]();
else else
level thread track_quest_status_thread(); level thread track_quest_status_thread();
maps\mp\zm_alcatraz_sq_vo::opening_vo(); maps\mp\zm_alcatraz_sq_vo::opening_vo();
} }
dryer_zombies_thread() dryer_zombies_thread()
{ {
n_zombie_count_min = 20; n_zombie_count_min = 20;
e_shower_zone = getent( "cellblock_shower", "targetname" ); e_shower_zone = getent( "cellblock_shower", "targetname" );
flag_wait( "dryer_cycle_active" ); flag_wait( "dryer_cycle_active" );
if ( level.zombie_total < n_zombie_count_min ) if ( level.zombie_total < n_zombie_count_min )
level.zombie_total = n_zombie_count_min; level.zombie_total = n_zombie_count_min;
while ( flag( "dryer_cycle_active" ) ) while ( flag( "dryer_cycle_active" ) )
{ {
a_zombies_in_shower = []; a_zombies_in_shower = [];
a_zombies_in_shower = get_zombies_touching_volume( "axis", "cellblock_shower", undefined ); a_zombies_in_shower = get_zombies_touching_volume( "axis", "cellblock_shower", undefined );
if ( a_zombies_in_shower.size < n_zombie_count_min ) if ( a_zombies_in_shower.size < n_zombie_count_min )
{ {
e_zombie = get_farthest_available_zombie( e_shower_zone ); e_zombie = get_farthest_available_zombie( e_shower_zone );
if ( isdefined( e_zombie ) && !isinarray( a_zombies_in_shower, e_zombie ) ) if ( isdefined( e_zombie ) && !isinarray( a_zombies_in_shower, e_zombie ) )
{ {
e_zombie notify( "zapped" ); e_zombie notify( "zapped" );
e_zombie thread dryer_teleports_zombie(); e_zombie thread dryer_teleports_zombie();
} }
} }
wait 1; wait 1;
} }
} }
track_quest_status_thread() track_quest_status_thread()
{ {
while ( true ) while ( true )
{ {
while ( level.characters_in_nml.size == 0 ) while ( level.characters_in_nml.size == 0 )
wait 1; wait 1;
while ( level.characters_in_nml.size > 0 ) while ( level.characters_in_nml.size > 0 )
wait 1; wait 1;
if ( flag( "plane_trip_to_nml_successful" ) ) if ( flag( "plane_trip_to_nml_successful" ) )
{ {
bestow_quest_rewards(); bestow_quest_rewards();
flag_clear( "plane_trip_to_nml_successful" ); flag_clear( "plane_trip_to_nml_successful" );
} }
level notify( "bridge_empty" ); level notify( "bridge_empty" );
if ( level.n_quest_iteration_count == 2 ) if ( level.n_quest_iteration_count == 2 )
vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_alt" + randomintrange( 0, 2 )] ); vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_alt" + randomintrange( 0, 2 )] );
prep_for_new_quest(); prep_for_new_quest();
t_plane_fly = getent( "plane_fly_trigger", "targetname" ); t_plane_fly = getent( "plane_fly_trigger", "targetname" );
t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" );
t_plane_fly trigger_on(); t_plane_fly trigger_on();
} }
} }
prep_for_new_quest() prep_for_new_quest()
{ {
for ( i = 1; i < 4; i++ ) for ( i = 1; i < 4; i++ )
{ {
str_trigger_targetname = "trigger_electric_chair_" + i; str_trigger_targetname = "trigger_electric_chair_" + i;
t_electric_chair = getent( str_trigger_targetname, "targetname" ); t_electric_chair = getent( str_trigger_targetname, "targetname" );
t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" );
t_electric_chair trigger_on(); t_electric_chair trigger_on();
} }
for ( i = 1; i < 5; i++ ) for ( i = 1; i < 5; i++ )
{ {
m_electric_chair = getent( "electric_chair_" + i, "targetname" ); m_electric_chair = getent( "electric_chair_" + i, "targetname" );
m_electric_chair notify( "bridge_empty" ); m_electric_chair notify( "bridge_empty" );
} }
m_plane_craftable = getent( "plane_craftable", "targetname" ); m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_craftable show(); m_plane_craftable show();
playfxontag( level._effect["fx_alcatraz_plane_apear"], m_plane_craftable, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_plane_apear"], m_plane_craftable, "tag_origin" );
veh_plane_flyable = getent( "plane_flyable", "targetname" ); veh_plane_flyable = getent( "plane_flyable", "targetname" );
veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_underground", "targetname" ) ); veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_underground", "targetname" ) );
vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_quest_reset"] ); vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_quest_reset"] );
flag_clear( "plane_is_away" ); flag_clear( "plane_is_away" );
} }
plane_boarding_thread() plane_boarding_thread()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
flag_set( "plane_is_away" ); flag_set( "plane_is_away" );
self thread player_disconnect_watcher(); self thread player_disconnect_watcher();
self thread player_death_watcher(); self thread player_death_watcher();
flag_set( "plane_boarded" ); flag_set( "plane_boarded" );
self setclientfieldtoplayer( "effects_escape_flight", 1 ); self setclientfieldtoplayer( "effects_escape_flight", 1 );
level.brutus_respawn_after_despawn = 0; level.brutus_respawn_after_despawn = 0;
a_nml_teleport_targets = []; a_nml_teleport_targets = [];
for ( i = 1; i < 6; i++ ) for ( i = 1; i < 6; i++ )
a_nml_teleport_targets[i - 1] = getstruct( "nml_telepoint_" + i, "targetname" ); a_nml_teleport_targets[i - 1] = getstruct( "nml_telepoint_" + i, "targetname" );
level.characters_in_nml[level.characters_in_nml.size] = self.character_name; level.characters_in_nml[level.characters_in_nml.size] = self.character_name;
self.on_a_plane = 1; self.on_a_plane = 1;
level.someone_has_visited_nml = 1; level.someone_has_visited_nml = 1;
self.n_passenger_index = level.characters_in_nml.size; self.n_passenger_index = level.characters_in_nml.size;
m_plane_craftable = getent( "plane_craftable", "targetname" ); m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
veh_plane_flyable = getent( "plane_flyable", "targetname" ); veh_plane_flyable = getent( "plane_flyable", "targetname" );
t_plane_fly = getent( "plane_fly_trigger", "targetname" ); t_plane_fly = getent( "plane_fly_trigger", "targetname" );
t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" );
self enableinvulnerability(); self enableinvulnerability();
self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) );
self allowstand( 0 ); self allowstand( 0 );
flag_wait( "plane_departed" ); flag_wait( "plane_departed" );
level notify( "sndStopBrutusLoop" ); level notify( "sndStopBrutusLoop" );
self clientnotify( "sndPS" ); self clientnotify( "sndPS" );
self playsoundtoplayer( "zmb_plane_takeoff", self ); self playsoundtoplayer( "zmb_plane_takeoff", self );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_takeoff", self ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_takeoff", self );
self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) );
self setclientfieldtoplayer( "effects_escape_flight", 2 ); self setclientfieldtoplayer( "effects_escape_flight", 2 );
flag_wait( "plane_approach_bridge" ); flag_wait( "plane_approach_bridge" );
self thread snddelayedimp(); self thread snddelayedimp();
self setclientfieldtoplayer( "effects_escape_flight", 3 ); self setclientfieldtoplayer( "effects_escape_flight", 3 );
self unlink(); self unlink();
self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) );
flag_wait( "plane_zapped" ); flag_wait( "plane_zapped" );
flag_set( "activate_player_zone_bridge" ); flag_set( "activate_player_zone_bridge" );
self playsoundtoplayer( "zmb_plane_fall", self ); self playsoundtoplayer( "zmb_plane_fall", self );
self setclientfieldtoplayer( "effects_escape_flight", 4 ); self setclientfieldtoplayer( "effects_escape_flight", 4 );
self.dontspeak = 1; self.dontspeak = 1;
self setclientfieldtoplayer( "isspeaking", 1 ); self setclientfieldtoplayer( "isspeaking", 1 );
self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 );
self forcegrenadethrow(); self forcegrenadethrow();
str_current_weapon = self getcurrentweapon(); str_current_weapon = self getcurrentweapon();
self giveweapon( "falling_hands_zm" ); self giveweapon( "falling_hands_zm" );
self switchtoweaponimmediate( "falling_hands_zm" ); self switchtoweaponimmediate( "falling_hands_zm" );
self setweaponammoclip( "falling_hands_zm", 0 ); self setweaponammoclip( "falling_hands_zm", 0 );
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player != self ) if ( player != self )
player setinvisibletoplayer( self ); player setinvisibletoplayer( self );
} }
flag_wait( "plane_crashed" ); flag_wait( "plane_crashed" );
self setclientfieldtoplayer( "effects_escape_flight", 5 ); self setclientfieldtoplayer( "effects_escape_flight", 5 );
self takeweapon( "falling_hands_zm" ); self takeweapon( "falling_hands_zm" );
if ( isdefined( str_current_weapon ) && str_current_weapon != "none" ) if ( isdefined( str_current_weapon ) && str_current_weapon != "none" )
self switchtoweaponimmediate( str_current_weapon ); self switchtoweaponimmediate( str_current_weapon );
self thread fadetoblackforxsec( 0, 2, 0, 0.5, "black" ); self thread fadetoblackforxsec( 0, 2, 0, 0.5, "black" );
self thread snddelayedmusic(); self thread snddelayedmusic();
self unlink(); self unlink();
self allowstand( 1 ); self allowstand( 1 );
self setstance( "stand" ); self setstance( "stand" );
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player != self ) if ( player != self )
player setvisibletoplayer( self ); player setvisibletoplayer( self );
} }
flag_clear( "spawn_zombies" ); flag_clear( "spawn_zombies" );
self setorigin( a_nml_teleport_targets[self.n_passenger_index].origin ); self setorigin( a_nml_teleport_targets[self.n_passenger_index].origin );
e_poi = getstruct( "plane_crash_poi", "targetname" ); e_poi = getstruct( "plane_crash_poi", "targetname" );
vec_to_target = e_poi.origin - self.origin; vec_to_target = e_poi.origin - self.origin;
vec_to_target = vectortoangles( vec_to_target ); vec_to_target = vectortoangles( vec_to_target );
vec_to_target = ( 0, vec_to_target[1], 0 ); vec_to_target = ( 0, vec_to_target[1], 0 );
self setplayerangles( vec_to_target ); self setplayerangles( vec_to_target );
n_shellshock_duration = 5; n_shellshock_duration = 5;
self shellshock( "explosion", n_shellshock_duration ); self shellshock( "explosion", n_shellshock_duration );
self.dontspeak = 0; self.dontspeak = 0;
self setclientfieldtoplayer( "isspeaking", 0 ); self setclientfieldtoplayer( "isspeaking", 0 );
self notify( "player_at_bridge" ); self notify( "player_at_bridge" );
wait( n_shellshock_duration ); wait( n_shellshock_duration );
self disableinvulnerability(); self disableinvulnerability();
self.on_a_plane = 0; self.on_a_plane = 0;
if ( level.characters_in_nml.size == 1 ) if ( level.characters_in_nml.size == 1 )
self thread vo_bridge_soliloquy(); self thread vo_bridge_soliloquy();
else if ( level.characters_in_nml.size == 4 ) else if ( level.characters_in_nml.size == 4 )
level thread vo_bridge_four_part_convo(); level thread vo_bridge_four_part_convo();
self playsoundtoplayer( "zmb_ggb_swarm_start", self ); self playsoundtoplayer( "zmb_ggb_swarm_start", self );
flag_set( "spawn_zombies" ); flag_set( "spawn_zombies" );
level.brutus_respawn_after_despawn = 1; level.brutus_respawn_after_despawn = 1;
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )]; character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( isdefined( player ) && player.character_name == character_name ) if ( isdefined( player ) && player.character_name == character_name )
player thread do_player_general_vox( "quest", "zombie_arrive_gg", undefined, 100 ); player thread do_player_general_vox( "quest", "zombie_arrive_gg", undefined, 100 );
} }
} }
plane_flight_thread() plane_flight_thread()
{ {
while ( true ) while ( true )
{ {
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_craftable = getent( "plane_craftable", "targetname" ); m_plane_craftable = getent( "plane_craftable", "targetname" );
t_plane_fly = getent( "plane_fly_trigger", "targetname" ); t_plane_fly = getent( "plane_fly_trigger", "targetname" );
veh_plane_flyable = getent( "plane_flyable", "targetname" ); veh_plane_flyable = getent( "plane_flyable", "targetname" );
m_plane_about_to_crash ghost(); m_plane_about_to_crash ghost();
flag_wait( "plane_boarded" ); flag_wait( "plane_boarded" );
level clientnotify( "sndPB" ); level clientnotify( "sndPB" );
if ( !( isdefined( level.music_override ) && level.music_override ) ) if ( !( isdefined( level.music_override ) && level.music_override ) )
t_plane_fly playloopsound( "mus_event_plane_countdown_loop", 0.25 ); t_plane_fly playloopsound( "mus_event_plane_countdown_loop", 0.25 );
for ( i = 10; i > 0; i-- ) for ( i = 10; i > 0; i-- )
{ {
veh_plane_flyable playsound( "zmb_plane_countdown_tick" ); veh_plane_flyable playsound( "zmb_plane_countdown_tick" );
wait 1; wait 1;
} }
t_plane_fly stoploopsound( 2 ); t_plane_fly stoploopsound( 2 );
exploder( 10000 ); exploder( 10000 );
veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_flight_path", "targetname" ) ); veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_flight_path", "targetname" ) );
veh_plane_flyable startpath(); veh_plane_flyable startpath();
flag_set( "plane_departed" ); flag_set( "plane_departed" );
t_plane_fly trigger_off(); t_plane_fly trigger_off();
m_plane_craftable ghost(); m_plane_craftable ghost();
veh_plane_flyable setvisibletoall(); veh_plane_flyable setvisibletoall();
level setclientfield( "fog_stage", 1 ); level setclientfield( "fog_stage", 1 );
playfxontag( level._effect["fx_alcatraz_plane_trail"], veh_plane_flyable, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_plane_trail"], veh_plane_flyable, "tag_origin" );
wait 2; wait 2;
playfxontag( level._effect["fx_alcatraz_plane_trail_fast"], veh_plane_flyable, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_plane_trail_fast"], veh_plane_flyable, "tag_origin" );
wait 3; wait 3;
exploder( 10001 ); exploder( 10001 );
wait 4; wait 4;
playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" );
level setclientfield( "scripted_lightning_flash", 1 ); level setclientfield( "scripted_lightning_flash", 1 );
wait 1; wait 1;
flag_set( "plane_approach_bridge" ); flag_set( "plane_approach_bridge" );
stop_exploder( 10001 ); stop_exploder( 10001 );
level setclientfield( "fog_stage", 2 ); level setclientfield( "fog_stage", 2 );
veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_approach", "targetname" ) ); veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_approach", "targetname" ) );
veh_plane_flyable startpath(); veh_plane_flyable startpath();
wait 6; wait 6;
playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" ); playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" );
level setclientfield( "scripted_lightning_flash", 1 ); level setclientfield( "scripted_lightning_flash", 1 );
veh_plane_flyable waittill( "reached_end_node" ); veh_plane_flyable waittill( "reached_end_node" );
flag_set( "plane_zapped" ); flag_set( "plane_zapped" );
level setclientfield( "fog_stage", 3 ); level setclientfield( "fog_stage", 3 );
veh_plane_flyable setinvisibletoall(); veh_plane_flyable setinvisibletoall();
n_crash_duration = 2.25; n_crash_duration = 2.25;
nd_plane_about_to_crash_1 = getstruct( "plane_about_to_crash_point_1", "targetname" ); nd_plane_about_to_crash_1 = getstruct( "plane_about_to_crash_point_1", "targetname" );
m_plane_about_to_crash.origin = nd_plane_about_to_crash_1.origin; m_plane_about_to_crash.origin = nd_plane_about_to_crash_1.origin;
nd_plane_about_to_crash_2 = getstruct( "plane_about_to_crash_point_2", "targetname" ); nd_plane_about_to_crash_2 = getstruct( "plane_about_to_crash_point_2", "targetname" );
m_plane_about_to_crash moveto( nd_plane_about_to_crash_2.origin, n_crash_duration ); m_plane_about_to_crash moveto( nd_plane_about_to_crash_2.origin, n_crash_duration );
m_plane_about_to_crash thread spin_while_falling(); m_plane_about_to_crash thread spin_while_falling();
stop_exploder( 10000 ); stop_exploder( 10000 );
m_plane_about_to_crash waittill( "movedone" ); m_plane_about_to_crash waittill( "movedone" );
flag_set( "plane_crashed" ); flag_set( "plane_crashed" );
wait 2; wait 2;
level setclientfield( "scripted_lightning_flash", 1 ); level setclientfield( "scripted_lightning_flash", 1 );
m_plane_about_to_crash.origin += vectorscale( ( 0, 0, -1 ), 2048.0 ); m_plane_about_to_crash.origin += vectorscale( ( 0, 0, -1 ), 2048.0 );
wait 4; wait 4;
veh_plane_flyable setvisibletoall(); veh_plane_flyable setvisibletoall();
veh_plane_flyable play_fx( "fx_alcatraz_plane_fire_trail", veh_plane_flyable.origin, veh_plane_flyable.angles, "reached_end_node", 1, "tag_origin", undefined ); veh_plane_flyable play_fx( "fx_alcatraz_plane_fire_trail", veh_plane_flyable.origin, veh_plane_flyable.angles, "reached_end_node", 1, "tag_origin", undefined );
veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_flyby", "targetname" ) ); veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_flyby", "targetname" ) );
veh_plane_flyable startpath(); veh_plane_flyable startpath();
veh_plane_flyable thread sndpc(); veh_plane_flyable thread sndpc();
veh_plane_flyable waittill( "reached_end_node" ); veh_plane_flyable waittill( "reached_end_node" );
veh_plane_flyable setinvisibletoall(); veh_plane_flyable setinvisibletoall();
if ( !level.final_flight_activated ) if ( !level.final_flight_activated )
{ {
if ( isdefined( level.brutus_on_the_bridge_custom_func ) ) if ( isdefined( level.brutus_on_the_bridge_custom_func ) )
level thread [[ level.brutus_on_the_bridge_custom_func ]](); level thread [[ level.brutus_on_the_bridge_custom_func ]]();
else else
level thread brutus_on_the_bridge(); level thread brutus_on_the_bridge();
} }
flag_clear( "plane_boarded" ); flag_clear( "plane_boarded" );
flag_clear( "plane_departed" ); flag_clear( "plane_departed" );
flag_clear( "plane_approach_bridge" ); flag_clear( "plane_approach_bridge" );
flag_clear( "plane_zapped" ); flag_clear( "plane_zapped" );
flag_clear( "plane_crashed" ); flag_clear( "plane_crashed" );
} }
} }
manage_electric_chairs() manage_electric_chairs()
{ {
level notify( "manage_electric_chairs" ); level notify( "manage_electric_chairs" );
level endon( "manage_electric_chairs" ); level endon( "manage_electric_chairs" );
while ( true ) while ( true )
{ {
flag_wait( "plane_approach_bridge" ); flag_wait( "plane_approach_bridge" );
for ( i = 1; i < 5; i++ ) for ( i = 1; i < 5; i++ )
{ {
str_trigger_targetname = "trigger_electric_chair_" + i; str_trigger_targetname = "trigger_electric_chair_" + i;
t_electric_chair = getent( str_trigger_targetname, "targetname" ); t_electric_chair = getent( str_trigger_targetname, "targetname" );
if ( isdefined( level.electric_chair_trigger_thread_custom_func ) ) if ( isdefined( level.electric_chair_trigger_thread_custom_func ) )
t_electric_chair thread [[ level.electric_chair_trigger_thread_custom_func ]]( i ); t_electric_chair thread [[ level.electric_chair_trigger_thread_custom_func ]]( i );
else else
t_electric_chair thread electric_chair_trigger_thread( i ); t_electric_chair thread electric_chair_trigger_thread( i );
t_electric_chair setcursorhint( "HINT_NOICON" ); t_electric_chair setcursorhint( "HINT_NOICON" );
t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" );
t_electric_chair usetriggerrequirelookat(); t_electric_chair usetriggerrequirelookat();
} }
if ( level.final_flight_activated ) if ( level.final_flight_activated )
{ {
level.revive_trigger_should_ignore_sight_checks = maps\mp\zm_prison_sq_final::revive_trigger_should_ignore_sight_checks; level.revive_trigger_should_ignore_sight_checks = maps\mp\zm_prison_sq_final::revive_trigger_should_ignore_sight_checks;
for ( j = 0; j < level.final_flight_players.size; j++ ) for ( j = 0; j < level.final_flight_players.size; j++ )
{ {
m_electric_chair = getent( "electric_chair_" + ( j + 1 ), "targetname" ); m_electric_chair = getent( "electric_chair_" + ( j + 1 ), "targetname" );
corpse = level.final_flight_players[j].e_afterlife_corpse; corpse = level.final_flight_players[j].e_afterlife_corpse;
corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
corpse maps\mp\zombies\_zm_clone::clone_animate( "chair" ); corpse maps\mp\zombies\_zm_clone::clone_animate( "chair" );
wait 1; wait 1;
corpse.revivetrigger unlink(); corpse.revivetrigger unlink();
corpse.revivetrigger.origin = m_electric_chair.origin + ( 64, 0, 32 ); corpse.revivetrigger.origin = m_electric_chair.origin + ( 64, 0, 32 );
} }
for ( j = 1; j < 5; j++ ) for ( j = 1; j < 5; j++ )
{ {
str_trigger_targetname = "trigger_electric_chair_" + j; str_trigger_targetname = "trigger_electric_chair_" + j;
t_electric_chair = getent( str_trigger_targetname, "targetname" ); t_electric_chair = getent( str_trigger_targetname, "targetname" );
t_electric_chair trigger_off(); t_electric_chair trigger_off();
} }
} }
else else
{ {
for ( i = 1; i < 5; i++ ) for ( i = 1; i < 5; i++ )
{ {
m_electric_chair = getent( "electric_chair_" + i, "targetname" ); m_electric_chair = getent( "electric_chair_" + i, "targetname" );
m_electric_chair hide(); m_electric_chair hide();
str_trigger_targetname = "trigger_electric_chair_" + i; str_trigger_targetname = "trigger_electric_chair_" + i;
t_electric_chair = getent( str_trigger_targetname, "targetname" ); t_electric_chair = getent( str_trigger_targetname, "targetname" );
t_electric_chair trigger_off(); t_electric_chair trigger_off();
} }
flag_wait( "plane_crashed" ); flag_wait( "plane_crashed" );
exploder( 666 ); exploder( 666 );
for ( i = 1; i < 5; i++ ) for ( i = 1; i < 5; i++ )
{ {
m_electric_chair = getent( "electric_chair_" + i, "targetname" ); m_electric_chair = getent( "electric_chair_" + i, "targetname" );
m_electric_chair show(); m_electric_chair show();
m_electric_chair thread snddelayedchairaudio( i ); m_electric_chair thread snddelayedchairaudio( i );
str_trigger_targetname = "trigger_electric_chair_" + i; str_trigger_targetname = "trigger_electric_chair_" + i;
t_electric_chair = getent( str_trigger_targetname, "targetname" ); t_electric_chair = getent( str_trigger_targetname, "targetname" );
t_electric_chair trigger_on(); t_electric_chair trigger_on();
} }
wait 3; wait 3;
electric_chair_vo(); electric_chair_vo();
} }
flag_waitopen( "plane_approach_bridge" ); flag_waitopen( "plane_approach_bridge" );
} }
} }

View File

@ -11,416 +11,416 @@
init_fan_trap_trigs() init_fan_trap_trigs()
{ {
trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" ); trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" );
array_thread( trap_trigs, ::fan_trap_think ); array_thread( trap_trigs, ::fan_trap_think );
init_fan_fxanim( "wardens_office" ); init_fan_fxanim( "wardens_office" );
} }
fan_trap_think() fan_trap_think()
{ {
triggers = getentarray( self.targetname, "targetname" ); triggers = getentarray( self.targetname, "targetname" );
self.cost = 1000; self.cost = 1000;
self.in_use = 0; self.in_use = 0;
self.is_available = 1; self.is_available = 1;
self.has_been_used = 0; self.has_been_used = 0;
self.zombie_dmg_trig = getent( self.target, "targetname" ); self.zombie_dmg_trig = getent( self.target, "targetname" );
self.zombie_dmg_trig.script_string = self.script_string; self.zombie_dmg_trig.script_string = self.script_string;
self.zombie_dmg_trig.in_use = 0; self.zombie_dmg_trig.in_use = 0;
self.rumble_trig = getent( "fan_trap_rumble", "targetname" ); self.rumble_trig = getent( "fan_trap_rumble", "targetname" );
light_name = self get_trap_light_name(); light_name = self get_trap_light_name();
zapper_light_red( light_name ); zapper_light_red( light_name );
self sethintstring( &"ZM_PRISON_FAN_TRAP_UNAVAILABLE" ); self sethintstring( &"ZM_PRISON_FAN_TRAP_UNAVAILABLE" );
flag_wait( "activate_warden_office" ); flag_wait( "activate_warden_office" );
zapper_light_green( light_name ); zapper_light_green( light_name );
self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost ); self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost );
while ( true ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( who in_revive_trigger() ) if ( who in_revive_trigger() )
continue; continue;
if ( !isdefined( self.is_available ) ) if ( !isdefined( self.is_available ) )
continue; continue;
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
if ( who.score >= self.cost ) if ( who.score >= self.cost )
{ {
if ( !self.zombie_dmg_trig.in_use ) if ( !self.zombie_dmg_trig.in_use )
{ {
if ( !self.has_been_used ) if ( !self.has_been_used )
{ {
self.has_been_used = 1; self.has_been_used = 1;
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
who do_player_general_vox( "general", "discover_trap" ); who do_player_general_vox( "general", "discover_trap" );
} }
else else
who do_player_general_vox( "general", "start_trap" ); who do_player_general_vox( "general", "start_trap" );
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
self.zombie_dmg_trig.in_use = 1; self.zombie_dmg_trig.in_use = 1;
self.zombie_dmg_trig.active = 1; self.zombie_dmg_trig.active = 1;
self playsound( "zmb_trap_activate" ); self playsound( "zmb_trap_activate" );
self thread fan_trap_move_switch( self ); self thread fan_trap_move_switch( self );
self waittill( "switch_activated" ); self waittill( "switch_activated" );
who minus_to_player_score( self.cost ); who minus_to_player_score( self.cost );
level.trapped_track["fan"] = 1; level.trapped_track["fan"] = 1;
level notify( "trap_activated" ); level notify( "trap_activated" );
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 ); who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
self.zombie_dmg_trig setvisibletoall(); self.zombie_dmg_trig setvisibletoall();
self thread activate_fan_trap(); self thread activate_fan_trap();
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string ); self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
clientnotify( self.script_string + "off" ); clientnotify( self.script_string + "off" );
self.zombie_dmg_trig notify( "fan_trap_finished" ); self.zombie_dmg_trig notify( "fan_trap_finished" );
self.zombie_dmg_trig.active = 0; self.zombie_dmg_trig.active = 0;
self.zombie_dmg_trig setinvisibletoall(); self.zombie_dmg_trig setinvisibletoall();
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
wait 25; wait 25;
self playsound( "zmb_trap_available" ); self playsound( "zmb_trap_available" );
self notify( "available" ); self notify( "available" );
self.zombie_dmg_trig.in_use = 0; self.zombie_dmg_trig.in_use = 0;
array_thread( triggers, ::hint_string, &"ZM_PRISON_FAN_TRAP", self.cost ); array_thread( triggers, ::hint_string, &"ZM_PRISON_FAN_TRAP", self.cost );
} }
} }
} }
} }
} }
init_acid_trap_trigs() init_acid_trap_trigs()
{ {
trap_trigs = getentarray( "acid_trap_trigger", "targetname" ); trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
array_thread( trap_trigs, ::acid_trap_think ); array_thread( trap_trigs, ::acid_trap_think );
level thread acid_trap_host_migration_listener(); level thread acid_trap_host_migration_listener();
} }
acid_trap_think() acid_trap_think()
{ {
triggers = getentarray( self.targetname, "targetname" ); triggers = getentarray( self.targetname, "targetname" );
self.is_available = 1; self.is_available = 1;
self.has_been_used = 0; self.has_been_used = 0;
self.cost = 1000; self.cost = 1000;
self.in_use = 0; self.in_use = 0;
self.zombie_dmg_trig = getent( self.target, "targetname" ); self.zombie_dmg_trig = getent( self.target, "targetname" );
self.zombie_dmg_trig.in_use = 0; self.zombie_dmg_trig.in_use = 0;
light_name = self get_trap_light_name(); light_name = self get_trap_light_name();
zapper_light_red( light_name ); zapper_light_red( light_name );
self sethintstring( &"ZM_PRISON_ACID_TRAP_UNAVAILABLE" ); self sethintstring( &"ZM_PRISON_ACID_TRAP_UNAVAILABLE" );
flag_wait_any( "activate_cafeteria", "activate_infirmary" ); flag_wait_any( "activate_cafeteria", "activate_infirmary" );
zapper_light_green( light_name ); zapper_light_green( light_name );
self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost ); self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost );
while ( true ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( who in_revive_trigger() ) if ( who in_revive_trigger() )
continue; continue;
if ( !isdefined( self.is_available ) ) if ( !isdefined( self.is_available ) )
continue; continue;
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
if ( who.score >= self.cost ) if ( who.score >= self.cost )
{ {
if ( !self.zombie_dmg_trig.in_use ) if ( !self.zombie_dmg_trig.in_use )
{ {
if ( !self.has_been_used ) if ( !self.has_been_used )
{ {
self.has_been_used = 1; self.has_been_used = 1;
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
who do_player_general_vox( "general", "discover_trap" ); who do_player_general_vox( "general", "discover_trap" );
} }
else else
who do_player_general_vox( "general", "start_trap" ); who do_player_general_vox( "general", "start_trap" );
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
self.zombie_dmg_trig.in_use = 1; self.zombie_dmg_trig.in_use = 1;
self.zombie_dmg_trig.active = 1; self.zombie_dmg_trig.active = 1;
self playsound( "zmb_trap_activate" ); self playsound( "zmb_trap_activate" );
self thread acid_trap_move_switch( self ); self thread acid_trap_move_switch( self );
self waittill( "switch_activated" ); self waittill( "switch_activated" );
who minus_to_player_score( self.cost ); who minus_to_player_score( self.cost );
level.trapped_track["acid"] = 1; level.trapped_track["acid"] = 1;
level notify( "trap_activated" ); level notify( "trap_activated" );
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 ); who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
self thread activate_acid_trap(); self thread activate_acid_trap();
self.zombie_dmg_trig waittill( "acid_trap_fx_done" ); self.zombie_dmg_trig waittill( "acid_trap_fx_done" );
clientnotify( self.script_string + "off" ); clientnotify( self.script_string + "off" );
if ( isdefined( self.fx_org ) ) if ( isdefined( self.fx_org ) )
self.fx_org delete(); self.fx_org delete();
if ( isdefined( self.zapper_fx_org ) ) if ( isdefined( self.zapper_fx_org ) )
self.zapper_fx_org delete(); self.zapper_fx_org delete();
if ( isdefined( self.zapper_fx_switch_org ) ) if ( isdefined( self.zapper_fx_switch_org ) )
self.zapper_fx_switch_org delete(); self.zapper_fx_switch_org delete();
self.zombie_dmg_trig notify( "acid_trap_finished" ); self.zombie_dmg_trig notify( "acid_trap_finished" );
self.zombie_dmg_trig.active = 0; self.zombie_dmg_trig.active = 0;
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
wait 25; wait 25;
self playsound( "zmb_trap_available" ); self playsound( "zmb_trap_available" );
self notify( "available" ); self notify( "available" );
self.zombie_dmg_trig.in_use = 0; self.zombie_dmg_trig.in_use = 0;
array_thread( triggers, ::hint_string, &"ZM_PRISON_ACID_TRAP", self.cost ); array_thread( triggers, ::hint_string, &"ZM_PRISON_ACID_TRAP", self.cost );
} }
} }
} }
} }
} }
zombie_acid_damage() zombie_acid_damage()
{ {
self endon( "death" ); self endon( "death" );
self setclientfield( "acid_trap_death_fx", 1 ); self setclientfield( "acid_trap_death_fx", 1 );
if ( !isdefined( self.is_brutus ) ) if ( !isdefined( self.is_brutus ) )
{ {
self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) ); self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) );
self thread maps\mp\animscripts\zm_death::do_gib(); self thread maps\mp\animscripts\zm_death::do_gib();
} }
self dodamage( self.health + 1000, self.origin ); self dodamage( self.health + 1000, self.origin );
} }
player_acid_damage( t_damage ) player_acid_damage( t_damage )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
t_damage endon( "acid_trap_finished" ); t_damage endon( "acid_trap_finished" );
if ( !isdefined( self.is_in_acid ) && !self player_is_in_laststand() ) if ( !isdefined( self.is_in_acid ) && !self player_is_in_laststand() )
{ {
self.is_in_acid = 1; self.is_in_acid = 1;
self thread player_acid_damage_cooldown(); self thread player_acid_damage_cooldown();
self dodamage( self.maxhealth / 2, self.origin, t_damage, t_damage, "none", "MOD_UNKNOWN", 0, "none" ); self dodamage( self.maxhealth / 2, self.origin, t_damage, t_damage, "none", "MOD_UNKNOWN", 0, "none" );
wait 1.5; wait 1.5;
} }
} }
player_acid_damage_cooldown() player_acid_damage_cooldown()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
wait 1.5; wait 1.5;
if ( isdefined( self ) ) if ( isdefined( self ) )
self.is_in_acid = undefined; self.is_in_acid = undefined;
} }
tower_trap_trigger_think() tower_trap_trigger_think()
{ {
self.range_trigger = getent( self.target, "targetname" ); self.range_trigger = getent( self.target, "targetname" );
self.upgrade_trigger = getent( self.script_string, "script_noteworthy" ); self.upgrade_trigger = getent( self.script_string, "script_noteworthy" );
self.cost = 1000; self.cost = 1000;
light_name = self get_trap_light_name(); light_name = self get_trap_light_name();
zapper_light_green( light_name ); zapper_light_green( light_name );
self.is_available = 1; self.is_available = 1;
self.in_use = 0; self.in_use = 0;
self.has_been_used = 0; self.has_been_used = 0;
self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) ); self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) );
self tower_trap_weapon(); self tower_trap_weapon();
self.upgrade_trigger.cost = 1000; self.upgrade_trigger.cost = 1000;
self.upgrade_trigger.in_use = 0; self.upgrade_trigger.in_use = 0;
self.upgrade_trigger.is_available = 1; self.upgrade_trigger.is_available = 1;
if (is_gametype_active("zclassic")) if (is_gametype_active("zclassic"))
{ {
self thread tower_upgrade_trigger_think(); self thread tower_upgrade_trigger_think();
} }
while ( true ) while ( true )
{ {
self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost ); self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost );
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( who in_revive_trigger() ) if ( who in_revive_trigger() )
continue; continue;
if ( !isdefined( self.is_available ) ) if ( !isdefined( self.is_available ) )
continue; continue;
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
if ( who.score >= self.cost ) if ( who.score >= self.cost )
{ {
if ( !self.in_use ) if ( !self.in_use )
{ {
if ( !self.has_been_used ) if ( !self.has_been_used )
{ {
self.has_been_used = 1; self.has_been_used = 1;
who do_player_general_vox( "general", "discover_trap" ); who do_player_general_vox( "general", "discover_trap" );
} }
else else
who do_player_general_vox( "general", "start_trap" ); who do_player_general_vox( "general", "start_trap" );
self hint_string( &"ZOMBIE_TRAP_ACTIVE" ); self hint_string( &"ZOMBIE_TRAP_ACTIVE" );
self.in_use = 1; self.in_use = 1;
self.active = 1; self.active = 1;
play_sound_at_pos( "purchase", who.origin ); play_sound_at_pos( "purchase", who.origin );
self thread tower_trap_move_switch( self ); self thread tower_trap_move_switch( self );
self playsound( "zmb_trap_activate" ); self playsound( "zmb_trap_activate" );
self waittill( "switch_activated" ); self waittill( "switch_activated" );
who minus_to_player_score( self.cost ); who minus_to_player_score( self.cost );
level.trapped_track["tower"] = 1; level.trapped_track["tower"] = 1;
level notify( "trap_activated" ); level notify( "trap_activated" );
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 ); who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
self.sndtowerent playsound( "zmb_trap_tower_start" ); self.sndtowerent playsound( "zmb_trap_tower_start" );
self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 ); self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 );
self thread activate_tower_trap(); self thread activate_tower_trap();
self thread tower_trap_timer(); self thread tower_trap_timer();
self waittill( "tower_trap_off" ); self waittill( "tower_trap_off" );
self.sndtowerent stoploopsound( 1 ); self.sndtowerent stoploopsound( 1 );
self.sndtowerent playsound( "zmb_trap_tower_end" ); self.sndtowerent playsound( "zmb_trap_tower_end" );
self.active = 0; self.active = 0;
self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" ); self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" );
zapper_light_red( light_name ); zapper_light_red( light_name );
wait 25; wait 25;
self playsound( "zmb_trap_available" ); self playsound( "zmb_trap_available" );
self notify( "available" ); self notify( "available" );
self.in_use = 0; self.in_use = 0;
} }
} }
} }
} }
} }
tower_upgrade_trigger_think() tower_upgrade_trigger_think()
{ {
while (1) while (1)
{ {
level thread open_tower_trap_upgrade_panel(); level thread open_tower_trap_upgrade_panel();
level waittill( self.upgrade_trigger.script_string ); level waittill( self.upgrade_trigger.script_string );
self.upgrade_trigger.in_use = 1; self.upgrade_trigger.in_use = 1;
self.upgrade_trigger.is_available = 0; self.upgrade_trigger.is_available = 0;
level.trapped_track["tower_upgrade"] = 1; level.trapped_track["tower_upgrade"] = 1;
level notify( "tower_trap_upgraded" ); level notify( "tower_trap_upgraded" );
level notify( "close_tower_trap_upgrade_panel" ); level notify( "close_tower_trap_upgrade_panel" );
self upgrade_tower_trap_weapon(); self upgrade_tower_trap_weapon();
level waittill( "end_of_round" ); level waittill( "end_of_round" );
self tower_trap_weapon(); self tower_trap_weapon();
self.upgrade_trigger notify( "afterlife_interact_reset" ); self.upgrade_trigger notify( "afterlife_interact_reset" );
self.upgrade_trigger notify( "available" ); self.upgrade_trigger notify( "available" );
self.upgrade_trigger.in_use = 0; self.upgrade_trigger.in_use = 0;
self.upgrade_trigger.is_available = 1; self.upgrade_trigger.is_available = 1;
} }
} }
tower_trap_weapon() tower_trap_weapon()
{ {
self.weapon_name = "tower_trap_zm"; self.weapon_name = "tower_trap_zm";
self.tag_to_target = "J_Head"; self.tag_to_target = "J_Head";
self.trap_reload_time = 0.75; self.trap_reload_time = 0.75;
} }
activate_tower_trap() activate_tower_trap()
{ {
self endon( "tower_trap_off" ); self endon( "tower_trap_off" );
while ( true ) while ( true )
{ {
zombies = getaiarray( level.zombie_team ); zombies = getaiarray( level.zombie_team );
if (is_gametype_active("zgrief")) if (is_gametype_active("zgrief"))
{ {
zombies = arraycombine(zombies, get_players(), 1, 0); zombies = arraycombine(zombies, get_players(), 1, 0);
} }
zombies_sorted = []; zombies_sorted = [];
foreach ( zombie in zombies ) foreach ( zombie in zombies )
{ {
if ( zombie istouching( self.range_trigger ) ) if ( zombie istouching( self.range_trigger ) )
{ {
zombies_sorted[zombies_sorted.size] = zombie; zombies_sorted[zombies_sorted.size] = zombie;
} }
} }
if ( zombies_sorted.size <= 0 ) if ( zombies_sorted.size <= 0 )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
self tower_trap_fires( zombies_sorted ); self tower_trap_fires( zombies_sorted );
} }
} }
tower_trap_fires( a_zombies ) tower_trap_fires( a_zombies )
{ {
if ( isdefined( level.custom_tower_trap_fires_func ) ) if ( isdefined( level.custom_tower_trap_fires_func ) )
{ {
self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies ); self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies );
return; return;
} }
if ( a_zombies.size <= 0 ) if ( a_zombies.size <= 0 )
{ {
return; return;
} }
self endon( "tower_trap_off" ); self endon( "tower_trap_off" );
e_org = getstruct( self.range_trigger.target, "targetname" ); e_org = getstruct( self.range_trigger.target, "targetname" );
while ( 1 ) while ( 1 )
{ {
if ( a_zombies.size <= 0 ) if ( a_zombies.size <= 0 )
{ {
wait 0.05; wait 0.05;
return; return;
} }
n_index = randomintrange( 0, a_zombies.size ); n_index = randomintrange( 0, a_zombies.size );
e_target = a_zombies[n_index]; e_target = a_zombies[n_index];
if ( !isalive( e_target ) ) if ( !isalive( e_target ) )
{ {
arrayremovevalue( a_zombies, e_target, 0 ); arrayremovevalue( a_zombies, e_target, 0 );
continue; continue;
} }
if ( isplayer( e_target ) && e_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( isplayer( e_target ) && e_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
arrayremovevalue( a_zombies, e_target, 0 ); arrayremovevalue( a_zombies, e_target, 0 );
continue; continue;
} }
v_zombietarget = e_target gettagorigin( self.tag_to_target ); v_zombietarget = e_target gettagorigin( self.tag_to_target );
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) ) if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
{ {
magicbullet( self.weapon_name, e_org.origin, v_zombietarget ); magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
wait( self.trap_reload_time ); wait( self.trap_reload_time );
return; return;
} }
else else
{ {
arrayremovevalue( a_zombies, e_target, 0 ); arrayremovevalue( a_zombies, e_target, 0 );
continue; continue;
} }
} }
} }

View File

@ -9,109 +9,109 @@
move_gondola( b_suppress_doors_close = 0 ) move_gondola( b_suppress_doors_close = 0 )
{ {
level clientnotify( "sndGS" ); level clientnotify( "sndGS" );
level thread gondola_lights_red(); level thread gondola_lights_red();
e_gondola = level.e_gondola; e_gondola = level.e_gondola;
t_ride = level.e_gondola.t_ride; t_ride = level.e_gondola.t_ride;
e_gondola.is_moving = 1; e_gondola.is_moving = 1;
if ( e_gondola.location == "roof" ) if ( e_gondola.location == "roof" )
{ {
s_moveloc = getstruct( "gondola_struct_docks", "targetname" ); s_moveloc = getstruct( "gondola_struct_docks", "targetname" );
e_gondola.destination = "docks"; e_gondola.destination = "docks";
level thread gondola_outofbounds_trigger_stop(); level thread gondola_outofbounds_trigger_stop();
} }
else if ( e_gondola.location == "docks" ) else if ( e_gondola.location == "docks" )
{ {
s_moveloc = getstruct( "gondola_struct_roof", "targetname" ); s_moveloc = getstruct( "gondola_struct_roof", "targetname" );
e_gondola.destination = "roof"; e_gondola.destination = "roof";
level thread gondola_outofbounds_trigger_enabled(); level thread gondola_outofbounds_trigger_enabled();
} }
if ( flag( "gondola_initialized" ) ) if ( flag( "gondola_initialized" ) )
{ {
flag_set( "gondola_roof_to_dock" ); flag_set( "gondola_roof_to_dock" );
flag_set( "gondola_dock_to_roof" ); flag_set( "gondola_dock_to_roof" );
flag_set( "gondola_ride_zone_enabled" ); flag_set( "gondola_ride_zone_enabled" );
} }
flag_clear( "gondola_at_" + e_gondola.location ); flag_clear( "gondola_at_" + e_gondola.location );
a_t_move = getentarray( "gondola_move_trigger", "targetname" ); a_t_move = getentarray( "gondola_move_trigger", "targetname" );
foreach ( trigger in a_t_move ) foreach ( trigger in a_t_move )
trigger sethintstring( "" ); trigger sethintstring( "" );
a_t_call = getentarray( "gondola_call_trigger", "targetname" ); a_t_call = getentarray( "gondola_call_trigger", "targetname" );
foreach ( trigger in a_t_call ) foreach ( trigger in a_t_call )
trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" ); trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" );
if ( !( isdefined( b_suppress_doors_close ) && b_suppress_doors_close ) ) if ( !( isdefined( b_suppress_doors_close ) && b_suppress_doors_close ) )
e_gondola gondola_doors_move( e_gondola.location, -1 ); e_gondola gondola_doors_move( e_gondola.location, -1 );
level notify( "gondola_moving" ); level notify( "gondola_moving" );
check_when_gondola_moves_if_groundent_is_undefined( e_gondola ); check_when_gondola_moves_if_groundent_is_undefined( e_gondola );
a_players = getplayers(); a_players = getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( player is_player_on_gondola() ) if ( player is_player_on_gondola() )
{ {
player setclientfieldtoplayer( "rumble_gondola", 1 ); player setclientfieldtoplayer( "rumble_gondola", 1 );
player thread check_for_death_on_gondola( e_gondola ); player thread check_for_death_on_gondola( e_gondola );
player.is_on_gondola = 1; player.is_on_gondola = 1;
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gondola", player ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gondola", player );
} }
if ( isdefined( player.e_afterlife_corpse ) && player.e_afterlife_corpse istouching( t_ride ) ) if ( isdefined( player.e_afterlife_corpse ) && player.e_afterlife_corpse istouching( t_ride ) )
player.e_afterlife_corpse thread link_corpses_to_gondola( e_gondola ); player.e_afterlife_corpse thread link_corpses_to_gondola( e_gondola );
} }
e_gondola thread create_gondola_poi(); e_gondola thread create_gondola_poi();
level thread gondola_moving_vo(); level thread gondola_moving_vo();
e_gondola thread gondola_physics_explosion( 10 ); e_gondola thread gondola_physics_explosion( 10 );
e_gondola moveto( s_moveloc.origin, 10, 1, 1 ); e_gondola moveto( s_moveloc.origin, 10, 1, 1 );
flag_set( "gondola_in_motion" ); flag_set( "gondola_in_motion" );
e_gondola thread gondola_chain_fx_anim(); e_gondola thread gondola_chain_fx_anim();
e_gondola playsound( "zmb_gondola_start" ); e_gondola playsound( "zmb_gondola_start" );
e_gondola playloopsound( "zmb_gondola_loop", 1 ); e_gondola playloopsound( "zmb_gondola_loop", 1 );
e_gondola waittill( "movedone" ); e_gondola waittill( "movedone" );
flag_clear( "gondola_in_motion" ); flag_clear( "gondola_in_motion" );
e_gondola stoploopsound( 0.5 ); e_gondola stoploopsound( 0.5 );
e_gondola thread sndcooldown(); e_gondola thread sndcooldown();
e_gondola playsound( "zmb_gondola_stop" ); e_gondola playsound( "zmb_gondola_stop" );
player_escaped_gondola_failsafe(); player_escaped_gondola_failsafe();
a_players = getplayers(); a_players = getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( isdefined( player.is_on_gondola ) && player.is_on_gondola ) if ( isdefined( player.is_on_gondola ) && player.is_on_gondola )
{ {
player setclientfieldtoplayer( "rumble_gondola", 0 ); player setclientfieldtoplayer( "rumble_gondola", 0 );
player.is_on_gondola = 0; player.is_on_gondola = 0;
} }
} }
e_gondola gondola_doors_move( e_gondola.destination, 1 ); e_gondola gondola_doors_move( e_gondola.destination, 1 );
e_gondola.is_moving = 0; e_gondola.is_moving = 0;
e_gondola thread tear_down_gondola_poi(); e_gondola thread tear_down_gondola_poi();
wait 1.0; wait 1.0;
level clientnotify( "sndGE" ); level clientnotify( "sndGE" );
if ( e_gondola.location == "roof" ) if ( e_gondola.location == "roof" )
{ {
e_gondola.location = "docks"; e_gondola.location = "docks";
str_zone = "zone_dock_gondola"; str_zone = "zone_dock_gondola";
} }
else if ( e_gondola.location == "docks" ) else if ( e_gondola.location == "docks" )
{ {
e_gondola.location = "roof"; e_gondola.location = "roof";
str_zone = "zone_cellblock_west_gondola_dock"; str_zone = "zone_cellblock_west_gondola_dock";
} }
level notify( "gondola_arrived", str_zone ); level notify( "gondola_arrived", str_zone );
gondola_cooldown(); gondola_cooldown();
flag_set( "gondola_at_" + e_gondola.location ); flag_set( "gondola_at_" + e_gondola.location );
} }

View File

@ -8,173 +8,173 @@
blundergat_upgrade_station() blundergat_upgrade_station()
{ {
t_upgrade = getent( "blundergat_upgrade", "targetname" ); t_upgrade = getent( "blundergat_upgrade", "targetname" );
t_upgrade.equipname = "packasplat"; t_upgrade.equipname = "packasplat";
t_upgrade.cost = t_upgrade scripts\zm\_zm_reimagined::get_equipment_cost(); t_upgrade.cost = t_upgrade scripts\zm\_zm_reimagined::get_equipment_cost();
t_upgrade sethintstring( &"ZM_PRISON_CONVERT_START", " [Cost: " + t_upgrade.cost + "]" ); t_upgrade sethintstring( &"ZM_PRISON_CONVERT_START", " [Cost: " + t_upgrade.cost + "]" );
t_upgrade usetriggerrequirelookat(); t_upgrade usetriggerrequirelookat();
waittill_crafted( "packasplat" ); waittill_crafted( "packasplat" );
m_converter = t_upgrade.m_upgrade_machine; m_converter = t_upgrade.m_upgrade_machine;
v_angles = m_converter gettagangles( "tag_origin" ); v_angles = m_converter gettagangles( "tag_origin" );
v_weapon_origin_offset = anglestoforward( v_angles ) * 1 + anglestoright( v_angles ) * 10 + anglestoup( v_angles ) * 1.75; v_weapon_origin_offset = anglestoforward( v_angles ) * 1 + anglestoright( v_angles ) * 10 + anglestoup( v_angles ) * 1.75;
v_weapon_angles_offset = ( 0, 90, -90 ); v_weapon_angles_offset = ( 0, 90, -90 );
m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset; m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset;
m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset; m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset;
m_converter useanimtree( #animtree ); m_converter useanimtree( #animtree );
m_converter.fxanims["close"] = %fxanim_zom_al_packasplat_start_anim; m_converter.fxanims["close"] = %fxanim_zom_al_packasplat_start_anim;
m_converter.fxanims["inject"] = %fxanim_zom_al_packasplat_idle_anim; m_converter.fxanims["inject"] = %fxanim_zom_al_packasplat_idle_anim;
m_converter.fxanims["open"] = %fxanim_zom_al_packasplat_end_anim; m_converter.fxanims["open"] = %fxanim_zom_al_packasplat_end_anim;
m_converter.n_start_time = getanimlength( m_converter.fxanims["close"] ); m_converter.n_start_time = getanimlength( m_converter.fxanims["close"] );
m_converter.n_idle_time = getanimlength( m_converter.fxanims["inject"] ); m_converter.n_idle_time = getanimlength( m_converter.fxanims["inject"] );
m_converter.n_end_time = getanimlength( m_converter.fxanims["open"] ); m_converter.n_end_time = getanimlength( m_converter.fxanims["open"] );
while ( true ) while ( true )
{ {
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_START", " [Cost: " + t_upgrade.cost + "]" ); t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_START", " [Cost: " + t_upgrade.cost + "]" );
t_upgrade waittill( "trigger", player ); t_upgrade waittill( "trigger", player );
if ( isdefined( level.custom_craftable_validation ) ) if ( isdefined( level.custom_craftable_validation ) )
{ {
valid = t_upgrade [[ level.custom_craftable_validation ]]( player ); valid = t_upgrade [[ level.custom_craftable_validation ]]( player );
if ( !valid ) if ( !valid )
continue; continue;
} }
if (player.score < t_upgrade.cost) if (player.score < t_upgrade.cost)
{ {
self play_sound_on_ent( "no_purchase" ); self play_sound_on_ent( "no_purchase" );
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
continue; continue;
} }
str_valid_weapon = player getcurrentweapon(); str_valid_weapon = player getcurrentweapon();
if ( str_valid_weapon == "blundergat_zm" || str_valid_weapon == "blundergat_upgraded_zm" ) if ( str_valid_weapon == "blundergat_zm" || str_valid_weapon == "blundergat_upgraded_zm" )
{ {
player maps\mp\zombies\_zm_score::minus_to_player_score( t_upgrade.cost ); player maps\mp\zombies\_zm_score::minus_to_player_score( t_upgrade.cost );
t_upgrade play_sound_on_ent( "purchase" ); t_upgrade play_sound_on_ent( "purchase" );
player thread maps\mp\zombies\_zm_perks::do_knuckle_crack(); player thread maps\mp\zombies\_zm_perks::do_knuckle_crack();
player.is_pack_splatting = 1; player.is_pack_splatting = 1;
t_upgrade setinvisibletoall(); t_upgrade setinvisibletoall();
m_converter.worldgun = spawn_weapon_model( str_valid_weapon, undefined, m_converter.v_weapon_origin, m_converter.v_weapon_angles ); m_converter.worldgun = spawn_weapon_model( str_valid_weapon, undefined, m_converter.v_weapon_origin, m_converter.v_weapon_angles );
m_converter blundergat_upgrade_station_inject( str_valid_weapon ); m_converter blundergat_upgrade_station_inject( str_valid_weapon );
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_PICKUP" ); t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_PICKUP" );
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
t_upgrade setvisibletoplayer( player ); t_upgrade setvisibletoplayer( player );
t_upgrade thread wait_for_player_to_take( player, str_valid_weapon ); t_upgrade thread wait_for_player_to_take( player, str_valid_weapon );
} }
t_upgrade thread wait_for_timeout(); t_upgrade thread wait_for_timeout();
t_upgrade waittill_any( "acid_timeout", "acid_taken" ); t_upgrade waittill_any( "acid_timeout", "acid_taken" );
t_upgrade setinvisibletoall(); t_upgrade setinvisibletoall();
if ( isdefined( player ) ) if ( isdefined( player ) )
player.is_pack_splatting = undefined; player.is_pack_splatting = undefined;
m_converter.worldgun delete(); m_converter.worldgun delete();
wait 0.5; wait 0.5;
t_upgrade setvisibletoall(); t_upgrade setvisibletoall();
} }
else else
{ {
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_MISSING_BLUNDERGAT" ); t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_MISSING_BLUNDERGAT" );
wait 2; wait 2;
} }
} }
} }
blundergat_change_hintstring( hint_string, hint_string_cost ) blundergat_change_hintstring( hint_string, hint_string_cost )
{ {
self notify( "new_change_hint_string" ); self notify( "new_change_hint_string" );
self endon( "new_change_hint_string" ); self endon( "new_change_hint_string" );
while ( isdefined( self.is_locked ) && self.is_locked ) while ( isdefined( self.is_locked ) && self.is_locked )
wait 0.05; wait 0.05;
if (isDefined(hint_string_cost)) if (isDefined(hint_string_cost))
{ {
self sethintstring( hint_string, hint_string_cost ); self sethintstring( hint_string, hint_string_cost );
} }
else else
{ {
self sethintstring( hint_string ); self sethintstring( hint_string );
} }
wait 0.05; wait 0.05;
if (isDefined(hint_string_cost)) if (isDefined(hint_string_cost))
{ {
self sethintstring( hint_string, hint_string_cost ); self sethintstring( hint_string, hint_string_cost );
} }
else else
{ {
self sethintstring( hint_string ); self sethintstring( hint_string );
} }
} }
wait_for_player_to_take( player, str_valid_weapon ) wait_for_player_to_take( player, str_valid_weapon )
{ {
self endon( "acid_timeout" ); self endon( "acid_timeout" );
player endon( "disconnect" ); player endon( "disconnect" );
while ( true ) while ( true )
{ {
self waittill( "trigger", trigger_player ); self waittill( "trigger", trigger_player );
if ( isdefined( level.custom_craftable_validation ) ) if ( isdefined( level.custom_craftable_validation ) )
{ {
valid = self [[ level.custom_craftable_validation ]]( player ); valid = self [[ level.custom_craftable_validation ]]( player );
if ( !valid ) if ( !valid )
continue; continue;
} }
if ( trigger_player == player ) if ( trigger_player == player )
{ {
current_weapon = player getcurrentweapon(); current_weapon = player getcurrentweapon();
if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !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() ) if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !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() )
{ {
self notify( "acid_taken" ); self notify( "acid_taken" );
player notify( "acid_taken" ); player notify( "acid_taken" );
weapon_limit = get_player_weapon_limit( player ); weapon_limit = get_player_weapon_limit( player );
primaries = player getweaponslistprimaries(); primaries = player getweaponslistprimaries();
if ( isdefined( primaries ) && primaries.size >= weapon_limit ) if ( isdefined( primaries ) && primaries.size >= weapon_limit )
player takeweapon( current_weapon ); player takeweapon( current_weapon );
str_new_weapon = undefined; str_new_weapon = undefined;
if ( str_valid_weapon == "blundergat_zm" ) if ( str_valid_weapon == "blundergat_zm" )
str_new_weapon = "blundersplat_zm"; str_new_weapon = "blundersplat_zm";
else else
str_new_weapon = "blundersplat_upgraded_zm"; str_new_weapon = "blundersplat_upgraded_zm";
if ( player hasweapon( "blundersplat_zm" ) ) if ( player hasweapon( "blundersplat_zm" ) )
player givemaxammo( "blundersplat_zm" ); player givemaxammo( "blundersplat_zm" );
else if ( player hasweapon( "blundersplat_upgraded_zm" ) ) else if ( player hasweapon( "blundersplat_upgraded_zm" ) )
player givemaxammo( "blundersplat_upgraded_zm" ); player givemaxammo( "blundersplat_upgraded_zm" );
else else
{ {
player giveweapon( str_new_weapon ); player giveweapon( str_new_weapon );
player switchtoweapon( str_new_weapon ); player switchtoweapon( str_new_weapon );
} }
player thread do_player_general_vox( "general", "player_recieves_blundersplat" ); player thread do_player_general_vox( "general", "player_recieves_blundersplat" );
player notify( "player_obtained_acidgat" ); player notify( "player_obtained_acidgat" );
player thread player_lost_blundersplat_watcher(); player thread player_lost_blundersplat_watcher();
return; return;
} }
} }
} }
} }
check_solo_status() check_solo_status()
{ {
level.is_forever_solo_game = 0; level.is_forever_solo_game = 0;
} }

View File

@ -7,101 +7,101 @@
grief_soul_catcher_state_manager() grief_soul_catcher_state_manager()
{ {
wait 1; wait 1;
if (is_true(level.scr_zm_ui_gametype_pro)) if (is_true(level.scr_zm_ui_gametype_pro))
{ {
for (i = 0; i < level.soul_catchers.size; i++) for (i = 0; i < level.soul_catchers.size; i++)
{ {
level.soul_catchers[i].is_charged = 1; level.soul_catchers[i].is_charged = 1;
} }
return; return;
} }
while ( true ) while ( true )
{ {
level setclientfield( self.script_parameters, 0 ); level setclientfield( self.script_parameters, 0 );
self waittill( "first_zombie_killed_in_zone" ); self waittill( "first_zombie_killed_in_zone" );
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall(); level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
level setclientfield( self.script_parameters, 1 ); level setclientfield( self.script_parameters, 1 );
anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
wait( anim_length ); wait( anim_length );
while ( !self.is_charged ) while ( !self.is_charged )
{ {
level setclientfield( self.script_parameters, 2 ); level setclientfield( self.script_parameters, 2 );
self waittill_either( "fully_charged", "finished_eating" ); self waittill_either( "fully_charged", "finished_eating" );
} }
level setclientfield( self.script_parameters, 6 ); level setclientfield( self.script_parameters, 6 );
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro ); anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
wait( anim_length ); wait( anim_length );
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
level.soul_catcher_clip[self.script_noteworthy] delete(); level.soul_catcher_clip[self.script_noteworthy] delete();
self.souls_received = 0; self.souls_received = 0;
level thread wolf_spit_out_powerup(); level thread wolf_spit_out_powerup();
wait 20; wait 20;
self thread soul_catcher_check(); self thread soul_catcher_check();
} }
} }
wolf_spit_out_powerup() wolf_spit_out_powerup()
{ {
if ( !( isdefined( level.enable_magic ) && level.enable_magic ) ) if ( !( isdefined( level.enable_magic ) && level.enable_magic ) )
return; return;
power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" ); power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" );
if ( level.scr_zm_ui_gametype_obj != "zmeat" && randomint( 100 ) < 20 ) if ( level.scr_zm_ui_gametype_obj != "zmeat" && randomint( 100 ) < 20 )
{ {
for ( i = 0; i < level.zombie_powerup_array.size; i++ ) for ( i = 0; i < level.zombie_powerup_array.size; i++ )
{ {
if ( level.zombie_powerup_array[i] == "meat_stink" ) if ( level.zombie_powerup_array[i] == "meat_stink" )
{ {
level.zombie_powerup_index = i; level.zombie_powerup_index = i;
found = 1; found = 1;
break; break;
} }
} }
} }
else else
{ {
while ( true ) while ( true )
{ {
level.zombie_powerup_index = randomint( level.zombie_powerup_array.size ); level.zombie_powerup_index = randomint( level.zombie_powerup_array.size );
if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" ) if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
if ( level.scr_zm_ui_gametype_obj == "zmeat" && level.zombie_powerup_array[level.zombie_powerup_index] == "meat_stink" ) if ( level.scr_zm_ui_gametype_obj == "zmeat" && level.zombie_powerup_array[level.zombie_powerup_index] == "meat_stink" )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
break; break;
} }
} }
if (getDvar("ui_zm_mapstartlocation_fake") == "docks") if (getDvar("ui_zm_mapstartlocation_fake") == "docks")
{ {
power_origin_struct = spawnStruct(); power_origin_struct = spawnStruct();
power_origin_struct.origin = ( 41.4695, 6096.17, -102.9326 ); power_origin_struct.origin = ( 41.4695, 6096.17, -102.9326 );
} }
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[level.zombie_powerup_index] ); spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[level.zombie_powerup_index] );
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 ); power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
if ( isdefined( power_ups[0] ) ) if ( isdefined( power_ups[0] ) )
power_ups[0] movez( 120, 4 ); power_ups[0] movez( 120, 4 );
} }

View File

@ -16,16 +16,16 @@
watch_cell_open_close( door ) watch_cell_open_close( door )
{ {
level.cell_open = 0; level.cell_open = 0;
while ( true ) while ( true )
{ {
level waittill( "cell_open" ); level waittill( "cell_open" );
level.cell_open = 1; level.cell_open = 1;
level waittill( "cell_close" ); level waittill( "cell_close" );
level.cell_open = 0; level.cell_open = 0;
} }
} }

View File

@ -8,92 +8,92 @@
delete_zombie_noone_looking( how_close, how_high ) delete_zombie_noone_looking( how_close, how_high )
{ {
self endon( "death" ); self endon( "death" );
if ( self can_be_deleted_from_buried_special_zones() ) if ( self can_be_deleted_from_buried_special_zones() )
{ {
self.inview = 0; self.inview = 0;
self.player_close = 0; self.player_close = 0;
} }
else else
{ {
if ( !isdefined( how_close ) ) if ( !isdefined( how_close ) )
how_close = 1000; how_close = 1000;
if ( !isdefined( how_high ) ) if ( !isdefined( how_high ) )
how_high = 500; how_high = 500;
if ( !( isdefined( self.has_legs ) && self.has_legs ) ) if ( !( isdefined( self.has_legs ) && self.has_legs ) )
how_close *= 1.5; how_close *= 1.5;
distance_squared_check = how_close * how_close; distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high; height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3; too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) ) if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0; self.inview = 0;
self.player_close = 0; self.player_close = 0;
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player.sessionstate == "spectator" ) if ( player.sessionstate == "spectator" )
continue; continue;
if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) ) if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
{ {
if ( !self can_zombie_see_any_player() ) if ( !self can_zombie_see_any_player() )
{ {
self.favoriteenemy = undefined; self.favoriteenemy = undefined;
self.zombie_path_bad = 1; self.zombie_path_bad = 1;
self thread escaped_zombies_cleanup(); self thread escaped_zombies_cleanup();
} }
} }
if ( isdefined( level.only_track_targeted_players ) ) if ( isdefined( level.only_track_targeted_players ) )
{ {
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player ) if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
continue; continue;
} }
can_be_seen = self player_can_see_me( player ); can_be_seen = self player_can_see_me( player );
distance_squared = distancesquared( self.origin, player.origin ); distance_squared = distancesquared( self.origin, player.origin );
if ( can_be_seen && distance_squared < too_far_dist ) if ( can_be_seen && distance_squared < too_far_dist )
self.inview++; self.inview++;
if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high ) if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
self.player_close++; self.player_close++;
} }
} }
wait 0.1; wait 0.1;
if ( self.inview == 0 && self.player_close == 0 ) if ( self.inview == 0 && self.player_close == 0 )
{ {
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return; return;
if ( isdefined( self.electrified ) && self.electrified == 1 ) if ( isdefined( self.electrified ) && self.electrified == 1 )
return; return;
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{ {
level.zombie_total++; level.zombie_total++;
if ( self.health < level.zombie_health ) if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
} }
self maps\mp\zombies\_zm_spawner::reset_attack_spot(); self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" ); self notify( "zombie_delete" );
if ( isdefined( self.anchor ) ) if ( isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
self delete(); self delete();
recalc_zombie_array(); recalc_zombie_array();
} }
} }

View File

@ -9,43 +9,43 @@
jail_traversal_fix() jail_traversal_fix()
{ {
self endon( "death" ); self endon( "death" );
window_pos = ( -837, 496, 8 ); window_pos = ( -837, 496, 8 );
fix_dist = 64; fix_dist = 64;
while ( true ) while ( true )
{ {
dist = distancesquared( self.origin, window_pos ); dist = distancesquared( self.origin, window_pos );
if ( dist < fix_dist ) if ( dist < fix_dist )
{ {
node = self getnegotiationstartnode(); node = self getnegotiationstartnode();
if ( isdefined( node ) ) if ( isdefined( node ) )
{ {
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" ) if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
{ {
self setphysparams( 25, 0, 60 ); self setphysparams( 25, 0, 60 );
wait 1; wait 1;
if ( is_true( self.has_legs ) ) if ( is_true( self.has_legs ) )
self setphysparams( 15, 0, 60 ); self setphysparams( 15, 0, 60 );
else else
self setphysparams( 15, 0, 24 ); self setphysparams( 15, 0, 24 );
} }
} }
} }
wait 0.25; wait 0.25;
} }
} }
time_bomb_takeaway() time_bomb_takeaway()
{ {
// remove // remove
} }
spawned_life_triggers() spawned_life_triggers()
{ {
// remove // remove
} }

View File

@ -8,55 +8,55 @@
transport_player_to_start_zone() transport_player_to_start_zone()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
fountain_debug_print( "transport player!" ); fountain_debug_print( "transport player!" );
if ( !isdefined( level._fountain_transporter ) ) if ( !isdefined( level._fountain_transporter ) )
{ {
level._fountain_transporter = spawnstruct(); level._fountain_transporter = spawnstruct();
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" ); level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
} }
self playsoundtoplayer( "zmb_buried_teleport", self ); self playsoundtoplayer( "zmb_buried_teleport", self );
self play_teleport_fx(); self play_teleport_fx();
self flash_screen_white(); self flash_screen_white();
wait_network_frame(); wait_network_frame();
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size ) if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
tries = 0; tries = 0;
while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) ) while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) )
{ {
tries++; tries++;
if ( tries >= 4 ) if ( tries >= 4 )
{ {
tries = 0; tries = 0;
wait 0.05; wait 0.05;
} }
level._fountain_transporter.index++; level._fountain_transporter.index++;
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size ) if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
} }
self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ); self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin );
self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles ); self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles );
self setvelocity( ( 0, 0, 0 ) ); self setvelocity( ( 0, 0, 0 ) );
level._fountain_transporter.index++; level._fountain_transporter.index++;
wait_network_frame(); wait_network_frame();
self play_teleport_fx(); self play_teleport_fx();
self thread flash_screen_fade_out(); self thread flash_screen_fade_out();
self maps\mp\zm_buried_classic::buried_set_start_area_lighting(); self maps\mp\zm_buried_classic::buried_set_start_area_lighting();
self thread maps\mp\zombies\_zm_ai_ghost::behave_after_fountain_transport( self ); self thread maps\mp\zombies\_zm_ai_ghost::behave_after_fountain_transport( self );
self maps\mp\zombies\_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 ); self maps\mp\zombies\_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 );
self maps\mp\zombies\_zm_stats::increment_player_stat( "buried_fountain_transporter_used" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
self notify( "player_used_fountain_teleporter" ); self notify( "player_used_fountain_teleporter" );
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
self.is_in_fountain_transport_trigger = 0; self.is_in_fountain_transport_trigger = 0;
} }

View File

@ -18,46 +18,46 @@
init() init()
{ {
add_map_gamemode( "zclassic", maps\mp\zm_buried::zclassic_preinit, undefined, undefined ); add_map_gamemode( "zclassic", maps\mp\zm_buried::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zcleansed", maps\mp\zm_buried::zcleansed_preinit, undefined, undefined ); add_map_gamemode( "zcleansed", maps\mp\zm_buried::zcleansed_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps\mp\zm_buried::zgrief_preinit, undefined, undefined ); add_map_gamemode( "zgrief", maps\mp\zm_buried::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "processing", maps\mp\zm_buried_classic::precache, maps\mp\zm_buried_classic::main ); add_map_location_gamemode( "zclassic", "processing", maps\mp\zm_buried_classic::precache, maps\mp\zm_buried_classic::main );
add_map_location_gamemode( "zcleansed", "street", maps\mp\zm_buried_turned_street::precache, maps\mp\zm_buried_turned_street::main ); add_map_location_gamemode( "zcleansed", "street", maps\mp\zm_buried_turned_street::precache, maps\mp\zm_buried_turned_street::main );
add_map_location_gamemode( "zgrief", "street", scripts\zm\replaced\zm_buried_grief_street::precache, scripts\zm\replaced\zm_buried_grief_street::main ); add_map_location_gamemode( "zgrief", "street", scripts\zm\replaced\zm_buried_grief_street::precache, scripts\zm\replaced\zm_buried_grief_street::main );
if (getDvar("ui_zm_mapstartlocation_fake") == "maze") if (getDvar("ui_zm_mapstartlocation_fake") == "maze")
{ {
scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zgrief", "street", scripts\zm\locs\zm_buried_loc_maze::struct_init ); scripts\zm\replaced\utility::add_struct_location_gamemode_func( "zgrief", "street", scripts\zm\locs\zm_buried_loc_maze::struct_init );
} }
} }
buildbuildable( buildable ) buildbuildable( buildable )
{ {
player = get_players()[0]; player = get_players()[0];
foreach ( stub in level.buildable_stubs ) foreach ( stub in level.buildable_stubs )
{ {
if ( !isdefined( buildable ) || stub.equipname == buildable ) if ( !isdefined( buildable ) || stub.equipname == buildable )
{ {
if ( isdefined( buildable ) || stub.persistent != 3 ) if ( isdefined( buildable ) || stub.persistent != 3 )
{ {
stub maps\mp\zombies\_zm_buildables::buildablestub_remove(); stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
foreach ( piece in stub.buildablezone.pieces ) foreach ( piece in stub.buildablezone.pieces )
{ {
piece maps\mp\zombies\_zm_buildables::piece_unspawn(); piece maps\mp\zombies\_zm_buildables::piece_unspawn();
} }
stub maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player ); stub maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
stub.model notsolid(); stub.model notsolid();
stub.model show(); stub.model show();
return; return;
} }
} }
} }
} }

View File

@ -46,7 +46,7 @@ precache()
maps\mp\zombies\_zm_equip_turbine::init_animtree(); maps\mp\zombies\_zm_equip_turbine::init_animtree();
maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" ); maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" );
maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" ); maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" );
maps\mp\zombies\_zm_equip_headchopper::init( &"ZM_BURIED_EQ_HC_PHS", &"ZM_BURIED_EQ_HC_HTS" ); maps\mp\zombies\_zm_equip_headchopper::init( &"ZM_BURIED_EQ_HC_PHS", &"ZM_BURIED_EQ_HC_HTS" );
} }
main() main()
@ -119,7 +119,7 @@ builddynamicwallbuys()
builddynamicwallbuy( "church", "svu_zm" ); builddynamicwallbuy( "church", "svu_zm" );
builddynamicwallbuy( "mansion", "an94_zm" ); builddynamicwallbuy( "mansion", "an94_zm" );
level notify("dynamicwallbuysbuilt"); level notify("dynamicwallbuysbuilt");
} }
builddynamicwallbuy( location, weaponname ) builddynamicwallbuy( location, weaponname )

View File

@ -7,23 +7,23 @@
electric_switch() electric_switch()
{ {
trig = getent( "use_elec_switch", "targetname" ); trig = getent( "use_elec_switch", "targetname" );
master_switch = getent( "elec_switch", "targetname" ); master_switch = getent( "elec_switch", "targetname" );
master_switch notsolid(); master_switch notsolid();
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
trig setvisibletoall(); trig setvisibletoall();
trig setinvisibletoall(); trig setinvisibletoall();
master_switch rotateroll( -90, 0.3 ); master_switch rotateroll( -90, 0.3 );
master_switch playsound( "zmb_switch_flip" ); master_switch playsound( "zmb_switch_flip" );
master_switch playsound( "zmb_poweron" ); master_switch playsound( "zmb_poweron" );
level delay_thread( 11.8, ::sndpoweronmusicstinger ); level delay_thread( 11.8, ::sndpoweronmusicstinger );
master_switch waittill( "rotatedone" ); master_switch waittill( "rotatedone" );
master_switch playsound( "zmb_turn_on" ); master_switch playsound( "zmb_turn_on" );
level notify( "electric_door" ); level notify( "electric_door" );
clientnotify( "power_on" ); clientnotify( "power_on" );
flag_set( "power_on" ); flag_set( "power_on" );
level setclientfield( "zombie_power_on", 1 ); level setclientfield( "zombie_power_on", 1 );
} }

View File

@ -27,113 +27,113 @@
sq_metagame() sq_metagame()
{ {
level endon( "sq_metagame_player_connected" ); level endon( "sq_metagame_player_connected" );
if ( !is_true( level.buried_sq_maxis_complete ) && !is_true( level.buried_sq_richtofen_complete ) ) if ( !is_true( level.buried_sq_maxis_complete ) && !is_true( level.buried_sq_richtofen_complete ) )
level waittill( "buried_sidequest_achieved" ); level waittill( "buried_sidequest_achieved" );
m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" ); m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" );
a_stat = []; a_stat = [];
a_stat[0] = "sq_transit_last_completed"; a_stat[0] = "sq_transit_last_completed";
a_stat[1] = "sq_highrise_last_completed"; a_stat[1] = "sq_highrise_last_completed";
a_stat[2] = "sq_buried_last_completed"; a_stat[2] = "sq_buried_last_completed";
level.n_metagame_machine_lights_on = 0; level.n_metagame_machine_lights_on = 0;
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
sq_metagame_clear_lights(); sq_metagame_clear_lights();
players = get_players(); players = get_players();
player_count = players.size; player_count = players.size;
for ( n_player = 0; n_player < player_count; n_player++ ) for ( n_player = 0; n_player < player_count; n_player++ )
{ {
for ( n_stat = 0; n_stat < a_stat.size; n_stat++ ) for ( n_stat = 0; n_stat < a_stat.size; n_stat++ )
{ {
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{ {
m_endgame_machine sq_metagame_machine_set_light( n_player, n_stat, "sq_bulb_orange" ); m_endgame_machine sq_metagame_machine_set_light( n_player, n_stat, "sq_bulb_orange" );
} }
else else
{ {
m_endgame_machine sq_metagame_machine_set_light( n_player, n_stat, "sq_bulb_blue" ); m_endgame_machine sq_metagame_machine_set_light( n_player, n_stat, "sq_bulb_blue" );
} }
level setclientfield( "buried_sq_egm_bulb_" + n_stat, 1 ); level setclientfield( "buried_sq_egm_bulb_" + n_stat, 1 );
} }
} }
m_endgame_machine.activate_trig = spawn( "trigger_radius", m_endgame_machine.origin, 0, 128, 72 ); m_endgame_machine.activate_trig = spawn( "trigger_radius", m_endgame_machine.origin, 0, 128, 72 );
m_endgame_machine.activate_trig waittill( "trigger" ); m_endgame_machine.activate_trig waittill( "trigger" );
m_endgame_machine.activate_trig delete(); m_endgame_machine.activate_trig delete();
m_endgame_machine.activate_trig = undefined; m_endgame_machine.activate_trig = undefined;
level setclientfield( "buried_sq_egm_animate", 1 ); level setclientfield( "buried_sq_egm_animate", 1 );
m_endgame_machine.endgame_trig = spawn( "trigger_radius_use", m_endgame_machine.origin, 0, 16, 16 ); m_endgame_machine.endgame_trig = spawn( "trigger_radius_use", m_endgame_machine.origin, 0, 16, 16 );
m_endgame_machine.endgame_trig setcursorhint( "HINT_NOICON" ); m_endgame_machine.endgame_trig setcursorhint( "HINT_NOICON" );
m_endgame_machine.endgame_trig sethintstring( &"ZM_BURIED_SQ_EGM_BUT" ); m_endgame_machine.endgame_trig sethintstring( &"ZM_BURIED_SQ_EGM_BUT" );
m_endgame_machine.endgame_trig triggerignoreteam(); m_endgame_machine.endgame_trig triggerignoreteam();
m_endgame_machine.endgame_trig usetriggerrequirelookat(); m_endgame_machine.endgame_trig usetriggerrequirelookat();
m_endgame_machine.endgame_trig waittill( "trigger" ); m_endgame_machine.endgame_trig waittill( "trigger" );
m_endgame_machine.endgame_trig delete(); m_endgame_machine.endgame_trig delete();
m_endgame_machine.endgame_trig = undefined; m_endgame_machine.endgame_trig = undefined;
level thread sq_metagame_clear_tower_pieces(); level thread sq_metagame_clear_tower_pieces();
playsoundatposition( "zmb_endgame_mach_button", m_endgame_machine.origin ); playsoundatposition( "zmb_endgame_mach_button", m_endgame_machine.origin );
players = get_players(); players = get_players();
sq_metagame_clear_lights(); sq_metagame_clear_lights();
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
level notify( "end_game_reward_starts_maxis" ); level notify( "end_game_reward_starts_maxis" );
else else
level notify( "end_game_reward_starts_richtofen" ); level notify( "end_game_reward_starts_richtofen" );
} }
make_richtofen_zombie() make_richtofen_zombie()
{ {
self endon( "death" ); self endon( "death" );
level.sq_richtofen_zombie.spawned = 1; level.sq_richtofen_zombie.spawned = 1;
self setclientfield( "buried_sq_maxis_ending_update_eyeball_color", 1 ); self setclientfield( "buried_sq_maxis_ending_update_eyeball_color", 1 );
self thread richtofen_zombie_watch_death(); self thread richtofen_zombie_watch_death();
self waittill( "completed_emerging_into_playable_area" ); self waittill( "completed_emerging_into_playable_area" );
self thread richtofen_zombie_vo_watcher(); self thread richtofen_zombie_vo_watcher();
self.deathfunction_old = self.deathfunction; self.deathfunction_old = self.deathfunction;
self.deathfunction = ::richtofen_zombie_deathfunction_override; self.deathfunction = ::richtofen_zombie_deathfunction_override;
} }
richtofen_zombie_deathfunction_override() richtofen_zombie_deathfunction_override()
{ {
if ( isdefined( self.attacker ) && isplayer( self.attacker ) ) if ( isdefined( self.attacker ) && isplayer( self.attacker ) )
{ {
if ( !( isdefined( self.turning_into_ghost ) && self.turning_into_ghost ) ) if ( !( isdefined( self.turning_into_ghost ) && self.turning_into_ghost ) )
{ {
self force_random_powerup_drop(); self force_random_powerup_drop();
self.attacker maps\mp\zombies\_zm_score::add_to_player_score( 500 ); self.attacker maps\mp\zombies\_zm_score::add_to_player_score( 500 );
} }
} }
return self [[ self.deathfunction_old ]](); return self [[ self.deathfunction_old ]]();
} }
sq_give_player_rewards() sq_give_player_rewards()
{ {
level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud(); level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud();
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) ) if ( is_player_valid( player ) )
{ {
player thread scripts\zm\replaced\_zm_sq::sq_give_player_all_perks(); player thread scripts\zm\replaced\_zm_sq::sq_give_player_all_perks();
} }
} }
} }
mule_kick_allows_4_weapons() mule_kick_allows_4_weapons()
{ {
level.additionalprimaryweapon_limit = 4; level.additionalprimaryweapon_limit = 4;
} }

View File

@ -7,44 +7,44 @@
stage_vo_watch_gallows() stage_vo_watch_gallows()
{ {
level endon( "sq_bt_over" ); level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" ); level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" ); level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" ); s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" ); trigger waittill( "trigger" );
trigger delete(); trigger delete();
m_maxis_vo_spot = spawn( "script_model", s_struct.origin ); m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" ); m_maxis_vo_spot setmodel( "tag_origin" );
if ( flag( "sq_intro_vo_done" ) ) if ( flag( "sq_intro_vo_done" ) )
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot ); maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
level waittill( "mtower_object_planted" ); level waittill( "mtower_object_planted" );
if ( flag( "sq_intro_vo_done" ) ) if ( flag( "sq_intro_vo_done" ) )
maxissay( "vox_maxi_sidequest_parts_3", m_maxis_vo_spot, 1 ); maxissay( "vox_maxi_sidequest_parts_3", m_maxis_vo_spot, 1 );
m_maxis_vo_spot delete(); m_maxis_vo_spot delete();
} }
stage_vo_watch_guillotine() stage_vo_watch_guillotine()
{ {
level endon( "sq_bt_over" ); level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" ); level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" ); level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_guillotine", "targetname" ); s_struct = getstruct( "sq_guillotine", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" ); trigger waittill( "trigger" );
trigger delete(); trigger delete();
richtofensay( "vox_zmba_sidequest_gallows_0", 9 ); richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
richtofensay( "vox_zmba_sidequest_gallows_1", 12 ); richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
level waittill( "rtower_object_planted" ); level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_3", 11 ); richtofensay( "vox_zmba_sidequest_parts_3", 11 );
} }

View File

@ -8,136 +8,136 @@
init() init()
{ {
flag_init( "sq_ip_puzzle_complete" ); flag_init( "sq_ip_puzzle_complete" );
level.sq_bp_buttons = []; level.sq_bp_buttons = [];
s_lightboard = getstruct( "zm_sq_lightboard", "targetname" ); s_lightboard = getstruct( "zm_sq_lightboard", "targetname" );
s_lightboard sq_bp_spawn_board(); s_lightboard sq_bp_spawn_board();
declare_sidequest_stage( "sq", "ip", ::init_stage, ::stage_logic, ::exit_stage ); declare_sidequest_stage( "sq", "ip", ::init_stage, ::stage_logic, ::exit_stage );
} }
stage_logic() stage_logic()
{ {
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{ {
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
array_thread( a_button_structs, ::sq_bp_spawn_trigger ); array_thread( a_button_structs, ::sq_bp_spawn_trigger );
m_lightboard = getent( "sq_bp_board", "targetname" ); m_lightboard = getent( "sq_bp_board", "targetname" );
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 ); m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
while ( !flag( "sq_ip_puzzle_complete" ) ) while ( !flag( "sq_ip_puzzle_complete" ) )
{ {
sq_bp_start_puzzle_lights(); sq_bp_start_puzzle_lights();
sq_bp_delete_green_lights(); sq_bp_delete_green_lights();
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
} }
} }
else else
{ {
sq_ml_spawn_levers(); sq_ml_spawn_levers();
a_levers = getentarray( "sq_ml_lever", "targetname" ); a_levers = getentarray( "sq_ml_lever", "targetname" );
array_thread( a_levers, ::sq_ml_spawn_trigger ); array_thread( a_levers, ::sq_ml_spawn_trigger );
level thread sq_ml_puzzle_logic(); level thread sq_ml_puzzle_logic();
flag_wait( "sq_ip_puzzle_complete" ); flag_wait( "sq_ip_puzzle_complete" );
} }
wait_network_frame(); wait_network_frame();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
sq_bp_start_puzzle_lights() sq_bp_start_puzzle_lights()
{ {
level endon( "sq_bp_wrong_button" ); level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" ); level endon( "sq_bp_timeout" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
a_tags = []; a_tags = [];
foreach ( m_button in a_button_structs ) foreach ( m_button in a_button_structs )
a_tags[a_tags.size] = m_button.script_string; a_tags[a_tags.size] = m_button.script_string;
a_tags = array_randomize( a_tags ); a_tags = array_randomize( a_tags );
m_lightboard = getent( "sq_bp_board", "targetname" ); m_lightboard = getent( "sq_bp_board", "targetname" );
foreach ( str_tag in a_tags ) foreach ( str_tag in a_tags )
{ {
level waittill( "sq_bp_correct_button" ); level waittill( "sq_bp_correct_button" );
} }
flag_set( "sq_ip_puzzle_complete" ); flag_set( "sq_ip_puzzle_complete" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
foreach ( s_button in a_button_structs ) foreach ( s_button in a_button_structs )
{ {
if ( isdefined( s_button.trig ) ) if ( isdefined( s_button.trig ) )
s_button.trig delete(); s_button.trig delete();
} }
} }
sq_bp_spawn_trigger() sq_bp_spawn_trigger()
{ {
level endon( "sq_ip_puzzle_complete" ); level endon( "sq_ip_puzzle_complete" );
self.trig = spawn( "trigger_radius_use", self.origin, 0, 16, 16 ); self.trig = spawn( "trigger_radius_use", self.origin, 0, 16, 16 );
self.trig setcursorhint( "HINT_NOICON" ); self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" ); self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
self.trig triggerignoreteam(); self.trig triggerignoreteam();
self.trig usetriggerrequirelookat(); self.trig usetriggerrequirelookat();
while ( true ) while ( true )
{ {
self.trig waittill( "trigger" ); self.trig waittill( "trigger" );
self.trig sethintstring( "" ); self.trig sethintstring( "" );
level thread sq_bp_button_pressed( self.script_string, self.trig ); level thread sq_bp_button_pressed( self.script_string, self.trig );
wait 1; wait 1;
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" ); self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
} }
} }
sq_bp_button_pressed( str_tag, trig ) sq_bp_button_pressed( str_tag, trig )
{ {
trig playsound( "zmb_sq_bell_yes" ); trig playsound( "zmb_sq_bell_yes" );
if ( is_true( trig.triggered ) ) if ( is_true( trig.triggered ) )
{ {
return; return;
} }
trig.triggered = 1; trig.triggered = 1;
sq_bp_light_on( str_tag, "green" ); sq_bp_light_on( str_tag, "green" );
level notify( "sq_bp_correct_button" ); level notify( "sq_bp_correct_button" );
} }
sq_ml_puzzle_logic() sq_ml_puzzle_logic()
{ {
a_levers = getentarray( "sq_ml_lever", "targetname" ); a_levers = getentarray( "sq_ml_lever", "targetname" );
level.sq_ml_curr_lever = 0; level.sq_ml_curr_lever = 0;
a_levers = array_randomize( a_levers ); a_levers = array_randomize( a_levers );
for ( i = 0; i < a_levers.size; i++ ) for ( i = 0; i < a_levers.size; i++ )
a_levers[i].n_lever_order = i; a_levers[i].n_lever_order = i;
while ( true ) while ( true )
{ {
level.sq_ml_curr_lever = 0; level.sq_ml_curr_lever = 0;
sq_ml_puzzle_wait_for_levers(); sq_ml_puzzle_wait_for_levers();
n_correct = 0; n_correct = 0;
foreach ( m_lever in a_levers ) foreach ( m_lever in a_levers )
{ {
playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" ); playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
n_correct++; n_correct++;
m_lever playsound( "zmb_sq_maze_correct_spark" ); m_lever playsound( "zmb_sq_maze_correct_spark" );
} }
if ( n_correct == a_levers.size ) if ( n_correct == a_levers.size )
flag_set( "sq_ip_puzzle_complete" ); flag_set( "sq_ip_puzzle_complete" );
level waittill( "zm_buried_maze_changed" ); level waittill( "zm_buried_maze_changed" );
level notify( "sq_ml_reset_levers" ); level notify( "sq_ml_reset_levers" );
wait 1; wait 1;
} }
} }

View File

@ -7,92 +7,92 @@
ows_targets_start() ows_targets_start()
{ {
n_cur_second = 0; n_cur_second = 0;
flag_clear( "sq_ows_target_missed" ); flag_clear( "sq_ows_target_missed" );
level thread sndsidequestowsmusic(); level thread sndsidequestowsmusic();
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" ); a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
level.targets_hit = 0; level.targets_hit = 0;
while ( n_cur_second < 40 ) while ( n_cur_second < 40 )
{ {
a_spawn_spots = ows_targets_get_cur_spots( n_cur_second ); a_spawn_spots = ows_targets_get_cur_spots( n_cur_second );
if ( isdefined( a_spawn_spots ) && a_spawn_spots.size > 0 ) if ( isdefined( a_spawn_spots ) && a_spawn_spots.size > 0 )
ows_targets_spawn( a_spawn_spots ); ows_targets_spawn( a_spawn_spots );
wait 1; wait 1;
n_cur_second++; n_cur_second++;
} }
players = get_players(); players = get_players();
if ( level.targets_hit < ( 20 * players.size ) ) if ( level.targets_hit < ( 20 * players.size ) )
{ {
flag_set( "sq_ows_target_missed" ); flag_set( "sq_ows_target_missed" );
} }
if ( !flag( "sq_ows_target_missed" ) ) if ( !flag( "sq_ows_target_missed" ) )
{ {
flag_set( "sq_ows_success" ); flag_set( "sq_ows_success" );
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) ); playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
} }
else else
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) ); playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
level notify( "sndEndOWSMusic" ); level notify( "sndEndOWSMusic" );
} }
ows_targets_spawn( a_spawn_spots ) ows_targets_spawn( a_spawn_spots )
{ {
i = 0; i = 0;
foreach ( s_spot in a_spawn_spots ) foreach ( s_spot in a_spawn_spots )
{ {
m_target = spawn( "script_model", s_spot.origin ); m_target = spawn( "script_model", s_spot.origin );
m_target.angles = s_spot.angles; m_target.angles = s_spot.angles;
m_target setmodel( "p6_zm_bu_target" ); m_target setmodel( "p6_zm_bu_target" );
m_target ghost(); m_target ghost();
wait_network_frame(); wait_network_frame();
m_target show(); m_target show();
playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" ); playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
m_target playsound( "zmb_sq_target_spawn" ); m_target playsound( "zmb_sq_target_spawn" );
if ( isdefined( s_spot.target ) ) if ( isdefined( s_spot.target ) )
m_target thread ows_target_move( s_spot.target ); m_target thread ows_target_move( s_spot.target );
m_target thread ows_target_think(); m_target thread ows_target_think();
m_target thread sndhit(); m_target thread sndhit();
m_target thread sndtime(); m_target thread sndtime();
i++; i++;
} }
} }
ows_target_think() ows_target_think()
{ {
self setcandamage( 1 ); self setcandamage( 1 );
self thread ows_target_delete_timer(); self thread ows_target_delete_timer();
msg = self waittill_any_return( "ows_target_timeout", "damage" ); msg = self waittill_any_return( "ows_target_timeout", "damage" );
if ( msg == "damage" ) if ( msg == "damage" )
{ {
level.targets_hit++; level.targets_hit++;
} }
if ( isdefined( self.m_linker ) ) if ( isdefined( self.m_linker ) )
{ {
self unlink(); self unlink();
self.m_linker delete(); self.m_linker delete();
} }
self rotatepitch( -90, 0.15, 0.05, 0.05 ); self rotatepitch( -90, 0.15, 0.05, 0.05 );
self waittill( "rotatedone" ); self waittill( "rotatedone" );
self delete(); self delete();
} }
ows_target_delete_timer() ows_target_delete_timer()
{ {
self endon( "death" ); self endon( "death" );
wait 4; wait 4;
self notify( "ows_target_timeout" ); self notify( "ows_target_timeout" );
} }

View File

@ -14,201 +14,201 @@
init() init()
{ {
declare_sidequest_stage( "sq", "tpo", ::init_stage, ::stage_logic, ::exit_stage ); declare_sidequest_stage( "sq", "tpo", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_tpo_time_bomb_in_valid_location" ); flag_init( "sq_tpo_time_bomb_in_valid_location" );
flag_init( "sq_tpo_players_in_position_for_time_warp" ); flag_init( "sq_tpo_players_in_position_for_time_warp" );
flag_init( "sq_tpo_special_round_active" ); flag_init( "sq_tpo_special_round_active" );
flag_init( "sq_tpo_found_item" ); flag_init( "sq_tpo_found_item" );
flag_init( "sq_tpo_generator_powered" ); flag_init( "sq_tpo_generator_powered" );
flag_init( "sq_wisp_saved_with_time_bomb" ); flag_init( "sq_wisp_saved_with_time_bomb" );
flag_init( "sq_tpo_stage_started" ); flag_init( "sq_tpo_stage_started" );
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state ); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state );
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state ); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state );
level._effect["sq_tpo_time_bomb_fx"] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" ); level._effect["sq_tpo_time_bomb_fx"] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" );
level.sq_tpo = spawnstruct(); level.sq_tpo = spawnstruct();
level thread setup_buildable_switch(); level thread setup_buildable_switch();
} }
stage_logic() stage_logic()
{ {
flag_set( "sq_tpo_stage_started" ); flag_set( "sq_tpo_stage_started" );
if ( flag( "sq_is_ric_tower_built" ) ) if ( flag( "sq_is_ric_tower_built" ) )
stage_logic_richtofen(); stage_logic_richtofen();
else else
stage_logic_maxis(); stage_logic_maxis();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
stage_logic_maxis() stage_logic_maxis()
{ {
flag_clear( "sq_wisp_success" ); flag_clear( "sq_wisp_success" );
flag_clear( "sq_wisp_failed" ); flag_clear( "sq_wisp_failed" );
while ( !flag( "sq_wisp_success" ) ) while ( !flag( "sq_wisp_success" ) )
{ {
stage_start( "sq", "ts" ); stage_start( "sq", "ts" );
level waittill( "sq_ts_over" ); level waittill( "sq_ts_over" );
stage_start( "sq", "ctw" ); stage_start( "sq", "ctw" );
level waittill( "sq_ctw_over" ); level waittill( "sq_ctw_over" );
} }
level._cur_stage_name = "tpo"; level._cur_stage_name = "tpo";
} }
stage_logic_richtofen() stage_logic_richtofen()
{ {
level endon( "sq_tpo_generator_powered" ); level endon( "sq_tpo_generator_powered" );
e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" ); e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" );
do do
{ {
flag_clear( "sq_tpo_time_bomb_in_valid_location" ); flag_clear( "sq_tpo_time_bomb_in_valid_location" );
b_time_bomb_in_valid_location = 0; b_time_bomb_in_valid_location = 0;
while (1) while (1)
{ {
if ( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) ) if ( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) )
{ {
b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume ); b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume );
level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location; level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location;
} }
if ( b_time_bomb_in_valid_location ) if ( b_time_bomb_in_valid_location )
{ {
break; break;
} }
level waittill( "new_time_bomb_set" ); level waittill( "new_time_bomb_set" );
} }
playfxontag( level._effect["sq_tpo_time_bomb_fx"], level.time_bomb_save_data.time_bomb_model, "tag_origin" ); playfxontag( level._effect["sq_tpo_time_bomb_fx"], level.time_bomb_save_data.time_bomb_model, "tag_origin" );
flag_set( "sq_tpo_time_bomb_in_valid_location" ); flag_set( "sq_tpo_time_bomb_in_valid_location" );
flag_set( "sq_tpo_players_in_position_for_time_warp" ); flag_set( "sq_tpo_players_in_position_for_time_warp" );
wait_for_time_bomb_to_be_detonated_or_thrown_again(); wait_for_time_bomb_to_be_detonated_or_thrown_again();
level notify( "sq_tpo_stop_checking_time_bomb_volume" ); level notify( "sq_tpo_stop_checking_time_bomb_volume" );
if ( flag( "time_bomb_restore_active" ) ) if ( flag( "time_bomb_restore_active" ) )
{ {
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) ) if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
{ {
special_round_start(); special_round_start();
level notify( "sq_tpo_special_round_started" ); level notify( "sq_tpo_special_round_started" );
start_item_hunt_with_timeout( 60 ); start_item_hunt_with_timeout( 60 );
special_round_end(); special_round_end();
level notify( "sq_tpo_special_round_ended" ); level notify( "sq_tpo_special_round_ended" );
} }
} }
wait_network_frame(); wait_network_frame();
} }
while ( !flag( "sq_tpo_generator_powered" ) ); while ( !flag( "sq_tpo_generator_powered" ) );
} }
special_round_start() special_round_start()
{ {
flag_set( "sq_tpo_special_round_active" ); flag_set( "sq_tpo_special_round_active" );
level.sq_tpo.times_searched = 0; level.sq_tpo.times_searched = 0;
flag_clear( "time_bomb_detonation_enabled" ); flag_clear( "time_bomb_detonation_enabled" );
level thread sndsidequestnoirmusic(); level thread sndsidequestnoirmusic();
make_super_zombies( 1 ); make_super_zombies( 1 );
a_players = get_players(); a_players = get_players();
foreach ( player in a_players ) foreach ( player in a_players )
vsmgr_activate( "visionset", "cheat_bw", player ); vsmgr_activate( "visionset", "cheat_bw", player );
level setclientfield( "sq_tpo_special_round_active", 1 ); level setclientfield( "sq_tpo_special_round_active", 1 );
} }
special_round_end() special_round_end()
{ {
level setclientfield( "sq_tpo_special_round_active", 0 ); level setclientfield( "sq_tpo_special_round_active", 0 );
level notify( "sndEndNoirMusic" ); level notify( "sndEndNoirMusic" );
make_super_zombies( 0 ); make_super_zombies( 0 );
level._time_bomb.functionality_override = 0; level._time_bomb.functionality_override = 0;
flag_set( "time_bomb_detonation_enabled" ); flag_set( "time_bomb_detonation_enabled" );
scripts\zm\replaced\_zm_weap_time_bomb::time_bomb_detonation(); scripts\zm\replaced\_zm_weap_time_bomb::time_bomb_detonation();
a_players = get_players(); a_players = get_players();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
vsmgr_deactivate( "visionset", "cheat_bw", player ); vsmgr_deactivate( "visionset", "cheat_bw", player );
player notify( "search_done" ); player notify( "search_done" );
} }
clean_up_special_round(); clean_up_special_round();
flag_clear( "sq_tpo_special_round_active" ); flag_clear( "sq_tpo_special_round_active" );
} }
promote_to_corpse_model( str_model ) promote_to_corpse_model( str_model )
{ {
v_spawn_point = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined )["position"]; v_spawn_point = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined )["position"];
self.corpse_model = spawn( "script_model", v_spawn_point ); self.corpse_model = spawn( "script_model", v_spawn_point );
self.corpse_model.angles = self.angles; self.corpse_model.angles = self.angles;
self.corpse_model setmodel( str_model ); self.corpse_model setmodel( str_model );
self.corpse_model.targetname = "sq_tpo_corpse_model"; self.corpse_model.targetname = "sq_tpo_corpse_model";
self _pose_corpse(); self _pose_corpse();
self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think ); self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think );
} }
unitrigger_think() unitrigger_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
self thread unitrigger_killed(); self thread unitrigger_killed();
b_trigger_used = 0; b_trigger_used = 0;
while ( !b_trigger_used ) while ( !b_trigger_used )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
b_progress_bar_done = 0; b_progress_bar_done = 0;
n_frame_count = 0; n_frame_count = 0;
while ( player usebuttonpressed() && !b_progress_bar_done ) while ( player usebuttonpressed() && !b_progress_bar_done )
{ {
if ( !isdefined( self.progress_bar ) ) if ( !isdefined( self.progress_bar ) )
{ {
self.progress_bar = player createprimaryprogressbar(); self.progress_bar = player createprimaryprogressbar();
self.progress_bar updatebar( 0.01, 1 / 1.5 ); self.progress_bar updatebar( 0.01, 1 / 1.5 );
self.progress_bar_text = player createprimaryprogressbartext(); self.progress_bar_text = player createprimaryprogressbartext();
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" ); self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
self thread _kill_progress_bar(); self thread _kill_progress_bar();
} }
n_progress_amount = n_frame_count / 30.0; n_progress_amount = n_frame_count / 30.0;
n_frame_count++; n_frame_count++;
if ( n_progress_amount == 1 ) if ( n_progress_amount == 1 )
b_progress_bar_done = 1; b_progress_bar_done = 1;
wait 0.05; wait 0.05;
} }
self _delete_progress_bar(); self _delete_progress_bar();
if ( b_progress_bar_done ) if ( b_progress_bar_done )
b_trigger_used = 1; b_trigger_used = 1;
} }
if ( b_progress_bar_done ) if ( b_progress_bar_done )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( item_is_on_corpse() ) if ( item_is_on_corpse() )
{ {
iprintlnbold( &"ZM_BURIED_SQ_FND" ); iprintlnbold( &"ZM_BURIED_SQ_FND" );
player give_player_sq_tpo_switch(); player give_player_sq_tpo_switch();
} }
else else
iprintlnbold( &"ZM_BURIED_SQ_NFND" ); iprintlnbold( &"ZM_BURIED_SQ_NFND" );
self thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); self thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
} }
} }

View File

@ -6,39 +6,39 @@
ts_sign_damage_watch() ts_sign_damage_watch()
{ {
level endon( "sq_sign_damaged" ); level endon( "sq_sign_damaged" );
self ts_sign_deactivate(); self ts_sign_deactivate();
while ( true ) while ( true )
{ {
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon ); self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) ) if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
{ {
self thread ts_sign_activate(); self thread ts_sign_activate();
ts_sign_check_all_activated( e_attacker, self ); ts_sign_check_all_activated( e_attacker, self );
} }
} }
} }
ts_sign_check_all_activated( e_attacker, m_last_touched ) ts_sign_check_all_activated( e_attacker, m_last_touched )
{ {
a_signs = getentarray( "sq_tunnel_sign", "targetname" ); a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_signs_active = []; a_signs_active = [];
foreach ( m_sign in a_signs ) foreach ( m_sign in a_signs )
{ {
if ( m_sign.ts_sign_activated ) if ( m_sign.ts_sign_activated )
{ {
a_signs_active[a_signs_active.size] = m_sign; a_signs_active[a_signs_active.size] = m_sign;
} }
} }
if ( a_signs_active.size == a_signs.size ) if ( a_signs_active.size == a_signs.size )
{ {
level.m_sq_start_sign = m_last_touched; level.m_sq_start_sign = m_last_touched;
level.e_sq_sign_attacker = e_attacker; level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" ); level notify( "sq_sign_damaged" );
} }
} }

View File

@ -44,45 +44,45 @@
zclassic_preinit() zclassic_preinit()
{ {
setdvar( "player_sliding_velocity_cap", 80.0 ); setdvar( "player_sliding_velocity_cap", 80.0 );
setdvar( "player_sliding_wishspeed", 800.0 ); setdvar( "player_sliding_wishspeed", 800.0 );
registerclientfield( "scriptmover", "clientfield_escape_pod_tell_fx", 5000, 1, "int" ); registerclientfield( "scriptmover", "clientfield_escape_pod_tell_fx", 5000, 1, "int" );
registerclientfield( "scriptmover", "clientfield_escape_pod_sparks_fx", 5000, 1, "int" ); registerclientfield( "scriptmover", "clientfield_escape_pod_sparks_fx", 5000, 1, "int" );
registerclientfield( "scriptmover", "clientfield_escape_pod_impact_fx", 5000, 1, "int" ); registerclientfield( "scriptmover", "clientfield_escape_pod_impact_fx", 5000, 1, "int" );
registerclientfield( "scriptmover", "clientfield_escape_pod_light_fx", 5000, 1, "int" ); registerclientfield( "scriptmover", "clientfield_escape_pod_light_fx", 5000, 1, "int" );
registerclientfield( "actor", "clientfield_whos_who_clone_glow_shader", 5000, 1, "int" ); registerclientfield( "actor", "clientfield_whos_who_clone_glow_shader", 5000, 1, "int" );
registerclientfield( "toplayer", "clientfield_whos_who_audio", 5000, 1, "int" ); registerclientfield( "toplayer", "clientfield_whos_who_audio", 5000, 1, "int" );
registerclientfield( "toplayer", "clientfield_whos_who_filter", 5000, 1, "int" ); registerclientfield( "toplayer", "clientfield_whos_who_filter", 5000, 1, "int" );
level.whos_who_client_setup = 1; level.whos_who_client_setup = 1;
maps\mp\zm_highrise_sq::sq_highrise_clientfield_init(); maps\mp\zm_highrise_sq::sq_highrise_clientfield_init();
precachemodel( "p6_zm_keycard" ); precachemodel( "p6_zm_keycard" );
precachemodel( "p6_zm_hr_keycard" ); precachemodel( "p6_zm_hr_keycard" );
precachemodel( "fxanim_zom_highrise_trample_gen_mod" ); precachemodel( "fxanim_zom_highrise_trample_gen_mod" );
level.banking_map = "zm_transit"; level.banking_map = "zm_transit";
level.weapon_locker_map = "zm_transit"; level.weapon_locker_map = "zm_transit";
level thread maps\mp\zombies\_zm_banking::init(); level thread maps\mp\zombies\_zm_banking::init();
survival_init(); survival_init();
if ( !( isdefined( level.banking_update_enabled ) && level.banking_update_enabled ) ) if ( !( isdefined( level.banking_update_enabled ) && level.banking_update_enabled ) )
return; return;
weapon_locker = spawnstruct(); weapon_locker = spawnstruct();
weapon_locker.origin = ( 2107, 98, 1150 ); weapon_locker.origin = ( 2107, 98, 1150 );
weapon_locker.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); weapon_locker.angles = vectorscale( ( 0, 1, 0 ), 60.0 );
weapon_locker.targetname = "weapons_locker"; weapon_locker.targetname = "weapons_locker";
deposit_spot = spawnstruct(); deposit_spot = spawnstruct();
deposit_spot.origin = ( 2247, 553, 1326 ); deposit_spot.origin = ( 2247, 553, 1326 );
deposit_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); deposit_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 );
deposit_spot.script_length = 16; deposit_spot.script_length = 16;
deposit_spot.targetname = "bank_deposit"; deposit_spot.targetname = "bank_deposit";
withdraw_spot = spawnstruct(); withdraw_spot = spawnstruct();
withdraw_spot.origin = ( 2280, 611, 1330 ); withdraw_spot.origin = ( 2280, 611, 1330 );
withdraw_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); withdraw_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 );
withdraw_spot.script_length = 16; withdraw_spot.script_length = 16;
withdraw_spot.targetname = "bank_withdraw"; withdraw_spot.targetname = "bank_withdraw";
level thread maps\mp\zombies\_zm_weapon_locker::main(); level thread maps\mp\zombies\_zm_weapon_locker::main();
weapon_locker thread maps\mp\zombies\_zm_weapon_locker::triggerweaponslockerwatch(); weapon_locker thread maps\mp\zombies\_zm_weapon_locker::triggerweaponslockerwatch();
level thread maps\mp\zombies\_zm_banking::main(); level thread maps\mp\zombies\_zm_banking::main();
deposit_spot thread maps\mp\zombies\_zm_banking::bank_deposit_unitrigger(); deposit_spot thread maps\mp\zombies\_zm_banking::bank_deposit_unitrigger();
withdraw_spot thread maps\mp\zombies\_zm_banking::bank_withdraw_unitrigger(); withdraw_spot thread maps\mp\zombies\_zm_banking::bank_withdraw_unitrigger();
} }

View File

@ -10,55 +10,55 @@
init_buildables() init_buildables()
{ {
level.buildable_piece_count = 13; level.buildable_piece_count = 13;
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" ); add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" ); add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" ); add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
} }
include_buildables() include_buildables()
{ {
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 ); springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 );
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 ); springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 ); springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 ); springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 );
springpad = spawnstruct(); springpad = spawnstruct();
springpad.name = "springpad_zm"; springpad.name = "springpad_zm";
springpad add_buildable_piece( springpad_door ); springpad add_buildable_piece( springpad_door );
springpad add_buildable_piece( springpad_flag ); springpad add_buildable_piece( springpad_flag );
springpad add_buildable_piece( springpad_motor ); springpad add_buildable_piece( springpad_motor );
springpad add_buildable_piece( springpad_whistle ); springpad add_buildable_piece( springpad_whistle );
springpad.triggerthink = ::springpadbuildable; springpad.triggerthink = ::springpadbuildable;
include_buildable( springpad ); include_buildable( springpad );
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 ); slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 ); slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 ); slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 ); slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
slipgun = spawnstruct(); slipgun = spawnstruct();
slipgun.name = "slipgun_zm"; slipgun.name = "slipgun_zm";
slipgun add_buildable_piece( slipgun_canister ); slipgun add_buildable_piece( slipgun_canister );
slipgun add_buildable_piece( slipgun_cooker ); slipgun add_buildable_piece( slipgun_cooker );
slipgun add_buildable_piece( slipgun_foot ); slipgun add_buildable_piece( slipgun_foot );
slipgun add_buildable_piece( slipgun_throttle ); slipgun add_buildable_piece( slipgun_throttle );
slipgun.onbuyweapon = ::onbuyweapon_slipgun; slipgun.onbuyweapon = ::onbuyweapon_slipgun;
slipgun.triggerthink = ::slipgunbuildable; slipgun.triggerthink = ::slipgunbuildable;
slipgun.onuseplantobject = ::onuseplantobject_slipgun; slipgun.onuseplantobject = ::onuseplantobject_slipgun;
include_buildable( slipgun ); include_buildable( slipgun );
if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 ) if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
{ {
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 ); sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 );
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 32, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 ); sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 32, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 ); sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 );
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 ); sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 );
sqcommon = spawnstruct(); sqcommon = spawnstruct();
sqcommon.name = "sq_common"; sqcommon.name = "sq_common";
sqcommon add_buildable_piece( sq_common_electricbox ); sqcommon add_buildable_piece( sq_common_electricbox );
sqcommon add_buildable_piece( sq_common_meteor ); sqcommon add_buildable_piece( sq_common_meteor );
sqcommon add_buildable_piece( sq_common_scaffolding ); sqcommon add_buildable_piece( sq_common_scaffolding );
sqcommon add_buildable_piece( sq_common_transceiver ); sqcommon add_buildable_piece( sq_common_transceiver );
sqcommon.triggerthink = ::sqcommonbuildable; sqcommon.triggerthink = ::sqcommonbuildable;
include_buildable( sqcommon ); include_buildable( sqcommon );
maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
} }
} }

View File

@ -5,144 +5,144 @@
main() main()
{ {
level.buildables_built["pap"] = 1; level.buildables_built["pap"] = 1;
level.custom_pap_move_in = ::highrise_pap_move_in; level.custom_pap_move_in = ::highrise_pap_move_in;
level.custom_pap_move_out = ::highrise_pap_move_out; level.custom_pap_move_out = ::highrise_pap_move_out;
flag_init( "perks_ready" ); flag_init( "perks_ready" );
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "rooftop" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "rooftop" );
maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
level thread maps\mp\zombies\_zm_buildables::think_buildables(); level thread maps\mp\zombies\_zm_buildables::think_buildables();
level.calc_closest_player_using_paths = 1; level.calc_closest_player_using_paths = 1;
level.validate_enemy_path_length = ::highrise_validate_enemy_path_length; level.validate_enemy_path_length = ::highrise_validate_enemy_path_length;
level thread maps\mp\zm_highrise_classic::init_escape_pod(); level thread maps\mp\zm_highrise_classic::init_escape_pod();
level thread maps\mp\zm_highrise_elevators::init_elevators(); level thread maps\mp\zm_highrise_elevators::init_elevators();
temp_clips = getentarray( "elevator_delete", "targetname" ); temp_clips = getentarray( "elevator_delete", "targetname" );
if ( isdefined( temp_clips ) && temp_clips.size > 0 ) if ( isdefined( temp_clips ) && temp_clips.size > 0 )
array_thread( temp_clips, ::self_delete ); array_thread( temp_clips, ::self_delete );
elev_bldg3b = getent( "elevator_bldg3b_body", "targetname" ); elev_bldg3b = getent( "elevator_bldg3b_body", "targetname" );
elev_bldg3b.origin += vectorscale( ( 0, 0, 1 ), 8.0 ); elev_bldg3b.origin += vectorscale( ( 0, 0, 1 ), 8.0 );
level thread maps\mp\zm_highrise_elevators::init_elevator( "1b" ); level thread maps\mp\zm_highrise_elevators::init_elevator( "1b" );
level thread maps\mp\zm_highrise_elevators::init_elevator( "1c", 1 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "1c", 1 );
level thread maps\mp\zm_highrise_elevators::init_elevator( "1d" ); level thread maps\mp\zm_highrise_elevators::init_elevator( "1d" );
if ( randomint( 100 ) > 50 ) if ( randomint( 100 ) > 50 )
{ {
level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 1, -1264 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 1, -1264 );
level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 2 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 2 );
} }
else else
{ {
level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 2 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 2 );
level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 1, -1264 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 1, -1264 );
} }
level thread maps\mp\zm_highrise_elevators::init_elevator( "3c", 3 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3c", 3 );
level thread maps\mp\zm_highrise_elevators::init_elevator( "3d", 1 ); level thread maps\mp\zm_highrise_elevators::init_elevator( "3d", 1 );
flag_wait( "initial_blackscreen_passed" ); flag_wait( "initial_blackscreen_passed" );
level thread escape_pod(); level thread escape_pod();
level._chugabug_reject_corpse_override_func = ::highrise_chugabud_reject_corpse_func; level._chugabug_reject_corpse_override_func = ::highrise_chugabud_reject_corpse_func;
level._chugabud_reject_node_override_func = ::highrise_chugabud_reject_node_func; level._chugabud_reject_node_override_func = ::highrise_chugabud_reject_node_func;
level._chugabud_post_respawn_override_func = ::highrise_chugabud_post_respawn_func; level._chugabud_post_respawn_override_func = ::highrise_chugabud_post_respawn_func;
level.insta_kill_triggers = getentarray( "instant_death", "targetname" ); level.insta_kill_triggers = getentarray( "instant_death", "targetname" );
array_thread( level.insta_kill_triggers, ::squashed_death_init, 0 ); array_thread( level.insta_kill_triggers, ::squashed_death_init, 0 );
e_trigger = getent( "instant_death_escape_pod_shaft", "targetname" ); e_trigger = getent( "instant_death_escape_pod_shaft", "targetname" );
if ( isdefined( e_trigger ) ) if ( isdefined( e_trigger ) )
{ {
e_trigger thread squashed_death_init( 1 ); e_trigger thread squashed_death_init( 1 );
e_trigger thread escape_pod_death_trigger_think(); e_trigger thread escape_pod_death_trigger_think();
level.insta_kill_triggers[level.insta_kill_triggers.size] = e_trigger; level.insta_kill_triggers[level.insta_kill_triggers.size] = e_trigger;
} }
exploder( 9 ); exploder( 9 );
exploder( 10 ); exploder( 10 );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
level thread maps\mp\zm_highrise_elevators::random_elevator_perks(); level thread maps\mp\zm_highrise_elevators::random_elevator_perks();
level thread maps\mp\zm_highrise_elevators::faller_location_logic(); level thread maps\mp\zm_highrise_elevators::faller_location_logic();
level.custom_faller_entrance_logic = scripts\zm\replaced\zm_highrise_elevators::watch_for_elevator_during_faller_spawn; level.custom_faller_entrance_logic = scripts\zm\replaced\zm_highrise_elevators::watch_for_elevator_during_faller_spawn;
setdvar( "zombiemode_path_minz_bias", 13 ); setdvar( "zombiemode_path_minz_bias", 13 );
level.check_valid_poi = ::check_valid_poi; level.check_valid_poi = ::check_valid_poi;
level thread maps\mp\zm_highrise_elevators::shouldsuppressgibs(); level thread maps\mp\zm_highrise_elevators::shouldsuppressgibs();
} }
highrise_pap_move_in( trigger, origin_offset, angles_offset ) highrise_pap_move_in( trigger, origin_offset, angles_offset )
{ {
level endon( "Pack_A_Punch_off" ); level endon( "Pack_A_Punch_off" );
trigger endon( "pap_player_disconnected" ); trigger endon( "pap_player_disconnected" );
pap_machine = trigger.perk_machine; pap_machine = trigger.perk_machine;
worldgun = trigger.worldgun; worldgun = trigger.worldgun;
worldgundw = trigger.worldgun.worldgundw; worldgundw = trigger.worldgun.worldgundw;
offset = origin_offset[2]; offset = origin_offset[2];
trigger.worldgun rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); trigger.worldgun rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 );
offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 );
if ( isdefined( trigger.worldgun.worldgundw ) ) if ( isdefined( trigger.worldgun.worldgundw ) )
worldgundw rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); worldgundw rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 );
elapsed_time_counter = 0; elapsed_time_counter = 0;
while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 ) while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 )
{ {
worldgun.origin = ( worldgun.origin[0], worldgun.origin[1], pap_machine.origin[2] + offset ); worldgun.origin = ( worldgun.origin[0], worldgun.origin[1], pap_machine.origin[2] + offset );
if ( isdefined( worldgundw ) ) if ( isdefined( worldgundw ) )
worldgundw.origin = ( worldgundw.origin[0], worldgundw.origin[1], pap_machine.origin[2] + offset + offsetdw[2] ); worldgundw.origin = ( worldgundw.origin[0], worldgundw.origin[1], pap_machine.origin[2] + offset + offsetdw[2] );
elapsed_time_counter += 0.05; elapsed_time_counter += 0.05;
wait 0.05; wait 0.05;
} }
move_vec = ( self.origin + origin_offset - worldgun.origin ) * 0.05 / 0.5; move_vec = ( self.origin + origin_offset - worldgun.origin ) * 0.05 / 0.5;
elapsed_time_counter = 0; elapsed_time_counter = 0;
while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 ) while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 )
{ {
worldgun.origin = ( worldgun.origin[0] + move_vec[0], worldgun.origin[1] + move_vec[1], pap_machine.origin[2] + offset ); worldgun.origin = ( worldgun.origin[0] + move_vec[0], worldgun.origin[1] + move_vec[1], pap_machine.origin[2] + offset );
if ( isdefined( worldgundw ) ) if ( isdefined( worldgundw ) )
worldgundw.origin = ( worldgundw.origin[0] + move_vec[0], worldgundw.origin[1] + move_vec[1], pap_machine.origin[2] + offset + offsetdw[2] ); worldgundw.origin = ( worldgundw.origin[0] + move_vec[0], worldgundw.origin[1] + move_vec[1], pap_machine.origin[2] + offset + offsetdw[2] );
elapsed_time_counter += 0.05; elapsed_time_counter += 0.05;
wait 0.05; wait 0.05;
} }
} }
squashed_death_init( kill_if_falling ) squashed_death_init( kill_if_falling )
{ {
while ( true ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( !( isdefined( who.insta_killed ) && who.insta_killed ) ) if ( !( isdefined( who.insta_killed ) && who.insta_killed ) )
{ {
if ( isplayer( who ) ) if ( isplayer( who ) )
{ {
who thread elevator_black_screen_squash_check(); who thread elevator_black_screen_squash_check();
who thread insta_kill_player( 1, kill_if_falling ); who thread insta_kill_player( 1, kill_if_falling );
} }
else if ( isai( who ) ) else if ( isai( who ) )
{ {
if ( is_true( who.in_the_ceiling ) || !is_true( who.completed_emerging_into_playable_area ) ) if ( is_true( who.in_the_ceiling ) || !is_true( who.completed_emerging_into_playable_area ) )
continue; continue;
playfx( level._effect["zomb_gib"], who.origin ); playfx( level._effect["zomb_gib"], who.origin );
if ( isdefined( who.is_leaper ) && who.is_leaper ) if ( isdefined( who.is_leaper ) && who.is_leaper )
{ {
who maps\mp\zombies\_zm_ai_leaper::leaper_cleanup(); who maps\mp\zombies\_zm_ai_leaper::leaper_cleanup();
who dodamage( who.health + 100, who.origin ); who dodamage( who.health + 100, who.origin );
} }
else else
{ {
who delete(); who delete();
} }
who.insta_killed = 1; who.insta_killed = 1;
} }
} }
} }
} }
insta_kill_player( perks_can_respawn_player, kill_if_falling ) insta_kill_player( perks_can_respawn_player, kill_if_falling )
@ -244,183 +244,183 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
escape_pod() escape_pod()
{ {
escape_pod = getent( "elevator_bldg1a_body", "targetname" ); escape_pod = getent( "elevator_bldg1a_body", "targetname" );
escape_pod setmovingplatformenabled( 1 ); escape_pod setmovingplatformenabled( 1 );
escape_pod escapeelevatoruseanimtree(); escape_pod escapeelevatoruseanimtree();
escape_pod_trigger = getent( "escape_pod_trigger", "targetname" ); escape_pod_trigger = getent( "escape_pod_trigger", "targetname" );
escape_pod.is_elevator = 1; escape_pod.is_elevator = 1;
escape_pod._post_host_migration_thread = maps\mp\zm_highrise_elevators::escape_pod_host_migration_respawn_check; escape_pod._post_host_migration_thread = maps\mp\zm_highrise_elevators::escape_pod_host_migration_respawn_check;
if ( !isdefined( escape_pod_trigger ) ) if ( !isdefined( escape_pod_trigger ) )
return; return;
escape_pod.home_origin = escape_pod.origin; escape_pod.home_origin = escape_pod.origin;
escape_pod.link_start = []; escape_pod.link_start = [];
escape_pod.link_end = []; escape_pod.link_end = [];
escape_pod_blocker_door = getent( "elevator_bldg1a_body_door_clip", "targetname" ); escape_pod_blocker_door = getent( "elevator_bldg1a_body_door_clip", "targetname" );
number_of_times_used = 0; number_of_times_used = 0;
used_at_least_once = 0; used_at_least_once = 0;
escape_pod setanim( level.escape_elevator_1_state ); escape_pod setanim( level.escape_elevator_1_state );
escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 );
escape_pod thread escape_pod_state_run(); escape_pod thread escape_pod_state_run();
escape_pod_trigger thread escape_pod_walk_on_off( escape_pod ); escape_pod_trigger thread escape_pod_walk_on_off( escape_pod );
while ( true ) while ( true )
{ {
escape_pod setanim( level.escape_elevator_idle ); escape_pod setanim( level.escape_elevator_idle );
if ( isdefined( escape_pod_blocker_door ) ) if ( isdefined( escape_pod_blocker_door ) )
{ {
escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); escape_pod escape_pod_linknodes( "escape_pod_door_l_node" );
escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); escape_pod escape_pod_linknodes( "escape_pod_door_r_node" );
escape_pod_blocker_door unlink(); escape_pod_blocker_door unlink();
escape_pod_blocker_door thread trigger_off(); escape_pod_blocker_door thread trigger_off();
} }
if ( is_true( used_at_least_once ) ) if ( is_true( used_at_least_once ) )
wait 3; wait 3;
level thread escape_pod_wait_for_players_inside( escape_pod, escape_pod_trigger ); level thread escape_pod_wait_for_players_inside( escape_pod, escape_pod_trigger );
flag_set( "escape_pod_needs_reset" ); flag_set( "escape_pod_needs_reset" );
level waittill( "reset_escape_pod" ); level waittill( "reset_escape_pod" );
flag_clear( "escape_pod_needs_reset" ); flag_clear( "escape_pod_needs_reset" );
level notify( "escape_pod_falling_begin" ); level notify( "escape_pod_falling_begin" );
players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside();
foreach ( player in players_in_escape_pod ) foreach ( player in players_in_escape_pod )
{ {
player.riding_escape_pod = 1; player.riding_escape_pod = 1;
player allowjump( 0 ); player allowjump( 0 );
} }
if ( isdefined( escape_pod_blocker_door ) ) if ( isdefined( escape_pod_blocker_door ) )
{ {
escape_pod_blocker_door trigger_on(); escape_pod_blocker_door trigger_on();
escape_pod_blocker_door linkto( escape_pod ); escape_pod_blocker_door linkto( escape_pod );
escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" );
escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" );
} }
escape_pod.escape_pod_state = 5; escape_pod.escape_pod_state = 5;
escape_pod thread escape_pod_shake(); escape_pod thread escape_pod_shake();
wait( getanimlength( level.escape_elevator_5_state ) - 0.05 ); wait( getanimlength( level.escape_elevator_5_state ) - 0.05 );
escape_pod setanim( level.escape_elevator_drop ); escape_pod setanim( level.escape_elevator_drop );
escape_pod setclientfield( "clientfield_escape_pod_light_fx", 0 ); escape_pod setclientfield( "clientfield_escape_pod_light_fx", 0 );
escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 1 ); escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 1 );
escape_pod thread escape_pod_move(); escape_pod thread escape_pod_move();
escape_pod thread escape_pod_rotate(); escape_pod thread escape_pod_rotate();
escape_pod waittill( "reached_destination" ); escape_pod waittill( "reached_destination" );
number_of_times_used++; number_of_times_used++;
escape_pod thread impact_animate(); escape_pod thread impact_animate();
if ( number_of_times_used == 1 ) if ( number_of_times_used == 1 )
{ {
level.escape_elevator_idle = level.escape_elevator_damage_idle_state; level.escape_elevator_idle = level.escape_elevator_damage_idle_state;
level.escape_elevator_drop = level.escape_elevator_damage_drop_state; level.escape_elevator_drop = level.escape_elevator_damage_drop_state;
level.escape_elevator_impact = level.escape_elevator_damage_impact_state; level.escape_elevator_impact = level.escape_elevator_damage_impact_state;
} }
level notify( "escape_pod_falling_complete" ); level notify( "escape_pod_falling_complete" );
if ( isdefined( escape_pod_blocker_door ) ) if ( isdefined( escape_pod_blocker_door ) )
{ {
escape_pod_blocker_door unlink(); escape_pod_blocker_door unlink();
escape_pod_blocker_door trigger_off(); escape_pod_blocker_door trigger_off();
escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); escape_pod escape_pod_linknodes( "escape_pod_door_l_node" );
escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); escape_pod escape_pod_linknodes( "escape_pod_door_r_node" );
} }
escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 0 ); escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 0 );
escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 1 ); escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 1 );
escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 );
flag_set( "escape_pod_needs_reset" ); flag_set( "escape_pod_needs_reset" );
level waittill( "reset_escape_pod" ); level waittill( "reset_escape_pod" );
flag_clear( "escape_pod_needs_reset" ); flag_clear( "escape_pod_needs_reset" );
escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 0 ); escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 0 );
escape_pod thread escape_pod_breaking_rotate(); escape_pod thread escape_pod_breaking_rotate();
wait 6; wait 6;
escape_pod playsound( "zmb_elevator_run_start" ); escape_pod playsound( "zmb_elevator_run_start" );
escape_pod playloopsound( "zmb_elevator_run", 1 ); escape_pod playloopsound( "zmb_elevator_run", 1 );
level notify( "escape_pod_moving_back_to_start_position" ); level notify( "escape_pod_moving_back_to_start_position" );
if ( isdefined( escape_pod_blocker_door ) ) if ( isdefined( escape_pod_blocker_door ) )
{ {
escape_pod_blocker_door trigger_on(); escape_pod_blocker_door trigger_on();
escape_pod_blocker_door linkto( escape_pod ); escape_pod_blocker_door linkto( escape_pod );
escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" );
escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" );
} }
escape_pod moveto( escape_pod.home_origin, 3, 0.1, 0.1 ); escape_pod moveto( escape_pod.home_origin, 3, 0.1, 0.1 );
escape_pod waittill( "movedone" ); escape_pod waittill( "movedone" );
escape_pod stoploopsound( 1 ); escape_pod stoploopsound( 1 );
escape_pod playsound( "zmb_esc_pod_crash" ); escape_pod playsound( "zmb_esc_pod_crash" );
escape_pod playsound( "zmb_elevator_run_stop" ); escape_pod playsound( "zmb_elevator_run_stop" );
escape_pod playsound( "zmb_elevator_ding" ); escape_pod playsound( "zmb_elevator_ding" );
escape_pod thread reset_impact_animate(); escape_pod thread reset_impact_animate();
used_at_least_once = 1; used_at_least_once = 1;
} }
} }
escape_pod_wait_for_players_inside( escape_pod, escape_pod_trigger ) escape_pod_wait_for_players_inside( escape_pod, escape_pod_trigger )
{ {
level endon( "reset_escape_pod" ); level endon( "reset_escape_pod" );
while ( true ) while ( true )
{ {
players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside();
if ( players_in_escape_pod.size == 0 ) if ( players_in_escape_pod.size == 0 )
{ {
escape_pod.escape_pod_state = 1; escape_pod.escape_pod_state = 1;
wait 0.05; wait 0.05;
continue; continue;
} }
players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside();
if ( players_in_escape_pod.size > 0 ) if ( players_in_escape_pod.size > 0 )
{ {
escape_pod.escape_pod_state = 2; escape_pod.escape_pod_state = 2;
escape_pod thread escape_pod_tell_fx(); escape_pod thread escape_pod_tell_fx();
wait 3; wait 3;
players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside();
if ( players_in_escape_pod.size > 0 ) if ( players_in_escape_pod.size > 0 )
break; break;
} }
wait 0.05; wait 0.05;
} }
level notify( "reset_escape_pod" ); level notify( "reset_escape_pod" );
} }
escape_pod_get_all_alive_players_inside() escape_pod_get_all_alive_players_inside()
{ {
players = get_players(); players = get_players();
players_in_escape_pod = []; players_in_escape_pod = [];
foreach ( player in players ) foreach ( player in players )
{ {
if ( player.sessionstate != "spectator" ) if ( player.sessionstate != "spectator" )
{ {
if ( player istouching( self ) ) if ( player istouching( self ) )
players_in_escape_pod[players_in_escape_pod.size] = player; players_in_escape_pod[players_in_escape_pod.size] = player;
} }
} }
return players_in_escape_pod; return players_in_escape_pod;
} }

View File

@ -7,135 +7,135 @@
zombie_tracking_init() zombie_tracking_init()
{ {
level.zombie_respawned_health = []; level.zombie_respawned_health = [];
if ( !isdefined( level.zombie_tracking_dist ) ) if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1000; level.zombie_tracking_dist = 1000;
if ( !isdefined( level.zombie_tracking_high ) ) if ( !isdefined( level.zombie_tracking_high ) )
level.zombie_tracking_high = 500; level.zombie_tracking_high = 500;
if ( !isdefined( level.zombie_tracking_wait ) ) if ( !isdefined( level.zombie_tracking_wait ) )
level.zombie_tracking_wait = 10; level.zombie_tracking_wait = 10;
building_trigs = getentarray( "zombie_fell_off", "targetname" ); building_trigs = getentarray( "zombie_fell_off", "targetname" );
if ( isdefined( building_trigs ) ) if ( isdefined( building_trigs ) )
array_thread( building_trigs, ::zombies_off_building ); array_thread( building_trigs, ::zombies_off_building );
level.distance_tracker_aggressive_distance = 500; level.distance_tracker_aggressive_distance = 500;
level.distance_tracker_aggressive_height = 200; level.distance_tracker_aggressive_height = 200;
while ( true ) while ( true )
{ {
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{ {
wait( level.zombie_tracking_wait ); wait( level.zombie_tracking_wait );
continue; continue;
} }
else else
{ {
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
} }
} }
wait( level.zombie_tracking_wait ); wait( level.zombie_tracking_wait );
} }
} }
zombies_off_building() zombies_off_building()
{ {
while ( true ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) ) if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
{ {
if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) ) if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
{ {
level.zombie_total++; level.zombie_total++;
if ( who.health < level.zombie_health ) if ( who.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health; level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
} }
who maps\mp\zombies\_zm_spawner::reset_attack_spot(); who maps\mp\zombies\_zm_spawner::reset_attack_spot();
who notify( "zombie_delete" ); who notify( "zombie_delete" );
who dodamage( who.health + 666, who.origin, who ); who dodamage( who.health + 666, who.origin, who );
recalc_zombie_array(); recalc_zombie_array();
} }
wait 0.1; wait 0.1;
} }
} }
delete_zombie_noone_looking( how_close, how_high ) delete_zombie_noone_looking( how_close, how_high )
{ {
self endon( "death" ); self endon( "death" );
if ( !isdefined( how_close ) ) if ( !isdefined( how_close ) )
how_close = 1000; how_close = 1000;
if ( !isdefined( how_high ) ) if ( !isdefined( how_high ) )
how_high = 500; how_high = 500;
distance_squared_check = how_close * how_close; distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high; height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3; too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) ) if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0; self.inview = 0;
self.player_close = 0; self.player_close = 0;
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( players[i].sessionstate == "spectator" ) if ( players[i].sessionstate == "spectator" )
continue; continue;
if ( isdefined( level.only_track_targeted_players ) ) if ( isdefined( level.only_track_targeted_players ) )
{ {
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
continue; continue;
} }
can_be_seen = self player_can_see_me( players[i] ); can_be_seen = self player_can_see_me( players[i] );
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
self.inview++; self.inview++;
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high ) if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
self.player_close++; self.player_close++;
} }
wait 0.1; wait 0.1;
if ( self.inview == 0 && self.player_close == 0 ) if ( self.inview == 0 && self.player_close == 0 )
{ {
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return; return;
if ( isdefined( self.electrified ) && self.electrified == 1 ) if ( isdefined( self.electrified ) && self.electrified == 1 )
return; return;
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{ {
level.zombie_total++; level.zombie_total++;
if ( self.health < level.zombie_health ) if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
} }
self maps\mp\zombies\_zm_spawner::reset_attack_spot(); self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" ); self notify( "zombie_delete" );
self delete(); self delete();
recalc_zombie_array(); recalc_zombie_array();
} }
} }

Some files were not shown because too many files have changed in this diff Show More