#include maps/mp/zombies/_zm_zonemgr; #include maps/mp/gametypes_zm/_zm_gametype; #include maps/mp/zombies/_zm_utility; #include maps/mp/_utility; #include common_scripts/utility; init() //checked matches cerberus output { flag_init( "zones_initialized" ); level.zones = []; level.zone_flags = []; level.zone_scanning_active = 0; if ( !isDefined( level.create_spawner_list_func ) ) { level.create_spawner_list_func = ::create_spawner_list; } } zone_is_enabled( zone_name ) //checked matches cerberus output { if ( !isDefined( level.zones ) || !isDefined( level.zones[ zone_name ] ) || !level.zones[ zone_name ].is_enabled ) { return 0; } return 1; } get_player_zone() //checked changed to match cerberus output { player_zone = undefined; keys = getarraykeys( level.zones ); for ( i = 0; i < keys.size; i++ ) { if ( self entity_in_zone( keys[ i ] ) ) { player_zone = keys[ i ]; break; } } return player_zone; } get_zone_from_position( v_pos, ignore_enabled_check ) //checked changed to match cerberus output { zone = undefined; scr_org = spawn( "script_origin", v_pos ); keys = getarraykeys( level.zones ); for ( i = 0; i < keys.size; i++ ) { if ( scr_org entity_in_zone( keys[ i ], ignore_enabled_check ) ) { zone = keys[ i ]; break; } } scr_org delete(); return zone; } get_zone_magic_boxes( zone_name ) //checked matches cerberus output { if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) { return undefined; } zone = level.zones[ zone_name ]; return zone.magic_boxes; } get_zone_zbarriers( zone_name ) //checked matches cerberus output { if ( isDefined( zone_name ) && !zone_is_enabled( zone_name ) ) { return undefined; } zone = level.zones[ zone_name ]; return zone.zbarriers; } get_players_in_zone( zone_name, return_players ) //checked changed to match cerberus output { if(!zone_is_enabled(zone_name)) { return 0; } zone = level.zones[zone_name]; num_in_zone = 0; players_in_zone = []; players = get_players(); for ( i = 0; i < zone.volumes.size; i++ ) { for ( j = 0; j < players.size; j++ ) { if ( players[ j ] istouching( zone.volumes[ i ] ) ) { num_in_zone++; players_in_zone[ players_in_zone.size ] = players[ j ]; } } } if ( isdefined( return_players ) ) { return players_in_zone; } return num_in_zone; } player_in_zone( zone_name ) //checked changed to match cerberus output { if ( !zone_is_enabled( zone_name ) ) { return 0; } zone = level.zones[ zone_name ]; for ( i = 0; i < zone.volumes.size; i++ ) { players = get_players(); for ( j = 0; j < players.size; j++ ) { if ( players[ j ] istouching( zone.volumes[ i ]) && !players[ j ] .sessionstate == "spectator" ) { return 1; } } } return 0; } entity_in_zone( zone_name, ignore_enabled_check ) //checked changed to match cerberus output { if ( !zone_is_enabled( zone_name ) && isdefined( ignore_enabled_check ) && !ignore_enabled_check ) { return 0; } zone = level.zones[zone_name]; for ( i = 0; i < zone.volumes.size; i++ ) { if ( self istouching( zone.volumes[ i ] ) ) { return 1; } } return 0; } deactivate_initial_barrier_goals() //checked changed to match cerberus output { special_goals = getstructarray( "exterior_goal", "targetname" ); for ( i = 0; i < special_goals.size; i++ ) { if ( isdefined( special_goals[ i ].script_noteworthy ) ) { special_goals[ i ].is_active = 0; special_goals[ i ] trigger_off(); } } } zone_init( zone_name ) //checked changed to match cerberus output { if ( isDefined( level.zones[ zone_name ] ) ) { return; } level.zones[ zone_name ] = spawnstruct(); zone = level.zones[ zone_name ]; zone.is_enabled = 0; zone.is_occupied = 0; zone.is_active = 0; zone.adjacent_zones = []; zone.is_spawning_allowed = 0; spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); for( i = 0; i < spawn_points.size; i++ ) { if ( spawn_points[ i ].script_noteworthy == zone_name ) { spawn_points[ i ].locked = 0; } } zone.volumes = []; volumes = getentarray( zone_name, "targetname" ); i = 0; for ( i = 0; i < volumes.size; i++ ) { if ( volumes[ i ].classname == "info_volume" ) { zone.volumes[ zone.volumes.size ] = volumes[ i ]; } } if ( isdefined( zone.volumes[ 0 ].target ) ) { spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); zone.spawn_locations = []; zone.dog_locations = []; zone.screecher_locations = []; zone.avogadro_locations = []; zone.inert_locations = []; zone.quad_locations = []; zone.leaper_locations = []; zone.brutus_locations = []; zone.mechz_locations = []; zone.astro_locations = []; zone.napalm_locations = []; zone.zbarriers = []; zone.magic_boxes = []; barricades = getstructarray( "exterior_goal", "targetname" ); box_locs = getstructarray( "treasure_chest_use", "targetname" ); for (i = 0; i < spots.size; i++) { spots[ i ].zone_name = zone_name; if ( isDefined( spots[ i ].is_blocked ) && !spots[ i ].is_blocked || !isDefined( spots[ i ].is_blocked ) ) //spots[ i ].isblocked is not defined { spots[ i ].is_enabled = 1; } else { spots[ i ].is_enabled = 0; } tokens = strtok( spots[ i ].script_noteworthy, " " ); foreach ( token in tokens ) { if ( token == "dog_location" ) { zone.dog_locations[ zone.dog_locations.size ] = spots[ i ]; } else if ( token == "screecher_location" ) { zone.screecher_locations[ zone.screecher_locations.size ] = spots[ i ]; } else if ( token == "avogadro_location" ) { zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ i] ; } else if ( token == "inert_location" ) { zone.inert_locations[ zone.inert_locations.size ] = spots[ i ]; } else if ( token == "quad_location" ) { zone.quad_locations[ zone.quad_locations.size ] = spots[ i ]; } else if ( token == "leaper_location" ) { zone.leaper_locations[ zone.leaper_locations.size ] = spots[ i ]; } else if ( token == "brutus_location" ) { zone.brutus_locations[ zone.brutus_locations.size ] = spots[ i ]; } else if ( token == "mechz_location" ) { zone.mechz_locations[ zone.mechz_locations.size ] = spots[ i ]; } else if ( token == "astro_location" ) { zone.astro_locations[ zone.astro_locations.size ] = spots[ i ]; } else if ( token == "napalm_location" ) { zone.napalm_locations[ zone.napalm_locations.size ] = spots[ i ]; } else { zone.spawn_locations[ zone.spawn_locations.size ] = spots[ i ]; } } if ( isdefined( spots[ i ].script_string ) ) { barricade_id = spots[ i ].script_string; for ( k = 0; k < barricades.size; k++ ) { if ( isdefined( barricades[ k ].script_string ) && barricades[ k ].script_string == barricade_id ) { nodes = getnodearray( barricades[ k ].target, "targetname" ); for ( j = 0; j < nodes.size; j++ ) { if ( isdefined( nodes[ j ].type ) && nodes[ j ].type == "Begin" ) { spots[ i ].target = nodes[ j ].targetname; } } } } } } for ( i = 0; i < barricades.size; i++ ) { targets = getentarray( barricades[ i ].target, "targetname" ); for ( j = 0; j < targets.size; j++ ) { if ( targets[ j ] iszbarrier() && isdefined( targets[ j ].script_string ) && targets[ j ].script_string == zone_name ) { zone.zbarriers[ zone.zbarriers.size ] = targets[ j ]; } } } for ( i = 0; i < box_locs.size; i++ ) { chest_ent = getent( box_locs[ i ].script_noteworthy + "_zbarrier", "script_noteworthy" ); if ( chest_ent entity_in_zone( zone_name, 1 ) ) { zone.magic_boxes[zone.magic_boxes.size] = box_locs[ i ]; } } } } //unused code /* reinit_zone_spawners() //checked changed to match cerberus output { zkeys = getarraykeys( level.zones ); for( i = 0; i < level.zones.size; i++ ) { zone = level.zones[ zkeys[ i ] ]; if ( isdefined( zone.volumes[ 0 ].target ) ) { spots = getstructarray( zone.volumes[ 0 ].target, "targetname" ); zone.spawn_locations = []; zone.dog_locations = []; zone.screecher_locations = []; zone.avogadro_locations = []; zone.quad_locations = []; zone.leaper_locations = []; zone.brutus_locations = []; zone.mechz_locations = []; zone.astro_locations = []; zone.napalm_locations = []; for ( j = 0; j < spots.size; j++ ) { spots[ j ].zone_name = zkeys[ j ]; if ( isdefined( spots[ j ].is_blocked ) && !spots[ j ].is_blocked ) { spots[ j ].is_enabled = 1; } else { spots[ j ].is_enabled = 0; } tokens = strtok( spots[ j ].script_noteworthy, " " ); foreach ( token in tokens ) { if ( token == "dog_location" ) { zone.dog_locations[ zone.dog_locations.size ] = spots[ j ]; } else if ( token == "screecher_location" ) { zone.screecher_locations[ zone.screecher_locations.size ] = spots[ j ]; } else if ( token == "avogadro_location" ) { zone.avogadro_locations[ zone.avogadro_locations.size ] = spots[ j ]; } else if ( token == "quad_location" ) { zone.quad_locations[ zone.quad_locations.size ] = spots[ j ]; } else if ( token == "leaper_location" ) { zone.leaper_locations[ zone.leaper_locations.size ] = spots[ j ]; } else if ( token == "brutus_location" ) { zone.brutus_locations[ zone.brutus_locations.size ] = spots[ j ]; } else if ( token == "mechz_location" ) { zone.mechz_locations[ zone.mechz_locations.size ] = spots[ j ]; } else if ( token == "astro_location" ) { zone.astro_locations[ zone.astro_locations.size ] = spots[ j ]; } else if ( token == "napalm_location" ) { zone.napalm_locations[ zone.napalm_locations.size ] = spots[ j ]; } else { zone.spawn_locations[ zone.spawn_locations.size ] = spots[ j ]; } } } } } } */ enable_zone( zone_name ) //checked changed to match cerberus output { if ( level.zones[ zone_name ].is_enabled ) { return; } level.zones[ zone_name ].is_enabled = 1; level.zones[zone_name].is_spawning_allowed = 1; level notify( zone_name ); spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); for( i = 0; i < spawn_points.size; i++ ) { if ( spawn_points[ i ].script_noteworthy == zone_name ) { spawn_points[ i ].locked = 0; } } entry_points = getstructarray( zone_name + "_barriers", "script_noteworthy" ); for( i = 0; i < entry_points.size; i++ ) { entry_points[ i ].is_active = 1; entry_points[ i ] trigger_on(); } } make_zone_adjacent( main_zone_name, adj_zone_name, flag_name ) //checked matches cerberus output { main_zone = level.zones[ main_zone_name ]; if ( !isDefined( main_zone.adjacent_zones[ adj_zone_name ] ) ) { main_zone.adjacent_zones[ adj_zone_name ] = spawnstruct(); adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; adj_zone.is_connected = 0; adj_zone.flags_do_or_check = 0; if ( isarray( flag_name ) ) { adj_zone.flags = flag_name; } else { adj_zone.flags[ 0 ] = flag_name; } } else { adj_zone = main_zone.adjacent_zones[ adj_zone_name ]; size = adj_zone.flags.size; adj_zone.flags_do_or_check = 1; adj_zone.flags[ size ] = flag_name; } } add_zone_flags( wait_flag, add_flags ) //checked changed to match cerberus output { if ( !isarray( add_flags ) ) { temp = add_flags; add_flags = []; add_flags[ 0 ] = temp; } keys = getarraykeys( level.zone_flags ); i = 0; for ( i = 0; i < keys.size; i++ ) { if(keys[ i ] == wait_flag) { level.zone_flags[ keys[ i ] ] = arraycombine( level.zone_flags[ keys[ i ] ], add_flags, 1, 0 ); return; } } level.zone_flags[ wait_flag ] = add_flags; } add_adjacent_zone( zone_name_a, zone_name_b, flag_name, one_way ) //checked matches cerberus output { if ( !isDefined( one_way ) ) { one_way = 0; } if ( !isDefined( level.flag[ flag_name ] ) ) { flag_init( flag_name ); } zone_init( zone_name_a ); zone_init( zone_name_b ); make_zone_adjacent( zone_name_a, zone_name_b, flag_name ); if ( !one_way ) { make_zone_adjacent( zone_name_b, zone_name_a, flag_name ); } } setup_zone_flag_waits() //checked changed to match cerberus output { flags = []; zkeys = getarraykeys( level.zones ); for ( z = 0; z < level.zones.size; z++ ) { zone = level.zones[ zkeys[ z ] ]; azkeys = getarraykeys( zone.adjacent_zones ); for ( az = 0; az < zone.adjacent_zones.size; az++ ) { azone = zone.adjacent_zones[ azkeys[ az ] ]; for ( f = 0; f < azone.flags.size; f++ ) { flags = add_to_array( flags, azone.flags[ f ], 0); } } } for ( i = 0; i < flags.size; i++ ) { level thread zone_flag_wait( flags[ i ] ); } } zone_flag_wait( flag_name ) { if ( !isdefined( level.flag[ flag_name ] ) ) { flag_init( flag_name ); } flag_wait( flag_name ); flags_set = 0; for ( z = 0; z < level.zones.size; z++ ) { zkeys = getarraykeys( level.zones ); zone = level.zones[ zkeys[ z ] ]; for ( az = 0; az < zone.adjacent_zones.size; az++ ) { azkeys = getarraykeys( zone.adjacent_zones ); azone = zone.adjacent_zones[ azkeys[ az ] ]; if ( !azone.is_connected ) { if ( azone.flags_do_or_check ) { flags_set = 0; for ( f = 0; f < azone.flags.size; f++ ) { if ( flag( azone.flags[ f ] ) ) { flags_set = 1; break; } } //break; } flags_set = 1; for ( f = 0; f < azone.flags.size; f++ ) { if ( !flag(azone.flags[ f ] ) ) { flags_set = 0; } } if ( flags_set ) { enable_zone( zkeys[ z ] ); //essential priority over manage_zones //was disabled azone.is_connected = 1; if ( !level.zones[ azkeys[ az ] ].is_enabled ) { enable_zone( azkeys[ az ] ); //essential priority over manage_zones //was disabled } if ( flag( "door_can_close" ) ) { azone thread door_close_disconnect( flag_name ); } } } } } keys = getarraykeys( level.zone_flags ); for ( i = 0; i < keys.size; i++ ) { if ( keys[ i ] == flag_name ) { check_flag = level.zone_flags[ keys[ i ] ]; for ( k = 0; k < check_flag.size; k++ ) { flag_set( check_flag[ k ] ); } //break; } } } door_close_disconnect( flag_name ) //checked matches cerberus output { while ( flag( flag_name ) ) { wait 1; } self.is_connected = 0; level thread zone_flag_wait( flag_name ); } connect_zones( zone_name_a, zone_name_b, one_way ) //checked matches cerberus output { if ( !isDefined( one_way ) ) { one_way = 0; } zone_init( zone_name_a ); zone_init( zone_name_b ); enable_zone( zone_name_a ); enable_zone( zone_name_b ); if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) ) { level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct(); level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1; } if ( !one_way ) { if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) ) { level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct(); level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1; } } } manage_zones( initial_zone ) //checked changed to match cerberus output { 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++ ) { 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 ] ); //was disabled } } else { zone_init( initial_zone ); enable_zone( initial_zone ); //was disabled } 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( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) { players = get_players(); zone = players[ 0 ] get_current_zone(); players[ 0 ] iprintln( zone ); 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; z = 0; while ( z < zkeys.size ) { zone = level.zones[ zkeys[ z ] ]; newzone = level.newzones[ zkeys[ z ] ]; if( !zone.is_enabled ) { z++; 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; } z++; } 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; } } debug_show_spawn_locations() //checked dev call deleted { } //unused code /* old_manage_zones( initial_zone ) //checked changed to match cerberus output { deactivate_initial_barrier_goals(); spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); for ( i = 0; i < spawn_points.size; i++ ) { 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; flag_set( "zones_initialized" ); flag_wait( "begin_spawning" ); while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) { for(z = 0; z < zkeys.size; z++) { level.zones[ zkeys[ z ] ].is_active = 0; level.zones[ zkeys[ z ] ].is_occupied = 0; } a_zone_is_active = 0; a_zone_is_spawning_allowed = 0; for ( z = 0; z < zkeys.size; z++ ) { zone = level.zones[ zkeys[ z ] ]; if ( !zone.is_enabled ) { continue; } if ( isdefined( level.zone_occupied_func ) ) { zone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); } else { zone.is_occupied = player_in_zone( zkeys[ z ] ); } if ( zone.is_occupied ) { zone.is_active = 1; a_zone_is_active = 1; if ( zone.is_spawning_allowed ) { a_zone_is_spawning_allowed = 1; } 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.zones[ azkeys[ az ] ].is_active = 1; if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) { a_zone_is_spawning_allowed = 1; } } } } } 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; } } */ create_spawner_list( zkeys ) //checked changed to match cerberus output { level.zombie_spawn_locations = []; level.inert_locations = []; level.enemy_dog_locations = []; level.zombie_screecher_locations = []; level.zombie_avogadro_locations = []; level.quad_locations = []; level.zombie_leaper_locations = []; level.zombie_astro_locations = []; level.zombie_brutus_locations = []; level.zombie_mechz_locations = []; level.zombie_napalm_locations = []; for ( z = 0; z < zkeys.size; z++ ) { zone = level.zones[ zkeys[ z ] ]; if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) { for ( i = 0; i < zone.spawn_locations.size; i++ ) { if(zone.spawn_locations[ i ].is_enabled) { level.zombie_spawn_locations[level.zombie_spawn_locations.size] = zone.spawn_locations[i]; } } for(x = 0; x < zone.inert_locations.size; x++) { if(zone.inert_locations[x].is_enabled) { level.inert_locations[level.inert_locations.size] = zone.inert_locations[x]; } } for(x = 0; x < zone.dog_locations.size; x++) { if(zone.dog_locations[x].is_enabled) { level.enemy_dog_locations[level.enemy_dog_locations.size] = zone.dog_locations[x]; } } for(x = 0; x < zone.screecher_locations.size; x++) { if(zone.screecher_locations[x].is_enabled) { level.zombie_screecher_locations[level.zombie_screecher_locations.size] = zone.screecher_locations[x]; } } for(x = 0; x < zone.avogadro_locations.size; x++) { if(zone.avogadro_locations[x].is_enabled) { level.zombie_avogadro_locations[level.zombie_avogadro_locations.size] = zone.avogadro_locations[x]; } } for(x = 0; x < zone.quad_locations.size; x++) { if(zone.quad_locations[x].is_enabled) { level.quad_locations[level.quad_locations.size] = zone.quad_locations[x]; } } for(x = 0; x < zone.leaper_locations.size; x++) { if(zone.leaper_locations[x].is_enabled) { level.zombie_leaper_locations[level.zombie_leaper_locations.size] = zone.leaper_locations[x]; } } for(x = 0; x < zone.astro_locations.size; x++) { if(zone.astro_locations[x].is_enabled) { level.zombie_astro_locations[level.zombie_astro_locations.size] = zone.astro_locations[x]; } } for(x = 0; x < zone.napalm_locations.size; x++) { if(zone.napalm_locations[x].is_enabled) { level.zombie_napalm_locations[level.zombie_napalm_locations.size] = zone.napalm_locations[x]; } } for(x = 0; x < zone.brutus_locations.size; x++) { if(zone.brutus_locations[x].is_enabled) { level.zombie_brutus_locations[level.zombie_brutus_locations.size] = zone.brutus_locations[x]; } } for(x = 0; x < zone.mechz_locations.size; x++) { if(zone.mechz_locations[x].is_enabled) { level.zombie_mechz_locations[level.zombie_mechz_locations.size] = zone.mechz_locations[x]; } } } } } get_active_zone_names() //checked changed to match cerberus output { ret_list = []; if ( !isDefined( level.zone_keys ) ) { return ret_list; } while ( level.zone_scanning_active ) { wait 0.05; } for ( i = 0; i < level.zone_keys.size; i++ ) { if ( level.zones[ level.zone_keys[ i ] ].is_active ) { ret_list[ ret_list.size ] = level.zone_keys[ i ]; } } return ret_list; } //commented out /* _init_debug_zones() //checked changed to match cerberus output { current_y = 30; current_x = 20; xloc = []; xloc[ 0 ] = 50; xloc[ 1 ] = 60; xloc[ 2 ] = 100; xloc[ 3 ] = 130; xloc[ 4 ] = 170; zkeys = getarraykeys( level.zones ); for(i = 0; i < zkeys.size; i++) { zonename = zkeys[i]; zone = level.zones[zonename]; zone.debug_hud = []; for(j = 0; j < 5; j++) { zone.debug_hud[j] = newdebughudelem(); if(!j) { zone.debug_hud[j].alignx = "right"; } else { zone.debug_hud[j].alignx = "left"; } zone.debug_hud[j].x = xloc[j]; zone.debug_hud[j].y = current_y; } current_y = current_y + 10; zone.debug_hud[0] settext(zonename); } } _destroy_debug_zones() //checked changed to match cerberus output { zkeys = getarraykeys(level.zones); for(i = 0; i < zkeys.size; i++) { zonename = zkeys[i]; zone = level.zones[zonename]; for(j = 0; j < 5; j++) { zone.debug_hud[j] destroy(); zone.debug_hud[j] = undefined; } } } _debug_zones() //checked changed to match cerberus output { enabled = 0; if ( getDvar( "zombiemode_debug_zones" ) == "" ) { setdvar( "zombiemode_debug_zones", "0" ); } while(1) { wasenabled = enabled; enabled = GetDvarInt(hash_10e35bc4); if(enabled && !wasenabled) { _init_debug_zones(); } else if(!enabled && wasenabled) { _destroy_debug_zones(); } if(enabled) { zkeys = getarraykeys(level.zones); for(i = 0; i < zkeys.size; i++) { zonename = zkeys[i]; zone = level.zones[zonename]; text = zonename; zone.debug_hud[0] settext(text); if(zone.is_enabled) { text = text + " Enabled"; zone.debug_hud[1] settext("Enabled"); } else { zone.debug_hud[1] settext(""); } if(zone.is_active) { text = text + " Active"; zone.debug_hud[2] settext("Active"); } else { zone.debug_hud[2] settext(""); } if(zone.is_occupied) { text = text + " Occupied"; zone.debug_hud[3] settext("Occupied"); } else { zone.debug_hud[3] settext(""); } if(zone.is_spawning_allowed) { text = text + " SpawningAllowed"; zone.debug_hud[4] settext("SpawningAllowed"); } else { zone.debug_hud[4] settext(""); } } } wait(0.1); } } */ is_player_in_zone( zone_name ) //checked changed to match cerberus output { zone = level.zones[ zone_name ]; for ( i = 0; i < zone.volumes.size; i++ ) { if ( self istouching( level.zones[ zone_name ].volumes[ i ] ) && self.sessionstate != "spectator") { return 1; } } return 0; }