#include common_scripts\utility; #include maps\mp\zombies\_load; #include maps\mp\_utility; #include maps\mp\zombies\_zm_zonemgr; #include maps\mp\gametypes_zm\_zm_gametype; #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_weapons; #include maps\mp\zombies\_zm_melee_weapon; #include maps\mp\zombies\_zm_weap_claymore; #include maps\mp\zombies\_zm_weap_ballistic_knife; #include maps\mp\zombies\_zm_equipment; #include maps\mp\zombies\_zm_magicbox; struct_class_init() { level.struct_class_names = []; level.struct_class_names[ "target" ] = []; level.struct_class_names[ "targetname" ] = []; level.struct_class_names[ "script_noteworthy" ] = []; level.struct_class_names[ "script_linkname" ] = []; level.struct_class_names[ "script_unitrigger_type" ] = []; foreach ( s_struct in level.struct ) { if ( isDefined( s_struct.targetname ) ) { if ( !isDefined( level.struct_class_names[ "targetname" ][ s_struct.targetname ] ) ) { level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; } size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; } if ( isDefined( s_struct.target ) ) { if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) { level.struct_class_names[ "target" ][ s_struct.target ] = []; } size = level.struct_class_names[ "target" ][ s_struct.target ].size; level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; } if ( isDefined( s_struct.script_noteworthy ) ) { if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) { level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; } size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; } if ( isDefined( s_struct.script_linkname ) ) { level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; } if ( isDefined( s_struct.script_unitrigger_type ) ) { if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) { level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; } size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; } } gametype = getDvar( "g_gametype" ); location = getDvar( "ui_zm_mapstartlocation" ); if ( array_validate( level.add_struct_gamemode_location_funcs ) ) { if ( array_validate( level.add_struct_gamemode_location_funcs[ gametype ] ) ) { if ( array_validate( level.add_struct_gamemode_location_funcs[ gametype ][ location ] ) ) { for ( i = 0; i < level.add_struct_gamemode_location_funcs[ gametype ][ location ].size; i++ ) { [[ level.add_struct_gamemode_location_funcs[ gametype ][ location ][ i ] ]](); } } } } } add_struct( s_struct ) { if ( isDefined( s_struct.targetname ) ) { if ( !isDefined( level.struct_class_names[ "targetname" ][ s_struct.targetname ] ) ) { level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; } size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; } if ( isDefined( s_struct.script_noteworthy ) ) { if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) { level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; } size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; } if ( isDefined( s_struct.target ) ) { if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) { level.struct_class_names[ "target" ][ s_struct.target ] = []; } size = level.struct_class_names[ "target" ][ s_struct.target ].size; level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; } if ( isDefined( s_struct.script_linkname ) ) { level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; } if ( isDefined( s_struct.script_unitrigger_type ) ) { if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) { level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; } size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; } } register_perk_struct( name, model, origin, angles ) { perk_struct = spawnStruct(); perk_struct.targetname = "zm_perk_machine"; perk_struct.origin = origin; perk_struct.angles = angles; perk_struct.script_noteworthy = name; perk_struct.model = model; if ( name == "specialty_weapupgrade" ) { flag_struct = spawnStruct(); flag_struct.targetname = "weapupgrade_flag_targ"; flag_struct.origin = origin + ( anglesToForward( angles ) * 29 ) + ( anglesToRight( angles ) * -13.5 ) + ( anglesToUp( angles ) * 49.5 ); flag_struct.angles = angles + ( 0, 180, 180 ); flag_struct.model = "zombie_sign_please_wait"; perk_struct.target = flag_struct.targetname; add_struct( flag_struct ); } add_struct( perk_struct ); } register_map_spawn_group( origin, zone, dist ) { spawn_group_struct = spawnStruct(); spawn_group_struct.targetname = "player_respawn_point"; spawn_group_struct.origin = origin; spawn_group_struct.locked = !zone_is_enabled( zone ); spawn_group_struct.script_int = dist; spawn_group_struct.script_noteworthy = zone; spawn_group_struct.script_string = getDvar( "g_gametype" ) + "_" + getDvar( "ui_zm_mapstartlocation" ); spawn_group_struct.target = zone + "_player_spawns"; add_struct( spawn_group_struct ); } register_map_spawn( origin, angles, zone, team_num ) { spawn_struct = spawnStruct(); spawn_struct.targetname = zone + "_player_spawns"; spawn_struct.origin = origin; spawn_struct.angles = angles; spawn_struct.script_string = getDvar( "g_gametype" ) + "_" + getDvar( "ui_zm_mapstartlocation" ); if ( isDefined( team_num ) ) { spawn_struct.script_noteworthy = "initial_spawn"; spawn_struct.script_int = team_num; } add_struct( spawn_struct ); } wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 ) { unitrigger_stub = spawnstruct(); unitrigger_stub.origin = origin; unitrigger_stub.angles = angles; model_name = undefined; if ( weapon_name == "sticky_grenade_zm" ) { model_name = "semtex_bag"; } else if ( weapon_name == "claymore_zm" ) { model_name = "t6_wpn_claymore_world"; } wallmodel = spawn_weapon_model( weapon_name, model_name, origin, angles ); wallmodel.targetname = target; wallmodel useweaponhidetags( weapon_name ); wallmodel hide(); absmins = wallmodel getabsmins(); absmaxs = wallmodel getabsmaxs(); bounds = absmaxs - absmins; unitrigger_stub.script_length = 64; unitrigger_stub.script_width = bounds[ 1 ]; unitrigger_stub.script_height = bounds[ 2 ]; unitrigger_stub.target = target; unitrigger_stub.targetname = targetname; unitrigger_stub.cursor_hint = "HINT_NOICON"; // move model forward so it always shows in front of chalk wallmodel.origin += anglesToRight( wallmodel.angles ) * -0.3; unitrigger_stub.origin += anglesToRight( wallmodel.angles ) * -0.3; if ( unitrigger_stub.targetname == "weapon_upgrade" ) { unitrigger_stub.cost = get_weapon_cost( weapon_name ); if ( !is_true( level.monolingustic_prompt_format ) ) { unitrigger_stub.hint_string = get_weapon_hint( weapon_name ); unitrigger_stub.hint_parm1 = unitrigger_stub.cost; } else { unitrigger_stub.hint_parm1 = get_weapon_display_name( weapon_name ); if ( !isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) { unitrigger_stub.hint_parm1 = "missing weapon name " + weapon_name; } unitrigger_stub.hint_parm2 = unitrigger_stub.cost; unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; } } unitrigger_stub.weapon_upgrade = weapon_name; unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; unitrigger_stub.require_look_at = 1; unitrigger_stub.require_look_from = 0; unitrigger_stub.zombie_weapon_upgrade = weapon_name; maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); if ( is_melee_weapon( weapon_name ) ) { melee_weapon = undefined; foreach(melee_weapon in level._melee_weapons) { if(melee_weapon.weapon_name == weapon_name) { break; } } if(isDefined(melee_weapon)) { unitrigger_stub.cost = melee_weapon.cost; unitrigger_stub.hint_string = melee_weapon.hint_string; unitrigger_stub.weapon_name = melee_weapon.weapon_name; unitrigger_stub.flourish_weapon_name = melee_weapon.flourish_weapon_name; unitrigger_stub.ballistic_weapon_name = melee_weapon.ballistic_weapon_name; unitrigger_stub.ballistic_upgraded_weapon_name = melee_weapon.ballistic_upgraded_weapon_name; unitrigger_stub.vo_dialog_id = melee_weapon.vo_dialog_id; unitrigger_stub.flourish_fn = melee_weapon.flourish_fn; if(is_true(level.disable_melee_wallbuy_icons)) { unitrigger_stub.cursor_hint = "HINT_NOICON"; unitrigger_stub.cursor_hint_weapon = undefined; } else { unitrigger_stub.cursor_hint = "HINT_WEAPON"; unitrigger_stub.cursor_hint_weapon = melee_weapon.weapon_name; } } if(weapon_name == "tazer_knuckles_zm") { unitrigger_stub.origin += (anglesToForward(angles) * -7) + (anglesToRight(angles) * -2); } wallmodel.origin += anglesToForward(angles) * -8; // _zm_melee_weapon::melee_weapon_show moves this back maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::melee_weapon_think ); } else if ( weapon_name == "claymore_zm" ) { wallmodel.angles += (0, 90, 0); wallmodel.script_int = 90; // fix for model sliding right to left 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 ); } else { if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) ) unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weapons::lethal_grenade_update_prompt; else unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, scripts\zm\replaced\_zm_weapons::weapon_spawn_think ); } if(weaponType(weapon_name) == "grenade") { unitrigger_stub thread wallbuy_grenade_model_fix(); } if (play_chalk_fx) { chalk_fx = weapon_name + "_fx"; level thread playchalkfx( chalk_fx, origin, angles ); } } playchalkfx( effect, origin, angles ) { while ( 1 ) { fx = SpawnFX( level._effect[ effect ], origin, AnglesToForward( angles ), AnglesToUp( angles ) ); TriggerFX( fx ); level waittill( "connected", player ); fx Delete(); } } // fixes grenade wallbuy model doing first trigger animation everytime wallbuy_grenade_model_fix() { model = getent(self.target, "targetname"); if(!isDefined(model)) { return; } model waittill("movedone"); self.target = undefined; } barrier( model, origin, angles, not_solid ) { if ( !isDefined( level.survival_barriers ) ) { level.survival_barriers = []; level.survival_barriers_index = 0; } level.survival_barriers[ level.survival_barriers_index ] = spawn( "script_model", origin ); level.survival_barriers[ level.survival_barriers_index ] setModel( model ); level.survival_barriers[ level.survival_barriers_index ] rotateTo( angles, 0.1 ); if ( is_true( not_solid ) ) { level.survival_barriers[ level.survival_barriers_index ] notSolid(); } level.survival_barriers_index++; } add_struct_location_gamemode_func( gametype, location, func ) { if ( !isDefined( level.add_struct_gamemode_location_funcs ) ) { level.add_struct_gamemode_location_funcs = []; } if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ] ) ) { level.add_struct_gamemode_location_funcs[ gametype ] = []; } if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ][ location ] ) ) { level.add_struct_gamemode_location_funcs[ gametype ][ location ] = []; } level.add_struct_gamemode_location_funcs[ gametype ][ location ][ level.add_struct_gamemode_location_funcs[ gametype ][ location ].size ] = func; }