mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 18:57:58 -05:00
239 lines
5.8 KiB
Plaintext
239 lines
5.8 KiB
Plaintext
#include maps/mp/zombies/_zm_stats;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
main_start()
|
|
{
|
|
mapname = tolower( getDvar( "mapname" ) );
|
|
gametype = getDvar( "ui_gametype" );
|
|
if ( tolower( getDvar( "mapname" ) ) == "zm_transit" && getDvar( "ui_gametype" ) == "zclassic" )
|
|
{
|
|
level thread transit_navcomputer_remove_card_on_success();
|
|
}
|
|
if ( tolower( getDvar( "mapname" ) ) == "zm_prison" && getDvar( "ui_gametype" ) == "zgrief" )
|
|
{
|
|
level.zbarrier_script_string_sets_collision = 1;
|
|
}
|
|
if ( mapname != "zm_transit" && mapname == "zm_highrise" && gametype == "zclassic" )
|
|
{
|
|
level.pers_upgrade_sniper = 1;
|
|
level.pers_upgrade_pistol_points = 1;
|
|
level.pers_upgrade_perk_lose = 1;
|
|
level.pers_upgrade_double_points = 1;
|
|
level.pers_upgrade_nube = 1;
|
|
}
|
|
}
|
|
|
|
main_end()
|
|
{
|
|
onfinalizeinitialization_callback( ::force_navcomputer_trigger_think );
|
|
level.original_melee_miss_func = level.melee_miss_func;
|
|
level.melee_miss_func = ::ffotd_melee_miss_func;
|
|
}
|
|
|
|
force_navcomputer_trigger_think()
|
|
{
|
|
if ( !isDefined( level.zombie_include_buildables ) || !level.zombie_include_buildables.size )
|
|
{
|
|
return;
|
|
}
|
|
_a52 = level.zombie_include_buildables;
|
|
_k52 = getFirstArrayKey( _a52 );
|
|
while ( isDefined( _k52 ) )
|
|
{
|
|
buildable = _a52[ _k52 ];
|
|
if ( buildable.name == "sq_common" )
|
|
{
|
|
if ( isDefined( buildable.triggerthink ) )
|
|
{
|
|
level [[ buildable.triggerthink ]]();
|
|
trigger_think_func = buildable.triggerthink;
|
|
buildable.triggerthink = undefined;
|
|
level waittill( "buildables_setup" );
|
|
buildable.triggerthink = trigger_think_func;
|
|
return;
|
|
}
|
|
}
|
|
_k52 = getNextArrayKey( _a52, _k52 );
|
|
}
|
|
}
|
|
|
|
transit_navcomputer_remove_card_on_success()
|
|
{
|
|
wait_for_buildable( "sq_common" );
|
|
wait_network_frame();
|
|
trig_pos = getstruct( "sq_common_key", "targetname" );
|
|
trigs = getentarray( "trigger_radius_use", "classname" );
|
|
nav_trig = undefined;
|
|
_a81 = trigs;
|
|
_k81 = getFirstArrayKey( _a81 );
|
|
while ( isDefined( _k81 ) )
|
|
{
|
|
trig = _a81[ _k81 ];
|
|
if ( trig.origin == trig_pos.origin )
|
|
{
|
|
nav_trig = trig;
|
|
}
|
|
_k81 = getNextArrayKey( _a81, _k81 );
|
|
}
|
|
if ( isDefined( nav_trig ) )
|
|
{
|
|
while ( 1 )
|
|
{
|
|
nav_trig waittill( "trigger", who );
|
|
if ( isplayer( who ) && is_player_valid( who ) && does_player_have_correct_navcard( who ) )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
players = get_players();
|
|
_a101 = players;
|
|
_k101 = getFirstArrayKey( _a101 );
|
|
while ( isDefined( _k101 ) )
|
|
{
|
|
player = _a101[ _k101 ];
|
|
player maps/mp/zombies/_zm_stats::set_global_stat( level.navcard_needed, 0 );
|
|
_k101 = getNextArrayKey( _a101, _k101 );
|
|
}
|
|
level thread sq_refresh_player_navcard_hud();
|
|
}
|
|
}
|
|
|
|
sq_refresh_player_navcard_hud()
|
|
{
|
|
if ( !isDefined( level.navcards ) )
|
|
{
|
|
return;
|
|
}
|
|
players = get_players();
|
|
_a116 = players;
|
|
_k116 = getFirstArrayKey( _a116 );
|
|
while ( isDefined( _k116 ) )
|
|
{
|
|
player = _a116[ _k116 ];
|
|
navcard_bits = 0;
|
|
i = 0;
|
|
while ( i < level.navcards.size )
|
|
{
|
|
hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] );
|
|
if ( isDefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[ i ] )
|
|
{
|
|
hasit = 1;
|
|
}
|
|
if ( hasit )
|
|
{
|
|
navcard_bits = navcard_bits + 1;
|
|
}
|
|
i++;
|
|
}
|
|
wait_network_frame();
|
|
player setclientfield( "navcard_held", 0 );
|
|
if ( navcard_bits > 0 )
|
|
{
|
|
wait_network_frame();
|
|
player setclientfield( "navcard_held", navcard_bits );
|
|
}
|
|
_k116 = getNextArrayKey( _a116, _k116 );
|
|
}
|
|
}
|
|
|
|
player_in_exploit_area( player_trigger_origin, player_trigger_radius )
|
|
{
|
|
if ( distancesquared( player_trigger_origin, self.origin ) < ( player_trigger_radius * player_trigger_radius ) )
|
|
{
|
|
/*
|
|
/#
|
|
iprintlnbold( "player exploit detectect" );
|
|
#/
|
|
*/
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point )
|
|
{
|
|
spawnflags = 9;
|
|
zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height );
|
|
zombie_trigger setteamfortrigger( level.zombie_team );
|
|
/*
|
|
/#
|
|
thread debug_exploit( zombie_trigger_origin, zombie_trigger_radius, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
|
#/
|
|
*/
|
|
while ( 1 )
|
|
{
|
|
zombie_trigger waittill( "trigger", who );
|
|
if ( !is_true( who.reroute ) )
|
|
{
|
|
who thread exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
|
}
|
|
}
|
|
}
|
|
|
|
exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point )
|
|
{
|
|
self endon( "death" );
|
|
self.reroute = 1;
|
|
while ( 1 )
|
|
{
|
|
if ( self istouching( zombie_trigger ) )
|
|
{
|
|
player = self.favoriteenemy;
|
|
if ( isDefined( player ) && player player_in_exploit_area( player_trigger_origin, player_trigger_radius ) )
|
|
{
|
|
self.reroute_origin = zombie_goto_point;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
wait 0.2;
|
|
}
|
|
self.reroute = 0;
|
|
}
|
|
|
|
debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point )
|
|
{
|
|
/*
|
|
/#
|
|
while ( isDefined( self ) )
|
|
{
|
|
circle( player_origin, player_radius, ( 1, 1, 0 ), 0, 1, 1 );
|
|
circle( enemy_origin, enemy_radius, ( 1, 1, 0 ), 0, 1, 1 );
|
|
line( player_origin, enemy_origin, ( 1, 1, 0 ), 1 );
|
|
line( enemy_origin, zombie_goto_point, ( 1, 1, 0 ), 1 );
|
|
wait 0.05;
|
|
#/
|
|
}
|
|
*/
|
|
}
|
|
|
|
ffotd_melee_miss_func()
|
|
{
|
|
if ( isDefined( self.enemy ) )
|
|
{
|
|
if ( isplayer( self.enemy ) && self.enemy getcurrentweapon() == "claymore_zm" )
|
|
{
|
|
dist_sq = distancesquared( self.enemy.origin, self.origin );
|
|
melee_dist_sq = self.meleeattackdist * self.meleeattackdist;
|
|
if ( dist_sq < melee_dist_sq )
|
|
{
|
|
self.enemy dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if ( isDefined( level.original_melee_miss_func ) )
|
|
{
|
|
self [[ level.original_melee_miss_func ]]();
|
|
}
|
|
}
|
|
|