From 34c8ea393cafee30f0b1e225eee804fed7cbc189 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Fri, 17 Mar 2023 14:14:06 -0700 Subject: [PATCH] MOTD: change adjacent zones Containment on Docks: add Docks Gates zone --- README.md | 2 + scripts/zm/locs/zm_prison_loc_docks.gsc | 12 +- scripts/zm/zgrief/zgrief_reimagined.gsc | 7 +- scripts/zm/zm_prison/zm_prison_reimagined.gsc | 241 +++++++++++++++++- 4 files changed, 248 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index a87d4ee0..b7c79867 100644 --- a/README.md +++ b/README.md @@ -466,6 +466,8 @@ * Plane parts must be all acquired to craft * Plane fuel automatically picked up * Players no longer respawn in the Acid Trap +* Zombies spawn in the Docks zone when in the Docks Gates zone +* Zombies spawn in the Docks Gates zone when in the Docks zone #### Cell Block * Added Smoke Grenades to the Mystery Box diff --git a/scripts/zm/locs/zm_prison_loc_docks.gsc b/scripts/zm/locs/zm_prison_loc_docks.gsc index 31aa2423..003dcf35 100644 --- a/scripts/zm/locs/zm_prison_loc_docks.gsc +++ b/scripts/zm/locs/zm_prison_loc_docks.gsc @@ -59,7 +59,7 @@ precache() main() { - enable_zones(); + flag_set("gondola_roof_to_dock"); init_wallbuys(); init_barriers(); set_box_weapons(); @@ -90,16 +90,6 @@ set_box_weapons() } } -enable_zones() -{ - zone_init( "zone_dock" ); - enable_zone( "zone_dock" ); - zone_init( "zone_dock_gondola" ); - enable_zone( "zone_dock_gondola" ); - zone_init( "zone_dock_puzzle" ); - flag_set( "gondola_roof_to_dock" ); -} - init_wallbuys() { scripts\zm\replaced\utility::wallbuy( "m14_zm", "m14", "weapon_upgrade", ( 305, 6376, 319 ), ( 0, -80, 0 ) ); diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index 32ae6b07..73a6b296 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -2666,6 +2666,11 @@ containment_think() player.obj_waypoint.z += 200; } + if(level.script == "zm_prison" && zone_name == "zone_dock_puzzle") + { + player.obj_waypoint.z -= 250; + } + player.obj_waypoint setWaypoint(1, "waypoint_revive"); } } @@ -2918,7 +2923,7 @@ containment_get_zones() { if (getDvar("ui_zm_mapstartlocation_fake") == "docks") { - containment_zones = array("zone_dock_gondola", "zone_studio", "zone_citadel_basement_building"); + containment_zones = array("zone_dock_gondola", "zone_dock_puzzle", "zone_studio", "zone_citadel_basement_building"); } else { diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 69a239f0..359e6fb1 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -30,6 +30,7 @@ main() replaceFunc(maps\mp\zombies\_zm_riotshield_prison::trackriotshield, scripts\zm\replaced\_zm_riotshield_prison::trackriotshield); replaceFunc(maps\mp\zombies\_zm_weap_riotshield_prison::init, scripts\zm\replaced\_zm_weap_riotshield_prison::init); replaceFunc(maps\mp\zombies\_zm_weap_riotshield_prison::player_damage_shield, scripts\zm\replaced\_zm_weap_riotshield_prison::player_damage_shield); + replaceFunc(maps\mp\zombies\_zm_zonemgr::manage_zones, ::manage_zones); } init() @@ -42,8 +43,6 @@ init() level.zombie_powerups["meat_stink"].model_name = "t6_wpn_zmb_severedhead_world"; - add_adjacent_zone( "zone_dock", "zone_dock_puzzle", "always_on" ); // "docks_inner_gate_unlocked" - remove_acid_trap_player_spawn(); tower_trap_changes(); @@ -614,4 +613,242 @@ craftabletrigger_update_prompt( player ) } return can_use; +} + +manage_zones( initial_zone ) +{ + level.zone_manager_init_func = ::working_zone_init; + + deactivate_initial_barrier_goals(); + zone_choke = 0; + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + for ( i = 0; i < spawn_points.size; i++ ) + { + assert( isdefined( spawn_points[i].script_noteworthy ), "player_respawn_point: You must specify a script noteworthy with the zone name" ); + spawn_points[i].locked = 1; + } + + if ( isdefined( level.zone_manager_init_func ) ) + [[ level.zone_manager_init_func ]](); + + if ( isarray( initial_zone ) ) + { + for ( i = 0; i < initial_zone.size; i++ ) + { + zone_init( initial_zone[i] ); + enable_zone( initial_zone[i] ); + } + } + else + { + zone_init( initial_zone ); + enable_zone( initial_zone ); + } + + setup_zone_flag_waits(); + zkeys = getarraykeys( level.zones ); + level.zone_keys = zkeys; + level.newzones = []; + + for ( z = 0; z < zkeys.size; z++ ) + level.newzones[zkeys[z]] = spawnstruct(); + + oldzone = undefined; + flag_set( "zones_initialized" ); + flag_wait( "begin_spawning" ); + + while ( getdvarint( _hash_10873CCA ) == 0 || getdvarint( _hash_762F1309 ) != 0 ) + { + for ( z = 0; z < zkeys.size; z++ ) + { + level.newzones[zkeys[z]].is_active = 0; + level.newzones[zkeys[z]].is_occupied = 0; + } + + a_zone_is_active = 0; + a_zone_is_spawning_allowed = 0; + level.zone_scanning_active = 1; + + for ( z = 0; z < zkeys.size; z++ ) + { + zone = level.zones[zkeys[z]]; + newzone = level.newzones[zkeys[z]]; + + if ( !zone.is_enabled ) + continue; + + if ( isdefined( level.zone_occupied_func ) ) + newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[z] ); + else + newzone.is_occupied = player_in_zone( zkeys[z] ); + + if ( newzone.is_occupied ) + { + newzone.is_active = 1; + a_zone_is_active = 1; + + if ( zone.is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + + if ( !isdefined( oldzone ) || oldzone != newzone ) + { + level notify( "newzoneActive", zkeys[z] ); + oldzone = newzone; + } + + azkeys = getarraykeys( zone.adjacent_zones ); + + for ( az = 0; az < zone.adjacent_zones.size; az++ ) + { + if ( zone.adjacent_zones[azkeys[az]].is_connected && level.zones[azkeys[az]].is_enabled ) + { + level.newzones[azkeys[az]].is_active = 1; + + if ( level.zones[azkeys[az]].is_spawning_allowed ) + a_zone_is_spawning_allowed = 1; + } + } + } + + zone_choke++; + + if ( zone_choke >= 3 ) + { + zone_choke = 0; + wait 0.05; + } + } + + level.zone_scanning_active = 0; + + for ( z = 0; z < zkeys.size; z++ ) + { + level.zones[zkeys[z]].is_active = level.newzones[zkeys[z]].is_active; + level.zones[zkeys[z]].is_occupied = level.newzones[zkeys[z]].is_occupied; + } + + if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) + { + if ( isarray( initial_zone ) ) + { + level.zones[initial_zone[0]].is_active = 1; + level.zones[initial_zone[0]].is_occupied = 1; + level.zones[initial_zone[0]].is_spawning_allowed = 1; + } + else + { + level.zones[initial_zone].is_active = 1; + level.zones[initial_zone].is_occupied = 1; + level.zones[initial_zone].is_spawning_allowed = 1; + } + } + + [[ level.create_spawner_list_func ]]( zkeys ); + + level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + wait 1; + } +} + +working_zone_init() +{ + flag_init( "always_on" ); + flag_set( "always_on" ); + + if ( is_gametype_active( "zgrief" ) ) + { + a_s_spawner = getstructarray( "zone_cellblock_west_roof_spawner", "targetname" ); + + foreach ( spawner in a_s_spawner ) + { + if ( isdefined( spawner.script_parameters ) && spawner.script_parameters == "zclassic_prison" ) + spawner structdelete(); + } + } + + if ( is_classic() ) + add_adjacent_zone( "zone_library", "zone_start", "always_on" ); + else + { + add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); + add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_west" ); + add_adjacent_zone( "zone_cellblock_east", "zone_start", "activate_cellblock_east" ); + add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_east" ); + } + + add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_barber", "activate_cellblock_barber" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_barber" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_infirmary", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_start", "zone_cellblock_east", "activate_cellblock_east" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_east", "activate_cellblock_east_west" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_east_west" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_warden_office", "activate_warden_office" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_citadel_warden", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_cellblock_east", "zone_cafeteria", "activate_cafeteria" ); + add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_cafeteria" ); + add_adjacent_zone( "zone_cellblock_east", "cellblock_shower", "activate_shower_room" ); + add_adjacent_zone( "cellblock_shower", "zone_citadel_shower", "activate_shower_citadel" ); + add_adjacent_zone( "zone_citadel_shower", "zone_citadel", "activate_shower_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_shower_citadel" ); + add_adjacent_zone( "zone_cafeteria", "zone_infirmary", "activate_infirmary" ); + add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_infirmary" ); + add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_infirmary" ); + add_adjacent_zone( "zone_roof", "zone_roof_infirmary", "activate_roof" ); + add_adjacent_zone( "zone_roof_infirmary", "zone_infirmary_roof", "activate_roof" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_stairs", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel_stairs", "zone_citadel_basement", "activate_citadel_basement" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_citadel_basement" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement_building", "zone_studio", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement", "zone_studio", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement_building", "zone_dock_gondola", "activate_basement_gondola" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_gondola" ); + add_adjacent_zone( "zone_dock", "zone_dock_gondola", "activate_basement_gondola" ); + add_adjacent_zone( "zone_studio", "zone_dock", "activate_dock_sally" ); + add_adjacent_zone( "zone_dock_gondola", "zone_dock", "activate_dock_sally" ); + add_adjacent_zone( "zone_dock", "zone_dock_gondola", "gondola_roof_to_dock" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "gondola_dock_to_roof" ); + + if ( is_classic() ) + add_adjacent_zone( "zone_gondola_ride", "zone_gondola_ride", "gondola_ride_zone_enabled" ); + + if ( is_classic() ) + { + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" ); + } + // else if ( is_gametype_active( "zgrief" ) ) + // { + // playable_area = getentarray( "player_volume", "script_noteworthy" ); + + // foreach ( area in playable_area ) + // { + // if ( isdefined( area.script_parameters ) && area.script_parameters == "classic_only" ) + // area delete(); + // } + // } + + add_adjacent_zone( "zone_golden_gate_bridge", "zone_golden_gate_bridge", "activate_player_zone_bridge" ); + + add_adjacent_zone( "zone_dock", "zone_dock_puzzle", "docks_inner_gate_unlocked" ); } \ No newline at end of file