// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool main() { thread main_thread(); } main_thread() { common_scripts\utility::flag_init( "teleport_setup_complete" ); level.teleport_minimaps = []; level.teleport_allowed = 1; level.teleport_to_offset = 1; level.teleport_to_nodes = 1; level.teleport_include_killsteaks = 1; level.teleport_gamemode_func = undefined; level.teleport_pre_funcs = []; level.teleport_post_funcs = []; level.teleport_a10_inboundlist = []; level.teleport_a10_outboundlist = []; level.teleport_nodes_in_zone = []; level.teleport_pathnode_zones = []; level.teleport_onstartgametype = level.onstartgametype; level.onstartgametype = ::teleport_onstartgametype; level.teleportgetactivenodesfunc = ::teleport_get_active_nodes; level.teleportgetactivepathnodezonesfunc = ::teleport_get_active_pathnode_zones; } teleport_init() { level.teleport_spawn_info = []; var_0 = common_scripts\utility::getstructarray( "teleport_world_origin", "targetname" ); if ( !var_0.size ) return; level.teleport_zones = []; foreach ( var_2 in var_0 ) { if ( !isdefined( var_2.script_noteworthy ) ) var_2.script_noteworthy = "zone_" + level.teleport_zones.size; var_2.name = var_2.script_noteworthy; teleport_parse_zone_targets( var_2 ); level.teleport_nodes_in_zone[var_2.name] = []; level.teleport_pathnode_zones[var_2.name] = []; level.teleport_zones[var_2.script_noteworthy] = var_2; } var_4 = getallnodes(); foreach ( var_6 in var_4 ) { var_2 = teleport_closest_zone( var_6.origin ); level.teleport_nodes_in_zone[var_2.name][level.teleport_nodes_in_zone[var_2.name].size] = var_6; } for ( var_8 = 0; var_8 < getzonecount(); var_8++ ) { var_2 = teleport_closest_zone( getzoneorigin( var_8 ) ); level.teleport_pathnode_zones[var_2.name][level.teleport_pathnode_zones[var_2.name].size] = var_8; } if ( !isdefined( level.teleport_zone_current ) ) { if ( isdefined( level.teleport_zones["start"] ) ) teleport_set_current_zone( "start" ); else { foreach ( var_11, var_10 in level.teleport_zones ) { teleport_set_current_zone( var_11 ); break; } } } level.dynamicspawns = ::teleport_filter_spawn_point; } teleport_onstartgametype() { teleport_init(); var_0 = undefined; var_1 = undefined; switch ( level.gametype ) { case "dom": var_1 = ::teleport_onstartgamedom; break; case "siege": var_1 = ::teleport_onstartgamesiege; break; case "conf": var_1 = ::teleport_onstartgameconf; break; case "sd": var_0 = ::teleport_pre_onstartgamesd; break; case "sr": var_0 = ::teleport_pre_onstartgamesr; break; case "blitz": var_0 = ::teleport_pre_onstartgameblitz; break; case "sotf_ffa": case "sotf": var_1 = ::teleport_onstartgamesotf; break; case "grind": var_1 = ::teleport_onstartgamegrind; break; case "horde": var_0 = ::teleport_onstartgamehorde; break; case "dm": case "war": case "infect": break; default: break; } if ( isdefined( var_0 ) ) level [[ var_0 ]](); level [[ level.teleport_onstartgametype ]](); if ( isdefined( var_1 ) ) level [[ var_1 ]](); common_scripts\utility::flag_set( "teleport_setup_complete" ); } teleport_pre_onstartgameblitz() { foreach ( var_1 in level.teleport_zones ) var_1.blitz_all_triggers = []; var_3 = getentarray( "axis_portal", "targetname" ); foreach ( var_5 in var_3 ) { var_6 = teleport_closest_zone( var_5.origin ); if ( isdefined( var_6 ) ) { var_6.blitz_axis_trigger_origin = var_5.origin; var_6.blitz_all_triggers[var_6.blitz_all_triggers.size] = var_5; teleport_change_targetname( var_5 ); } } var_8 = getentarray( "allies_portal", "targetname" ); foreach ( var_5 in var_8 ) { var_6 = teleport_closest_zone( var_5.origin ); if ( isdefined( var_6 ) ) { var_6.blitz_allies_trigger_origin = var_5.origin; var_6.blitz_all_triggers[var_6.blitz_all_triggers.size] = var_5; teleport_change_targetname( var_5 ); } } var_11 = level.teleport_zones[level.teleport_zone_current]; teleport_restore_targetname( var_11.blitz_all_triggers ); level.teleport_gamemode_func = ::teleport_onteleportblitz; } teleport_onteleportblitz( var_0 ) { var_1 = level.teleport_zones[var_0]; var_2 = level.teleport_zones[level.teleport_zone_current]; var_3 = "axis"; var_4 = "allies"; if ( game["switchedsides"] ) { var_3 = "allies"; var_4 = "axis"; } var_5 = var_1.blitz_axis_trigger_origin - var_2.blitz_axis_trigger_origin; level.portallist[var_3].origin = level.portallist[var_3].origin + var_5; level.portallist[var_3].trigger.origin = level.portallist[var_3].trigger.origin + var_5; objective_position( level.portallist[var_3].ownerteamid, var_1.blitz_axis_trigger_origin + ( 0, 0, 72 ) ); objective_position( level.portallist[var_3].enemyteamid, var_1.blitz_axis_trigger_origin + ( 0, 0, 72 ) ); var_6 = var_1.blitz_allies_trigger_origin - var_2.blitz_allies_trigger_origin; level.portallist[var_4].origin = level.portallist[var_4].origin + var_6; level.portallist[var_4].trigger.origin = level.portallist[var_4].trigger.origin + var_6; objective_position( level.portallist[var_4].ownerteamid, var_1.blitz_allies_trigger_origin + ( 0, 0, 72 ) ); objective_position( level.portallist[var_4].enemyteamid, var_1.blitz_allies_trigger_origin + ( 0, 0, 72 ) ); maps\mp\gametypes\blitz::assignteamspawns(); foreach ( var_8 in level.players ) var_8 maps\mp\gametypes\blitz::showteamportalfx(); } teleport_pre_onstartgamesr() { teleport_pre_onstartgamesd_and_sr(); } teleport_pre_onstartgamesd() { teleport_pre_onstartgamesd_and_sr(); } teleport_pre_onstartgamesd_and_sr() { foreach ( var_1 in level.teleport_zones ) { var_1.sd_triggers = []; var_1.sd_bombs = []; var_1.sd_bombzones = []; } var_3 = getentarray( "sd_bomb_pickup_trig", "targetname" ); foreach ( var_5 in var_3 ) { var_6 = teleport_closest_zone( var_5.origin ); if ( isdefined( var_6 ) ) { var_6.sd_triggers[var_6.sd_triggers.size] = var_5; teleport_change_targetname( var_5, var_6.name ); } } var_8 = getentarray( "sd_bomb", "targetname" ); foreach ( var_10 in var_8 ) { var_6 = teleport_closest_zone( var_10.origin ); if ( isdefined( var_6 ) ) { var_6.sd_bombs[var_6.sd_bombs.size] = var_10; teleport_change_targetname( var_10, var_6.name ); } } var_12 = getentarray( "bombzone", "targetname" ); foreach ( var_14 in var_12 ) { var_6 = teleport_closest_zone( var_14.origin ); if ( isdefined( var_6 ) ) { var_6.sd_bombzones[var_6.sd_bombzones.size] = var_14; teleport_change_targetname( var_14, var_6.name ); } } var_16 = []; if ( maps\mp\_utility::isanymlgmatch() ) var_16[0] = "start"; else { foreach ( var_1 in level.teleport_zones ) { if ( var_1.sd_triggers.size && var_1.sd_triggers.size && var_1.sd_triggers.size ) var_16[var_16.size] = var_1.name; } } teleport_gamemode_disable_teleport( var_16 ); var_19 = level.teleport_zones[level.teleport_zone_current]; teleport_restore_targetname( var_19.sd_triggers ); teleport_restore_targetname( var_19.sd_bombs ); teleport_restore_targetname( var_19.sd_bombzones ); } teleport_onstartgamesotf() { foreach ( var_1 in level.teleport_zones ) var_1.sotf_chest_spawnpoints = []; var_3 = common_scripts\utility::getstructarray( "sotf_chest_spawnpoint", "targetname" ); foreach ( var_5 in var_3 ) { var_6 = teleport_closest_zone( var_5.origin ); if ( isdefined( var_6 ) ) var_6.sotf_chest_spawnpoints[var_6.sotf_chest_spawnpoints.size] = var_5; } var_8 = []; foreach ( var_1 in level.teleport_zones ) { if ( var_1.sotf_chest_spawnpoints.size ) var_8[var_8.size] = var_1.name; } level.teleport_gamemode_func = ::teleport_onteleportsotf; teleport_gamemode_disable_teleport( var_8 ); } teleport_onteleportsotf( var_0 ) { var_1 = level.teleport_zones[var_0]; level.struct_class_names["targetname"]["sotf_chest_spawnpoint"] = var_1.sotf_chest_spawnpoints; } teleport_onstartgamegrind() { foreach ( var_1 in level.teleport_zones ) var_1.grindzones = []; foreach ( var_4 in level.zonelist ) { var_5 = teleport_closest_zone( var_4.origin ); if ( isdefined( var_5 ) ) { var_4.teleport_zone = var_5.name; var_5.grindzones[var_5.grindzones.size] = var_4; } } level.teleport_gamemode_func = ::teleport_onteleportgrind; teleport_onteleportgrind( level.teleport_zone_current ); } teleport_onteleportgrind( var_0 ) { var_1 = level.teleport_zones[var_0]; foreach ( var_3 in var_1.grindzones ) { if ( var_0 != level.teleport_zone_current ) { objective_state( var_3.objid_axis, "active" ); objective_state( var_3.objid_allies, "active" ); if ( isdefined( var_3.grind_headicon_allies ) && isdefined( var_3.grind_headicon_allies.old_alpha ) ) var_3.grind_headicon_allies.alpha = var_3.grind_headicon_allies.old_alpha; if ( isdefined( var_3.grind_headicon_axis ) && isdefined( var_3.grind_headicon_axis.old_alpha ) ) var_3.grind_headicon_axis.alpha = var_3.grind_headicon_axis.old_alpha; } } foreach ( var_9, var_6 in level.teleport_zones ) { foreach ( var_3 in var_6.grindzones ) { if ( var_9 != var_0 ) thread teleport_hidegrindzone( var_3 ); } } foreach ( var_11 in level.dogtags ) { var_11.visual hide(); var_11.trigger hide(); var_11 maps\mp\gametypes\_gameobjects::allowuse( "none" ); var_11 notify( "reset" ); var_11.lastusedtime = 0; } } teleport_hidegrindzone( var_0 ) { objective_state( var_0.objid_axis, "invisible" ); objective_state( var_0.objid_allies, "invisible" ); while ( !isdefined( var_0.grind_headicon_allies ) || !isdefined( var_0.grind_headicon_axis ) ) common_scripts\utility::waitframe(); var_0.grind_headicon_allies.old_alpha = var_0.grind_headicon_allies.alpha; var_0.grind_headicon_allies.alpha = 0; var_0.grind_headicon_axis.old_alpha = var_0.grind_headicon_axis.alpha; var_0.grind_headicon_axis.alpha = 0; } teleport_onstartgamehorde() { foreach ( var_1 in level.teleport_zones ) var_1.horde_drops = []; var_3 = common_scripts\utility::getstructarray( "horde_drop", "targetname" ); foreach ( var_5 in var_3 ) { var_6 = teleport_closest_zone( var_5.origin ); if ( isdefined( var_6 ) ) var_6.horde_drops[var_6.horde_drops.size] = var_5; } var_8 = []; foreach ( var_1 in level.teleport_zones ) { if ( var_1.horde_drops.size ) var_8[var_8.size] = var_1.name; } teleport_gamemode_disable_teleport( var_8 ); var_11 = level.teleport_zones[level.teleport_zone_current]; level.struct_class_names["targetname"]["horde_drop"] = var_11.horde_drops; } teleport_change_targetname( var_0, var_1 ) { if ( !isarray( var_0 ) ) var_0 = [ var_0 ]; if ( !isdefined( var_1 ) ) var_1 = "hide_from_getEnt"; foreach ( var_3 in var_0 ) { var_3.saved_targetname = var_3.targetname; var_3.targetname = var_3.targetname + "_" + var_1; } } teleport_gamemode_disable_teleport( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = getarraykeys( level.teleport_zones ); var_1 = game["teleport_zone_dom"]; if ( !isdefined( var_1 ) ) { var_1 = common_scripts\utility::random( var_0 ); game["teleport_zone_dom"] = var_1; } teleport_to_zone( var_1, 0 ); level.teleport_allowed = 0; } teleport_restore_targetname( var_0 ) { if ( !isarray( var_0 ) ) var_0 = [ var_0 ]; foreach ( var_2 in var_0 ) { if ( isdefined( var_2.saved_targetname ) ) var_2.targetname = var_2.saved_targetname; } } teleport_onstartgamedom() { foreach ( var_1 in level.teleport_zones ) { var_1.flags = []; var_1.domflags = []; } level.all_dom_flags = level.flags; foreach ( var_4 in level.flags ) { var_5 = teleport_closest_zone( var_4.origin ); if ( isdefined( var_5 ) ) { var_4.teleport_zone = var_5.name; var_5.flags[var_5.flags.size] = var_4; var_5.domflags[var_5.domflags.size] = var_4.useobj; } } level.dom_flag_data = []; foreach ( var_1 in level.teleport_zones ) { foreach ( var_9 in var_1.flags ) { var_10 = spawnstruct(); var_10.trigger_origin = var_9.origin; var_10.visual_origin = var_9.useobj.visuals[0].origin; var_10.baseeffectpos = var_9.useobj.baseeffectpos; var_10.baseeffectforward = var_9.useobj.baseeffectforward; var_10.baseeffectright = var_9.useobj.baseeffectright; var_10.obj_origin = var_9.useobj.curorigin; var_10.obj3d_origins = []; foreach ( var_12 in level.teamnamelist ) { var_13 = "objpoint_" + var_12 + "_" + var_9.useobj.entnum; var_14 = maps\mp\gametypes\_objpoints::getobjpointbyname( var_13 ); if ( isdefined( var_14 ) ) var_10.obj3d_origins[var_12] = ( var_14.x, var_14.y, var_14.z ); } level.dom_flag_data[var_1.name][var_9.useobj.label] = var_10; } } level.flags = level.teleport_zones[level.teleport_zone_current].flags; level.domflags = level.teleport_zones[level.teleport_zone_current].domflags; foreach ( var_1 in level.teleport_zones ) { foreach ( var_4 in var_1.flags ) { if ( var_1.name == level.teleport_zone_current ) continue; var_4.useobj.visuals[0] delete(); var_4.useobj maps\mp\gametypes\_gameobjects::deleteuseobject(); } } level.teleport_gamemode_func = ::teleport_onteleportdom; teleport_onteleportdom( level.teleport_zone_current ); level.teleport_dom_finished_initializing = 1; level thread teleport_dom_post_bot_cleanup(); } teleport_dom_post_bot_cleanup() { while ( !isdefined( level.bot_gametype_precaching_done ) ) wait 0.05; foreach ( var_1 in level.teleport_zones ) { foreach ( var_3 in var_1.flags ) { var_4 = level.dom_flag_data[var_1.name][var_3.useobj.label]; var_4.nodes = var_3.nodes; if ( var_1.name != level.teleport_zone_current ) var_3 delete(); } } } teleport_onstartgamesiege() { foreach ( var_1 in level.teleport_zones ) { var_1.flags = []; var_1.domflags = []; } level.all_dom_flags = level.flags; foreach ( var_4 in level.flags ) { var_5 = teleport_closest_zone( var_4.origin ); if ( isdefined( var_5 ) ) { var_4.teleport_zone = var_5.name; var_5.flags[var_5.flags.size] = var_4; var_5.domflags[var_5.domflags.size] = var_4.useobj; } } level.dom_flag_data = []; foreach ( var_1 in level.teleport_zones ) { foreach ( var_9 in var_1.flags ) { var_10 = spawnstruct(); var_10.trigger_origin = var_9.origin; var_10.visual_origin = var_9.useobj.visuals[0].origin; var_10.baseeffectpos = var_9.useobj.baseeffectpos; var_10.baseeffectforward = var_9.useobj.baseeffectforward; var_10.baseeffectright = var_9.useobj.baseeffectright; var_10.obj_origin = var_9.useobj.curorigin; var_10.obj3d_origins = []; foreach ( var_12 in level.teamnamelist ) { var_13 = "objpoint_" + var_12 + "_" + var_9.useobj.entnum; var_14 = maps\mp\gametypes\_objpoints::getobjpointbyname( var_13 ); if ( isdefined( var_14 ) ) var_10.obj3d_origins[var_12] = ( var_14.x, var_14.y, var_14.z ); } level.dom_flag_data[var_1.name][var_9.useobj.label] = var_10; } } var_18 = "start"; level.flags = level.teleport_zones[var_18].flags; level.domflags = level.teleport_zones[var_18].domflags; foreach ( var_1 in level.teleport_zones ) { foreach ( var_4 in var_1.flags ) { if ( var_1.name == var_18 ) continue; var_4.useobj.visuals[0] delete(); var_4.useobj maps\mp\gametypes\_gameobjects::deleteuseobject(); } } game["teleport_zone_dom"] = var_18; teleport_gamemode_disable_teleport(); teleport_onteleportsiege( var_18 ); } teleport_onstartgameconf() { level.teleport_gamemode_func = ::teleport_onteleportconf; } teleport_onteleportdom( var_0 ) { var_1 = level.teleport_zones[level.teleport_zone_current]; var_2 = level.teleport_zones[var_0]; if ( var_0 == level.teleport_zone_current ) return; foreach ( var_4 in level.flags ) { var_5 = level.dom_flag_data[var_0][var_4.useobj.label]; var_4.origin = var_5.trigger_origin; var_4.useobj.visuals[0].origin = var_5.visual_origin; var_4.useobj.baseeffectpos = var_5.baseeffectpos; var_4.useobj.baseeffectforward = var_5.baseeffectforward; var_4.useobj maps\mp\gametypes\dom::resetflagbaseeffect(); var_4.teleport_zone = var_0; var_4.nodes = var_5.nodes; foreach ( var_8, var_7 in var_4.useobj.teamobjids ) objective_position( var_7, var_5.obj_origin ); foreach ( var_10 in level.teamnamelist ) { var_11 = "objpoint_" + var_10 + "_" + var_4.useobj.entnum; var_12 = maps\mp\gametypes\_objpoints::getobjpointbyname( var_11 ); var_12.x = var_5.obj3d_origins[var_10][0]; var_12.y = var_5.obj3d_origins[var_10][1]; var_12.z = var_5.obj3d_origins[var_10][2]; } } } teleport_onteleportsiege( var_0 ) { foreach ( var_2 in level.flags ) { var_3 = level.dom_flag_data[var_0][var_2.useobj.label]; var_2.origin = var_3.trigger_origin; var_2.useobj.visuals[0].origin = var_3.visual_origin; var_2.useobj.baseeffectpos = var_3.baseeffectpos; var_2.useobj.baseeffectforward = var_3.baseeffectforward; var_2.useobj maps\mp\gametypes\dom::resetflagbaseeffect(); var_2.teleport_zone = var_0; var_2.nodes = var_3.nodes; foreach ( var_6, var_5 in var_2.useobj.teamobjids ) objective_position( var_5, var_3.obj_origin ); foreach ( var_8 in level.teamnamelist ) { var_9 = "objpoint_" + var_8 + "_" + var_2.useobj.entnum; var_10 = maps\mp\gametypes\_objpoints::getobjpointbyname( var_9 ); var_10.x = var_3.obj3d_origins[var_8][0]; var_10.y = var_3.obj3d_origins[var_8][1]; var_10.z = var_3.obj3d_origins[var_8][2]; } } } teleport_get_matching_dom_flag( var_0, var_1 ) { foreach ( var_3 in level.teleport_zones[var_1].flags ) { if ( var_0.useobj.label == var_3.useobj.label ) return var_3; } return undefined; } teleport_onteleportconf( var_0 ) { var_1 = get_teleport_delta( var_0 ); foreach ( var_3 in level.dogtags ) { var_4 = var_3.curorigin + var_1; var_5 = teleport_get_safe_node_near( var_4 ); if ( isdefined( var_5 ) ) { var_5.last_teleport_time = gettime(); var_6 = var_5.origin - var_3.curorigin; var_3.curorigin = var_3.curorigin + var_6; var_3.trigger.origin = var_3.trigger.origin + var_6; var_3.visuals[0].origin = var_3.visuals[0].origin + var_6; var_3.visuals[1].origin = var_3.visuals[1].origin + var_6; continue; } var_3 maps\mp\gametypes\conf::resettags(); } } teleport_get_safe_node_near( var_0 ) { var_1 = gettime(); var_2 = getnodesinradiussorted( var_0, 300, 0, 200, "Path" ); for ( var_3 = 0; var_3 < var_2.size; var_3++ ) { var_4 = var_2[var_3]; if ( isdefined( var_4.last_teleport_time ) && var_4.last_teleport_time == var_1 ) continue; return var_4; } return undefined; } teleport_closest_zone( var_0 ) { var_1 = undefined; var_2 = undefined; foreach ( var_4 in level.teleport_zones ) { var_5 = distancesquared( var_4.origin, var_0 ); if ( !isdefined( var_1 ) || var_5 < var_1 ) { var_1 = var_5; var_2 = var_4; } } return var_2; } teleport_origin_use_nodes( var_0 ) { level.teleport_to_nodes = var_0; } teleport_origin_use_offset( var_0 ) { level.teleport_to_offset = var_0; } teleport_include_killstreaks( var_0 ) { level.teleport_include_killsteaks = var_0; } teleport_set_minimap_for_zone( var_0, var_1 ) { level.teleport_minimaps[var_0] = var_1; } teleport_set_pre_func( var_0, var_1 ) { level.teleport_pre_funcs[var_1] = var_0; } teleport_set_post_func( var_0, var_1 ) { level.teleport_post_funcs[var_1] = var_0; } teleport_set_a10_splines_for_zone( var_0, var_1, var_2 ) { level.teleport_a10_inboundlist[var_0] = var_1; level.teleport_a10_outboundlist[var_0] = var_2; } teleport_parse_zone_targets( var_0 ) { if ( isdefined( var_0.origins_pasrsed ) && var_0.origins_pasrsed ) return; var_0.teleport_origins = []; var_0.teleport_origins["none"] = []; var_0.teleport_origins["allies"] = []; var_0.teleport_origins["axis"] = []; var_1 = common_scripts\utility::getstructarray( "teleport_zone_" + var_0.name, "targetname" ); if ( isdefined( var_0.target ) ) { var_2 = common_scripts\utility::getstructarray( var_0.target, "targetname" ); var_1 = common_scripts\utility::array_combine( var_2, var_1 ); } foreach ( var_4 in var_1 ) { if ( !isdefined( var_4.script_noteworthy ) ) var_4.script_noteworthy = "teleport_origin"; switch ( var_4.script_noteworthy ) { case "teleport_origin": var_5 = var_4.origin + ( 0, 0, 1 ); var_6 = var_4.origin - ( 0, 0, 250 ); var_7 = bullettrace( var_5, var_6, 0 ); if ( var_7["fraction"] == 1.0 ) break; var_4.origin = var_7["position"]; case "telport_origin_nodrop": if ( !isdefined( var_4.script_parameters ) ) var_4.script_parameters = "none,axis,allies"; var_8 = strtok( var_4.script_parameters, ", " ); foreach ( var_10 in var_8 ) { if ( !isdefined( var_0.teleport_origins[var_10] ) ) continue; if ( !isdefined( var_4.angles ) ) var_4.angles = ( 0, 0, 0 ); var_11 = var_0.teleport_origins[var_10].size; var_0.teleport_origins[var_10][var_11] = var_4; } break; default: break; } } var_0.origins_pasrsed = 1; } teleport_set_current_zone( var_0 ) { level.teleport_zone_current = var_0; if ( isdefined( level.teleport_minimaps[var_0] ) ) maps\mp\_compass::setupminimap( level.teleport_minimaps[var_0] ); } teleport_filter_spawn_point( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = level.teleport_zone_current; var_2 = []; foreach ( var_4 in var_0 ) { if ( !isdefined( var_4.index ) ) var_4.index = "ent_" + var_4 getentitynumber(); if ( !isdefined( level.teleport_spawn_info[var_4.index] ) ) teleport_init_spawn_info( var_4 ); if ( level.teleport_spawn_info[var_4.index].zone == var_1 ) var_2[var_2.size] = var_4; } return var_2; } teleport_init_spawn_info( var_0 ) { if ( isdefined( level.teleport_spawn_info[var_0.index] ) ) return; var_1 = spawnstruct(); var_1.spawner = var_0; var_2 = undefined; foreach ( var_4 in level.teleport_zones ) { var_5 = distance( var_4.origin, var_0.origin ); if ( !isdefined( var_2 ) || var_5 < var_2 ) { var_2 = var_5; var_1.zone = var_4.name; } } level.teleport_spawn_info[var_0.index] = var_1; } teleport_is_valid_zone( var_0 ) { foreach ( var_3, var_2 in level.teleport_zones ) { if ( var_3 == var_0 ) return 1; } return 0; } teleport_to_zone( var_0, var_1 ) { if ( !level.teleport_allowed ) return; if ( !isdefined( var_1 ) ) var_1 = 1; var_2 = level.teleport_pre_funcs[var_0]; if ( isdefined( var_2 ) && var_1 ) [[ var_2 ]](); var_3 = level.teleport_zones[level.teleport_zone_current]; var_4 = level.teleport_zones[var_0]; if ( !isdefined( var_3 ) || !isdefined( var_4 ) ) return; teleport_to_zone_players( var_0 ); teleport_to_zone_agents( var_0 ); if ( level.teleport_include_killsteaks ) teleport_to_zone_killstreaks( var_0 ); if ( isdefined( level.teleport_gamemode_func ) ) [[ level.teleport_gamemode_func ]]( var_0 ); teleport_set_current_zone( var_0 ); level notify( "teleport_to_zone", var_0 ); var_5 = level.teleport_post_funcs[var_0]; if ( isdefined( var_5 ) && var_1 ) [[ var_5 ]](); if ( isdefined( level.bot_funcs ) && isdefined( level.bot_funcs["post_teleport"] ) ) [[ level.bot_funcs["post_teleport"] ]](); } teleport_to_zone_agents( var_0 ) { var_1 = maps\mp\agents\_agent_utility::getactiveagentsoftype( "all" ); foreach ( var_3 in var_1 ) teleport_to_zone_character( var_0, var_3 ); } teleport_to_zone_players( var_0 ) { foreach ( var_2 in level.players ) teleport_to_zone_character( var_0, var_2 ); } teleport_to_zone_character( var_0, var_1 ) { var_2 = level.teleport_zones[level.teleport_zone_current]; var_3 = level.teleport_zones[var_0]; var_4 = gettime(); if ( isplayer( var_1 ) && ( var_1.sessionstate == "intermission" || var_1.sessionstate == "spectator" ) ) { var_5 = getentarray( "mp_global_intermission", "classname" ); var_5 = teleport_filter_spawn_point( var_5, var_0 ); var_6 = var_5[0]; var_1 dontinterpolate(); var_1 setorigin( var_6.origin ); var_1 setplayerangles( var_6.angles ); } else { var_7 = undefined; var_8 = var_1.angles; if ( isplayer( var_1 ) ) var_8 = var_1 getplayerangles(); foreach ( var_14, var_10 in var_3.teleport_origins ) { var_3.teleport_origins[var_14] = common_scripts\utility::array_randomize( var_10 ); foreach ( var_12 in var_10 ) var_12.claimed = 0; } var_15 = []; if ( level.teambased ) { if ( isdefined( var_1.team ) && isdefined( var_3.teleport_origins[var_1.team] ) ) var_15 = var_3.teleport_origins[var_1.team]; } else var_15 = var_3.teleport_origins["none"]; foreach ( var_12 in var_15 ) { if ( !var_12.claimed ) { var_7 = var_12.origin; var_8 = var_12.angles; var_12.claimed = 1; break; } } var_18 = var_3.origin - var_2.origin; var_19 = var_1.origin + var_18; if ( !isdefined( var_7 ) && level.teleport_to_offset ) { if ( canspawn( var_19 ) && !positionwouldtelefrag( var_19 ) ) var_7 = var_19; } if ( !isdefined( var_7 ) && level.teleport_to_nodes ) { var_20 = getnodesinradiussorted( var_19, 300, 0, 200, "Path" ); for ( var_21 = 0; var_21 < var_20.size; var_21++ ) { var_22 = var_20[var_21]; if ( isdefined( var_22.last_teleport_time ) && var_22.last_teleport_time == var_4 ) continue; var_12 = var_22.origin; if ( canspawn( var_12 ) && !positionwouldtelefrag( var_12 ) ) { var_22.last_teleport_time = var_4; var_7 = var_12; break; } } } if ( !isdefined( var_7 ) ) { var_1 maps\mp\_utility::_suicide(); return; } var_1 cancelmantle(); var_1 dontinterpolate(); var_1 setorigin( var_7 ); var_1 setplayerangles( var_8 ); thread teleport_validate_success( var_1 ); } } teleport_validate_success( var_0 ) { level waittill( "teleport_to_zone" ); if ( isdefined( var_0 ) ) { var_1 = teleport_closest_zone( var_0.origin ); if ( var_1.name != level.teleport_zone_current ) var_0 maps\mp\_utility::_suicide(); } } get_teleport_delta( var_0 ) { var_1 = level.teleport_zones[var_0]; var_2 = level.teleport_zones[level.teleport_zone_current]; var_3 = var_1.origin - var_2.origin; return var_3; } teleport_to_zone_killstreaks( var_0 ) { var_1 = get_teleport_delta( var_0 ); teleport_add_delta( level.ac130, var_1 ); array_levelthread_safe( level.heli_start_nodes, ::teleport_add_delta_targets, var_1 ); array_levelthread_safe( level.heli_loop_nodes, ::teleport_add_delta_targets, var_1 ); array_levelthread_safe( level.heli_loop_nodes2, ::teleport_add_delta_targets, var_1 ); array_levelthread_safe( level.strafe_nodes, ::teleport_add_delta_targets, var_1 ); array_levelthread_safe( level.heli_leave_nodes, ::teleport_add_delta_targets, var_1 ); array_levelthread_safe( level.heli_crash_nodes, ::teleport_add_delta_targets, var_1 ); if ( isdefined( level.chopper ) ) { level.chopper.largeprojectiledamage = 1; level.chopper notify( "death" ); } teleport_add_delta( level.uavrig, var_1 ); teleport_add_delta( level.remote_mortar, var_1 ); teleport_add_delta( level.heli_pilot_mesh, var_1 ); array_thread_safe( level.air_start_nodes, ::teleport_self_add_delta, var_1 ); foreach ( var_3 in level.air_start_nodes ) array_thread_safe( var_3.neighbors, ::teleport_self_add_delta, var_1 ); array_thread_safe( level.air_node_mesh, ::teleport_self_add_delta, var_1 ); foreach ( var_3 in level.air_node_mesh ) array_thread_safe( var_3.neighbors, ::teleport_self_add_delta, var_1 ); array_thread_safe( level.littlebirds, ::teleport_notify_death ); teleport_add_delta( level.lbsniper, var_1 ); var_7 = getent( "airstrikeheight", "targetname" ); teleport_add_delta( var_7, var_1 ); var_8 = getentarray( "mp_airsupport", "classname" ); array_thread_safe( var_8, ::teleport_self_add_delta, var_1 ); var_9 = getentarray( "heli_attack_area", "targetname" ); array_thread_safe( var_9, ::teleport_self_add_delta, var_1 ); array_thread_safe( level.lasedstrikeents, ::teleport_self_add_delta, var_1 ); var_10 = getent( "remote_uav_range", "targetname" ); teleport_add_delta( var_10, var_1 ); foreach ( var_12 in level.participants ) { if ( isdefined( var_12.balldrone ) ) var_12.balldrone teleport_notify_death(); } if ( isdefined( level.uplinks ) ) { foreach ( var_15 in level.uplinks ) var_15 notify( "death" ); } var_17 = getentarray( "remoteMissileSpawn", "targetname" ); array_thread_safe( var_17, ::teleport_self_add_delta, var_1 ); foreach ( var_19 in var_17 ) { if ( isdefined( var_19.target ) ) var_19.targetent = getent( var_19.target, "targetname" ); if ( isdefined( var_19.targetent ) ) teleport_add_delta( var_19.targetent, var_1 ); } foreach ( var_22 in level.ims ) { var_22 notify( "death" ); teleport_add_delta( var_22, var_1 ); if ( !teleport_place_on_ground( var_22 ) ) var_22 delete(); } foreach ( var_25 in level.turrets ) { var_25 notify( "death" ); teleport_add_delta( var_25, var_1 ); if ( !teleport_place_on_ground( var_25 ) ) var_25 delete(); } var_27 = teleport_get_care_packages(); foreach ( var_29 in var_27 ) var_29 maps\mp\killstreaks\_airdrop::deletecrate(); var_31 = teleport_get_deployable_boxes(); foreach ( var_33 in var_31 ) var_33 teleport_notify_death(); foreach ( var_36 in level.remote_uav ) var_36 teleport_notify_death(); var_38 = vehicle_getarray(); foreach ( var_40 in var_38 ) { if ( isdefined( var_40.model ) && var_40.model == "vehicle_odin_mp" ) var_40 teleport_notify_death(); } if ( isdefined( level.teleport_a10_inboundlist[var_0] ) ) level.a10splinesin = level.teleport_a10_inboundlist[var_0]; if ( isdefined( level.teleport_a10_outboundlist[var_0] ) ) level.a10splinesout = level.teleport_a10_outboundlist[var_0]; if ( isdefined( level.intelent ) ) level.intelent["dropped_time"] = -60000; } teleport_notify_death() { if ( isdefined( self ) ) self notify( "death" ); } array_thread_safe( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 ) { if ( !isdefined( var_0 ) ) return; common_scripts\utility::array_thread( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 ); } array_levelthread_safe( var_0, var_1, var_2, var_3, var_4 ) { if ( !isdefined( var_0 ) ) return; common_scripts\utility::array_levelthread( var_0, var_1, var_2, var_3, var_4 ); } teleport_get_care_packages() { return getentarray( "care_package", "targetname" ); } teleport_get_deployable_boxes() { var_0 = []; var_1 = getentarray( "script_model", "classname" ); foreach ( var_3 in var_1 ) { if ( isdefined( var_3.boxtype ) ) var_0[var_0.size] = var_3; } return var_0; } teleport_place_on_ground( var_0, var_1 ) { if ( !isdefined( var_0 ) ) return; if ( !isdefined( var_1 ) ) var_1 = 300; var_2 = var_0.origin; var_3 = var_0.origin - ( 0, 0, var_1 ); var_4 = bullettrace( var_2, var_3, 0, var_0 ); if ( var_4["fraction"] < 1 ) { var_0.origin = var_4["position"]; return 1; } else return 0; } teleport_add_delta_targets( var_0, var_1 ) { if ( teleport_delta_this_frame( var_0 ) ) return; teleport_add_delta( var_0, var_1 ); if ( isdefined( var_0.target ) ) { var_2 = getentarray( var_0.target, "targetname" ); var_3 = common_scripts\utility::getstructarray( var_0.target, "targetname" ); var_4 = common_scripts\utility::array_combine( var_2, var_3 ); common_scripts\utility::array_levelthread( var_4, ::teleport_add_delta_targets, var_1 ); } } teleport_self_add_delta_targets( var_0 ) { teleport_add_delta_targets( self, var_0 ); } teleport_self_add_delta( var_0 ) { teleport_add_delta( self, var_0 ); } teleport_add_delta( var_0, var_1 ) { if ( isdefined( var_0 ) ) { if ( !teleport_delta_this_frame( var_0 ) ) { var_0.origin = var_0.origin + var_1; var_0.last_teleport_time = gettime(); } } } teleport_delta_this_frame( var_0 ) { return isdefined( var_0.last_teleport_time ) && var_0.last_teleport_time == gettime(); } teleport_get_active_nodes() { return level.teleport_nodes_in_zone[level.teleport_zone_current]; } teleport_get_active_pathnode_zones() { return level.teleport_pathnode_zones[level.teleport_zone_current]; }