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/_zm_chugabud.gsc

493 lines
13 KiB
Plaintext

#include maps\mp\zombies\_zm_chugabud;
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_hud_util;
chugabud_laststand()
{
self endon( "player_suicide" );
self endon( "disconnect" );
self endon( "chugabud_bleedout" );
if ( isdefined( self.e_chugabud_corpse ) )
{
self notify( "chugabud_handle_multiple_instances" );
return;
}
self maps\mp\zombies\_zm_laststand::increment_downed_stat();
self.ignore_insta_kill = 1;
self.health = self.maxhealth;
self chugabud_save_loadout();
self chugabud_fake_death();
wait 3;
if ( isdefined( self.insta_killed ) && self.insta_killed || isdefined( self.disable_chugabud_corpse ) )
create_corpse = 0;
else
create_corpse = 1;
if ( create_corpse == 1 )
{
if ( isdefined( level._chugabug_reject_corpse_override_func ) )
{
reject_corpse = self [[ level._chugabug_reject_corpse_override_func ]]( self.origin );
if ( reject_corpse )
create_corpse = 0;
}
}
if ( create_corpse == 1 )
{
self thread activate_chugabud_effects_and_audio();
corpse = self chugabud_spawn_corpse();
self.e_chugabud_corpse = corpse;
corpse.e_chugabud_player = self;
corpse thread chugabud_corpse_revive_icon( self );
corpse thread chugabud_corpse_cleanup_on_spectator( self );
corpse thread chugabud_corpse_cleanup_on_disconnect( self );
if ( isdefined( level.whos_who_client_setup ) )
corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 );
}
self thread chugabud_fake_revive();
wait 0.1;
self.ignore_insta_kill = undefined;
self.disable_chugabud_corpse = undefined;
if ( create_corpse == 0 )
{
if ( is_player_valid( self ) )
{
self.statusicon = "";
}
self notify( "chugabud_effects_cleanup" );
return;
}
bleedout_time = 30;
self thread chugabud_bleed_timeout( bleedout_time, corpse );
self thread chugabud_handle_multiple_instances( corpse );
corpse waittill( "player_revived", e_reviver );
if ( isdefined( e_reviver ) && e_reviver == self )
self notify( "whos_who_self_revive" );
self perk_abort_drinking( 0.1 );
self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 );
self setorigin( corpse.origin );
self setplayerangles( corpse.angles );
if ( self player_is_in_laststand() )
{
self thread chugabud_laststand_cleanup( corpse, "player_revived" );
self enableweaponcycling();
self enableoffhandweapons();
self auto_revive( self, 1 );
return;
}
self chugabud_laststand_cleanup( corpse, undefined );
}
chugabud_save_loadout()
{
primaries = self getweaponslistprimaries();
currentweapon = self getcurrentweapon();
self.loadout = spawnstruct();
self.loadout.player = self;
self.loadout.weapons = [];
self.loadout.score = self.score;
self.loadout.current_weapon = -1;
foreach ( index, weapon in primaries )
{
self.loadout.weapons[index] = maps\mp\zombies\_zm_weapons::get_player_weapondata( self, weapon );
if ( weapon == currentweapon || self.loadout.weapons[index]["alt_name"] == currentweapon )
self.loadout.current_weapon = index;
}
self.loadout.equipment = self get_player_equipment();
if ( isdefined( self.loadout.equipment ) )
self equipment_take( self.loadout.equipment );
self.loadout save_weapons_for_chugabud( self );
if ( self hasweapon( "claymore_zm" ) )
{
self.loadout.hasclaymore = 1;
self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" );
}
self.loadout.perks = chugabud_save_perks( self );
self chugabud_save_grenades();
if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
self.loadout.zombie_cymbal_monkey_count = self getweaponammoclip( "cymbal_monkey_zm" );
}
chugabud_save_perks( ent )
{
perk_array = ent get_perk_array( 1 );
foreach ( perk in perk_array )
{
if ( perk == "specialty_additionalprimaryweapon" )
{
ent maps\mp\zombies\_zm::take_additionalprimaryweapon();
}
ent unsetperk( perk );
}
return perk_array;
}
chugabud_fake_death()
{
level notify( "fake_death" );
self notify( "fake_death" );
self takeallweapons();
self allowstand( 0 );
self allowcrouch( 0 );
self allowprone( 1 );
self setstance( "prone" );
self.ignoreme = 1;
self enableinvulnerability();
if ( self is_jumping() )
{
while ( self is_jumping() )
wait 0.05;
}
self freezecontrols( 1 );
}
chugabud_fake_revive()
{
level notify( "fake_revive" );
self notify( "fake_revive" );
playsoundatposition( "evt_ww_disappear", self.origin );
playfx( level._effect["chugabud_revive_fx"], self.origin );
spawnpoint = chugabud_get_spawnpoint();
if ( isdefined( level._chugabud_post_respawn_override_func ) )
self [[ level._chugabud_post_respawn_override_func ]]( spawnpoint.origin );
if ( isdefined( level.chugabud_force_corpse_position ) )
{
if ( isdefined( self.e_chugabud_corpse ) )
self.e_chugabud_corpse forceteleport( level.chugabud_force_corpse_position );
level.chugabud_force_corpse_position = undefined;
}
if ( isdefined( level.chugabud_force_player_position ) )
{
spawnpoint.origin = level.chugabud_force_player_position;
level.chugabud_force_player_position = undefined;
}
self allowstand( 1 );
self allowcrouch( 1 );
self allowprone( 1 );
self setstance( "stand" );
self chugabud_give_loadout();
self seteverhadweaponall( 1 );
self.score = self.loadout.score;
self.pers["score"] = self.loadout.score;
self setorigin( spawnpoint.origin );
self setplayerangles( spawnpoint.angles );
playsoundatposition( "evt_ww_appear", spawnpoint.origin );
playfx( level._effect["chugabud_revive_fx"], spawnpoint.origin );
wait 0.5;
self freezecontrols( 0 );
wait 0.5;
self.ignoreme = 0;
wait 1;
self disableinvulnerability();
}
chugabud_give_loadout()
{
self takeallweapons();
loadout = self.loadout;
primaries = self getweaponslistprimaries();
if ( loadout.weapons.size > 1 || primaries.size > 1 )
{
foreach ( weapon in primaries )
self takeweapon( weapon );
}
weapons_given = 0;
for ( i = 0; i < loadout.weapons.size; i++ )
{
if ( !isdefined( loadout.weapons[i] ) )
continue;
if ( loadout.weapons[i]["name"] == "none" )
continue;
self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] );
weapons_given++;
if (weapons_given >= 2)
{
break;
}
}
if ( loadout.current_weapon >= 0 && isdefined( loadout.weapons[loadout.current_weapon]["name"] ) )
self switchtoweapon( loadout.weapons[loadout.current_weapon]["name"] );
self giveweapon( "knife_zm" );
self.do_not_display_equipment_pickup_hint = 1;
self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment );
self.do_not_display_equipment_pickup_hint = undefined;
loadout restore_weapons_for_chugabud( self );
self chugabud_restore_claymore();
self.score = loadout.score;
self.pers["score"] = loadout.score;
self chugabud_restore_grenades();
if ( maps\mp\zombies\_zm_weap_cymbal_monkey::cymbal_monkey_exists() )
{
if ( loadout.zombie_cymbal_monkey_count )
{
self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey();
self setweaponammoclip( "cymbal_monkey_zm", loadout.zombie_cymbal_monkey_count );
}
}
self.loadout.weapons = undefined;
}
chugabud_give_perks()
{
loadout = self.loadout;
if ( isdefined( loadout.perks ) && loadout.perks.size > 0 )
{
for ( i = 0; i < loadout.perks.size; i++ )
{
if ( self hasperk( loadout.perks[i] ) )
continue;
if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) )
level.solo_game_free_player_quickrevive = 1;
if ( loadout.perks[i] == "specialty_finalstand" )
continue;
maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] );
}
}
self.loadout.perks = undefined;
}
chugabud_spawn_corpse()
{
corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined, self.whos_who_shader );
corpse.angles = self.angles;
corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" );
corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" );
corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn();
return corpse;
}
chugabud_bleed_timeout_hud_create( delay )
{
hud = self createbar((0.25, 0.25, 1), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight);
hud setpoint("CENTER", undefined, level.secondaryprogressbarx, -2.25 * level.secondaryprogressbary);
hud.hidewheninmenu = 1;
hud.bar.hidewheninmenu = 1;
hud.barframe.hidewheninmenu = 1;
hud.foreground = 1;
hud.bar.foreground = 1;
hud.barframe.foreground = 1;
hud.sort = 1;
hud.bar.sort = 2;
hud.barframe.sort = 3;
hud.barframe destroy();
hud thread scripts\zm\_zm_reimagined::destroy_on_intermission();
hud updatebar(1);
hud.bar scaleovertime(delay, 1, hud.height);
return hud;
}
chugabud_corpse_revive_icon( player )
{
self endon( "death" );
height_offset = 30;
index = player.clientid;
self.revive_waypoint_origin = spawn( "script_model", self.origin + (0, 0, height_offset) );
self.revive_waypoint_origin setmodel( "tag_origin" );
self.revive_waypoint_origin linkto( self );
hud_elem = newhudelem();
self.revive_hud_elem = hud_elem;
hud_elem.alpha = 1;
hud_elem.archived = 1;
hud_elem.hidewheninmenu = 1;
hud_elem.immunetodemogamehudsettings = 1;
hud_elem setwaypoint( 1, "specialty_chugabud_zombies" );
hud_elem settargetent( self.revive_waypoint_origin );
}
chugabud_corpse_cleanup( corpse, was_revived )
{
self notify( "chugabud_effects_cleanup" );
if ( was_revived )
{
playsoundatposition( "evt_ww_appear", corpse.origin );
playfx( level._effect["chugabud_revive_fx"], corpse.origin );
}
else
{
playsoundatposition( "evt_ww_disappear", corpse.origin );
playfx( level._effect["chugabud_bleedout_fx"], corpse.origin );
self notify( "chugabud_bleedout" );
}
if ( isdefined( corpse.revivetrigger ) )
{
corpse notify( "stop_revive_trigger" );
corpse.revivetrigger delete();
corpse.revivetrigger = undefined;
}
if ( isdefined( corpse.revive_hud_elem ) )
{
corpse.revive_hud_elem destroy();
corpse.revive_hud_elem = undefined;
}
if ( isdefined( corpse.revive_waypoint_origin ) )
{
corpse.revive_waypoint_origin delete();
corpse.revive_waypoint_origin = undefined;
}
if ( isdefined( self.chugabud_bleed_timeout_hud ) )
{
self.chugabud_bleed_timeout_hud destroy();
self.chugabud_bleed_timeout_hud.bar destroy();
self.chugabud_bleed_timeout_hud.barframe destroy();
self.chugabud_bleed_timeout_hud = undefined;
}
self.loadout = undefined;
wait 0.1;
corpse delete();
self.e_chugabud_corpse = undefined;
if ( is_player_valid( self ) )
{
self.statusicon = "";
}
}
chugabud_handle_multiple_instances( corpse )
{
corpse endon( "death" );
self waittill( "chugabud_handle_multiple_instances" );
self thread chugabud_laststand_wait( corpse );
self chugabud_corpse_cleanup( corpse, 0 );
}
chugabud_laststand_wait( corpse )
{
corpse waittill( "death" );
self chugabud_laststand();
}
chugabud_corpse_cleanup_on_disconnect( player )
{
self endon( "death" );
player waittill( "disconnect" );
player chugabud_corpse_cleanup( self, 0 );
}
chugabud_laststand_cleanup( corpse, str_notify )
{
if ( isdefined( str_notify ) )
self waittill( str_notify );
self setstance( "stand" );
self thread chugabud_leave_freeze();
self thread chugabud_revive_invincible();
self chugabud_give_perks();
self chugabud_corpse_cleanup( corpse, 1 );
}
chugabud_leave_freeze()
{
self endon( "disconnect" );
level endon( "end_game" );
self freezecontrols( 1 );
wait 0.5;
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
self freezecontrols( 0 );
}
chugabud_revive_invincible()
{
self endon( "disconnect" );
level endon( "end_game" );
self.health = self.maxhealth;
self enableinvulnerability();
wait 2;
self disableinvulnerability();
}
chugabud_bleed_timeout( delay, corpse )
{
self endon( "player_suicide" );
self endon( "disconnect" );
corpse endon( "death" );
self.chugabud_bleed_timeout_hud = self chugabud_bleed_timeout_hud_create( delay );
wait delay;
if ( isDefined( corpse.revivetrigger ) )
{
while ( corpse.revivetrigger.beingrevived )
{
wait 0.01;
}
}
self chugabud_corpse_cleanup( corpse, 0 );
}