1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 15:17:57 -05:00
Files
BO2-Reimagined/scripts/zm/replaced/utility.gsc

288 lines
11 KiB
Plaintext

#include maps/mp/zombies/_load;
#include maps/mp/_utility;
#include common_scripts/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( perk_name, perk_model, perk_angles, perk_coordinates )
{
perk_struct = spawnStruct();
perk_struct.script_noteworthy = perk_name;
perk_struct.model = perk_model;
perk_struct.angles = perk_angles;
perk_struct.origin = perk_coordinates;
perk_struct.targetname = "zm_perk_machine";
// if ( perk_name == "specialty_weapupgrade" )
// {
// perk_struct.target = "weapupgrade_flag_targ";
// flag = spawnStruct();
// flag.targetname = "weapupgrade_flag_targ";
// flag.model = "zombie_sign_please_wait";
// flag.angles = ( 0, perk_angles[ 1 ] - 180, perk_angles[ 2 ] - 180 );
// flag.origin = ( perk_coordinates[ 0 ] + 13.5, perk_coordinates[ 1 ] - 29, perk_coordinates[ 2 ] + 49.5 );
// add_struct( flag );
// }
add_struct( perk_struct );
}
register_map_initial_spawnpoint( spawnpoint_coordinates, spawnpoint_angles )
{
spawnpoint_struct = spawnStruct();
spawnpoint_struct.origin = spawnpoint_coordinates;
if ( isDefined( spawnpoint_angles ) )
{
spawnpoint_struct.angles = spawnpoint_angles;
}
else
{
spawnpoint_struct.angles = ( 0, 0, 0 );
}
spawnpoint_struct.radius = 32;
spawnpoint_struct.script_noteworthy = "initial_spawn";
spawnpoint_struct.script_int = 2048;
spawnpoint_struct.script_string = getDvar( "g_gametype" ) + "_" + getDvar( "ui_zm_mapstartlocation" );
spawnpoint_struct.locked = 0;
player_respawn_point_size = level.struct_class_names[ "targetname" ][ "player_respawn_point" ].size;
player_initial_spawnpoint_size = level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ].size;
level.struct_class_names[ "targetname" ][ "player_respawn_point" ][ player_respawn_point_size ] = spawnpoint_struct;
level.struct_class_names[ "script_noteworthy" ][ "initial_spawn" ][ player_initial_spawnpoint_size ] = spawnpoint_struct;
}
wallbuy( weapon_angles, weapon_coordinates, chalk_fx, weapon_name, weapon_model, target, targetname )
{
precachemodel( weapon_model );
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = weapon_coordinates;
unitrigger_stub.angles = weapon_angles;
// move model foreward so it always shows in front of chalk
wallmodel = spawn_weapon_model( weapon_name, undefined, weapon_coordinates + anglesToRight(weapon_angles) * -0.4, weapon_angles );
wallmodel.targetname = target;
mins = undefined;
maxs = undefined;
absmins = undefined;
absmaxs = undefined;
wallmodel setmodel( weapon_model );
wallmodel useweaponhidetags( weapon_name );
mins = wallmodel getmins();
maxs = wallmodel getmaxs();
absmins = wallmodel getabsmins();
absmaxs = wallmodel getabsmaxs();
bounds = absmaxs - absmins;
unitrigger_stub.script_length = bounds[ 0 ] * 0.25;
unitrigger_stub.script_width = bounds[ 1 ];
unitrigger_stub.script_height = bounds[ 2 ];
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 );
unitrigger_stub.target = target;
unitrigger_stub.targetname = targetname;
unitrigger_stub.cursor_hint = "HINT_NOICON";
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 ) )
{
if ( weapon_name == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) )
{
unitrigger_stub.origin += level.taser_trig_adjustment;
}
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::melee_weapon_think );
}
else if ( weapon_name == "claymore_zm" )
{
unitrigger_stub.prompt_and_visibility_func = ::claymore_unitrigger_update_prompt;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buy_claymores );
}
else
{
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
}
wallmodel hide();
thread playchalkfx( chalk_fx, weapon_coordinates, weapon_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();
}
}
barrier( barrier_coordinates, barrier_model, barrier_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", barrier_coordinates );
level.survival_barriers[ level.survival_barriers_index ] setModel( barrier_model );
level.survival_barriers[ level.survival_barriers_index ] rotateTo( barrier_angles, 0.1 );
level.survival_barriers[ level.survival_barriers_index ] disconnectPaths();
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;
}