mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-29 20:17:52 -05:00
223 lines
5.5 KiB
Plaintext
223 lines
5.5 KiB
Plaintext
#include maps/mp/zombies/_zm_powerups;
|
|
#include maps/mp/zombies/_zm_perks;
|
|
#include maps/mp/zombies/_zm_score;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
#using_animtree( "zm_buried_ghost" );
|
|
#using_animtree( "fxanim_props_dlc3" );
|
|
|
|
init_ghost_piano()
|
|
{
|
|
t_bullseye = getent( "bullseye", "script_noteworthy" );
|
|
t_chalk_line = getent( "ee_bar_chalk_line_trigger", "targetname" );
|
|
if ( !isDefined( t_bullseye ) || !isDefined( t_chalk_line ) )
|
|
{
|
|
return;
|
|
}
|
|
t_bullseye thread wait_for_valid_damage();
|
|
t_chalk_line thread set_flags_while_players_stand_in_trigger();
|
|
level thread mansion_ghost_plays_piano();
|
|
level thread reward_think();
|
|
/#
|
|
level thread devgui_support_ee();
|
|
#/
|
|
flag_init( "player_piano_song_active" );
|
|
}
|
|
|
|
init_ee_ghost_piano_flags()
|
|
{
|
|
self ent_flag_init( "ee_standing_behind_chalk_line" );
|
|
}
|
|
|
|
wait_for_valid_damage()
|
|
{
|
|
self setcandamage( 1 );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "damage" );
|
|
if ( is_ballistic_knife_variant( str_weapon_name ) )
|
|
{
|
|
if ( isDefined( e_inflictor ) && e_inflictor ent_flag_exist( "ee_standing_behind_chalk_line" ) && e_inflictor ent_flag( "ee_standing_behind_chalk_line" ) && !flag( "player_piano_song_active" ) )
|
|
{
|
|
level notify( "player_can_interact_with_ghost_piano_player" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
is_ballistic_knife_variant( str_weapon )
|
|
{
|
|
return issubstr( str_weapon, "knife_ballistic_" );
|
|
}
|
|
|
|
set_flags_while_players_stand_in_trigger()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( !player ent_flag_exist( "ee_standing_behind_chalk_line" ) )
|
|
{
|
|
player ent_flag_init( "ee_standing_behind_chalk_line" );
|
|
}
|
|
if ( !player ent_flag( "ee_standing_behind_chalk_line" ) )
|
|
{
|
|
player thread clear_flag_when_player_leaves_trigger( self );
|
|
}
|
|
}
|
|
}
|
|
|
|
clear_flag_when_player_leaves_trigger( trigger )
|
|
{
|
|
self endon( "death_or_disconnect" );
|
|
self ent_flag_set( "ee_standing_behind_chalk_line" );
|
|
while ( self istouching( trigger ) )
|
|
{
|
|
wait 0,25;
|
|
}
|
|
self ent_flag_clear( "ee_standing_behind_chalk_line" );
|
|
}
|
|
|
|
player_piano_starts()
|
|
{
|
|
/#
|
|
iprintln( "player piano tune song start" );
|
|
#/
|
|
flag_set( "player_piano_song_active" );
|
|
level notify( "piano_play" );
|
|
level setclientfield( "mansion_piano_play", 1 );
|
|
level setclientfield( "saloon_piano_play", 1 );
|
|
wait getanimlength( %fxanim_gp_piano_old_anim );
|
|
/#
|
|
iprintln( "player piano song done" );
|
|
#/
|
|
level setclientfield( "mansion_piano_play", 0 );
|
|
level setclientfield( "saloon_piano_play", 0 );
|
|
flag_clear( "player_piano_song_active" );
|
|
}
|
|
|
|
mansion_ghost_plays_piano()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
flag_wait( "player_piano_song_active" );
|
|
e_ghost = spawn_and_animate_ghost_pianist();
|
|
flag_waitopen( "player_piano_song_active" );
|
|
e_ghost thread delete_ghost_pianist();
|
|
}
|
|
}
|
|
|
|
spawn_and_animate_ghost_pianist()
|
|
{
|
|
s_anim = getstruct( "ee_mansion_piano_anim_struct", "targetname" );
|
|
e_temp = spawn( "script_model", s_anim.origin );
|
|
e_temp.angles = s_anim.angles;
|
|
e_temp setclientfield( "ghost_fx", 3 );
|
|
e_temp setmodel( "c_zom_zombie_buried_ghost_woman_fb" );
|
|
e_temp useanimtree( -1 );
|
|
e_temp setanim( %ai_zombie_ghost_playing_piano );
|
|
e_temp setclientfield( "sndGhostAudio", 1 );
|
|
/#
|
|
iprintln( "ghost piano player spawned" );
|
|
#/
|
|
return e_temp;
|
|
}
|
|
|
|
reward_think()
|
|
{
|
|
t_use = getent( "ee_ghost_piano_mansion_use_trigger", "targetname" );
|
|
t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 );
|
|
t_use setinvisibletoall();
|
|
while ( 1 )
|
|
{
|
|
level waittill( "player_can_interact_with_ghost_piano_player", player );
|
|
level thread player_piano_starts();
|
|
if ( !player has_player_received_reward() )
|
|
{
|
|
t_use setvisibletoplayer( player );
|
|
t_use thread player_can_use_ghost_piano_trigger( player );
|
|
}
|
|
flag_waitopen( "player_piano_song_active" );
|
|
t_use setinvisibletoall();
|
|
level notify( "ghost_piano_reward_unavailable" );
|
|
}
|
|
}
|
|
|
|
player_can_use_ghost_piano_trigger( player )
|
|
{
|
|
player endon( "death_or_disconnect" );
|
|
level endon( "ghost_piano_reward_unavailable" );
|
|
self waittill( "trigger", user );
|
|
if ( user != player && player.score < 10 && !player has_player_received_reward() )
|
|
{
|
|
self give_reward( player );
|
|
}
|
|
}
|
|
|
|
give_reward( player )
|
|
{
|
|
player maps/mp/zombies/_zm_score::minus_to_player_score( 10 );
|
|
player.got_easter_egg_reward = 1;
|
|
self setinvisibletoplayer( player );
|
|
player notify( "player_received_ghost_round_free_perk" );
|
|
free_perk = player maps/mp/zombies/_zm_perks::give_random_perk();
|
|
if ( is_true( level.disable_free_perks_before_power ) )
|
|
{
|
|
player thread maps/mp/zombies/_zm_powerups::disable_perk_before_power( free_perk );
|
|
}
|
|
/#
|
|
iprintln( "player got reward!!" );
|
|
#/
|
|
}
|
|
|
|
has_player_received_reward()
|
|
{
|
|
return is_true( self.got_easter_egg_reward );
|
|
}
|
|
|
|
delete_ghost_pianist()
|
|
{
|
|
self setclientfield( "ghost_fx", 5 );
|
|
self playsound( "zmb_ai_ghost_death" );
|
|
wait_network_frame();
|
|
self delete();
|
|
/#
|
|
iprintln( "ghost piano player deleted" );
|
|
#/
|
|
}
|
|
|
|
devgui_support_ee()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
str_notify = level waittill_any_return( "ghost_piano_warp_to_mansion_piano", "ghost_piano_warp_to_bar" );
|
|
if ( str_notify == "ghost_piano_warp_to_mansion_piano" )
|
|
{
|
|
get_players()[ 0 ] warp_to_struct( "ee_warp_mansion_piano", "targetname" );
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if ( str_notify == "ghost_piano_warp_to_bar" )
|
|
{
|
|
get_players()[ 0 ] warp_to_struct( "ee_warp_bar", "targetname" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
warp_to_struct( str_value, str_key )
|
|
{
|
|
if ( !isDefined( str_key ) )
|
|
{
|
|
str_key = "targetname";
|
|
}
|
|
s_warp = getstruct( str_value, str_key );
|
|
self setorigin( s_warp.origin );
|
|
if ( isDefined( s_warp.angles ) )
|
|
{
|
|
self setplayerangles( s_warp.angles );
|
|
}
|
|
}
|