[Buried] Added gsc-tool decompiled GSCs.

This commit is contained in:
JezuzLizard 2022-02-25 22:09:59 -08:00
parent 0d2c068adb
commit 0d8e9c835a
88 changed files with 34601 additions and 36190 deletions

View File

@ -1,12 +1,14 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self setmodel( "c_zom_player_engineer_fb" );
self.voice = "american";
self.skeleton = "base";
self setmodel( "c_zom_player_engineer_fb" );
self.voice = "american";
self.skeleton = "base";
}
precache()
{
precachemodel( "c_zom_player_engineer_fb" );
precachemodel( "c_zom_player_engineer_fb" );
}

View File

@ -1,12 +1,14 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self setmodel( "c_zom_player_farmgirl_fb" );
self.voice = "american";
self.skeleton = "base";
self setmodel( "c_zom_player_farmgirl_fb" );
self.voice = "american";
self.skeleton = "base";
}
precache()
{
precachemodel( "c_zom_player_farmgirl_fb" );
precachemodel( "c_zom_player_farmgirl_fb" );
}

View File

@ -1,12 +1,14 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self setmodel( "c_zom_player_oldman_fb" );
self.voice = "american";
self.skeleton = "base";
self setmodel( "c_zom_player_oldman_fb" );
self.voice = "american";
self.skeleton = "base";
}
precache()
{
precachemodel( "c_zom_player_oldman_fb" );
precachemodel( "c_zom_player_oldman_fb" );
}

View File

@ -1,12 +1,14 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self setmodel( "c_zom_player_reporter_fb" );
self.voice = "american";
self.skeleton = "base";
self setmodel( "c_zom_player_reporter_fb" );
self.voice = "american";
self.skeleton = "base";
}
precache()
{
precachemodel( "c_zom_player_reporter_fb" );
precachemodel( "c_zom_player_reporter_fb" );
}

View File

@ -1,12 +1,14 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self setmodel( "c_zom_zombie_buried_sgirl_player_fb" );
self.voice = "american";
self.skeleton = "base";
self setmodel( "c_zom_zombie_buried_sgirl_player_fb" );
self.voice = "american";
self.skeleton = "base";
}
precache()
{
precachemodel( "c_zom_zombie_buried_sgirl_player_fb" );
precachemodel( "c_zom_zombie_buried_sgirl_player_fb" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_across_120" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_127" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_176" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_190" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_222" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_240" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_48" );
}

View File

@ -0,0 +1,12 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
if ( isdefined( self.isdog ) && self.isdog )
dog_jump_down( 72, 7 );
else
dosimpletraverse( "jump_down_72" );
}

View File

@ -0,0 +1,12 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
if ( isdefined( self.isdog ) && self.isdog )
dog_jump_down( 96, 7 );
else
dosimpletraverse( "jump_down_96" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_startrailing" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_127" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_154" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_222" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_96" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_grabbed_48" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_startrailing" );
}

View File

@ -0,0 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "traverse_48" );
}

View File

@ -1,45 +1,46 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm;
#include maps/mp/zombies/_zm_ai_dogs;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/gametypes_zm/_zm_gametype;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_ai_dogs;
#include maps\mp\zombies\_zm;
main() //checked matches cerberus output
main()
{
maps/mp/gametypes_zm/_zm_gametype::main();
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func;
level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update;
maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" );
maps\mp\gametypes_zm\_zm_gametype::main();
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func;
level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update;
maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" );
}
onprecachegametype() //checked matches cerberus output
onprecachegametype()
{
level.playersuicideallowed = 1;
level.canplayersuicide = ::canplayersuicide;
level.suicide_weapon = "death_self_zm";
precacheitem( "death_self_zm" );
maps/mp/zombies/_zm_ai_dogs::init();
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" );
level.playersuicideallowed = 1;
level.canplayersuicide = ::canplayersuicide;
level.suicide_weapon = "death_self_zm";
precacheitem( "death_self_zm" );
maps\mp\zombies\_zm_ai_dogs::init();
maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" );
}
onstartgametype() //checked matches cerberus output
onstartgametype()
{
maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype();
maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype();
maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
}
zstandard_main() //checked matches cerberus output
zstandard_main()
{
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
if ( level.dog_rounds_allowed )
{
maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds();
}
level thread maps/mp/zombies/_zm::round_start();
level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies();
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
if ( level.dog_rounds_allowed )
maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds();
level thread maps\mp\zombies\_zm::round_start();
level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies();
}

View File

@ -1,51 +1,55 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
register()
{
game[ "teamset" ] = [];
game[ "teamset" ][ "cdc" ] = ::cdc;
game["teamset"] = [];
game["teamset"]["cdc"] = ::cdc;
}
level_init()
{
game[ "allies" ] = "cdc";
game[ "axis" ] = "cia";
setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" );
setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" );
game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH";
game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND";
game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED";
game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED";
game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED";
game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME";
game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS";
game[ "music" ][ "victory_allies" ] = "mus_victory_usa";
game[ "icons" ][ "allies" ] = "faction_cdc";
game[ "colors" ][ "allies" ] = ( 0, 0, 0 );
game[ "voice" ][ "allies" ] = "vox_st6_";
setdvar( "scr_allies", "marines" );
game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH";
game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND";
game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED";
game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED";
game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED";
game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME";
game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS";
game[ "music" ][ "victory_axis" ] = "mus_victory_soviet";
game[ "icons" ][ "axis" ] = "faction_cia";
game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 );
game[ "voice" ][ "axis" ] = "vox_pmc_";
game["allies"] = "cdc";
game["axis"] = "cia";
setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" );
setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" );
game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH";
game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND";
game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED";
game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED";
game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED";
game["strings"]["allies_name"] = &"ZM_CDC_NAME";
game["music"]["spawn_allies"] = "SPAWN_OPS";
game["music"]["victory_allies"] = "mus_victory_usa";
game["icons"]["allies"] = "faction_cdc";
game["colors"]["allies"] = ( 0, 0, 0 );
game["voice"]["allies"] = "vox_st6_";
setdvar( "scr_allies", "marines" );
game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH";
game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND";
game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED";
game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED";
game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED";
game["strings"]["axis_name"] = &"ZM_CIA_NAME";
game["music"]["spawn_axis"] = "SPAWN_RUS";
game["music"]["victory_axis"] = "mus_victory_soviet";
game["icons"]["axis"] = "faction_cia";
game["colors"]["axis"] = ( 0.65, 0.57, 0.41 );
game["voice"]["axis"] = "vox_pmc_";
}
cdc()
{
allies();
axis();
allies();
axis();
}
allies()
{
}
axis()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,184 +1,195 @@
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_globallogic_score;
init()
{
if ( !is_gametype_active( "zclassic" ) )
{
return;
}
level thread achievement_buried_sidequest();
level thread achievement_im_your_huckleberry();
level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect );
if ( !is_gametype_active( "zclassic" ) )
return;
level thread achievement_buried_sidequest();
level thread achievement_im_your_huckleberry();
level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect );
}
achievement_sound_func( achievement_name_lower )
{
if ( !sessionmodeisonlinegame() )
{
return;
}
self thread do_player_general_vox( "general", "achievement" );
if ( !sessionmodeisonlinegame() )
return;
self thread do_player_general_vox( "general", "achievement" );
}
init_player_achievement_stats()
{
if ( !is_gametype_active( "zclassic" ) )
{
return;
}
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_buried_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_ectoplasmic_residue", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_im_your_huckleberry", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_death_from_below", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_candygram", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_awaken_the_gazebo", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_revisionist_historian", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_mazed_and_confused", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_fsirt_against_the_wall", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_when_the_revolution_comes", 0 );
if ( !is_gametype_active( "zclassic" ) )
return;
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_buried_sidequest", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_ectoplasmic_residue", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_im_your_huckleberry", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_death_from_below", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_candygram", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_awaken_the_gazebo", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_revisionist_historian", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_mazed_and_confused", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_fsirt_against_the_wall", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_when_the_revolution_comes", 0 );
}
onplayerconnect()
{
self thread achievement_ectoplasmic_residue();
self thread achievement_death_from_below();
self thread achievement_candygram();
self thread achievement_awaken_the_gazebo();
self thread achievement_revisionist_historian();
self thread achievement_mazed_and_confused();
self thread achievement_fsirt_against_the_wall();
self thread achievement_when_the_revolution_comes();
self thread achievement_ectoplasmic_residue();
self thread achievement_death_from_below();
self thread achievement_candygram();
self thread achievement_awaken_the_gazebo();
self thread achievement_revisionist_historian();
self thread achievement_mazed_and_confused();
self thread achievement_fsirt_against_the_wall();
self thread achievement_when_the_revolution_comes();
}
achievement_buried_sidequest()
{
level endon( "end_game" );
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
level endon( "end_game" );
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
/#
#/
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
}
achievement_im_your_huckleberry()
{
level endon( "end_game" );
num_barriers_broken = 0;
while ( 1 )
{
level waittill( "sloth_breaks_barrier" );
num_barriers_broken++;
if ( num_barriers_broken >= 8 )
{
break;
}
else
{
}
}
level endon( "end_game" );
num_barriers_broken = 0;
while ( true )
{
level waittill( "sloth_breaks_barrier" );
num_barriers_broken++;
if ( num_barriers_broken >= 8 )
break;
}
/#
#/
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
}
achievement_ectoplasmic_residue()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_received_ghost_round_free_perk" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_received_ghost_round_free_perk" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
}
achievement_death_from_below()
{
level endon( "end_game" );
self endon( "disconnect" );
num_subwoofer_deaths = 0;
while ( 1 )
{
self waittill( "zombie_subwoofer_kill" );
num_subwoofer_deaths++;
if ( num_subwoofer_deaths >= 10 )
{
break;
}
else
{
}
}
level endon( "end_game" );
self endon( "disconnect" );
num_subwoofer_deaths = 0;
while ( true )
{
self waittill( "zombie_subwoofer_kill" );
num_subwoofer_deaths++;
if ( num_subwoofer_deaths >= 10 )
break;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
}
achievement_candygram()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_gives_sloth_candy" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_gives_sloth_candy" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
}
achievement_awaken_the_gazebo()
{
level endon( "end_game" );
self endon( "disconnect" );
level endon( "bank_withdrawal" );
level endon( "bank_teller_used" );
level endon( "weapon_locker_grab" );
self waittill( "pap_taken" );
if ( level.round_number > 1 )
{
return;
}
level endon( "end_game" );
self endon( "disconnect" );
level endon( "bank_withdrawal" );
level endon( "bank_teller_used" );
level endon( "weapon_locker_grab" );
self waittill( "pap_taken" );
if ( level.round_number > 1 )
return;
/#
#/
self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" );
self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" );
}
achievement_revisionist_historian()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_activates_timebomb" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_activates_timebomb" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
}
achievement_mazed_and_confused()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_stayed_in_maze_for_entire_high_level_round" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_stayed_in_maze_for_entire_high_level_round" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" );
self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" );
}
achievement_fsirt_against_the_wall()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_upgraded_lsat_from_wall" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_upgraded_lsat_from_wall" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
}
achievement_when_the_revolution_comes()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_used_fountain_teleporter" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_used_fountain_teleporter" );
/#
#/
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,428 +1,393 @@
#include maps/mp/zombies/_zm_ai_basic;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_ai_basic;
zombie_tracking_init()
{
level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{
level.zombie_tracking_dist = 1600;
}
if ( !isDefined( level.zombie_tracking_high ) )
{
level.zombie_tracking_high = 600;
}
if ( !isDefined( level.zombie_tracking_wait ) )
{
level.zombie_tracking_wait = 0,4;
}
for ( ;; )
{
while ( 1 )
{
zombies = get_round_enemy_array();
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait level.zombie_tracking_wait;
}
}
else i = 0;
while ( i < zombies.size )
{
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking && isDefined( zombies[ i ].ignoreall ) && !zombies[ i ].ignoreall )
{
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
i++;
}
wait level.zombie_tracking_wait;
}
level.zombie_respawned_health = [];
if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1600;
if ( !isdefined( level.zombie_tracking_high ) )
level.zombie_tracking_high = 600;
if ( !isdefined( level.zombie_tracking_wait ) )
level.zombie_tracking_wait = 0.4;
while ( true )
{
zombies = get_round_enemy_array();
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait( level.zombie_tracking_wait );
continue;
}
else
{
for ( i = 0; i < zombies.size; i++ )
{
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) && ( isdefined( zombies[i].ignoreall ) && !zombies[i].ignoreall ) )
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
}
wait( level.zombie_tracking_wait );
}
}
delete_zombie_noone_looking( how_close, how_high )
{
self endon( "death" );
if ( self can_be_deleted_from_buried_special_zones() )
{
self.inview = 0;
self.player_close = 0;
}
else
{
if ( !isDefined( how_close ) )
{
how_close = 1000;
}
if ( !isDefined( how_high ) )
{
how_high = 500;
}
if ( isDefined( self.has_legs ) && !self.has_legs )
{
how_close *= 1,5;
}
distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) )
{
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
}
self.inview = 0;
self.player_close = 0;
players = get_players();
_a98 = players;
_k98 = getFirstArrayKey( _a98 );
while ( isDefined( _k98 ) )
{
player = _a98[ _k98 ];
if ( player.sessionstate == "spectator" )
{
}
else if ( isDefined( player.laststand ) && player.laststand && isDefined( self.favoriteenemy ) && self.favoriteenemy == player )
{
if ( !self can_zombie_see_any_player() )
{
self.favoriteenemy = undefined;
self.zombie_path_bad = 1;
self thread escaped_zombies_cleanup();
}
}
if ( isDefined( level.only_track_targeted_players ) )
{
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != player )
{
}
}
else
{
can_be_seen = self player_can_see_me( player );
distance_squared = distancesquared( self.origin, player.origin );
if ( can_be_seen && distance_squared < too_far_dist )
{
self.inview++;
}
if ( distance_squared < distance_squared_check && abs( self.origin[ 2 ] - player.origin[ 2 ] ) < how_high )
{
self.player_close++;
}
}
_k98 = getNextArrayKey( _a98, _k98 );
}
}
wait 0,1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
{
return;
}
if ( isDefined( self.electrified ) && self.electrified == 1 )
{
return;
}
zombies = getaiarray( "axis" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
}
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
if ( isDefined( self.anchor ) )
{
self.anchor delete();
}
self delete();
recalc_zombie_array();
}
self endon( "death" );
if ( self can_be_deleted_from_buried_special_zones() )
{
self.inview = 0;
self.player_close = 0;
}
else
{
if ( !isdefined( how_close ) )
how_close = 1000;
if ( !isdefined( how_high ) )
how_high = 500;
if ( !( isdefined( self.has_legs ) && self.has_legs ) )
how_close *= 1.5;
distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0;
self.player_close = 0;
players = get_players();
foreach ( player in players )
{
if ( player.sessionstate == "spectator" )
continue;
if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
{
if ( !self can_zombie_see_any_player() )
{
self.favoriteenemy = undefined;
self.zombie_path_bad = 1;
self thread escaped_zombies_cleanup();
}
}
if ( isdefined( level.only_track_targeted_players ) )
{
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
continue;
}
can_be_seen = self player_can_see_me( player );
distance_squared = distancesquared( self.origin, player.origin );
if ( can_be_seen && distance_squared < too_far_dist )
self.inview++;
if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
self.player_close++;
}
}
wait 0.1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return;
if ( isdefined( self.electrified ) && self.electrified == 1 )
return;
zombies = getaiarray( "axis" );
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
{
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
}
}
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
if ( isdefined( self.anchor ) )
self.anchor delete();
self delete();
recalc_zombie_array();
}
}
player_can_see_me( player )
{
playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{
anglefromcenter = 0;
}
else if ( forwarddotbanzai <= -1 )
{
anglefromcenter = 180;
}
else
{
anglefromcenter = acos( forwarddotbanzai );
}
playerfov = getDvarFloat( "cg_fov" );
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 )
{
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
playerangles = player getplayerangles();
playerforwardvec = anglestoforward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
anglefromcenter = 0;
else if ( forwarddotbanzai <= -1 )
anglefromcenter = 180;
else
anglefromcenter = acos( forwarddotbanzai );
playerfov = getdvarfloat( "cg_fov" );
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
if ( banzaivsplayerfovbuffer <= 0 )
banzaivsplayerfovbuffer = 0.2;
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
return playercanseeme;
}
can_be_deleted_from_buried_special_zones()
{
if ( self can_be_deleted_from_start_area() )
{
return 1;
}
if ( self can_be_deleted_from_maze_area() )
{
return 1;
}
return 0;
if ( self can_be_deleted_from_start_area() )
return true;
if ( self can_be_deleted_from_maze_area() )
return true;
return false;
}
can_be_deleted_from_start_area()
{
start_zones = [];
start_zones[ start_zones.size ] = "zone_start";
start_zones[ start_zones.size ] = "zone_start_lower";
return self can_be_deleted_from_area( start_zones );
start_zones = [];
start_zones[start_zones.size] = "zone_start";
start_zones[start_zones.size] = "zone_start_lower";
return self can_be_deleted_from_area( start_zones );
}
can_be_deleted_from_maze_area()
{
maze_zones = [];
maze_zones[ maze_zones.size ] = "zone_mansion_backyard";
maze_zones[ maze_zones.size ] = "zone_maze";
maze_zones[ maze_zones.size ] = "zone_maze_staircase";
return self can_be_deleted_from_area( maze_zones );
maze_zones = [];
maze_zones[maze_zones.size] = "zone_mansion_backyard";
maze_zones[maze_zones.size] = "zone_maze";
maze_zones[maze_zones.size] = "zone_maze_staircase";
return self can_be_deleted_from_area( maze_zones );
}
can_be_deleted_from_area( zone_names )
{
self_in_zone = 0;
_a265 = zone_names;
_k265 = getFirstArrayKey( _a265 );
while ( isDefined( _k265 ) )
{
zone_name = _a265[ _k265 ];
if ( isDefined( level.zones[ zone_name ] ) && isDefined( level.zones[ zone_name ].is_occupied ) && level.zones[ zone_name ].is_occupied )
{
return 0;
}
if ( !self_in_zone && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone_name ) )
{
self_in_zone = 1;
}
_k265 = getNextArrayKey( _a265, _k265 );
}
if ( self_in_zone )
{
return 1;
}
return 0;
self_in_zone = 0;
foreach ( zone_name in zone_names )
{
if ( isdefined( level.zones[zone_name] ) && ( isdefined( level.zones[zone_name].is_occupied ) && level.zones[zone_name].is_occupied ) )
return false;
if ( !self_in_zone && self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone_name ) )
self_in_zone = 1;
}
if ( self_in_zone )
return true;
return false;
}
escaped_zombies_cleanup_init()
{
self endon( "death" );
self.zombie_path_bad = 0;
while ( 1 )
{
if ( !self.zombie_path_bad )
{
self waittill( "bad_path" );
}
found_player = undefined;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( is_player_valid( players[ i ] ) && !is_true( players[ i ].is_in_ghost_zone ) && self maymovetopoint( players[ i ].origin, 1 ) )
{
self.favoriteenemy = players[ i ];
found_player = 1;
i++;
continue;
}
i++;
}
n_delete_distance = 800;
n_delete_height = 300;
if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area )
{
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1;
self escaped_zombies_cleanup();
}
wait 0,1;
}
self endon( "death" );
self.zombie_path_bad = 0;
while ( true )
{
if ( !self.zombie_path_bad )
self waittill( "bad_path" );
found_player = undefined;
players = get_players();
for ( i = 0; i < players.size; i++ )
{
if ( is_player_valid( players[i] ) && !is_true( players[i].is_in_ghost_zone ) && self maymovetopoint( players[i].origin, 1 ) )
{
self.favoriteenemy = players[i];
found_player = 1;
continue;
}
}
n_delete_distance = 800;
n_delete_height = 300;
if ( !isdefined( found_player ) && ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) )
{
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1;
self escaped_zombies_cleanup();
}
wait 0.1;
}
}
escaped_zombies_cleanup()
{
self endon( "death" );
s_escape = self get_escape_position();
self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" );
if ( isDefined( s_escape ) )
{
self setgoalpos( s_escape.origin );
self thread check_player_available();
self waittill_any( "goal", "reaquire_player" );
}
self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0,1;
if ( !self.zombie_path_bad )
{
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
}
self endon( "death" );
s_escape = self get_escape_position();
self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" );
if ( isdefined( s_escape ) )
{
self setgoalpos( s_escape.origin );
self thread check_player_available();
self waittill_any( "goal", "reaquire_player" );
}
self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0.1;
if ( !self.zombie_path_bad )
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
}
get_escape_position()
{
self endon( "death" );
str_zone = get_current_zone();
if ( isDefined( str_zone ) )
{
a_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations );
}
return s_farthest;
self endon( "death" );
str_zone = get_current_zone();
if ( isdefined( str_zone ) )
{
a_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations );
}
return s_farthest;
}
check_player_available()
{
self notify( "_check_player_available" );
self endon( "_check_player_available" );
self endon( "death" );
self endon( "goal" );
while ( self.zombie_path_bad )
{
if ( self can_zombie_see_any_player() )
{
self notify( "reaquire_player" );
return;
}
wait randomfloatrange( 0,2, 0,5 );
}
self notify( "reaquire_player" );
self notify( "_check_player_available" );
self endon( "_check_player_available" );
self endon( "death" );
self endon( "goal" );
while ( self.zombie_path_bad )
{
if ( self can_zombie_see_any_player() )
{
self notify( "reaquire_player" );
return;
}
wait( randomfloatrange( 0.2, 0.5 ) );
}
self notify( "reaquire_player" );
}
can_zombie_path_to_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( !is_player_valid( a_players[ i ] ) )
{
i++;
continue;
}
else if ( is_true( a_players[ i ].is_in_ghost_zone ) )
{
i++;
continue;
}
else
{
if ( findpath( self.origin, a_players[ i ].origin ) )
{
return 1;
}
}
i++;
}
return 0;
a_players = get_players();
for ( i = 0; i < a_players.size; i++ )
{
if ( !is_player_valid( a_players[i] ) )
continue;
if ( is_true( a_players[i].is_in_ghost_zone ) )
continue;
if ( findpath( self.origin, a_players[i].origin ) )
return true;
}
return false;
}
can_zombie_see_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( !is_player_valid( a_players[ i ] ) )
{
i++;
continue;
}
else
{
path_length = 0;
if ( !is_true( a_players[ i ].is_in_ghost_zone ) )
{
path_length = self calcpathlength( a_players[ i ].origin );
}
if ( self maymovetopoint( a_players[ i ].origin, 1 ) || path_length != 0 )
{
return 1;
}
}
i++;
}
return 0;
a_players = get_players();
for ( i = 0; i < a_players.size; i++ )
{
if ( !is_player_valid( a_players[i] ) )
continue;
path_length = 0;
if ( !is_true( a_players[i].is_in_ghost_zone ) )
path_length = self calcpathlength( a_players[i].origin );
if ( self maymovetopoint( a_players[i].origin, 1 ) || path_length != 0 )
return true;
}
return false;
}
get_adjacencies_to_zone( str_zone )
{
a_adjacencies = [];
a_adjacencies[ 0 ] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones );
i = 0;
while ( i < a_adjacent_zones.size )
{
if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected )
{
a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ];
}
i++;
}
return a_adjacencies;
a_adjacencies = [];
a_adjacencies[0] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
for ( i = 0; i < a_adjacent_zones.size; i++ )
{
if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
}
return a_adjacencies;
}
get_dog_locations_in_zones( a_zones )
{
a_dog_locations = [];
_a479 = a_zones;
_k479 = getFirstArrayKey( _a479 );
while ( isDefined( _k479 ) )
{
zone = _a479[ _k479 ];
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
_k479 = getNextArrayKey( _a479, _k479 );
}
return a_dog_locations;
a_dog_locations = [];
foreach ( zone in a_zones )
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
return a_dog_locations;
}
get_farthest_dog_location( a_dog_locations )
{
n_farthest_index = 0;
n_distance_farthest = 0;
i = 0;
while ( i < a_dog_locations.size )
{
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin );
if ( n_distance_sq > n_distance_farthest )
{
n_distance_farthest = n_distance_sq;
n_farthest_index = i;
}
i++;
}
return a_dog_locations[ n_farthest_index ];
n_farthest_index = 0;
n_distance_farthest = 0;
for ( i = 0; i < a_dog_locations.size; i++ )
{
n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
if ( n_distance_sq > n_distance_farthest )
{
n_distance_farthest = n_distance_sq;
n_farthest_index = i;
}
}
return a_dog_locations[n_farthest_index];
}

View File

@ -1,222 +1,219 @@
#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" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_perks;
#include maps\mp\zombies\_zm_powerups;
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();
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();
level thread devgui_support_ee();
#/
flag_init( "player_piano_song_active" );
flag_init( "player_piano_song_active" );
}
init_ee_ghost_piano_flags()
{
self ent_flag_init( "ee_standing_behind_chalk_line" );
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" );
}
}
}
self setcandamage( 1 );
while ( true )
{
self waittill( "damage", e_inflictor, str_weapon_name );
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", e_inflictor );
}
}
}
is_ballistic_knife_variant( str_weapon )
{
return issubstr( str_weapon, "knife_ballistic_" );
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 );
}
}
while ( true )
{
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" );
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" );
}
#using_animtree("fxanim_props_dlc3");
player_piano_starts()
{
/#
iprintln( "player piano tune song start" );
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 );
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" );
iprintln( "player piano song done" );
#/
level setclientfield( "mansion_piano_play", 0 );
level setclientfield( "saloon_piano_play", 0 );
flag_clear( "player_piano_song_active" );
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();
}
while ( true )
{
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();
}
}
#using_animtree("zm_buried_ghost");
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 );
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" );
iprintln( "ghost piano player spawned" );
#/
return e_temp;
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" );
}
t_use = getent( "ee_ghost_piano_mansion_use_trigger", "targetname" );
t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 );
t_use setinvisibletoall();
while ( true )
{
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 );
}
player endon( "death_or_disconnect" );
level endon( "ghost_piano_reward_unavailable" );
do
self waittill( "trigger", user );
while ( user != player || player.score < 10 || !is_player_valid( player ) );
if ( !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 );
}
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!!" );
iprintln( "player got reward!!" );
#/
}
has_player_received_reward()
{
return is_true( self.got_easter_egg_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();
self setclientfield( "ghost_fx", 5 );
self playsound( "zmb_ai_ghost_death" );
wait_network_frame();
self delete();
/#
iprintln( "ghost piano player deleted" );
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" );
}
}
}
while ( true )
{
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" );
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 );
}
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 );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,297 +1,287 @@
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_ai_ghost;
#include maps/mp/zm_buried_classic;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zm_buried_classic;
#include maps\mp\zombies\_zm_ai_ghost;
#include maps\mp\zombies\_zm_stats;
init_fountain()
{
flag_init( "courtyard_fountain_broken" );
flag_init( "maze_fountain_broken" );
flag_init( "fountain_transport_active" );
level._effect[ "fountain_break" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_break" );
level._effect[ "fountain_spray" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect[ "fountain_teleport" ] = loadfx( "maps/zombie_buried/fx_buried_teleport_flash" );
level thread fountain_setup();
level thread maze_fountain_collmap();
flag_init( "courtyard_fountain_broken" );
flag_init( "maze_fountain_broken" );
flag_init( "fountain_transport_active" );
level._effect["fountain_break"] = loadfx( "maps/zombie_buried/fx_buried_fountain_break" );
level._effect["fountain_spray"] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect["fountain_teleport"] = loadfx( "maps/zombie_buried/fx_buried_teleport_flash" );
level thread fountain_setup();
level thread maze_fountain_collmap();
}
fountain_setup()
{
flag_wait( "initial_blackscreen_passed" );
fountain_debug_print( "fountain scripts running" );
level thread set_flag_on_notify( "courtyard_fountain_open", "courtyard_fountain_broken" );
level thread sloth_fountain_think();
level thread maze_fountain_think();
level thread fountain_transport_think();
flag_wait( "initial_blackscreen_passed" );
fountain_debug_print( "fountain scripts running" );
level thread set_flag_on_notify( "courtyard_fountain_open", "courtyard_fountain_broken" );
level thread sloth_fountain_think();
level thread maze_fountain_think();
level thread fountain_transport_think();
/#
level thread debug_warp_player_to_fountain();
level thread debug_warp_player_to_fountain();
#/
}
maze_fountain_collmap()
{
collmap = getentarray( "maze_fountain_collmap", "targetname" );
flag_wait( "maze_fountain_broken" );
array_thread( collmap, ::self_delete );
collmap = getentarray( "maze_fountain_collmap", "targetname" );
flag_wait( "maze_fountain_broken" );
array_thread( collmap, ::self_delete );
}
sloth_fountain_think()
{
flag_wait( "courtyard_fountain_broken" );
level setclientfield( "sloth_fountain_start", 1 );
s_courtyard_fountain = getstruct( "courtyard_fountain_struct", "targetname" );
if ( isDefined( s_courtyard_fountain ) )
{
sound_offset = vectorScale( ( 0, 0, 1 ), 100 );
sound_ent = spawn( "script_origin", s_courtyard_fountain.origin + sound_offset );
playfx( level._effect[ "fx_buried_fountain_spray" ], s_courtyard_fountain.origin );
playfx( level._effect[ "fountain_break" ], s_courtyard_fountain.origin );
sound_ent playloopsound( "zmb_fountain_spray", 0,2 );
}
show_maze_fountain_water();
fountain_debug_print( "courtyard_fountain_broken" );
flag_wait( "courtyard_fountain_broken" );
level setclientfield( "sloth_fountain_start", 1 );
s_courtyard_fountain = getstruct( "courtyard_fountain_struct", "targetname" );
if ( isdefined( s_courtyard_fountain ) )
{
sound_offset = vectorscale( ( 0, 0, 1 ), 100.0 );
sound_ent = spawn( "script_origin", s_courtyard_fountain.origin + sound_offset );
playfx( level._effect["fx_buried_fountain_spray"], s_courtyard_fountain.origin );
playfx( level._effect["fountain_break"], s_courtyard_fountain.origin );
sound_ent playloopsound( "zmb_fountain_spray", 0.2 );
}
show_maze_fountain_water();
fountain_debug_print( "courtyard_fountain_broken" );
}
set_flag_on_notify( notifystr, strflag )
{
if ( notifystr != "death" )
{
self endon( "death" );
}
if ( !level.flag[ strflag ] )
{
self waittill( notifystr );
flag_set( strflag );
}
if ( notifystr != "death" )
self endon( "death" );
if ( !level.flag[strflag] )
{
self waittill( notifystr );
flag_set( strflag );
}
}
maze_fountain_think()
{
hide_maze_fountain_water();
wait_for_maze_fountain_to_be_destroyed();
destroy_maze_fountain();
flag_wait( "courtyard_fountain_broken" );
flag_set( "fountain_transport_active" );
hide_maze_fountain_water();
wait_for_maze_fountain_to_be_destroyed();
destroy_maze_fountain();
flag_wait( "courtyard_fountain_broken" );
flag_set( "fountain_transport_active" );
}
hide_maze_fountain_water()
{
t_water = getent( "maze_fountain_water_trigger", "targetname" );
t_water enablelinkto();
m_water = getent( "maze_fountain_water", "targetname" );
t_water linkto( m_water );
m_water movez( -475, 0,05 );
t_water = getent( "maze_fountain_water_trigger", "targetname" );
t_water enablelinkto();
m_water = getent( "maze_fountain_water", "targetname" );
t_water linkto( m_water );
m_water movez( -475, 0.05 );
}
show_maze_fountain_water()
{
m_water = getent( "maze_fountain_water", "targetname" );
m_water movez( 398, 6 );
m_water ghost();
fountain_debug_print( "maze water ready" );
m_water = getent( "maze_fountain_water", "targetname" );
m_water movez( 398, 6 );
m_water ghost();
fountain_debug_print( "maze water ready" );
}
wait_for_maze_fountain_to_be_destroyed()
{
/#
level endon( "_destroy_maze_fountain" );
level endon( "_destroy_maze_fountain" );
#/
t_damage = getent( "maze_fountain_trigger", "targetname" );
health = 1000;
while ( health > 0 )
{
t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( damage < 50 )
{
damage = 0;
}
if ( isDefined( type ) && type != "MOD_EXPLOSIVE" && type != "MOD_EXPLOSIVE_SPLASH" && type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" )
{
health -= damage;
}
}
t_damage = getent( "maze_fountain_trigger", "targetname" );
for ( health = 1000; health > 0; health -= damage )
{
t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
asm_cond( damage < 50, loc_E9C );
damage = 0;
asm_cond( isdefined( type ) && type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH", loc_EE6 );
}
}
destroy_maze_fountain()
{
s_fountain = getstruct( "maze_fountain_struct", "targetname" );
level setclientfield( "maze_fountain_start", 1 );
if ( isDefined( s_fountain ) )
{
playfx( level._effect[ "fountain_break" ], s_fountain.origin );
}
s_fountain_clip = getent( "maze_fountain_clip", "targetname" );
s_fountain_clip delete();
flag_set( "maze_fountain_broken" );
s_fountain = getstruct( "maze_fountain_struct", "targetname" );
level setclientfield( "maze_fountain_start", 1 );
if ( isdefined( s_fountain ) )
playfx( level._effect["fountain_break"], s_fountain.origin );
s_fountain_clip = getent( "maze_fountain_clip", "targetname" );
s_fountain_clip delete();
flag_set( "maze_fountain_broken" );
}
fountain_transport_think()
{
t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
while ( 1 )
{
t_transporter waittill( "trigger", player );
if ( !isDefined( player.is_in_fountain_transport_trigger ) || !player.is_in_fountain_transport_trigger )
{
player.is_in_fountain_transport_trigger = 1;
if ( flag( "fountain_transport_active" ) )
{
player thread transport_player_to_start_zone();
break;
}
else
{
player thread delay_transport_check();
}
}
}
t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
while ( true )
{
t_transporter waittill( "trigger", player );
if ( !isdefined( player.is_in_fountain_transport_trigger ) || !player.is_in_fountain_transport_trigger )
{
player.is_in_fountain_transport_trigger = 1;
if ( flag( "fountain_transport_active" ) )
player thread transport_player_to_start_zone();
else
player thread delay_transport_check();
}
}
}
delay_transport_check()
{
self endon( "death" );
self endon( "bled_out" );
wait 1;
self.is_in_fountain_transport_trigger = 0;
self endon( "death" );
self endon( "bled_out" );
wait 1;
self.is_in_fountain_transport_trigger = 0;
}
transport_player_to_start_zone()
{
self endon( "death_or_disconnect" );
fountain_debug_print( "transport player!" );
if ( !isDefined( level._fountain_transporter ) )
{
level._fountain_transporter = spawnstruct();
level._fountain_transporter.index = 0;
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
}
self playsoundtoplayer( "zmb_buried_teleport", self );
self play_teleport_fx();
self flash_screen_white();
wait_network_frame();
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
{
level._fountain_transporter.index = 0;
}
tries = 0;
while ( positionwouldtelefrag( level._fountain_transporter.end_points[ level._fountain_transporter.index ].origin ) )
{
tries++;
if ( tries >= 4 )
{
tries = 0;
wait 0,05;
}
level._fountain_transporter.index++;
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
{
level._fountain_transporter.index = 0;
}
}
self setorigin( level._fountain_transporter.end_points[ level._fountain_transporter.index ].origin );
self setplayerangles( level._fountain_transporter.end_points[ level._fountain_transporter.index ].angles );
level._fountain_transporter.index++;
wait_network_frame();
self play_teleport_fx();
self thread flash_screen_fade_out();
self maps/mp/zm_buried_classic::buried_set_start_area_lighting();
self thread maps/mp/zombies/_zm_ai_ghost::behave_after_fountain_transport( self );
self maps/mp/zombies/_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 );
self maps/mp/zombies/_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
self notify( "player_used_fountain_teleporter" );
wait_network_frame();
wait_network_frame();
self.is_in_fountain_transport_trigger = 0;
self endon( "death_or_disconnect" );
fountain_debug_print( "transport player!" );
if ( !isdefined( level._fountain_transporter ) )
{
level._fountain_transporter = spawnstruct();
level._fountain_transporter.index = 0;
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
}
self playsoundtoplayer( "zmb_buried_teleport", self );
self play_teleport_fx();
self flash_screen_white();
wait_network_frame();
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
level._fountain_transporter.index = 0;
tries = 0;
while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) )
{
tries++;
if ( tries >= 4 )
{
tries = 0;
wait 0.05;
}
level._fountain_transporter.index++;
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
level._fountain_transporter.index = 0;
}
self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin );
self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles );
level._fountain_transporter.index++;
wait_network_frame();
self play_teleport_fx();
self thread flash_screen_fade_out();
self maps\mp\zm_buried_classic::buried_set_start_area_lighting();
self thread maps\mp\zombies\_zm_ai_ghost::behave_after_fountain_transport( self );
self maps\mp\zombies\_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 );
self maps\mp\zombies\_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
self notify( "player_used_fountain_teleporter" );
wait_network_frame();
wait_network_frame();
self.is_in_fountain_transport_trigger = 0;
}
play_teleport_fx()
{
playfx( level._effect[ "fountain_teleport" ], self gettagorigin( "J_SpineLower" ) );
playfx( level._effect["fountain_teleport"], self gettagorigin( "J_SpineLower" ) );
}
flash_screen_white()
{
self endon( "death_or_disconnect" );
self.hud_transporter_flash = self create_client_hud_elem();
self.hud_transporter_flash fadeovertime( 0,2 );
self.hud_transporter_flash.alpha = 1;
wait 0,2;
self endon( "death_or_disconnect" );
self.hud_transporter_flash = self create_client_hud_elem();
self.hud_transporter_flash fadeovertime( 0.2 );
self.hud_transporter_flash.alpha = 1;
wait 0.2;
}
flash_screen_fade_out()
{
self.hud_transporter_flash fadeovertime( 0,2 );
self.hud_transporter_flash.alpha = 0;
wait 0,2;
self.hud_transporter_flash destroy();
self.hud_transporter_flash = undefined;
self.hud_transporter_flash fadeovertime( 0.2 );
self.hud_transporter_flash.alpha = 0;
wait 0.2;
self.hud_transporter_flash destroy();
self.hud_transporter_flash = undefined;
}
create_client_hud_elem()
{
hud_elem = newclienthudelem( self );
hud_elem.x = 0;
hud_elem.y = 0;
hud_elem.horzalign = "fullscreen";
hud_elem.vertalign = "fullscreen";
hud_elem.foreground = 1;
hud_elem.alpha = 0;
hud_elem.hidewheninmenu = 0;
hud_elem.shader = "white";
hud_elem setshader( "white", 640, 480 );
return hud_elem;
hud_elem = newclienthudelem( self );
hud_elem.x = 0;
hud_elem.y = 0;
hud_elem.horzalign = "fullscreen";
hud_elem.vertalign = "fullscreen";
hud_elem.foreground = 1;
hud_elem.alpha = 0;
hud_elem.hidewheninmenu = 0;
hud_elem.shader = "white";
hud_elem setshader( "white", 640, 480 );
return hud_elem;
}
debug_warp_player_to_fountain()
{
while ( 1 )
{
str_notify = level waittill_any_return( "warp_player_to_maze_fountain", "warp_player_to_courtyard_fountain" );
if ( str_notify == "warp_player_to_maze_fountain" )
{
str_warp_point = "teleport_player_to_maze_fountain";
}
else
{
if ( str_notify == "warp_player_to_courtyard_fountain" )
{
str_warp_point = "teleport_player_to_courtyard_fountain";
}
}
_a332 = get_players();
_k332 = getFirstArrayKey( _a332 );
while ( isDefined( _k332 ) )
{
player = _a332[ _k332 ];
_warp_player_to_maze_fountain( player, str_warp_point );
wait 0,25;
_k332 = getNextArrayKey( _a332, _k332 );
}
}
while ( true )
{
str_notify = level waittill_any_return( "warp_player_to_maze_fountain", "warp_player_to_courtyard_fountain" );
if ( str_notify == "warp_player_to_maze_fountain" )
str_warp_point = "teleport_player_to_maze_fountain";
else if ( str_notify == "warp_player_to_courtyard_fountain" )
str_warp_point = "teleport_player_to_courtyard_fountain";
foreach ( player in get_players() )
{
_warp_player_to_maze_fountain( player, str_warp_point );
wait 0.25;
}
}
}
_warp_player_to_maze_fountain( player, str_teleport_point )
{
fountain_debug_print( "teleporting player to " + str_teleport_point );
s_warp = getstruct( str_teleport_point, "targetname" );
origin = s_warp.origin;
while ( positionwouldtelefrag( origin ) )
{
wait 0,05;
origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 );
}
player setorigin( origin );
player setplayerangles( s_warp.angles );
fountain_debug_print( "teleporting player to " + str_teleport_point );
s_warp = getstruct( str_teleport_point, "targetname" );
for ( origin = s_warp.origin; positionwouldtelefrag( origin ); origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 ) )
wait 0.05;
player setorigin( origin );
player setplayerangles( s_warp.angles );
}
fountain_debug_print( str_text )
{
/#
if ( getDvarInt( #"AE3F04F6" ) > 0 )
{
iprintlnbold( str_text );
if ( getdvarint( _hash_AE3F04F6 ) > 0 )
iprintlnbold( str_text );
#/
}
}

View File

@ -1,150 +1,156 @@
#include maps/mp/_utility;
#using_animtree( "fxanim_props_dlc3" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\createfx\zm_buried_fx;
main()
{
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps/mp/createfx/zm_buried_fx::main();
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps\mp\createfx\zm_buried_fx::main();
}
precache_scripted_fx()
{
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect[ "orange_eyes" ] = loadfx( "misc/fx_zombie_eye_single" );
level._effect[ "player_possessed_eyes" ] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" );
gametype = getDvar( "ui_gametype" );
if ( gametype == "zcleansed" )
{
level._effect[ "blue_eyes_player" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" );
level._effect[ "lava_burning" ] = loadfx( "env/fire/fx_fire_lava_player_torso" );
}
if ( isDefined( 0 ) && 0 )
{
level._effect[ "player_3rd_spotlight_lite" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_lite" );
level._effect[ "player_3rd_spotlight_med" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_med" );
level._effect[ "player_3rd_spotlight_high" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_hvy" );
level._effect[ "oillamp" ] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern" );
}
level._effect[ "booze_candy_spawn" ] = loadfx( "maps/zombie_buried/fx_buried_booze_candy_spawn" );
level._effect[ "crusher_sparks" ] = loadfx( "maps/zombie_buried/fx_buried_crusher_sparks" );
level._effect[ "rise_burst_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_billow_body" );
level._effect[ "rise_billow_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_burst_hand" );
level._effect[ "rise_dust_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_dustfall_body" );
level._effect[ "fx_buried_key_glint" ] = loadfx( "maps/zombie_buried/fx_buried_key_glint" );
level._effect[ "sq_glow" ] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern_ghost" );
level._effect[ "vulture_fx_wisp" ] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_center" );
level._effect[ "vulture_fx_wisp_orb" ] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_orbit" );
level._effect[ "fx_wisp_m" ] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_os" );
level._effect[ "fx_wisp_lg_m" ] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_lg_os" );
level._effect[ "sq_bulb_blue" ] = loadfx( "maps/zombie_buried/fx_buried_eg_blu" );
level._effect[ "sq_bulb_orange" ] = loadfx( "maps/zombie_buried/fx_buried_eg_orng" );
level._effect[ "sq_bulb_green" ] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_green" );
level._effect[ "sq_bulb_yellow" ] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_yellow" );
level._effect[ "sq_ether_amp_trail" ] = loadfx( "maps/zombie_buried/fx_buried_ether_amp_trail" );
level._effect[ "sq_tower_r" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_blue" );
level._effect[ "sq_tower_m" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_orange" );
level._effect[ "sq_tower_bolts" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_bolts" );
level._effect[ "sq_spark" ] = loadfx( "maps/zombie_buried/fx_buried_spark_gen" );
level._effect[ "sq_spawn" ] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" );
level._effect[ "sq_vulture_orange_eye_glow" ] = loadfx( "misc/fx_zombie_eye_side_quest" );
level._effect["switch_sparks"] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" );
level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect["orange_eyes"] = loadfx( "misc/fx_zombie_eye_single" );
level._effect["player_possessed_eyes"] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" );
gametype = getdvar( "ui_gametype" );
if ( gametype == "zcleansed" )
{
level._effect["blue_eyes_player"] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" );
level._effect["lava_burning"] = loadfx( "env/fire/fx_fire_lava_player_torso" );
}
if ( isdefined( 0 ) && 0 )
{
level._effect["player_3rd_spotlight_lite"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_lite" );
level._effect["player_3rd_spotlight_med"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_med" );
level._effect["player_3rd_spotlight_high"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_hvy" );
level._effect["oillamp"] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern" );
}
level._effect["booze_candy_spawn"] = loadfx( "maps/zombie_buried/fx_buried_booze_candy_spawn" );
level._effect["crusher_sparks"] = loadfx( "maps/zombie_buried/fx_buried_crusher_sparks" );
level._effect["rise_burst_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_billow_body" );
level._effect["rise_billow_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_burst_hand" );
level._effect["rise_dust_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_dustfall_body" );
level._effect["fx_buried_key_glint"] = loadfx( "maps/zombie_buried/fx_buried_key_glint" );
level._effect["sq_glow"] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern_ghost" );
level._effect["vulture_fx_wisp"] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_center" );
level._effect["vulture_fx_wisp_orb"] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_orbit" );
level._effect["fx_wisp_m"] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_os" );
level._effect["fx_wisp_lg_m"] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_lg_os" );
level._effect["sq_bulb_blue"] = loadfx( "maps/zombie_buried/fx_buried_eg_blu" );
level._effect["sq_bulb_orange"] = loadfx( "maps/zombie_buried/fx_buried_eg_orng" );
level._effect["sq_bulb_green"] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_green" );
level._effect["sq_bulb_yellow"] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_yellow" );
level._effect["sq_ether_amp_trail"] = loadfx( "maps/zombie_buried/fx_buried_ether_amp_trail" );
level._effect["sq_tower_r"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_blue" );
level._effect["sq_tower_m"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_orange" );
level._effect["sq_tower_bolts"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_bolts" );
level._effect["sq_spark"] = loadfx( "maps/zombie_buried/fx_buried_spark_gen" );
level._effect["sq_spawn"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" );
level._effect["sq_vulture_orange_eye_glow"] = loadfx( "misc/fx_zombie_eye_side_quest" );
}
precache_createfx_fx()
{
level._effect[ "fx_buried_ash_blowing" ] = loadfx( "maps/zombie_buried/fx_buried_ash_blowing" );
level._effect[ "fx_buried_bats_group" ] = loadfx( "maps/zombie_buried/fx_buried_bats_group" );
level._effect[ "fx_buried_cloud_low" ] = loadfx( "maps/zombie_buried/fx_buried_cloud_low" );
level._effect[ "fx_buried_conveyor_belt_edge" ] = loadfx( "maps/zombie_buried/fx_buried_conveyor_belt_edge" );
level._effect[ "fx_buried_dust_ceiling_hole" ] = loadfx( "maps/zombie_buried/fx_buried_dust_ceiling_hole" );
level._effect[ "fx_buried_dust_edge_100" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_100" );
level._effect[ "fx_buried_dust_edge_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_xlg" );
level._effect[ "fx_buried_dust_edge_blown" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_blown" );
level._effect[ "fx_buried_dust_flurry" ] = loadfx( "maps/zombie_buried/fx_buried_dust_flurry" );
level._effect[ "fx_buried_dust_int_25x50" ] = loadfx( "maps/zombie_buried/fx_buried_dust_int_25x50" );
level._effect[ "fx_buried_dust_motes_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_xlg" );
level._effect[ "fx_buried_dust_motes_ext_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_xlg" );
level._effect[ "fx_buried_dust_motes_ext_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_sm" );
level._effect[ "fx_buried_dust_rising_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_sm" );
level._effect[ "fx_buried_dust_rising_md" ] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_md" );
level._effect[ "fx_buried_dust_tunnel_ceiling" ] = loadfx( "maps/zombie_buried/fx_buried_dust_tunnel_ceiling" );
level._effect[ "fx_buried_fireplace" ] = loadfx( "maps/zombie_buried/fx_buried_fireplace" );
level._effect[ "fx_buried_fog_sm" ] = loadfx( "maps/zombie_buried/fx_buried_fog_sm" );
level._effect[ "fx_buried_fog_md" ] = loadfx( "maps/zombie_buried/fx_buried_fog_md" );
level._effect[ "fx_buried_glow_kerosene_lamp" ] = loadfx( "maps/zombie_buried/fx_buried_glow_kerosene_lamp" );
level._effect[ "fx_buried_glow_sconce" ] = loadfx( "maps/zombie_buried/fx_buried_glow_sconce" );
level._effect[ "fx_buried_god_ray_sm" ] = loadfx( "maps/zombie_buried/fx_buried_god_ray_sm" );
level._effect[ "fx_buried_godray_church" ] = loadfx( "maps/zombie_buried/fx_buried_godray_church" );
level._effect[ "fx_buried_godray_ext_sm" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_sm" );
level._effect[ "fx_buried_godray_ext_md" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_md" );
level._effect[ "fx_buried_godray_ext_lg" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_lg" );
level._effect[ "fx_buried_godray_ext_thin" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_thin" );
level._effect[ "fx_buried_insects" ] = loadfx( "maps/zombie_buried/fx_buried_insects" );
level._effect[ "fx_buried_sand_windy_sm" ] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_sm" );
level._effect[ "fx_buried_sand_windy_md" ] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_md" );
level._effect[ "fx_buried_sandstorm_edge" ] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_edge" );
level._effect[ "fx_buried_sandstorm_distant" ] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_distant" );
level._effect[ "fx_buried_smk_plume_lg" ] = loadfx( "maps/zombie_buried/fx_buried_smk_plume_lg" );
level._effect[ "fx_buried_steam_md" ] = loadfx( "maps/zombie_buried/fx_buried_steam_md" );
level._effect[ "fx_buried_water_dripping" ] = loadfx( "maps/zombie_buried/fx_buried_water_dripping" );
level._effect[ "fx_buried_water_spilling" ] = loadfx( "maps/zombie_buried/fx_buried_water_spilling" );
level._effect[ "fx_buried_water_spilling_lg" ] = loadfx( "maps/zombie_buried/fx_buried_water_spilling_lg" );
level._effect[ "fx_buried_barrier_break" ] = loadfx( "maps/zombie_buried/fx_buried_barrier_break" );
level._effect[ "fx_buried_barrier_break_sm" ] = loadfx( "maps/zombie_buried/fx_buried_barrier_break_sm" );
level._effect[ "fx_buried_dest_floor_lg" ] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_lg" );
level._effect[ "fx_buried_dest_floor_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_sm" );
level._effect[ "fx_buried_dest_platform_lsat" ] = loadfx( "maps/zombie_buried/fx_buried_dest_platform_lsat" );
level._effect[ "fx_buried_fountain_spray" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect[ "fx_buried_fountain_swirl" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_swirl" );
level._effect[ "fx_buried_meteor_sm_runner" ] = loadfx( "maps/zombie_buried/fx_buried_meteor_sm_runner" );
level._effect[ "fx_buried_meteor_lg_runner" ] = loadfx( "maps/zombie_buried/fx_buried_meteor_lg_runner" );
level._effect["fx_buried_ash_blowing"] = loadfx( "maps/zombie_buried/fx_buried_ash_blowing" );
level._effect["fx_buried_bats_group"] = loadfx( "maps/zombie_buried/fx_buried_bats_group" );
level._effect["fx_buried_cloud_low"] = loadfx( "maps/zombie_buried/fx_buried_cloud_low" );
level._effect["fx_buried_conveyor_belt_edge"] = loadfx( "maps/zombie_buried/fx_buried_conveyor_belt_edge" );
level._effect["fx_buried_dust_ceiling_hole"] = loadfx( "maps/zombie_buried/fx_buried_dust_ceiling_hole" );
level._effect["fx_buried_dust_edge_100"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_100" );
level._effect["fx_buried_dust_edge_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_xlg" );
level._effect["fx_buried_dust_edge_blown"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_blown" );
level._effect["fx_buried_dust_flurry"] = loadfx( "maps/zombie_buried/fx_buried_dust_flurry" );
level._effect["fx_buried_dust_int_25x50"] = loadfx( "maps/zombie_buried/fx_buried_dust_int_25x50" );
level._effect["fx_buried_dust_motes_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_xlg" );
level._effect["fx_buried_dust_motes_ext_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_xlg" );
level._effect["fx_buried_dust_motes_ext_sm"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_sm" );
level._effect["fx_buried_dust_rising_sm"] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_sm" );
level._effect["fx_buried_dust_rising_md"] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_md" );
level._effect["fx_buried_dust_tunnel_ceiling"] = loadfx( "maps/zombie_buried/fx_buried_dust_tunnel_ceiling" );
level._effect["fx_buried_fireplace"] = loadfx( "maps/zombie_buried/fx_buried_fireplace" );
level._effect["fx_buried_fog_sm"] = loadfx( "maps/zombie_buried/fx_buried_fog_sm" );
level._effect["fx_buried_fog_md"] = loadfx( "maps/zombie_buried/fx_buried_fog_md" );
level._effect["fx_buried_glow_kerosene_lamp"] = loadfx( "maps/zombie_buried/fx_buried_glow_kerosene_lamp" );
level._effect["fx_buried_glow_sconce"] = loadfx( "maps/zombie_buried/fx_buried_glow_sconce" );
level._effect["fx_buried_god_ray_sm"] = loadfx( "maps/zombie_buried/fx_buried_god_ray_sm" );
level._effect["fx_buried_godray_church"] = loadfx( "maps/zombie_buried/fx_buried_godray_church" );
level._effect["fx_buried_godray_ext_sm"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_sm" );
level._effect["fx_buried_godray_ext_md"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_md" );
level._effect["fx_buried_godray_ext_lg"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_lg" );
level._effect["fx_buried_godray_ext_thin"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_thin" );
level._effect["fx_buried_insects"] = loadfx( "maps/zombie_buried/fx_buried_insects" );
level._effect["fx_buried_sand_windy_sm"] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_sm" );
level._effect["fx_buried_sand_windy_md"] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_md" );
level._effect["fx_buried_sandstorm_edge"] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_edge" );
level._effect["fx_buried_sandstorm_distant"] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_distant" );
level._effect["fx_buried_smk_plume_lg"] = loadfx( "maps/zombie_buried/fx_buried_smk_plume_lg" );
level._effect["fx_buried_steam_md"] = loadfx( "maps/zombie_buried/fx_buried_steam_md" );
level._effect["fx_buried_water_dripping"] = loadfx( "maps/zombie_buried/fx_buried_water_dripping" );
level._effect["fx_buried_water_spilling"] = loadfx( "maps/zombie_buried/fx_buried_water_spilling" );
level._effect["fx_buried_water_spilling_lg"] = loadfx( "maps/zombie_buried/fx_buried_water_spilling_lg" );
level._effect["fx_buried_barrier_break"] = loadfx( "maps/zombie_buried/fx_buried_barrier_break" );
level._effect["fx_buried_barrier_break_sm"] = loadfx( "maps/zombie_buried/fx_buried_barrier_break_sm" );
level._effect["fx_buried_dest_floor_lg"] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_lg" );
level._effect["fx_buried_dest_floor_sm"] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_sm" );
level._effect["fx_buried_dest_platform_lsat"] = loadfx( "maps/zombie_buried/fx_buried_dest_platform_lsat" );
level._effect["fx_buried_fountain_spray"] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect["fx_buried_fountain_swirl"] = loadfx( "maps/zombie_buried/fx_buried_fountain_swirl" );
level._effect["fx_buried_meteor_sm_runner"] = loadfx( "maps/zombie_buried/fx_buried_meteor_sm_runner" );
level._effect["fx_buried_meteor_lg_runner"] = loadfx( "maps/zombie_buried/fx_buried_meteor_lg_runner" );
}
#using_animtree("fxanim_props_dlc3");
precache_fxanim_props()
{
level.scr_anim[ "fxanim_props" ][ "sheriff_sign" ] = %fxanim_zom_buried_sign_sheriff_anim;
level.scr_anim[ "fxanim_props" ][ "balcony_rope" ] = %fxanim_zom_buried_rope_balcony_anim;
level.scr_anim[ "fxanim_props" ][ "livingstone_sign" ] = %fxanim_zom_buried_sign_livingstone_anim;
level.scr_anim[ "fxanim_props" ][ "livingstone_sign_fast" ] = %fxanim_zom_buried_sign_livingstone_fast_anim;
level.scr_anim[ "fxanim_props" ][ "noose_lrg" ] = %fxanim_zom_buried_noose_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "noose_med" ] = %fxanim_zom_buried_noose_med_anim;
level.scr_anim[ "fxanim_props" ][ "noose_sml" ] = %fxanim_zom_buried_noose_sml_anim;
level.scr_anim[ "fxanim_props" ][ "rope_barn" ] = %fxanim_zom_buried_rope_barn_anim;
level.scr_anim[ "fxanim_props" ][ "lsat_catwalk" ] = %fxanim_zom_buried_catwalk_anim;
level.scr_anim[ "fxanim_props" ][ "sq_orbs" ] = %fxanim_zom_buried_orbs_anim;
level.scr_anim[ "fxanim_props" ][ "endgame_machine_open" ] = %o_zombie_end_game_open;
level.scr_anim[ "fxanim_props" ][ "endgame_machine_close" ] = %o_zombie_end_game_close;
level.scr_anim[ "fxanim_props" ][ "gunsmith_sign" ] = %fxanim_zom_buried_sign_gunsmith_anim;
level.scr_anim[ "fxanim_props" ][ "corrugated_panels" ] = %fxanim_zom_buried_corrugated_panels_anim;
level.scr_anim[ "fxanim_props" ][ "clock_old" ] = %fxanim_gp_clock_old_anim;
level.scr_anim[ "fxanim_props" ][ "chandelier" ] = %fxanim_gp_chandelier_anim;
level.scr_anim[ "fxanim_props" ][ "track_board" ] = %fxanim_zom_buried_track_board_anim;
level.scr_anim[ "fxanim_props" ][ "wood_plank_hole" ] = %fxanim_zom_buried_wood_plank_hole_anim;
level.scr_anim[ "fxanim_props" ][ "wood_plank_bridge" ] = %fxanim_zom_buried_wood_plank_bridge_anim;
level.scr_anim[ "fxanim_props" ][ "drop_start" ] = %fxanim_zom_buried_board_drop_start_anim;
level.scr_anim[ "fxanim_props" ][ "rock_crusher" ] = %fxanim_zom_buried_rock_crusher_anim;
level.scr_anim[ "fxanim_props" ][ "rock_crusher_btm" ] = %fxanim_zom_buried_rock_crusher_btm_anim;
level.scr_anim[ "fxanim_props" ][ "piano_old" ] = %fxanim_gp_piano_old_anim;
level.scr_anim[ "fxanim_props" ][ "general_store_sign" ] = %fxanim_zom_buried_sign_general_store_anim;
level.scr_anim[ "fxanim_props" ][ "tree_vines" ] = %fxanim_zom_buried_tree_vines_anim;
level.scr_anim[ "fxanim_props" ][ "ice_cream_sign" ] = %fxanim_zom_buried_sign_ice_cream_anim;
level.scr_anim[ "fxanim_props" ][ "conveyor" ] = %fxanim_zom_buried_conveyor_anim;
level.scr_anim[ "fxanim_props" ][ "conveyor_lrg" ] = %fxanim_zom_buried_conveyor_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "fountain_grave" ] = %fxanim_zom_buried_fountain_grave_anim;
level.scr_anim[ "fxanim_props" ][ "fountain_maze" ] = %fxanim_zom_buried_fountain_maze_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_church" ] = %fxanim_zom_buried_falling_rocks_church_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_graveyard" ] = %fxanim_zom_buried_falling_rocks_graveyard_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_mansion" ] = %fxanim_zom_buried_falling_rocks_mansion_anim;
level.maze_switch_anim[ "switch_up" ] = %o_zombie_maze_switch_up;
level.maze_switch_anim[ "switch_down" ] = %o_zombie_maze_switch_down;
level.maze_switch_anim[ "switch_neutral" ] = %o_zombie_maze_switch_neutral;
level.scr_anim[ "fxanim_props" ][ "bank_sign" ] = %fxanim_zom_buried_sign_bank_anim;
scriptmodelsuseanimtree( -1 );
level.scr_anim["fxanim_props"]["sheriff_sign"] = %fxanim_zom_buried_sign_sheriff_anim;
level.scr_anim["fxanim_props"]["balcony_rope"] = %fxanim_zom_buried_rope_balcony_anim;
level.scr_anim["fxanim_props"]["livingstone_sign"] = %fxanim_zom_buried_sign_livingstone_anim;
level.scr_anim["fxanim_props"]["livingstone_sign_fast"] = %fxanim_zom_buried_sign_livingstone_fast_anim;
level.scr_anim["fxanim_props"]["noose_lrg"] = %fxanim_zom_buried_noose_lrg_anim;
level.scr_anim["fxanim_props"]["noose_med"] = %fxanim_zom_buried_noose_med_anim;
level.scr_anim["fxanim_props"]["noose_sml"] = %fxanim_zom_buried_noose_sml_anim;
level.scr_anim["fxanim_props"]["rope_barn"] = %fxanim_zom_buried_rope_barn_anim;
level.scr_anim["fxanim_props"]["lsat_catwalk"] = %fxanim_zom_buried_catwalk_anim;
level.scr_anim["fxanim_props"]["sq_orbs"] = %fxanim_zom_buried_orbs_anim;
level.scr_anim["fxanim_props"]["endgame_machine_open"] = %o_zombie_end_game_open;
level.scr_anim["fxanim_props"]["endgame_machine_close"] = %o_zombie_end_game_close;
level.scr_anim["fxanim_props"]["gunsmith_sign"] = %fxanim_zom_buried_sign_gunsmith_anim;
level.scr_anim["fxanim_props"]["corrugated_panels"] = %fxanim_zom_buried_corrugated_panels_anim;
level.scr_anim["fxanim_props"]["clock_old"] = %fxanim_gp_clock_old_anim;
level.scr_anim["fxanim_props"]["chandelier"] = %fxanim_gp_chandelier_anim;
level.scr_anim["fxanim_props"]["track_board"] = %fxanim_zom_buried_track_board_anim;
level.scr_anim["fxanim_props"]["wood_plank_hole"] = %fxanim_zom_buried_wood_plank_hole_anim;
level.scr_anim["fxanim_props"]["wood_plank_bridge"] = %fxanim_zom_buried_wood_plank_bridge_anim;
level.scr_anim["fxanim_props"]["drop_start"] = %fxanim_zom_buried_board_drop_start_anim;
level.scr_anim["fxanim_props"]["rock_crusher"] = %fxanim_zom_buried_rock_crusher_anim;
level.scr_anim["fxanim_props"]["rock_crusher_btm"] = %fxanim_zom_buried_rock_crusher_btm_anim;
level.scr_anim["fxanim_props"]["piano_old"] = %fxanim_gp_piano_old_anim;
level.scr_anim["fxanim_props"]["general_store_sign"] = %fxanim_zom_buried_sign_general_store_anim;
level.scr_anim["fxanim_props"]["tree_vines"] = %fxanim_zom_buried_tree_vines_anim;
level.scr_anim["fxanim_props"]["ice_cream_sign"] = %fxanim_zom_buried_sign_ice_cream_anim;
level.scr_anim["fxanim_props"]["conveyor"] = %fxanim_zom_buried_conveyor_anim;
level.scr_anim["fxanim_props"]["conveyor_lrg"] = %fxanim_zom_buried_conveyor_lrg_anim;
level.scr_anim["fxanim_props"]["fountain_grave"] = %fxanim_zom_buried_fountain_grave_anim;
level.scr_anim["fxanim_props"]["fountain_maze"] = %fxanim_zom_buried_fountain_maze_anim;
level.scr_anim["fxanim_props"]["rocks_church"] = %fxanim_zom_buried_falling_rocks_church_anim;
level.scr_anim["fxanim_props"]["rocks_graveyard"] = %fxanim_zom_buried_falling_rocks_graveyard_anim;
level.scr_anim["fxanim_props"]["rocks_mansion"] = %fxanim_zom_buried_falling_rocks_mansion_anim;
level.maze_switch_anim["switch_up"] = %o_zombie_maze_switch_up;
level.maze_switch_anim["switch_down"] = %o_zombie_maze_switch_down;
level.maze_switch_anim["switch_neutral"] = %o_zombie_maze_switch_neutral;
level.scr_anim["fxanim_props"]["bank_sign"] = %fxanim_zom_buried_sign_bank_anim;
scriptmodelsuseanimtree( -1 );
}

View File

@ -1,245 +1,247 @@
//checked includes changed to match cerberus output
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zm_buried_grief_street;
#include maps/mp/zm_buried_turned_street;
#include maps/mp/zm_buried_classic;
#include maps/mp/zm_buried;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zm_buried;
#include maps\mp\zm_buried_classic;
#include maps\mp\zm_buried_turned_street;
#include maps\mp\zm_buried_grief_street;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_unitrigger;
init() //checked matches cerberus output
init()
{
add_map_gamemode( "zclassic", maps/mp/zm_buried::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zcleansed", maps/mp/zm_buried::zcleansed_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps/mp/zm_buried::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "processing", maps/mp/zm_buried_classic::precache, maps/mp/zm_buried_classic::main );
add_map_location_gamemode( "zcleansed", "street", maps/mp/zm_buried_turned_street::precache, maps/mp/zm_buried_turned_street::main );
add_map_location_gamemode( "zgrief", "street", maps/mp/zm_buried_grief_street::precache, maps/mp/zm_buried_grief_street::main );
add_map_gamemode( "zclassic", maps\mp\zm_buried::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zcleansed", maps\mp\zm_buried::zcleansed_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps\mp\zm_buried::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "processing", maps\mp\zm_buried_classic::precache, maps\mp\zm_buried_classic::main );
add_map_location_gamemode( "zcleansed", "street", maps\mp\zm_buried_turned_street::precache, maps\mp\zm_buried_turned_street::main );
add_map_location_gamemode( "zgrief", "street", maps\mp\zm_buried_grief_street::precache, maps\mp\zm_buried_grief_street::main );
}
deletechalktriggers() //checked matches cerberus output
deletechalktriggers()
{
chalk_triggers = getentarray( "chalk_buildable_trigger", "targetname" );
array_thread( chalk_triggers, ::self_delete );
chalk_triggers = getentarray( "chalk_buildable_trigger", "targetname" );
array_thread( chalk_triggers, ::self_delete );
}
deletebuyabledoors() //checked changed to match cerberus output
deletebuyabledoors()
{
doors_trigs = getentarray( "zombie_door", "targetname" );
foreach(door in doors_trigs)
{
doors = getentarray( door.target, "targetname" );
array_thread( doors, ::self_delete );
}
array_thread( doors_trigs, ::self_delete );
doors_trigs = getentarray( "zombie_door", "targetname" );
foreach ( door in doors_trigs )
{
doors = getentarray( door.target, "targetname" );
array_thread( doors, ::self_delete );
}
array_thread( doors_trigs, ::self_delete );
}
deletebuyabledebris( justtriggers ) //checked changed to match cerberus output
deletebuyabledebris( justtriggers )
{
debris_trigs = getentarray( "zombie_debris", "targetname" );
while ( !is_true( justtriggers ) )
{
foreach ( trig in debris_trigs )
{
if ( isDefined( trig.script_flag ) )
{
flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
array_thread( debris_trigs, ::self_delete );
debris_trigs = getentarray( "zombie_debris", "targetname" );
if ( !is_true( justtriggers ) )
{
foreach ( trig in debris_trigs )
{
if ( isdefined( trig.script_flag ) )
flag_set( trig.script_flag );
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
array_thread( debris_trigs, ::self_delete );
}
deleteslothbarricades( justtriggers ) //checked changed to match cerberus output
deleteslothbarricades( justtriggers )
{
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
while ( !is_true( justtriggers ) )
{
foreach ( trig in sloth_trigs )
{
if ( isDefined( trig.script_flag ) && level flag_exists( trig.script_flag ) )
{
flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
array_thread( sloth_trigs, ::self_delete );
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
if ( !is_true( justtriggers ) )
{
foreach ( trig in sloth_trigs )
{
if ( isdefined( trig.script_flag ) && level flag_exists( trig.script_flag ) )
flag_set( trig.script_flag );
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
array_thread( sloth_trigs, ::self_delete );
}
deleteslothbarricade( location ) //checked changed to match cerberus output
deleteslothbarricade( location )
{
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
foreach ( trig in sloth_trigs )
{
if ( isDefined( trig.script_location ) && trig.script_location == location )
{
if ( isDefined( trig.script_flag ) )
{
flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
foreach ( trig in sloth_trigs )
{
if ( isdefined( trig.script_location ) && trig.script_location == location )
{
if ( isdefined( trig.script_flag ) )
flag_set( trig.script_flag );
parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete );
}
}
}
spawnmapcollision( collision_model, origin ) //checked matches cerberus output
spawnmapcollision( collision_model, origin )
{
if ( !isDefined( origin ) )
{
origin = ( 0, 0, 0 );
}
collision = spawn( "script_model", origin, 1 );
collision setmodel( collision_model );
collision disconnectpaths();
if ( !isdefined( origin ) )
origin = ( 0, 0, 0 );
collision = spawn( "script_model", origin, 1 );
collision setmodel( collision_model );
collision disconnectpaths();
}
turnperkon( perk ) //checked matches cerberus output
turnperkon( perk )
{
level notify( perk + "_on" );
wait_network_frame();
level notify( perk + "_on" );
wait_network_frame();
}
disableallzonesexcept( zones ) //checked changed to match cerberus output see compiler_limitations.md No. 1
disableallzonesexcept( zones )
{
foreach ( zone in zones )
{
level thread maps/mp/zombies/_zm_zonemgr::enable_zone( zone );
}
zoneindex = 0;
foreach ( zone in level.zones )
{
should_disable = 1;
for ( i = 0; i > zones.size; i++ )
{
if ( zoneindex == i )
{
should_disable = 0;
}
}
if ( is_true( should_disable ) )
{
zones[ i ].is_enabled = 0;
zones[ i ].is_spawning_allowed = 0;
}
zoneindex++;
}
foreach ( zone in zones )
level thread maps\mp\zombies\_zm_zonemgr::enable_zone( zone );
foreach ( zoneindex, zone in level.zones )
{
should_disable = 1;
foreach ( cleared_zone in zones )
{
if ( zoneindex == cleared_zone )
should_disable = 0;
}
if ( is_true( should_disable ) )
{
zone.is_enabled = 0;
zone.is_spawning_allowed = 0;
}
}
}
remove_adjacent_zone( main_zone, adjacent_zone ) //checked changed to match cerberus output
remove_adjacent_zone( main_zone, adjacent_zone )
{
if ( isDefined( level.zones[ main_zone ].adjacent_zones ) && isDefined( level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] ) )
{
level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] = undefined;
}
if ( isDefined( level.zones[ adjacent_zone ].adjacent_zones ) && isDefined( level.zones[ adjacent_zone ].adjacent_zones[ main_zone ] ) )
{
level.zones[ adjacent_zone ].adjacent_zones[ main_zone ] = undefined;
}
if ( isdefined( level.zones[main_zone].adjacent_zones ) && isdefined( level.zones[main_zone].adjacent_zones[adjacent_zone] ) )
level.zones[main_zone].adjacent_zones[adjacent_zone] = undefined;
if ( isdefined( level.zones[adjacent_zone].adjacent_zones ) && isdefined( level.zones[adjacent_zone].adjacent_zones[main_zone] ) )
level.zones[adjacent_zone].adjacent_zones[main_zone] = undefined;
}
builddynamicwallbuy( location, weaponname ) //checked changed to match cerberus output
builddynamicwallbuy( location, weaponname )
{
match_string = ( level.scr_zm_ui_gametype + "_" ) + level.scr_zm_map_start_location;
foreach ( stub in level.chalk_builds )
{
wallbuy = getstruct( stub.target, "targetname" );
if ( isDefined( wallbuy.script_location ) && wallbuy.script_location == location )
{
if ( !isDefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) )
{
maps/mp/zombies/_zm_weapons::add_dynamic_wallbuy( weaponname, wallbuy.targetname, 1 );
thread wait_and_remove( stub, stub.buildablezone.pieces[ 0 ] );
}
}
}
match_string = level.scr_zm_ui_gametype + "_" + level.scr_zm_map_start_location;
foreach ( stub in level.chalk_builds )
{
wallbuy = getstruct( stub.target, "targetname" );
if ( isdefined( wallbuy.script_location ) && wallbuy.script_location == location )
{
if ( !isdefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) )
{
maps\mp\zombies\_zm_weapons::add_dynamic_wallbuy( weaponname, wallbuy.targetname, 1 );
thread wait_and_remove( stub, stub.buildablezone.pieces[0] );
}
}
}
}
buildbuildable( buildable ) //checked changed to match cerberus output see compiler_limitations.md No. 1
buildbuildable( buildable )
{
player = get_players()[ 0 ];
foreach ( stub in level.buildable_stubs )
{
if ( !isDefined( buildable ) || stub.equipname == buildable )
{
if ( isDefined( buildable ) || stub.persistent != 3 )
{
stub maps/mp/zombies/_zm_buildables::buildablestub_finish_build( player );
stub maps/mp/zombies/_zm_buildables::buildablestub_remove();
for ( i = 0; i < stub.buildablezone.pieces.size; i++ )
{
stub.buildablezone.pieces[ i ] maps/mp/zombies/_zm_buildables::piece_unspawn();
}
stub.model notsolid();
stub.model show();
return;
}
}
}
player = get_players()[0];
foreach ( stub in level.buildable_stubs )
{
if ( !isdefined( buildable ) || stub.equipname == buildable )
{
if ( isdefined( buildable ) || stub.persistent != 3 )
{
stub maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
foreach ( piece in stub.buildablezone.pieces )
piece maps\mp\zombies\_zm_buildables::piece_unspawn();
stub.model notsolid();
stub.model show();
return;
}
}
}
}
wait_and_remove( stub, piece ) //checked matches cerberus output
wait_and_remove( stub, piece )
{
wait 0.1;
self buildablestub_remove();
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub );
piece piece_unspawn();
wait 0.1;
self buildablestub_remove();
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
piece piece_unspawn();
}
generatebuildabletarps() //checked changed to match cerberus output
generatebuildabletarps()
{
struct_locations = getstructarray( "buildables_tarp", "targetname" );
level.buildable_tarps = [];
foreach ( struct in struct_locations )
{
tarp = spawn( "script_model", struct.origin );
tarp.angles = struct.angles;
tarp setmodel( "p6_zm_bu_buildable_bench_tarp" );
tarp.targetname = "buildable_tarp";
if ( isDefined( struct.script_location ) )
{
tarp.script_location = struct.script_location;
}
level.buildable_tarps[ level.buildable_tarps.size ] = tarp;
}
struct_locations = getstructarray( "buildables_tarp", "targetname" );
level.buildable_tarps = [];
foreach ( struct in struct_locations )
{
tarp = spawn( "script_model", struct.origin );
tarp.angles = struct.angles;
tarp setmodel( "p6_zm_bu_buildable_bench_tarp" );
tarp.targetname = "buildable_tarp";
if ( isdefined( struct.script_location ) )
tarp.script_location = struct.script_location;
level.buildable_tarps[level.buildable_tarps.size] = tarp;
}
}
deletebuildabletarp( location ) //checked changed to match cerberus output
deletebuildabletarp( location )
{
foreach ( tarp in level.buildable_tarps )
{
if ( isDefined( tarp.script_location ) && tarp.script_location == location )
{
tarp delete();
}
}
foreach ( tarp in level.buildable_tarps )
{
if ( isdefined( tarp.script_location ) && tarp.script_location == location )
tarp delete();
}
}
powerswitchstate( on ) //checked matches cerberus output
powerswitchstate( on )
{
trigger = getent( "use_elec_switch", "targetname" );
if ( isDefined( trigger ) )
{
trigger delete();
}
master_switch = getent( "elec_switch", "targetname" );
if ( isDefined( master_switch ) )
{
master_switch notsolid();
if ( is_true( on ) )
{
master_switch rotateroll( -90, 0.3 );
flag_set( "power_on" );
}
}
trigger = getent( "use_elec_switch", "targetname" );
if ( isdefined( trigger ) )
trigger delete();
master_switch = getent( "elec_switch", "targetname" );
if ( isdefined( master_switch ) )
{
master_switch notsolid();
if ( is_true( on ) )
{
master_switch rotateroll( -90, 0.3 );
flag_set( "power_on" );
}
}
}

View File

@ -1,108 +1,110 @@
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_equip_subwoofer;
#include maps/mp/zombies/_zm_equip_springpad;
#include maps/mp/zombies/_zm_equip_turbine;
#include maps/mp/zm_buried_buildables;
#include maps/mp/zm_buried_gamemodes;
#include maps/mp/zombies/_zm_race_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_race_utility;
#include maps\mp\zm_buried_gamemodes;
#include maps\mp\zm_buried_buildables;
#include maps\mp\zombies\_zm_equip_turbine;
#include maps\mp\zombies\_zm_equip_springpad;
#include maps\mp\zombies\_zm_equip_subwoofer;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\gametypes_zm\_zm_gametype;
precache() //checked matches cerberus output
precache()
{
precachemodel( "zm_collision_buried_street_grief" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
level.chalk_buildable_pieces_hide = 1;
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
maps/mp/zm_buried_buildables::include_buildables( griefbuildables );
maps/mp/zm_buried_buildables::init_buildables( griefbuildables );
maps/mp/zombies/_zm_equip_turbine::init();
maps/mp/zombies/_zm_equip_turbine::init_animtree();
maps/mp/zombies/_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" );
maps/mp/zombies/_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" );
precachemodel( "zm_collision_buried_street_grief" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
level.chalk_buildable_pieces_hide = 1;
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
maps\mp\zm_buried_buildables::include_buildables( griefbuildables );
maps\mp\zm_buried_buildables::init_buildables( griefbuildables );
maps\mp\zombies\_zm_equip_turbine::init();
maps\mp\zombies\_zm_equip_turbine::init_animtree();
maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" );
maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" );
}
street_treasure_chest_init() //checked matches cerberus output
street_treasure_chest_init()
{
start_chest = getstruct( "start_chest", "script_noteworthy" );
court_chest = getstruct( "courtroom_chest1", "script_noteworthy" );
tunnel_chest = getstruct( "tunnels_chest1", "script_noteworthy" );
jail_chest = getstruct( "jail_chest1", "script_noteworthy" );
gun_chest = getstruct( "gunshop_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 );
level.chests = [];
level.chests[ level.chests.size ] = start_chest;
level.chests[ level.chests.size ] = court_chest;
level.chests[ level.chests.size ] = tunnel_chest;
level.chests[ level.chests.size ] = jail_chest;
level.chests[ level.chests.size ] = gun_chest;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
start_chest = getstruct( "start_chest", "script_noteworthy" );
court_chest = getstruct( "courtroom_chest1", "script_noteworthy" );
tunnel_chest = getstruct( "tunnels_chest1", "script_noteworthy" );
jail_chest = getstruct( "jail_chest1", "script_noteworthy" );
gun_chest = getstruct( "gunshop_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 );
level.chests = [];
level.chests[level.chests.size] = start_chest;
level.chests[level.chests.size] = court_chest;
level.chests[level.chests.size] = tunnel_chest;
level.chests[level.chests.size] = jail_chest;
level.chests[level.chests.size] = gun_chest;
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
}
main() //checked matches cerberus output
main()
{
level.buildables_built[ "pap" ] = 1;
level.equipment_team_pick_up = 1;
level thread maps/mp/zombies/_zm_buildables::think_buildables();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" );
street_treasure_chest_init();
generatebuildabletarps();
deletebuildabletarp( "courthouse" );
deletebuildabletarp( "bar" );
deletebuildabletarp( "generalstore" );
deleteslothbarricades();
powerswitchstate( 1 );
level.enemy_location_override_func = ::enemy_location_override;
spawnmapcollision( "zm_collision_buried_street_grief" );
flag_wait( "initial_blackscreen_passed" );
flag_wait( "start_zombie_round_logic" );
wait 1;
builddynamicwallbuys();
buildbuildables();
turnperkon( "revive" );
turnperkon( "doubletap" );
turnperkon( "marathon" );
turnperkon( "juggernog" );
turnperkon( "sleight" );
turnperkon( "additionalprimaryweapon" );
turnperkon( "Pack_A_Punch" );
level.buildables_built["pap"] = 1;
level.equipment_team_pick_up = 1;
level thread maps\mp\zombies\_zm_buildables::think_buildables();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
street_treasure_chest_init();
generatebuildabletarps();
deletebuildabletarp( "courthouse" );
deletebuildabletarp( "bar" );
deletebuildabletarp( "generalstore" );
deleteslothbarricades();
powerswitchstate( 1 );
level.enemy_location_override_func = ::enemy_location_override;
spawnmapcollision( "zm_collision_buried_street_grief" );
flag_wait( "initial_blackscreen_passed" );
flag_wait( "start_zombie_round_logic" );
wait 1;
builddynamicwallbuys();
buildbuildables();
turnperkon( "revive" );
turnperkon( "doubletap" );
turnperkon( "marathon" );
turnperkon( "juggernog" );
turnperkon( "sleight" );
turnperkon( "additionalprimaryweapon" );
turnperkon( "Pack_A_Punch" );
}
enemy_location_override( zombie, enemy ) //checked matches cerberus output
enemy_location_override( zombie, enemy )
{
location = enemy.origin;
if ( isDefined( self.reroute ) && self.reroute )
{
if ( isDefined( self.reroute_origin ) )
{
location = self.reroute_origin;
}
}
return location;
location = enemy.origin;
if ( isdefined( self.reroute ) && self.reroute )
{
if ( isdefined( self.reroute_origin ) )
location = self.reroute_origin;
}
return location;
}
builddynamicwallbuys() //checked matches cerberus output
builddynamicwallbuys()
{
builddynamicwallbuy( "bank", "beretta93r_zm" );
builddynamicwallbuy( "bar", "pdw57_zm" );
builddynamicwallbuy( "church", "ak74u_zm" );
builddynamicwallbuy( "courthouse", "mp5k_zm" );
builddynamicwallbuy( "generalstore", "m16_zm" );
builddynamicwallbuy( "mansion", "an94_zm" );
builddynamicwallbuy( "morgue", "svu_zm" );
builddynamicwallbuy( "prison", "claymore_zm" );
builddynamicwallbuy( "stables", "bowie_knife_zm" );
builddynamicwallbuy( "stablesroof", "frag_grenade_zm" );
builddynamicwallbuy( "toystore", "tazer_knuckles_zm" );
builddynamicwallbuy( "candyshop", "870mcs_zm" );
builddynamicwallbuy( "bank", "beretta93r_zm" );
builddynamicwallbuy( "bar", "pdw57_zm" );
builddynamicwallbuy( "church", "ak74u_zm" );
builddynamicwallbuy( "courthouse", "mp5k_zm" );
builddynamicwallbuy( "generalstore", "m16_zm" );
builddynamicwallbuy( "mansion", "an94_zm" );
builddynamicwallbuy( "morgue", "svu_zm" );
builddynamicwallbuy( "prison", "claymore_zm" );
builddynamicwallbuy( "stables", "bowie_knife_zm" );
builddynamicwallbuy( "stablesroof", "frag_grenade_zm" );
builddynamicwallbuy( "toystore", "tazer_knuckles_zm" );
builddynamicwallbuy( "candyshop", "870mcs_zm" );
}
buildbuildables() //checked matches cerberus output
buildbuildables()
{
buildbuildable( "springpad_zm" );
buildbuildable( "subwoofer_zm" );
buildbuildable( "turbine" );
buildbuildable( "springpad_zm" );
buildbuildable( "subwoofer_zm" );
buildbuildable( "turbine" );
}

View File

@ -1,62 +1,63 @@
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
#using_animtree( "zm_buried_props" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
init_jail_animtree()
{
scriptmodelsuseanimtree( -1 );
scriptmodelsuseanimtree( -1 );
}
#using_animtree("zm_buried_props");
init_jail_anims()
{
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
level.jail_open_jumpback = %o_zombie_sloth_idle_jail_2_cower_jumpback_door;
level.jail_close_idle = %o_zombie_sloth_run_into_jail_2_idle_jail;
level.jail_close_cower = %o_zombie_sloth_cower_2_close_door;
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
level.jail_open_jumpback = %o_zombie_sloth_idle_jail_2_cower_jumpback_door;
level.jail_close_idle = %o_zombie_sloth_run_into_jail_2_idle_jail;
level.jail_close_cower = %o_zombie_sloth_cower_2_close_door;
}
jailuseanimtree()
{
self useanimtree( -1 );
self useanimtree( -1 );
}
init_jail()
{
init_jail_anims();
level.cell_door = getent( "sloth_cell_door", "targetname" );
level.cell_door.clip = getent( level.cell_door.target, "targetname" );
level.cell_door jailuseanimtree();
level.jail_open_door = ::jail_open_door;
level.jail_close_door = ::jail_close_door;
init_jail_anims();
level.cell_door = getent( "sloth_cell_door", "targetname" );
level.cell_door.clip = getent( level.cell_door.target, "targetname" );
level.cell_door jailuseanimtree();
level.jail_open_door = ::jail_open_door;
level.jail_close_door = ::jail_close_door;
}
jail_open_door( jumpback )
{
level.cell_door playsound( "zmb_jail_door_open" );
if ( is_true( jumpback ) )
{
level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 );
}
else
{
level.cell_door setanim( level.jail_open, 1, 1, 1 );
}
if ( isDefined( level.cell_door.clip ) )
{
level.cell_door.clip notsolid();
level.cell_door.clip connectpaths();
}
level.cell_door playsound( "zmb_jail_door_open" );
if ( is_true( jumpback ) )
level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 );
else
level.cell_door setanim( level.jail_open, 1, 1, 1 );
if ( isdefined( level.cell_door.clip ) )
{
level.cell_door.clip notsolid();
level.cell_door.clip connectpaths();
}
}
jail_close_door()
{
level.cell_door playsound( "zmb_jail_door_close" );
level.cell_door setanim( level.jail_close_cower, 1, 1, 1 );
if ( isDefined( level.cell_door.clip ) )
{
level.cell_door.clip solid();
level.cell_door.clip disconnectpaths();
}
level.cell_door playsound( "zmb_jail_door_close" );
level.cell_door setanim( level.jail_close_cower, 1, 1, 1 );
if ( isdefined( level.cell_door.clip ) )
{
level.cell_door.clip solid();
level.cell_door.clip disconnectpaths();
}
}

View File

@ -1,531 +1,524 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_weap_time_bomb;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_equip_headchopper;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_equip_headchopper;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_weap_time_bomb;
#include maps\mp\zombies\_zm_audio;
maze_precache() //checked changed to match cerberus output
maze_precache()
{
blocker_locations = getstructarray( "maze_blocker", "targetname" );
model_list = [];
for ( i = 0; i < blocker_locations.size; i++ )
{
model_list[ blocker_locations[ i ].model ] = 1;
}
model_names = getarraykeys( model_list );
for ( i = 0; i < model_names.size; i++ )
{
precachemodel( model_names[ i ] );
}
blocker_locations = getstructarray( "maze_blocker", "targetname" );
model_list = [];
for ( i = 0; i < blocker_locations.size; i++ )
model_list[blocker_locations[i].model] = 1;
model_names = getarraykeys( model_list );
for ( i = 0; i < model_names.size; i++ )
precachemodel( model_names[i] );
}
maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate ) //checked changed to match cerberus output
maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate )
{
for ( i = 0; i < self.blocked_nodes.size; i++ )
{
for ( j = 0; j < self.blocked_nodes[i].connected_nodes.size; j++ )
{
[[ func_ptr ]]( self.blocked_nodes[ i ], self.blocked_nodes[ i ].connected_nodes[ j ], bignorechangeonmigrate );
[[ func_ptr ]]( self.blocked_nodes[ i ].connected_nodes[ j ], self.blocked_nodes[ i ], bignorechangeonmigrate );
}
}
for ( i = 0; i < self.blocked_nodes.size; i++ )
{
for ( j = 0; j < self.blocked_nodes[i].connected_nodes.size; j++ )
{
[[ func_ptr ]]( self.blocked_nodes[i], self.blocked_nodes[i].connected_nodes[j], bignorechangeonmigrate );
[[ func_ptr ]]( self.blocked_nodes[i].connected_nodes[j], self.blocked_nodes[i], bignorechangeonmigrate );
}
}
}
link_nodes_for_blocker_location() //checked matches cerberus output
link_nodes_for_blocker_location()
{
self maze_nodes_link_unlink_internal( maps/mp/zombies/_zm_utility::link_nodes, 1 );
self maze_nodes_link_unlink_internal( maps\mp\zombies\_zm_utility::link_nodes, 1 );
}
unlink_nodes_for_blocker_location() //checked matches cerberus output
unlink_nodes_for_blocker_location()
{
self maze_nodes_link_unlink_internal( maps/mp/zombies/_zm_utility::unlink_nodes, 0 );
self maze_nodes_link_unlink_internal( maps\mp\zombies\_zm_utility::unlink_nodes, 0 );
}
init_maze_clientfields() //checked changed to match cerberus output
init_maze_clientfields()
{
blocker_locations = getstructarray( "maze_blocker", "targetname" );
foreach ( blocker in blocker_locations )
{
registerclientfield( "world", "maze_blocker_" + blocker.script_noteworthy, 12000, 1, "int" );
}
blocker_locations = getstructarray( "maze_blocker", "targetname" );
foreach ( blocker in blocker_locations )
registerclientfield( "world", "maze_blocker_" + blocker.script_noteworthy, 12000, 1, "int" );
}
init_maze_permutations() //checked changed to match cerberus output
init_maze_permutations()
{
blocker_locations = getstructarray( "maze_blocker", "targetname" );
level._maze._blocker_locations = [];
for ( i = 0; i < blocker_locations.size; i++ )
{
if ( isDefined( blocker_locations[ i ].target ) )
{
blocker_locations[ i ].blocked_nodes = getnodearray( blocker_locations[ i ].target, "targetname" );
for ( j = 0; j < blocker_locations[i].blocked_nodes.size; j++ )
{
blocker_locations[ i ].blocked_nodes[ j ].connected_nodes = getnodearray( blocker_locations[ i ].blocked_nodes[ j ].target, "targetname" );
}
}
else
{
blocker_locations[ i ].blocked_nodes = [];
}
level._maze._blocker_locations[ blocker_locations[ i ].script_noteworthy ] = blocker_locations[ i ];
}
level._maze._perms = array( array( "blocker_1", "blocker_2", "blocker_3", "blocker_4" ), array( "blocker_5", "blocker_6", "blocker_7", "blocker_8", "blocker_9" ), array( "blocker_1", "blocker_10", "blocker_6", "blocker_4", "blocker_11" ), array( "blocker_1", "blocker_3", "blocker_4", "blocker_12" ), array( "blocker_5", "blocker_6", "blocker_12", "blocker_13" ), array( "blocker_4", "blocker_6", "blocker_14" ) );
randomize_maze_perms();
level._maze._active_perm_list = [];
blocker_locations = getstructarray( "maze_blocker", "targetname" );
level._maze._blocker_locations = [];
for ( i = 0; i < blocker_locations.size; i++ )
{
if ( isdefined( blocker_locations[i].target ) )
{
blocker_locations[i].blocked_nodes = getnodearray( blocker_locations[i].target, "targetname" );
for ( j = 0; j < blocker_locations[i].blocked_nodes.size; j++ )
blocker_locations[i].blocked_nodes[j].connected_nodes = getnodearray( blocker_locations[i].blocked_nodes[j].target, "targetname" );
}
else
blocker_locations[i].blocked_nodes = [];
level._maze._blocker_locations[blocker_locations[i].script_noteworthy] = blocker_locations[i];
}
level._maze._perms = array( array( "blocker_1", "blocker_2", "blocker_3", "blocker_4" ), array( "blocker_5", "blocker_6", "blocker_7", "blocker_8", "blocker_9" ), array( "blocker_1", "blocker_10", "blocker_6", "blocker_4", "blocker_11" ), array( "blocker_1", "blocker_3", "blocker_4", "blocker_12" ), array( "blocker_5", "blocker_6", "blocker_12", "blocker_13" ), array( "blocker_4", "blocker_6", "blocker_14" ) );
randomize_maze_perms();
level._maze._active_perm_list = [];
}
init_maze_blocker_pool() //checked changed to match cerberus output
init_maze_blocker_pool()
{
pool_size = 0;
for ( i = 0; i < level._maze._perms.size; i++ )
{
if ( level._maze._perms[ i ].size > pool_size )
{
pool_size = level._maze._perms[ i ].size;
}
}
level._maze._blocker_pool = [];
for ( i = 0; i < pool_size; i++ )
{
ent = spawn( "script_model", level._maze.players_in_maze_volume.origin - vectorScale( ( 0, 0, 1 ), 300 ) );
ent ghost();
ent.in_use = 0;
level._maze._blocker_pool[ i ] = ent;
}
level._maze._blocker_pool_num_free = pool_size;
pool_size = 0;
for ( i = 0; i < level._maze._perms.size; i++ )
{
if ( level._maze._perms[i].size > pool_size )
pool_size = level._maze._perms[i].size;
}
level._maze._blocker_pool = [];
for ( i = 0; i < pool_size; i++ )
{
ent = spawn( "script_model", level._maze.players_in_maze_volume.origin - vectorscale( ( 0, 0, 1 ), 300.0 ) );
ent ghost();
ent.in_use = 0;
level._maze._blocker_pool[i] = ent;
}
level._maze._blocker_pool_num_free = pool_size;
}
free_blockers_available() //checked matches cerberus output
free_blockers_available()
{
return level._maze._blocker_pool_num_free > 0;
return level._maze._blocker_pool_num_free > 0;
}
get_free_blocker_model_from_pool() //checked changed to match cerberus output
get_free_blocker_model_from_pool()
{
for ( i = 0; i < level._maze._blocker_pool.size; i++ )
{
if ( !level._maze._blocker_pool[ i ].in_use )
{
level._maze._blocker_pool[ i ].in_use = 1;
level._maze._blocker_pool_num_free--;
return level._maze._blocker_pool[ i ];
}
}
/*
for ( i = 0; i < level._maze._blocker_pool.size; i++ )
{
if ( !level._maze._blocker_pool[i].in_use )
{
level._maze._blocker_pool[i].in_use = 1;
level._maze._blocker_pool_num_free--;
return level._maze._blocker_pool[i];
}
}
/#
assertmsg( "zm_buried_maze : Blocker pool is empty." );
assertmsg( "zm_buried_maze : Blocker pool is empty." );
#/
*/
return undefined;
return undefined;
}
return_blocker_model_to_pool( ent ) //checked changed to match cerberus output
return_blocker_model_to_pool( ent )
{
ent ghost();
ent.origin = level._maze.players_in_maze_volume.origin - vectorScale( ( 0, 0, 1 ), 300 );
ent dontinterpolate();
ent.in_use = 0;
level._maze._blocker_pool_num_free++;
ent ghost();
ent.origin = level._maze.players_in_maze_volume.origin - vectorscale( ( 0, 0, 1 ), 300.0 );
ent dontinterpolate();
ent.in_use = 0;
level._maze._blocker_pool_num_free++;
}
randomize_maze_perms() //checked matches cerberus output
randomize_maze_perms()
{
level._maze._perms = array_randomize( level._maze._perms );
level._maze._cur_perm = 0;
level._maze._perms = array_randomize( level._maze._perms );
level._maze._cur_perm = 0;
}
init() //checked matches cerberus output
init()
{
level._maze = spawnstruct();
level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" );
level._maze.players_can_see_maze_volume = getent( "maze_player_can_see_volume", "targetname" );
init_maze_clientfields();
init_maze_permutations();
init_maze_blocker_pool();
init_hedge_maze_spawnpoints();
register_custom_spawner_entry( "hedge_location", ::maze_do_zombie_spawn );
level thread maze_achievement_watcher();
level thread vo_in_maze();
level._maze = spawnstruct();
level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" );
level._maze.players_can_see_maze_volume = getent( "maze_player_can_see_volume", "targetname" );
init_maze_clientfields();
init_maze_permutations();
init_maze_blocker_pool();
init_hedge_maze_spawnpoints();
register_custom_spawner_entry( "hedge_location", ::maze_do_zombie_spawn );
level thread maze_achievement_watcher();
level thread vo_in_maze();
}
maze_blocker_sinks_thread( blocker ) //checked changed to match cerberus output
maze_blocker_sinks_thread( blocker )
{
self waittill( "lower_" + self.script_noteworthy );
if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
}
blocker maps/mp/zombies/_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin - vectorScale( ( 0, 0, 1 ), 96 ), 1 );
blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
}
return_blocker_model_to_pool( blocker );
self link_nodes_for_blocker_location();
self waittill( "lower_" + self.script_noteworthy );
if ( flag( "start_zombie_round_logic" ) )
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
blocker maps\mp\zombies\_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin - vectorscale( ( 0, 0, 1 ), 96.0 ), 1.0 );
blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) )
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
return_blocker_model_to_pool( blocker );
self link_nodes_for_blocker_location();
}
delay_destroy_corpses_near_blocker() //checked changed to match cerberus output
delay_destroy_corpses_near_blocker()
{
wait 0.2;
corpses = getcorpsearray();
if ( isDefined( corpses ) )
{
foreach ( corpse in corpses )
{
if ( distancesquared( corpse.origin, self.origin ) < 2304 )
{
corpse delete();
}
}
}
wait 0.2;
corpses = getcorpsearray();
if ( isdefined( corpses ) )
{
foreach ( corpse in corpses )
{
if ( distancesquared( corpse.origin, self.origin ) < 2304 )
corpse delete();
}
}
}
maze_blocker_rises_thread() //checked changed to match cerberus output
maze_blocker_rises_thread()
{
blocker = get_free_blocker_model_from_pool();
self thread maze_blocker_sinks_thread( blocker );
self unlink_nodes_for_blocker_location();
blocker.origin = self.origin - vectorScale( ( 0, 0, 1 ), 96 );
blocker.angles = self.angles;
blocker setmodel( self.model );
blocker dontinterpolate();
blocker show();
wait 0.05;
if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
}
blocker maps/mp/zombies/_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin, 0.65 );
blocker thread delay_destroy_corpses_near_blocker();
blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
}
blocker = get_free_blocker_model_from_pool();
self thread maze_blocker_sinks_thread( blocker );
self unlink_nodes_for_blocker_location();
blocker.origin = self.origin - vectorscale( ( 0, 0, 1 ), 96.0 );
blocker.angles = self.angles;
blocker setmodel( self.model );
blocker dontinterpolate();
blocker show();
wait 0.05;
if ( flag( "start_zombie_round_logic" ) )
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
blocker maps\mp\zombies\_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin, 0.65 );
blocker thread delay_destroy_corpses_near_blocker();
blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) )
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
}
maze_do_perm_change() //checked changed to match cerberus output
maze_do_perm_change()
{
level._maze._cur_perm++;
if ( level._maze._cur_perm == level._maze._perms.size )
{
randomize_maze_perms();
}
new_perm_list = level._maze._perms[ level._maze._cur_perm ];
blockers_raise_list = [];
blockers_lower_list = level._maze._active_perm_list;
for ( i = 0; i < new_perm_list.size; i++ )
{
found = 0;
for ( j = 0; j < level._maze._active_perm_list.size; j++ )
{
if ( new_perm_list[ i ] == level._maze._active_perm_list[ j ] )
{
found = 1;
blockers_lower_list[ j ] = "";
break;
}
}
if ( !found )
{
blockers_raise_list[ blockers_raise_list.size ] = new_perm_list[ i ];
}
}
level thread raise_new_perm_blockers( blockers_raise_list );
level thread lower_old_perm_blockers( blockers_lower_list );
level._maze._active_perm_list = level._maze._perms[ level._maze._cur_perm ];
level._maze._cur_perm++;
if ( level._maze._cur_perm == level._maze._perms.size )
randomize_maze_perms();
new_perm_list = level._maze._perms[level._maze._cur_perm];
blockers_raise_list = [];
blockers_lower_list = level._maze._active_perm_list;
for ( i = 0; i < new_perm_list.size; i++ )
{
found = 0;
for ( j = 0; j < level._maze._active_perm_list.size; j++ )
{
if ( new_perm_list[i] == level._maze._active_perm_list[j] )
{
found = 1;
blockers_lower_list[j] = "";
break;
}
}
if ( !found )
blockers_raise_list[blockers_raise_list.size] = new_perm_list[i];
}
level thread raise_new_perm_blockers( blockers_raise_list );
level thread lower_old_perm_blockers( blockers_lower_list );
level._maze._active_perm_list = level._maze._perms[level._maze._cur_perm];
}
raise_new_perm_blockers( list ) //checked changed to match cerberus output
raise_new_perm_blockers( list )
{
for ( i = 0; i < list.size; i++ )
{
while ( !free_blockers_available() )
{
wait 0.1;
}
level._maze._blocker_locations[ list[ i ] ] thread maze_blocker_rises_thread();
wait 0.25;
}
for ( i = 0; i < list.size; i++ )
{
while ( !free_blockers_available() )
wait 0.1;
level._maze._blocker_locations[list[i]] thread maze_blocker_rises_thread();
wait 0.25;
}
}
lower_old_perm_blockers( list ) //checked changed to match cerberus output
lower_old_perm_blockers( list )
{
for ( i = 0; i < list.size; i++ )
{
if ( list[ i ] != "" )
{
level._maze._blocker_locations[ list[ i ] ] notify( "lower_" + list[ i ] );
}
wait 0.25;
}
for ( i = 0; i < list.size; i++ )
{
if ( list[i] != "" )
level._maze._blocker_locations[list[i]] notify( "lower_" + list[i] );
wait 0.25;
}
}
maze_debug_print( str ) //checked matches cerberus output could not find dvar
maze_debug_print( str )
{
/*
/#
if ( getDvar( #"55B04A98" ) != "" )
{
println( "Maze : " + str );
if ( getdvar( _hash_55B04A98 ) != "" )
println( "Maze : " + str );
#/
}
*/
}
maze_can_change() //checked changed to match cerberus output
maze_can_change()
{
players = getplayers();
foreach ( player in players )
{
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) )
{
maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." );
return 0;
}
}
foreach ( player in players )
{
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_can_see_maze_volume ) )
{
if ( player maps/mp/zombies/_zm_utility::is_player_looking_at( level._maze.players_in_maze_volume.origin, 0.5, 0 ) )
{
maze_debug_print( "Player " + player getentitynumber() + " looking at maze. Maze cannot change." );
return 0;
}
}
}
maze_debug_print( "Maze mutating." );
return 1;
players = getplayers();
foreach ( player in players )
{
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) )
{
maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." );
return false;
}
}
foreach ( player in players )
{
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_can_see_maze_volume ) )
{
if ( player maps\mp\zombies\_zm_utility::is_player_looking_at( level._maze.players_in_maze_volume.origin, 0.5, 0 ) )
{
maze_debug_print( "Player " + player getentitynumber() + " looking at maze. Maze cannot change." );
return false;
}
}
}
maze_debug_print( "Maze mutating." );
return true;
}
maze_think() //checked matches cerberus output
maze_think()
{
wait 0.1;
while ( 1 )
{
if ( maze_can_change() )
{
maze_do_perm_change();
level notify( "zm_buried_maze_changed" );
}
wait 10;
}
wait 0.1;
while ( true )
{
if ( maze_can_change() )
{
maze_do_perm_change();
level notify( "zm_buried_maze_changed" );
}
wait 10.0;
}
}
init_hedge_maze_spawnpoints() //checked matches cerberus output
init_hedge_maze_spawnpoints()
{
level.maze_hedge_spawnpoints = getstructarray( "custom_spawner_entry hedge_location", "script_noteworthy" );
level.maze_hedge_spawnpoints = getstructarray( "custom_spawner_entry hedge_location", "script_noteworthy" );
}
maze_do_zombie_spawn( spot ) //checked partially changed to match cerberus output see info.md
maze_do_zombie_spawn( spot )
{
self endon( "death" );
spots = level.maze_hedge_spawnpoints;
spot = undefined;
/*
self endon( "death" );
spots = level.maze_hedge_spawnpoints;
spot = undefined;
/#
assert( spots.size > 0, "No spawn locations found" );
assert( spots.size > 0, "No spawn locations found" );
#/
*/
players_in_maze = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
if ( isDefined( players_in_maze ) && players_in_maze.size != 0 )
{
player = random( players_in_maze );
maxdistance = 256;
if ( randomint( 100 ) > 75 )
{
maxdistance = 512;
}
closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance );
favoritespots = [];
foreach ( close_spot in closest_spots )
{
if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) )
{
favoritespots[ favoritespots.size ] = close_spot;
}
else
{
if ( randomint( 100 ) > 75 )
{
favoritespots[ favoritespots.size ] = close_spot;
}
}
}
if ( isDefined( favoritespots ) && favoritespots.size >= 2 )
{
spot = random( favoritespots );
}
else if ( isDefined( closest_spots ) && closest_spots.size > 0 )
{
spot = random( closest_spots );
}
}
if ( !isDefined( spot ) )
{
spot = random( spots );
}
self.spawn_point = spot;
if ( isDefined( spot.target ) )
{
self.target = spot.target;
}
if ( isDefined( spot.zone_name ) )
{
self.zone_name = spot.zone_name;
}
if ( isDefined( spot.script_parameters ) )
{
self.script_parameters = spot.script_parameters;
}
self thread maze_do_zombie_rise( spot );
players_in_maze = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
if ( isdefined( players_in_maze ) && players_in_maze.size != 0 )
{
player = random( players_in_maze );
maxdistance = 256;
if ( randomint( 100 ) > 75 )
maxdistance = 512;
closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance );
favoritespots = [];
foreach ( close_spot in closest_spots )
{
if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) )
{
favoritespots[favoritespots.size] = close_spot;
continue;
}
if ( randomint( 100 ) > 75 )
favoritespots[favoritespots.size] = close_spot;
}
if ( isdefined( favoritespots ) && favoritespots.size >= 2 )
spot = random( favoritespots );
else if ( isdefined( closest_spots ) && closest_spots.size > 0 )
spot = random( closest_spots );
}
if ( !isdefined( spot ) )
spot = random( spots );
self.spawn_point = spot;
if ( isdefined( spot.target ) )
self.target = spot.target;
if ( isdefined( spot.zone_name ) )
self.zone_name = spot.zone_name;
if ( isdefined( spot.script_parameters ) )
self.script_parameters = spot.script_parameters;
self thread maze_do_zombie_rise( spot );
}
maze_do_zombie_rise( spot ) //checked changed to match cerberus output
maze_do_zombie_rise( spot )
{
self endon( "death" );
self.in_the_ground = 1;
if ( isDefined( self.anchor ) )
{
self.anchor delete();
}
self.anchor = spawn( "script_origin", self.origin );
self.anchor.angles = self.angles;
self linkto( self.anchor );
if ( !isDefined( spot.angles ) )
{
spot.angles = ( 0, 0, 0 );
}
anim_org = spot.origin;
anim_ang = spot.angles;
anim_org += ( 0, 0, 0 );
self ghost();
self.anchor moveto( anim_org, 0.05 );
self.anchor waittill( "movedone" );
target_org = get_desired_origin();
if ( isDefined( target_org ) )
{
anim_ang = vectorToAngles( target_org - self.origin );
self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 );
self.anchor waittill( "rotatedone" );
}
self unlink();
if ( isDefined( self.anchor ) )
{
self.anchor delete();
}
self thread maps/mp/zombies/_zm_spawner::hide_pop();
level thread maps/mp/zombies/_zm_spawner::zombie_rise_death( self, spot );
spot thread maps/mp/zombies/_zm_spawner::zombie_rise_fx( self );
substate = 0;
if ( self.zombie_move_speed == "walk" )
{
substate = randomint( 2 );
}
else
{
substate = 1;
}
self orientmode( "face default" );
self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate );
self notify( "rise_anim_finished" );
spot notify( "stop_zombie_rise_fx" );
self.in_the_ground = 0;
self notify( "risen", spot.script_string );
self endon( "death" );
self.in_the_ground = 1;
if ( isdefined( self.anchor ) )
self.anchor delete();
self.anchor = spawn( "script_origin", self.origin );
self.anchor.angles = self.angles;
self linkto( self.anchor );
if ( !isdefined( spot.angles ) )
spot.angles = ( 0, 0, 0 );
anim_org = spot.origin;
anim_ang = spot.angles;
anim_org += ( 0, 0, 0 );
self ghost();
self.anchor moveto( anim_org, 0.05 );
self.anchor waittill( "movedone" );
target_org = get_desired_origin();
if ( isdefined( target_org ) )
{
anim_ang = vectortoangles( target_org - self.origin );
self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 );
self.anchor waittill( "rotatedone" );
}
self unlink();
if ( isdefined( self.anchor ) )
self.anchor delete();
self thread maps\mp\zombies\_zm_spawner::hide_pop();
level thread maps\mp\zombies\_zm_spawner::zombie_rise_death( self, spot );
spot thread maps\mp\zombies\_zm_spawner::zombie_rise_fx( self );
substate = 0;
if ( self.zombie_move_speed == "walk" )
substate = randomint( 2 );
else
substate = 1;
self orientmode( "face default" );
self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate );
self notify( "rise_anim_finished" );
spot notify( "stop_zombie_rise_fx" );
self.in_the_ground = 0;
self notify( "risen", spot.script_string );
}
maze_achievement_watcher() //checked matches cerberus output
maze_achievement_watcher()
{
while ( 1 )
{
level waittill( "start_of_round" );
start_maze_achievement_threads();
level waittill( "end_of_round" );
check_maze_achievement_threads();
}
while ( true )
{
level waittill( "start_of_round" );
start_maze_achievement_threads();
level waittill( "end_of_round" );
check_maze_achievement_threads();
}
}
start_maze_achievement_threads() //checked partially changed to match cerberus output see info.md
start_maze_achievement_threads()
{
if ( level.round_number >= 20 )
{
foreach ( player in get_players() )
{
player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" );
if ( player.achievement_player_started_round_in_maze )
{
player thread watch_player_in_maze();
}
else
{
player notify( "_maze_achievement_think_done" );
}
}
}
if ( level.round_number >= 20 )
{
foreach ( player in get_players() )
{
player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" );
if ( player.achievement_player_started_round_in_maze )
{
player thread watch_player_in_maze();
continue;
}
player notify( "_maze_achievement_think_done" );
}
}
}
watch_player_in_maze() //checked matches cerberus output
watch_player_in_maze()
{
self notify( "_maze_achievement_think_done" );
self endon( "_maze_achievement_think_done" );
self endon( "death_or_disconnect" );
self.achievement_player_stayed_in_maze_for_entire_round = 1;
while ( self.achievement_player_stayed_in_maze_for_entire_round )
{
self.achievement_player_stayed_in_maze_for_entire_round = self is_player_in_zone( "zone_maze" );
wait randomfloatrange( 0.5, 1 );
}
self notify( "_maze_achievement_think_done" );
self endon( "_maze_achievement_think_done" );
self endon( "death_or_disconnect" );
self.achievement_player_stayed_in_maze_for_entire_round = 1;
while ( self.achievement_player_stayed_in_maze_for_entire_round )
{
self.achievement_player_stayed_in_maze_for_entire_round = self is_player_in_zone( "zone_maze" );
wait( randomfloatrange( 0.5, 1.0 ) );
}
}
check_maze_achievement_threads() //checked changed to match cerberus output
check_maze_achievement_threads()
{
if ( level.round_number >= 20 )
{
foreach ( player in get_players() )
{
if ( isDefined( player.achievement_player_started_round_in_maze ) && player.achievement_player_started_round_in_maze && isDefined( player.achievement_player_stayed_in_maze_for_entire_round ) && player.achievement_player_stayed_in_maze_for_entire_round && level._time_bomb.last_round_restored != ( level.round_number - 1 ) && !maps/mp/zombies/_zm_weap_time_bomb::is_time_bomb_round_change() )
{
/*
if ( level.round_number >= 20 )
{
foreach ( player in get_players() )
{
if ( isdefined( player.achievement_player_started_round_in_maze ) && player.achievement_player_started_round_in_maze && ( isdefined( player.achievement_player_stayed_in_maze_for_entire_round ) && player.achievement_player_stayed_in_maze_for_entire_round ) && level._time_bomb.last_round_restored != level.round_number - 1 && !maps\mp\zombies\_zm_weap_time_bomb::is_time_bomb_round_change() )
{
/#
iprintlnbold( player.name + " got achievement MAZED AND CONFUSED" );
iprintlnbold( player.name + " got achievement MAZED AND CONFUSED" );
#/
*/
player notify( "player_stayed_in_maze_for_entire_high_level_round" );
player notify( "_maze_achievement_think_done" );
}
}
}
player notify( "player_stayed_in_maze_for_entire_high_level_round" );
player notify( "_maze_achievement_think_done" );
}
}
}
}
vo_in_maze() //checked did not change to match cerberus output
vo_in_maze()
{
flag_wait( "mansion_door1" );
nwaittime = 300;
nminwait = 5;
nmaxwait = 10;
while ( 1 )
{
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
while ( !isDefined( aplayersinzone ) || aplayersinzone.size == 0 )
{
wait randomintrange( nminwait, nmaxwait );
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
}
random( aplayersinzone ) maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "in_maze" );
nminwait = 13;
nmaxwait = 37;
wait nwaittime;
}
}
flag_wait( "mansion_door1" );
nwaittime = 300;
nminwait = 5;
nmaxwait = 10;
while ( true )
{
for ( aplayersinzone = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ); !isdefined( aplayersinzone ) || aplayersinzone.size == 0; aplayersinzone = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ) )
wait( randomint( nminwait, nmaxwait ) );
random( aplayersinzone ) maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "in_maze" );
nminwait = 13;
nmaxwait = 37;
wait( nwaittime );
}
}

View File

@ -1,37 +1,43 @@
#include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_perks;
electric_switch()
{
trig = getent( "use_elec_switch", "targetname" );
master_switch = getent( "elec_switch", "targetname" );
master_switch notsolid();
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
trig setvisibletoall();
trig waittill( "trigger", user );
trig setinvisibletoall();
master_switch rotateroll( -90, 0,3 );
master_switch playsound( "zmb_switch_flip" );
master_switch playsound( "zmb_poweron" );
level delay_thread( 11,8, ::sndpoweronmusicstinger );
if ( isDefined( user ) )
{
user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" );
}
level thread maps/mp/zombies/_zm_perks::perk_unpause_all_perks();
master_switch waittill( "rotatedone" );
playfx( level._effect[ "switch_sparks" ], master_switch.origin + ( 0, 12, -60 ), anglesToForward( master_switch.angles ) );
master_switch playsound( "zmb_turn_on" );
level notify( "electric_door" );
clientnotify( "power_on" );
flag_set( "power_on" );
level setclientfield( "zombie_power_on", 1 );
trig = getent( "use_elec_switch", "targetname" );
master_switch = getent( "elec_switch", "targetname" );
master_switch notsolid();
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
trig setvisibletoall();
trig waittill( "trigger", user );
trig setinvisibletoall();
master_switch rotateroll( -90, 0.3 );
master_switch playsound( "zmb_switch_flip" );
master_switch playsound( "zmb_poweron" );
level delay_thread( 11.8, ::sndpoweronmusicstinger );
if ( isdefined( user ) )
user thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_on" );
level thread maps\mp\zombies\_zm_perks::perk_unpause_all_perks();
master_switch waittill( "rotatedone" );
playfx( level._effect["switch_sparks"], master_switch.origin + ( 0, 12, -60 ), anglestoforward( master_switch.angles ) );
master_switch playsound( "zmb_turn_on" );
level notify( "electric_door" );
clientnotify( "power_on" );
flag_set( "power_on" );
level setclientfield( "zombie_power_on", 1 );
}
sndpoweronmusicstinger()
{
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "poweron" );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "poweron" );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,208 +1,235 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
init()
{
declare_sidequest_stage( "sq", "bt", ::init_stage, ::stage_logic, ::exit_stage );
declare_sidequest_stage( "sq", "bt", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
flag_init( "sq_player_underground" );
level thread stage_vo();
level thread stage_start_watcher();
level._cur_stage_name = "bt";
clientnotify( "bt" );
flag_init( "sq_player_underground" );
level thread stage_vo();
level thread stage_start_watcher();
level._cur_stage_name = "bt";
clientnotify( "bt" );
}
stage_vo()
{
level waittill( "start_of_round" );
level thread stage_vo_watch_underground();
wait 5;
maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
maxissay( "vox_maxi_sidequest_maxis_start_2_0" );
maxissay( "vox_maxi_sidequest_maxis_start_3_0" );
maxissay( "vox_maxi_sidequest_maxis_start_4_0" );
maxissay( "vox_maxi_sidequest_maxis_start_5_0" );
flag_wait( "sq_player_underground" );
level.m_maxis_vo_spot.origin = ( -728, -344, 280 );
while ( isDefined( level.vo_player_who_discovered_stables_roof ) && is_true( level.vo_player_who_discovered_stables_roof.isspeaking ) )
{
wait 0,05;
}
maxissay( "vox_maxi_sidequest_town_0" );
maxissay( "vox_maxi_sidequest_town_1" );
wait 1;
level thread stage_vo_watch_gallows();
if ( !level.richcompleted )
{
if ( isDefined( level.rich_sq_player ) )
{
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 );
if ( isDefined( level.rich_sq_player ) )
{
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{
wait 1;
}
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_0", "sound_done_vox_plr_1_respond_richtofen_0" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_0" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 );
if ( isDefined( level.rich_sq_player ) )
{
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{
wait 1;
}
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_1", "sound_done_vox_plr_1_respond_richtofen_1" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_1" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 );
richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 );
if ( isDefined( level.rich_sq_player ) )
{
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{
wait 1;
}
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_2", "sound_done_vox_plr_1_respond_richtofen_2" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_2" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_town_0", 6 );
richtofensay( "vox_zmba_sidequest_town_1", 6 );
}
flag_set( "sq_intro_vo_done" );
level thread stage_vo_nag();
level thread stage_vo_watch_guillotine();
level waittill( "start_of_round" );
level thread stage_vo_watch_underground();
wait 5;
maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
maxissay( "vox_maxi_sidequest_maxis_start_2_0" );
maxissay( "vox_maxi_sidequest_maxis_start_3_0" );
maxissay( "vox_maxi_sidequest_maxis_start_4_0" );
maxissay( "vox_maxi_sidequest_maxis_start_5_0" );
flag_wait( "sq_player_underground" );
level.m_maxis_vo_spot.origin = ( -728, -344, 280 );
while ( isdefined( level.vo_player_who_discovered_stables_roof ) && is_true( level.vo_player_who_discovered_stables_roof.isspeaking ) )
wait 0.05;
maxissay( "vox_maxi_sidequest_town_0" );
maxissay( "vox_maxi_sidequest_town_1" );
wait 1;
level thread stage_vo_watch_gallows();
if ( !level.richcompleted )
{
if ( isdefined( level.rich_sq_player ) )
{
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 );
if ( isdefined( level.rich_sq_player ) )
{
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1;
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_0", "sound_done_vox_plr_1_respond_richtofen_0" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_0" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 );
if ( isdefined( level.rich_sq_player ) )
{
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1;
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_1", "sound_done_vox_plr_1_respond_richtofen_1" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_1" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 );
richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 );
if ( isdefined( level.rich_sq_player ) )
{
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1;
level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_2", "sound_done_vox_plr_1_respond_richtofen_2" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_2" );
wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
}
richtofensay( "vox_zmba_sidequest_town_0", 6 );
richtofensay( "vox_zmba_sidequest_town_1", 6 );
}
flag_set( "sq_intro_vo_done" );
level thread stage_vo_nag();
level thread stage_vo_watch_guillotine();
}
stage_vo_nag()
{
level endon( "sq_is_max_tower_built" );
level endon( "sq_is_ric_tower_built" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" );
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
i = 0;
while ( i < 5 )
{
level waittill( "end_of_round" );
maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot );
richtofensay( "vox_zmba_sidequest_nag_" + i, 10 );
i++;
}
level endon( "sq_is_max_tower_built" );
level endon( "sq_is_ric_tower_built" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" );
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
for ( i = 0; i < 5; i++ )
{
level waittill( "end_of_round" );
maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot );
richtofensay( "vox_zmba_sidequest_nag_" + i, 10 );
}
}
stage_vo_watch_guillotine()
{
level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_guillotine", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" );
trigger delete();
richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_0", 9 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_1", 3 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_2", 5 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_3", 11 );
level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_guillotine", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" );
trigger delete();
richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_0", 9 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_1", 3 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_2", 5 );
level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_3", 11 );
}
stage_vo_watch_gallows()
{
level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" );
trigger delete();
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
if ( flag( "sq_intro_vo_done" ) )
{
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
}
i = 0;
while ( i < 4 )
{
level waittill( "mtower_object_planted" );
if ( flag( "sq_intro_vo_done" ) )
{
maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 );
}
wait_network_frame();
i++;
}
m_maxis_vo_spot delete();
level endon( "sq_bt_over" );
level endon( "end_game_reward_starts_maxis" );
level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" );
trigger delete();
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
if ( flag( "sq_intro_vo_done" ) )
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
for ( i = 0; i < 4; i++ )
{
level waittill( "mtower_object_planted" );
if ( flag( "sq_intro_vo_done" ) )
maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 );
wait_network_frame();
}
m_maxis_vo_spot delete();
}
stage_vo_watch_underground()
{
trigger_wait( "sq_player_underground", "targetname" );
flag_set( "sq_player_underground" );
trigger_wait( "sq_player_underground", "targetname" );
flag_set( "sq_player_underground" );
}
stage_start_watcher()
{
level waittill_either( "mtower_object_planted", "rtower_object_planted" );
flag_set( "sq_started" );
level waittill_either( "mtower_object_planted", "rtower_object_planted" );
flag_set( "sq_started" );
}
stage_logic()
{
/#
iprintlnbold( "BT Started" );
iprintlnbold( "BT Started" );
#/
level thread wait_for_maxis_tower();
level thread wait_for_richtofen_tower();
flag_wait_any( "sq_is_max_tower_built", "sq_is_ric_tower_built" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
level thread wait_for_maxis_tower();
level thread wait_for_richtofen_tower();
flag_wait_any( "sq_is_max_tower_built", "sq_is_ric_tower_built" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
wait_for_maxis_tower()
{
level endon( "sq_is_ric_tower_built" );
wait_for_buildable( "buried_sq_bt_m_tower" );
flag_set( "sq_is_max_tower_built" );
level endon( "sq_is_ric_tower_built" );
wait_for_buildable( "buried_sq_bt_m_tower" );
flag_set( "sq_is_max_tower_built" );
}
wait_for_richtofen_tower()
{
level endon( "sq_is_max_tower_built" );
wait_for_buildable( "buried_sq_bt_r_tower" );
flag_set( "sq_is_ric_tower_built" );
level endon( "sq_is_max_tower_built" );
wait_for_buildable( "buried_sq_bt_r_tower" );
flag_set( "sq_is_ric_tower_built" );
}
exit_stage( success )
{
}

View File

@ -1,428 +1,441 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
init()
{
flag_init( "sq_wisp_failed" );
flag_init( "sq_m_wisp_weak" );
level.sq_ctw_m_tubes_lit = 0;
declare_sidequest_stage( "sq", "ctw", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_wisp_failed" );
flag_init( "sq_m_wisp_weak" );
level.sq_ctw_m_tubes_lit = 0;
declare_sidequest_stage( "sq", "ctw", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
flag_clear( "sq_wisp_failed" );
level._cur_stage_name = "ctw";
clientnotify( "ctw" );
flag_clear( "sq_wisp_failed" );
level._cur_stage_name = "ctw";
clientnotify( "ctw" );
}
stage_logic()
{
/#
iprintlnbold( "CTW Started" );
iprintlnbold( "CTW Started" );
#/
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
ctw_max_start_wisp();
}
else
{
level thread stage_vo_ric();
ctw_ric_start_wisp();
}
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
ctw_max_start_wisp();
}
else
{
level thread stage_vo_ric();
ctw_ric_start_wisp();
}
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
stage_vo_max()
{
level endon( "sq_wisp_failed" );
while ( !isDefined( level.vh_wisp ) )
{
wait 1;
}
level.vh_wisp endon( "delete" );
maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker );
maxissay( "vox_maxi_sidequest_ctw_1", level.e_sq_sign_attacker );
wait 15;
maxissay( "vox_maxis_sidequest_ctw_4", level.e_sq_sign_attacker );
level endon( "sq_wisp_failed" );
while ( !isdefined( level.vh_wisp ) )
wait 1;
level.vh_wisp endon( "delete" );
maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker );
maxissay( "vox_maxi_sidequest_ctw_1", level.e_sq_sign_attacker );
wait 15;
maxissay( "vox_maxis_sidequest_ctw_4", level.e_sq_sign_attacker );
}
stage_vo_ric()
{
level endon( "sq_wisp_failed" );
richtofensay( "vox_zmba_sidequest_ctw_0", 12 );
richtofensay( "vox_zmba_sidequest_ctw_1", 8 );
level waittill( "sq_ctw_zombie_powered_up" );
richtofensay( "vox_zmba_sidequest_ctw_3", 8 );
level endon( "sq_wisp_failed" );
richtofensay( "vox_zmba_sidequest_ctw_0", 12 );
richtofensay( "vox_zmba_sidequest_ctw_1", 8 );
level waittill( "sq_ctw_zombie_powered_up" );
richtofensay( "vox_zmba_sidequest_ctw_3", 8 );
}
wisp_move_from_sign_to_start( s_start )
{
self.origin = level.m_sq_start_sign.origin - vectorScale( ( 1, 0, 0 ), 20 );
self moveto( s_start.origin, 2, 0,5, 0,5 );
self waittill( "movedone" );
wait 1;
self.origin = level.m_sq_start_sign.origin - vectorscale( ( 0, 0, 1 ), 20.0 );
self moveto( s_start.origin, 2, 0.5, 0.5 );
self waittill( "movedone" );
wait 1;
}
ctw_ric_start_wisp()
{
if ( !isDefined( level.m_sq_start_sign ) )
{
return;
}
s_start = getstruct( level.m_sq_start_sign.target, "targetname" );
m_wisp = getent( "sq_wisp", "targetname" );
m_wisp setclientfield( "vulture_wisp", 1 );
m_wisp wisp_move_from_sign_to_start( s_start );
m_wisp thread ctw_ric_move_wisp( s_start );
if ( !isdefined( level.m_sq_start_sign ) )
return;
s_start = getstruct( level.m_sq_start_sign.target, "targetname" );
m_wisp = getent( "sq_wisp", "targetname" );
m_wisp setclientfield( "vulture_wisp", 1 );
m_wisp wisp_move_from_sign_to_start( s_start );
m_wisp thread ctw_ric_move_wisp( s_start );
}
ctw_ric_move_wisp( s_current )
{
self endon( "ctw_wisp_timeout" );
self setclientfield( "vulture_wisp", 0 );
self.origin = s_current.origin;
wait_network_frame();
self setclientfield( "vulture_wisp", 1 );
self thread ctw_ric_watch_wisp_timeout();
ctw_ric_watch_wisp_dist();
s_current = ctw_ric_get_next_wisp_struct( s_current );
self endon( "ctw_wisp_moved" );
self ctw_ric_power_towers();
flag_set( "sq_wisp_success" );
self endon( "ctw_wisp_timeout" );
do
{
self setclientfield( "vulture_wisp", 0 );
self.origin = s_current.origin;
wait_network_frame();
self setclientfield( "vulture_wisp", 1 );
self thread ctw_ric_watch_wisp_timeout();
ctw_ric_watch_wisp_dist();
s_current = ctw_ric_get_next_wisp_struct( s_current );
}
while ( isdefined( s_current ) );
self endon( "ctw_wisp_moved" );
self ctw_ric_power_towers();
flag_set( "sq_wisp_success" );
}
ctw_ric_get_next_wisp_struct( s_current )
{
if ( !isDefined( s_current.target ) )
{
return undefined;
}
a_structs = getstructarray( s_current.target, "targetname" );
return array_randomize( a_structs )[ 0 ];
if ( !isdefined( s_current.target ) )
return undefined;
a_structs = getstructarray( s_current.target, "targetname" );
return array_randomize( a_structs )[0];
}
ctw_ric_watch_wisp_timeout()
{
self endon( "ctw_wisp_moved" );
wait 12;
flag_set( "sq_wisp_failed" );
self setclientfield( "vulture_wisp", 0 );
self notify( "ctw_wisp_timeout" );
self endon( "ctw_wisp_moved" );
wait 12;
flag_set( "sq_wisp_failed" );
self setclientfield( "vulture_wisp", 0 );
self notify( "ctw_wisp_timeout" );
}
ctw_ric_watch_wisp_dist( s_current )
{
self endon( "ctw_wisp_timeout" );
is_near_wisp = 0;
while ( !is_near_wisp )
{
players = getplayers();
_a185 = players;
_k185 = getFirstArrayKey( _a185 );
while ( isDefined( _k185 ) )
{
player = _a185[ _k185 ];
if ( !player hasperk( "specialty_nomotionsensor" ) )
{
}
else
{
if ( distancesquared( player.origin, self.origin ) < 4096 )
{
is_near_wisp = 1;
}
}
_k185 = getNextArrayKey( _a185, _k185 );
}
wait 0,1;
}
self notify( "ctw_wisp_moved" );
self endon( "ctw_wisp_timeout" );
is_near_wisp = 0;
while ( !is_near_wisp )
{
players = getplayers();
foreach ( player in players )
{
if ( !player hasperk( "specialty_nomotionsensor" ) )
continue;
if ( distancesquared( player.origin, self.origin ) < 4096 )
is_near_wisp = 1;
}
wait 0.1;
}
self notify( "ctw_wisp_moved" );
}
ctw_ric_power_towers()
{
m_tower = getent( "sq_guillotine", "targetname" );
level setclientfield( "vulture_wisp_orb_count", 1 );
wait_network_frame();
level setclientfield( "vulture_wisp_orb_count", 0 );
wait 2;
v_guillotine_spot = self.origin;
self.origin = m_tower gettagorigin( "j_crystal_01" );
m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot );
i = 0;
while ( i < 5 )
{
wait 3;
e_powered_zombie = undefined;
while ( !isDefined( e_powered_zombie ) )
{
wait 1;
a_zombies = ctw_find_zombies_for_powerup( self.origin, 512, m_tower );
e_powered_zombie = array_randomize( a_zombies )[ 0 ];
}
level notify( "stop_ctw_ric_guillotine_glow" );
e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow );
e_powered_zombie waittill( "death" );
level setclientfield( "vulture_wisp_orb_count", i + 1 );
m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin );
i++;
}
m_tower = getent( "sq_guillotine", "targetname" );
level setclientfield( "vulture_wisp_orb_count", 1 );
wait_network_frame();
level setclientfield( "vulture_wisp_orb_count", 0 );
wait 2;
v_guillotine_spot = self.origin;
self.origin = m_tower gettagorigin( "j_crystal_01" );
m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot );
for ( i = 0; i < 5; i++ )
{
wait 3;
for ( e_powered_zombie = undefined; !isdefined( e_powered_zombie ); e_powered_zombie = array_randomize( a_zombies )[0] )
{
wait 1;
a_zombies = ctw_find_zombies_for_powerup( self.origin, 512, m_tower );
}
level notify( "stop_ctw_ric_guillotine_glow" );
e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow );
e_powered_zombie waittill( "death" );
level setclientfield( "vulture_wisp_orb_count", i + 1 );
m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin );
}
}
ctw_ric_guillotine_glow( v_spot )
{
level endon( "stop_ctw_ric_guillotine_glow" );
if ( !isDefined( self.m_glow ) )
{
self.m_glow = spawn( "script_model", v_spot );
self.m_glow setmodel( "tag_origin" );
}
while ( 1 )
{
playfxontag( level._effect[ "vulture_fx_wisp" ], self.m_glow, "tag_origin" );
wait 0,25;
self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" );
}
level endon( "stop_ctw_ric_guillotine_glow" );
if ( !isdefined( self.m_glow ) )
{
self.m_glow = spawn( "script_model", v_spot );
self.m_glow setmodel( "tag_origin" );
}
while ( true )
{
playfxontag( level._effect["vulture_fx_wisp"], self.m_glow, "tag_origin" );
wait 0.25;
self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" );
}
}
ctw_power_up_ric_zombie( m_wisp )
{
wait_network_frame();
v_to_zombie = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_wisp.origin );
v_move_spot = m_wisp.origin + ( v_to_zombie * 32 );
m_wisp.origin = v_move_spot;
self ctw_power_up_zombie();
do
{
wait_network_frame();
v_to_zombie = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_wisp.origin );
v_move_spot = m_wisp.origin + v_to_zombie * 32;
m_wisp.origin = v_move_spot;
}
while ( distancesquared( m_wisp.origin, self gettagorigin( "J_SpineLower" ) ) > 1024 );
self ctw_power_up_zombie();
}
ctw_return_wisp_to_guillotine( v_spot, v_start )
{
self.m_glow.origin = v_start;
self thread ctw_ric_guillotine_glow( v_start );
wait_network_frame();
v_to_tower = vectornormalize( v_spot - self.m_glow.origin );
v_move_spot = self.m_glow.origin + ( v_to_tower * 32 );
self.m_glow.origin = v_move_spot;
self.m_glow.origin = v_spot;
self.m_glow.origin = v_start;
self thread ctw_ric_guillotine_glow( v_start );
do
{
wait_network_frame();
v_to_tower = vectornormalize( v_spot - self.m_glow.origin );
v_move_spot = self.m_glow.origin + v_to_tower * 32;
self.m_glow.origin = v_move_spot;
}
while ( distancesquared( self.m_glow.origin, v_spot ) > 1024 );
self.m_glow.origin = v_spot;
}
ctw_max_start_wisp()
{
nd_start = getvehiclenode( level.m_sq_start_sign.target, "targetname" );
vh_wisp = spawnvehicle( "tag_origin", "wisp_ai", "heli_quadrotor2_zm", nd_start.origin, nd_start.angles );
vh_wisp makevehicleunusable();
level.vh_wisp = vh_wisp;
vh_wisp.n_sq_max_energy = 30;
vh_wisp.n_sq_energy = vh_wisp.n_sq_max_energy;
vh_wisp thread ctw_max_wisp_play_fx();
vh_wisp_mover = spawn( "script_model", vh_wisp.origin );
vh_wisp_mover setmodel( "tag_origin" );
vh_wisp linkto( vh_wisp_mover );
vh_wisp_mover wisp_move_from_sign_to_start( nd_start );
vh_wisp unlink();
vh_wisp_mover delete();
vh_wisp attachpath( nd_start );
vh_wisp startpath();
vh_wisp thread ctw_max_success_watch();
vh_wisp thread ctw_max_fail_watch();
vh_wisp thread ctw_max_wisp_enery_watch();
wait_network_frame();
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
vh_wisp cancelaimove();
vh_wisp clearvehgoalpos();
vh_wisp delete();
if ( isDefined( level.vh_wisp ) )
{
level.vh_wisp delete();
}
nd_start = getvehiclenode( level.m_sq_start_sign.target, "targetname" );
vh_wisp = spawnvehicle( "tag_origin", "wisp_ai", "heli_quadrotor2_zm", nd_start.origin, nd_start.angles );
vh_wisp makevehicleunusable();
level.vh_wisp = vh_wisp;
vh_wisp.n_sq_max_energy = 30;
vh_wisp.n_sq_energy = vh_wisp.n_sq_max_energy;
vh_wisp thread ctw_max_wisp_play_fx();
vh_wisp_mover = spawn( "script_model", vh_wisp.origin );
vh_wisp_mover setmodel( "tag_origin" );
vh_wisp linkto( vh_wisp_mover );
vh_wisp_mover wisp_move_from_sign_to_start( nd_start );
vh_wisp unlink();
vh_wisp_mover delete();
vh_wisp attachpath( nd_start );
vh_wisp startpath();
vh_wisp thread ctw_max_success_watch();
vh_wisp thread ctw_max_fail_watch();
vh_wisp thread ctw_max_wisp_enery_watch();
wait_network_frame();
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
vh_wisp cancelaimove();
vh_wisp clearvehgoalpos();
vh_wisp delete();
if ( isdefined( level.vh_wisp ) )
level.vh_wisp delete();
}
ctw_max_wisp_play_fx()
{
self playloopsound( "zmb_sq_wisp_loop" );
while ( isDefined( self ) )
{
playfxontag( level._effect[ "fx_wisp_m" ], self, "tag_origin" );
if ( !flag( "sq_m_wisp_weak" ) )
{
playfxontag( level._effect[ "fx_wisp_lg_m" ], self, "tag_origin" );
}
wait 0,3;
}
self playloopsound( "zmb_sq_wisp_loop" );
while ( isdefined( self ) )
{
playfxontag( level._effect["fx_wisp_m"], self, "tag_origin" );
if ( !flag( "sq_m_wisp_weak" ) )
playfxontag( level._effect["fx_wisp_lg_m"], self, "tag_origin" );
wait 0.3;
}
}
ctw_max_success_watch()
{
self endon( "death" );
self waittill( "reached_end_node" );
self endon( "death" );
self waittill( "reached_end_node" );
/#
iprintlnbold( "Wisp Success!" );
iprintlnbold( "Wisp Success!" );
#/
flag_set( "sq_wisp_success" );
level thread ctw_light_tube();
flag_set( "sq_wisp_success" );
level thread ctw_light_tube();
}
ctw_light_tube()
{
level.sq_ctw_m_tubes_lit++;
level setclientfield( "sq_ctw_m_t_l", level.sq_ctw_m_tubes_lit );
level.sq_ctw_m_tubes_lit++;
level setclientfield( "sq_ctw_m_t_l", level.sq_ctw_m_tubes_lit );
}
ctw_max_fail_watch()
{
self endon( "death" );
wait 1;
n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin );
a_players = getplayers();
_a382 = a_players;
_k382 = getFirstArrayKey( _a382 );
while ( isDefined( _k382 ) )
{
player = _a382[ _k382 ];
if ( distancesquared( self.origin, player.origin ) < 16384 )
{
/#
iprintlnbold( "Too Close to Wisp" );
#/
}
_k382 = getNextArrayKey( _a382, _k382 );
}
a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 );
array_thread( a_zombies, ::ctw_power_up_zombie );
if ( a_zombies.size )
{
self.n_sq_energy += 10;
if ( self.n_sq_energy > 30 )
{
self.n_sq_energy = 30;
}
}
else
{
self.n_sq_energy--;
self endon( "death" );
}
if ( self.n_sq_energy <= 15 && !flag( "sq_m_wisp_weak" ) )
{
flag_set( "sq_m_wisp_weak" );
}
else
{
if ( self.n_sq_energy > 15 && flag( "sq_m_wisp_weak" ) )
{
flag_clear( "sq_m_wisp_weak" );
}
}
do
{
wait 1;
n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin );
a_players = getplayers();
foreach ( player in a_players )
{
if ( distancesquared( self.origin, player.origin ) < 16384 )
{
/#
iprintlnbold( self.n_sq_energy );
iprintlnbold( "Too Close to Wisp" );
#/
level thread ctw_max_fail_vo();
flag_set( "sq_wisp_failed" );
}
}
a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 );
array_thread( a_zombies, ::ctw_power_up_zombie );
if ( a_zombies.size )
{
self.n_sq_energy += 10;
if ( self.n_sq_energy > 30 )
self.n_sq_energy = 30;
}
else
self.n_sq_energy--;
if ( self.n_sq_energy <= 15.0 && !flag( "sq_m_wisp_weak" ) )
flag_set( "sq_m_wisp_weak" );
else if ( self.n_sq_energy > 15.0 && flag( "sq_m_wisp_weak" ) )
flag_clear( "sq_m_wisp_weak" );
/#
iprintlnbold( self.n_sq_energy );
#/
}
while ( n_starter_dist < 262144 );
level thread ctw_max_fail_vo();
flag_set( "sq_wisp_failed" );
}
ctw_max_fail_vo()
{
maxissay( "vox_maxi_sidequest_ctw_8", level.e_sq_sign_attacker );
maxissay( "vox_maxi_sidequest_ctw_8", level.e_sq_sign_attacker );
}
ctw_max_wisp_enery_watch()
{
self endon( "death" );
while ( 1 )
{
if ( self.n_sq_energy <= 0 )
{
flag_set( "sq_wisp_failed" );
}
wait 1;
}
self endon( "death" );
while ( true )
{
if ( self.n_sq_energy <= 0 )
flag_set( "sq_wisp_failed" );
wait 1;
}
}
debug_origin()
{
/#
self endon( "death" );
while ( 1 )
{
debugstar( self.origin, 1, ( 1, 0, 0 ) );
wait 0,05;
self endon( "death" );
while ( true )
{
debugstar( self.origin, 1, ( 1, 0, 0 ) );
wait 0.05;
}
#/
}
}
ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore )
{
if ( !isDefined( m_ignore ) )
{
m_ignore = undefined;
}
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
n_radius_sq = n_radius * n_radius;
a_near_zombies = [];
_a473 = a_zombies;
_k473 = getFirstArrayKey( _a473 );
while ( isDefined( _k473 ) )
{
e_zombie = _a473[ _k473 ];
if ( distancesquared( e_zombie.origin, v_origin ) < n_radius_sq && !isDefined( e_zombie.sq_wisp_powered ) )
{
if ( sighttracepassed( v_origin, e_zombie gettagorigin( "J_SpineLower" ), 1, m_ignore ) )
{
a_near_zombies[ a_near_zombies.size ] = e_zombie;
}
}
_k473 = getNextArrayKey( _a473, _k473 );
}
return a_near_zombies;
if ( !isdefined( m_ignore ) )
m_ignore = undefined;
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
n_radius_sq = n_radius * n_radius;
a_near_zombies = [];
foreach ( e_zombie in a_zombies )
{
if ( distancesquared( e_zombie.origin, v_origin ) < n_radius_sq && !isdefined( e_zombie.sq_wisp_powered ) )
{
if ( sighttracepassed( v_origin, e_zombie gettagorigin( "J_SpineLower" ), 1, m_ignore ) )
a_near_zombies[a_near_zombies.size] = e_zombie;
}
}
return a_near_zombies;
}
ctw_power_up_zombie()
{
level notify( "sq_ctw_zombie_powered_up" );
self.sq_wisp_powered = 1;
n_oldhealth = self.maxhealth;
self.maxhealth *= 2;
if ( self.maxhealth < n_oldhealth )
{
self.maxhealth = n_oldhealth;
}
self.health = self.maxhealth;
if ( self.zombie_move_speed != "sprint" )
{
self set_zombie_run_cycle( "sprint" );
self.zombie_move_speed_original = self.zombie_move_speed;
}
if ( flag( "sq_is_max_tower_built" ) )
{
str_fx = "fx_wisp_m";
}
else
{
str_fx = "vulture_fx_wisp";
}
self thread ctw_power_up_zombie_m_fx( str_fx );
level notify( "sq_ctw_zombie_powered_up" );
self.sq_wisp_powered = 1;
n_oldhealth = self.maxhealth;
self.maxhealth *= 2;
if ( self.maxhealth < n_oldhealth )
self.maxhealth = n_oldhealth;
self.health = self.maxhealth;
if ( self.zombie_move_speed != "sprint" )
{
self set_zombie_run_cycle( "sprint" );
self.zombie_move_speed_original = self.zombie_move_speed;
}
if ( flag( "sq_is_max_tower_built" ) )
str_fx = "fx_wisp_m";
else
str_fx = "vulture_fx_wisp";
self thread ctw_power_up_zombie_m_fx( str_fx );
}
ctw_power_up_zombie_m_fx( str_fx )
{
self endon( "delete" );
self endon( "death" );
while ( isDefined( self ) && isalive( self ) )
{
playfxontag( level._effect[ str_fx ], self, "J_Wrist_RI" );
wait 0,25;
playfxontag( level._effect[ str_fx ], self, "J_Wrist_LE" );
wait 0,25;
self playloopsound( "zmb_sq_wisp_possess" );
}
self endon( "delete" );
self endon( "death" );
while ( isdefined( self ) && isalive( self ) )
{
playfxontag( level._effect[str_fx], self, "J_Wrist_RI" );
wait 0.25;
playfxontag( level._effect[str_fx], self, "J_Wrist_LE" );
wait 0.25;
self playloopsound( "zmb_sq_wisp_possess" );
}
}

View File

@ -1,216 +1,197 @@
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zm_buried_sq_ftl;
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zm_buried_sq;
#include maps\mp\zm_buried_sq_ftl;
#include maps\mp\zombies\_zm_spawner;
init()
{
flag_init( "ftl_lantern_charged" );
declare_sidequest_stage( "sq", "ftl", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "ftl_lantern_charged" );
declare_sidequest_stage( "sq", "ftl", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
level.sq_ftl_lantern_fuel = 0;
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
}
else
{
level thread stage_vo_ric();
}
level._cur_stage_name = "ftl";
clientnotify( "ftl" );
level.sq_ftl_lantern_fuel = 0;
if ( flag( "sq_is_max_tower_built" ) )
level thread stage_vo_max();
else
level thread stage_vo_ric();
level._cur_stage_name = "ftl";
clientnotify( "ftl" );
}
stage_logic()
{
/#
iprintlnbold( "FTL Started" );
iprintlnbold( "FTL Started" );
#/
if ( flag( "sq_is_max_tower_built" ) )
{
max_fill_lantern_watcher();
}
else
{
ric_fill_lantern_watcher();
}
flag_wait( "ftl_lantern_charged" );
if ( flag( "sq_is_max_tower_built" ) )
{
thread stage_vo_filled_max();
}
else
{
thread stage_vo_filled_ric();
}
sq_ftl_show_marker();
wait_for_buildable( "buried_sq_oillamp" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
if ( flag( "sq_is_max_tower_built" ) )
max_fill_lantern_watcher();
else
ric_fill_lantern_watcher();
flag_wait( "ftl_lantern_charged" );
if ( flag( "sq_is_max_tower_built" ) )
thread stage_vo_filled_max();
else
thread stage_vo_filled_ric();
sq_ftl_show_marker();
wait_for_buildable( "buried_sq_oillamp" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
stage_vo_max()
{
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_0" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" );
level waittill( "sq_ftl_lantern_inc" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_0" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" );
level waittill( "sq_ftl_lantern_inc" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" );
}
sq_ftl_maxis_vo_on_holder( str_vox )
{
player = sq_ftl_get_lantern_holder();
if ( isDefined( player ) )
{
maxissay( str_vox, player );
}
player = sq_ftl_get_lantern_holder();
if ( isdefined( player ) )
maxissay( str_vox, player );
}
sq_ftl_show_marker()
{
m_marker = getent( "sq_lantern_symbol", "targetname" );
m_marker.origin += vectorScale( ( 0, 0, 1 ), 2 );
level.sq_lamp_generator_unitrig.origin = level.sq_lamp_generator_unitrig.realorigin;
m_marker = getent( "sq_lantern_symbol", "targetname" );
m_marker.origin += vectorscale( ( 0, 0, 1 ), 2.0 );
level.sq_lamp_generator_unitrig.origin = level.sq_lamp_generator_unitrig.realorigin;
}
sq_ftl_get_lantern_holder()
{
players = get_players();
_a107 = players;
_k107 = getFirstArrayKey( _a107 );
while ( isDefined( _k107 ) )
{
player = _a107[ _k107 ];
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
return player;
}
_k107 = getNextArrayKey( _a107, _k107 );
}
players = get_players();
foreach ( player in players )
{
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
return player;
}
}
stage_vo_filled_max()
{
maps/mp/zm_buried_sq_ftl::sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_ll_0" );
maps\mp\zm_buried_sq_ftl::sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_ll_0" );
}
stage_vo_ric()
{
richtofensay( "vox_zmba_sidequest_pl_0", 12 );
level waittill( "sq_ftl_lantern_inc" );
richtofensay( "vox_zmba_sidequest_pl_1", 6 );
richtofensay( "vox_zmba_sidequest_pl_0", 12 );
level waittill( "sq_ftl_lantern_inc" );
richtofensay( "vox_zmba_sidequest_pl_1", 6 );
}
stage_vo_filled_ric()
{
richtofensay( "vox_zmba_sidequest_ll_0", 10 );
richtofensay( "vox_zmba_sidequest_ll_1", 7 );
richtofensay( "vox_zmba_sidequest_ll_0", 10 );
richtofensay( "vox_zmba_sidequest_ll_1", 7 );
}
max_fill_lantern_watcher()
{
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
array_thread( a_zombies, ::max_lantern_zombie_death_watcher );
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::max_lantern_zombie_death_watcher );
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
array_thread( a_zombies, ::max_lantern_zombie_death_watcher );
maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::max_lantern_zombie_death_watcher );
}
max_lantern_zombie_death_watcher()
{
level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) )
{
return;
}
self waittill( "death", attacker );
if ( !isDefined( attacker ) || isplayer( attacker ) )
{
return;
}
players = getplayers();
_a164 = players;
_k164 = getFirstArrayKey( _a164 );
while ( isDefined( _k164 ) )
{
player = _a164[ _k164 ];
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isDefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
{
player ftl_lantern_increment();
}
}
_k164 = getNextArrayKey( _a164, _k164 );
}
level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) )
return;
self waittill( "death", attacker );
if ( !isdefined( attacker ) || isplayer( attacker ) )
return;
players = getplayers();
foreach ( player in players )
{
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isdefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
player ftl_lantern_increment();
}
}
}
ric_fill_lantern_watcher()
{
a_axis = getaiarray( "axis" );
a_ghost = [];
_a183 = a_axis;
_k183 = getFirstArrayKey( _a183 );
while ( isDefined( _k183 ) )
{
e_axis = _a183[ _k183 ];
if ( is_true( e_axis.is_ghost ) )
{
a_ghost[ a_ghost.size ] = e_axis;
}
_k183 = getNextArrayKey( _a183, _k183 );
}
array_thread( a_ghost, ::ric_lantern_ghost_death_watcher );
a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" );
array_thread( a_ghost_spawners, ::add_spawn_function, ::ric_lantern_ghost_death_watcher );
a_axis = getaiarray( "axis" );
a_ghost = [];
foreach ( e_axis in a_axis )
{
if ( is_true( e_axis.is_ghost ) )
a_ghost[a_ghost.size] = e_axis;
}
array_thread( a_ghost, ::ric_lantern_ghost_death_watcher );
a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" );
array_thread( a_ghost_spawners, ::add_spawn_function, ::ric_lantern_ghost_death_watcher );
}
ric_lantern_ghost_death_watcher()
{
level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) )
{
return;
}
self waittill( "death", attacker );
players = getplayers();
_a210 = players;
_k210 = getFirstArrayKey( _a210 );
while ( isDefined( _k210 ) )
{
player = _a210[ _k210 ];
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isDefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
{
player ftl_lantern_increment();
}
}
_k210 = getNextArrayKey( _a210, _k210 );
}
level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) )
return;
self waittill( "death", attacker );
players = getplayers();
foreach ( player in players )
{
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isdefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
player ftl_lantern_increment();
}
}
}
ftl_lantern_increment()
{
level.sq_ftl_lantern_fuel++;
level notify( "sq_ftl_lantern_inc" );
self playsound( "zmb_lantern_fill_" + level.sq_ftl_lantern_fuel );
level.sq_ftl_lantern_fuel++;
level notify( "sq_ftl_lantern_inc" );
self playsound( "zmb_lantern_fill_" + level.sq_ftl_lantern_fuel );
/#
iprintlnbold( "Fuel Level: " + level.sq_ftl_lantern_fuel );
iprintlnbold( "Fuel Level: " + level.sq_ftl_lantern_fuel );
#/
if ( level.sq_ftl_lantern_fuel >= 10 )
{
self playsound( "zmb_lantern_fill_done" );
flag_set( "ftl_lantern_charged" );
}
if ( level.sq_ftl_lantern_fuel >= 10 )
{
self playsound( "zmb_lantern_fill_done" );
flag_set( "ftl_lantern_charged" );
}
}

View File

@ -1,257 +1,262 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zm_buried_sq;
init()
{
flag_init( "sq_gl_lantern_aquired" );
declare_sidequest_stage( "sq", "gl", ::init_stage, ::stage_logic, ::exit_stage );
level thread sq_gl_setup_buildable_trig();
flag_init( "sq_gl_lantern_aquired" );
declare_sidequest_stage( "sq", "gl", ::init_stage, ::stage_logic, ::exit_stage );
level thread sq_gl_setup_buildable_trig();
}
sq_gl_setup_buildable_trig()
{
while ( !isDefined( level.sq_lamp_generator_unitrig ) )
{
wait 1;
}
level.sq_lamp_generator_unitrig.realorigin = level.sq_lamp_generator_unitrig.origin;
level.sq_lamp_generator_unitrig.origin += vectorScale( ( 0, 0, 1 ), 10000 );
while ( !isdefined( level.sq_lamp_generator_unitrig ) )
wait 1;
level.sq_lamp_generator_unitrig.realorigin = level.sq_lamp_generator_unitrig.origin;
level.sq_lamp_generator_unitrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 );
}
init_stage()
{
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
gl_lantern_spawn( s_start );
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
}
else
{
level thread stage_vo_ric();
}
level._cur_stage_name = "gl";
clientnotify( "gl" );
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
gl_lantern_spawn( s_start );
if ( flag( "sq_is_max_tower_built" ) )
level thread stage_vo_max();
else
level thread stage_vo_ric();
level._cur_stage_name = "gl";
clientnotify( "gl" );
}
stage_logic()
{
/#
iprintlnbold( "GL Started" );
iprintlnbold( "GL Started" );
#/
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
gl_lantern_move( s_start );
flag_wait( "sq_gl_lantern_aquired" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
gl_lantern_move( s_start );
flag_wait( "sq_gl_lantern_aquired" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
stage_vo_max()
{
level waittill( "lantern_crashing" );
maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern );
level waittill( "lantern_crashing" );
maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern );
}
stage_vo_ric()
{
richtofensay( "vox_zmba_sidequest_gl_0", 8 );
level waittill( "lantern_crashing" );
richtofensay( "vox_zmba_sidequest_gl_1", 6 );
richtofensay( "vox_zmba_sidequest_gl_0", 8 );
level waittill( "lantern_crashing" );
richtofensay( "vox_zmba_sidequest_gl_1", 6 );
}
gl_lantern_spawn( s_start )
{
level.vh_lantern = spawnvehicle( "tag_origin", "ghost_lantern_ai", "heli_quadrotor2_zm", s_start.origin, ( 0, 0, 1 ) );
level.vh_lantern makevehicleunusable();
level.vh_lantern setneargoalnotifydist( 128 );
level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin );
level.vh_lantern.m_lantern setmodel( "p6_zm_bu_lantern_silver_on" );
level.vh_lantern.m_lantern linkto( level.vh_lantern, "tag_origin" );
playfxontag( level._effect[ "sq_glow" ], level.vh_lantern.m_lantern, "tag_origin" );
level.vh_lantern.m_lantern playsound( "zmb_sq_glantern_impact" );
level.vh_lantern.m_lantern playloopsound( "zmb_sq_glantern_full_loop_3d" );
level.vh_lantern thread gl_lantern_damage_watcher();
wait_network_frame();
level.vh_lantern = spawnvehicle( "tag_origin", "ghost_lantern_ai", "heli_quadrotor2_zm", s_start.origin, ( 0, 0, 0 ) );
level.vh_lantern makevehicleunusable();
level.vh_lantern setneargoalnotifydist( 128 );
level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin );
level.vh_lantern.m_lantern setmodel( "p6_zm_bu_lantern_silver_on" );
level.vh_lantern.m_lantern linkto( level.vh_lantern, "tag_origin" );
playfxontag( level._effect["sq_glow"], level.vh_lantern.m_lantern, "tag_origin" );
level.vh_lantern.m_lantern playsound( "zmb_sq_glantern_impact" );
level.vh_lantern.m_lantern playloopsound( "zmb_sq_glantern_full_loop_3d" );
level.vh_lantern thread gl_lantern_damage_watcher();
wait_network_frame();
}
gl_lantern_delete()
{
if ( isDefined( level.vh_lantern ) )
{
if ( isDefined( level.vh_lantern.m_lantern ) )
{
level.vh_lantern.m_lantern delete();
}
if ( isDefined( level.vh_lantern.t_pickup ) )
{
level.vh_lantern.t_pickup delete();
}
level.vh_lantern cancelaimove();
level.vh_lantern clearvehgoalpos();
if ( isDefined( level.vh_lantern.m_link ) )
{
level.vh_lantern.m_link delete();
}
level.vh_lantern delete();
}
if ( isdefined( level.vh_lantern ) )
{
if ( isdefined( level.vh_lantern.m_lantern ) )
level.vh_lantern.m_lantern delete();
if ( isdefined( level.vh_lantern.t_pickup ) )
level.vh_lantern.t_pickup delete();
level.vh_lantern cancelaimove();
level.vh_lantern clearvehgoalpos();
if ( isdefined( level.vh_lantern.m_link ) )
level.vh_lantern.m_link delete();
level.vh_lantern delete();
}
}
gl_lantern_move( s_current )
{
level endon( "lantern_crashing" );
while ( 1 )
{
s_current = gl_lantern_get_next_struct( s_current );
if ( flag( "sq_is_max_tower_built" ) )
{
if ( randomint( 100 ) < 50 )
{
s_current = level.vh_lantern gl_lantern_teleport();
}
}
level.vh_lantern gl_lantern_move_to_struct( s_current );
}
level endon( "lantern_crashing" );
while ( true )
{
s_current = gl_lantern_get_next_struct( s_current );
if ( flag( "sq_is_max_tower_built" ) )
{
if ( randomint( 100 ) < 50 )
s_current = level.vh_lantern gl_lantern_teleport();
}
level.vh_lantern gl_lantern_move_to_struct( s_current );
}
}
gl_lantern_get_next_struct( s_current )
{
a_struct_links = [];
a_target_structs = getstructarray( s_current.target, "targetname" );
while ( isDefined( s_current.script_string ) )
{
a_names = strtok( s_current.script_string, " " );
_a171 = a_names;
_k171 = getFirstArrayKey( _a171 );
while ( isDefined( _k171 ) )
{
str_name = _a171[ _k171 ];
a_new_structs = getstructarray( str_name, "targetname" );
a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 );
_k171 = getNextArrayKey( _a171, _k171 );
}
}
return array_randomize( a_target_structs )[ 0 ];
a_struct_links = [];
a_target_structs = getstructarray( s_current.target, "targetname" );
if ( isdefined( s_current.script_string ) )
{
a_names = strtok( s_current.script_string, " " );
foreach ( str_name in a_names )
{
a_new_structs = getstructarray( str_name, "targetname" );
a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 );
}
}
return array_randomize( a_target_structs )[0];
}
gl_lantern_move_to_struct( s_goto )
{
self endon( "death" );
self endon( "delete" );
self setvehgoalpos( s_goto.origin, 1 );
self pathvariableoffset( vectorScale( ( 0, 0, 1 ), 128 ), 1 );
self waittill_either( "goal", "near_goal" );
self endon( "death" );
self endon( "delete" );
self setvehgoalpos( s_goto.origin, 1 );
self pathvariableoffset( vectorscale( ( 1, 1, 1 ), 128.0 ), 1 );
self waittill_either( "goal", "near_goal" );
}
gl_lantern_teleport()
{
self notify( "lantern_teleporting" );
playfx( level._effect[ "fx_wisp_lg_m" ], self.origin );
playsoundatposition( "zmb_sq_glantern_impact", self.origin );
gl_lantern_delete();
a_path_spots = getstructarray( "sq_ghost_lamp_path", "script_noteworthy" );
s_teleport_spot = array_randomize( a_path_spots )[ 0 ];
gl_lantern_spawn( s_teleport_spot );
return s_teleport_spot;
self notify( "lantern_teleporting" );
playfx( level._effect["fx_wisp_lg_m"], self.origin );
playsoundatposition( "zmb_sq_glantern_impact", self.origin );
gl_lantern_delete();
a_path_spots = getstructarray( "sq_ghost_lamp_path", "script_noteworthy" );
s_teleport_spot = array_randomize( a_path_spots )[0];
gl_lantern_spawn( s_teleport_spot );
return s_teleport_spot;
}
gl_lantern_damage_watcher()
{
self.m_lantern endon( "delete" );
self.m_lantern setcandamage( 1 );
while ( 1 )
{
self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type );
if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" )
{
break;
}
else
{
}
}
self.m_lantern playsound( "zmb_sq_glantern_impact" );
self gl_lantern_crash_movement();
self thread gl_lantern_pickup_watch();
self thread gl_lantern_stop_spin_on_land();
level thread gl_lantern_respawn_wait();
level waittill( "gl_lantern_respawn" );
if ( isDefined( self.m_lantern ) )
{
s_start_spot = gl_lantern_teleport();
gl_lantern_move( s_start_spot );
}
self.m_lantern endon( "delete" );
self.m_lantern setcandamage( 1 );
while ( true )
{
self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type );
if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" )
break;
}
self.m_lantern playsound( "zmb_sq_glantern_impact" );
self gl_lantern_crash_movement();
self thread gl_lantern_pickup_watch();
self thread gl_lantern_stop_spin_on_land();
level thread gl_lantern_respawn_wait();
level waittill( "gl_lantern_respawn" );
if ( isdefined( self.m_lantern ) )
{
s_start_spot = gl_lantern_teleport();
gl_lantern_move( s_start_spot );
}
}
gl_lantern_stop_spin_on_land()
{
self endon( "delete" );
while ( isDefined( self ) && length( self.velocity ) > 3 )
{
wait 0,1;
}
if ( isDefined( self ) )
{
self.m_link = spawn( "script_model", self.origin );
self.m_link setmodel( "tag_origin" );
self linkto( self.m_link );
}
self endon( "delete" );
while ( isdefined( self ) && length( self.velocity ) > 3 )
wait 0.1;
if ( isdefined( self ) )
{
self.m_link = spawn( "script_model", self.origin );
self.m_link setmodel( "tag_origin" );
self linkto( self.m_link );
}
}
gl_lantern_respawn_wait()
{
wait 30;
level notify( "gl_lantern_respawn" );
wait 30;
level notify( "gl_lantern_respawn" );
}
gl_lantern_pickup_watch()
{
self endon( "lantern_teleporting" );
self.t_pickup = spawn( "trigger_radius_use", self.origin, 0, 48, 32 );
self.t_pickup setcursorhint( "HINT_NOICON" );
self.t_pickup sethintstring( &"ZM_BURIED_SQ_LANTERN_G" );
self.t_pickup triggerignoreteam();
self.t_pickup enablelinkto();
self.t_pickup linkto( self );
self.t_pickup waittill( "trigger", player );
player player_take_piece( level.zombie_buildables[ "buried_sq_oillamp" ].buildablepieces[ 0 ] );
piece = player player_get_buildable_piece( 2 );
if ( isDefined( piece ) )
{
piece.sq_is_ghost_lamp = 1;
piece.start_origin = vectorScale( ( 0, 0, 1 ), 512 );
piece.start_angles = ( 0, 0, 1 );
}
self.t_pickup delete();
self.m_lantern delete();
self delete();
flag_set( "sq_gl_lantern_aquired" );
self endon( "lantern_teleporting" );
self.t_pickup = spawn( "trigger_radius_use", self.origin, 0, 48, 32 );
self.t_pickup setcursorhint( "HINT_NOICON" );
self.t_pickup sethintstring( &"ZM_BURIED_SQ_LANTERN_G" );
self.t_pickup triggerignoreteam();
self.t_pickup enablelinkto();
self.t_pickup linkto( self );
self.t_pickup waittill( "trigger", player );
player player_take_piece( level.zombie_buildables["buried_sq_oillamp"].buildablepieces[0] );
piece = player player_get_buildable_piece( 2 );
if ( isdefined( piece ) )
{
piece.sq_is_ghost_lamp = 1;
piece.start_origin = vectorscale( ( 0, 0, -1 ), 512.0 );
piece.start_angles = ( 0, 0, 0 );
}
self.t_pickup delete();
self.m_lantern delete();
self delete();
flag_set( "sq_gl_lantern_aquired" );
}
gl_lantern_crash_movement()
{
level notify( "lantern_crashing" );
self cancelaimove();
self clearvehgoalpos();
self setphysacceleration( vectorScale( ( 0, 0, 1 ), 800 ) );
hitdir = ( 0, 0, 1 );
side_dir = vectorcross( hitdir, ( 0, 0, 1 ) );
side_dir_mag = randomfloatrange( -100, 100 );
side_dir_mag += sign( side_dir_mag ) * 80;
side_dir *= side_dir_mag;
self setvehvelocity( self.velocity + vectorScale( ( 0, 0, 1 ), 100 ) + vectornormalize( side_dir ) );
ang_vel = self getangularvelocity();
ang_vel = ( ang_vel[ 0 ] * 0,3, ang_vel[ 1 ], ang_vel[ 2 ] * 0,3 );
yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[ 1 ] );
yaw_vel += sign( yaw_vel ) * 180;
ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) );
self setangularvelocity( ang_vel );
self.crash_accel = randomfloatrange( 75, 110 );
level notify( "lantern_crashing" );
self cancelaimove();
self clearvehgoalpos();
self setphysacceleration( vectorscale( ( 0, 0, -1 ), 800.0 ) );
hitdir = ( 1, 0, 0 );
side_dir = vectorcross( hitdir, ( 0, 0, 1 ) );
side_dir_mag = randomfloatrange( -100, 100 );
side_dir_mag += sign( side_dir_mag ) * 80;
side_dir *= side_dir_mag;
self setvehvelocity( self.velocity + vectorscale( ( 0, 0, 1 ), 100.0 ) + vectornormalize( side_dir ) );
ang_vel = self getangularvelocity();
ang_vel = ( ang_vel[0] * 0.3, ang_vel[1], ang_vel[2] * 0.3 );
yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[1] );
yaw_vel += sign( yaw_vel ) * 180;
ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) );
self setangularvelocity( ang_vel );
self.crash_accel = randomfloatrange( 75, 110 );
}

View File

@ -1,420 +1,409 @@
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props_dlc3" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
#include maps\mp\zombies\_zm_zonemgr;
init()
{
flag_init( "sq_ip_puzzle_complete" );
level.sq_bp_buttons = [];
s_lightboard = getstruct( "zm_sq_lightboard", "targetname" );
s_lightboard sq_bp_spawn_board();
declare_sidequest_stage( "sq", "ip", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_ip_puzzle_complete" );
level.sq_bp_buttons = [];
s_lightboard = getstruct( "zm_sq_lightboard", "targetname" );
s_lightboard sq_bp_spawn_board();
declare_sidequest_stage( "sq", "ip", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
}
else
{
level thread stage_vo_ric();
}
level._cur_stage_name = "ip";
clientnotify( "ip" );
if ( flag( "sq_is_max_tower_built" ) )
level thread stage_vo_max();
else
level thread stage_vo_ric();
level._cur_stage_name = "ip";
clientnotify( "ip" );
}
stage_vo_max()
{
s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
maxissay( "vox_maxi_sidequest_ip_0", m_maxis_vo_spot );
maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot );
m_lightboard = getent( "sq_bp_board", "targetname" );
trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 );
trigger waittill( "trigger" );
maxissay( "vox_maxi_sidequest_ip_2", m_lightboard );
maxissay( "vox_maxi_sidequest_ip_3", m_lightboard );
s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" );
maxissay( "vox_maxi_sidequest_ip_0", m_maxis_vo_spot );
maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot );
m_lightboard = getent( "sq_bp_board", "targetname" );
trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 );
trigger waittill( "trigger" );
maxissay( "vox_maxi_sidequest_ip_2", m_lightboard );
maxissay( "vox_maxi_sidequest_ip_3", m_lightboard );
}
stage_vo_ric()
{
richtofensay( "vox_zmba_sidequest_ip_0", 10 );
richtofensay( "vox_zmba_sidequest_ip_1", 5,5 );
richtofensay( "vox_zmba_sidequest_ip_2", 8 );
richtofensay( "vox_zmba_sidequest_ip_3", 11 );
if ( !isDefined( level.rich_sq_player ) )
{
return;
}
while ( !level.rich_sq_player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_maze" ) )
{
wait 1;
}
richtofensay( "vox_zmba_sidequest_ip_4", 8 );
richtofensay( "vox_zmba_sidequest_ip_0", 10 );
richtofensay( "vox_zmba_sidequest_ip_1", 5.5 );
richtofensay( "vox_zmba_sidequest_ip_2", 8 );
richtofensay( "vox_zmba_sidequest_ip_3", 11 );
if ( !isdefined( level.rich_sq_player ) )
return;
while ( !level.rich_sq_player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_maze" ) )
wait 1;
richtofensay( "vox_zmba_sidequest_ip_4", 8 );
}
stage_logic()
{
/#
iprintlnbold( "IP Started" );
iprintlnbold( "IP Started" );
#/
if ( flag( "sq_is_max_tower_built" ) )
{
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
array_thread( a_button_structs, ::sq_bp_spawn_trigger );
m_lightboard = getent( "sq_bp_board", "targetname" );
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
while ( !flag( "sq_ip_puzzle_complete" ) )
{
sq_bp_start_puzzle_lights();
sq_bp_delete_green_lights();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
}
}
else sq_ml_spawn_levers();
a_levers = getentarray( "sq_ml_lever", "targetname" );
array_thread( a_levers, ::sq_ml_spawn_trigger );
level thread sq_ml_puzzle_logic();
flag_wait( "sq_ip_puzzle_complete" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
if ( flag( "sq_is_max_tower_built" ) )
{
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
array_thread( a_button_structs, ::sq_bp_spawn_trigger );
m_lightboard = getent( "sq_bp_board", "targetname" );
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
while ( !flag( "sq_ip_puzzle_complete" ) )
{
sq_bp_start_puzzle_lights();
sq_bp_delete_green_lights();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
}
}
else
{
sq_ml_spawn_levers();
a_levers = getentarray( "sq_ml_lever", "targetname" );
array_thread( a_levers, ::sq_ml_spawn_trigger );
level thread sq_ml_puzzle_logic();
flag_wait( "sq_ip_puzzle_complete" );
}
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
sq_bp_spawn_trigger()
{
level endon( "sq_ip_puzzle_complete" );
self.trig = spawn( "trigger_radius_use", self.origin, 0, 16, 16 );
self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
self.trig triggerignoreteam();
self.trig usetriggerrequirelookat();
while ( 1 )
{
self.trig waittill( "trigger" );
self.trig sethintstring( "" );
level thread sq_bp_button_pressed( self.script_string, self.trig );
wait 1;
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
}
level endon( "sq_ip_puzzle_complete" );
self.trig = spawn( "trigger_radius_use", self.origin, 0, 16, 16 );
self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
self.trig triggerignoreteam();
self.trig usetriggerrequirelookat();
while ( true )
{
self.trig waittill( "trigger" );
self.trig sethintstring( "" );
level thread sq_bp_button_pressed( self.script_string, self.trig );
wait 1;
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
}
}
sq_bp_spawn_board()
{
m_board = spawn( "script_model", self.origin );
m_board.angles = self.angles;
m_board setmodel( "p6_zm_bu_bulb_puzzle_machine" );
m_board.targetname = "sq_bp_board";
m_board = spawn( "script_model", self.origin );
m_board.angles = self.angles;
m_board setmodel( "p6_zm_bu_bulb_puzzle_machine" );
m_board.targetname = "sq_bp_board";
}
sq_bp_button_pressed( str_tag, trig )
{
if ( isDefined( level.str_sq_bp_active_light ) )
{
if ( level.str_sq_bp_active_light == str_tag )
{
trig playsound( "zmb_sq_bell_yes" );
sq_bp_light_on( str_tag, "green" );
level notify( "sq_bp_correct_button" );
}
else
{
trig playsound( "zmb_sq_bell_no" );
level notify( "sq_bp_wrong_button" );
m_light = sq_bp_light_on( str_tag, "yellow" );
}
}
else
{
m_light = sq_bp_light_on( str_tag, "yellow" );
trig playsound( "zmb_sq_bell_no" );
}
wait 1;
if ( isDefined( m_light ) )
{
level setclientfield( m_light, 0 );
}
if ( isdefined( level.str_sq_bp_active_light ) )
{
if ( level.str_sq_bp_active_light == str_tag )
{
trig playsound( "zmb_sq_bell_yes" );
sq_bp_light_on( str_tag, "green" );
level notify( "sq_bp_correct_button" );
}
else
{
trig playsound( "zmb_sq_bell_no" );
level notify( "sq_bp_wrong_button" );
m_light = sq_bp_light_on( str_tag, "yellow" );
}
}
else
{
m_light = sq_bp_light_on( str_tag, "yellow" );
trig playsound( "zmb_sq_bell_no" );
}
wait 1;
if ( isdefined( m_light ) )
level setclientfield( m_light, 0 );
}
sq_bp_start_puzzle_lights()
{
level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
a_tags = [];
_a190 = a_button_structs;
_k190 = getFirstArrayKey( _a190 );
while ( isDefined( _k190 ) )
{
m_button = _a190[ _k190 ];
a_tags[ a_tags.size ] = m_button.script_string;
_k190 = getNextArrayKey( _a190, _k190 );
}
a_tags = array_randomize( a_tags );
m_lightboard = getent( "sq_bp_board", "targetname" );
if ( !isDefined( level.t_start ) )
{
level.t_start = spawn( "trigger_radius_use", m_lightboard.origin, 0, 16, 16 );
}
level.t_start setcursorhint( "HINT_NOICON" );
level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
level.t_start triggerignoreteam();
level.t_start usetriggerrequirelookat();
level.t_start waittill( "trigger" );
level.t_start delete();
_a210 = a_tags;
_k210 = getFirstArrayKey( _a210 );
while ( isDefined( _k210 ) )
{
str_tag = _a210[ _k210 ];
wait_network_frame();
wait_network_frame();
level thread sq_bp_set_current_bulb( str_tag );
level waittill( "sq_bp_correct_button" );
_k210 = getNextArrayKey( _a210, _k210 );
}
flag_set( "sq_ip_puzzle_complete" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
_a221 = a_button_structs;
_k221 = getFirstArrayKey( _a221 );
while ( isDefined( _k221 ) )
{
s_button = _a221[ _k221 ];
if ( isDefined( s_button.trig ) )
{
s_button.trig delete();
}
_k221 = getNextArrayKey( _a221, _k221 );
}
level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
a_tags = [];
foreach ( m_button in a_button_structs )
a_tags[a_tags.size] = m_button.script_string;
a_tags = array_randomize( a_tags );
m_lightboard = getent( "sq_bp_board", "targetname" );
if ( !isdefined( level.t_start ) )
level.t_start = spawn( "trigger_radius_use", m_lightboard.origin, 0, 16, 16 );
level.t_start setcursorhint( "HINT_NOICON" );
level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
level.t_start triggerignoreteam();
level.t_start usetriggerrequirelookat();
level.t_start waittill( "trigger" );
level.t_start delete();
foreach ( str_tag in a_tags )
{
wait_network_frame();
wait_network_frame();
level thread sq_bp_set_current_bulb( str_tag );
level waittill( "sq_bp_correct_button" );
}
flag_set( "sq_ip_puzzle_complete" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
foreach ( s_button in a_button_structs )
{
if ( isdefined( s_button.trig ) )
s_button.trig delete();
}
}
sq_bp_set_current_bulb( str_tag )
{
level endon( "sq_bp_correct_button" );
level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" );
if ( isDefined( level.m_sq_bp_active_light ) )
{
level.str_sq_bp_active_light = "";
}
level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" );
level.str_sq_bp_active_light = str_tag;
wait 10;
level notify( "sq_bp_timeout" );
level endon( "sq_bp_correct_button" );
level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" );
if ( isdefined( level.m_sq_bp_active_light ) )
level.str_sq_bp_active_light = "";
level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" );
level.str_sq_bp_active_light = str_tag;
wait 10;
level notify( "sq_bp_timeout" );
}
sq_bp_delete_green_lights()
{
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
_a251 = a_button_structs;
_k251 = getFirstArrayKey( _a251 );
while ( isDefined( _k251 ) )
{
m_button = _a251[ _k251 ];
str_clientfield = "buried_sq_bp_" + m_button.script_string;
level setclientfield( str_clientfield, 0 );
_k251 = getNextArrayKey( _a251, _k251 );
}
if ( isDefined( level.m_sq_bp_active_light ) )
{
level.str_sq_bp_active_light = "";
}
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
foreach ( m_button in a_button_structs )
{
str_clientfield = "buried_sq_bp_" + m_button.script_string;
level setclientfield( str_clientfield, 0 );
}
if ( isdefined( level.m_sq_bp_active_light ) )
level.str_sq_bp_active_light = "";
}
sq_bp_light_on( str_tag, str_color )
{
str_clientfield = "buried_sq_bp_" + str_tag;
n_color = 1;
if ( str_color == "green" )
{
n_color = 2;
}
level setclientfield( str_clientfield, 0 );
wait_network_frame();
level setclientfield( str_clientfield, n_color );
return str_clientfield;
str_clientfield = "buried_sq_bp_" + str_tag;
n_color = 1;
if ( str_color == "green" )
n_color = 2;
level setclientfield( str_clientfield, 0 );
wait_network_frame();
level setclientfield( str_clientfield, n_color );
return str_clientfield;
}
debug_tag( str_tag )
{
/#
self endon( "death" );
while ( 1 )
{
debugstar( self gettagorigin( str_tag ), 1, ( 0, 1, 0 ) );
wait 0,05;
self endon( "death" );
while ( true )
{
debugstar( self gettagorigin( str_tag ), 1, ( 1, 0, 0 ) );
wait 0.05;
}
#/
}
}
sq_ml_spawn_lever( n_index )
{
m_lever = spawn( "script_model", ( 0, 1, 0 ) );
m_lever setmodel( self.model );
m_lever.targetname = "sq_ml_lever";
while ( 1 )
{
v_spot = self.origin;
v_angles = self.angles;
if ( isDefined( level._maze._active_perm_list[ n_index ] ) )
{
is_flip = randomint( 2 );
s_spot = getstruct( level._maze._active_perm_list[ n_index ], "script_noteworthy" );
v_right = anglesToRight( s_spot.angles );
v_offset = vectornormalize( v_right ) * 2;
if ( is_flip )
{
v_offset *= -1;
}
v_spot = s_spot.origin + vectorScale( ( 0, 1, 0 ), 48 ) + v_offset;
v_angles = s_spot.angles + vectorScale( ( 0, 1, 0 ), 90 );
if ( is_flip )
{
v_angles = s_spot.angles - vectorScale( ( 0, 1, 0 ), 90 );
}
}
m_lever.origin = v_spot;
m_lever.angles = v_angles;
m_lever = spawn( "script_model", ( 0, 0, 0 ) );
m_lever setmodel( self.model );
m_lever.targetname = "sq_ml_lever";
while ( true )
{
v_spot = self.origin;
v_angles = self.angles;
if ( isdefined( level._maze._active_perm_list[n_index] ) )
{
is_flip = randomint( 2 );
s_spot = getstruct( level._maze._active_perm_list[n_index], "script_noteworthy" );
v_right = anglestoright( s_spot.angles );
v_offset = vectornormalize( v_right ) * 2;
if ( is_flip )
v_offset *= -1;
v_spot = s_spot.origin + vectorscale( ( 0, 0, 1 ), 48.0 ) + v_offset;
v_angles = s_spot.angles + vectorscale( ( 0, 1, 0 ), 90.0 );
if ( is_flip )
v_angles = s_spot.angles - vectorscale( ( 0, 1, 0 ), 90.0 );
}
m_lever.origin = v_spot;
m_lever.angles = v_angles;
/#
m_lever thread sq_ml_show_lever_debug( v_spot, n_index );
m_lever thread sq_ml_show_lever_debug( v_spot, n_index );
#/
level waittill( "zm_buried_maze_changed" );
}
level waittill( "zm_buried_maze_changed" );
}
}
sq_ml_show_lever_debug( v_spot, n_index )
{
level endon( "zm_buried_maze_changed" );
level endon( "zm_buried_maze_changed" );
/#
while ( 1 )
{
line( self.origin, v_spot, ( 0, 1, 0 ) );
print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 );
wait 0,05;
while ( true )
{
line( self.origin, v_spot, ( 0, 0, 1 ) );
print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 );
wait 0.05;
}
#/
}
}
sq_ml_spawn_trigger()
{
v_right = anglesToForward( self.angles );
v_offset = vectornormalize( v_right ) * 8;
self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 );
self.trig enablelinkto();
self.trig linkto( self );
self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
self.trig triggerignoreteam();
self.trig usetriggerrequirelookat();
self.is_flipped = 0;
self useanimtree( -1 );
while ( 1 )
{
self.trig waittill( "trigger" );
self setanim( level.maze_switch_anim[ "switch_down" ] );
self.trig sethintstring( "" );
self.is_flipped = 1;
self.n_flip_number = level.sq_ml_curr_lever;
level.sq_ml_curr_lever++;
self.trig playsound( "zmb_sq_maze_switch" );
level waittill( "sq_ml_reset_levers" );
self setanim( level.maze_switch_anim[ "switch_up" ] );
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
self.is_flipped = 0;
}
v_right = anglestoforward( self.angles );
v_offset = vectornormalize( v_right ) * 8;
self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 );
self.trig enablelinkto();
self.trig linkto( self );
self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
self.trig triggerignoreteam();
self.trig usetriggerrequirelookat();
self.is_flipped = 0;
self useanimtree( -1 );
while ( true )
{
self.trig waittill( "trigger" );
self setanim( level.maze_switch_anim["switch_down"] );
self.trig sethintstring( "" );
self.is_flipped = 1;
self.n_flip_number = level.sq_ml_curr_lever;
level.sq_ml_curr_lever++;
self.trig playsound( "zmb_sq_maze_switch" );
level waittill( "sq_ml_reset_levers" );
self setanim( level.maze_switch_anim["switch_up"] );
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
self.is_flipped = 0;
}
}
sq_ml_spawn_levers()
{
if ( maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_maze" ) )
{
level waittill( "zm_buried_maze_changed" );
}
a_lever_structs = getstructarray( "sq_maze_lever", "targetname" );
i = 0;
while ( i < a_lever_structs.size )
{
a_lever_structs[ i ] thread sq_ml_spawn_lever( i );
i++;
}
if ( maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_maze" ) )
level waittill( "zm_buried_maze_changed" );
a_lever_structs = getstructarray( "sq_maze_lever", "targetname" );
for ( i = 0; i < a_lever_structs.size; i++ )
a_lever_structs[i] thread sq_ml_spawn_lever( i );
}
sq_ml_puzzle_logic()
{
a_levers = getentarray( "sq_ml_lever", "targetname" );
level.sq_ml_curr_lever = 0;
a_levers = array_randomize( a_levers );
i = 0;
while ( i < a_levers.size )
{
a_levers[ i ].n_lever_order = i;
i++;
}
while ( 1 )
{
level.sq_ml_curr_lever = 0;
sq_ml_puzzle_wait_for_levers();
n_correct = 0;
_a424 = a_levers;
_k424 = getFirstArrayKey( _a424 );
while ( isDefined( _k424 ) )
{
m_lever = _a424[ _k424 ];
if ( m_lever.n_flip_number == m_lever.n_lever_order )
{
playfxontag( level._effect[ "sq_spark" ], m_lever, "tag_origin" );
n_correct++;
m_lever playsound( "zmb_sq_maze_correct_spark" );
}
_k424 = getNextArrayKey( _a424, _k424 );
}
a_levers = getentarray( "sq_ml_lever", "targetname" );
level.sq_ml_curr_lever = 0;
a_levers = array_randomize( a_levers );
for ( i = 0; i < a_levers.size; i++ )
a_levers[i].n_lever_order = i;
while ( true )
{
level.sq_ml_curr_lever = 0;
sq_ml_puzzle_wait_for_levers();
n_correct = 0;
foreach ( m_lever in a_levers )
{
if ( m_lever.n_flip_number == m_lever.n_lever_order )
{
playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
n_correct++;
m_lever playsound( "zmb_sq_maze_correct_spark" );
}
}
/#
iprintlnbold( "Levers Correct: " + n_correct );
iprintlnbold( "Levers Correct: " + n_correct );
#/
if ( n_correct == a_levers.size )
{
flag_set( "sq_ip_puzzle_complete" );
}
level waittill( "zm_buried_maze_changed" );
level notify( "sq_ml_reset_levers" );
wait 1;
}
if ( n_correct == a_levers.size )
flag_set( "sq_ip_puzzle_complete" );
level waittill( "zm_buried_maze_changed" );
level notify( "sq_ml_reset_levers" );
wait 1;
}
}
sq_ml_puzzle_wait_for_levers()
{
a_levers = getentarray( "sq_ml_lever", "targetname" );
are_all_flipped = 0;
while ( !are_all_flipped )
{
are_all_flipped = 1;
_a458 = a_levers;
_k458 = getFirstArrayKey( _a458 );
while ( isDefined( _k458 ) )
{
m_lever = _a458[ _k458 ];
if ( m_lever.is_flipped == 0 )
{
are_all_flipped = 0;
}
_k458 = getNextArrayKey( _a458, _k458 );
}
wait 1;
}
a_levers = getentarray( "sq_ml_lever", "targetname" );
are_all_flipped = 0;
while ( !are_all_flipped )
{
are_all_flipped = 1;
foreach ( m_lever in a_levers )
{
if ( m_lever.is_flipped == 0 )
are_all_flipped = 0;
}
wait 1;
}
}

View File

@ -1,102 +1,90 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
init()
{
flag_init( "sq_ll_generator_on" );
declare_sidequest_stage( "sq", "ll", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_ll_generator_on" );
declare_sidequest_stage( "sq", "ll", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
level._cur_stage_name = "ll";
clientnotify( "ll" );
level._cur_stage_name = "ll";
clientnotify( "ll" );
}
stage_logic()
{
/#
iprintlnbold( "LL Started" );
iprintlnbold( "LL Started" );
#/
if ( !isDefined( level.generator_power_states_color ) )
{
level.generator_power_states_color = 0;
}
sq_ll_show_code();
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
if ( !isdefined( level.generator_power_states_color ) )
level.generator_power_states_color = 0;
sq_ll_show_code();
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
sq_ll_show_code()
{
a_spots = getstructarray( "sq_code_pos", "targetname" );
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_codes = [];
_a50 = a_signs;
_k50 = getFirstArrayKey( _a50 );
while ( isDefined( _k50 ) )
{
m_sign = _a50[ _k50 ];
if ( flag( "sq_is_max_tower_built" ) )
{
if ( isDefined( m_sign.is_max_sign ) )
{
a_codes[ a_codes.size ] = m_sign.model + "_code";
}
}
else
{
if ( isDefined( m_sign.is_ric_sign ) )
{
a_codes[ a_codes.size ] = m_sign.model + "_code";
}
}
_k50 = getNextArrayKey( _a50, _k50 );
}
i = 0;
while ( i < a_codes.size )
{
if ( a_codes[ i ] == "p6_zm_bu_sign_tunnel_consumption_code" )
{
a_codes[ i ] = "p6_zm_bu_sign_tunnel_consump_code";
}
i++;
}
i = 0;
while ( i < a_codes.size )
{
m_code = spawn( "script_model", a_spots[ i ].origin );
m_code.angles = a_spots[ i ].angles;
m_code setmodel( a_codes[ i ] );
i++;
}
if ( flag( "sq_is_max_tower_built" ) )
{
level thread sq_ll_show_code_vo_max();
}
else
{
level thread sq_ll_show_code_vo_ric();
}
a_spots = getstructarray( "sq_code_pos", "targetname" );
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_codes = [];
foreach ( m_sign in a_signs )
{
if ( flag( "sq_is_max_tower_built" ) )
{
if ( isdefined( m_sign.is_max_sign ) )
a_codes[a_codes.size] = m_sign.model + "_code";
continue;
}
if ( isdefined( m_sign.is_ric_sign ) )
a_codes[a_codes.size] = m_sign.model + "_code";
}
for ( i = 0; i < a_codes.size; i++ )
{
if ( a_codes[i] == "p6_zm_bu_sign_tunnel_consumption_code" )
a_codes[i] = "p6_zm_bu_sign_tunnel_consump_code";
}
for ( i = 0; i < a_codes.size; i++ )
{
m_code = spawn( "script_model", a_spots[i].origin );
m_code.angles = a_spots[i].angles;
m_code setmodel( a_codes[i] );
}
if ( flag( "sq_is_max_tower_built" ) )
level thread sq_ll_show_code_vo_max();
else
level thread sq_ll_show_code_vo_ric();
}
exit_stage( success )
{
}
sq_ll_show_code_vo_max()
{
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
maxissay( "vox_maxi_sidequest_signs_0", a_signs[ 0 ] );
maxissay( "vox_maxi_sidequest_signs_1", a_signs[ 0 ] );
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
maxissay( "vox_maxi_sidequest_signs_0", a_signs[0] );
maxissay( "vox_maxi_sidequest_signs_1", a_signs[0] );
}
sq_ll_show_code_vo_ric()
{
richtofensay( "vox_zmba_sidequest_signs_0", 7 );
richtofensay( "vox_zmba_sidequest_signs_1", 10 );
richtofensay( "vox_zmba_sidequest_signs_2", 9 );
richtofensay( "vox_zmba_sidequest_signs_0", 7 );
richtofensay( "vox_zmba_sidequest_signs_1", 10 );
richtofensay( "vox_zmba_sidequest_signs_2", 9 );
}

View File

@ -1,204 +1,205 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
init()
{
flag_init( "sq_amplifiers_on" );
a_amp_structs = getstructarray( "sq_amplifier_spot" );
_a16 = a_amp_structs;
_k16 = getFirstArrayKey( _a16 );
while ( isDefined( _k16 ) )
{
s_amp_spot = _a16[ _k16 ];
m_amplifier = spawn( "script_model", s_amp_spot.origin );
m_amplifier thread mta_amplifier_init();
_k16 = getNextArrayKey( _a16, _k16 );
}
declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_amplifiers_on" );
a_amp_structs = getstructarray( "sq_amplifier_spot" );
foreach ( s_amp_spot in a_amp_structs )
{
m_amplifier = spawn( "script_model", s_amp_spot.origin );
m_amplifier thread mta_amplifier_init();
}
declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
array_thread( a_amplifiers, ::mta_amplifier_found_watcher );
level thread stage_vo_max();
level thread stage_vo_ric();
level._cur_stage_name = "mta";
clientnotify( "mta" );
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
array_thread( a_amplifiers, ::mta_amplifier_found_watcher );
level thread stage_vo_max();
level thread stage_vo_ric();
level._cur_stage_name = "mta";
clientnotify( "mta" );
}
stage_logic()
{
/#
iprintlnbold( "MTA Started" );
iprintlnbold( "MTA Started" );
#/
flag_wait_any( "sq_amplifiers_on", "sq_amplifiers_broken" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
flag_wait_any( "sq_amplifiers_on", "sq_amplifiers_broken" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
stage_vo_max()
{
level thread stage_vo_max_amp_broken();
level waittill( "mta_amp_found", amp );
maxissay( "vox_maxi_sidequest_amp_0", amp );
maxissay( "vox_maxi_sidequest_amp_1", amp );
level thread stage_vo_max_amp_broken();
level waittill( "mta_amp_found", amp );
maxissay( "vox_maxi_sidequest_amp_0", amp );
maxissay( "vox_maxi_sidequest_amp_1", amp );
}
stage_vo_max_amp_broken()
{
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_2", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_3", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_4", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_5", amp );
maxissay( "vox_maxi_sidequest_gl_0", amp );
maxissay( "vox_maxi_sidequest_gl_1", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_2", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_3", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_4", amp );
level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_5", amp );
maxissay( "vox_maxi_sidequest_gl_0", amp );
maxissay( "vox_maxi_sidequest_gl_1", amp );
}
stage_vo_ric()
{
level thread stage_vo_ric_amp_amplified();
level waittill( "mta_amp_found_by_sam" );
richtofensay( "vox_zmba_sidequest_amp_0", 10 );
richtofensay( "vox_zmba_sidequest_amp_1", 7 );
level thread stage_vo_ric_amp_amplified();
level waittill( "mta_amp_found_by_sam" );
richtofensay( "vox_zmba_sidequest_amp_0", 10 );
richtofensay( "vox_zmba_sidequest_amp_1", 7 );
}
stage_vo_ric_amp_amplified()
{
level waittill( "mta_amp_amplified" );
richtofensay( "vox_zmba_sidequest_amp_2", 6 );
richtofensay( "vox_zmba_sidequest_amp_3", 4 );
level waittill( "mta_amp_amplified" );
richtofensay( "vox_zmba_sidequest_amp_2", 6 );
richtofensay( "vox_zmba_sidequest_amp_3", 4 );
}
mta_amplifier_found_watcher()
{
self endon( "damaged_by_subwoofer" );
self endon( "amplifier_filled" );
if ( self.amplifier_state != "base" )
{
return;
}
trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 );
trigger waittill( "trigger", who );
if ( isDefined( level.rich_sq_player ) && who == level.rich_sq_player )
{
level notify( "mta_amp_found_by_sam" );
}
else
{
level notify( "mta_amp_found" );
}
self endon( "damaged_by_subwoofer" );
self endon( "amplifier_filled" );
if ( self.amplifier_state != "base" )
return;
trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 );
trigger waittill( "trigger", who );
if ( isdefined( level.rich_sq_player ) && who == level.rich_sq_player )
level notify( "mta_amp_found_by_sam" );
else
level notify( "mta_amp_found", self );
}
mta_amplifier_init()
{
self setmodel( "p6_zm_bu_ether_amplifier" );
self.targetname = "sq_amplifier";
self.script_noteworthy = "subwoofer_target";
self.amplifier_state = "base";
self playloopsound( "zmb_sq_amplifier_empty_loop", 1 );
self setcandamage( 1 );
self thread mta_amplifier_subwoofer_watch();
self mta_amplifier_damage_watch();
self setmodel( "p6_zm_bu_ether_amplifier" );
self.targetname = "sq_amplifier";
self.script_noteworthy = "subwoofer_target";
self.amplifier_state = "base";
self playloopsound( "zmb_sq_amplifier_empty_loop", 1 );
self setcandamage( 1 );
self thread mta_amplifier_subwoofer_watch();
self mta_amplifier_damage_watch();
}
mta_amplifier_subwoofer_watch()
{
self waittill( "damaged_by_subwoofer" );
self waittill( "damaged_by_subwoofer" );
/#
iprintlnbold( "Amplifier Broken" );
iprintlnbold( "Amplifier Broken" );
#/
self.amplifier_state = "broken";
self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
self stoploopsound( 0,1 );
self playsound( "zmb_sq_amplifier_destroy" );
level notify( "mta_amp_broken" );
mta_check_all_amplifier_states();
self.amplifier_state = "broken";
self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
self stoploopsound( 0.1 );
self playsound( "zmb_sq_amplifier_destroy" );
level notify( "mta_amp_broken", self );
mta_check_all_amplifier_states();
}
mta_amplifier_damage_watch()
{
self endon( "damaged_by_subwoofer" );
n_slowgun_count = 0;
while ( 1 )
{
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( str_weapon == "slowgun_zm" || str_weapon == "slowgun_upgraded_zm" )
{
n_slowgun_count++;
shader_amount = linear_map( n_slowgun_count, 0, 25, 0, 1 );
self setclientfield( "AmplifierShaderConstant", shader_amount );
if ( n_slowgun_count >= 25 )
{
self endon( "damaged_by_subwoofer" );
n_slowgun_count = 0;
while ( true )
{
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( str_weapon == "slowgun_zm" || str_weapon == "slowgun_upgraded_zm" )
{
n_slowgun_count++;
shader_amount = linear_map( n_slowgun_count, 0, 25, 0.0, 1.0 );
self setclientfield( "AmplifierShaderConstant", shader_amount );
if ( n_slowgun_count >= 25 )
{
/#
iprintlnbold( "Amplifier Filled" );
iprintlnbold( "Amplifier Filled" );
#/
self thread mta_amplifier_filled_fx();
self.amplifier_state = "filled";
self playsound( "zmb_sq_amplifier_fill" );
self playloopsound( "zmb_sq_amplifier_full_loop", 1 );
self notify( "amplifier_filled" );
level notify( "mta_amp_amplified" );
break;
}
}
else
{
wait_network_frame();
}
}
mta_check_all_amplifier_states();
self thread mta_amplifier_filled_fx();
self.amplifier_state = "filled";
self playsound( "zmb_sq_amplifier_fill" );
self playloopsound( "zmb_sq_amplifier_full_loop", 1 );
self notify( "amplifier_filled" );
level notify( "mta_amp_amplified" );
break;
}
}
wait_network_frame();
}
mta_check_all_amplifier_states();
}
mta_amplifier_filled_fx()
{
while ( 1 )
{
playfx( level._effect[ "sq_ether_amp_trail" ], self.origin + vectorScale( ( 0, 0, 1 ), 46 ) );
wait 1;
}
while ( true )
{
playfx( level._effect["sq_ether_amp_trail"], self.origin + vectorscale( ( 0, 0, 1 ), 46.0 ) );
wait 1;
}
}
mta_check_all_amplifier_states()
{
is_all_broken = 1;
is_all_filled = 1;
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
_a226 = a_amplifiers;
_k226 = getFirstArrayKey( _a226 );
while ( isDefined( _k226 ) )
{
m_amplifier = _a226[ _k226 ];
if ( m_amplifier.amplifier_state != "filled" )
{
is_all_filled = 0;
}
if ( m_amplifier.amplifier_state != "broken" )
{
is_all_broken = 0;
}
_k226 = getNextArrayKey( _a226, _k226 );
}
if ( is_all_filled )
{
flag_set( "sq_amplifiers_on" );
}
else
{
if ( is_all_broken )
{
flag_set( "sq_amplifiers_broken" );
}
}
is_all_broken = 1;
is_all_filled = 1;
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
foreach ( m_amplifier in a_amplifiers )
{
if ( m_amplifier.amplifier_state != "filled" )
is_all_filled = 0;
if ( m_amplifier.amplifier_state != "broken" )
is_all_broken = 0;
}
if ( is_all_filled )
flag_set( "sq_amplifiers_on" );
else if ( is_all_broken )
flag_set( "sq_amplifiers_broken" );
}

View File

@ -1,223 +1,231 @@
#include maps/mp/zm_buried_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
init()
{
flag_init( "sq_ows_start" );
flag_init( "sq_ows_target_missed" );
flag_init( "sq_ows_success" );
declare_sidequest_stage( "sq", "ows", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_ows_start" );
flag_init( "sq_ows_target_missed" );
flag_init( "sq_ows_success" );
declare_sidequest_stage( "sq", "ows", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max();
}
else
{
level thread stage_vo_ric();
}
level._cur_stage_name = "ows";
clientnotify( "ows" );
if ( flag( "sq_is_max_tower_built" ) )
level thread stage_vo_max();
else
level thread stage_vo_ric();
level._cur_stage_name = "ows";
clientnotify( "ows" );
}
stage_vo_max()
{
m_lightboard = getent( "sq_bp_board", "targetname" );
maxissay( "vox_maxi_sidequest_ip_4", m_lightboard );
m_lightboard = getent( "sq_bp_board", "targetname" );
maxissay( "vox_maxi_sidequest_ip_4", m_lightboard );
}
stage_vo_ric()
{
richtofensay( "vox_zmba_sidequest_ip_5", 8 );
richtofensay( "vox_zmba_sidequest_ip_6", 8 );
richtofensay( "vox_zmba_sidequest_ip_7", 11 );
richtofensay( "vox_zmba_sidequest_ip_5", 8 );
richtofensay( "vox_zmba_sidequest_ip_6", 8 );
richtofensay( "vox_zmba_sidequest_ip_7", 11 );
}
stage_logic()
{
/#
iprintlnbold( "OWS Started" );
iprintlnbold( "OWS Started" );
#/
while ( !flag( "sq_ows_success" ) )
{
level thread ows_fountain_wait();
flag_wait( "sq_ows_start" );
ows_targets_start();
flag_clear( "sq_ows_start" );
}
stage_completed( "sq", level._cur_stage_name );
while ( !flag( "sq_ows_success" ) )
{
level thread ows_fountain_wait();
flag_wait( "sq_ows_start" );
ows_targets_start();
flag_clear( "sq_ows_start" );
}
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
ows_fountain_wait()
{
level endon( "sq_ows_start" );
s_fountain_spot = getstruct( "sq_ows_fountain", "targetname" );
t_fountain = spawn( "trigger_radius_use", s_fountain_spot.origin, 0, 55, 64 );
t_fountain setcursorhint( "HINT_NOICON" );
t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" );
t_fountain triggerignoreteam();
t_fountain usetriggerrequirelookat();
t_fountain waittill( "trigger" );
t_fountain playsound( "zmb_sq_coin_toss" );
t_fountain delete();
flag_set( "sq_ows_start" );
level endon( "sq_ows_start" );
s_fountain_spot = getstruct( "sq_ows_fountain", "targetname" );
t_fountain = spawn( "trigger_radius_use", s_fountain_spot.origin, 0, 55, 64 );
t_fountain setcursorhint( "HINT_NOICON" );
t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" );
t_fountain triggerignoreteam();
t_fountain usetriggerrequirelookat();
t_fountain waittill( "trigger" );
t_fountain playsound( "zmb_sq_coin_toss" );
t_fountain delete();
flag_set( "sq_ows_start" );
}
ows_targets_start()
{
n_cur_second = 0;
flag_clear( "sq_ows_target_missed" );
level thread sndsidequestowsmusic();
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
while ( n_cur_second < 40 )
{
a_spawn_spots = ows_targets_get_cur_spots( n_cur_second );
if ( isDefined( a_spawn_spots ) && a_spawn_spots.size > 0 )
{
ows_targets_spawn( a_spawn_spots );
}
wait 1;
n_cur_second++;
}
if ( !flag( "sq_ows_target_missed" ) )
{
flag_set( "sq_ows_success" );
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
}
else
{
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
}
level notify( "sndEndOWSMusic" );
n_cur_second = 0;
flag_clear( "sq_ows_target_missed" );
level thread sndsidequestowsmusic();
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
while ( n_cur_second < 40 )
{
a_spawn_spots = ows_targets_get_cur_spots( n_cur_second );
if ( isdefined( a_spawn_spots ) && a_spawn_spots.size > 0 )
ows_targets_spawn( a_spawn_spots );
wait 1;
n_cur_second++;
}
if ( !flag( "sq_ows_target_missed" ) )
{
flag_set( "sq_ows_success" );
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
}
else
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
level notify( "sndEndOWSMusic" );
}
ows_targets_get_cur_spots( n_time )
{
a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
a_to_spawn = [];
str_time = "" + n_time;
_a133 = a_target_spots;
_k133 = getFirstArrayKey( _a133 );
while ( isDefined( _k133 ) )
{
s_spot = _a133[ _k133 ];
if ( isDefined( s_spot.script_string ) )
{
a_spawn_times = strtok( s_spot.script_string, " " );
if ( isinarray( a_spawn_times, str_time ) )
{
a_to_spawn[ a_to_spawn.size ] = s_spot;
}
}
_k133 = getNextArrayKey( _a133, _k133 );
}
return a_to_spawn;
a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
a_to_spawn = [];
str_time = "" + n_time;
foreach ( s_spot in a_target_spots )
{
if ( isdefined( s_spot.script_string ) )
{
a_spawn_times = strtok( s_spot.script_string, " " );
if ( isinarray( a_spawn_times, str_time ) )
a_to_spawn[a_to_spawn.size] = s_spot;
}
}
return a_to_spawn;
}
ows_targets_spawn( a_spawn_spots )
{
_a151 = a_spawn_spots;
_k151 = getFirstArrayKey( _a151 );
while ( isDefined( _k151 ) )
{
s_spot = _a151[ _k151 ];
m_target = spawn( "script_model", s_spot.origin );
m_target.angles = s_spot.angles;
m_target setmodel( "p6_zm_bu_target" );
m_target ghost();
wait_network_frame();
m_target show();
playfxontag( level._effect[ "sq_spawn" ], m_target, "tag_origin" );
m_target playsound( "zmb_sq_target_spawn" );
if ( isDefined( s_spot.target ) )
{
m_target thread ows_target_move( s_spot.target );
}
m_target thread ows_target_think();
m_target thread sndhit();
m_target thread sndtime();
_k151 = getNextArrayKey( _a151, _k151 );
}
foreach ( s_spot in a_spawn_spots )
{
m_target = spawn( "script_model", s_spot.origin );
m_target.angles = s_spot.angles;
m_target setmodel( "p6_zm_bu_target" );
m_target ghost();
wait_network_frame();
m_target show();
playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
m_target playsound( "zmb_sq_target_spawn" );
if ( isdefined( s_spot.target ) )
m_target thread ows_target_move( s_spot.target );
m_target thread ows_target_think();
m_target thread sndhit();
m_target thread sndtime();
}
}
ows_target_think()
{
self setcandamage( 1 );
self thread ows_target_delete_timer();
self waittill_either( "ows_target_timeout", "damage" );
if ( isDefined( self.m_linker ) )
{
self unlink();
self.m_linker delete();
}
self rotatepitch( -90, 0,15, 0,05, 0,05 );
self waittill( "rotatedone" );
self delete();
self setcandamage( 1 );
self thread ows_target_delete_timer();
self waittill_either( "ows_target_timeout", "damage" );
if ( isdefined( self.m_linker ) )
{
self unlink();
self.m_linker delete();
}
self rotatepitch( -90, 0.15, 0.05, 0.05 );
self waittill( "rotatedone" );
self delete();
}
ows_target_move( str_target )
{
s_target = getstruct( str_target, "targetname" );
self.m_linker = spawn( "script_model", self.origin );
self.m_linker.angles = self.angles;
self linkto( self.m_linker );
self.m_linker moveto( s_target.origin, 4, 0,05, 0,05 );
s_target = getstruct( str_target, "targetname" );
self.m_linker = spawn( "script_model", self.origin );
self.m_linker.angles = self.angles;
self linkto( self.m_linker );
self.m_linker moveto( s_target.origin, 4, 0.05, 0.05 );
}
ows_target_delete_timer()
{
self endon( "death" );
wait 4;
self notify( "ows_target_timeout" );
flag_set( "sq_ows_target_missed" );
self endon( "death" );
wait 4;
self notify( "ows_target_timeout" );
flag_set( "sq_ows_target_missed" );
/#
iprintlnbold( "missed target! step failed. target @ " + self.origin );
iprintlnbold( "missed target! step failed. target @ " + self.origin );
#/
}
sndsidequestowsmusic()
{
while ( is_true( level.music_override ) )
{
wait 0,1;
}
level.music_override = 1;
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
ent = spawn( "script_origin", ( 0, 0, 0 ) );
ent playloopsound( "mus_sidequest_ows" );
level waittill( "sndEndOWSMusic" );
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
level.music_override = 0;
ent stoploopsound( 4 );
if ( !flag( "sq_ows_success" ) )
{
wait 0,5;
ent playsound( "mus_sidequest_0" );
}
wait 3,5;
ent delete();
while ( is_true( level.music_override ) )
wait 0.1;
level.music_override = 1;
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
ent = spawn( "script_origin", ( 0, 0, 0 ) );
ent playloopsound( "mus_sidequest_ows" );
level waittill( "sndEndOWSMusic" );
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
level.music_override = 0;
ent stoploopsound( 4 );
if ( !flag( "sq_ows_success" ) )
{
wait 0.5;
ent playsound( "mus_sidequest_0" );
}
wait 3.5;
ent delete();
}
sndhit()
{
self endon( "ows_target_timeout" );
self waittill( "damage" );
self playsound( "zmb_sq_target_hit" );
self endon( "ows_target_timeout" );
self waittill( "damage" );
self playsound( "zmb_sq_target_hit" );
}
sndtime()
{
self endon( "zmb_sq_target_hit" );
self waittill( "ows_target_timeout" );
self playsound( "zmb_sq_target_flip" );
self endon( "zmb_sq_target_hit" );
self waittill( "ows_target_timeout" );
self playsound( "zmb_sq_target_flip" );
}

View File

@ -1,152 +1,151 @@
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
init()
{
flag_init( "sq_ts_quicktest" );
declare_sidequest_stage( "sq", "ts", ::init_stage, ::stage_logic, ::exit_stage );
flag_init( "sq_ts_quicktest" );
declare_sidequest_stage( "sq", "ts", ::init_stage, ::stage_logic, ::exit_stage );
}
init_stage()
{
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
_a18 = a_signs;
_k18 = getFirstArrayKey( _a18 );
while ( isDefined( _k18 ) )
{
m_sign = _a18[ _k18 ];
m_sign setcandamage( 1 );
m_sign thread ts_sign_damage_watch();
_k18 = getNextArrayKey( _a18, _k18 );
}
level._cur_stage_name = "ts";
clientnotify( "ts" );
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
foreach ( m_sign in a_signs )
{
m_sign setcandamage( 1 );
m_sign thread ts_sign_damage_watch();
}
level._cur_stage_name = "ts";
clientnotify( "ts" );
}
stage_logic()
{
/#
iprintlnbold( "TS Started" );
iprintlnbold( "TS Started" );
#/
level waittill( "sq_sign_damaged" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
level waittill( "sq_sign_damaged" );
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage( success )
{
}
ts_sign_damage_watch()
{
level endon( "sq_sign_damaged" );
self ts_sign_deactivate();
while ( 1 )
{
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( flag( "sq_ts_quicktest" ) )
{
level.m_sq_start_sign = self;
level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" );
}
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
{
if ( self.ts_sign_activated )
{
self thread ts_sign_deactivate();
}
else
{
self thread ts_sign_activate();
}
ts_sign_check_all_activated( e_attacker, self );
}
}
level endon( "sq_sign_damaged" );
self ts_sign_deactivate();
while ( true )
{
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( flag( "sq_ts_quicktest" ) )
{
level.m_sq_start_sign = self;
level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" );
}
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
{
if ( self.ts_sign_activated )
self thread ts_sign_deactivate();
else
self thread ts_sign_activate();
ts_sign_check_all_activated( e_attacker, self );
}
}
}
ts_sign_activate()
{
self.ts_sign_activated = 1;
while ( !isDefined( self.fx_ent ) )
{
v_forward = anglesToForward( self.angles );
v_offset = vectornormalize( v_forward ) * 2;
self.fx_ent = spawn( "script_model", ( self.origin - vectorScale( ( 0, 0, 1 ), 20 ) ) + v_offset );
self.fx_ent.angles = anglesToForward( self.angles );
self.fx_ent setmodel( "tag_origin" );
self.fx_ent playsound( "zmb_sq_wisp_spawn" );
self.fx_ent playloopsound( "zmb_sq_wisp_wall_loop" );
while ( isDefined( self.fx_ent ) )
{
playfxontag( level._effect[ "sq_ether_amp_trail" ], self.fx_ent, "tag_origin" );
wait 0,3;
}
}
self.ts_sign_activated = 1;
if ( !isdefined( self.fx_ent ) )
{
v_forward = anglestoforward( self.angles );
v_offset = vectornormalize( v_forward ) * 2;
self.fx_ent = spawn( "script_model", self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ) + v_offset );
self.fx_ent.angles = anglestoforward( self.angles );
self.fx_ent setmodel( "tag_origin" );
self.fx_ent playsound( "zmb_sq_wisp_spawn" );
self.fx_ent playloopsound( "zmb_sq_wisp_wall_loop" );
while ( isdefined( self.fx_ent ) )
{
playfxontag( level._effect["sq_ether_amp_trail"], self.fx_ent, "tag_origin" );
wait 0.3;
}
}
}
ts_sign_deactivate()
{
self.ts_sign_activated = 0;
if ( isDefined( self.fx_ent ) )
{
self.fx_ent stoploopsound( 2 );
self.fx_ent delete();
}
self.ts_sign_activated = 0;
if ( isdefined( self.fx_ent ) )
{
self.fx_ent stoploopsound( 2 );
self.fx_ent delete();
}
}
ts_sign_check_all_activated( e_attacker, m_last_touched )
{
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_signs_active = [];
is_max_complete = 1;
is_ric_complete = 1;
_a125 = a_signs;
_k125 = getFirstArrayKey( _a125 );
while ( isDefined( _k125 ) )
{
m_sign = _a125[ _k125 ];
if ( m_sign.ts_sign_activated )
{
a_signs_active[ a_signs_active.size ] = m_sign;
if ( !is_true( m_sign.is_max_sign ) )
{
is_max_complete = 0;
}
if ( !is_true( m_sign.is_ric_sign ) )
{
is_ric_complete = 0;
}
}
_k125 = getNextArrayKey( _a125, _k125 );
}
if ( a_signs_active.size == 3 )
{
if ( is_max_complete || is_ric_complete )
{
level.m_sq_start_sign = m_last_touched;
level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" );
}
}
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_signs_active = [];
is_max_complete = 1;
is_ric_complete = 1;
foreach ( m_sign in a_signs )
{
if ( m_sign.ts_sign_activated )
{
a_signs_active[a_signs_active.size] = m_sign;
if ( !is_true( m_sign.is_max_sign ) )
is_max_complete = 0;
if ( !is_true( m_sign.is_ric_sign ) )
is_ric_complete = 0;
}
}
if ( a_signs_active.size == 3 )
{
if ( is_max_complete || is_ric_complete )
{
level.m_sq_start_sign = m_last_touched;
level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" );
}
}
}
ts_is_bowie_knife( str_weapon )
{
if ( str_weapon != "knife_ballistic_bowie_zm" || str_weapon == "knife_ballistic_bowie_upgraded_zm" && str_weapon == "bowie_knife_zm" )
{
return 1;
}
return 0;
if ( str_weapon == "knife_ballistic_bowie_zm" || str_weapon == "knife_ballistic_bowie_upgraded_zm" || str_weapon == "bowie_knife_zm" )
return true;
return false;
}
ts_is_galvaknuckles( str_weapon )
{
if ( str_weapon == "tazer_knuckles_zm" )
{
return 1;
}
return 0;
if ( str_weapon == "tazer_knuckles_zm" )
return true;
return false;
}

View File

@ -1,26 +1,29 @@
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zombies\_zm_magicbox;
precache()
{
}
main()
{
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "processing" );
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" );
zm_treasure_chest_init();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "processing" );
maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" );
zm_treasure_chest_init();
}
zm_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[level.chests.size] = chest1;
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
}

View File

@ -1,66 +1,70 @@
//checked includes changed to match cerberus output
#include maps/mp/gametypes_zm/zcleansed;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/_visionset_mgr;
#include character/c_zom_zombie_buried_saloongirl_mp;
#include maps/mp/zm_buried_gamemodes;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zm_buried_gamemodes;
#include character\c_zom_zombie_buried_saloongirl_mp;
#include maps\mp\_visionset_mgr;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\gametypes_zm\zcleansed;
precache() //checked matches cerberus output
precache()
{
precachemodel( "zm_collision_buried_street_turned" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
character/c_zom_zombie_buried_saloongirl_mp::precache();
precachemodel( "c_zom_buried_zombie_sgirl_viewhands" );
maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, 21, 15, 1, maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 );
precachemodel( "zm_collision_buried_street_turned" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
character\c_zom_zombie_buried_saloongirl_mp::precache();
precachemodel( "c_zom_buried_zombie_sgirl_viewhands" );
maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, 21, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 );
}
main() //checked matches cerberus output
main()
{
flag_init( "sloth_blocker_towneast" );
level.custom_zombie_player_loadout = ::custom_zombie_player_loadout;
getspawnpoints();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" );
generatebuildabletarps();
deletechalktriggers();
deleteslothbarricade( "candystore_alley" );
deleteslothbarricades( 1 );
deletebuyabledebris( 1 );
powerswitchstate( 1 );
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
if ( level.cleansed_loadout )
{
level.humanify_custom_loadout = maps/mp/gametypes_zm/zcleansed::gunprogressionthink;
level.cleansed_zombie_round = 5;
}
else
{
level.humanify_custom_loadout = maps/mp/gametypes_zm/zcleansed::shotgunloadout;
level.cleansed_zombie_round = 2;
}
spawnmapcollision( "zm_collision_buried_street_turned" );
flag_wait( "initial_blackscreen_passed" );
flag_wait( "start_zombie_round_logic" );
flag_set( "power_on" );
clientnotify( "pwr" );
flag_init( "sloth_blocker_towneast" );
level.custom_zombie_player_loadout = ::custom_zombie_player_loadout;
getspawnpoints();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
generatebuildabletarps();
deletechalktriggers();
deleteslothbarricade( "candystore_alley" );
deleteslothbarricades( 1 );
deletebuyabledebris( 1 );
powerswitchstate( 1 );
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
if ( level.cleansed_loadout )
{
level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::gunprogressionthink;
level.cleansed_zombie_round = 5;
}
else
{
level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::shotgunloadout;
level.cleansed_zombie_round = 2;
}
spawnmapcollision( "zm_collision_buried_street_turned" );
flag_wait( "initial_blackscreen_passed" );
flag_wait( "start_zombie_round_logic" );
flag_set( "power_on" );
clientnotify( "pwr" );
}
custom_zombie_player_loadout() //checked matches cerberus output
custom_zombie_player_loadout()
{
self character/c_zom_zombie_buried_saloongirl_mp::main();
self setviewmodel( "c_zom_buried_zombie_sgirl_viewhands" );
self character\c_zom_zombie_buried_saloongirl_mp::main();
self setviewmodel( "c_zom_buried_zombie_sgirl_viewhands" );
}
getspawnpoints() //checked matches cerberus output
getspawnpoints()
{
level._turned_zombie_spawners = getentarray( "game_mode_spawners", "targetname" );
level._turned_zombie_spawnpoints = getstructarray( "street_turned_zombie_spawn", "targetname" );
level._turned_zombie_respawnpoints = getstructarray( "street_turned_player_respawns", "targetname" );
level._turned_powerup_spawnpoints = getstructarray( "street_turned_powerups", "targetname" );
level._turned_zombie_spawners = getentarray( "game_mode_spawners", "targetname" );
level._turned_zombie_spawnpoints = getstructarray( "street_turned_zombie_spawn", "targetname" );
level._turned_zombie_respawnpoints = getstructarray( "street_turned_player_respawns", "targetname" );
level._turned_powerup_spawnpoints = getstructarray( "street_turned_powerups", "targetname" );
}
onendgame() //checked matches cerberus output
onendgame()
{
}

View File

@ -1,333 +1,302 @@
#include maps/mp/zombies/_zm_ai_ghost;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zm_buried;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zm_buried;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_ai_ghost;
ghost_init_start()
{
level ghost_bad_path_init();
level.is_player_in_ghost_zone = ::is_player_in_ghost_zone;
level ghost_bad_spawn_zone_init();
level.ghost_round_start_monitor_time = 10;
level ghost_bad_path_init();
level.is_player_in_ghost_zone = ::is_player_in_ghost_zone;
level ghost_bad_spawn_zone_init();
level.ghost_round_start_monitor_time = 10;
}
ghost_init_end()
{
disable_traversal_clip_around_mansion();
disable_traversal_clip_around_mansion();
}
prespawn_start()
{
}
prespawn_end()
{
}
ghost_round_start()
{
level thread ghost_teleport_to_playable_area();
level thread ghost_teleport_to_playable_area();
}
ghost_round_end()
{
disable_traversal_clip_around_mansion();
disable_traversal_clip_around_mansion();
}
is_player_in_ghost_zone( player )
{
result = 0;
if ( !isDefined( level.ghost_zone_overrides ) )
{
level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" );
}
is_player_in_override_trigger = 0;
while ( isDefined( level.zombie_ghost_round_states ) && !is_true( level.zombie_ghost_round_states.is_started ) )
{
_a86 = level.ghost_zone_overrides;
_k86 = getFirstArrayKey( _a86 );
while ( isDefined( _k86 ) )
{
trigger = _a86[ _k86 ];
if ( player istouching( trigger ) )
{
is_player_in_override_trigger = 1;
break;
}
else
{
_k86 = getNextArrayKey( _a86, _k86 );
}
}
}
curr_zone = player get_current_zone();
if ( !is_player_in_override_trigger && isDefined( curr_zone ) && curr_zone == "zone_mansion" )
{
result = 1;
}
return result;
result = 0;
if ( !isdefined( level.ghost_zone_overrides ) )
level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" );
is_player_in_override_trigger = 0;
if ( isdefined( level.zombie_ghost_round_states ) && !is_true( level.zombie_ghost_round_states.is_started ) )
{
foreach ( trigger in level.ghost_zone_overrides )
{
if ( player istouching( trigger ) )
{
is_player_in_override_trigger = 1;
break;
}
}
}
curr_zone = player get_current_zone();
if ( !is_player_in_override_trigger && isdefined( curr_zone ) && curr_zone == "zone_mansion" )
result = 1;
return result;
}
ghost_bad_path_init()
{
level.bad_zones = [];
level.bad_zones[ 0 ] = spawnstruct();
level.bad_zones[ 0 ].name = "zone_underground_courthouse";
level.bad_zones[ 0 ].adjacent = [];
level.bad_zones[ 0 ].adjacent[ 0 ] = "zone_underground_courthouse2";
level.bad_zones[ 0 ].adjacent[ 1 ] = "zone_tunnels_north2";
level.bad_zones[ 0 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open;
level.bad_zones[ 1 ] = spawnstruct();
level.bad_zones[ 1 ].name = "zone_underground_courthouse2";
level.bad_zones[ 1 ].adjacent = [];
level.bad_zones[ 1 ].adjacent[ 0 ] = "zone_underground_courthouse";
level.bad_zones[ 1 ].adjacent[ 1 ] = "zone_tunnels_north2";
level.bad_zones[ 1 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open;
level.bad_zones[ 2 ] = spawnstruct();
level.bad_zones[ 2 ].name = "zone_tunnels_north2";
level.bad_zones[ 2 ].adjacent = [];
level.bad_zones[ 2 ].adjacent[ 0 ] = "zone_underground_courthouse2";
level.bad_zones[ 2 ].adjacent[ 1 ] = "zone_underground_courthouse";
level.bad_zones[ 2 ].flag = "tunnels2courthouse";
level.bad_zones[ 2 ].flag_adjacent = "zone_tunnels_north";
level.bad_zones[ 2 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open;
level.bad_zones[ 3 ] = spawnstruct();
level.bad_zones[ 3 ].name = "zone_tunnels_north";
level.bad_zones[ 3 ].adjacent = [];
level.bad_zones[ 3 ].adjacent[ 0 ] = "zone_tunnels_center";
level.bad_zones[ 3 ].flag = "tunnels2courthouse";
level.bad_zones[ 3 ].flag_adjacent = "zone_tunnels_north2";
level.bad_zones[ 3 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open;
level.bad_zones[ 4 ] = spawnstruct();
level.bad_zones[ 4 ].name = "zone_tunnels_center";
level.bad_zones[ 4 ].adjacent = [];
level.bad_zones[ 4 ].adjacent[ 0 ] = "zone_tunnels_north";
level.bad_zones[ 4 ].adjacent[ 1 ] = "zone_tunnels_south";
level.bad_zones[ 4 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open;
level.bad_zones[ 5 ] = spawnstruct();
level.bad_zones[ 5 ].name = "zone_tunnels_south";
level.bad_zones[ 5 ].adjacent = [];
level.bad_zones[ 5 ].adjacent[ 0 ] = "zone_tunnels_center";
level.bad_zones[ 5 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open;
level.bad_zones = [];
level.bad_zones[0] = spawnstruct();
level.bad_zones[0].name = "zone_underground_courthouse";
level.bad_zones[0].adjacent = [];
level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
level.bad_zones[0].adjacent[1] = "zone_tunnels_north2";
level.bad_zones[0].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[1] = spawnstruct();
level.bad_zones[1].name = "zone_underground_courthouse2";
level.bad_zones[1].adjacent = [];
level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
level.bad_zones[1].adjacent[1] = "zone_tunnels_north2";
level.bad_zones[1].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[2] = spawnstruct();
level.bad_zones[2].name = "zone_tunnels_north2";
level.bad_zones[2].adjacent = [];
level.bad_zones[2].adjacent[0] = "zone_underground_courthouse2";
level.bad_zones[2].adjacent[1] = "zone_underground_courthouse";
level.bad_zones[2].flag = "tunnels2courthouse";
level.bad_zones[2].flag_adjacent = "zone_tunnels_north";
level.bad_zones[2].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[3] = spawnstruct();
level.bad_zones[3].name = "zone_tunnels_north";
level.bad_zones[3].adjacent = [];
level.bad_zones[3].adjacent[0] = "zone_tunnels_center";
level.bad_zones[3].flag = "tunnels2courthouse";
level.bad_zones[3].flag_adjacent = "zone_tunnels_north2";
level.bad_zones[3].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[4] = spawnstruct();
level.bad_zones[4].name = "zone_tunnels_center";
level.bad_zones[4].adjacent = [];
level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
level.bad_zones[4].adjacent[1] = "zone_tunnels_south";
level.bad_zones[4].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[5] = spawnstruct();
level.bad_zones[5].name = "zone_tunnels_south";
level.bad_zones[5].adjacent = [];
level.bad_zones[5].adjacent[0] = "zone_tunnels_center";
level.bad_zones[5].ignore_func = maps\mp\zm_buried::is_tunnel_open;
}
ghost_bad_path_failsafe()
{
self endon( "death" );
self notify( "stop_bad_path_failsafe" );
self endon( "stop_bad_path_failsafe" );
self thread non_ghost_round_failsafe();
while ( 1 )
{
player = self.favoriteenemy;
if ( isDefined( player ) )
{
in_bad_zone = 0;
_a174 = level.bad_zones;
_k174 = getFirstArrayKey( _a174 );
while ( isDefined( _k174 ) )
{
zone = _a174[ _k174 ];
if ( isDefined( zone.ignore_func ) )
{
if ( level [[ zone.ignore_func ]]() )
{
break;
}
}
else if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.name ) )
{
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.name ) )
{
break;
}
else ghost_is_adjacent = 0;
_a192 = zone.adjacent;
_k192 = getFirstArrayKey( _a192 );
while ( isDefined( _k192 ) )
{
adjacent = _a192[ _k192 ];
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( adjacent ) )
{
ghost_is_adjacent = 1;
break;
}
else
{
_k192 = getNextArrayKey( _a192, _k192 );
}
}
if ( isDefined( zone.flag ) && flag( zone.flag ) )
{
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
{
ghost_is_adjacent = 1;
}
}
if ( !ghost_is_adjacent )
{
in_bad_zone = 1;
break;
}
}
else
{
_k174 = getNextArrayKey( _a174, _k174 );
}
}
if ( in_bad_zone )
{
nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" );
if ( nodes.size > 0 )
{
node = nodes[ randomint( nodes.size ) ];
}
else
{
node = getnearestnode( player.origin );
}
if ( isDefined( node ) )
{
while ( 1 )
{
if ( !is_true( self.is_traversing ) )
{
break;
}
else
{
wait 0,1;
}
}
self forceteleport( node.origin, ( 0, 0, 0 ) );
}
}
}
wait 0,25;
}
self endon( "death" );
self notify( "stop_bad_path_failsafe" );
self endon( "stop_bad_path_failsafe" );
self thread non_ghost_round_failsafe();
while ( true )
{
player = self.favoriteenemy;
if ( isdefined( player ) )
{
in_bad_zone = 0;
foreach ( zone in level.bad_zones )
{
if ( isdefined( zone.ignore_func ) )
{
if ( level [[ zone.ignore_func ]]() )
break;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.name ) )
{
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.name ) )
break;
ghost_is_adjacent = 0;
foreach ( adjacent in zone.adjacent )
{
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( adjacent ) )
{
ghost_is_adjacent = 1;
break;
}
}
if ( isdefined( zone.flag ) && flag( zone.flag ) )
{
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
ghost_is_adjacent = 1;
}
if ( !ghost_is_adjacent )
{
in_bad_zone = 1;
break;
}
}
}
if ( in_bad_zone )
{
nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" );
if ( nodes.size > 0 )
node = nodes[randomint( nodes.size )];
else
node = getnearestnode( player.origin );
if ( isdefined( node ) )
{
while ( true )
{
if ( !is_true( self.is_traversing ) )
break;
wait 0.1;
}
self forceteleport( node.origin, ( 0, 0, 0 ) );
}
}
}
wait 0.25;
}
}
non_ghost_round_failsafe()
{
self endon( "death" );
while ( 1 )
{
self waittill( "bad_path" );
if ( self.state == "runaway_update" )
{
if ( !maps/mp/zombies/_zm_ai_ghost::is_ghost_round_started() && is_true( self.is_spawned_in_ghost_zone ) )
{
self maps/mp/zombies/_zm_ai_ghost::start_evaporate( 1 );
return;
}
}
wait 0,25;
}
self endon( "death" );
while ( true )
{
self waittill( "bad_path" );
if ( self.state == "runaway_update" )
{
if ( !maps\mp\zombies\_zm_ai_ghost::is_ghost_round_started() && is_true( self.is_spawned_in_ghost_zone ) )
{
self maps\mp\zombies\_zm_ai_ghost::start_evaporate( 1 );
return;
}
}
wait 0.25;
}
}
disable_traversal_clip_around_mansion()
{
while ( isDefined( level.ghost_zone_door_clips ) && level.ghost_zone_door_clips.size > 0 )
{
_a276 = level.ghost_zone_door_clips;
_k276 = getFirstArrayKey( _a276 );
while ( isDefined( _k276 ) )
{
door_clip = _a276[ _k276 ];
door_clip notsolid();
_k276 = getNextArrayKey( _a276, _k276 );
}
}
if ( isdefined( level.ghost_zone_door_clips ) && level.ghost_zone_door_clips.size > 0 )
{
foreach ( door_clip in level.ghost_zone_door_clips )
door_clip notsolid();
}
}
ghost_bad_spawn_zone_init()
{
level.ghost_bad_spawn_zones = [];
level.ghost_bad_spawn_zones[ 0 ] = "zone_mansion_backyard";
level.ghost_bad_spawn_zones[ 1 ] = "zone_maze";
level.ghost_bad_spawn_zones[ 2 ] = "zone_maze_staircase";
level.ghost_bad_spawn_zones = [];
level.ghost_bad_spawn_zones[0] = "zone_mansion_backyard";
level.ghost_bad_spawn_zones[1] = "zone_maze";
level.ghost_bad_spawn_zones[2] = "zone_maze_staircase";
}
can_use_mansion_back_flying_out_node( zone_name )
{
if ( zone_name == "zone_mansion_backyard" )
{
return 1;
}
if ( zone_name == "zone_maze" )
{
return 1;
}
if ( zone_name == "zone_maze_staircase" )
{
return 1;
}
return 0;
if ( zone_name == "zone_mansion_backyard" )
return true;
if ( zone_name == "zone_maze" )
return true;
if ( zone_name == "zone_maze_staircase" )
return true;
return false;
}
ghost_teleport_to_playable_area()
{
level endon( "intermission" );
if ( level.intermission )
{
return;
}
level endon( "ghost_round_end" );
monitor_time = 0;
while ( 1 )
{
ghosts = get_current_ghosts();
_a332 = ghosts;
_k332 = getFirstArrayKey( _a332 );
while ( isDefined( _k332 ) )
{
ghost = _a332[ _k332 ];
while ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
{
_a336 = level.ghost_bad_spawn_zones;
_k336 = getFirstArrayKey( _a336 );
while ( isDefined( _k336 ) )
{
bad_spawn_zone_name = _a336[ _k336 ];
if ( ghost maps/mp/zombies/_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
{
if ( is_player_valid( ghost.favoriteenemy ) )
{
destination_node = ghost maps/mp/zombies/_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy );
if ( isDefined( destination_node ) )
{
ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) );
self.is_teleported_in_bad_zone = 1;
}
}
if ( !is_true( self.is_teleported_in_bad_zone ) )
{
if ( can_use_mansion_back_flying_out_node( bad_spawn_zone_name ) )
{
ghost forceteleport( level.ghost_back_flying_out_path_starts[ 0 ].origin, ( 0, 0, 0 ) );
}
else
{
ghost forceteleport( level.ghost_front_flying_out_path_starts[ 0 ].origin, ( 0, 0, 0 ) );
}
self.is_teleported_in_bad_zone = 1;
}
}
_k336 = getNextArrayKey( _a336, _k336 );
}
}
_k332 = getNextArrayKey( _a332, _k332 );
}
monitor_time += 0,1;
if ( monitor_time > level.ghost_round_start_monitor_time )
{
return;
}
else
{
wait 0,1;
}
}
level endon( "intermission" );
if ( level.intermission )
return;
level endon( "ghost_round_end" );
monitor_time = 0;
while ( true )
{
ghosts = get_current_ghosts();
foreach ( ghost in ghosts )
{
if ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
{
foreach ( bad_spawn_zone_name in level.ghost_bad_spawn_zones )
{
if ( ghost maps\mp\zombies\_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
{
if ( is_player_valid( ghost.favoriteenemy ) )
{
destination_node = ghost maps\mp\zombies\_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy );
if ( isdefined( destination_node ) )
{
ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) );
self.is_teleported_in_bad_zone = 1;
}
}
if ( !is_true( self.is_teleported_in_bad_zone ) )
{
if ( can_use_mansion_back_flying_out_node( bad_spawn_zone_name ) )
ghost forceteleport( level.ghost_back_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
else
ghost forceteleport( level.ghost_front_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
self.is_teleported_in_bad_zone = 1;
}
}
}
}
}
monitor_time += 0.1;
if ( monitor_time > level.ghost_round_start_monitor_time )
break;
wait 0.1;
}
}

View File

@ -1,434 +1,422 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/zm_run;
#include maps/mp/zombies/_zm_ai_sloth;
#include maps/mp/zombies/_zm_ai_sloth_utility;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_ai_sloth_utility;
#include maps\mp\zombies\_zm_ai_sloth;
#include maps\mp\animscripts\zm_run;
#include maps\mp\animscripts\zm_shared;
crawler_condition()
{
zombies = get_round_enemy_array();
i = 0;
while ( i < zombies.size )
{
zombie = zombies[ i ];
if ( !is_true( zombie.has_legs ) )
{
dist = distancesquared( self.origin, zombie.origin );
if ( dist < 32400 )
{
self.crawler = zombie;
if ( isDefined( level.sloth.custom_crawler_pickup_func ) )
{
self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]]();
}
return 1;
}
}
i++;
}
return 0;
zombies = get_round_enemy_array();
for ( i = 0; i < zombies.size; i++ )
{
zombie = zombies[i];
if ( !is_true( zombie.has_legs ) )
{
dist = distancesquared( self.origin, zombie.origin );
if ( dist < 32400 )
{
self.crawler = zombie;
if ( isdefined( level.sloth.custom_crawler_pickup_func ) )
self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]]();
return true;
}
}
}
return false;
}
crawler_action()
{
self endon( "death" );
self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action();
self thread watch_sloth_on_exit_side();
self thread watch_sloth_on_same_side();
self thread crawler_watch_death();
self.release_crawler = 0;
anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 );
sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id );
sloth_offset = distance( sloth_goal, self.crawler.origin );
while ( 1 )
{
while ( self sloth_is_traversing() )
{
wait 0,1;
}
vec_forward = vectornormalize( anglesToForward( self.crawler.angles ) );
start_pos = self.crawler.origin - ( vec_forward * sloth_offset );
raised_start_pos = ( start_pos[ 0 ], start_pos[ 1 ], start_pos[ 2 ] + sloth_offset );
ground_pos = groundpos( raised_start_pos );
height_check = abs( self.crawler.origin[ 2 ] - ground_pos[ 2 ] );
if ( height_check > 8 )
{
self setanimstatefromasd( "zm_player_idle" );
}
else
{
self maps/mp/animscripts/zm_run::needsupdate();
self setgoalpos( start_pos );
}
if ( !isDefined( self.crawler ) || self.crawler.health <= 0 )
{
self.context_done = 1;
return;
}
dist = distancesquared( self.origin, start_pos );
z_dist = abs( self.origin[ 2 ] - start_pos[ 2 ] );
if ( dist < 1024 && z_dist < 12 )
{
break;
}
else
{
wait 0,1;
}
}
self orientmode( "face angle", self.crawler.angles[ 1 ] );
wait 0,25;
self.crawler.is_inert = 1;
self.crawler.ignoreall = 1;
self.crawler notify( "stop_find_flesh" );
self.crawler notify( "zombie_acquire_enemy" );
self.anchor.origin = self.crawler.origin;
self.anchor.angles = self.crawler.angles;
sloth_pickup = self append_hunched( "zm_sloth_pickup_crawler" );
crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" );
self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup );
self.crawler animscripted( self.anchor.origin, self.anchor.angles, crawler_pickup );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_pickup_crawler_anim" );
self.carrying_crawler = 1;
self.crawler.guts_explosion = 1;
self.pre_traverse = ::crawler_pre_traverse;
self.post_traverse = ::crawler_post_traverse;
self.crawler notsolid();
self.crawler linkto( self, "tag_weapon_right" );
self.ignore_common_run = 1;
self set_zombie_run_cycle( "walk_crawlerhold" );
self.locomotion = "walk_crawlerhold";
self.setanimstatefromspeed = ::slothanimstatefromspeed;
self.crawler_end = getTime() + 5000;
self.crawler.actor_damage_func = ::crawler_damage_func;
self.sloth_damage_func = ::crawler_damage_func;
roam = array_randomize( level.roam_points );
roam_index = 0;
while ( 1 )
{
if ( is_true( self.release_crawler ) )
{
break;
}
else
{
while ( self sloth_is_traversing() )
{
wait 0,1;
}
dist = distancesquared( self.origin, self.candy_player.origin );
if ( dist < 25600 || is_true( self.candy_player.is_in_ghost_zone ) && is_true( self.on_exit_side ) )
{
self.check_turn = 1;
self setgoalpos( self.origin );
sloth_idle = self append_hunched( "zm_sloth_crawlerhold_idle" );
crawler_idle = self append_hunched( "zm_crawler_crawlerhold_idle" );
self animscripted( self.origin, self.angles, sloth_idle );
self.crawler animscripted( self.origin, self.angles, crawler_idle );
}
else
{
self stopanimscripted();
self.crawler stopanimscripted();
if ( should_ignore_candybooze( self.candy_player ) )
{
dist = distancesquared( self.origin, roam[ roam_index ].origin );
if ( dist < 1024 )
{
roam_index++;
if ( roam_index >= roam.size )
{
roam_index = 0;
}
}
self maps/mp/zombies/_zm_ai_sloth::sloth_check_turn( roam[ roam_index ].origin );
self setgoalpos( roam[ roam_index ].origin );
}
else
{
if ( !self sloth_move_to_same_side() )
{
if ( is_true( self.check_turn ) )
{
self.check_turn = 0;
if ( self sloth_is_same_zone( self.candy_player ) )
{
self maps/mp/zombies/_zm_ai_sloth::sloth_check_turn( self.candy_player.origin, -0,965 );
}
}
self setgoalpos( self.candy_player.origin );
}
}
self crawler_update_locomotion();
}
wait 0,1;
}
}
self.setanimstatefromspeed = undefined;
self.crawler unlink();
sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" );
crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" );
self animscripted( self.origin, self.angles, sloth_putdown );
self.crawler animscripted( self.origin, self.angles, crawler_putdown );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_putdown_crawler_anim" );
self.carrying_crawler = 0;
self.crawler.deathfunction = ::crawler_death;
sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" );
crawler_kill = self append_hunched( "zm_crawler_slothkill_stomp" );
self notify( "stop_crawler_watch" );
self animscripted( self.origin, self.angles, sloth_kill );
self.crawler animscripted( self.origin, self.angles, crawler_kill );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_kill_crawler_anim" );
if ( isDefined( self.crawler ) )
{
self.crawler dodamage( self.crawler.health * 10, self.crawler.origin );
self.crawler playsound( "zmb_ai_sloth_attack_impact" );
}
self.sloth_damage_func = undefined;
self maps/mp/zombies/_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined;
self.context_done = 1;
self endon( "death" );
self endon( "stop_action" );
self maps\mp\zombies\_zm_ai_sloth::common_context_action();
self thread watch_sloth_on_exit_side();
self thread watch_sloth_on_same_side();
self thread crawler_watch_death();
self.release_crawler = 0;
anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 );
sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id );
sloth_offset = distance( sloth_goal, self.crawler.origin );
while ( true )
{
if ( self sloth_is_traversing() )
{
wait 0.1;
continue;
}
vec_forward = vectornormalize( anglestoforward( self.crawler.angles ) );
start_pos = self.crawler.origin - vec_forward * sloth_offset;
raised_start_pos = ( start_pos[0], start_pos[1], start_pos[2] + sloth_offset );
ground_pos = groundpos( raised_start_pos );
height_check = abs( self.crawler.origin[2] - ground_pos[2] );
if ( height_check > 8 )
self setanimstatefromasd( "zm_player_idle" );
else
{
self maps\mp\animscripts\zm_run::needsupdate();
self setgoalpos( start_pos );
}
if ( !isdefined( self.crawler ) || self.crawler.health <= 0 )
{
self.context_done = 1;
return;
}
dist = distancesquared( self.origin, start_pos );
z_dist = abs( self.origin[2] - start_pos[2] );
if ( dist < 1024 && z_dist < 12 )
break;
wait 0.1;
}
self orientmode( "face angle", self.crawler.angles[1] );
wait 0.25;
self.crawler.is_inert = 1;
self.crawler.ignoreall = 1;
self.crawler notify( "stop_find_flesh" );
self.crawler notify( "zombie_acquire_enemy" );
self.anchor.origin = self.crawler.origin;
self.anchor.angles = self.crawler.angles;
sloth_pickup = self append_hunched( "zm_sloth_pickup_crawler" );
crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" );
self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup );
self.crawler animscripted( self.anchor.origin, self.anchor.angles, crawler_pickup );
maps\mp\animscripts\zm_shared::donotetracks( "sloth_pickup_crawler_anim" );
self.carrying_crawler = 1;
self.crawler.guts_explosion = 1;
self.pre_traverse = ::crawler_pre_traverse;
self.post_traverse = ::crawler_post_traverse;
self.crawler notsolid();
self.crawler linkto( self, "tag_weapon_right" );
self.ignore_common_run = 1;
self set_zombie_run_cycle( "walk_crawlerhold" );
self.locomotion = "walk_crawlerhold";
self.setanimstatefromspeed = ::slothanimstatefromspeed;
self.crawler_end = gettime() + 5000;
self.crawler.actor_damage_func = ::crawler_damage_func;
self.sloth_damage_func = ::crawler_damage_func;
roam = array_randomize( level.roam_points );
roam_index = 0;
while ( true )
{
if ( is_true( self.release_crawler ) )
break;
if ( self sloth_is_traversing() )
{
wait 0.1;
continue;
}
dist = distancesquared( self.origin, self.candy_player.origin );
if ( dist < 25600 || is_true( self.candy_player.is_in_ghost_zone ) && is_true( self.on_exit_side ) )
{
self.check_turn = 1;
self setgoalpos( self.origin );
sloth_idle = self append_hunched( "zm_sloth_crawlerhold_idle" );
crawler_idle = self append_hunched( "zm_crawler_crawlerhold_idle" );
self animscripted( self.origin, self.angles, sloth_idle );
self.crawler animscripted( self.origin, self.angles, crawler_idle );
}
else
{
self stopanimscripted();
self.crawler stopanimscripted();
if ( should_ignore_candybooze( self.candy_player ) )
{
dist = distancesquared( self.origin, roam[roam_index].origin );
if ( dist < 1024 )
{
roam_index++;
if ( roam_index >= roam.size )
roam_index = 0;
}
self maps\mp\zombies\_zm_ai_sloth::sloth_check_turn( roam[roam_index].origin );
self setgoalpos( roam[roam_index].origin );
}
else if ( !self sloth_move_to_same_side() )
{
if ( is_true( self.check_turn ) )
{
self.check_turn = 0;
if ( self sloth_is_same_zone( self.candy_player ) )
self maps\mp\zombies\_zm_ai_sloth::sloth_check_turn( self.candy_player.origin, -0.965 );
}
self setgoalpos( self.candy_player.origin );
}
self crawler_update_locomotion();
}
wait 0.1;
}
self.setanimstatefromspeed = undefined;
self.crawler unlink();
sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" );
crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" );
self animscripted( self.origin, self.angles, sloth_putdown );
self.crawler animscripted( self.origin, self.angles, crawler_putdown );
maps\mp\animscripts\zm_shared::donotetracks( "sloth_putdown_crawler_anim" );
self.carrying_crawler = 0;
self.crawler.deathfunction = ::crawler_death;
sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" );
crawler_kill = self append_hunched( "zm_crawler_slothkill_stomp" );
self notify( "stop_crawler_watch" );
self animscripted( self.origin, self.angles, sloth_kill );
self.crawler animscripted( self.origin, self.angles, crawler_kill );
maps\mp\animscripts\zm_shared::donotetracks( "sloth_kill_crawler_anim" );
if ( isdefined( self.crawler ) )
{
self.crawler dodamage( self.crawler.health * 10, self.crawler.origin );
self.crawler playsound( "zmb_ai_sloth_attack_impact" );
}
self.sloth_damage_func = undefined;
self maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined;
self.context_done = 1;
}
watch_sloth_on_exit_side()
{
self endon( "death" );
while ( 1 )
{
if ( is_true( self.context_done ) )
{
return;
}
self.on_exit_side = 0;
player = self.candy_player;
if ( isDefined( player ) && is_true( player.is_in_ghost_zone ) )
{
name = player.current_ghost_room_name;
if ( isDefined( name ) )
{
room = level.ghost_rooms[ name ];
if ( is_true( room.to_maze ) )
{
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
self.on_exit_side = 1;
}
break;
}
else
{
if ( is_true( room.from_maze ) )
{
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
self.on_exit_side = 1;
}
}
}
}
}
wait 0,25;
}
self endon( "death" );
while ( true )
{
if ( is_true( self.context_done ) )
return;
self.on_exit_side = 0;
player = self.candy_player;
if ( isdefined( player ) && is_true( player.is_in_ghost_zone ) )
{
name = player.current_ghost_room_name;
if ( isdefined( name ) )
{
room = level.ghost_rooms[name];
if ( is_true( room.to_maze ) )
{
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
self.on_exit_side = 1;
}
else if ( is_true( room.from_maze ) )
{
if ( !self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
self.on_exit_side = 1;
}
}
}
wait 0.25;
}
}
watch_sloth_on_same_side()
{
self endon( "death" );
while ( 1 )
{
if ( is_true( self.context_done ) )
{
return;
}
self.on_same_side = 0;
player = self.candy_player;
if ( isDefined( player ) )
{
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
if ( player maps/mp/zombies/_zm_ai_sloth::behind_mansion_zone() )
{
self.on_same_side = 1;
}
break;
}
else
{
if ( !player maps/mp/zombies/_zm_ai_sloth::behind_mansion_zone() )
{
self.on_same_side = 1;
}
}
}
wait 0,25;
}
self endon( "death" );
while ( true )
{
if ( is_true( self.context_done ) )
return;
self.on_same_side = 0;
player = self.candy_player;
if ( isdefined( player ) )
{
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
{
if ( player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
self.on_same_side = 1;
}
else if ( !player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
self.on_same_side = 1;
}
wait 0.25;
}
}
sloth_move_to_same_side()
{
self endon( "death" );
if ( isDefined( self.teleport_time ) )
{
if ( ( getTime() - self.teleport_time ) < 1000 )
{
return 0;
}
}
player = self.candy_player;
if ( is_true( player.is_in_ghost_zone ) )
{
if ( is_true( self.on_exit_side ) )
{
return 0;
}
}
else
{
if ( is_true( self.on_same_side ) )
{
return 0;
}
}
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
}
else
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
}
return 1;
self endon( "death" );
if ( isdefined( self.teleport_time ) )
{
if ( gettime() - self.teleport_time < 1000 )
return false;
}
player = self.candy_player;
if ( is_true( player.is_in_ghost_zone ) )
{
if ( is_true( self.on_exit_side ) )
return false;
}
else if ( is_true( self.on_same_side ) )
return false;
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
else
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
return true;
}
sloth_is_same_zone( player )
{
zone_sloth = self get_current_zone();
zone_player = player get_current_zone();
if ( !isDefined( zone_sloth ) || !isDefined( zone_player ) )
{
return 0;
}
if ( zone_sloth == zone_player )
{
return 1;
}
return 0;
zone_sloth = self get_current_zone();
zone_player = player get_current_zone();
if ( !isdefined( zone_sloth ) || !isdefined( zone_player ) )
return false;
if ( zone_sloth == zone_player )
return true;
return false;
}
append_hunched( asd_name )
{
if ( self.is_inside )
{
return asd_name + "_hunched";
}
return asd_name;
if ( self.is_inside )
return asd_name + "_hunched";
return asd_name;
}
crawler_update_locomotion()
{
if ( self.zombie_move_speed == "walk_crawlerhold" )
{
if ( self.is_inside )
{
self set_zombie_run_cycle( "walk_crawlerhold_hunched" );
self.locomotion = "walk_crawlerhold_hunched";
}
}
else
{
if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
{
if ( !self.is_inside )
{
self set_zombie_run_cycle( "walk_crawlerhold" );
self.locomotion = "walk_crawlerhold";
}
}
}
if ( self.zombie_move_speed == "walk_crawlerhold" )
{
if ( self.is_inside )
{
self set_zombie_run_cycle( "walk_crawlerhold_hunched" );
self.locomotion = "walk_crawlerhold_hunched";
}
}
else if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
{
if ( !self.is_inside )
{
self set_zombie_run_cycle( "walk_crawlerhold" );
self.locomotion = "walk_crawlerhold";
}
}
}
crawler_watch_death()
{
self endon( "stop_crawler_watch" );
self.crawler waittill( "death" );
self stop_action();
self endon( "stop_crawler_watch" );
self.crawler waittill( "death" );
self stop_action();
/#
sloth_print( "crawler died" );
sloth_print( "crawler died" );
#/
if ( isDefined( self.crawler ) )
{
self.crawler unlink();
}
self.setanimstatefromspeed = undefined;
self.sloth_damage_func = undefined;
self maps/mp/zombies/_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined;
self.context_done = 1;
if ( isdefined( self.crawler ) )
self.crawler unlink();
self.setanimstatefromspeed = undefined;
self.sloth_damage_func = undefined;
self maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined;
self.context_done = 1;
}
crawler_pre_traverse()
{
sloth_sling = self append_hunched( "zm_sloth_crawlerhold_sling" );
crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" );
self setanimstatefromasd( sloth_sling );
self.crawler setanimstatefromasd( crawler_sling );
self maps/mp/animscripts/zm_shared::donotetracks( "sloth_crawlerhold_sling_anim" );
self.crawler thread crawler_traverse_idle();
sloth_sling = self append_hunched( "zm_sloth_crawlerhold_sling" );
crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" );
self setanimstatefromasd( sloth_sling );
self.crawler setanimstatefromasd( crawler_sling );
self maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_sling_anim" );
self.crawler thread crawler_traverse_idle();
}
crawler_traverse_idle()
{
self endon( "death" );
self endon( "stop_traverse_idle" );
while ( 1 )
{
self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" );
wait 0,1;
}
self endon( "death" );
self endon( "stop_traverse_idle" );
while ( true )
{
self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" );
wait 0.1;
}
}
crawler_post_traverse()
{
self.crawler notify( "stop_traverse_idle" );
sloth_unsling = self append_hunched( "zm_sloth_crawlerhold_unsling" );
crawler_unsling = self append_hunched( "zm_crawler_sloth_crawlerhold_unsling" );
self setanimstatefromasd( sloth_unsling );
self.crawler setanimstatefromasd( crawler_unsling );
self maps/mp/animscripts/zm_shared::donotetracks( "sloth_crawlerhold_unsling_anim" );
self.crawler notify( "stop_traverse_idle" );
sloth_unsling = self append_hunched( "zm_sloth_crawlerhold_unsling" );
crawler_unsling = self append_hunched( "zm_crawler_sloth_crawlerhold_unsling" );
self setanimstatefromasd( sloth_unsling );
self.crawler setanimstatefromasd( crawler_unsling );
self maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_unsling_anim" );
}
crawler_death()
{
return 1;
return 1;
}
crawler_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex )
{
level.sloth.release_crawler = 1;
return 0;
level.sloth.release_crawler = 1;
return 0;
}
is_crawler_alive()
{
if ( isDefined( self.crawler ) && self.crawler.health > 0 )
{
return 1;
}
return 0;
if ( isdefined( self.crawler ) && self.crawler.health > 0 )
return true;
return false;
}
slothanimstatefromspeed( animstate, substate )
{
if ( isDefined( self.crawler ) )
{
crawler_walk = "zm_crawler_crawlerhold_walk";
if ( self.is_inside )
{
crawler_walk += "_hunched";
}
self.crawler setanimstatefromasd( crawler_walk );
}
if ( isdefined( self.crawler ) )
{
crawler_walk = "zm_crawler_crawlerhold_walk";
if ( self.is_inside )
crawler_walk += "_hunched";
self.crawler setanimstatefromasd( crawler_walk );
}
}

View File

@ -1,14 +1,17 @@
#include maps/mp/zombies/_zm_ai_sloth_utility;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_ai_sloth_utility;
sloth_ffotd_init()
{
level.double_wide_override = undefined;
level.interior_override = undefined;
level.double_wide_override = undefined;
level.interior_override = undefined;
}
sloth_ffotd_prespawn()
{
}

View File

@ -1,519 +1,498 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_hackables_box;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zm_buried;
#include maps/mp/animscripts/zm_shared;
#include maps/mp/zombies/_zm_ai_sloth;
#include maps/mp/zombies/_zm_ai_sloth_utility;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_ai_sloth_utility;
#include maps\mp\zombies\_zm_ai_sloth;
#include maps\mp\animscripts\zm_shared;
#include maps\mp\zm_buried;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_hackables_box;
#include maps\mp\zombies\_zm_unitrigger;
box_lock_condition()
{
box = level.chests[ level.chest_index ];
if ( !isDefined( box ) )
{
return 0;
}
box = level.chests[level.chest_index];
if ( !isdefined( box ) )
return false;
/#
self sloth_debug_context( box, sqrt( 32400 ) );
self sloth_debug_context( box, sqrt( 32400 ) );
#/
if ( flag( "moving_chest_now" ) )
{
return 0;
}
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
return 0;
}
dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 )
{
return 1;
}
return 0;
if ( flag( "moving_chest_now" ) )
return false;
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
return false;
dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 )
return true;
return false;
}
box_get_ground_offset()
{
vec_right = vectornormalize( anglesToRight( self.angles ) );
box_pos = self.origin - ( vec_right * 36 );
ground_pos = groundpos( box_pos );
return ground_pos;
vec_right = vectornormalize( anglestoright( self.angles ) );
box_pos = self.origin - vec_right * 36;
ground_pos = groundpos( box_pos );
return ground_pos;
}
common_abort_box( box )
{
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return 1;
}
if ( isDefined( box ) )
{
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return true;
}
if ( isdefined( box ) )
{
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
/#
sloth_print( "box was opened...abort" );
sloth_print( "box was opened...abort" );
#/
self.context_done = 1;
return 1;
}
}
return 0;
self.context_done = 1;
return true;
}
}
return false;
}
common_move_to_maze( box )
{
self endon( "death" );
while ( 1 )
{
if ( self common_abort_box( box ) )
{
return 0;
}
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
break;
}
else
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
wait 0,2;
}
}
return 1;
self endon( "death" );
while ( true )
{
if ( self common_abort_box( box ) )
return false;
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
break;
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
wait 0.2;
}
return true;
}
common_move_to_courtyard( box )
{
self endon( "death" );
while ( 1 )
{
if ( self common_abort_box( box ) )
{
return 0;
}
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
break;
}
else
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
wait 0,2;
}
}
return 1;
self endon( "death" );
while ( true )
{
if ( self common_abort_box( box ) )
return false;
if ( !self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
break;
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
wait 0.2;
}
return true;
}
common_move_to_box( box, range, ignore_open, asd_name )
{
if ( isDefined( asd_name ) )
{
anim_id = self getanimfromasd( asd_name, 0 );
start_org = getstartorigin( box.origin, box.angles, anim_id );
start_ang = getstartangles( box.origin, box.angles, anim_id );
self setgoalpos( start_org );
ground_pos = start_org;
}
else
{
vec_right = vectornormalize( anglesToRight( box.angles ) );
box_pos = box.origin - ( vec_right * 36 );
ground_pos = groundpos( box_pos );
self setgoalpos( ground_pos );
}
while ( 1 )
{
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return 0;
}
if ( !is_true( ignore_open ) || is_true( box._box_open ) && is_true( box._box_opened_by_fire_sale ) )
{
if ( isdefined( asd_name ) )
{
anim_id = self getanimfromasd( asd_name, 0 );
start_org = getstartorigin( box.origin, box.angles, anim_id );
start_ang = getstartangles( box.origin, box.angles, anim_id );
self setgoalpos( start_org );
ground_pos = start_org;
}
else
{
vec_right = vectornormalize( anglestoright( box.angles ) );
box_pos = box.origin - vec_right * 36;
ground_pos = groundpos( box_pos );
self setgoalpos( ground_pos );
}
while ( true )
{
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return false;
}
if ( !is_true( ignore_open ) && ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) )
{
/#
sloth_print( "box was opened...abort" );
sloth_print( "box was opened...abort" );
#/
self.context_done = 1;
return 0;
}
dist = distancesquared( self.origin, ground_pos );
if ( dist < range )
{
break;
}
else
{
wait 0,1;
}
}
if ( isDefined( asd_name ) )
{
self setgoalpos( self.origin );
self sloth_face_object( box, "angle", start_ang[ 1 ], 0,9 );
}
else
{
angles = vectorToAngle( vec_right );
self.anchor.origin = self.origin;
self.anchor.angles = angles;
self orientmode( "face angle", angles[ 1 ] );
wait 0,2;
}
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return 0;
}
return 1;
self.context_done = 1;
return false;
}
dist = distancesquared( self.origin, ground_pos );
if ( dist < range )
break;
wait 0.1;
}
if ( isdefined( asd_name ) )
{
self setgoalpos( self.origin );
self sloth_face_object( box, "angle", start_ang[1], 0.9 );
}
else
{
angles = vectortoangles( vec_right );
self.anchor.origin = self.origin;
self.anchor.angles = angles;
self orientmode( "face angle", angles[1] );
wait 0.2;
}
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return false;
}
return true;
}
box_lock_action()
{
self endon( "death" );
self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action();
box = level.chests[ level.chest_index ];
if ( !self common_move_to_box( box, 1024 ) )
{
return;
}
self animscripted( box.origin, box.angles, "zm_lock_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "lock_magicbox_anim", ::box_notetracks, box );
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return;
}
setdvar( "magic_chest_movable", "0" );
self endon( "death" );
self endon( "stop_action" );
self maps\mp\zombies\_zm_ai_sloth::common_context_action();
box = level.chests[level.chest_index];
if ( !self common_move_to_box( box, 1024 ) )
return;
self animscripted( box.origin, box.angles, "zm_lock_magicbox" );
maps\mp\animscripts\zm_shared::donotetracks( "lock_magicbox_anim", ::box_notetracks, box );
if ( flag( "moving_chest_now" ) )
{
self.context_done = 1;
return;
}
setdvar( "magic_chest_movable", "0" );
/#
sloth_print( "box will not move" );
sloth_print( "box will not move" );
#/
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_lock" );
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_move" );
self.context_done = 1;
maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_lock" );
maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_move" );
self.context_done = 1;
}
box_move_condition()
{
if ( flag( "moving_chest_now" ) )
{
return 0;
}
self.box_move = undefined;
self.box_current = undefined;
self.box_current_in_maze = 0;
box_current = level.chests[ level.chest_index ];
if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) )
{
return 0;
}
if ( box_current.script_noteworthy == "courtroom_chest1" )
{
if ( !maps/mp/zm_buried::is_courthouse_open() )
{
return 0;
}
}
if ( box_current.script_noteworthy == "tunnels_chest1" )
{
if ( !maps/mp/zm_buried::is_tunnel_open() )
{
return 0;
}
}
if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" )
{
self.box_current_in_maze = 1;
if ( !is_maze_open() )
{
return 0;
}
}
i = 0;
while ( i < level.chests.size )
{
if ( i == level.chest_index )
{
i++;
continue;
}
else
{
box = level.chests[ i ];
if ( box.script_noteworthy != "maze_chest1" )
{
self.box_move_in_maze = box.script_noteworthy == "maze_chest2";
}
dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 )
{
self.box_move_index = i;
self.box_move = box;
self.box_current = box_current;
return 1;
}
}
i++;
}
return 0;
if ( flag( "moving_chest_now" ) )
return false;
self.box_move = undefined;
self.box_current = undefined;
self.box_current_in_maze = 0;
box_current = level.chests[level.chest_index];
if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) )
return false;
if ( box_current.script_noteworthy == "courtroom_chest1" )
{
if ( !maps\mp\zm_buried::is_courthouse_open() )
return false;
}
if ( box_current.script_noteworthy == "tunnels_chest1" )
{
if ( !maps\mp\zm_buried::is_tunnel_open() )
return false;
}
if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" )
{
self.box_current_in_maze = 1;
if ( !is_maze_open() )
return false;
}
for ( i = 0; i < level.chests.size; i++ )
{
if ( i == level.chest_index )
continue;
box = level.chests[i];
self.box_move_in_maze = box.script_noteworthy == "maze_chest1" || box.script_noteworthy == "maze_chest2";
dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 )
{
self.box_move_index = i;
self.box_move = box;
self.box_current = box_current;
return true;
}
}
return false;
}
box_move_action()
{
self endon( "death" );
self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action();
self endon( "death" );
self endon( "stop_action" );
self maps\mp\zombies\_zm_ai_sloth::common_context_action();
/#
sloth_print( "moving box from: " + self.box_current.script_noteworthy + " to: " + self.box_move.script_noteworthy );
sloth_print( "moving box from: " + self.box_current.script_noteworthy + " to: " + self.box_move.script_noteworthy );
#/
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_magicbox_point" ) )
{
return;
}
self maps/mp/zombies/_zm_ai_sloth::action_animscripted( "zm_magicbox_point", "magicbox_point_anim", self.box_move.origin, self.box_move.angles );
if ( is_true( self.box_current_in_maze ) )
{
if ( !is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_maze( self.box_current ) )
{
return;
}
}
}
else
{
if ( is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_courtyard( self.box_current ) )
{
return;
}
}
}
if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) )
{
return;
}
self animscripted( self.box_current.origin, self.box_current.angles, "zm_pull_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "pull_magicbox_anim", ::box_notetracks, self.box_current );
if ( self common_abort_box( self.box_current ) )
{
self box_move_interrupt();
return;
}
if ( isDefined( level.sloth.custom_box_move_func ) )
{
self thread [[ level.sloth.custom_box_move_func ]]( 0 );
}
level.sloth_moving_box = 1;
self.ignore_common_run = 1;
self set_zombie_run_cycle( "run_holding_magicbox" );
self.locomotion = "run_holding_magicbox";
if ( is_true( self.box_current_in_maze ) )
{
if ( !is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_courtyard( undefined ) )
{
self box_move_interrupt();
return;
}
}
}
else
{
if ( is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_maze( undefined ) )
{
self box_move_interrupt();
return;
}
}
}
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) )
{
self box_move_interrupt();
return;
}
self animscripted( self.box_move.origin, self.box_move.angles, "zm_place_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "place_magicbox_anim", ::box_notetracks, self.box_move );
self.box_current = undefined;
self.context_done = 1;
level.sloth_moving_box = undefined;
if ( isDefined( level.sloth.custom_box_move_func ) )
{
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
}
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_magicbox_point" ) )
return;
self maps\mp\zombies\_zm_ai_sloth::action_animscripted( "zm_magicbox_point", "magicbox_point_anim", self.box_move.origin, self.box_move.angles );
if ( is_true( self.box_current_in_maze ) )
{
if ( !is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_maze( self.box_current ) )
return;
}
}
else if ( is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_courtyard( self.box_current ) )
return;
}
if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) )
return;
self animscripted( self.box_current.origin, self.box_current.angles, "zm_pull_magicbox" );
maps\mp\animscripts\zm_shared::donotetracks( "pull_magicbox_anim", ::box_notetracks, self.box_current );
if ( self common_abort_box( self.box_current ) )
{
self box_move_interrupt();
return;
}
if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 0 );
level.sloth_moving_box = 1;
self.ignore_common_run = 1;
self set_zombie_run_cycle( "run_holding_magicbox" );
self.locomotion = "run_holding_magicbox";
if ( is_true( self.box_current_in_maze ) )
{
if ( !is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_courtyard( undefined ) )
{
self box_move_interrupt();
return;
}
}
}
else if ( is_true( self.box_move_in_maze ) )
{
if ( !self common_move_to_maze( undefined ) )
{
self box_move_interrupt();
return;
}
}
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) )
{
self box_move_interrupt();
return;
}
self animscripted( self.box_move.origin, self.box_move.angles, "zm_place_magicbox" );
maps\mp\animscripts\zm_shared::donotetracks( "place_magicbox_anim", ::box_notetracks, self.box_move );
self.box_current = undefined;
self.context_done = 1;
level.sloth_moving_box = undefined;
if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
}
box_notetracks( note, box )
{
if ( !flag( "moving_chest_now" ) || is_true( box._box_open ) && is_true( box._box_opened_by_fire_sale ) )
{
return 0;
}
if ( note == "pulled" )
{
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin );
tag_name = "tag_stowed_back";
twr_origin = self gettagorigin( tag_name );
twr_angles = self gettagangles( tag_name );
if ( !isDefined( self.box_model ) )
{
self.box_model = spawn( "script_model", twr_origin );
self.box_model.angles = twr_angles;
self.box_model setmodel( level.small_magic_box );
self.box_model linkto( self, tag_name );
self.box_model_visible = 1;
}
else
{
self.box_model show();
self.box_model_visible = 1;
}
self.box_current maps/mp/zombies/_zm_magicbox::hide_chest();
}
else if ( note == "placed" )
{
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin );
self box_model_hide();
if ( isDefined( self.box_move.zbarrier ) )
{
self.box_move.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_move.hidden = 0;
self.box_move thread [[ level.pandora_show_func ]]();
level.chest_index = self.box_move_index;
}
}
else
{
if ( note == "locked" )
{
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin );
}
}
if ( flag( "moving_chest_now" ) || is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
return 0;
if ( note == "pulled" )
{
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
tag_name = "tag_stowed_back";
twr_origin = self gettagorigin( tag_name );
twr_angles = self gettagangles( tag_name );
if ( !isdefined( self.box_model ) )
{
self.box_model = spawn( "script_model", twr_origin );
self.box_model.angles = twr_angles;
self.box_model setmodel( level.small_magic_box );
self.box_model linkto( self, tag_name );
self.box_model_visible = 1;
}
else
{
self.box_model show();
self.box_model_visible = 1;
}
self.box_current maps\mp\zombies\_zm_magicbox::hide_chest();
}
else if ( note == "placed" )
{
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
self box_model_hide();
if ( isdefined( self.box_move.zbarrier ) )
{
self.box_move.zbarrier maps\mp\zombies\_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_move.hidden = 0;
self.box_move thread [[ level.pandora_show_func ]]();
level.chest_index = self.box_move_index;
}
}
else if ( note == "locked" )
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
}
box_model_hide()
{
if ( isDefined( self.box_model ) )
{
self.box_model ghost();
self.box_model_visible = 0;
}
if ( isdefined( self.box_model ) )
{
self.box_model ghost();
self.box_model_visible = 0;
}
}
box_move_interrupt()
{
if ( isDefined( self.box_current ) )
{
if ( isDefined( self.box_current.zbarrier ) )
{
self.box_current.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_current.hidden = 0;
self.box_current thread [[ level.pandora_show_func ]]();
}
}
if ( isDefined( level.sloth.custom_box_move_func ) )
{
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
}
level.sloth_moving_box = undefined;
self box_model_hide();
if ( isdefined( self.box_current ) )
{
if ( isdefined( self.box_current.zbarrier ) )
{
self.box_current.zbarrier maps\mp\zombies\_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_current.hidden = 0;
self.box_current thread [[ level.pandora_show_func ]]();
}
}
if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
level.sloth_moving_box = undefined;
self box_model_hide();
}
box_spin_condition()
{
if ( flag( "moving_chest_now" ) )
{
return 0;
}
box = level.chests[ level.chest_index ];
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
ground_pos = groundpos( box.origin );
dist = distancesquared( self.origin, ground_pos );
if ( dist < 32400 )
{
return 1;
}
}
return 0;
if ( flag( "moving_chest_now" ) )
return false;
box = level.chests[level.chest_index];
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
ground_pos = groundpos( box.origin );
dist = distancesquared( self.origin, ground_pos );
if ( dist < 32400 )
return true;
}
return false;
}
box_spin_action()
{
self endon( "death" );
self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action();
box = level.chests[ level.chest_index ];
hackable = spawnstruct();
hackable.chest = box;
if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) )
{
return;
}
if ( !self box_spin_qualifier( hackable ) )
{
return;
}
self animscripted( box.origin, box.angles, "zm_cycle_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "cycle_magicbox_anim", ::box_kick, hackable );
self.context_done = 1;
self endon( "death" );
self endon( "stop_action" );
self maps\mp\zombies\_zm_ai_sloth::common_context_action();
box = level.chests[level.chest_index];
hackable = spawnstruct();
hackable.chest = box;
if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) )
return;
if ( !self box_spin_qualifier( hackable ) )
return;
self animscripted( box.origin, box.angles, "zm_cycle_magicbox" );
maps\mp\animscripts\zm_shared::donotetracks( "cycle_magicbox_anim", ::box_kick, hackable );
self.context_done = 1;
}
box_kick( note, hackable )
{
if ( note == "kick" )
{
if ( !self box_spin_qualifier( hackable ) )
{
return;
}
if ( !flag( "moving_chest_now" ) )
{
hackable thread box_trigger();
hackable maps/mp/zombies/_zm_hackables_box::respin_box( self.candy_player );
}
}
if ( note == "kick" )
{
if ( !self box_spin_qualifier( hackable ) )
return;
if ( !flag( "moving_chest_now" ) )
{
hackable thread box_trigger();
hackable maps\mp\zombies\_zm_hackables_box::respin_box( self.candy_player );
}
}
}
box_trigger()
{
if ( isDefined( self.chest ) )
{
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.chest.unitrigger_stub );
self.chest.zbarrier waittill( "randomization_done" );
if ( !flag( "moving_chest_now" ) )
{
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.chest.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think );
}
}
if ( isdefined( self.chest ) )
{
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.chest.unitrigger_stub );
self.chest.zbarrier waittill( "randomization_done" );
if ( !flag( "moving_chest_now" ) )
thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.chest.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
}
}
box_spin_qualifier( hackable )
{
if ( isDefined( hackable.chest ) )
{
if ( !isDefined( hackable.chest.chest_user ) )
{
self.context_done = 1;
return 0;
}
}
if ( !hackable maps/mp/zombies/_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
{
if ( isdefined( hackable.chest ) )
{
if ( !isdefined( hackable.chest.chest_user ) )
{
self.context_done = 1;
return false;
}
}
if ( !hackable maps\mp\zombies\_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
{
/#
sloth_print( "hack_box_qualifier failed" );
sloth_print( "hack_box_qualifier failed" );
#/
self.context_done = 1;
return 0;
}
return 1;
self.context_done = 1;
return false;
}
return true;
}

View File

@ -1,211 +1,197 @@
#include maps/mp/zombies/_zm_ai_sloth;
#include maps/mp/zm_buried;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zm_buried;
#include maps\mp\zombies\_zm_ai_sloth;
should_ignore_candybooze( player )
{
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_courthouse" ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_courthouse2" ) )
{
if ( !maps/mp/zm_buried::is_courthouse_open() )
{
return 1;
}
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) )
{
if ( !maps/mp/zm_buried::is_courthouse_open() )
{
return 1;
}
}
if ( !player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_center" ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_north" ) && player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_south" ) )
{
if ( !maps/mp/zm_buried::is_tunnel_open() )
{
return 1;
}
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_start_lower" ) )
{
return 1;
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_bar" ) )
{
if ( !maps/mp/zombies/_zm_ai_sloth::is_bar_open() )
{
return 1;
}
}
return 0;
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_courthouse" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_courthouse2" ) )
{
if ( !maps\mp\zm_buried::is_courthouse_open() )
return true;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) )
{
if ( !maps\mp\zm_buried::is_courthouse_open() )
return true;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_center" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_north" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_south" ) )
{
if ( !maps\mp\zm_buried::is_tunnel_open() )
return true;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_start_lower" ) )
return true;
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_bar" ) )
{
if ( !maps\mp\zombies\_zm_ai_sloth::is_bar_open() )
return true;
}
return false;
}
watch_crash_pos()
{
dist_crash = 4096;
level.crash_pos = [];
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1012, 56 );
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1092, 56 );
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1056, 56 );
while ( 1 )
{
while ( !isDefined( self.state ) || self.state != "berserk" )
{
wait 0,1;
}
_a82 = level.crash_pos;
_k82 = getFirstArrayKey( _a82 );
while ( isDefined( _k82 ) )
{
pos = _a82[ _k82 ];
dist = distancesquared( self.origin, pos );
if ( dist < dist_crash )
{
self.anchor.origin = self.origin;
self.anchor.angles = self.angles;
self linkto( self.anchor );
self setclientfield( "sloth_berserk", 0 );
self sloth_set_state( "crash", 0 );
wait 0,25;
self unlink();
}
_k82 = getNextArrayKey( _a82, _k82 );
}
wait 0,05;
}
dist_crash = 4096;
level.crash_pos = [];
level.crash_pos[level.crash_pos.size] = ( 3452, 1012, 56 );
level.crash_pos[level.crash_pos.size] = ( 3452, 1092, 56 );
level.crash_pos[level.crash_pos.size] = ( 3452, 1056, 56 );
while ( true )
{
if ( !isdefined( self.state ) || self.state != "berserk" )
{
wait 0.1;
continue;
}
foreach ( pos in level.crash_pos )
{
dist = distancesquared( self.origin, pos );
if ( dist < dist_crash )
{
self.anchor.origin = self.origin;
self.anchor.angles = self.angles;
self linkto( self.anchor );
self setclientfield( "sloth_berserk", 0 );
self sloth_set_state( "crash", 0 );
wait 0.25;
self unlink();
}
}
wait 0.05;
}
}
sloth_is_pain()
{
if ( is_true( self.is_pain ) )
{
anim_state = self getanimstatefromasd();
if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" )
{
return 1;
}
else
{
self.reset_asd = undefined;
self animmode( "normal" );
self.is_pain = 0;
self.damage_accumulating = 0;
self notify( "stop_accumulation" );
if ( is_true( self.is_pain ) )
{
anim_state = self getanimstatefromasd();
if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" )
return true;
else
{
self.reset_asd = undefined;
self animmode( "normal" );
self.is_pain = 0;
self.damage_accumulating = 0;
self notify( "stop_accumulation" );
/#
sloth_print( "pain was interrupted" );
sloth_print( "pain was interrupted" );
#/
}
}
return 0;
}
}
return false;
}
sloth_is_traversing()
{
if ( is_true( self.is_traversing ) )
{
anim_state = self getanimstatefromasd();
if ( anim_state != "zm_traverse" && anim_state != "zm_traverse_no_restart" && anim_state != "zm_traverse_barrier" && anim_state != "zm_traverse_barrier_no_restart" && anim_state != "zm_sling_equipment" && anim_state != "zm_unsling_equipment" && anim_state != "zm_sling_magicbox" && anim_state != "zm_unsling_magicbox" && anim_state != "zm_sloth_crawlerhold_sling" && anim_state != "zm_sloth_crawlerhold_unsling" || anim_state == "zm_sloth_crawlerhold_sling_hunched" && anim_state == "zm_sloth_crawlerhold_unsling_hunched" )
{
return 1;
}
else
{
self.is_traversing = 0;
if ( is_true( self.is_traversing ) )
{
anim_state = self getanimstatefromasd();
if ( anim_state == "zm_traverse" || anim_state == "zm_traverse_no_restart" || anim_state == "zm_traverse_barrier" || anim_state == "zm_traverse_barrier_no_restart" || anim_state == "zm_sling_equipment" || anim_state == "zm_unsling_equipment" || anim_state == "zm_sling_magicbox" || anim_state == "zm_unsling_magicbox" || anim_state == "zm_sloth_crawlerhold_sling" || anim_state == "zm_sloth_crawlerhold_unsling" || anim_state == "zm_sloth_crawlerhold_sling_hunched" || anim_state == "zm_sloth_crawlerhold_unsling_hunched" )
return true;
else
{
self.is_traversing = 0;
/#
sloth_print( "traverse was interrupted" );
sloth_print( "traverse was interrupted" );
#/
}
}
return 0;
}
}
return false;
}
sloth_face_object( facee, type, data, dot_limit )
{
if ( type == "angle" )
{
self orientmode( "face angle", data );
}
else
{
if ( type == "point" )
{
self orientmode( "face point", data );
}
}
time_started = getTime();
while ( 1 )
{
if ( type == "angle" )
{
delta = abs( self.angles[ 1 ] - data );
if ( delta <= 15 )
{
break;
}
else }
else if ( isDefined( dot_limit ) )
{
if ( self is_facing( facee, dot_limit ) )
{
break;
}
else }
else if ( self is_facing( facee ) )
{
break;
}
else if ( ( getTime() - time_started ) > 1000 )
{
if ( type == "angle" )
self orientmode( "face angle", data );
else if ( type == "point" )
self orientmode( "face point", data );
time_started = gettime();
while ( true )
{
if ( type == "angle" )
{
delta = abs( self.angles[1] - data );
if ( delta <= 15 )
break;
}
else if ( isdefined( dot_limit ) )
{
if ( self is_facing( facee, dot_limit ) )
break;
}
else if ( self is_facing( facee ) )
break;
if ( gettime() - time_started > 1000 )
{
/#
sloth_print( "face took too long" );
sloth_print( "face took too long" );
#/
break;
}
else
{
wait 0,1;
}
}
break;
}
wait 0.1;
}
/#
time_elapsed = getTime() - time_started;
sloth_print( "time to face: " + time_elapsed );
time_elapsed = gettime() - time_started;
sloth_print( "time to face: " + time_elapsed );
#/
}
sloth_print( str )
{
/#
if ( getDvarInt( #"B6252E7C" ) )
{
iprintln( "sloth: " + str );
if ( isDefined( self.debug_msg ) )
{
self.debug_msg[ self.debug_msg.size ] = str;
if ( self.debug_msg.size > 64 )
{
self.debug_msg = [];
}
return;
}
else
{
self.debug_msg = [];
self.debug_msg[ self.debug_msg.size ] = str;
if ( getdvarint( _hash_B6252E7C ) )
{
iprintln( "sloth: " + str );
if ( isdefined( self.debug_msg ) )
{
self.debug_msg[self.debug_msg.size] = str;
if ( self.debug_msg.size > 64 )
self.debug_msg = [];
}
else
{
self.debug_msg = [];
self.debug_msg[self.debug_msg.size] = str;
}
}
#/
}
}
}
sloth_debug_context( item, dist )
{
/#
if ( is_true( self.context_debug ) )
{
debugstar( item.origin, 100, ( 1, 1, 1 ) );
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
if ( is_true( self.context_debug ) )
{
debugstar( item.origin, 100, ( 1, 1, 1 ) );
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
}
#/
}
}

View File

@ -1,326 +1,304 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_powerups;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_unitrigger;
init()
{
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
if ( !isDefined( level.ta_vaultfee ) )
{
level.ta_vaultfee = 100;
}
if ( !isDefined( level.ta_tellerfee ) )
{
level.ta_tellerfee = 100;
}
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
if ( !isdefined( level.ta_vaultfee ) )
level.ta_vaultfee = 100;
if ( !isdefined( level.ta_tellerfee ) )
level.ta_tellerfee = 100;
}
main()
{
if ( !isDefined( level.banking_map ) )
{
level.banking_map = level.script;
}
level thread bank_teller_init();
level thread bank_deposit_box();
if ( !isdefined( level.banking_map ) )
level.banking_map = level.script;
level thread bank_teller_init();
level thread bank_deposit_box();
}
bank_teller_init()
{
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if ( isDefined( level.bank_teller_dmg_trig ) )
{
level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" );
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
level thread bank_teller_logic();
level.bank_teller_transfer_trig.origin += vectorScale( ( 0, 0, -1 ), 25 );
level.bank_teller_transfer_trig trigger_off();
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
}
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if ( isdefined( level.bank_teller_dmg_trig ) )
{
level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" );
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
level thread bank_teller_logic();
level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 );
level.bank_teller_transfer_trig trigger_off();
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
}
}
bank_teller_logic()
{
level endon( "end_game" );
while ( 1 )
{
level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah );
if ( isDefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
{
bank_teller_give_money();
level.bank_teller_transfer_trig trigger_off();
}
}
level endon( "end_game" );
while ( true )
{
level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah );
if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
{
bank_teller_give_money();
level.bank_teller_transfer_trig trigger_off();
}
}
}
bank_teller_give_money()
{
level endon( "end_game" );
level endon( "stop_bank_teller" );
level.bank_teller_transfer_trig trigger_on();
bank_transfer = undefined;
while ( 1 )
{
level.bank_teller_transfer_trig waittill( "trigger", player );
if ( !is_player_valid( player, 0 ) || player.score < ( 1000 + level.ta_tellerfee ) )
{
continue;
}
if ( !isDefined( bank_transfer ) )
{
bank_transfer = maps/mp/zombies/_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorScale( ( 0, 0, -1 ), 40 ) );
bank_transfer thread stop_bank_teller();
bank_transfer.value = 0;
}
bank_transfer.value += 1000;
bank_transfer notify( "powerup_reset" );
bank_transfer thread maps/mp/zombies/_zm_powerups::powerup_timeout();
player maps/mp/zombies/_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
level notify( "bank_teller_used" );
}
level endon( "end_game" );
level endon( "stop_bank_teller" );
level.bank_teller_transfer_trig trigger_on();
bank_transfer = undefined;
while ( true )
{
level.bank_teller_transfer_trig waittill( "trigger", player );
if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee )
continue;
if ( !isdefined( bank_transfer ) )
{
bank_transfer = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) );
bank_transfer thread stop_bank_teller();
bank_transfer.value = 0;
}
bank_transfer.value += 1000;
bank_transfer notify( "powerup_reset" );
bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout();
player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
level notify( "bank_teller_used" );
}
}
stop_bank_teller()
{
level endon( "end_game" );
self waittill( "death" );
level notify( "stop_bank_teller" );
level endon( "end_game" );
self waittill( "death" );
level notify( "stop_bank_teller" );
}
delete_bank_teller()
{
wait 1;
level notify( "stop_bank_teller" );
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
bank_teller_dmg_trig delete();
bank_teller_transfer_trig delete();
wait 1;
level notify( "stop_bank_teller" );
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
bank_teller_dmg_trig delete();
bank_teller_transfer_trig delete();
}
onplayerconnect_bank_deposit_box()
{
online_game = sessionmodeisonlinegame();
if ( !online_game )
{
self.account_value = 0;
}
else
{
self.account_value = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox", level.banking_map );
}
online_game = sessionmodeisonlinegame();
if ( !online_game )
self.account_value = 0;
else
self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map );
}
bank_deposit_box()
{
level.bank_deposit_max_amount = 250000;
level.bank_deposit_ddl_increment_amount = 1000;
level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount;
level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 );
deposit_triggers = getstructarray( "bank_deposit", "targetname" );
array_thread( deposit_triggers, ::bank_deposit_unitrigger );
withdraw_triggers = getstructarray( "bank_withdraw", "targetname" );
array_thread( withdraw_triggers, ::bank_withdraw_unitrigger );
level.bank_deposit_max_amount = 250000;
level.bank_deposit_ddl_increment_amount = 1000;
level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount;
level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 );
deposit_triggers = getstructarray( "bank_deposit", "targetname" );
array_thread( deposit_triggers, ::bank_deposit_unitrigger );
withdraw_triggers = getstructarray( "bank_withdraw", "targetname" );
array_thread( withdraw_triggers, ::bank_withdraw_unitrigger );
}
bank_deposit_unitrigger()
{
bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 );
bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 );
}
bank_withdraw_unitrigger()
{
bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 );
bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 );
}
bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius )
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isDefined( self.script_angles ) )
{
unitrigger_stub.angles = self.script_angles;
}
else
{
unitrigger_stub.angles = self.angles;
}
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isDefined( override_length ) )
{
unitrigger_stub.script_length = override_length;
}
else if ( isDefined( self.script_length ) )
{
unitrigger_stub.script_length = self.script_length;
}
else
{
unitrigger_stub.script_length = 32;
}
if ( isDefined( override_width ) )
{
unitrigger_stub.script_width = override_width;
}
else if ( isDefined( self.script_width ) )
{
unitrigger_stub.script_width = self.script_width;
}
else
{
unitrigger_stub.script_width = 32;
}
if ( isDefined( override_height ) )
{
unitrigger_stub.script_height = override_height;
}
else if ( isDefined( self.script_height ) )
{
unitrigger_stub.script_height = self.script_height;
}
else
{
unitrigger_stub.script_height = 64;
}
if ( isDefined( override_radius ) )
{
unitrigger_stub.script_radius = override_radius;
}
else if ( isDefined( self.radius ) )
{
unitrigger_stub.radius = self.radius;
}
else
{
unitrigger_stub.radius = 32;
}
if ( isDefined( self.script_unitrigger_type ) )
{
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
}
else
{
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 );
}
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.targetname = name;
maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = prompt_fn;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles;
else
unitrigger_stub.angles = self.angles;
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isdefined( override_length ) )
unitrigger_stub.script_length = override_length;
else if ( isdefined( self.script_length ) )
unitrigger_stub.script_length = self.script_length;
else
unitrigger_stub.script_length = 32;
if ( isdefined( override_width ) )
unitrigger_stub.script_width = override_width;
else if ( isdefined( self.script_width ) )
unitrigger_stub.script_width = self.script_width;
else
unitrigger_stub.script_width = 32;
if ( isdefined( override_height ) )
unitrigger_stub.script_height = override_height;
else if ( isdefined( self.script_height ) )
unitrigger_stub.script_height = self.script_height;
else
unitrigger_stub.script_height = 64;
if ( isdefined( override_radius ) )
unitrigger_stub.script_radius = override_radius;
else if ( isdefined( self.radius ) )
unitrigger_stub.radius = self.radius;
else
unitrigger_stub.radius = 32;
if ( isdefined( self.script_unitrigger_type ) )
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
else
{
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
}
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.targetname = name;
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = prompt_fn;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
}
trigger_deposit_update_prompt( player )
{
if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max )
{
player show_balance();
self sethintstring( "" );
return 0;
}
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
return 1;
if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max )
{
player show_balance();
self sethintstring( "" );
return false;
}
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
return true;
}
trigger_deposit_think()
{
self endon( "kill_trigger" );
while ( 1 )
{
self waittill( "trigger", player );
while ( !is_player_valid( player ) )
{
continue;
}
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
{
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
player.score -= level.bank_deposit_ddl_increment_amount;
player.account_value += level.bank_account_increment;
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isDefined( level.custom_bank_deposit_vo ) )
{
player thread [[ level.custom_bank_deposit_vo ]]();
}
if ( player.account_value >= level.bank_account_max )
{
self sethintstring( "" );
}
}
else
{
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
}
player show_balance();
}
self endon( "kill_trigger" );
while ( true )
{
self waittill( "trigger", player );
if ( !is_player_valid( player ) )
continue;
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
{
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
player.score -= level.bank_deposit_ddl_increment_amount;
player.account_value += level.bank_account_increment;
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isdefined( level.custom_bank_deposit_vo ) )
player thread [[ level.custom_bank_deposit_vo ]]();
if ( player.account_value >= level.bank_account_max )
self sethintstring( "" );
}
else
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
player show_balance();
}
}
trigger_withdraw_update_prompt( player )
{
if ( player.account_value <= 0 )
{
self sethintstring( "" );
player show_balance();
return 0;
}
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
return 1;
if ( player.account_value <= 0 )
{
self sethintstring( "" );
player show_balance();
return false;
}
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
return true;
}
trigger_withdraw_think()
{
self endon( "kill_trigger" );
while ( 1 )
{
self waittill( "trigger", player );
while ( !is_player_valid( player ) )
{
continue;
}
if ( player.account_value >= level.bank_account_increment )
{
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
player.score += level.bank_deposit_ddl_increment_amount;
level notify( "bank_withdrawal" );
player.account_value -= level.bank_account_increment;
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isDefined( level.custom_bank_withdrawl_vo ) )
{
player thread [[ level.custom_bank_withdrawl_vo ]]();
}
else
{
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
}
player thread player_withdraw_fee();
if ( player.account_value < level.bank_account_increment )
{
self sethintstring( "" );
}
}
else
{
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
}
player show_balance();
}
self endon( "kill_trigger" );
while ( true )
{
self waittill( "trigger", player );
if ( !is_player_valid( player ) )
continue;
if ( player.account_value >= level.bank_account_increment )
{
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
player.score += level.bank_deposit_ddl_increment_amount;
level notify( "bank_withdrawal" );
player.account_value -= level.bank_account_increment;
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isdefined( level.custom_bank_withdrawl_vo ) )
player thread [[ level.custom_bank_withdrawl_vo ]]();
else
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
player thread player_withdraw_fee();
if ( player.account_value < level.bank_account_increment )
self sethintstring( "" );
}
else
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
player show_balance();
}
}
player_withdraw_fee()
{
self endon( "disconnect" );
wait_network_frame();
self.score -= level.ta_vaultfee;
self endon( "disconnect" );
wait_network_frame();
self.score -= level.ta_vaultfee;
}
show_balance()
{
/#
iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value );
iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value );
#/
}

View File

@ -1,443 +1,406 @@
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\gametypes_zm\_hud_util;
add_buildable_to_pool( stub, poolname )
{
if ( !isDefined( level.buildablepools ) )
{
level.buildablepools = [];
}
if ( !isDefined( level.buildablepools[ poolname ] ) )
{
level.buildablepools[ poolname ] = spawnstruct();
level.buildablepools[ poolname ].stubs = [];
}
level.buildablepools[ poolname ].stubs[ level.buildablepools[ poolname ].stubs.size ] = stub;
if ( !isDefined( level.buildablepools[ poolname ].buildable_slot ) )
{
level.buildablepools[ poolname ].buildable_slot = stub.buildablestruct.buildable_slot;
}
else
{
if ( !isdefined( level.buildablepools ) )
level.buildablepools = [];
if ( !isdefined( level.buildablepools[poolname] ) )
{
level.buildablepools[poolname] = spawnstruct();
level.buildablepools[poolname].stubs = [];
}
level.buildablepools[poolname].stubs[level.buildablepools[poolname].stubs.size] = stub;
if ( !isdefined( level.buildablepools[poolname].buildable_slot ) )
level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot;
else
{
/#
assert( level.buildablepools[ poolname ].buildable_slot == stub.buildablestruct.buildable_slot );
assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot );
#/
}
stub.buildable_pool = level.buildablepools[ poolname ];
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
stub.original_trigger_func = stub.trigger_func;
stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt;
reregister_unitrigger( stub, ::pooled_buildable_place_think );
}
stub.buildable_pool = level.buildablepools[poolname];
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
stub.original_trigger_func = stub.trigger_func;
stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt;
reregister_unitrigger( stub, ::pooled_buildable_place_think );
}
reregister_unitrigger( unitrigger_stub, new_trigger_func )
{
static = 0;
if ( isDefined( unitrigger_stub.in_zone ) )
{
static = 1;
}
unregister_unitrigger( unitrigger_stub );
unitrigger_stub.trigger_func = new_trigger_func;
if ( static )
{
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
}
else
{
register_unitrigger( unitrigger_stub, new_trigger_func );
}
static = 0;
if ( isdefined( unitrigger_stub.in_zone ) )
static = 1;
unregister_unitrigger( unitrigger_stub );
unitrigger_stub.trigger_func = new_trigger_func;
if ( static )
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
else
register_unitrigger( unitrigger_stub, new_trigger_func );
}
randomize_pooled_buildables( poolname )
{
level waittill( "buildables_setup" );
while ( isDefined( level.buildablepools[ poolname ] ) )
{
count = level.buildablepools[ poolname ].stubs.size;
while ( count > 1 )
{
targets = [];
i = 0;
while ( i < count )
{
while ( 1 )
{
p = randomint( count );
if ( !isDefined( targets[ p ] ) )
{
targets[ p ] = i;
i++;
continue;
}
else
{
}
}
i++;
}
i = 0;
while ( i < count )
{
if ( isDefined( targets[ i ] ) && targets[ i ] != i )
{
swap_buildable_fields( level.buildablepools[ poolname ].stubs[ i ], level.buildablepools[ poolname ].stubs[ targets[ i ] ] );
}
i++;
}
}
}
level waittill( "buildables_setup" );
if ( isdefined( level.buildablepools[poolname] ) )
{
count = level.buildablepools[poolname].stubs.size;
if ( count > 1 )
{
targets = [];
for ( i = 0; i < count; i++ )
{
while ( true )
{
p = randomint( count );
if ( !isdefined( targets[p] ) )
{
targets[p] = i;
break;
}
}
}
for ( i = 0; i < count; i++ )
{
if ( isdefined( targets[i] ) && targets[i] != i )
swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[targets[i]] );
}
}
}
}
pooledbuildable_has_piece( piece )
{
return isDefined( self pooledbuildable_stub_for_piece( piece ) );
return isdefined( self pooledbuildable_stub_for_piece( piece ) );
}
pooledbuildable_stub_for_piece( piece )
{
_a104 = self.stubs;
_k104 = getFirstArrayKey( _a104 );
while ( isDefined( _k104 ) )
{
stub = _a104[ _k104 ];
if ( isDefined( stub.bound_to_buildable ) )
{
}
else
{
if ( stub.buildablezone buildable_has_piece( piece ) )
{
return stub;
}
}
_k104 = getNextArrayKey( _a104, _k104 );
}
return undefined;
foreach ( stub in self.stubs )
{
if ( isdefined( stub.bound_to_buildable ) )
continue;
if ( stub.buildablezone buildable_has_piece( piece ) )
return stub;
}
return undefined;
}
pooledbuildabletrigger_update_prompt( player )
{
can_use = self.stub pooledbuildablestub_update_prompt( player, self );
self sethintstring( self.stub.hint_string );
if ( isDefined( self.stub.cursor_hint ) )
{
if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) )
{
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
}
else
{
self setcursorhint( self.stub.cursor_hint );
}
}
return can_use;
can_use = self.stub pooledbuildablestub_update_prompt( player, self );
self sethintstring( self.stub.hint_string );
if ( isdefined( self.stub.cursor_hint ) )
{
if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) )
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
else
self setcursorhint( self.stub.cursor_hint );
}
return can_use;
}
pooledbuildablestub_update_prompt( player, trigger )
{
if ( !self anystub_update_prompt( player ) )
{
return 0;
}
can_use = 1;
if ( isDefined( self.custom_buildablestub_update_prompt ) && !( self [[ self.custom_buildablestub_update_prompt ]]( player ) ) )
{
return 0;
}
self.cursor_hint = "HINT_NOICON";
self.cursor_hint_weapon = undefined;
if ( isDefined( self.built ) && !self.built )
{
slot = self.buildablestruct.buildable_slot;
if ( !isDefined( player player_get_buildable_piece( slot ) ) )
{
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint_more;
}
else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
}
if ( isDefined( level.custom_buildable_need_part_vo ) )
{
player thread [[ level.custom_buildable_need_part_vo ]]();
}
return 0;
}
else
{
if ( isDefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isDefined( level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong ) )
{
self.hint_string = level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong;
}
else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
}
if ( isDefined( level.custom_buildable_wrong_part_vo ) )
{
player thread [[ level.custom_buildable_wrong_part_vo ]]();
}
return 0;
}
else
{
if ( !isDefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_wrong ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint_wrong;
}
else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
}
return 0;
}
else
{
if ( isDefined( self.bound_to_buildable ) )
{
if ( !self anystub_update_prompt( player ) )
return 0;
can_use = 1;
if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) )
return 0;
self.cursor_hint = "HINT_NOICON";
self.cursor_hint_weapon = undefined;
if ( !( isdefined( self.built ) && self.built ) )
{
slot = self.buildablestruct.buildable_slot;
if ( !isdefined( player player_get_buildable_piece( slot ) ) )
{
if ( isdefined( level.zombie_buildables[self.equipname].hint_more ) )
self.hint_string = level.zombie_buildables[self.equipname].hint_more;
else
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
if ( isdefined( level.custom_buildable_need_part_vo ) )
player thread [[ level.custom_buildable_need_part_vo ]]();
return 0;
}
else if ( isdefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isdefined( level.zombie_buildables[self.bound_to_buildable.equipname].hint_wrong ) )
self.hint_string = level.zombie_buildables[self.bound_to_buildable.equipname].hint_wrong;
else
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
if ( isdefined( level.custom_buildable_wrong_part_vo ) )
player thread [[ level.custom_buildable_wrong_part_vo ]]();
return 0;
}
else if ( !isdefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isdefined( level.zombie_buildables[self.equipname].hint_wrong ) )
self.hint_string = level.zombie_buildables[self.equipname].hint_wrong;
else
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
return 0;
}
else if ( isdefined( self.bound_to_buildable ) )
{
/#
assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" );
assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" );
#/
if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint;
}
else
{
self.hint_string = "Missing buildable hint";
}
}
else /#
assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" );
if ( isdefined( level.zombie_buildables[self.equipname].hint ) )
self.hint_string = level.zombie_buildables[self.equipname].hint;
else
self.hint_string = "Missing buildable hint";
}
else
{
/#
assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" );
#/
if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint;
}
else
{
self.hint_string = "Missing buildable hint";
}
}
}
}
}
else
{
return trigger [[ self.original_prompt_and_visibility_func ]]( player );
}
return 1;
if ( isdefined( level.zombie_buildables[self.equipname].hint ) )
self.hint_string = level.zombie_buildables[self.equipname].hint;
else
self.hint_string = "Missing buildable hint";
}
}
else
return trigger [[ self.original_prompt_and_visibility_func ]]( player );
return 1;
}
find_bench( bench_name )
{
return getent( bench_name, "targetname" );
return getent( bench_name, "targetname" );
}
swap_buildable_fields( stub1, stub2 )
{
tbz = stub2.buildablezone;
stub2.buildablezone = stub1.buildablezone;
stub2.buildablezone.stub = stub2;
stub1.buildablezone = tbz;
stub1.buildablezone.stub = stub1;
tbs = stub2.buildablestruct;
stub2.buildablestruct = stub1.buildablestruct;
stub1.buildablestruct = tbs;
te = stub2.equipname;
stub2.equipname = stub1.equipname;
stub1.equipname = te;
th = stub2.hint_string;
stub2.hint_string = stub1.hint_string;
stub1.hint_string = th;
ths = stub2.trigger_hintstring;
stub2.trigger_hintstring = stub1.trigger_hintstring;
stub1.trigger_hintstring = ths;
tp = stub2.persistent;
stub2.persistent = stub1.persistent;
stub1.persistent = tp;
tobu = stub2.onbeginuse;
stub2.onbeginuse = stub1.onbeginuse;
stub1.onbeginuse = tobu;
tocu = stub2.oncantuse;
stub2.oncantuse = stub1.oncantuse;
stub1.oncantuse = tocu;
toeu = stub2.onenduse;
stub2.onenduse = stub1.onenduse;
stub1.onenduse = toeu;
tt = stub2.target;
stub2.target = stub1.target;
stub1.target = tt;
ttn = stub2.targetname;
stub2.targetname = stub1.targetname;
stub1.targetname = ttn;
twn = stub2.weaponname;
stub2.weaponname = stub1.weaponname;
stub1.weaponname = twn;
pav = stub2.original_prompt_and_visibility_func;
stub2.original_prompt_and_visibility_func = stub1.original_prompt_and_visibility_func;
stub1.original_prompt_and_visibility_func = pav;
bench1 = undefined;
bench2 = undefined;
transfer_pos_as_is = 1;
if ( isDefined( stub1.model.target ) && isDefined( stub2.model.target ) )
{
bench1 = find_bench( stub1.model.target );
bench2 = find_bench( stub2.model.target );
if ( isDefined( bench1 ) && isDefined( bench2 ) )
{
transfer_pos_as_is = 0;
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
w2la1 = stub1.model.angles - bench1.angles;
w2lo2 = bench2 worldtolocalcoords( stub2.model.origin );
w2la2 = stub2.model.angles - bench2.angles;
stub1.model.origin = bench2 localtoworldcoords( w2lo1 );
stub1.model.angles = bench2.angles + w2la1;
stub2.model.origin = bench1 localtoworldcoords( w2lo2 );
stub2.model.angles = bench1.angles + w2la2;
}
tmt = stub2.model.target;
stub2.model.target = stub1.model.target;
stub1.model.target = tmt;
}
tm = stub2.model;
stub2.model = stub1.model;
stub1.model = tm;
if ( transfer_pos_as_is )
{
tmo = stub2.model.origin;
tma = stub2.model.angles;
stub2.model.origin = stub1.model.origin;
stub2.model.angles = stub1.model.angles;
stub1.model.origin = tmo;
stub1.model.angles = tma;
}
tbz = stub2.buildablezone;
stub2.buildablezone = stub1.buildablezone;
stub2.buildablezone.stub = stub2;
stub1.buildablezone = tbz;
stub1.buildablezone.stub = stub1;
tbs = stub2.buildablestruct;
stub2.buildablestruct = stub1.buildablestruct;
stub1.buildablestruct = tbs;
te = stub2.equipname;
stub2.equipname = stub1.equipname;
stub1.equipname = te;
th = stub2.hint_string;
stub2.hint_string = stub1.hint_string;
stub1.hint_string = th;
ths = stub2.trigger_hintstring;
stub2.trigger_hintstring = stub1.trigger_hintstring;
stub1.trigger_hintstring = ths;
tp = stub2.persistent;
stub2.persistent = stub1.persistent;
stub1.persistent = tp;
tobu = stub2.onbeginuse;
stub2.onbeginuse = stub1.onbeginuse;
stub1.onbeginuse = tobu;
tocu = stub2.oncantuse;
stub2.oncantuse = stub1.oncantuse;
stub1.oncantuse = tocu;
toeu = stub2.onenduse;
stub2.onenduse = stub1.onenduse;
stub1.onenduse = toeu;
tt = stub2.target;
stub2.target = stub1.target;
stub1.target = tt;
ttn = stub2.targetname;
stub2.targetname = stub1.targetname;
stub1.targetname = ttn;
twn = stub2.weaponname;
stub2.weaponname = stub1.weaponname;
stub1.weaponname = twn;
pav = stub2.original_prompt_and_visibility_func;
stub2.original_prompt_and_visibility_func = stub1.original_prompt_and_visibility_func;
stub1.original_prompt_and_visibility_func = pav;
bench1 = undefined;
bench2 = undefined;
transfer_pos_as_is = 1;
if ( isdefined( stub1.model.target ) && isdefined( stub2.model.target ) )
{
bench1 = find_bench( stub1.model.target );
bench2 = find_bench( stub2.model.target );
if ( isdefined( bench1 ) && isdefined( bench2 ) )
{
transfer_pos_as_is = 0;
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
w2la1 = stub1.model.angles - bench1.angles;
w2lo2 = bench2 worldtolocalcoords( stub2.model.origin );
w2la2 = stub2.model.angles - bench2.angles;
stub1.model.origin = bench2 localtoworldcoords( w2lo1 );
stub1.model.angles = bench2.angles + w2la1;
stub2.model.origin = bench1 localtoworldcoords( w2lo2 );
stub2.model.angles = bench1.angles + w2la2;
}
tmt = stub2.model.target;
stub2.model.target = stub1.model.target;
stub1.model.target = tmt;
}
tm = stub2.model;
stub2.model = stub1.model;
stub1.model = tm;
if ( transfer_pos_as_is )
{
tmo = stub2.model.origin;
tma = stub2.model.angles;
stub2.model.origin = stub1.model.origin;
stub2.model.angles = stub1.model.angles;
stub1.model.origin = tmo;
stub1.model.angles = tma;
}
}
pooled_buildable_place_think()
{
self endon( "kill_trigger" );
if ( isDefined( self.stub.built ) && self.stub.built )
{
return buildable_place_think();
}
player_built = undefined;
while ( isDefined( self.stub.built ) && !self.stub.built )
{
self waittill( "trigger", player );
while ( player != self.parent_player )
{
continue;
}
while ( isDefined( player.screecher_weapon ) )
{
continue;
}
while ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0,5 );
}
bind_to = self.stub;
slot = bind_to.buildablestruct.buildable_slot;
if ( !isDefined( self.stub.bound_to_buildable ) )
{
bind_to = self.stub.buildable_pool pooledbuildable_stub_for_piece( player player_get_buildable_piece( slot ) );
}
while ( isDefined( bind_to ) && isDefined( self.stub.bound_to_buildable ) || self.stub.bound_to_buildable != bind_to && isDefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
if ( isDefined( self.stub.oncantuse ) )
{
self.stub [[ self.stub.oncantuse ]]( player );
}
}
status = player player_can_build( bind_to.buildablezone );
if ( !status )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
if ( isDefined( bind_to.oncantuse ) )
{
bind_to [[ bind_to.oncantuse ]]( player );
}
continue;
}
else
{
if ( isDefined( bind_to.onbeginuse ) )
{
self.stub [[ bind_to.onbeginuse ]]( player );
}
result = self buildable_use_hold_think( player, bind_to );
team = player.pers[ "team" ];
if ( result )
{
if ( isDefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to )
{
result = 0;
}
if ( isDefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{
result = 0;
}
}
if ( isDefined( bind_to.onenduse ) )
{
self.stub [[ bind_to.onenduse ]]( team, player, result );
}
while ( !result )
{
continue;
}
if ( !isDefined( self.stub.bound_to_buildable ) && isDefined( bind_to ) )
{
if ( bind_to != self.stub )
{
swap_buildable_fields( self.stub, bind_to );
}
self.stub.bound_to_buildable = self.stub;
}
if ( isDefined( self.stub.onuse ) )
{
self.stub [[ self.stub.onuse ]]( player );
}
if ( isDefined( player player_get_buildable_piece( slot ) ) )
{
prompt = player player_build( self.stub.buildablezone );
player_built = player;
self.stub.hint_string = prompt;
self sethintstring( self.stub.hint_string );
}
}
}
switch( self.stub.persistent )
{
case 1:
self bptrigger_think_persistent( player_built );
break;
case 0:
self bptrigger_think_one_time( player_built );
break;
case 3:
self bptrigger_think_unbuild( player_built );
break;
case 2:
self bptrigger_think_one_use_and_fly( player_built );
break;
case 4:
self [[ self.stub.custom_completion_callback ]]( player_built );
break;
}
self endon( "kill_trigger" );
if ( isdefined( self.stub.built ) && self.stub.built )
return buildable_place_think();
player_built = undefined;
while ( !( isdefined( self.stub.built ) && self.stub.built ) )
{
self waittill( "trigger", player );
if ( player != self.parent_player )
continue;
if ( isdefined( player.screecher_weapon ) )
continue;
if ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0.5 );
continue;
}
bind_to = self.stub;
slot = bind_to.buildablestruct.buildable_slot;
if ( !isdefined( self.stub.bound_to_buildable ) )
bind_to = self.stub.buildable_pool pooledbuildable_stub_for_piece( player player_get_buildable_piece( slot ) );
if ( !isdefined( bind_to ) || isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to || isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
if ( isdefined( self.stub.oncantuse ) )
self.stub [[ self.stub.oncantuse ]]( player );
continue;
}
status = player player_can_build( bind_to.buildablezone );
if ( !status )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
if ( isdefined( bind_to.oncantuse ) )
bind_to [[ bind_to.oncantuse ]]( player );
}
else
{
if ( isdefined( bind_to.onbeginuse ) )
self.stub [[ bind_to.onbeginuse ]]( player );
result = self buildable_use_hold_think( player, bind_to );
team = player.pers["team"];
if ( result )
{
if ( isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to )
result = 0;
if ( isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
result = 0;
}
if ( isdefined( bind_to.onenduse ) )
self.stub [[ bind_to.onenduse ]]( team, player, result );
if ( !result )
continue;
if ( !isdefined( self.stub.bound_to_buildable ) && isdefined( bind_to ) )
{
if ( bind_to != self.stub )
swap_buildable_fields( self.stub, bind_to );
self.stub.bound_to_buildable = self.stub;
}
if ( isdefined( self.stub.onuse ) )
self.stub [[ self.stub.onuse ]]( player );
if ( isdefined( player player_get_buildable_piece( slot ) ) )
{
prompt = player player_build( self.stub.buildablezone );
player_built = player;
self.stub.hint_string = prompt;
self sethintstring( self.stub.hint_string );
}
}
}
switch ( self.stub.persistent )
{
case "1":
self bptrigger_think_persistent( player_built );
break;
case "0":
self bptrigger_think_one_time( player_built );
break;
case "3":
self bptrigger_think_unbuild( player_built );
break;
case "2":
self bptrigger_think_one_use_and_fly( player_built );
break;
case "4":
self [[ self.stub.custom_completion_callback ]]( player_built );
break;
}
}

View File

@ -1,17 +1,22 @@
#include maps/mp/zombies/_zm_turned;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_turned;
register_game_module()
{
}
onstartgametype( name )
{
}
onstartcleansedgametype()
{
}

View File

@ -1,11 +1,14 @@
#include maps/mp/zombies/_zm_game_module_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_utility;
#include maps\mp\zombies\_zm_game_module;
register_game_module()
{
level.game_module_grief_index = 9;
maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
level.game_module_grief_index = 9;
maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
}

View File

@ -1,6 +1,9 @@
#include maps/mp/zombies/_zm_game_module_utility;
#include maps/mp/zombies/_zm_game_module_meat_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_utility;

View File

@ -1,64 +1,59 @@
#include maps/mp/zombies/_zm_game_module_cleansed;
#include maps/mp/zombies/_zm_turned;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_turned;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zombies\_zm_game_module_cleansed;
register_game_module()
{
level.game_module_turned_index = 6;
maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", ::maps/mp/zombies/_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, ::maps/mp/zombies/_zm_game_module_cleansed::onspawnzombie, ::maps/mp/zombies/_zm_game_module_cleansed::onstartgametype );
level.game_module_turned_index = 6;
maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", maps\mp\zombies\_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, maps\mp\zombies\_zm_game_module_cleansed::onspawnzombie, maps\mp\zombies\_zm_game_module_cleansed::onstartgametype );
}
register_turned_match( start_func, end_func, name )
{
if ( !isDefined( level._registered_turned_matches ) )
{
level._registered_turned_matches = [];
}
match = spawnstruct();
match.match_name = name;
match.match_start_func = start_func;
match.match_end_func = end_func;
level._registered_turned_matches[ level._registered_turned_matches.size ] = match;
if ( !isdefined( level._registered_turned_matches ) )
level._registered_turned_matches = [];
match = spawnstruct();
match.match_name = name;
match.match_start_func = start_func;
match.match_end_func = end_func;
level._registered_turned_matches[level._registered_turned_matches.size] = match;
}
get_registered_turned_match( name )
{
_a41 = level._registered_turned_matches;
_k41 = getFirstArrayKey( _a41 );
while ( isDefined( _k41 ) )
{
struct = _a41[ _k41 ];
if ( struct.match_name == name )
{
return struct;
}
_k41 = getNextArrayKey( _a41, _k41 );
}
foreach ( struct in level._registered_turned_matches )
{
if ( struct.match_name == name )
return struct;
}
}
set_current_turned_match( name )
{
level._current_turned_match = name;
level._current_turned_match = name;
}
get_current_turned_match()
{
return level._current_turned_match;
return level._current_turned_match;
}
init_zombie_weapon()
{
maps/mp/zombies/_zm_turned::init();
maps\mp\zombies\_zm_turned::init();
}
onpostinitgametype()
{
if ( level.scr_zm_game_module != level.game_module_turned_index )
{
return;
}
level thread init_zombie_weapon();
if ( level.scr_zm_game_module != level.game_module_turned_index )
return;
level thread init_zombie_weapon();
}

View File

@ -1,46 +1,46 @@
#include maps/mp/zombies/_zm_game_module_meat;
#include maps/mp/zombies/_zm_game_module_meat_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_meat;
init_item_meat()
{
level.item_meat_name = "item_meat_zm";
precacheitem( level.item_meat_name );
level.item_meat_name = "item_meat_zm";
precacheitem( level.item_meat_name );
}
move_ring( ring )
{
positions = getstructarray( ring.target, "targetname" );
positions = array_randomize( positions );
level endon( "end_game" );
while ( 1 )
{
_a23 = positions;
_k23 = getFirstArrayKey( _a23 );
while ( isDefined( _k23 ) )
{
position = _a23[ _k23 ];
self moveto( position.origin, randomintrange( 30, 45 ) );
self waittill( "movedone" );
_k23 = getNextArrayKey( _a23, _k23 );
}
}
positions = getstructarray( ring.target, "targetname" );
positions = array_randomize( positions );
level endon( "end_game" );
while ( true )
{
foreach ( position in positions )
{
self moveto( position.origin, randomintrange( 30, 45 ) );
self waittill( "movedone" );
}
}
}
rotate_ring( forward )
{
level endon( "end_game" );
dir = -360;
if ( forward )
{
dir = 360;
}
while ( 1 )
{
self rotateyaw( dir, 9 );
wait 9;
}
level endon( "end_game" );
dir = -360;
if ( forward )
dir = 360;
while ( true )
{
self rotateyaw( dir, 9 );
wait 9;
}
}

View File

@ -1,139 +1,172 @@
#include maps/mp/_visionset_mgr;
#include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_perks;
#include maps\mp\_visionset_mgr;
enable_divetonuke_perk_for_level()
{
maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" );
maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache );
maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield );
maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think );
maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" );
maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache );
maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield );
maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think );
maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
}
init_divetonuke()
{
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 );
level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" );
set_zombie_var( "zombie_perk_divetonuke_radius", 300 );
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 );
level._effect["divetonuke_groundhit"] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" );
set_zombie_var( "zombie_perk_divetonuke_radius", 300 );
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
}
divetonuke_precache()
{
if ( isDefined( level.divetonuke_precache_override_func ) )
{
[[ level.divetonuke_precache_override_func ]]();
return;
}
precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke" );
precachemodel( "zombie_vending_nuke_on" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets[ "divetonuke" ] = spawnstruct();
level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke";
level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke";
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on";
if ( isdefined( level.divetonuke_precache_override_func ) )
{
[[ level.divetonuke_precache_override_func ]]();
return;
}
precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke" );
precachemodel( "zombie_vending_nuke_on" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets["divetonuke"] = spawnstruct();
level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke";
level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke";
level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on";
}
divetonuke_register_clientfield()
{
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
}
divetonuke_set_clientfield( state )
{
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
}
divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision )
{
use_trigger.script_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk";
use_trigger.script_label = "mus_perks_phd_sting";
use_trigger.target = "vending_divetonuke";
perk_machine.script_string = "divetonuke_perk";
perk_machine.targetname = "vending_divetonuke";
if ( isDefined( bump_trigger ) )
{
bump_trigger.script_string = "divetonuke_perk";
}
use_trigger.script_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk";
use_trigger.script_label = "mus_perks_phd_sting";
use_trigger.target = "vending_divetonuke";
perk_machine.script_string = "divetonuke_perk";
perk_machine.targetname = "vending_divetonuke";
if ( isdefined( bump_trigger ) )
bump_trigger.script_string = "divetonuke_perk";
}
divetonuke_perk_machine_think()
{
init_divetonuke();
while ( 1 )
{
machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" );
i = 0;
while ( i < machine.size )
{
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model );
i++;
}
array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" );
i = 0;
while ( i < machine.size )
{
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model );
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 );
machine[ i ] playsound( "zmb_perks_power_on" );
machine[ i ] thread perk_fx( "divetonuke_light" );
machine[ i ] thread play_loop_on_machine();
i++;
}
level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) )
{
array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback );
}
level waittill( "divetonuke_off" );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) )
{
array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback );
}
array_thread( machine, ::turn_perk_off );
}
init_divetonuke();
while ( true )
{
machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" );
for ( i = 0; i < machine.size; i++ )
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" );
for ( i = 0; i < machine.size; i++ )
{
machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
machine[i] playsound( "zmb_perks_power_on" );
machine[i] thread perk_fx( "divetonuke_light" );
machine[i] thread play_loop_on_machine();
}
level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 );
if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) )
array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
level waittill( "divetonuke_off" );
if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) )
array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
array_thread( machine, ::turn_perk_off );
}
}
divetonuke_host_migration_func()
{
flop = getentarray( "vending_divetonuke", "targetname" );
_a138 = flop;
_k138 = getFirstArrayKey( _a138 );
while ( isDefined( _k138 ) )
{
perk = _a138[ _k138 ];
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model )
{
perk perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" );
}
_k138 = getNextArrayKey( _a138, _k138 );
}
flop = getentarray( "vending_divetonuke", "targetname" );
foreach ( perk in flop )
{
if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model )
{
perk perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" );
}
}
}
divetonuke_explode( attacker, origin )
{
radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ];
min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ];
max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ];
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
playfx( level._effect[ "divetonuke_groundhit" ], origin );
attacker playsound( "zmb_phdflop_explo" );
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1;
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
radius = level.zombie_vars["zombie_perk_divetonuke_radius"];
min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"];
max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"];
if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized )
attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
else
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
playfx( level._effect["divetonuke_groundhit"], origin );
attacker playsound( "zmb_phdflop_explo" );
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1;
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
}
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
{
self endon( "disconnect" );
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
network_stall_counter = 0;
if ( isdefined( a_zombies ) )
{
for ( i = 0; i < a_zombies.size; i++ )
{
e_zombie = a_zombies[i];
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
continue;
dist = distance( e_zombie.origin, origin );
damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius );
e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod );
network_stall_counter--;
if ( network_stall_counter <= 0 )
{
wait_network_frame();
network_stall_counter = randomintrange( 1, 3 );
}
}
}
}

View File

@ -1,308 +1,302 @@
#include maps/mp/zombies/_zm_stats;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_stats;
init()
{
if ( !isDefined( level.ballistic_knife_autorecover ) )
{
level.ballistic_knife_autorecover = 1;
}
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
if ( !isdefined( level.ballistic_knife_autorecover ) )
level.ballistic_knife_autorecover = 1;
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
}
on_spawn( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isDefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isDefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
else
{
if ( isai( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
}
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else
{
if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
}
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
if ( isfriendly )
{
retrievable_model waittill( "stationary" );
}
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
{
player notify( "ballistic_knife_stationary" );
}
else
{
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey );
}
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isdefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isdefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
isfriendly = 1;
else if ( isai( prey ) && player.team == prey.team )
isfriendly = 1;
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
if ( isfriendly )
retrievable_model waittill( "stationary" );
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
player notify( "ballistic_knife_stationary", retrievable_model, normal );
else
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
retrievable_model thread wait_to_show_glowing_model( prey );
}
}
wait_to_show_glowing_model( prey )
{
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
on_spawn_retrieve_trigger( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) )
{
return;
}
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
{
trigger_pos[ 0 ] = prey.origin[ 0 ];
trigger_pos[ 1 ] = prey.origin[ 1 ];
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
}
else
{
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
}
if ( is_true( level.ballistic_knife_autorecover ) )
{
trigger_pos[ 2 ] -= 50;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 );
}
else
{
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
}
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isDefined( hint_string ) )
{
pickup_trigger sethintstring( hint_string );
}
else
{
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
}
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isDefined( prey ) )
{
pickup_trigger linkto( prey );
}
else
{
pickup_trigger linkto( retrievable_model );
}
if ( isDefined( level.knife_planted ) )
{
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
}
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isdefined( retrievable_model ) )
return;
trigger_pos = [];
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
{
trigger_pos[0] = prey.origin[0];
trigger_pos[1] = prey.origin[1];
trigger_pos[2] = prey.origin[2] + 10;
}
else
{
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
}
if ( is_true( level.ballistic_knife_autorecover ) )
{
trigger_pos[2] -= 50.0;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
}
else
{
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
}
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isdefined( hint_string ) )
pickup_trigger sethintstring( hint_string );
else
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isdefined( prey ) )
pickup_trigger linkto( prey );
else
pickup_trigger linkto( retrievable_model );
if ( isdefined( level.knife_planted ) )
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
}
debug_print( endpos )
{
/#
self endon( "death" );
while ( 1 )
{
print3d( endpos, "pickup_trigger" );
wait 0,05;
self endon( "death" );
while ( true )
{
print3d( endpos, "pickup_trigger" );
wait 0.05;
}
#/
}
}
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
{
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
max_ammo = weaponmaxammo( weapon ) + 1;
autorecover = is_true( level.ballistic_knife_autorecover );
while ( 1 )
{
trigger waittill( "trigger", player );
while ( !isalive( player ) )
{
continue;
}
if ( !player isonground() && !is_true( trigger.force_pickup ) )
{
continue;
}
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{
continue;
}
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{
continue;
}
ammo_stock = player getweaponammostock( weapon );
ammo_clip = player getweaponammoclip( weapon );
current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
{
hasreloaded = 0;
}
if ( total_ammo >= max_ammo || !hasreloaded )
{
continue;
}
if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) )
{
if ( isDefined( playersoundonuse ) )
{
player playlocalsound( playersoundonuse );
}
if ( isDefined( npcsoundonuse ) )
{
player playsound( npcsoundonuse );
}
player thread [[ callback ]]( weapon, model, trigger );
return;
}
else
{
}
}
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
max_ammo = weaponmaxammo( weapon ) + 1;
autorecover = is_true( level.ballistic_knife_autorecover );
while ( true )
{
trigger waittill( "trigger", player );
if ( !isalive( player ) )
continue;
if ( !player isonground() && !is_true( trigger.force_pickup ) )
continue;
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
continue;
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue;
ammo_stock = player getweaponammostock( weapon );
ammo_clip = player getweaponammoclip( weapon );
current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
hasreloaded = 0;
if ( total_ammo >= max_ammo || !hasreloaded )
continue;
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
{
if ( isdefined( playersoundonuse ) )
player playlocalsound( playersoundonuse );
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
player thread [[ callback ]]( weapon, model, trigger );
break;
}
}
}
pick_up( weapon, model, trigger )
{
if ( self hasweapon( weapon ) )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
{
self setweaponammoclip( weapon, 1 );
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
if ( self hasweapon( weapon ) )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
self setweaponammoclip( weapon, 1 );
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
}
destroy_ent()
{
if ( isDefined( self ) )
{
if ( isDefined( self.glowing_model ) )
{
self.glowing_model delete();
}
self delete();
}
if ( isdefined( self ) )
{
if ( isdefined( self.glowing_model ) )
self.glowing_model delete();
self delete();
}
}
watch_shutdown( trigger, model )
{
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
}
drop_knives_to_ground( player )
{
player endon( "death" );
player endon( "zmb_lost_knife" );
for ( ;; )
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
}
}
player endon( "death" );
player endon( "zmb_lost_knife" );
for (;;)
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < radius * radius )
{
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
}
}
force_drop_knives_to_ground_on_death( player, prey )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
update_retrieve_trigger( player )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isDefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
trigger linkto( self );
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isdefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );
}

View File

@ -1,19 +1,19 @@
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_melee_weapon;
#include maps\mp\zombies\_zm_weapons;
init()
{
if ( isDefined( level.bowie_cost ) )
{
cost = level.bowie_cost;
}
else
{
cost = 3000;
}
maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
if ( isdefined( level.bowie_cost ) )
cost = level.bowie_cost;
else
cost = 3000;
maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
}

View File

@ -1,476 +1,466 @@
#include maps/mp/gametypes_zm/_weaponobjects;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_equipment;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_equipment;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\gametypes_zm\_weaponobjects;
init()
{
if ( !isDefined( level.claymores_max_per_player ) )
{
level.claymores_max_per_player = 12;
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) )
{
model hide();
}
i++;
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
if ( !isdefined( level.claymores_max_per_player ) )
level.claymores_max_per_player = 12;
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
{
model = getent( trigs[i].target, "targetname" );
if ( isdefined( model ) )
model hide();
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
}
buy_claymores()
{
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" );
if ( !isDefined( self.stub ) )
{
return;
}
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
{
self.stub.claymores_triggered = 0;
}
self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 )
{
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( who has_powerup_weapon() )
{
wait 0,1;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) )
{
self.claymores_triggered = self.stub.claymores_triggered;
}
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isDefined( model ) )
{
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
}
else
{
if ( isDefined( self.clientfieldname ) )
{
level setclientfield( self.clientfieldname, 1 );
}
}
self.claymores_triggered = 1;
if ( isDefined( self.stub ) )
{
self.stub.claymores_triggered = 1;
}
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( who );
i++;
}
}
else who thread show_claymore_hint( "already_purchased" );
}
}
}
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" );
if ( !isdefined( self.stub ) )
return;
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
self.stub.claymores_triggered = 0;
self.claymores_triggered = self.stub.claymores_triggered;
while ( true )
{
self waittill( "trigger", who );
if ( who in_revive_trigger() )
continue;
if ( who has_powerup_weapon() )
{
wait 0.1;
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isdefined( self.stub ) )
self.claymores_triggered = self.stub.claymores_triggered;
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isdefined( model ) )
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
else if ( isdefined( self.clientfieldname ) )
level setclientfield( self.clientfieldname, 1 );
self.claymores_triggered = 1;
if ( isdefined( self.stub ) )
self.stub.claymores_triggered = 1;
}
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( who );
}
else
who thread show_claymore_hint( "already_purchased" );
}
else
{
who play_sound_on_ent( "no_purchase" );
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
}
}
}
}
claymore_unitrigger_update_prompt( player )
{
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
self sethintstring( "" );
self setcursorhint( "HINT_NOICON" );
return 0;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return 1;
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
self sethintstring( "" );
self setcursorhint( "HINT_NOICON" );
return false;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return true;
}
set_claymore_visible()
{
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( 1 )
{
j = 0;
while ( j < players.size )
{
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
{
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
i++;
}
}
j++;
}
wait 1;
players = get_players();
}
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( true )
{
for ( j = 0; j < players.size; j++ )
{
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
{
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( players[j], 0 );
}
}
wait 1;
players = get_players();
}
}
claymore_safe_to_plant()
{
if ( self.owner.claymores.size >= level.claymores_max_per_player )
{
return 0;
}
if ( isDefined( level.claymore_safe_to_plant ) )
{
return self [[ level.claymore_safe_to_plant ]]();
}
return 1;
if ( self.owner.claymores.size >= level.claymores_max_per_player )
return 0;
if ( isdefined( level.claymore_safe_to_plant ) )
return self [[ level.claymore_safe_to_plant ]]();
return 1;
}
claymore_wait_and_detonate()
{
wait 0,1;
self detonate( self.owner );
wait 0.1;
self detonate( self.owner );
}
claymore_watch()
{
self endon( "death" );
self notify( "claymore_watch" );
self endon( "claymore_watch" );
while ( 1 )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isDefined( level.claymore_planted ) )
{
self thread [[ level.claymore_planted ]]( claymore );
}
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
break;
}
else
{
claymore thread claymore_wait_and_detonate();
}
}
}
self endon( "death" );
self notify( "claymore_watch" );
self endon( "claymore_watch" );
while ( true )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isdefined( level.claymore_planted ) )
self thread [[ level.claymore_planted ]]( claymore );
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
}
else
claymore thread claymore_wait_and_detonate();
}
}
}
claymore_setup()
{
if ( !isDefined( self.claymores ) )
{
self.claymores = [];
}
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
if ( !isdefined( self.claymores ) )
self.claymores = [];
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
}
adjust_trigger_origin( origin )
{
origin += vectorScale( ( 0, 0, 1 ), 20 );
return origin;
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
return origin;
}
on_spawn_retrieve_trigger( watcher, player )
{
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isDefined( self.pickuptrigger ) )
{
self.pickuptrigger sethintlowpriority( 0 );
}
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isdefined( self.pickuptrigger ) )
self.pickuptrigger sethintlowpriority( 0 );
}
pickup_claymores()
{
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
player notify( "zmb_disable_claymore_prompt" );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
player notify( "zmb_disable_claymore_prompt" );
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
}
pickup_claymores_trigger_listener( trigger, player )
{
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
}
pickup_claymores_trigger_listener_enable( trigger, player )
{
self endon( "delete" );
self endon( "death" );
while ( 1 )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isDefined( trigger ) )
{
return;
}
trigger trigger_on();
trigger linkto( self );
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isdefined( trigger ) )
return;
trigger trigger_on();
trigger linkto( self );
}
}
pickup_claymores_trigger_listener_disable( trigger, player )
{
self endon( "delete" );
self endon( "death" );
while ( 1 )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isDefined( trigger ) )
{
return;
}
trigger unlink();
trigger trigger_off();
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isdefined( trigger ) )
return;
trigger unlink();
trigger trigger_off();
}
}
shouldaffectweaponobject( object )
{
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
dirtopos = pos - object.origin;
objectforward = anglesToForward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
{
return 0;
}
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
dirtopos = pos - object.origin;
objectforward = anglestoforward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
return 0;
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
}
claymore_detonation()
{
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
{
damagearea setmovingplatformenabled( 1 );
}
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self;
while ( 1 )
{
damagearea waittill( "trigger", ent );
if ( isDefined( self.owner ) && ent == self.owner )
{
continue;
}
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{
continue;
}
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
{
continue;
}
while ( !ent shouldaffectweaponobject( self ) )
{
continue;
}
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0,4;
if ( isDefined( self.owner ) )
{
self detonate( self.owner );
}
else
{
self detonate( undefined );
}
return;
}
}
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
damagearea setmovingplatformenabled( 1 );
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[self.owner.claymores.size] = self;
while ( true )
{
damagearea waittill( "trigger", ent );
if ( isdefined( self.owner ) && ent == self.owner )
continue;
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
continue;
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
continue;
if ( !ent shouldaffectweaponobject( self ) )
continue;
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0.4;
if ( isdefined( self.owner ) )
self detonate( self.owner );
else
self detonate( undefined );
return;
}
}
}
delete_claymores_on_death( player, ent )
{
self waittill( "death" );
if ( isDefined( player ) )
{
arrayremovevalue( player.claymores, self );
}
wait 0,05;
if ( isDefined( ent ) )
{
ent delete();
}
self waittill( "death" );
if ( isdefined( player ) )
arrayremovevalue( player.claymores, self );
wait 0.05;
if ( isdefined( ent ) )
ent delete();
}
satchel_damage()
{
self endon( "death" );
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( 1 )
{
self waittill( "damage", amount, attacker );
if ( !isDefined( self ) )
{
return;
}
self.health = self.maxhealth;
while ( !isplayer( attacker ) )
{
continue;
}
if ( isDefined( self.owner ) && attacker == self.owner )
{
continue;
}
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
{
continue;
}
}
if ( level.satchelexplodethisframe )
{
wait ( 0,1 + randomfloat( 0,4 ) );
}
else wait 0,05;
if ( !isDefined( self ) )
{
return;
}
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
self endon( "death" );
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( true )
{
self waittill( "damage", amount, attacker );
if ( !isdefined( self ) )
return;
self.health = self.maxhealth;
if ( !isplayer( attacker ) )
continue;
if ( isdefined( self.owner ) && attacker == self.owner )
continue;
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
continue;
break;
}
if ( level.satchelexplodethisframe )
wait( 0.1 + randomfloat( 0.4 ) );
else
wait 0.05;
if ( !isdefined( self ) )
return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
}
reset_satchel_explode_this_frame()
{
wait 0,05;
level.satchelexplodethisframe = 0;
wait 0.05;
level.satchelexplodethisframe = 0;
}
play_claymore_effects()
{
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
}
give_claymores_after_rounds()
{
while ( 1 )
{
level waittill( "between_round_over" );
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
{
players[ i ] giveweapon( "claymore_zm" );
players[ i ] set_player_placeable_mine( "claymore_zm" );
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
players[ i ] setweaponammoclip( "claymore_zm", 2 );
}
i++;
}
}
}
while ( true )
{
level waittill( "between_round_over" );
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
for ( i = 0; i < players.size; i++ )
{
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
{
players[i] giveweapon( "claymore_zm" );
players[i] set_player_placeable_mine( "claymore_zm" );
players[i] setactionslot( 4, "weapon", "claymore_zm" );
players[i] setweaponammoclip( "claymore_zm", 2 );
}
}
}
}
}
show_claymore_hint( string )
{
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
{
text = &"ZOMBIE_CLAYMORE_HOWTO";
}
else
{
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
}
show_equipment_hint_text( text );
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
text = &"ZOMBIE_CLAYMORE_HOWTO";
else
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
show_equipment_hint_text( text );
}

View File

@ -1,120 +1,123 @@
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_melee_weapon;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_audio;
init()
{
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
register_melee_weapon_for_level( "tazer_knuckles_zm" );
if ( isDefined( level.tazer_cost ) )
{
cost = level.tazer_cost;
}
else
{
cost = 6000;
}
level.use_tazer_impact_fx = 0;
maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
if ( level.script != "zm_transit" )
{
level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
level.use_tazer_impact_fx = 1;
}
level.tazer_flourish_delay = 0,5;
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
register_melee_weapon_for_level( "tazer_knuckles_zm" );
if ( isdefined( level.tazer_cost ) )
cost = level.tazer_cost;
else
cost = 6000;
level.use_tazer_impact_fx = 0;
maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
if ( level.script != "zm_transit" )
{
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
level.use_tazer_impact_fx = 1;
}
level.tazer_flourish_delay = 0.5;
}
watch_bodily_functions()
{
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro )
{
return;
}
while ( isDefined( self ) && isalive( self ) )
{
self waittill( "damage", amount, attacker, direction_vec, point, type );
if ( !isDefined( self ) )
{
return;
}
if ( !isDefined( attacker ) || !isplayer( attacker ) )
{
continue;
}
while ( type != "MOD_MELEE" )
{
continue;
}
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
{
continue;
}
ch = randomint( 100 );
if ( ch < 4 )
{
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" );
}
if ( level.use_tazer_impact_fx )
{
tags = [];
tags[ 0 ] = "J_Head";
tags[ 1 ] = "J_Neck";
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) );
}
}
if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro )
return;
while ( isdefined( self ) && isalive( self ) )
{
self waittill( "damage", amount, attacker, direction_vec, point, type );
if ( !isdefined( self ) )
return;
if ( !isdefined( attacker ) || !isplayer( attacker ) )
continue;
if ( type != "MOD_MELEE" )
continue;
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
continue;
ch = randomint( 100 );
if ( ch < 4 )
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
if ( level.use_tazer_impact_fx )
{
tags = [];
tags[0] = "J_Head";
tags[1] = "J_Neck";
playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
}
}
}
onplayerconnect()
{
self thread onplayerspawned();
self thread onplayerspawned();
}
onplayerspawned()
{
self endon( "disconnect" );
for ( ;; )
{
self waittill( "spawned_player" );
self thread watchtazerknucklemelee();
}
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread watchtazerknucklemelee();
}
}
watchtazerknucklemelee()
{
self endon( "disconnect" );
for ( ;; )
{
self waittill( "weapon_melee", weapon );
if ( weapon == "tazer_knuckles_zm" )
{
self tazerknuckle_melee();
}
}
self endon( "disconnect" );
for (;;)
{
self waittill( "weapon_melee", weapon );
if ( weapon == "tazer_knuckles_zm" )
self tazerknuckle_melee();
}
}
tazerknuckle_melee()
{
}
tazer_flourish_fx()
{
self waittill( "weapon_change", newweapon );
if ( newweapon == "zombie_tazer_flourish" )
{
self endon( "weapon_change" );
wait level.tazer_flourish_delay;
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
self setclientfieldtoplayer( "tazer_flourish", 1 );
wait_network_frame();
self setclientfieldtoplayer( "tazer_flourish", 0 );
}
self waittill( "weapon_change", newweapon );
if ( newweapon == "zombie_tazer_flourish" )
{
self endon( "weapon_change" );
wait( level.tazer_flourish_delay );
self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
self setclientfieldtoplayer( "tazer_flourish", 1 );
wait_network_frame();
self setclientfieldtoplayer( "tazer_flourish", 0 );
}
}

View File

@ -1,338 +1,327 @@
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_audio;
main()
{
if ( !isDefined( level.weapon_locker_map ) )
{
level.weapon_locker_map = level.script;
}
level.weapon_locker_online = sessionmodeisonlinegame();
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
if ( !isdefined( level.weapon_locker_map ) )
level.weapon_locker_map = level.script;
level.weapon_locker_online = sessionmodeisonlinegame();
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
}
wl_has_stored_weapondata()
{
if ( level.weapon_locker_online )
{
return self has_stored_weapondata( level.weapon_locker_map );
}
else
{
return isDefined( self.stored_weapon_data );
}
if ( level.weapon_locker_online )
return self has_stored_weapondata( level.weapon_locker_map );
else
return isdefined( self.stored_weapon_data );
}
wl_get_stored_weapondata()
{
if ( level.weapon_locker_online )
{
return self get_stored_weapondata( level.weapon_locker_map );
}
else
{
return self.stored_weapon_data;
}
if ( level.weapon_locker_online )
return self get_stored_weapondata( level.weapon_locker_map );
else
return self.stored_weapon_data;
}
wl_clear_stored_weapondata()
{
if ( level.weapon_locker_online )
{
self clear_stored_weapondata( level.weapon_locker_map );
}
else
{
self.stored_weapon_data = undefined;
}
if ( level.weapon_locker_online )
self clear_stored_weapondata( level.weapon_locker_map );
else
self.stored_weapon_data = undefined;
}
wl_set_stored_weapondata( weapondata )
{
if ( level.weapon_locker_online )
{
self set_stored_weapondata( weapondata, level.weapon_locker_map );
}
else
{
self.stored_weapon_data = weapondata;
}
if ( level.weapon_locker_online )
self set_stored_weapondata( weapondata, level.weapon_locker_map );
else
self.stored_weapon_data = weapondata;
}
triggerweaponslockerwatch()
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isDefined( self.script_angles ) )
{
unitrigger_stub.angles = self.script_angles;
}
else
{
unitrigger_stub.angles = self.angles;
}
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isDefined( self.script_length ) )
{
unitrigger_stub.script_length = self.script_length;
}
else
{
unitrigger_stub.script_length = 16;
}
if ( isDefined( self.script_width ) )
{
unitrigger_stub.script_width = self.script_width;
}
else
{
unitrigger_stub.script_width = 32;
}
if ( isDefined( self.script_height ) )
{
unitrigger_stub.script_height = self.script_height;
}
else
{
unitrigger_stub.script_height = 64;
}
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 );
unitrigger_stub.targetname = "weapon_locker";
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.clientfieldname = "weapon_locker";
maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink );
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles;
else
unitrigger_stub.angles = self.angles;
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isdefined( self.script_length ) )
unitrigger_stub.script_length = self.script_length;
else
unitrigger_stub.script_length = 16;
if ( isdefined( self.script_width ) )
unitrigger_stub.script_width = self.script_width;
else
unitrigger_stub.script_width = 32;
if ( isdefined( self.script_height ) )
unitrigger_stub.script_height = self.script_height;
else
unitrigger_stub.script_height = 64;
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
unitrigger_stub.targetname = "weapon_locker";
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.clientfieldname = "weapon_locker";
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink );
}
triggerweaponslockerisvalidweapon( weaponname )
{
weaponname = get_base_weapon_name( weaponname, 1 );
if ( !is_weapon_included( weaponname ) )
{
return 0;
}
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
{
return 0;
}
return 1;
weaponname = get_base_weapon_name( weaponname, 1 );
if ( !is_weapon_included( weaponname ) )
return false;
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
return false;
return true;
}
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
{
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
weaponname = player get_nonalternate_weapon( weaponname );
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
}
else
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
}
}
else
{
weapondata = player wl_get_stored_weapondata();
if ( isDefined( level.remap_weapon_locker_weapons ) )
{
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
}
weapontogive = weapondata[ "name" ];
primaries = player getweaponslistprimaries();
maxweapons = get_player_weapon_limit( player );
weaponname = player get_nonalternate_weapon( weaponname );
if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == weaponname )
{
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
return;
}
}
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
}
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
weaponname = player get_nonalternate_weapon( weaponname );
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
else
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
}
else
{
weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
weapontogive = weapondata["name"];
primaries = player getweaponslistprimaries();
maxweapons = get_player_weapon_limit( player );
weaponname = player get_nonalternate_weapon( weaponname );
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
{
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
return;
}
}
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
}
}
triggerweaponslockerthinkupdateprompt( player )
{
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
return 1;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
return 1;
}
triggerweaponslockerthink()
{
self.parent_player thread triggerweaponslockerweaponchangethink( self );
while ( 1 )
{
self waittill( "trigger", player );
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
curweapon = player getcurrentweapon();
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon );
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
{
continue;
}
weapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player );
player wl_set_stored_weapondata( weapondata );
self.parent_player thread triggerweaponslockerweaponchangethink( self );
while ( true )
{
self waittill( "trigger", player );
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
curweapon = player getcurrentweapon();
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
continue;
weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player wl_set_stored_weapondata( weapondata );
/#
assert( curweapon == weapondata[ "name" ], "weapon data does not match" );
assert( curweapon == weapondata["name"], "weapon data does not match" );
#/
player takeweapon( curweapon );
primaries = player getweaponslistprimaries();
if ( isDefined( primaries[ 0 ] ) )
{
player switchtoweapon( primaries[ 0 ] );
}
else
{
player maps/mp/zombies/_zm_weapons::give_fallback_weapon();
}
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
player playsoundtoplayer( "evt_fridge_locker_close", player );
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "weapon_storage" );
}
else
{
curweapon = player getcurrentweapon();
primaries = player getweaponslistprimaries();
weapondata = player wl_get_stored_weapondata();
if ( isDefined( level.remap_weapon_locker_weapons ) )
{
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
}
weapontogive = weapondata[ "name" ];
while ( !triggerweaponslockerisvalidweapon( weapontogive ) )
{
player playlocalsound( level.zmb_laugh_alias );
player wl_clear_stored_weapondata();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
curweap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( curweapon, 1 );
weap_base = maps/mp/zombies/_zm_weapons::get_base_weapon_name( weapontogive, 1 );
while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
maxweapons = get_player_weapon_limit( player );
if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == curweapon )
{
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon );
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
curweapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player );
player takeweapon( curweapondata[ "name" ] );
player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata );
player wl_clear_stored_weapondata();
player wl_set_stored_weapondata( curweapondata );
player switchtoweapon( weapondata[ "name" ] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
else
{
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
player wl_clear_stored_weapondata();
player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata );
player switchtoweapon( weapondata[ "name" ] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
level notify( "weapon_locker_grab" );
player playsoundtoplayer( "evt_fridge_locker_open", player );
}
wait 0,5;
}
player takeweapon( curweapon );
primaries = player getweaponslistprimaries();
if ( isdefined( primaries[0] ) )
player switchtoweapon( primaries[0] );
else
player maps\mp\zombies\_zm_weapons::give_fallback_weapon();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
player playsoundtoplayer( "evt_fridge_locker_close", player );
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" );
}
else
{
curweapon = player getcurrentweapon();
primaries = player getweaponslistprimaries();
weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
weapontogive = weapondata["name"];
if ( !triggerweaponslockerisvalidweapon( weapontogive ) )
{
player playlocalsound( level.zmb_laugh_alias );
player wl_clear_stored_weapondata();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 );
weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 );
if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
maxweapons = get_player_weapon_limit( player );
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon )
{
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player takeweapon( curweapondata["name"] );
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player wl_clear_stored_weapondata();
player wl_set_stored_weapondata( curweapondata );
player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
else
{
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
player wl_clear_stored_weapondata();
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
level notify( "weapon_locker_grab" );
player playsoundtoplayer( "evt_fridge_locker_open", player );
}
wait 0.5;
}
}
triggerweaponslockerweaponchangethink( trigger )
{
self endon( "disconnect" );
self endon( "death" );
trigger endon( "kill_trigger" );
while ( 1 )
{
self waittill( "weapon_change", newweapon );
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
}
self endon( "disconnect" );
self endon( "death" );
trigger endon( "kill_trigger" );
while ( true )
{
self waittill( "weapon_change", newweapon );
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
}
}
add_weapon_locker_mapping( fromweapon, toweapon )
{
if ( !isDefined( level.remap_weapon_locker_weapons ) )
{
level.remap_weapon_locker_weapons = [];
}
level.remap_weapon_locker_weapons[ fromweapon ] = toweapon;
if ( !isdefined( level.remap_weapon_locker_weapons ) )
level.remap_weapon_locker_weapons = [];
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
}
remap_weapon( weapondata, maptable )
{
name = get_base_name( weapondata[ "name" ] );
att = get_attachment_name( weapondata[ "name" ] );
if ( isDefined( maptable[ name ] ) )
{
weapondata[ "name" ] = maptable[ name ];
name = weapondata[ "name" ];
if ( is_weapon_upgraded( name ) )
{
if ( isDefined( att ) && weapon_supports_attachments( name ) )
{
base = get_base_weapon_name( name, 1 );
if ( !weapon_supports_this_attachment( base, att ) )
{
att = random_attachment( base );
}
weapondata[ "name" ] = weapondata[ "name" ] + "+" + att;
}
else
{
if ( weapon_supports_default_attachment( name ) )
{
att = default_attachment( name );
weapondata[ "name" ] = weapondata[ "name" ] + "+" + att;
}
}
}
}
else
{
return weapondata;
}
name = weapondata[ "name" ];
dw_name = weapondualwieldweaponname( name );
alt_name = weaponaltweaponname( name );
if ( name != "none" )
{
weapondata[ "clip" ] = int( min( weapondata[ "clip" ], weaponclipsize( name ) ) );
weapondata[ "stock" ] = int( min( weapondata[ "stock" ], weaponmaxammo( name ) ) );
}
if ( dw_name != "none" )
{
weapondata[ "lh_clip" ] = int( min( weapondata[ "lh_clip" ], weaponclipsize( dw_name ) ) );
}
if ( alt_name != "none" )
{
weapondata[ "alt_clip" ] = int( min( weapondata[ "alt_clip" ], weaponclipsize( alt_name ) ) );
weapondata[ "alt_stock" ] = int( min( weapondata[ "alt_stock" ], weaponmaxammo( alt_name ) ) );
}
weapondata[ "dw_name" ] = dw_name;
weapondata[ "alt_name" ] = alt_name;
return weapondata;
name = get_base_name( weapondata["name"] );
att = get_attachment_name( weapondata["name"] );
if ( isdefined( maptable[name] ) )
{
weapondata["name"] = maptable[name];
name = weapondata["name"];
if ( is_weapon_upgraded( name ) )
{
if ( isdefined( att ) && weapon_supports_attachments( name ) )
{
base = get_base_weapon_name( name, 1 );
if ( !weapon_supports_this_attachment( base, att ) )
att = random_attachment( base );
weapondata["name"] = weapondata["name"] + "+" + att;
}
else if ( weapon_supports_default_attachment( name ) )
{
att = default_attachment( name );
weapondata["name"] = weapondata["name"] + "+" + att;
}
}
}
else
return weapondata;
name = weapondata["name"];
dw_name = weapondualwieldweaponname( name );
alt_name = weaponaltweaponname( name );
if ( name != "none" )
{
weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
}
if ( dw_name != "none" )
weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
if ( alt_name != "none" )
{
weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
}
weapondata["dw_name"] = dw_name;
weapondata["alt_name"] = alt_name;
return weapondata;
}

View File

@ -1,7 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
a[ 0 ] = "c_zom_zombie_buried_sgirl_head1_mp";
a[ 1 ] = "c_zom_zombie_buried_sgirl_head2_mp";
return a;
a[0] = "c_zom_zombie_buried_sgirl_head1_mp";
a[1] = "c_zom_zombie_buried_sgirl_head2_mp";
return a;
}

View File

@ -1,8 +1,10 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
a[ 0 ] = "c_zom_zombie_buried_sgirl_body1_mp";
a[ 1 ] = "c_zom_zombie_buried_sgirl_body2_mp";
a[ 2 ] = "c_zom_zombie_buried_sgirl_body3_mp";
return a;
a[0] = "c_zom_zombie_buried_sgirl_body1_mp";
a[1] = "c_zom_zombie_buried_sgirl_body2_mp";
a[2] = "c_zom_zombie_buried_sgirl_body3_mp";
return a;
}

View File

@ -1,11 +1,13 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
a[ 0 ] = "c_zom_zombie_buried_sgirl_hair1";
a[ 1 ] = "c_zom_zombie_buried_sgirl_hair1_2";
a[ 2 ] = "c_zom_zombie_buried_sgirl_hair1_3";
a[ 3 ] = "c_zom_zombie_buried_sgirl_hair2";
a[ 4 ] = "c_zom_zombie_buried_sgirl_hair2_2";
a[ 5 ] = "c_zom_zombie_buried_sgirl_hair1_3";
return a;
a[0] = "c_zom_zombie_buried_sgirl_hair1";
a[1] = "c_zom_zombie_buried_sgirl_hair1_2";
a[2] = "c_zom_zombie_buried_sgirl_hair1_3";
a[3] = "c_zom_zombie_buried_sgirl_hair2";
a[4] = "c_zom_zombie_buried_sgirl_hair2_2";
a[5] = "c_zom_zombie_buried_sgirl_hair1_3";
return a;
}