mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-09 02:17:51 -05:00
The 4 following scripts have been checked but not tested: _zm_magicbox_lock, _zm_playerhealth, _zm_power, and _zm_turned. _zm_spawner has 2 known bugs: zombies cannot break barriers, and they have no glowing eyes.
432 lines
12 KiB
Plaintext
432 lines
12 KiB
Plaintext
#include maps/mp/gametypes_zm/_spawnlogic;
|
|
#include maps/mp/zombies/_zm_audio;
|
|
#include maps/mp/gametypes_zm/_zm_gametype;
|
|
#include maps/mp/_visionset_mgr;
|
|
#include maps/mp/gametypes_zm/_hud_util;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
init() //checked matches cerberus output
|
|
{
|
|
level.turnedmeleeweapon = "zombiemelee_zm";
|
|
level.turnedmeleeweapon_dw = "zombiemelee_dw";
|
|
precacheitem( level.turnedmeleeweapon );
|
|
precacheitem( level.turnedmeleeweapon_dw );
|
|
if ( isDefined( level.custom_zombie_player_loadout_init ) && !level.custom_zombie_player_loadout_init )
|
|
{
|
|
precachemodel( "c_zom_player_zombie_fb" );
|
|
precachemodel( "c_zom_zombie_viewhands" );
|
|
}
|
|
if ( !isDefined( level.vsmgr_prio_visionset_zombie_turned ) )
|
|
{
|
|
level.vsmgr_prio_visionset_zombie_turned = 123;
|
|
}
|
|
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 );
|
|
registerclientfield( "toplayer", "turned_ir", 3000, 1, "int" );
|
|
registerclientfield( "allplayers", "player_has_eyes", 3000, 1, "int" );
|
|
registerclientfield( "allplayers", "player_eyes_special", 5000, 1, "int" );
|
|
level._effect[ "player_eye_glow" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" );
|
|
level._effect[ "player_eye_glow_orng" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_orng" );
|
|
thread setup_zombie_exerts();
|
|
}
|
|
|
|
setup_zombie_exerts() //checked matches cerberus output
|
|
{
|
|
wait 0.05;
|
|
level.exert_sounds[ 1 ][ "burp" ] = "null";
|
|
level.exert_sounds[ 1 ][ "hitmed" ] = "null";
|
|
level.exert_sounds[ 1 ][ "hitlrg" ] = "null";
|
|
}
|
|
|
|
delay_turning_on_eyes() //checked matches cerberus output
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
wait_network_frame();
|
|
wait 0.1;
|
|
self setclientfield( "player_has_eyes", 1 );
|
|
}
|
|
|
|
turn_to_zombie() //checked changed to match cerberus output
|
|
{
|
|
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && self.is_zombie && isDefined( self.laststand ) && !self.laststand )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify )
|
|
{
|
|
return;
|
|
}
|
|
while ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify )
|
|
{
|
|
wait 0.1;
|
|
}
|
|
if ( !flag( "pregame" ) )
|
|
{
|
|
self playsoundtoplayer( "evt_spawn", self );
|
|
playsoundatposition( "evt_disappear_3d", self.origin );
|
|
if ( !self.is_zombie )
|
|
{
|
|
playsoundatposition( "vox_plr_" + randomintrange( 0, 4 ) + "_exert_death_high_" + randomintrange( 0, 4 ), self.origin );
|
|
}
|
|
}
|
|
self._can_score = 1;
|
|
self setclientfield( "player_has_eyes", 0 );
|
|
self ghost();
|
|
self turned_disable_player_weapons();
|
|
self notify( "clear_red_flashing_overlay" );
|
|
self notify( "zombify" );
|
|
self.is_in_process_of_zombify = 1;
|
|
self.team = level.zombie_team;
|
|
self.pers[ "team" ] = level.zombie_team;
|
|
self.sessionteam = level.zombie_team;
|
|
wait_network_frame();
|
|
self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer();
|
|
self freezecontrols( 1 );
|
|
self.is_zombie = 1;
|
|
self setburn( 0 );
|
|
if ( isDefined( self.turned_visionset ) && self.turned_visionset )
|
|
{
|
|
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self );
|
|
wait_network_frame();
|
|
wait_network_frame();
|
|
if ( !isDefined( self ) )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_turned", self );
|
|
self.turned_visionset = 1;
|
|
self setclientfieldtoplayer( "turned_ir", 1 );
|
|
self maps/mp/zombies/_zm_audio::setexertvoice( 1 );
|
|
self.laststand = undefined;
|
|
wait_network_frame();
|
|
if ( !isDefined( self ) )
|
|
{
|
|
return;
|
|
}
|
|
self enableweapons();
|
|
self show();
|
|
playsoundatposition( "evt_appear_3d", self.origin );
|
|
playsoundatposition( "zmb_zombie_spawn", self.origin );
|
|
self thread delay_turning_on_eyes();
|
|
self thread turned_player_buttons();
|
|
self setperk( "specialty_noname" );
|
|
self setperk( "specialty_unlimitedsprint" );
|
|
self setperk( "specialty_fallheight" );
|
|
self turned_give_melee_weapon();
|
|
self setmovespeedscale( 1 );
|
|
self.animname = "zombie";
|
|
self disableoffhandweapons();
|
|
self allowstand( 1 );
|
|
self allowprone( 0 );
|
|
self allowcrouch( 0 );
|
|
self allowads( 0 );
|
|
self allowjump( 0 );
|
|
self disableweaponcycling();
|
|
self setmovespeedscale( 1 );
|
|
self setsprintduration( 4 );
|
|
self setsprintcooldown( 0 );
|
|
self stopshellshock();
|
|
self.maxhealth = 256;
|
|
self.health = 256;
|
|
self.meleedamage = 1000;
|
|
self detachall();
|
|
if ( isDefined( level.custom_zombie_player_loadout ) )
|
|
{
|
|
self [[ level.custom_zombie_player_loadout ]]();
|
|
}
|
|
else
|
|
{
|
|
self setmodel( "c_zom_player_zombie_fb" );
|
|
self.voice = "american";
|
|
self.skeleton = "base";
|
|
self setviewmodel( "c_zom_zombie_viewhands" );
|
|
}
|
|
self.shock_onpain = 0;
|
|
self disableinvulnerability();
|
|
if ( isDefined( level.player_movement_suppressed ) )
|
|
{
|
|
self freezecontrols( level.player_movement_suppressed );
|
|
}
|
|
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
|
{
|
|
self freezecontrols( 0 );
|
|
}
|
|
self.is_in_process_of_zombify = 0;
|
|
}
|
|
|
|
turn_to_human() //checked changed to match cerberus output
|
|
{
|
|
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && !self.is_zombie && isDefined( self.laststand ) && !self.laststand )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify )
|
|
{
|
|
return;
|
|
}
|
|
while ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify )
|
|
{
|
|
wait 0.1;
|
|
}
|
|
self playsoundtoplayer( "evt_spawn", self );
|
|
playsoundatposition( "evt_disappear_3d", self.origin );
|
|
self setclientfield( "player_has_eyes", 0 );
|
|
self ghost();
|
|
self notify( "humanify" );
|
|
self.is_in_process_of_humanify = 1;
|
|
self.is_zombie = 0;
|
|
self notify( "clear_red_flashing_overlay" );
|
|
self.team = self.prevteam;
|
|
self.pers[ "team" ] = self.prevteam;
|
|
self.sessionteam = self.prevteam;
|
|
wait_network_frame();
|
|
self maps/mp/gametypes_zm/_zm_gametype::onspawnplayer();
|
|
self.maxhealth = 100;
|
|
self.health = 100;
|
|
self freezecontrols( 1 );
|
|
if ( self hasweapon( "death_throe_zm" ) )
|
|
{
|
|
self takeweapon( "death_throe_zm" );
|
|
}
|
|
self unsetperk( "specialty_noname" );
|
|
self unsetperk( "specialty_unlimitedsprint" );
|
|
self unsetperk( "specialty_fallheight" );
|
|
self turned_enable_player_weapons();
|
|
self maps/mp/zombies/_zm_audio::setexertvoice( 0 );
|
|
self.turned_visionset = 0;
|
|
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_turned", self );
|
|
self setclientfieldtoplayer( "turned_ir", 0 );
|
|
self setmovespeedscale( 1 );
|
|
self.ignoreme = 0;
|
|
self.shock_onpain = 1;
|
|
self enableweaponcycling();
|
|
self allowstand( 1 );
|
|
self allowprone( 1 );
|
|
self allowcrouch( 1 );
|
|
self allowads( 1 );
|
|
self allowjump( 1 );
|
|
self turnedhuman();
|
|
self enableoffhandweapons();
|
|
self stopshellshock();
|
|
self.laststand = undefined;
|
|
self.is_burning = undefined;
|
|
self.meleedamage = undefined;
|
|
self detachall();
|
|
self [[ level.givecustomcharacters ]]();
|
|
if ( !self hasweapon( "knife_zm" ) )
|
|
{
|
|
self giveweapon( "knife_zm" );
|
|
}
|
|
wait_network_frame();
|
|
if ( !isDefined( self ) )
|
|
{
|
|
return;
|
|
}
|
|
self disableinvulnerability();
|
|
if ( isDefined( level.player_movement_suppressed ) )
|
|
{
|
|
self freezecontrols( level.player_movement_suppressed );
|
|
}
|
|
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
|
{
|
|
self freezecontrols( 0 );
|
|
}
|
|
self show();
|
|
playsoundatposition( "evt_appear_3d", self.origin );
|
|
self.is_in_process_of_humanify = 0;
|
|
}
|
|
|
|
deletezombiesinradius( origin ) //checked changed to match cerberus output
|
|
{
|
|
zombies = get_round_enemy_array();
|
|
maxradius = 128;
|
|
foreach ( zombie in zombies )
|
|
{
|
|
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.is_being_used_as_spawner ) && !zombie.is_being_used_as_spawner )
|
|
{
|
|
if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) )
|
|
{
|
|
playfx( level._effect[ "wood_chunk_destory" ], zombie.origin );
|
|
zombie thread silentlyremovezombie();
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
turned_give_melee_weapon() //checked matches cerberus output
|
|
{
|
|
/*
|
|
/#
|
|
assert( isDefined( self.turnedmeleeweapon ) );
|
|
#/
|
|
/#
|
|
assert( self.turnedmeleeweapon != "none" );
|
|
#/
|
|
*/
|
|
self.turned_had_knife = self hasweapon( "knife_zm" );
|
|
if ( isDefined( self.turned_had_knife ) && self.turned_had_knife )
|
|
{
|
|
self takeweapon( "knife_zm" );
|
|
}
|
|
self giveweapon( self.turnedmeleeweapon_dw );
|
|
self givemaxammo( self.turnedmeleeweapon_dw );
|
|
self giveweapon( self.turnedmeleeweapon );
|
|
self givemaxammo( self.turnedmeleeweapon );
|
|
self switchtoweapon( self.turnedmeleeweapon_dw );
|
|
self switchtoweapon( self.turnedmeleeweapon );
|
|
}
|
|
|
|
turned_player_buttons() //checked changed to match cerberus output
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "humanify" );
|
|
level endon( "end_game" );
|
|
while ( isDefined( self.is_zombie ) && self.is_zombie )
|
|
{
|
|
if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
|
|
{
|
|
if ( cointoss() )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined );
|
|
}
|
|
while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
}
|
|
if ( self usebuttonpressed() )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined );
|
|
while ( self usebuttonpressed() )
|
|
{
|
|
wait 0.05;
|
|
}
|
|
}
|
|
if ( self issprinting() )
|
|
{
|
|
while ( self issprinting() )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
turned_disable_player_weapons() //checked matches cerberus output
|
|
{
|
|
if ( isDefined( self.is_zombie ) && self.is_zombie )
|
|
{
|
|
return;
|
|
}
|
|
weaponinventory = self getweaponslist();
|
|
self.lastactiveweapon = self getcurrentweapon();
|
|
self setlaststandprevweap( self.lastactiveweapon );
|
|
self.laststandpistol = undefined;
|
|
self.hadpistol = 0;
|
|
if ( !isDefined( self.turnedmeleeweapon ) )
|
|
{
|
|
self.turnedmeleeweapon = level.turnedmeleeweapon;
|
|
}
|
|
if ( !isDefined( self.turnedmeleeweapon_dw ) )
|
|
{
|
|
self.turnedmeleeweapon_dw = level.turnedmeleeweapon_dw;
|
|
}
|
|
self takeallweapons();
|
|
self disableweaponcycling();
|
|
}
|
|
|
|
turned_enable_player_weapons() //checked changed to match cerberus output
|
|
{
|
|
self takeallweapons();
|
|
self enableweaponcycling();
|
|
self enableoffhandweapons();
|
|
self.turned_had_knife = undefined;
|
|
if ( isDefined( level.humanify_custom_loadout ) )
|
|
{
|
|
self thread [[ level.humanify_custom_loadout ]]();
|
|
return;
|
|
}
|
|
else if ( !self hasweapon( "rottweil72_zm" ) )
|
|
{
|
|
self giveweapon( "rottweil72_zm" );
|
|
self switchtoweapon( "rottweil72_zm" );
|
|
}
|
|
if ( isDefined( self.is_zombie ) && !self.is_zombie && !self hasweapon( level.start_weapon ) )
|
|
{
|
|
if ( !self hasweapon( "knife_zm" ) )
|
|
{
|
|
self giveweapon( "knife_zm" );
|
|
}
|
|
self give_start_weapon( 0 );
|
|
}
|
|
if ( self hasweapon( "rottweil72_zm" ) )
|
|
{
|
|
self setweaponammoclip( "rottweil72_zm", 2 );
|
|
self setweaponammostock( "rottweil72_zm", 0 );
|
|
}
|
|
if ( self hasweapon( level.start_weapon ) )
|
|
{
|
|
self givemaxammo( level.start_weapon );
|
|
}
|
|
if ( self hasweapon( self get_player_lethal_grenade() ) )
|
|
{
|
|
self getweaponammoclip( self get_player_lethal_grenade() );
|
|
}
|
|
else
|
|
{
|
|
self giveweapon( self get_player_lethal_grenade() );
|
|
}
|
|
self setweaponammoclip( self get_player_lethal_grenade(), 2 );
|
|
}
|
|
|
|
get_farthest_available_zombie( player ) //checked changed to match cerberus output
|
|
{
|
|
while ( 1 )
|
|
{
|
|
zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) );
|
|
for ( x = 0; x < zombies.size; x++ )
|
|
{
|
|
zombie = zombies[ x ];
|
|
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.in_the_ground ) && !zombie.in_the_ground && isDefined( zombie.gibbed ) && !zombie.gibbed && isDefined( zombie.head_gibbed ) && !zombie.head_gibbed && isDefined( zombie.is_being_used_as_spawnpoint ) && !zombie.is_being_used_as_spawnpoint && zombie in_playable_area() )
|
|
{
|
|
zombie.is_being_used_as_spawnpoint = 1;
|
|
return zombie;
|
|
}
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
get_available_human() //checked changed to match cerberus output
|
|
{
|
|
players = get_players();
|
|
foreach ( player in players )
|
|
{
|
|
if ( isDefined( player.is_zombie ) && !player.is_zombie )
|
|
{
|
|
return player;
|
|
}
|
|
}
|
|
}
|
|
|
|
silentlyremovezombie() //checked matches cerberus output
|
|
{
|
|
self.skip_death_notetracks = 1;
|
|
self.nodeathragdoll = 1;
|
|
self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" );
|
|
self self_delete();
|
|
}
|
|
|
|
getspawnpoint() //checked matches cerberus output
|
|
{
|
|
spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints );
|
|
return spawnpoint;
|
|
}
|
|
|