mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
[Buried] Added gsc-tool decompiled GSCs.
This commit is contained in:
parent
0d2c068adb
commit
0d8e9c835a
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
@ -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" );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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();
|
||||
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" );
|
||||
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" );
|
||||
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();
|
||||
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();
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
register()
|
||||
{
|
||||
@ -32,7 +34,7 @@ level_init()
|
||||
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["colors"]["axis"] = ( 0.65, 0.57, 0.41 );
|
||||
game["voice"]["axis"] = "vox_pmc_";
|
||||
}
|
||||
|
||||
@ -44,8 +46,10 @@ cdc()
|
||||
|
||||
allies()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
axis()
|
||||
{
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,15 @@
|
||||
#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;
|
||||
@ -18,28 +19,26 @@ init()
|
||||
achievement_sound_func( achievement_name_lower )
|
||||
{
|
||||
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 );
|
||||
|
||||
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()
|
||||
@ -59,6 +58,7 @@ achievement_buried_sidequest()
|
||||
level endon( "end_game" );
|
||||
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
|
||||
/#
|
||||
|
||||
#/
|
||||
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
|
||||
}
|
||||
@ -67,19 +67,18 @@ achievement_im_your_huckleberry()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
num_barriers_broken = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "sloth_breaks_barrier" );
|
||||
|
||||
num_barriers_broken++;
|
||||
|
||||
if ( num_barriers_broken >= 8 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
|
||||
}
|
||||
@ -88,8 +87,10 @@ achievement_ectoplasmic_residue()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_received_ghost_round_free_perk" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
|
||||
}
|
||||
@ -99,19 +100,18 @@ achievement_death_from_below()
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
num_subwoofer_deaths = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "zombie_subwoofer_kill" );
|
||||
|
||||
num_subwoofer_deaths++;
|
||||
|
||||
if ( num_subwoofer_deaths >= 10 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
|
||||
}
|
||||
@ -120,8 +120,10 @@ achievement_candygram()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_gives_sloth_candy" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
|
||||
}
|
||||
@ -133,12 +135,13 @@ achievement_awaken_the_gazebo()
|
||||
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" );
|
||||
}
|
||||
@ -147,8 +150,10 @@ achievement_revisionist_historian()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_activates_timebomb" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
|
||||
}
|
||||
@ -157,8 +162,10 @@ achievement_mazed_and_confused()
|
||||
{
|
||||
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" );
|
||||
}
|
||||
@ -167,8 +174,10 @@ achievement_fsirt_against_the_wall()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_upgraded_lsat_from_wall" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
|
||||
}
|
||||
@ -177,8 +186,10 @@ achievement_when_the_revolution_comes()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_used_fountain_teleporter" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
|
||||
}
|
||||
|
@ -1,15 +1,18 @@
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/_ambientpackage;
|
||||
#include maps/mp/zm_alcatraz_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\zm_alcatraz_utility;
|
||||
#include maps\mp\_ambientpackage;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
#include maps\mp\zombies\_zm_zonemgr;
|
||||
|
||||
main()
|
||||
{
|
||||
level.sndzombieentcontext = 1;
|
||||
|
||||
if ( is_classic() )
|
||||
{
|
||||
thread sndmusicegg();
|
||||
@ -41,25 +44,25 @@ sndstingersetup()
|
||||
|
||||
sndstingersetupstates()
|
||||
{
|
||||
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" );
|
||||
createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" );
|
||||
createstingerstate( "zone_tunnels_center", "mus_event_location_tunnels", 0,75, "queue" );
|
||||
createstingerstate( "zone_stables", "mus_event_location_stables", 0,75, "queue" );
|
||||
createstingerstate( "zone_underground_courthouse", "mus_event_location_courthouse", 0,75, "queue" );
|
||||
createstingerstate( "zone_underground_bar", "mus_event_location_bar", 0,75, "queue" );
|
||||
createstingerstate( "zone_toy_store", "mus_event_location_toystore", 0,75, "queue" );
|
||||
createstingerstate( "zone_underground_jail", "mus_event_location_jail", 0,75, "queue" );
|
||||
createstingerstate( "zone_general_store", "mus_event_location_genstore", 0,75, "queue" );
|
||||
createstingerstate( "zone_morgue", "mus_event_location_morgue", 0,75, "queue" );
|
||||
createstingerstate( "zone_church_main", "mus_event_location_church", 0,75, "queue" );
|
||||
createstingerstate( "zone_mansion_lawn", "mus_event_location_mansionlawn", 0,75, "queue" );
|
||||
createstingerstate( "zone_mansion", "mus_event_location_mansion", 0,75, "queue" );
|
||||
createstingerstate( "zone_maze", "mus_event_location_maze", 0,75, "queue" );
|
||||
createstingerstate( "zone_maze_staircase", "mus_event_location_mazeend", 0,75, "queue" );
|
||||
createstingerstate( "zone_candy_store", "mus_event_location_candystore", 0,75, "queue" );
|
||||
createstingerstate( "zone_street_lighteast", "mus_event_location_street_east", 0,75, "queue" );
|
||||
createstingerstate( "zone_street_lightwest", "mus_event_location_street_west", 0,75, "queue" );
|
||||
createstingerstate( "zone_start_lower", "mus_event_location_diamondmine", 0,75, "queue" );
|
||||
createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" );
|
||||
createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" );
|
||||
createstingerstate( "zone_tunnels_center", "mus_event_location_tunnels", 0.75, "queue" );
|
||||
createstingerstate( "zone_stables", "mus_event_location_stables", 0.75, "queue" );
|
||||
createstingerstate( "zone_underground_courthouse", "mus_event_location_courthouse", 0.75, "queue" );
|
||||
createstingerstate( "zone_underground_bar", "mus_event_location_bar", 0.75, "queue" );
|
||||
createstingerstate( "zone_toy_store", "mus_event_location_toystore", 0.75, "queue" );
|
||||
createstingerstate( "zone_underground_jail", "mus_event_location_jail", 0.75, "queue" );
|
||||
createstingerstate( "zone_general_store", "mus_event_location_genstore", 0.75, "queue" );
|
||||
createstingerstate( "zone_morgue", "mus_event_location_morgue", 0.75, "queue" );
|
||||
createstingerstate( "zone_church_main", "mus_event_location_church", 0.75, "queue" );
|
||||
createstingerstate( "zone_mansion_lawn", "mus_event_location_mansionlawn", 0.75, "queue" );
|
||||
createstingerstate( "zone_mansion", "mus_event_location_mansion", 0.75, "queue" );
|
||||
createstingerstate( "zone_maze", "mus_event_location_maze", 0.75, "queue" );
|
||||
createstingerstate( "zone_maze_staircase", "mus_event_location_mazeend", 0.75, "queue" );
|
||||
createstingerstate( "zone_candy_store", "mus_event_location_candystore", 0.75, "queue" );
|
||||
createstingerstate( "zone_street_lighteast", "mus_event_location_street_east", 0.75, "queue" );
|
||||
createstingerstate( "zone_street_lightwest", "mus_event_location_street_west", 0.75, "queue" );
|
||||
createstingerstate( "zone_start_lower", "mus_event_location_diamondmine", 0.75, "queue" );
|
||||
createstingerstate( "sloth_escape", "mus_event_sloth_breakout", 0, "reject" );
|
||||
createstingerstate( "poweron", "mus_event_poweron", 0, "reject" );
|
||||
createstingerstate( "sidequest_1", "mus_sidequest_0", 0, "reject" );
|
||||
@ -75,7 +78,8 @@ sndstingersetupstates()
|
||||
createstingerstate( state, alias, prewait, interrupt )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
{
|
||||
s.states[state] = spawnstruct();
|
||||
s.states[state].alias = alias;
|
||||
@ -86,24 +90,19 @@ createstingerstate( state, alias, prewait, interrupt )
|
||||
|
||||
sndboardmonitor()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "last_board_torn", barrier_origin );
|
||||
|
||||
players = getplayers();
|
||||
_a110 = players;
|
||||
_k110 = getFirstArrayKey( _a110 );
|
||||
while ( isDefined( _k110 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a110[ _k110 ];
|
||||
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
||||
{
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k110 = getNextArrayKey( _a110, _k110 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -116,41 +115,39 @@ locationstingerwait( zone_name, type )
|
||||
level.sndlastzone = undefined;
|
||||
level.sndlocationplayed = 0;
|
||||
level thread sndlocationbetweenroundswait();
|
||||
for ( ;; )
|
||||
{
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "newzoneActive", activezone );
|
||||
wait 0,1;
|
||||
while ( !sndlocationshouldplay( array, activezone ) )
|
||||
{
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( !sndlocationshouldplay( array, activezone ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
}
|
||||
}
|
||||
else while ( is_true( level.sndstinger.isplaying ) )
|
||||
continue;
|
||||
else if ( is_true( level.sndstinger.isplaying ) )
|
||||
{
|
||||
level thread sndlocationqueue( activezone );
|
||||
continue;
|
||||
}
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone );
|
||||
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone );
|
||||
level.sndlocationplayed = 1;
|
||||
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
||||
level.sndlastzone = activezone;
|
||||
|
||||
if ( numcut >= sndnorepeats )
|
||||
{
|
||||
numcut = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
numcut++;
|
||||
}
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
level.sndlocationplayed = 0;
|
||||
}
|
||||
}
|
||||
@ -174,208 +171,167 @@ sndlocationsarray()
|
||||
sndlocationshouldplay( array, activezone )
|
||||
{
|
||||
shouldplay = 0;
|
||||
|
||||
if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) )
|
||||
{
|
||||
return shouldplay;
|
||||
}
|
||||
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return shouldplay;
|
||||
}
|
||||
_a197 = array;
|
||||
_k197 = getFirstArrayKey( _a197 );
|
||||
while ( isDefined( _k197 ) )
|
||||
|
||||
foreach ( place in array )
|
||||
{
|
||||
place = _a197[ _k197 ];
|
||||
if ( place == activezone )
|
||||
{
|
||||
shouldplay = 1;
|
||||
}
|
||||
_k197 = getNextArrayKey( _a197, _k197 );
|
||||
}
|
||||
|
||||
if ( shouldplay == 0 )
|
||||
{
|
||||
return shouldplay;
|
||||
}
|
||||
|
||||
playersinlocal = 0;
|
||||
players = getplayers();
|
||||
_a208 = players;
|
||||
_k208 = getFirstArrayKey( _a208 );
|
||||
while ( isDefined( _k208 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a208[ _k208 ];
|
||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
{
|
||||
if ( !is_true( player.afterlife ) )
|
||||
{
|
||||
playersinlocal++;
|
||||
}
|
||||
}
|
||||
_k208 = getNextArrayKey( _a208, _k208 );
|
||||
}
|
||||
|
||||
if ( playersinlocal >= 1 )
|
||||
{
|
||||
shouldplay = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
shouldplay = 0;
|
||||
}
|
||||
|
||||
return shouldplay;
|
||||
}
|
||||
|
||||
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
||||
{
|
||||
if ( numcut >= max_num_removed )
|
||||
{
|
||||
current_array = sndlocationsarray();
|
||||
}
|
||||
_a231 = current_array;
|
||||
_k231 = getFirstArrayKey( _a231 );
|
||||
while ( isDefined( _k231 ) )
|
||||
|
||||
foreach ( place in current_array )
|
||||
{
|
||||
place = _a231[ _k231 ];
|
||||
if ( place == activezone )
|
||||
{
|
||||
arrayremovevalue( current_array, place );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k231 = getNextArrayKey( _a231, _k231 );
|
||||
}
|
||||
}
|
||||
|
||||
return current_array;
|
||||
}
|
||||
|
||||
sndlocationbetweenrounds()
|
||||
{
|
||||
level endon( "newzoneActive" );
|
||||
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names();
|
||||
_a248 = activezones;
|
||||
_k248 = getFirstArrayKey( _a248 );
|
||||
while ( isDefined( _k248 ) )
|
||||
{
|
||||
zone = _a248[ _k248 ];
|
||||
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||
{
|
||||
}
|
||||
else
|
||||
activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
|
||||
|
||||
foreach ( zone in activezones )
|
||||
{
|
||||
if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||
continue;
|
||||
|
||||
players = getplayers();
|
||||
_a254 = players;
|
||||
_k254 = getFirstArrayKey( _a254 );
|
||||
while ( isDefined( _k254 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a254[ _k254 ];
|
||||
if ( is_true( player.afterlife ) )
|
||||
continue;
|
||||
|
||||
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
|
||||
{
|
||||
wait 0,1;
|
||||
level notify( "newzoneActive" );
|
||||
wait 0.1;
|
||||
level notify( "newzoneActive", zone );
|
||||
return;
|
||||
}
|
||||
}
|
||||
_k254 = getNextArrayKey( _a254, _k254 );
|
||||
}
|
||||
}
|
||||
_k248 = getNextArrayKey( _a248, _k248 );
|
||||
}
|
||||
}
|
||||
|
||||
sndlocationbetweenroundswait()
|
||||
{
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
while ( 1 )
|
||||
wait 0.1;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level thread sndlocationbetweenrounds();
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
sndlocationqueue( zone )
|
||||
{
|
||||
level endon( "newzoneActive" );
|
||||
|
||||
while ( is_true( level.sndstinger.isplaying ) )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
level notify( "newzoneActive" );
|
||||
wait 0.5;
|
||||
|
||||
level notify( "newzoneActive", zone );
|
||||
}
|
||||
|
||||
sndplaystinger( state, player )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
return;
|
||||
}
|
||||
|
||||
interrupt = s.states[state].interrupt == "ignore";
|
||||
|
||||
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
||||
{
|
||||
if ( interrupt )
|
||||
{
|
||||
wait s.states[ state ].prewait;
|
||||
wait( s.states[state].prewait );
|
||||
playstinger( state, player, 1 );
|
||||
}
|
||||
else if ( !level.sndroundwait )
|
||||
{
|
||||
s.isplaying = 1;
|
||||
wait s.states[ state ].prewait;
|
||||
wait( s.states[state].prewait );
|
||||
playstinger( state, player, 0 );
|
||||
level notify( "sndStingerDone" );
|
||||
s.isplaying = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( s.states[ state ].interrupt == "queue" )
|
||||
{
|
||||
else if ( s.states[state].interrupt == "queue" )
|
||||
level thread sndqueuestinger( state, player );
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( s.states[state].interrupt == "queue" )
|
||||
{
|
||||
level thread sndqueuestinger( state, player );
|
||||
}
|
||||
}
|
||||
|
||||
playstinger( state, player, ignore )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_true( ignore ) )
|
||||
{
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
if ( isdefined( player ) )
|
||||
player playsoundtoplayer( s.states[state].alias, player );
|
||||
}
|
||||
else
|
||||
{
|
||||
s.ent playsound( s.states[state].alias );
|
||||
s.ent thread playstingerstop();
|
||||
}
|
||||
}
|
||||
else if ( isDefined( player ) )
|
||||
else if ( isdefined( player ) )
|
||||
{
|
||||
player playsoundtoplayer( s.states[state].alias, player );
|
||||
wait 8;
|
||||
@ -384,6 +340,7 @@ playstinger( state, player, ignore )
|
||||
{
|
||||
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
||||
s.ent thread playstingerstop();
|
||||
|
||||
s.ent waittill( "sndStingerDone" );
|
||||
}
|
||||
}
|
||||
@ -391,24 +348,21 @@ playstinger( state, player, ignore )
|
||||
sndqueuestinger( state, player )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
|
||||
if ( is_true( s.queue ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
s.queue = 1;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
||||
{
|
||||
wait 0,5;
|
||||
continue;
|
||||
}
|
||||
wait 0.5;
|
||||
else
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
level thread sndplaystinger( state, player );
|
||||
s.queue = 0;
|
||||
}
|
||||
@ -418,9 +372,11 @@ sndstingerroundwait()
|
||||
{
|
||||
wait 25;
|
||||
level.sndroundwait = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
level thread sndstingerroundwait_start();
|
||||
}
|
||||
}
|
||||
@ -428,14 +384,16 @@ sndstingerroundwait()
|
||||
sndstingerroundwait_start()
|
||||
{
|
||||
level.sndroundwait = 1;
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level thread sndstingerroundwait_end();
|
||||
}
|
||||
|
||||
sndstingerroundwait_end()
|
||||
{
|
||||
level endon( "end_of_round" );
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
wait 28;
|
||||
level.sndroundwait = 0;
|
||||
}
|
||||
@ -444,7 +402,9 @@ playstingerstop()
|
||||
{
|
||||
self endon( "sndStingerDone" );
|
||||
level endon( "sndStingerDone" );
|
||||
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
wait 2;
|
||||
self stopsounds();
|
||||
}
|
||||
@ -454,36 +414,39 @@ sndbackgroundmustracker()
|
||||
self endon( "disconnect" );
|
||||
self.prevzone = "null";
|
||||
self.prevcase = 99;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "newzoneActive", activezone );
|
||||
|
||||
if ( self.prevzone != activezone )
|
||||
{
|
||||
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
{
|
||||
self.prevzone = activezone;
|
||||
|
||||
switch ( activezone )
|
||||
{
|
||||
case "zone_start":
|
||||
case "zone_start_lower":
|
||||
case "zone_start":
|
||||
if ( self.prevcase != 0 )
|
||||
{
|
||||
self setclientfieldtoplayer( "sndBackgroundMus", 0 );
|
||||
self.prevcase = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
case "zone_mansion":
|
||||
case "zone_mansion_backyard":
|
||||
case "zone_mansion_lawn":
|
||||
case "zone_maze":
|
||||
case "zone_maze_staircase":
|
||||
case "zone_maze":
|
||||
case "zone_mansion_lawn":
|
||||
case "zone_mansion_backyard":
|
||||
case "zone_mansion":
|
||||
if ( self.prevcase != 2 )
|
||||
{
|
||||
self setclientfieldtoplayer( "sndBackgroundMus", 2 );
|
||||
self.prevcase = 2;
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
default:
|
||||
if ( self.prevcase != 1 )
|
||||
@ -491,7 +454,7 @@ sndbackgroundmustracker()
|
||||
self setclientfieldtoplayer( "sndBackgroundMus", 1 );
|
||||
self.prevcase = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -502,14 +465,12 @@ sndbackgroundmustracker()
|
||||
sndshoulditplay( activezone )
|
||||
{
|
||||
if ( self.prevzone == activezone )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sndlastlifesetup()
|
||||
@ -523,15 +484,18 @@ sndlastlife_multi()
|
||||
level endon( "end_of_round" );
|
||||
level thread sndlastlife_multi_reset();
|
||||
sndplayersdead = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "bleed_out" );
|
||||
|
||||
sndplayersdead++;
|
||||
players = getplayers();
|
||||
if ( ( players.size - sndplayersdead ) <= 1 )
|
||||
|
||||
if ( players.size - sndplayersdead <= 1 )
|
||||
{
|
||||
last_alive = sndlastlife_multi_getlastplayer();
|
||||
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
||||
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -540,55 +504,50 @@ sndlastlife_multi()
|
||||
sndlastlife_multi_getlastplayer()
|
||||
{
|
||||
level endon( "end_of_round" );
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
players = getplayers();
|
||||
_a572 = players;
|
||||
_k572 = getFirstArrayKey( _a572 );
|
||||
while ( isDefined( _k572 ) )
|
||||
|
||||
foreach ( dude in players )
|
||||
{
|
||||
dude = _a572[ _k572 ];
|
||||
if ( dude.sessionstate == "spectator" )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
|
||||
return dude;
|
||||
}
|
||||
_k572 = getNextArrayKey( _a572, _k572 );
|
||||
}
|
||||
}
|
||||
|
||||
sndlastlife_multi_reset()
|
||||
{
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
level thread sndlastlife_multi();
|
||||
}
|
||||
|
||||
sndmusicegg()
|
||||
{
|
||||
origins = [];
|
||||
origins[ 0 ] = ( -1215,63, -499,975, 291,89 );
|
||||
origins[ 1 ] = ( 552,009, -342,824, 27,3921 );
|
||||
origins[ 2 ] = ( 2827,28, 306,468, 92,783 );
|
||||
origins[0] = ( -1215.63, -499.975, 291.89 );
|
||||
origins[1] = ( 552.009, -342.824, 27.3921 );
|
||||
origins[2] = ( 2827.28, 306.468, 92.783 );
|
||||
level.meteor_counter = 0;
|
||||
level.music_override = 0;
|
||||
i = 0;
|
||||
while ( i < origins.size )
|
||||
{
|
||||
|
||||
for ( i = 0; i < origins.size; i++ )
|
||||
level thread sndmusicegg_wait( origins[i] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
sndmusicegg_wait( bottle_origin )
|
||||
{
|
||||
temp_ent = spawn( "script_origin", bottle_origin );
|
||||
temp_ent playloopsound( "zmb_meteor_loop" );
|
||||
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||
temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||
|
||||
temp_ent waittill( "main_music_egg_hit", player );
|
||||
|
||||
temp_ent stoploopsound( 1 );
|
||||
player playsound( "zmb_meteor_activate" );
|
||||
level.meteor_counter += 1;
|
||||
|
||||
if ( level.meteor_counter == 3 )
|
||||
{
|
||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 363 );
|
||||
@ -596,7 +555,7 @@ sndmusicegg_wait( bottle_origin )
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 1,5;
|
||||
wait 1.5;
|
||||
temp_ent delete();
|
||||
}
|
||||
}
|
||||
@ -604,10 +563,9 @@ sndmusicegg_wait( bottle_origin )
|
||||
sndmusicegg_override()
|
||||
{
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sndmuseggplay( ent, alias, time )
|
||||
@ -620,7 +578,7 @@ sndmuseggplay( ent, alias, time )
|
||||
level waittill_either( "end_game", "sndSongDone" );
|
||||
ent stopsounds();
|
||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
ent delete();
|
||||
level.music_override = 0;
|
||||
}
|
||||
@ -628,24 +586,23 @@ sndmuseggplay( ent, alias, time )
|
||||
sndeggmusicwait( time )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
wait time;
|
||||
wait( time );
|
||||
level notify( "sndSongDone" );
|
||||
}
|
||||
|
||||
sndmusicquestendgame( alias, length )
|
||||
{
|
||||
while ( is_true( level.music_override ) )
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
|
||||
level.music_override = 1;
|
||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
||||
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||
ent playsound( alias );
|
||||
wait length;
|
||||
wait( length );
|
||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||
level.music_override = 0;
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
ent delete();
|
||||
wait 1;
|
||||
level thread sndendgamemusicredux( alias, length );
|
||||
@ -654,26 +611,26 @@ sndmusicquestendgame( alias, length )
|
||||
easter_egg_song_vo( player )
|
||||
{
|
||||
if ( isalive( player ) )
|
||||
{
|
||||
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" );
|
||||
}
|
||||
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" );
|
||||
}
|
||||
|
||||
sndendgamemusicredux( alias, length )
|
||||
{
|
||||
m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" );
|
||||
temp_ent = spawn( "script_origin", m_endgame_machine.origin );
|
||||
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||
temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||
temp_ent playloopsound( "zmb_meteor_loop" );
|
||||
|
||||
temp_ent waittill( "main_music_egg_hit", player );
|
||||
|
||||
temp_ent stoploopsound( 1 );
|
||||
level.music_override = 1;
|
||||
temp_ent playsound( "zmb_endgame_mach_button" );
|
||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
||||
temp_ent playsound( alias );
|
||||
wait length;
|
||||
wait( length );
|
||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||
level.music_override = 0;
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
temp_ent delete();
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,51 +1,51 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_dist ) )
|
||||
level.zombie_tracking_dist = 1600;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_high ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
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 )
|
||||
|
||||
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
{
|
||||
wait level.zombie_tracking_wait;
|
||||
wait( level.zombie_tracking_wait );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else i = 0;
|
||||
while ( i < zombies.size )
|
||||
else
|
||||
{
|
||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking && isDefined( zombies[ i ].ignoreall ) && !zombies[ i ].ignoreall )
|
||||
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 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
wait level.zombie_tracking_wait;
|
||||
|
||||
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;
|
||||
@ -53,37 +53,32 @@ delete_zombie_noone_looking( how_close, how_high )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !isDefined( how_close ) )
|
||||
{
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1000;
|
||||
}
|
||||
if ( !isDefined( how_high ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( how_high ) )
|
||||
how_high = 500;
|
||||
}
|
||||
if ( isDefined( self.has_legs ) && !self.has_legs )
|
||||
{
|
||||
how_close *= 1,5;
|
||||
}
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a98[ _k98 ];
|
||||
if ( player.sessionstate == "spectator" )
|
||||
{
|
||||
}
|
||||
else if ( isDefined( player.laststand ) && player.laststand && isDefined( self.favoriteenemy ) && self.favoriteenemy == player )
|
||||
continue;
|
||||
|
||||
if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
|
||||
{
|
||||
if ( !self can_zombie_see_any_player() )
|
||||
{
|
||||
@ -92,57 +87,53 @@ delete_zombie_noone_looking( how_close, how_high )
|
||||
self thread escaped_zombies_cleanup();
|
||||
}
|
||||
}
|
||||
if ( isDefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != player )
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
|
||||
continue;
|
||||
}
|
||||
}
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
||||
{
|
||||
|
||||
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 ( 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 )
|
||||
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 maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
if ( isDefined( self.anchor ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.anchor ) )
|
||||
self.anchor delete();
|
||||
}
|
||||
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
@ -151,46 +142,40 @@ delete_zombie_noone_looking( how_close, how_high )
|
||||
player_can_see_me( player )
|
||||
{
|
||||
playerangles = player getplayerangles();
|
||||
playerforwardvec = anglesToForward( playerangles );
|
||||
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" );
|
||||
|
||||
playerfov = getdvarfloat( "cg_fov" );
|
||||
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||
|
||||
if ( banzaivsplayerfovbuffer <= 0 )
|
||||
{
|
||||
banzaivsplayerfovbuffer = 0,2;
|
||||
}
|
||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
||||
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;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( self can_be_deleted_from_maze_area() )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
can_be_deleted_from_start_area()
|
||||
@ -213,61 +198,56 @@ can_be_deleted_from_maze_area()
|
||||
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 ) )
|
||||
|
||||
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;
|
||||
}
|
||||
_k265 = getNextArrayKey( _a265, _k265 );
|
||||
}
|
||||
|
||||
if ( self_in_zone )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
escaped_zombies_cleanup_init()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.zombie_path_bad = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self waittill( "bad_path" );
|
||||
}
|
||||
|
||||
found_player = undefined;
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
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;
|
||||
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 )
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -277,30 +257,33 @@ escaped_zombies_cleanup()
|
||||
s_escape = self get_escape_position();
|
||||
self notify( "stop_find_flesh" );
|
||||
self notify( "zombie_acquire_enemy" );
|
||||
if ( isDefined( s_escape ) )
|
||||
|
||||
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;
|
||||
wait 0.1;
|
||||
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
||||
}
|
||||
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 ) )
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -310,6 +293,7 @@ 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() )
|
||||
@ -317,65 +301,51 @@ check_player_available()
|
||||
self notify( "reaquire_player" );
|
||||
return;
|
||||
}
|
||||
wait randomfloatrange( 0,2, 0,5 );
|
||||
|
||||
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 )
|
||||
|
||||
for ( i = 0; i < a_players.size; i++ )
|
||||
{
|
||||
if ( !is_player_valid( a_players[i] ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( is_true( a_players[ i ].is_in_ghost_zone ) )
|
||||
{
|
||||
i++;
|
||||
|
||||
if ( is_true( a_players[i].is_in_ghost_zone ) )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( findpath( self.origin, a_players[i].origin ) )
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
can_zombie_see_any_player()
|
||||
{
|
||||
a_players = get_players();
|
||||
i = 0;
|
||||
while ( i < a_players.size )
|
||||
|
||||
for ( i = 0; i < a_players.size; i++ )
|
||||
{
|
||||
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;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
get_adjacencies_to_zone( str_zone )
|
||||
@ -383,29 +353,23 @@ 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 )
|
||||
|
||||
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];
|
||||
}
|
||||
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 ];
|
||||
|
||||
foreach ( zone in a_zones )
|
||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
||||
_k479 = getNextArrayKey( _a479, _k479 );
|
||||
}
|
||||
|
||||
return a_dog_locations;
|
||||
}
|
||||
|
||||
@ -413,16 +377,17 @@ get_farthest_dog_location( a_dog_locations )
|
||||
{
|
||||
n_farthest_index = 0;
|
||||
n_distance_farthest = 0;
|
||||
i = 0;
|
||||
while ( i < a_dog_locations.size )
|
||||
|
||||
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;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return a_dog_locations[n_farthest_index];
|
||||
}
|
||||
|
@ -1,21 +1,20 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
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();
|
||||
@ -34,15 +33,15 @@ init_ee_ghost_piano_flags()
|
||||
wait_for_valid_damage()
|
||||
{
|
||||
self setcandamage( 1 );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "damage" );
|
||||
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" );
|
||||
}
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -54,31 +53,31 @@ is_ballistic_knife_variant( str_weapon )
|
||||
|
||||
set_flags_while_players_stand_in_trigger()
|
||||
{
|
||||
while ( 1 )
|
||||
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;
|
||||
}
|
||||
wait 0.25;
|
||||
|
||||
self ent_flag_clear( "ee_standing_behind_chalk_line" );
|
||||
}
|
||||
|
||||
#using_animtree("fxanim_props_dlc3");
|
||||
|
||||
player_piano_starts()
|
||||
{
|
||||
/#
|
||||
@ -88,7 +87,7 @@ player_piano_starts()
|
||||
level notify( "piano_play" );
|
||||
level setclientfield( "mansion_piano_play", 1 );
|
||||
level setclientfield( "saloon_piano_play", 1 );
|
||||
wait getanimlength( %fxanim_gp_piano_old_anim );
|
||||
wait( getanimlength( %fxanim_gp_piano_old_anim ) );
|
||||
/#
|
||||
iprintln( "player piano song done" );
|
||||
#/
|
||||
@ -99,7 +98,7 @@ player_piano_starts()
|
||||
|
||||
mansion_ghost_plays_piano()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
flag_wait( "player_piano_song_active" );
|
||||
e_ghost = spawn_and_animate_ghost_pianist();
|
||||
@ -108,6 +107,8 @@ mansion_ghost_plays_piano()
|
||||
}
|
||||
}
|
||||
|
||||
#using_animtree("zm_buried_ghost");
|
||||
|
||||
spawn_and_animate_ghost_pianist()
|
||||
{
|
||||
s_anim = getstruct( "ee_mansion_piano_anim_struct", "targetname" );
|
||||
@ -129,15 +130,19 @@ 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 )
|
||||
|
||||
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" );
|
||||
@ -148,24 +153,25 @@ player_can_use_ghost_piano_trigger( player )
|
||||
{
|
||||
player endon( "death_or_disconnect" );
|
||||
level endon( "ghost_piano_reward_unavailable" );
|
||||
|
||||
do
|
||||
self waittill( "trigger", user );
|
||||
if ( user != player && player.score < 10 && !player has_player_received_reward() )
|
||||
{
|
||||
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 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();
|
||||
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 thread maps\mp\zombies\_zm_powerups::disable_perk_before_power( free_perk );
|
||||
/#
|
||||
iprintln( "player got reward!!" );
|
||||
#/
|
||||
@ -189,34 +195,25 @@ delete_ghost_pianist()
|
||||
|
||||
devgui_support_ee()
|
||||
{
|
||||
while ( 1 )
|
||||
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" );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( str_notify == "ghost_piano_warp_to_bar" )
|
||||
{
|
||||
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 ) )
|
||||
{
|
||||
if ( !isdefined( str_key ) )
|
||||
str_key = "targetname";
|
||||
}
|
||||
|
||||
s_warp = getstruct( str_value, str_key );
|
||||
self setorigin( s_warp.origin );
|
||||
if ( isDefined( s_warp.angles ) )
|
||||
{
|
||||
|
||||
if ( isdefined( s_warp.angles ) )
|
||||
self setplayerangles( s_warp.angles );
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,12 @@
|
||||
#include maps/mp/zombies/_zm;
|
||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
||||
#include maps/mp/zm_buried;
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#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_zonemgr;
|
||||
#include maps\mp\zm_buried;
|
||||
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||
#include maps\mp\zombies\_zm;
|
||||
|
||||
main_start()
|
||||
{
|
||||
@ -16,6 +18,7 @@ main_start()
|
||||
level thread spawned_slide_prone_trigger();
|
||||
level thread spawned_life_triggers();
|
||||
onplayerconnect_callback( ::ffotd_player_threads );
|
||||
level thread reset_vulture_dvars_post_migrate();
|
||||
}
|
||||
|
||||
main_end()
|
||||
@ -25,6 +28,7 @@ main_end()
|
||||
level thread zgrief_mode_fix();
|
||||
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
|
||||
}
|
||||
|
||||
level.zombie_init_done = ::ffotd_zombie_init_done;
|
||||
level thread bar_spawner_fix();
|
||||
level thread maze_blocker_fix();
|
||||
@ -32,9 +36,29 @@ main_end()
|
||||
level thread player_respawn_fix();
|
||||
}
|
||||
|
||||
reset_vulture_dvars_post_migrate()
|
||||
{
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "host_migration_end" );
|
||||
|
||||
setdvarint( "zombies_perk_vulture_pickup_time", 12 );
|
||||
setdvarint( "zombies_perk_vulture_pickup_time_stink", 16 );
|
||||
setdvarint( "zombies_perk_vulture_drop_chance", 65 );
|
||||
setdvarint( "zombies_perk_vulture_ammo_chance", 33 );
|
||||
setdvarint( "zombies_perk_vulture_points_chance", 33 );
|
||||
setdvarint( "zombies_perk_vulture_stink_chance", 33 );
|
||||
setdvarint( "zombies_perk_vulture_drops_max", 20 );
|
||||
setdvarint( "zombies_perk_vulture_network_drops_max", 5 );
|
||||
setdvarint( "zombies_perk_vulture_network_time_frame", 250 );
|
||||
setdvarint( "zombies_perk_vulture_spawn_stink_zombie_cooldown", 12 );
|
||||
setdvarint( "zombies_perk_vulture_max_stink_zombies", 4 );
|
||||
}
|
||||
}
|
||||
|
||||
ffotd_zombie_init_done()
|
||||
{
|
||||
self maps/mp/zm_buried::zombie_init_done();
|
||||
self maps\mp\zm_buried::zombie_init_done();
|
||||
self thread jail_traversal_fix();
|
||||
}
|
||||
|
||||
@ -43,31 +67,31 @@ jail_traversal_fix()
|
||||
self endon( "death" );
|
||||
window_pos = ( -837, 496, 8 );
|
||||
fix_dist = 64;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
dist = distancesquared( self.origin, window_pos );
|
||||
|
||||
if ( dist < fix_dist )
|
||||
{
|
||||
node = self getnegotiationstartnode();
|
||||
if ( isDefined( node ) )
|
||||
|
||||
if ( isdefined( node ) )
|
||||
{
|
||||
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
|
||||
{
|
||||
self setphysparams( 25, 0, 72 );
|
||||
wait 1;
|
||||
|
||||
if ( is_true( self.has_legs ) )
|
||||
{
|
||||
self setphysparams( 15, 0, 72 );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self setphysparams( 15, 0, 24 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 0,25;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,91 +102,79 @@ ghost_round_override_init()
|
||||
width = 91;
|
||||
height = 290;
|
||||
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
||||
trig1.angles = vectorScale( ( 0, 0, 0 ), 69 );
|
||||
trig1.angles = vectorscale( ( 0, 1, 0 ), 69.0 );
|
||||
trig1.script_noteworthy = "ghost_round_override";
|
||||
}
|
||||
|
||||
zgrief_mode_fix()
|
||||
{
|
||||
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
|
||||
_a98 = speed_trigger;
|
||||
_k98 = getFirstArrayKey( _a98 );
|
||||
while ( isDefined( _k98 ) )
|
||||
|
||||
foreach ( trig in speed_trigger )
|
||||
{
|
||||
trig = _a98[ _k98 ];
|
||||
if ( trig.origin == ( -170,5, -328,25, 174 ) )
|
||||
if ( trig.origin == ( -170.5, -328.25, 174 ) )
|
||||
{
|
||||
trig.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
||||
if ( isDefined( trig.clip ) )
|
||||
{
|
||||
trig.clip.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
||||
trig.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
|
||||
|
||||
if ( isdefined( trig.clip ) )
|
||||
trig.clip.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
|
||||
|
||||
if ( isdefined( trig.machine ) )
|
||||
trig.machine.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
|
||||
}
|
||||
if ( isDefined( trig.machine ) )
|
||||
{
|
||||
trig.machine.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
||||
}
|
||||
}
|
||||
_k98 = getNextArrayKey( _a98, _k98 );
|
||||
}
|
||||
}
|
||||
|
||||
zgrief_respawn_override( revivee, return_struct )
|
||||
{
|
||||
players = get_players();
|
||||
spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype();
|
||||
spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
|
||||
grief_initial = getstructarray( "street_standard_player_spawns", "targetname" );
|
||||
_a119 = grief_initial;
|
||||
_k119 = getFirstArrayKey( _a119 );
|
||||
while ( isDefined( _k119 ) )
|
||||
|
||||
foreach ( struct in grief_initial )
|
||||
{
|
||||
struct = _a119[ _k119 ];
|
||||
if ( isDefined( struct.script_int ) && struct.script_int == 2000 )
|
||||
if ( isdefined( struct.script_int ) && struct.script_int == 2000 )
|
||||
{
|
||||
spawn_points[spawn_points.size] = struct;
|
||||
initial_point = struct;
|
||||
initial_point.locked = 0;
|
||||
}
|
||||
_k119 = getNextArrayKey( _a119, _k119 );
|
||||
}
|
||||
|
||||
closest_group = undefined;
|
||||
closest_distance = 100000000;
|
||||
backup_group = undefined;
|
||||
backup_distance = 100000000;
|
||||
|
||||
if ( spawn_points.size == 0 )
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self )
|
||||
if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < spawn_points.size )
|
||||
{
|
||||
if ( isDefined( spawn_points[ j ].script_int ) )
|
||||
for ( j = 0; j < spawn_points.size; j++ )
|
||||
{
|
||||
if ( isdefined( spawn_points[j].script_int ) )
|
||||
ideal_distance = spawn_points[j].script_int;
|
||||
}
|
||||
else
|
||||
{
|
||||
ideal_distance = 1000;
|
||||
}
|
||||
|
||||
if ( spawn_points[j].locked == 0 )
|
||||
{
|
||||
plyr_dist = distancesquared( players[i].origin, spawn_points[j].origin );
|
||||
if ( plyr_dist < ( ideal_distance * ideal_distance ) )
|
||||
|
||||
if ( plyr_dist < ideal_distance * ideal_distance )
|
||||
{
|
||||
if ( plyr_dist < closest_distance )
|
||||
{
|
||||
closest_distance = plyr_dist;
|
||||
closest_group = j;
|
||||
}
|
||||
j++;
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( plyr_dist < backup_distance )
|
||||
{
|
||||
backup_group = j;
|
||||
@ -170,45 +182,38 @@ zgrief_respawn_override( revivee, return_struct )
|
||||
}
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
if ( !isDefined( closest_group ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( closest_group ) )
|
||||
closest_group = backup_group;
|
||||
}
|
||||
if ( isDefined( closest_group ) )
|
||||
|
||||
if ( isdefined( closest_group ) )
|
||||
{
|
||||
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
||||
if ( isDefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
|
||||
spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
||||
|
||||
if ( isdefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
|
||||
{
|
||||
if ( isDefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
|
||||
{
|
||||
i++;
|
||||
if ( isdefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
return spawn_location;
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
while ( isDefined( initial_point ) )
|
||||
|
||||
if ( isdefined( initial_point ) )
|
||||
{
|
||||
k = 0;
|
||||
while ( k < spawn_points.size )
|
||||
for ( k = 0; k < spawn_points.size; k++ )
|
||||
{
|
||||
if ( spawn_points[k] == initial_point )
|
||||
{
|
||||
closest_group = k;
|
||||
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
||||
spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
||||
return spawn_location;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@ -225,7 +230,7 @@ spawned_slide_prone_trigger()
|
||||
|
||||
spawned_slide_push_trigger()
|
||||
{
|
||||
origin = ( -1416,5, -324, 428,5 );
|
||||
origin = ( -1416.5, -324, 428.5 );
|
||||
length = 111;
|
||||
width = 394;
|
||||
height = 189;
|
||||
@ -233,39 +238,38 @@ spawned_slide_push_trigger()
|
||||
trig1.angles = ( 0, 0, 0 );
|
||||
trig1.targetname = "push_from_prone";
|
||||
trig1.push_player_towards_point = ( -1336, -320, 360 );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
trig1 waittill( "trigger", who );
|
||||
|
||||
if ( who getstance() == "prone" && isplayer( who ) )
|
||||
{
|
||||
who setstance( "crouch" );
|
||||
}
|
||||
|
||||
trig1 thread slide_push_think( who );
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
slide_push_think( who )
|
||||
{
|
||||
whopos = ( 0, 0, 0 );
|
||||
|
||||
while ( who istouching( self ) )
|
||||
{
|
||||
if ( who.origin == whopos )
|
||||
{
|
||||
who setvelocity( self get_push_vector() );
|
||||
}
|
||||
|
||||
whopos = who.origin;
|
||||
wait 2;
|
||||
wait 2.0;
|
||||
}
|
||||
}
|
||||
|
||||
slide_push_in_trigger( player )
|
||||
{
|
||||
if ( !player is_player_using_thumbstick() )
|
||||
{
|
||||
player setvelocity( self get_push_vector() );
|
||||
}
|
||||
}
|
||||
|
||||
spawned_life_triggers()
|
||||
{
|
||||
@ -294,41 +298,42 @@ spawned_collision_ffotd()
|
||||
precachemodel( "p6_zm_bu_rock_strata_04" );
|
||||
precachemodel( "p6_zm_bu_wood_planks_106x171" );
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen )
|
||||
|
||||
if ( !( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) )
|
||||
{
|
||||
collision1 = spawn( "script_model", ( 3731,5, 736, 6,5 ) );
|
||||
collision1 = spawn( "script_model", ( 3731.5, 736, 6.5 ) );
|
||||
collision1 setmodel( "collision_geo_64x64x128_slick" );
|
||||
collision1.angles = ( 4,54625, 313,41, -4,78954 );
|
||||
collision1.angles = ( 4.54625, 313.41, -4.78954 );
|
||||
collision1 ghost();
|
||||
collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
|
||||
collision2 setmodel( "collision_geo_256x256x10_standard" );
|
||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 3,80002 );
|
||||
collision2.angles = vectorscale( ( 0, 0, -1 ), 3.80002 );
|
||||
collision2 ghost();
|
||||
collision3 = spawn( "script_model", ( 641, 545, -1,21359 ) );
|
||||
collision3 = spawn( "script_model", ( 641, 545, -1.21359 ) );
|
||||
collision3 setmodel( "collision_geo_64x64x128_slick" );
|
||||
collision3.angles = ( 1,27355, 320,806, -5,38137 );
|
||||
collision3.angles = ( 1.27355, 320.806, -5.38137 );
|
||||
collision3 ghost();
|
||||
saloon1 = spawn( "script_model", ( 1032,22, -1744,09, 309 ) );
|
||||
saloon1 = spawn( "script_model", ( 1032.22, -1744.09, 309 ) );
|
||||
saloon1 setmodel( "collision_geo_64x64x64_standard" );
|
||||
saloon1.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
||||
saloon1.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
|
||||
saloon1 ghost();
|
||||
saloon2 = spawn( "script_model", ( 1005,78, -1766,91, 309 ) );
|
||||
saloon2 = spawn( "script_model", ( 1005.78, -1766.91, 309 ) );
|
||||
saloon2 setmodel( "collision_geo_64x64x64_standard" );
|
||||
saloon2.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
||||
saloon2.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
|
||||
saloon2 ghost();
|
||||
gs1 = spawn( "script_model", ( 118,001, -537,037, 236 ) );
|
||||
gs1 = spawn( "script_model", ( 118.001, -537.037, 236 ) );
|
||||
gs1 setmodel( "collision_geo_64x64x64_standard" );
|
||||
gs1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
gs1.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||
gs1 ghost();
|
||||
gs1 thread delete_upon_flag( "general_store_porch_door1" );
|
||||
gs2 = spawn( "script_model", ( 117,999, -571,963, 236 ) );
|
||||
gs2 = spawn( "script_model", ( 117.999, -571.963, 236 ) );
|
||||
gs2 setmodel( "collision_geo_64x64x64_standard" );
|
||||
gs2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
gs2.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||
gs2 ghost();
|
||||
gs2 thread delete_upon_flag( "general_store_porch_door1" );
|
||||
collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
|
||||
collision4 setmodel( "collision_geo_128x128x10_slick" );
|
||||
collision4.angles = ( 280,6, 270, 86,6 );
|
||||
collision4.angles = ( 280.6, 270, 86.6 );
|
||||
collision4 ghost();
|
||||
cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
|
||||
cw1 setmodel( "collision_geo_128x128x128_standard" );
|
||||
@ -336,7 +341,7 @@ spawned_collision_ffotd()
|
||||
cw1 ghost();
|
||||
rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
|
||||
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
||||
rock1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
rock1.angles = vectorscale( ( 0, 0, 1 ), 90.0 );
|
||||
st1 = spawn( "script_model", ( -736, -2, 25 ) );
|
||||
st1 setmodel( "collision_geo_128x128x10_standard" );
|
||||
st1.angles = ( 270, 45, 0 );
|
||||
@ -351,7 +356,7 @@ spawned_collision_ffotd()
|
||||
ml2 ghost();
|
||||
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
|
||||
mr1 setmodel( "collision_geo_256x256x10_standard" );
|
||||
mr1.angles = ( 0, 13,8, -90 );
|
||||
mr1.angles = ( 0, 13.8, -90 );
|
||||
mr1 ghost();
|
||||
th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
|
||||
th1 setmodel( "collision_geo_128x128x128_standard" );
|
||||
@ -363,11 +368,11 @@ spawned_collision_ffotd()
|
||||
th1a ghost();
|
||||
th2 = spawn( "script_model", ( -544, 510, 286 ) );
|
||||
th2 setmodel( "collision_geo_256x256x10_standard" );
|
||||
th2.angles = ( 0, 7,2, -7,8 );
|
||||
th2.angles = ( 0, 7.2, -7.8 );
|
||||
th2 ghost();
|
||||
th2a = spawn( "script_model", ( -296,95, 537,996, 312,557 ) );
|
||||
th2a = spawn( "script_model", ( -296.95, 537.996, 312.557 ) );
|
||||
th2a setmodel( "collision_geo_256x256x10_standard" );
|
||||
th2a.angles = ( 347,355, 6,47392, -7,41809 );
|
||||
th2a.angles = ( 347.355, 6.47392, -7.41809 );
|
||||
th2a ghost();
|
||||
th3 = spawn( "script_model", ( 864, 872, 420 ) );
|
||||
th3 setmodel( "collision_geo_256x256x256_standard" );
|
||||
@ -375,41 +380,41 @@ spawned_collision_ffotd()
|
||||
th3 ghost();
|
||||
th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
|
||||
th4 setmodel( "collision_geo_256x256x10_standard" );
|
||||
th4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
th4.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
|
||||
th4 ghost();
|
||||
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
|
||||
ch1 setmodel( "collision_geo_256x256x10_standard" );
|
||||
ch1.angles = ( 270, 340, 0,32 );
|
||||
ch1.angles = ( 270, 340, 0.32 );
|
||||
ch1 ghost();
|
||||
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
|
||||
ch2 setmodel( "collision_geo_256x256x10_standard" );
|
||||
ch2.angles = ( 270, 340, 0,32 );
|
||||
ch2.angles = ( 270, 340, 0.32 );
|
||||
ch2 ghost();
|
||||
rock1 = spawn( "script_model", ( 3259,54, -189,38, 146,23 ) );
|
||||
rock1 = spawn( "script_model", ( 3259.54, -189.38, 146.23 ) );
|
||||
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
||||
rock1.angles = ( 7,87264, 94,015, 4,57899 );
|
||||
rock2 = spawn( "script_model", ( 3351,97, -254,58, 95 ) );
|
||||
rock1.angles = ( 7.87264, 94.015, 4.57899 );
|
||||
rock2 = spawn( "script_model", ( 3351.97, -254.58, 95 ) );
|
||||
rock2 setmodel( "p6_zm_bu_rock_strata_01" );
|
||||
rock2.angles = vectorScale( ( 0, 0, 0 ), 169,1 );
|
||||
rock2.angles = vectorscale( ( 0, 1, 0 ), 169.1 );
|
||||
yt1 = spawn( "script_model", ( 671, -1412, 214 ) );
|
||||
yt1 setmodel( "collision_geo_64x64x10_slick" );
|
||||
yt1.angles = ( 62,8, 315, 0 );
|
||||
yt1.angles = ( 62.8, 315, 0 );
|
||||
yt1 ghost();
|
||||
yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
|
||||
yt2 setmodel( "collision_geo_64x64x10_slick" );
|
||||
yt2.angles = ( 62,8, 315, 0 );
|
||||
yt2.angles = ( 62.8, 315, 0 );
|
||||
yt2 ghost();
|
||||
stb1 = spawn( "script_model", ( -807, 59, 127 ) );
|
||||
stb1 setmodel( "collision_geo_64x64x10_standard" );
|
||||
stb1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
stb1.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||
stb1 ghost();
|
||||
stb2 = spawn( "script_model", ( -807, 59, 191 ) );
|
||||
stb2 setmodel( "collision_geo_64x64x10_standard" );
|
||||
stb2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
stb2.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||
stb2 ghost();
|
||||
stb3 = spawn( "script_model", ( -861, 59, 31 ) );
|
||||
stb3 setmodel( "collision_geo_128x128x10_standard" );
|
||||
stb3.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
||||
stb3.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||
stb3 ghost();
|
||||
j162 = spawn( "script_model", ( 912, -936, 214 ) );
|
||||
j162 setmodel( "collision_geo_128x128x10_standard" );
|
||||
@ -417,25 +422,33 @@ spawned_collision_ffotd()
|
||||
j162 ghost();
|
||||
j156 = spawn( "script_model", ( 434, 1213, 184 ) );
|
||||
j156 setmodel( "collision_geo_128x128x10_standard" );
|
||||
j156.angles = vectorScale( ( 0, 0, 0 ), 273 );
|
||||
j156.angles = vectorscale( ( 1, 0, 0 ), 273.0 );
|
||||
j156 ghost();
|
||||
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
|
||||
j163_1 setmodel( "collision_geo_128x128x10_slick" );
|
||||
j163_1.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
j163_1.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
|
||||
j163_1 ghost();
|
||||
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
|
||||
j163_2 setmodel( "collision_geo_128x128x10_slick" );
|
||||
j163_2.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
j163_2.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
|
||||
j163_2 ghost();
|
||||
j125_1 = spawn( "script_model", ( 2443,65, 1013,54, 236,213 ) );
|
||||
j125_1 = spawn( "script_model", ( 2443.65, 1013.54, 236.213 ) );
|
||||
j125_1 setmodel( "p6_zm_bu_rock_strata_04" );
|
||||
j125_1.angles = ( 13,345, 103,42, -13,4657 );
|
||||
j125_3 = spawn( "script_model", ( 2448,7, 852,791, 272,051 ) );
|
||||
j125_1.angles = ( 13.345, 103.42, -13.4657 );
|
||||
j125_3 = spawn( "script_model", ( 2448.7, 852.791, 272.051 ) );
|
||||
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
||||
j125_3.angles = ( 0, 270, 19,4 );
|
||||
j125_4 = spawn( "script_model", ( 2313,21, 872,54, 241,01 ) );
|
||||
j125_3.angles = ( 0, 270, 19.4 );
|
||||
j125_4 = spawn( "script_model", ( 2313.21, 872.54, 241.01 ) );
|
||||
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
||||
j125_4.angles = ( 0, 0, 0 );
|
||||
e72913 = spawn( "script_model", ( -862, -764, 207 ) );
|
||||
e72913 setmodel( "collision_geo_256x256x10_standard" );
|
||||
e72913.angles = ( 6.2, 0, -90 );
|
||||
e72913 ghost();
|
||||
e2157 = spawn( "script_model", ( 432, 648, 247 ) );
|
||||
e2157 setmodel( "collision_geo_128x128x10_standard" );
|
||||
e2157.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
|
||||
e2157 ghost();
|
||||
}
|
||||
}
|
||||
|
||||
@ -461,7 +474,7 @@ ghost_mansion_to_maze_push_trigger_left()
|
||||
width = 8;
|
||||
height = 64;
|
||||
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
||||
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
|
||||
trig1.angles = vectorscale( ( 0, 1, 0 ), 325.6 );
|
||||
trig1.script_noteworthy = "push_trigger";
|
||||
trig1.push_player_towards_point = ( 2666, 685, 183 );
|
||||
}
|
||||
@ -473,7 +486,7 @@ ghost_mansion_to_maze_push_trigger_right()
|
||||
width = 16;
|
||||
height = 64;
|
||||
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
||||
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
|
||||
trig1.angles = vectorscale( ( 0, 1, 0 ), 325.6 );
|
||||
trig1.script_noteworthy = "push_trigger";
|
||||
trig1.push_player_towards_point = ( 2686, 440, 174 );
|
||||
}
|
||||
@ -493,26 +506,25 @@ ghost_mansion_from_maze_push_trigger()
|
||||
push_players_standing_in_trigger_volumes()
|
||||
{
|
||||
/#
|
||||
assert( isDefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" );
|
||||
assert( isdefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" );
|
||||
#/
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
if ( !player is_player_using_thumbstick() )
|
||||
{
|
||||
player setvelocity( self get_push_vector() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is_player_using_thumbstick()
|
||||
{
|
||||
b_using_thumbstick = 1;
|
||||
v_thumbstick = self getnormalizedmovement();
|
||||
if ( length( v_thumbstick ) < 0,3 )
|
||||
{
|
||||
|
||||
if ( length( v_thumbstick ) < 0.3 )
|
||||
b_using_thumbstick = 0;
|
||||
}
|
||||
|
||||
return b_using_thumbstick;
|
||||
}
|
||||
|
||||
@ -523,64 +535,50 @@ get_push_vector()
|
||||
|
||||
bar_spawner_fix()
|
||||
{
|
||||
bad_pos = ( 459,5, -1984, 84 );
|
||||
bad_pos = ( 459.5, -1984, 84 );
|
||||
dist_fix = 64;
|
||||
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
|
||||
_a586 = bar_spawners;
|
||||
_k586 = getFirstArrayKey( _a586 );
|
||||
while ( isDefined( _k586 ) )
|
||||
|
||||
foreach ( spawner in bar_spawners )
|
||||
{
|
||||
spawner = _a586[ _k586 ];
|
||||
if ( isDefined( spawner.script_string ) && spawner.script_string == "bar2" )
|
||||
if ( isdefined( spawner.script_string ) && spawner.script_string == "bar2" )
|
||||
{
|
||||
dist = distancesquared( spawner.origin, bad_pos );
|
||||
|
||||
if ( dist < dist_fix )
|
||||
{
|
||||
spawner.origin = ( 459,5, -2020, 84 );
|
||||
spawner.origin = ( 459.5, -2020, 84 );
|
||||
}
|
||||
}
|
||||
_k586 = getNextArrayKey( _a586, _k586 );
|
||||
}
|
||||
}
|
||||
|
||||
player_respawn_fix()
|
||||
{
|
||||
maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
|
||||
_a602 = maze_spawners;
|
||||
_k602 = getFirstArrayKey( _a602 );
|
||||
while ( isDefined( _k602 ) )
|
||||
|
||||
foreach ( spawner in maze_spawners )
|
||||
{
|
||||
spawner = _a602[ _k602 ];
|
||||
if ( spawner.origin == ( 3469, 1026, 20 ) )
|
||||
{
|
||||
spawner.origin = ( 3509, 1032, 76 );
|
||||
}
|
||||
_k602 = getNextArrayKey( _a602, _k602 );
|
||||
}
|
||||
}
|
||||
|
||||
door_clip_fix()
|
||||
{
|
||||
bank1 = getentarray( "pf728_auto2510", "targetname" );
|
||||
i = 0;
|
||||
while ( i < bank1.size )
|
||||
{
|
||||
if ( isDefined( bank1[ i ].script_noteworthy ) && bank1[ i ].script_noteworthy == "clip" )
|
||||
|
||||
for ( i = 0; i < bank1.size; i++ )
|
||||
{
|
||||
if ( isdefined( bank1[i].script_noteworthy ) && bank1[i].script_noteworthy == "clip" )
|
||||
bank1[i] delete();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
bank2 = getentarray( "pf728_auto2507", "targetname" );
|
||||
i = 0;
|
||||
while ( i < bank2.size )
|
||||
{
|
||||
if ( isDefined( bank2[ i ].script_noteworthy ) && bank2[ i ].script_noteworthy == "clip" )
|
||||
|
||||
for ( i = 0; i < bank2.size; i++ )
|
||||
{
|
||||
if ( isdefined( bank2[i].script_noteworthy ) && bank2[i].script_noteworthy == "clip" )
|
||||
bank2[i] delete();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
maze_blocker_fix()
|
||||
@ -589,30 +587,31 @@ maze_blocker_fix()
|
||||
node_target_org = ( 4734, 1198, 32 );
|
||||
blocker_node = getnearestnode( node_org );
|
||||
blocker_node_target = getnearestnode( node_target_org );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "zm_buried_maze_changed" );
|
||||
|
||||
found = 0;
|
||||
perm_list = level._maze._perms[level._maze._cur_perm];
|
||||
_a648 = perm_list;
|
||||
_k648 = getFirstArrayKey( _a648 );
|
||||
while ( isDefined( _k648 ) )
|
||||
|
||||
foreach ( blocker in perm_list )
|
||||
{
|
||||
blocker = _a648[ _k648 ];
|
||||
if ( blocker == "blocker_10" )
|
||||
{
|
||||
found = 1;
|
||||
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
|
||||
|
||||
if ( isdefined( blocker_node ) && isdefined( blocker_node_target ) )
|
||||
{
|
||||
unlink_nodes( blocker_node, blocker_node_target, 0 );
|
||||
unlink_nodes( blocker_node_target, blocker_node, 0 );
|
||||
}
|
||||
}
|
||||
_k648 = getNextArrayKey( _a648, _k648 );
|
||||
}
|
||||
|
||||
if ( !found )
|
||||
{
|
||||
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
|
||||
if ( isdefined( blocker_node ) && isdefined( blocker_node_target ) )
|
||||
{
|
||||
link_nodes( blocker_node, blocker_node_target, 1 );
|
||||
link_nodes( blocker_node_target, blocker_node, 1 );
|
||||
@ -624,15 +623,15 @@ maze_blocker_fix()
|
||||
time_bomb_takeaway()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "new_tactical_grenade", new_weapon );
|
||||
if ( isDefined( new_weapon ) && new_weapon != "time_bomb_zm" && self hasweapon( "time_bomb_detonator_zm" ) )
|
||||
{
|
||||
|
||||
if ( ( !isdefined( new_weapon ) || new_weapon != "time_bomb_zm" ) && self hasweapon( "time_bomb_detonator_zm" ) )
|
||||
self takeweapon( "time_bomb_detonator_zm" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ffotd_player_threads()
|
||||
{
|
||||
@ -687,18 +686,20 @@ church_fence_push_trigger()
|
||||
dtp_push()
|
||||
{
|
||||
pos = ( 0, 0, 0 );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
if ( pos == player.origin )
|
||||
{
|
||||
if ( player getstance() == "prone" )
|
||||
{
|
||||
player setstance( "crouch" );
|
||||
}
|
||||
|
||||
player setvelocity( self get_push_vector() );
|
||||
}
|
||||
|
||||
pos = player.origin;
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -42,14 +44,16 @@ 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 ) )
|
||||
|
||||
if ( isdefined( s_courtyard_fountain ) )
|
||||
{
|
||||
sound_offset = vectorScale( ( 0, 0, 1 ), 100 );
|
||||
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 );
|
||||
sound_ent playloopsound( "zmb_fountain_spray", 0.2 );
|
||||
}
|
||||
|
||||
show_maze_fountain_water();
|
||||
fountain_debug_print( "courtyard_fountain_broken" );
|
||||
}
|
||||
@ -57,12 +61,12 @@ sloth_fountain_think()
|
||||
set_flag_on_notify( notifystr, strflag )
|
||||
{
|
||||
if ( notifystr != "death" )
|
||||
{
|
||||
self endon( "death" );
|
||||
}
|
||||
|
||||
if ( !level.flag[strflag] )
|
||||
{
|
||||
self waittill( notifystr );
|
||||
|
||||
flag_set( strflag );
|
||||
}
|
||||
}
|
||||
@ -82,7 +86,7 @@ hide_maze_fountain_water()
|
||||
t_water enablelinkto();
|
||||
m_water = getent( "maze_fountain_water", "targetname" );
|
||||
t_water linkto( m_water );
|
||||
m_water movez( -475, 0,05 );
|
||||
m_water movez( -475, 0.05 );
|
||||
}
|
||||
|
||||
show_maze_fountain_water()
|
||||
@ -99,18 +103,14 @@ wait_for_maze_fountain_to_be_destroyed()
|
||||
level endon( "_destroy_maze_fountain" );
|
||||
#/
|
||||
t_damage = getent( "maze_fountain_trigger", "targetname" );
|
||||
health = 1000;
|
||||
while ( health > 0 )
|
||||
|
||||
for ( health = 1000; health > 0; health -= damage )
|
||||
{
|
||||
t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||
if ( damage < 50 )
|
||||
{
|
||||
|
||||
asm_cond( damage < 50, loc_E9C );
|
||||
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;
|
||||
}
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,10 +118,10 @@ destroy_maze_fountain()
|
||||
{
|
||||
s_fountain = getstruct( "maze_fountain_struct", "targetname" );
|
||||
level setclientfield( "maze_fountain_start", 1 );
|
||||
if ( isDefined( s_fountain ) )
|
||||
{
|
||||
|
||||
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" );
|
||||
@ -130,24 +130,22 @@ destroy_maze_fountain()
|
||||
fountain_transport_think()
|
||||
{
|
||||
t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
t_transporter waittill( "trigger", player );
|
||||
if ( !isDefined( player.is_in_fountain_transport_trigger ) || !player.is_in_fountain_transport_trigger )
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delay_transport_check()
|
||||
{
|
||||
@ -161,45 +159,50 @@ transport_player_to_start_zone()
|
||||
{
|
||||
self endon( "death_or_disconnect" );
|
||||
fountain_debug_print( "transport player!" );
|
||||
if ( !isDefined( level._fountain_transporter ) )
|
||||
|
||||
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;
|
||||
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 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();
|
||||
@ -215,16 +218,16 @@ 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 fadeovertime( 0.2 );
|
||||
self.hud_transporter_flash.alpha = 1;
|
||||
wait 0,2;
|
||||
wait 0.2;
|
||||
}
|
||||
|
||||
flash_screen_fade_out()
|
||||
{
|
||||
self.hud_transporter_flash fadeovertime( 0,2 );
|
||||
self.hud_transporter_flash fadeovertime( 0.2 );
|
||||
self.hud_transporter_flash.alpha = 0;
|
||||
wait 0,2;
|
||||
wait 0.2;
|
||||
self.hud_transporter_flash destroy();
|
||||
self.hud_transporter_flash = undefined;
|
||||
}
|
||||
@ -246,28 +249,19 @@ create_client_hud_elem()
|
||||
|
||||
debug_warp_player_to_fountain()
|
||||
{
|
||||
while ( 1 )
|
||||
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" )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
foreach ( player in get_players() )
|
||||
{
|
||||
player = _a332[ _k332 ];
|
||||
_warp_player_to_maze_fountain( player, str_warp_point );
|
||||
wait 0,25;
|
||||
_k332 = getNextArrayKey( _a332, _k332 );
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -276,12 +270,10 @@ _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 );
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
@ -289,9 +281,7 @@ _warp_player_to_maze_fountain( player, str_teleport_point )
|
||||
fountain_debug_print( str_text )
|
||||
{
|
||||
/#
|
||||
if ( getDvarInt( #"AE3F04F6" ) > 0 )
|
||||
{
|
||||
if ( getdvarint( _hash_AE3F04F6 ) > 0 )
|
||||
iprintlnbold( str_text );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,14 @@
|
||||
#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();
|
||||
maps\mp\createfx\zm_buried_fx::main();
|
||||
}
|
||||
|
||||
precache_scripted_fx()
|
||||
@ -20,19 +21,22 @@ precache_scripted_fx()
|
||||
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" );
|
||||
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 )
|
||||
|
||||
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" );
|
||||
@ -107,6 +111,8 @@ precache_createfx_fx()
|
||||
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;
|
||||
|
@ -1,185 +1,186 @@
|
||||
//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 );
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
deletebuyabledebris( justtriggers ) //checked changed to match cerberus output
|
||||
deletebuyabledebris( justtriggers )
|
||||
{
|
||||
debris_trigs = getentarray( "zombie_debris", "targetname" );
|
||||
while ( !is_true( justtriggers ) )
|
||||
|
||||
if ( !is_true( justtriggers ) )
|
||||
{
|
||||
foreach ( trig in debris_trigs )
|
||||
{
|
||||
if ( isDefined( trig.script_flag ) )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
if ( !is_true( justtriggers ) )
|
||||
{
|
||||
foreach ( trig in sloth_trigs )
|
||||
{
|
||||
if ( isDefined( trig.script_flag ) && level flag_exists( trig.script_flag ) )
|
||||
{
|
||||
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 ) )
|
||||
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
|
||||
{
|
||||
if ( !isDefined( origin ) )
|
||||
spawnmapcollision( collision_model, origin )
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
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 )
|
||||
level thread maps\mp\zombies\_zm_zonemgr::enable_zone( zone );
|
||||
|
||||
foreach ( zoneindex, zone in level.zones )
|
||||
{
|
||||
should_disable = 1;
|
||||
for ( i = 0; i > zones.size; i++ )
|
||||
{
|
||||
if ( zoneindex == i )
|
||||
|
||||
foreach ( cleared_zone in zones )
|
||||
{
|
||||
if ( zoneindex == cleared_zone )
|
||||
should_disable = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_true( should_disable ) )
|
||||
{
|
||||
zones[ i ].is_enabled = 0;
|
||||
zones[ i ].is_spawning_allowed = 0;
|
||||
zone.is_enabled = 0;
|
||||
zone.is_spawning_allowed = 0;
|
||||
}
|
||||
zoneindex++;
|
||||
}
|
||||
}
|
||||
|
||||
remove_adjacent_zone( main_zone, adjacent_zone ) //checked changed to match cerberus output
|
||||
{
|
||||
if ( isDefined( level.zones[ main_zone ].adjacent_zones ) && isDefined( level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] ) )
|
||||
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 ] ) )
|
||||
{
|
||||
|
||||
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;
|
||||
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_location ) && wallbuy.script_location == location )
|
||||
{
|
||||
if ( !isDefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) )
|
||||
if ( !isdefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) )
|
||||
{
|
||||
maps/mp/zombies/_zm_weapons::add_dynamic_wallbuy( weaponname, wallbuy.targetname, 1 );
|
||||
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.equipname == buildable )
|
||||
{
|
||||
if ( isDefined( buildable ) || stub.persistent != 3 )
|
||||
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 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;
|
||||
@ -188,54 +189,55 @@ buildbuildable( buildable ) //checked changed to match cerberus output see compi
|
||||
}
|
||||
}
|
||||
|
||||
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 );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger ) )
|
||||
trigger delete();
|
||||
}
|
||||
|
||||
master_switch = getent( "elec_switch", "targetname" );
|
||||
if ( isDefined( master_switch ) )
|
||||
|
||||
if ( isdefined( master_switch ) )
|
||||
{
|
||||
master_switch notsolid();
|
||||
|
||||
if ( is_true( on ) )
|
||||
{
|
||||
master_switch rotateroll( -90, 0.3 );
|
||||
|
@ -1,31 +1,33 @@
|
||||
#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" );
|
||||
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" );
|
||||
@ -39,15 +41,15 @@ street_treasure_chest_init() //checked matches cerberus output
|
||||
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" );
|
||||
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" );
|
||||
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" );
|
||||
@ -71,20 +73,20 @@ main() //checked matches cerberus output
|
||||
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 ) )
|
||||
|
||||
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" );
|
||||
@ -100,7 +102,7 @@ builddynamicwallbuys() //checked matches cerberus output
|
||||
builddynamicwallbuy( "candyshop", "870mcs_zm" );
|
||||
}
|
||||
|
||||
buildbuildables() //checked matches cerberus output
|
||||
buildbuildables()
|
||||
{
|
||||
buildbuildable( "springpad_zm" );
|
||||
buildbuildable( "subwoofer_zm" );
|
||||
|
@ -1,14 +1,16 @@
|
||||
#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 );
|
||||
}
|
||||
|
||||
#using_animtree("zm_buried_props");
|
||||
|
||||
init_jail_anims()
|
||||
{
|
||||
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
|
||||
@ -35,15 +37,13 @@ init_jail()
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( level.cell_door.clip ) )
|
||||
{
|
||||
level.cell_door.clip notsolid();
|
||||
level.cell_door.clip connectpaths();
|
||||
@ -54,7 +54,8 @@ 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 ) )
|
||||
|
||||
if ( isdefined( level.cell_door.clip ) )
|
||||
{
|
||||
level.cell_door.clip solid();
|
||||
level.cell_door.clip disconnectpaths();
|
||||
|
@ -1,30 +1,30 @@
|
||||
//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] );
|
||||
}
|
||||
}
|
||||
|
||||
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++ )
|
||||
{
|
||||
@ -36,77 +36,78 @@ maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate ) //checked ch
|
||||
}
|
||||
}
|
||||
|
||||
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" );
|
||||
}
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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 = 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;
|
||||
}
|
||||
|
||||
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++ )
|
||||
{
|
||||
@ -114,34 +115,31 @@ get_free_blocker_model_from_pool() //checked changed to match cerberus output
|
||||
{
|
||||
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." );
|
||||
#/
|
||||
*/
|
||||
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.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;
|
||||
}
|
||||
|
||||
init() //checked matches cerberus output
|
||||
init()
|
||||
{
|
||||
level._maze = spawnstruct();
|
||||
level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" );
|
||||
@ -155,78 +153,80 @@ init() //checked matches cerberus output
|
||||
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 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 ) )
|
||||
|
||||
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.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 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] )
|
||||
@ -236,207 +236,201 @@ maze_do_perm_change() //checked changed to match cerberus output
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
maze_debug_print( str ) //checked matches cerberus output could not find dvar
|
||||
maze_debug_print( str )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
if ( getDvar( #"55B04A98" ) != "" )
|
||||
{
|
||||
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;
|
||||
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 ) )
|
||||
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;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
maze_debug_print( "Maze mutating." );
|
||||
return 1;
|
||||
}
|
||||
|
||||
maze_think() //checked matches cerberus output
|
||||
maze_debug_print( "Maze mutating." );
|
||||
return true;
|
||||
}
|
||||
|
||||
maze_think()
|
||||
{
|
||||
wait 0.1;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( maze_can_change() )
|
||||
{
|
||||
maze_do_perm_change();
|
||||
level notify( "zm_buried_maze_changed" );
|
||||
}
|
||||
wait 10;
|
||||
|
||||
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" );
|
||||
}
|
||||
|
||||
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;
|
||||
/*
|
||||
/#
|
||||
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 )
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( randomint( 100 ) > 75 )
|
||||
{
|
||||
favoritespots[favoritespots.size] = close_spot;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( isDefined( favoritespots ) && favoritespots.size >= 2 )
|
||||
{
|
||||
|
||||
if ( isdefined( favoritespots ) && favoritespots.size >= 2 )
|
||||
spot = random( favoritespots );
|
||||
}
|
||||
else if ( isDefined( closest_spots ) && closest_spots.size > 0 )
|
||||
{
|
||||
else if ( isdefined( closest_spots ) && closest_spots.size > 0 )
|
||||
spot = random( closest_spots );
|
||||
}
|
||||
}
|
||||
if ( !isDefined( spot ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( spot ) )
|
||||
spot = random( spots );
|
||||
}
|
||||
|
||||
self.spawn_point = spot;
|
||||
if ( isDefined( spot.target ) )
|
||||
{
|
||||
|
||||
if ( isdefined( spot.target ) )
|
||||
self.target = spot.target;
|
||||
}
|
||||
if ( isDefined( spot.zone_name ) )
|
||||
{
|
||||
|
||||
if ( isdefined( spot.zone_name ) )
|
||||
self.zone_name = spot.zone_name;
|
||||
}
|
||||
if ( isDefined( spot.script_parameters ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( target_org ) )
|
||||
{
|
||||
anim_ang = vectorToAngles( target_org - self.origin );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
|
||||
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" );
|
||||
@ -445,62 +439,64 @@ maze_do_zombie_rise( spot ) //checked changed to match cerberus output
|
||||
self notify( "risen", spot.script_string );
|
||||
}
|
||||
|
||||
maze_achievement_watcher() //checked matches cerberus output
|
||||
maze_achievement_watcher()
|
||||
{
|
||||
while ( 1 )
|
||||
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();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
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 );
|
||||
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 ( 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" );
|
||||
#/
|
||||
*/
|
||||
player notify( "player_stayed_in_maze_for_entire_high_level_round" );
|
||||
player notify( "_maze_achievement_think_done" );
|
||||
}
|
||||
@ -508,24 +504,21 @@ check_maze_achievement_threads() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
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" );
|
||||
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;
|
||||
wait( nwaittime );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -11,19 +13,23 @@ electric_switch()
|
||||
master_switch notsolid();
|
||||
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
|
||||
trig setvisibletoall();
|
||||
|
||||
trig waittill( "trigger", user );
|
||||
|
||||
trig setinvisibletoall();
|
||||
master_switch rotateroll( -90, 0,3 );
|
||||
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();
|
||||
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 ) );
|
||||
|
||||
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" );
|
||||
@ -33,5 +39,5 @@ electric_switch()
|
||||
|
||||
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
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -21,6 +23,7 @@ init_stage()
|
||||
stage_vo()
|
||||
{
|
||||
level waittill( "start_of_round" );
|
||||
|
||||
level thread stage_vo_watch_underground();
|
||||
wait 5;
|
||||
maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
|
||||
@ -30,67 +33,79 @@ stage_vo()
|
||||
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;
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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 ) )
|
||||
|
||||
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 ) )
|
||||
|
||||
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 ) )
|
||||
|
||||
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();
|
||||
@ -105,13 +120,13 @@ stage_vo_nag()
|
||||
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 )
|
||||
|
||||
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 );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,17 +137,27 @@ stage_vo_watch_guillotine()
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -143,25 +168,26 @@ stage_vo_watch_gallows()
|
||||
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 )
|
||||
|
||||
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();
|
||||
i++;
|
||||
}
|
||||
|
||||
m_maxis_vo_spot delete();
|
||||
}
|
||||
|
||||
@ -205,4 +231,5 @@ wait_for_richtofen_tower()
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -34,6 +36,7 @@ stage_logic()
|
||||
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 );
|
||||
@ -41,15 +44,16 @@ stage_logic()
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
stage_vo_max()
|
||||
{
|
||||
level endon( "sq_wisp_failed" );
|
||||
while ( !isDefined( level.vh_wisp ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
@ -62,24 +66,27 @@ 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 );
|
||||
}
|
||||
|
||||
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.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 ) )
|
||||
{
|
||||
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 );
|
||||
@ -90,6 +97,9 @@ ctw_ric_start_wisp()
|
||||
ctw_ric_move_wisp( s_current )
|
||||
{
|
||||
self endon( "ctw_wisp_timeout" );
|
||||
|
||||
do
|
||||
{
|
||||
self setclientfield( "vulture_wisp", 0 );
|
||||
self.origin = s_current.origin;
|
||||
wait_network_frame();
|
||||
@ -97,6 +107,9 @@ ctw_ric_move_wisp( s_current )
|
||||
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" );
|
||||
@ -104,10 +117,9 @@ ctw_ric_move_wisp( s_current )
|
||||
|
||||
ctw_ric_get_next_wisp_struct( s_current )
|
||||
{
|
||||
if ( !isDefined( s_current.target ) )
|
||||
{
|
||||
if ( !isdefined( s_current.target ) )
|
||||
return undefined;
|
||||
}
|
||||
|
||||
a_structs = getstructarray( s_current.target, "targetname" );
|
||||
return array_randomize( a_structs )[0];
|
||||
}
|
||||
@ -125,28 +137,23 @@ 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 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a185[ _k185 ];
|
||||
if ( !player hasperk( "specialty_nomotionsensor" ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
|
||||
if ( distancesquared( player.origin, self.origin ) < 4096 )
|
||||
{
|
||||
is_near_wisp = 1;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
_k185 = getNextArrayKey( _a185, _k185 );
|
||||
}
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
self notify( "ctw_wisp_moved" );
|
||||
}
|
||||
|
||||
@ -160,48 +167,56 @@ ctw_ric_power_towers()
|
||||
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 )
|
||||
|
||||
for ( i = 0; i < 5; i++ )
|
||||
{
|
||||
wait 3;
|
||||
e_powered_zombie = undefined;
|
||||
while ( !isDefined( e_powered_zombie ) )
|
||||
|
||||
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 );
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
ctw_ric_guillotine_glow( v_spot )
|
||||
{
|
||||
level endon( "stop_ctw_ric_guillotine_glow" );
|
||||
if ( !isDefined( self.m_glow ) )
|
||||
|
||||
if ( !isdefined( self.m_glow ) )
|
||||
{
|
||||
self.m_glow = spawn( "script_model", v_spot );
|
||||
self.m_glow setmodel( "tag_origin" );
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
playfxontag( level._effect["vulture_fx_wisp"], self.m_glow, "tag_origin" );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" );
|
||||
}
|
||||
}
|
||||
|
||||
ctw_power_up_ric_zombie( m_wisp )
|
||||
{
|
||||
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 );
|
||||
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();
|
||||
}
|
||||
|
||||
@ -209,10 +224,16 @@ ctw_return_wisp_to_guillotine( v_spot, v_start )
|
||||
{
|
||||
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 );
|
||||
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;
|
||||
}
|
||||
|
||||
@ -241,29 +262,30 @@ ctw_max_start_wisp()
|
||||
vh_wisp cancelaimove();
|
||||
vh_wisp clearvehgoalpos();
|
||||
vh_wisp delete();
|
||||
if ( isDefined( level.vh_wisp ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.vh_wisp ) )
|
||||
level.vh_wisp delete();
|
||||
}
|
||||
}
|
||||
|
||||
ctw_max_wisp_play_fx()
|
||||
{
|
||||
self playloopsound( "zmb_sq_wisp_loop" );
|
||||
while ( isDefined( self ) )
|
||||
|
||||
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;
|
||||
|
||||
wait 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
ctw_max_success_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
self waittill( "reached_end_node" );
|
||||
/#
|
||||
iprintlnbold( "Wisp Success!" );
|
||||
@ -281,51 +303,46 @@ ctw_light_tube()
|
||||
ctw_max_fail_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
do
|
||||
{
|
||||
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 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
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--;
|
||||
|
||||
}
|
||||
if ( self.n_sq_energy <= 15 && !flag( "sq_m_wisp_weak" ) )
|
||||
{
|
||||
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 && flag( "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" );
|
||||
}
|
||||
@ -338,12 +355,12 @@ ctw_max_fail_vo()
|
||||
ctw_max_wisp_enery_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( self.n_sq_energy <= 0 )
|
||||
{
|
||||
flag_set( "sq_wisp_failed" );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
@ -352,37 +369,33 @@ debug_origin()
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
debugstar( self.origin, 1, ( 1, 0, 0 ) );
|
||||
wait 0,05;
|
||||
#/
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore )
|
||||
{
|
||||
if ( !isDefined( 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 ) )
|
||||
|
||||
foreach ( e_zombie in a_zombies )
|
||||
{
|
||||
e_zombie = _a473[ _k473 ];
|
||||
if ( distancesquared( e_zombie.origin, v_origin ) < n_radius_sq && !isDefined( e_zombie.sq_wisp_powered ) )
|
||||
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;
|
||||
}
|
||||
|
||||
@ -392,24 +405,23 @@ ctw_power_up_zombie()
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -417,12 +429,13 @@ ctw_power_up_zombie_m_fx( str_fx )
|
||||
{
|
||||
self endon( "delete" );
|
||||
self endon( "death" );
|
||||
while ( isDefined( self ) && isalive( self ) )
|
||||
|
||||
while ( isdefined( self ) && isalive( self ) )
|
||||
{
|
||||
playfxontag( level._effect[str_fx], self, "J_Wrist_RI" );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
playfxontag( level._effect[str_fx], self, "J_Wrist_LE" );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
self playloopsound( "zmb_sq_wisp_possess" );
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
#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()
|
||||
{
|
||||
@ -16,14 +18,12 @@ init()
|
||||
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" );
|
||||
}
|
||||
@ -34,22 +34,17 @@ stage_logic()
|
||||
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();
|
||||
@ -58,6 +53,7 @@ stage_logic()
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
stage_vo_max()
|
||||
@ -65,51 +61,49 @@ 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( str_vox )
|
||||
{
|
||||
player = sq_ftl_get_lantern_holder();
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
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" ) )
|
||||
|
||||
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;
|
||||
}
|
||||
_k107 = getNextArrayKey( _a107, _k107 );
|
||||
}
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -123,53 +117,44 @@ 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 );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( attacker ) || isplayer( attacker ) )
|
||||
return;
|
||||
}
|
||||
|
||||
players = getplayers();
|
||||
_a164 = players;
|
||||
_k164 = getFirstArrayKey( _a164 );
|
||||
while ( isDefined( _k164 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
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 )
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
ric_fill_lantern_watcher()
|
||||
{
|
||||
a_axis = getaiarray( "axis" );
|
||||
a_ghost = [];
|
||||
_a183 = a_axis;
|
||||
_k183 = getFirstArrayKey( _a183 );
|
||||
while ( isDefined( _k183 ) )
|
||||
|
||||
foreach ( e_axis in a_axis )
|
||||
{
|
||||
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 );
|
||||
@ -178,26 +163,22 @@ ric_fill_lantern_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 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
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 )
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
ftl_lantern_increment()
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -14,26 +16,23 @@ init()
|
||||
|
||||
sq_gl_setup_buildable_trig()
|
||||
{
|
||||
while ( !isDefined( level.sq_lamp_generator_unitrig ) )
|
||||
{
|
||||
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 );
|
||||
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" );
|
||||
}
|
||||
@ -52,24 +51,28 @@ stage_logic()
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
stage_vo_max()
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
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 = 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 );
|
||||
@ -84,22 +87,20 @@ gl_lantern_spawn( s_start )
|
||||
|
||||
gl_lantern_delete()
|
||||
{
|
||||
if ( isDefined( level.vh_lantern ) )
|
||||
{
|
||||
if ( isDefined( level.vh_lantern.m_lantern ) )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.vh_lantern.m_link ) )
|
||||
level.vh_lantern.m_link delete();
|
||||
}
|
||||
|
||||
level.vh_lantern delete();
|
||||
}
|
||||
}
|
||||
@ -107,16 +108,17 @@ gl_lantern_delete()
|
||||
gl_lantern_move( s_current )
|
||||
{
|
||||
level endon( "lantern_crashing" );
|
||||
while ( 1 )
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
@ -125,19 +127,18 @@ gl_lantern_get_next_struct( s_current )
|
||||
{
|
||||
a_struct_links = [];
|
||||
a_target_structs = getstructarray( s_current.target, "targetname" );
|
||||
while ( isDefined( s_current.script_string ) )
|
||||
|
||||
if ( isdefined( s_current.script_string ) )
|
||||
{
|
||||
a_names = strtok( s_current.script_string, " " );
|
||||
_a171 = a_names;
|
||||
_k171 = getFirstArrayKey( _a171 );
|
||||
while ( isDefined( _k171 ) )
|
||||
|
||||
foreach ( str_name in a_names )
|
||||
{
|
||||
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];
|
||||
}
|
||||
|
||||
@ -146,7 +147,7 @@ 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 pathvariableoffset( vectorscale( ( 1, 1, 1 ), 128.0 ), 1 );
|
||||
self waittill_either( "goal", "near_goal" );
|
||||
}
|
||||
|
||||
@ -166,24 +167,24 @@ gl_lantern_damage_watcher()
|
||||
{
|
||||
self.m_lantern endon( "delete" );
|
||||
self.m_lantern setcandamage( 1 );
|
||||
while ( 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;
|
||||
}
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( self.m_lantern ) )
|
||||
{
|
||||
s_start_spot = gl_lantern_teleport();
|
||||
gl_lantern_move( s_start_spot );
|
||||
@ -193,11 +194,11 @@ gl_lantern_damage_watcher()
|
||||
gl_lantern_stop_spin_on_land()
|
||||
{
|
||||
self endon( "delete" );
|
||||
while ( isDefined( self ) && length( self.velocity ) > 3 )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
if ( isDefined( self ) )
|
||||
|
||||
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" );
|
||||
@ -220,15 +221,19 @@ gl_lantern_pickup_watch()
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( piece ) )
|
||||
{
|
||||
piece.sq_is_ghost_lamp = 1;
|
||||
piece.start_origin = vectorScale( ( 0, 0, 1 ), 512 );
|
||||
piece.start_angles = ( 0, 0, 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();
|
||||
@ -240,15 +245,15 @@ gl_lantern_crash_movement()
|
||||
level notify( "lantern_crashing" );
|
||||
self cancelaimove();
|
||||
self clearvehgoalpos();
|
||||
self setphysacceleration( vectorScale( ( 0, 0, 1 ), 800 ) );
|
||||
hitdir = ( 0, 0, 1 );
|
||||
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 ) + vectornormalize( side_dir ) );
|
||||
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 );
|
||||
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 ) );
|
||||
|
@ -1,11 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -19,13 +19,10 @@ init()
|
||||
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" );
|
||||
}
|
||||
@ -40,7 +37,9 @@ stage_vo_max()
|
||||
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 );
|
||||
}
|
||||
@ -48,17 +47,16 @@ stage_vo_max()
|
||||
stage_vo_ric()
|
||||
{
|
||||
richtofensay( "vox_zmba_sidequest_ip_0", 10 );
|
||||
richtofensay( "vox_zmba_sidequest_ip_1", 5,5 );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.rich_sq_player ) )
|
||||
return;
|
||||
}
|
||||
while ( !level.rich_sq_player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_maze" ) )
|
||||
{
|
||||
|
||||
while ( !level.rich_sq_player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_maze" ) )
|
||||
wait 1;
|
||||
}
|
||||
|
||||
richtofensay( "vox_zmba_sidequest_ip_4", 8 );
|
||||
}
|
||||
|
||||
@ -73,6 +71,7 @@ stage_logic()
|
||||
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();
|
||||
@ -84,17 +83,22 @@ stage_logic()
|
||||
wait_network_frame();
|
||||
}
|
||||
}
|
||||
else sq_ml_spawn_levers();
|
||||
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()
|
||||
@ -105,9 +109,11 @@ sq_bp_spawn_trigger()
|
||||
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
|
||||
self.trig triggerignoreteam();
|
||||
self.trig usetriggerrequirelookat();
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self.trig waittill( "trigger" );
|
||||
|
||||
self.trig sethintstring( "" );
|
||||
level thread sq_bp_button_pressed( self.script_string, self.trig );
|
||||
wait 1;
|
||||
@ -125,7 +131,7 @@ sq_bp_spawn_board()
|
||||
|
||||
sq_bp_button_pressed( str_tag, trig )
|
||||
{
|
||||
if ( isDefined( level.str_sq_bp_active_light ) )
|
||||
if ( isdefined( level.str_sq_bp_active_light ) )
|
||||
{
|
||||
if ( level.str_sq_bp_active_light == str_tag )
|
||||
{
|
||||
@ -145,12 +151,12 @@ sq_bp_button_pressed( str_tag, trig )
|
||||
m_light = sq_bp_light_on( str_tag, "yellow" );
|
||||
trig playsound( "zmb_sq_bell_no" );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
if ( isDefined( m_light ) )
|
||||
{
|
||||
|
||||
if ( isdefined( m_light ) )
|
||||
level setclientfield( m_light, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
sq_bp_start_puzzle_lights()
|
||||
{
|
||||
@ -158,50 +164,42 @@ sq_bp_start_puzzle_lights()
|
||||
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 ];
|
||||
|
||||
foreach ( m_button in a_button_structs )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
|
||||
foreach ( str_tag in a_tags )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
foreach ( s_button in a_button_structs )
|
||||
{
|
||||
if ( isdefined( s_button.trig ) )
|
||||
s_button.trig delete();
|
||||
}
|
||||
_k221 = getNextArrayKey( _a221, _k221 );
|
||||
}
|
||||
}
|
||||
|
||||
sq_bp_set_current_bulb( str_tag )
|
||||
@ -209,10 +207,10 @@ 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 ) )
|
||||
{
|
||||
|
||||
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;
|
||||
@ -222,29 +220,25 @@ sq_bp_set_current_bulb( str_tag )
|
||||
sq_bp_delete_green_lights()
|
||||
{
|
||||
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
||||
_a251 = a_button_structs;
|
||||
_k251 = getFirstArrayKey( _a251 );
|
||||
while ( isDefined( _k251 ) )
|
||||
|
||||
foreach ( m_button in a_button_structs )
|
||||
{
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
@ -255,40 +249,43 @@ debug_tag( str_tag )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
debugstar( self gettagorigin( str_tag ), 1, ( 0, 1, 0 ) );
|
||||
wait 0,05;
|
||||
#/
|
||||
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 = spawn( "script_model", ( 0, 0, 0 ) );
|
||||
m_lever setmodel( self.model );
|
||||
m_lever.targetname = "sq_ml_lever";
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
v_spot = self.origin;
|
||||
v_angles = self.angles;
|
||||
if ( isDefined( level._maze._active_perm_list[ n_index ] ) )
|
||||
|
||||
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_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 );
|
||||
|
||||
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 );
|
||||
}
|
||||
v_angles = s_spot.angles - vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||
}
|
||||
|
||||
m_lever.origin = v_spot;
|
||||
m_lever.angles = v_angles;
|
||||
/#
|
||||
@ -302,18 +299,18 @@ sq_ml_show_lever_debug( v_spot, n_index )
|
||||
{
|
||||
level endon( "zm_buried_maze_changed" );
|
||||
/#
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
line( self.origin, v_spot, ( 0, 1, 0 ) );
|
||||
line( self.origin, v_spot, ( 0, 0, 1 ) );
|
||||
print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 );
|
||||
wait 0,05;
|
||||
#/
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
sq_ml_spawn_trigger()
|
||||
{
|
||||
v_right = anglesToForward( self.angles );
|
||||
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();
|
||||
@ -324,16 +321,20 @@ sq_ml_spawn_trigger()
|
||||
self.trig usetriggerrequirelookat();
|
||||
self.is_flipped = 0;
|
||||
self useanimtree( -1 );
|
||||
while ( 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;
|
||||
@ -342,17 +343,13 @@ sq_ml_spawn_trigger()
|
||||
|
||||
sq_ml_spawn_levers()
|
||||
{
|
||||
if ( maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_maze" ) )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
|
||||
for ( i = 0; i < a_lever_structs.size; i++ )
|
||||
a_lever_structs[i] thread sq_ml_spawn_lever( i );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
sq_ml_puzzle_logic()
|
||||
@ -360,38 +357,33 @@ 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 )
|
||||
{
|
||||
|
||||
for ( i = 0; i < a_levers.size; i++ )
|
||||
a_levers[i].n_lever_order = i;
|
||||
i++;
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level.sq_ml_curr_lever = 0;
|
||||
sq_ml_puzzle_wait_for_levers();
|
||||
n_correct = 0;
|
||||
_a424 = a_levers;
|
||||
_k424 = getFirstArrayKey( _a424 );
|
||||
while ( isDefined( _k424 ) )
|
||||
|
||||
foreach ( m_lever in a_levers )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
/#
|
||||
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;
|
||||
}
|
||||
@ -401,20 +393,17 @@ 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 ) )
|
||||
|
||||
foreach ( m_lever in a_levers )
|
||||
{
|
||||
m_lever = _a458[ _k458 ];
|
||||
if ( m_lever.is_flipped == 0 )
|
||||
{
|
||||
are_all_flipped = 0;
|
||||
}
|
||||
_k458 = getNextArrayKey( _a458, _k458 );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -21,10 +23,9 @@ stage_logic()
|
||||
/#
|
||||
iprintlnbold( "LL Started" );
|
||||
#/
|
||||
if ( !isDefined( level.generator_power_states_color ) )
|
||||
{
|
||||
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 );
|
||||
@ -35,56 +36,43 @@ 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 ) )
|
||||
|
||||
foreach ( m_sign in a_signs )
|
||||
{
|
||||
m_sign = _a50[ _k50 ];
|
||||
if ( flag( "sq_is_max_tower_built" ) )
|
||||
{
|
||||
if ( isDefined( m_sign.is_max_sign ) )
|
||||
{
|
||||
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";
|
||||
}
|
||||
}
|
||||
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 )
|
||||
|
||||
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";
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < a_codes.size )
|
||||
|
||||
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] );
|
||||
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()
|
||||
|
@ -1,22 +1,22 @@
|
||||
#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 ) )
|
||||
|
||||
foreach ( s_amp_spot in a_amp_structs )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -42,12 +42,15 @@ stage_logic()
|
||||
|
||||
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 );
|
||||
}
|
||||
@ -55,12 +58,19 @@ stage_vo_max()
|
||||
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 );
|
||||
@ -69,7 +79,9 @@ stage_vo_max_amp_broken()
|
||||
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 );
|
||||
}
|
||||
@ -77,6 +89,7 @@ stage_vo_ric()
|
||||
stage_vo_ric_amp_amplified()
|
||||
{
|
||||
level waittill( "mta_amp_amplified" );
|
||||
|
||||
richtofensay( "vox_zmba_sidequest_amp_2", 6 );
|
||||
richtofensay( "vox_zmba_sidequest_amp_3", 4 );
|
||||
}
|
||||
@ -85,20 +98,18 @@ 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 )
|
||||
{
|
||||
|
||||
if ( isdefined( level.rich_sq_player ) && who == level.rich_sq_player )
|
||||
level notify( "mta_amp_found_by_sam" );
|
||||
}
|
||||
else
|
||||
{
|
||||
level notify( "mta_amp_found" );
|
||||
}
|
||||
level notify( "mta_amp_found", self );
|
||||
}
|
||||
|
||||
mta_amplifier_init()
|
||||
@ -121,9 +132,9 @@ mta_amplifier_subwoofer_watch()
|
||||
#/
|
||||
self.amplifier_state = "broken";
|
||||
self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
|
||||
self stoploopsound( 0,1 );
|
||||
self stoploopsound( 0.1 );
|
||||
self playsound( "zmb_sq_amplifier_destroy" );
|
||||
level notify( "mta_amp_broken" );
|
||||
level notify( "mta_amp_broken", self );
|
||||
mta_check_all_amplifier_states();
|
||||
}
|
||||
|
||||
@ -131,14 +142,17 @@ mta_amplifier_damage_watch()
|
||||
{
|
||||
self endon( "damaged_by_subwoofer" );
|
||||
n_slowgun_count = 0;
|
||||
while ( 1 )
|
||||
|
||||
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, 1 );
|
||||
shader_amount = linear_map( n_slowgun_count, 0, 25, 0.0, 1.0 );
|
||||
self setclientfield( "AmplifierShaderConstant", shader_amount );
|
||||
|
||||
if ( n_slowgun_count >= 25 )
|
||||
{
|
||||
/#
|
||||
@ -153,19 +167,18 @@ mta_amplifier_damage_watch()
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
wait_network_frame();
|
||||
}
|
||||
}
|
||||
|
||||
mta_check_all_amplifier_states();
|
||||
}
|
||||
|
||||
mta_amplifier_filled_fx()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
playfx( level._effect[ "sq_ether_amp_trail" ], self.origin + vectorScale( ( 0, 0, 1 ), 46 ) );
|
||||
playfx( level._effect["sq_ether_amp_trail"], self.origin + vectorscale( ( 0, 0, 1 ), 46.0 ) );
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
@ -175,30 +188,18 @@ 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 ) )
|
||||
|
||||
foreach ( m_amplifier in a_amplifiers )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
else if ( is_all_broken )
|
||||
flag_set( "sq_amplifiers_broken" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -15,13 +17,10 @@ init()
|
||||
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" );
|
||||
}
|
||||
@ -51,11 +50,13 @@ stage_logic()
|
||||
ows_targets_start();
|
||||
flag_clear( "sq_ows_start" );
|
||||
}
|
||||
|
||||
stage_completed( "sq", level._cur_stage_name );
|
||||
}
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ows_fountain_wait()
|
||||
@ -67,7 +68,9 @@ ows_fountain_wait()
|
||||
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" );
|
||||
@ -79,25 +82,26 @@ ows_targets_start()
|
||||
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 )
|
||||
{
|
||||
|
||||
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" );
|
||||
}
|
||||
|
||||
@ -106,31 +110,25 @@ 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 ) )
|
||||
|
||||
foreach ( s_spot in a_target_spots )
|
||||
{
|
||||
s_spot = _a133[ _k133 ];
|
||||
if ( isDefined( s_spot.script_string ) )
|
||||
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;
|
||||
}
|
||||
|
||||
ows_targets_spawn( a_spawn_spots )
|
||||
{
|
||||
_a151 = a_spawn_spots;
|
||||
_k151 = getFirstArrayKey( _a151 );
|
||||
while ( isDefined( _k151 ) )
|
||||
foreach ( s_spot in a_spawn_spots )
|
||||
{
|
||||
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" );
|
||||
@ -139,14 +137,13 @@ ows_targets_spawn( a_spawn_spots )
|
||||
m_target show();
|
||||
playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
|
||||
m_target playsound( "zmb_sq_target_spawn" );
|
||||
if ( isDefined( s_spot.target ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,13 +152,17 @@ ows_target_think()
|
||||
self setcandamage( 1 );
|
||||
self thread ows_target_delete_timer();
|
||||
self waittill_either( "ows_target_timeout", "damage" );
|
||||
if ( isDefined( self.m_linker ) )
|
||||
|
||||
if ( isdefined( self.m_linker ) )
|
||||
{
|
||||
self unlink();
|
||||
self.m_linker delete();
|
||||
}
|
||||
self rotatepitch( -90, 0,15, 0,05, 0,05 );
|
||||
|
||||
self rotatepitch( -90, 0.15, 0.05, 0.05 );
|
||||
|
||||
self waittill( "rotatedone" );
|
||||
|
||||
self delete();
|
||||
}
|
||||
|
||||
@ -171,7 +172,7 @@ ows_target_move( str_target )
|
||||
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 );
|
||||
self.m_linker moveto( s_target.origin, 4, 0.05, 0.05 );
|
||||
}
|
||||
|
||||
ows_target_delete_timer()
|
||||
@ -188,36 +189,43 @@ ows_target_delete_timer()
|
||||
sndsidequestowsmusic()
|
||||
{
|
||||
while ( is_true( level.music_override ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
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;
|
||||
wait 0.5;
|
||||
ent playsound( "mus_sidequest_0" );
|
||||
}
|
||||
wait 3,5;
|
||||
|
||||
wait 3.5;
|
||||
ent delete();
|
||||
}
|
||||
|
||||
sndhit()
|
||||
{
|
||||
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" );
|
||||
}
|
||||
|
@ -1,17 +1,17 @@
|
||||
#include maps/mp/zm_buried_buildables;
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zombies/_zm_weap_time_bomb;
|
||||
#include maps/mp/zm_buried_sq;
|
||||
#include maps/mp/zombies/_zm;
|
||||
#include maps/mp/zombies/_zm_buildables;
|
||||
#include maps/mp/gametypes_zm/_hud_util;
|
||||
#include maps/mp/_visionset_mgr;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
#using_animtree( "zm_buried_props" );
|
||||
// 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\_visionset_mgr;
|
||||
#include maps\mp\gametypes_zm\_hud_util;
|
||||
#include maps\mp\zombies\_zm_buildables;
|
||||
#include maps\mp\zombies\_zm;
|
||||
#include maps\mp\zm_buried_sq;
|
||||
#include maps\mp\zombies\_zm_weap_time_bomb;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\zm_buried_buildables;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -23,8 +23,8 @@ init()
|
||||
flag_init( "sq_tpo_generator_powered" );
|
||||
flag_init( "sq_wisp_saved_with_time_bomb" );
|
||||
flag_init( "sq_tpo_stage_started" );
|
||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state );
|
||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state );
|
||||
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state );
|
||||
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state );
|
||||
/#
|
||||
level thread debug_give_piece();
|
||||
#/
|
||||
@ -36,13 +36,10 @@ init()
|
||||
init_stage()
|
||||
{
|
||||
if ( flag( "sq_is_max_tower_built" ) )
|
||||
{
|
||||
level thread stage_vo_max();
|
||||
}
|
||||
else
|
||||
{
|
||||
level thread stage_vo_ric();
|
||||
}
|
||||
|
||||
level._cur_stage_name = "tpo";
|
||||
clientnotify( "tpo" );
|
||||
}
|
||||
@ -64,10 +61,14 @@ stage_vo_ric()
|
||||
richtofensay( "vox_zmba_sidequest_step8_0", 11 );
|
||||
richtofensay( "vox_zmba_sidequest_step8_1", 6 );
|
||||
richtofensay( "vox_zmba_sidequest_step8_2", 6 );
|
||||
|
||||
level waittill( "sq_tpo_special_round_started" );
|
||||
|
||||
wait 2;
|
||||
richtofensay( "vox_zmba_sidequest_step8_3", 6 );
|
||||
|
||||
level waittill( "sq_tpo_special_round_ended" );
|
||||
|
||||
richtofensay( "vox_zmba_sidequest_step8_6", 4 );
|
||||
}
|
||||
|
||||
@ -77,14 +78,11 @@ stage_logic()
|
||||
iprintlnbold( "TPO Started" );
|
||||
#/
|
||||
flag_set( "sq_tpo_stage_started" );
|
||||
|
||||
if ( flag( "sq_is_ric_tower_built" ) )
|
||||
{
|
||||
stage_logic_richtofen();
|
||||
}
|
||||
else if ( flag( "sq_is_max_tower_built" ) )
|
||||
{
|
||||
stage_logic_maxis();
|
||||
}
|
||||
else
|
||||
{
|
||||
/#
|
||||
@ -104,18 +102,27 @@ stage_logic_richtofen()
|
||||
iprintlnbold( "TPO: Richtofen started" );
|
||||
#/
|
||||
e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" );
|
||||
flag_clear( "sq_tpo_time_bomb_in_valid_location" );
|
||||
if ( isDefined( level.time_bomb_save_data ) && isDefined( level.time_bomb_save_data.time_bomb_model ) && isDefined( level.time_bomb_save_data.time_bomb_model.sq_location_valid ) )
|
||||
|
||||
do
|
||||
{
|
||||
flag_clear( "sq_tpo_time_bomb_in_valid_location" );
|
||||
|
||||
do
|
||||
{
|
||||
if ( !( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) && !isdefined( level.time_bomb_save_data.time_bomb_model.sq_location_valid ) ) )
|
||||
level waittill( "new_time_bomb_set" );
|
||||
}
|
||||
|
||||
b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume );
|
||||
level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location;
|
||||
}
|
||||
while ( !b_time_bomb_in_valid_location );
|
||||
|
||||
playfxontag( level._effect["sq_tpo_time_bomb_fx"], level.time_bomb_save_data.time_bomb_model, "tag_origin" );
|
||||
flag_set( "sq_tpo_time_bomb_in_valid_location" );
|
||||
level thread sq_tpo_check_players_in_time_bomb_volume( e_time_bomb_volume );
|
||||
wait_for_time_bomb_to_be_detonated_or_thrown_again();
|
||||
level notify( "sq_tpo_stop_checking_time_bomb_volume" );
|
||||
|
||||
if ( flag( "time_bomb_restore_active" ) )
|
||||
{
|
||||
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
|
||||
@ -127,8 +134,11 @@ stage_logic_richtofen()
|
||||
level notify( "sq_tpo_special_round_ended" );
|
||||
}
|
||||
}
|
||||
|
||||
wait_network_frame();
|
||||
}
|
||||
while ( !flag( "sq_tpo_generator_powered" ) );
|
||||
}
|
||||
|
||||
stage_logic_maxis()
|
||||
{
|
||||
@ -136,32 +146,36 @@ stage_logic_maxis()
|
||||
iprintlnbold( "TPO: Maxis started" );
|
||||
#/
|
||||
flag_wait( "sq_wisp_saved_with_time_bomb" );
|
||||
|
||||
while ( !flag( "sq_wisp_success" ) )
|
||||
{
|
||||
stage_start( "sq", "ts" );
|
||||
|
||||
level waittill( "sq_ts_over" );
|
||||
|
||||
stage_start( "sq", "ctw" );
|
||||
|
||||
level waittill( "sq_ctw_over" );
|
||||
}
|
||||
|
||||
level._cur_stage_name = "tpo";
|
||||
}
|
||||
|
||||
sq_tpo_check_players_in_time_bomb_volume( e_volume )
|
||||
{
|
||||
level endon( "sq_tpo_stop_checking_time_bomb_volume" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
b_players_ready = _are_all_players_in_time_bomb_volume( e_volume );
|
||||
level._time_bomb.functionality_override = b_players_ready;
|
||||
|
||||
if ( b_players_ready )
|
||||
{
|
||||
flag_set( "sq_tpo_players_in_position_for_time_warp" );
|
||||
}
|
||||
else
|
||||
{
|
||||
flag_clear( "sq_tpo_players_in_position_for_time_warp" );
|
||||
}
|
||||
wait 0,25;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,23 +184,17 @@ _are_all_players_in_time_bomb_volume( e_volume )
|
||||
n_required_players = 4;
|
||||
a_players = get_players();
|
||||
/#
|
||||
if ( getDvarInt( #"5256118F" ) > 0 )
|
||||
{
|
||||
if ( getdvarint( _hash_5256118F ) > 0 )
|
||||
n_required_players = a_players.size;
|
||||
#/
|
||||
}
|
||||
n_players_in_position = 0;
|
||||
_a239 = a_players;
|
||||
_k239 = getFirstArrayKey( _a239 );
|
||||
while ( isDefined( _k239 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a239[ _k239 ];
|
||||
if ( player istouching( e_volume ) )
|
||||
{
|
||||
n_players_in_position++;
|
||||
}
|
||||
_k239 = getNextArrayKey( _a239, _k239 );
|
||||
}
|
||||
|
||||
b_all_in_valid_position = n_players_in_position == n_required_players;
|
||||
return b_all_in_valid_position;
|
||||
}
|
||||
@ -204,21 +212,17 @@ special_round_start()
|
||||
#/
|
||||
flag_set( "sq_tpo_special_round_active" );
|
||||
level.sq_tpo.times_searched = 0;
|
||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_saves_data( 0 );
|
||||
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_saves_data( 0 );
|
||||
flag_clear( "time_bomb_detonation_enabled" );
|
||||
fake_time_warp();
|
||||
level thread sndsidequestnoirmusic();
|
||||
make_super_zombies( 1 );
|
||||
level thread spawn_zombies_after_time_bomb_round_killed();
|
||||
a_players = get_players();
|
||||
_a279 = a_players;
|
||||
_k279 = getFirstArrayKey( _a279 );
|
||||
while ( isDefined( _k279 ) )
|
||||
{
|
||||
player = _a279[ _k279 ];
|
||||
|
||||
foreach ( player in a_players )
|
||||
vsmgr_activate( "visionset", "cheat_bw", player );
|
||||
_k279 = getNextArrayKey( _a279, _k279 );
|
||||
}
|
||||
|
||||
level setclientfield( "sq_tpo_special_round_active", 1 );
|
||||
}
|
||||
|
||||
@ -234,6 +238,7 @@ make_super_zombies( b_toggle )
|
||||
n_round = level.round_number;
|
||||
level notify( "super_zombies_end" );
|
||||
}
|
||||
|
||||
level.zombie_total = n_round;
|
||||
ai_calculate_health( n_round );
|
||||
level.zombie_move_speed = n_round * level.zombie_vars["zombie_move_speed_multiplier"];
|
||||
@ -243,7 +248,8 @@ watch_for_time_bombs( n_round )
|
||||
{
|
||||
level notify( "super_zombies_end" );
|
||||
level endon( "super_zombies_end" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill_any( "time_bomb_detonation_complete", "start_of_round" );
|
||||
level.zombie_total = n_round;
|
||||
@ -260,11 +266,11 @@ spawn_zombies_after_time_bomb_round_killed()
|
||||
|
||||
fake_time_warp()
|
||||
{
|
||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_destroy_hud_elem();
|
||||
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_show_overlay();
|
||||
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies();
|
||||
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_destroy_hud_elem();
|
||||
maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_show_overlay();
|
||||
maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies();
|
||||
playsoundatposition( "zmb_timebomb_timechange_2d_sq", ( 0, 0, 0 ) );
|
||||
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_hide_overlay();
|
||||
maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_hide_overlay();
|
||||
}
|
||||
|
||||
special_round_end()
|
||||
@ -277,17 +283,15 @@ special_round_end()
|
||||
make_super_zombies( 0 );
|
||||
level._time_bomb.functionality_override = 0;
|
||||
flag_set( "time_bomb_detonation_enabled" );
|
||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_restores_saved_data();
|
||||
maps\mp\zombies\_zm_weap_time_bomb::time_bomb_restores_saved_data();
|
||||
a_players = get_players();
|
||||
_a356 = a_players;
|
||||
_k356 = getFirstArrayKey( _a356 );
|
||||
while ( isDefined( _k356 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a356[ _k356 ];
|
||||
vsmgr_deactivate( "visionset", "cheat_bw", player );
|
||||
player notify( "search_done" );
|
||||
_k356 = getNextArrayKey( _a356, _k356 );
|
||||
}
|
||||
|
||||
clean_up_special_round();
|
||||
flag_clear( "sq_tpo_special_round_active" );
|
||||
}
|
||||
@ -295,30 +299,23 @@ special_round_end()
|
||||
clean_up_special_round()
|
||||
{
|
||||
a_models = getentarray( "sq_tpo_corpse_model", "targetname" );
|
||||
_a370 = a_models;
|
||||
_k370 = getFirstArrayKey( _a370 );
|
||||
while ( isDefined( _k370 ) )
|
||||
|
||||
foreach ( model in a_models )
|
||||
{
|
||||
model = _a370[ _k370 ];
|
||||
model _delete_unitrigger();
|
||||
model delete();
|
||||
_k370 = getNextArrayKey( _a370, _k370 );
|
||||
}
|
||||
}
|
||||
|
||||
_delete_unitrigger()
|
||||
{
|
||||
if ( isDefined( self.unitrigger ) )
|
||||
{
|
||||
if ( isdefined( self.unitrigger ) )
|
||||
self.unitrigger.registered = 0;
|
||||
}
|
||||
if ( isDefined( self.unitrigger.trigger ) )
|
||||
|
||||
if ( isdefined( self.unitrigger.trigger ) )
|
||||
{
|
||||
if ( isDefined( self.unitrigger.trigger.stub ) )
|
||||
{
|
||||
self.unitrigger.trigger maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
|
||||
return;
|
||||
}
|
||||
if ( isdefined( self.unitrigger.trigger.stub ) )
|
||||
self.unitrigger.trigger maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
|
||||
else
|
||||
{
|
||||
self.trigger notify( "kill_trigger" );
|
||||
@ -339,13 +336,15 @@ start_item_hunt_with_timeout( n_timeout )
|
||||
|
||||
exit_stage( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
debug_give_piece()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "sq_tpo_give_item" );
|
||||
|
||||
get_players()[0] give_player_sq_tpo_switch();
|
||||
}
|
||||
}
|
||||
@ -361,12 +360,11 @@ setup_random_corpse_positions()
|
||||
{
|
||||
a_corpse_models = get_randomized_corpse_list();
|
||||
a_corpse_structs = array_randomize( getstructarray( "sq_tpo_corpse_spawn_location", "targetname" ) );
|
||||
i = 0;
|
||||
while ( i < a_corpse_models.size )
|
||||
|
||||
for ( i = 0; i < a_corpse_models.size; i++ )
|
||||
{
|
||||
a_corpse_structs[i] promote_to_corpse_model( a_corpse_models[i] );
|
||||
a_corpse_structs[i] thread _debug_show_location();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -374,20 +372,20 @@ _debug_show_location()
|
||||
{
|
||||
/#
|
||||
level endon( "sq_tpo_item_hunt_done" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( getDvarInt( #"5256118F" ) > 0 )
|
||||
{
|
||||
debugstar( self.origin, 20, ( 0, 0, 0 ) );
|
||||
}
|
||||
if ( getdvarint( _hash_5256118F ) > 0 )
|
||||
debugstar( self.origin, 20, ( 0, 1, 0 ) );
|
||||
|
||||
wait 1;
|
||||
#/
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
promote_to_corpse_model( str_model )
|
||||
{
|
||||
v_spawn_point = groundtrace( self.origin + vectorScale( ( 0, 0, 0 ), 10 ), self.origin + vectorScale( ( 0, 0, 0 ), 300 ), 0, undefined )[ "position" ];
|
||||
v_spawn_point = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined )["position"];
|
||||
self.corpse_model = spawn( "script_model", v_spawn_point );
|
||||
self.corpse_model.angles = self.angles;
|
||||
self.corpse_model setmodel( str_model );
|
||||
@ -396,10 +394,12 @@ promote_to_corpse_model( str_model )
|
||||
self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think );
|
||||
}
|
||||
|
||||
#using_animtree("zm_buried_props");
|
||||
|
||||
_pose_corpse()
|
||||
{
|
||||
/#
|
||||
assert( isDefined( self.script_noteworthy ), "sq_tpo_corpse_spawn_location at " + self.origin + " is missing script_noteworthy! This is required to set deadpose" );
|
||||
assert( isdefined( self.script_noteworthy ), "sq_tpo_corpse_spawn_location at " + self.origin + " is missing script_noteworthy! This is required to set deadpose" );
|
||||
#/
|
||||
switch ( self.script_noteworthy )
|
||||
{
|
||||
@ -448,8 +448,9 @@ _pose_corpse()
|
||||
#/
|
||||
break;
|
||||
}
|
||||
|
||||
self.corpse_model useanimtree( -1 );
|
||||
self.corpse_model setanim( anim_pose, 1, 0,05, 1 );
|
||||
self.corpse_model setanim( anim_pose, 1, 0.05, 1 );
|
||||
}
|
||||
|
||||
setup_unitrigger( str_hint, func_update )
|
||||
@ -459,8 +460,8 @@ setup_unitrigger( str_hint, func_update )
|
||||
script_width = 0;
|
||||
script_length = undefined;
|
||||
unitrigger_stub = spawnstruct();
|
||||
unitrigger_stub.origin = self.origin + vectorScale( ( 0, 0, 0 ), 10 );
|
||||
unitrigger_stub.script_length = 13,5;
|
||||
unitrigger_stub.origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 );
|
||||
unitrigger_stub.script_length = 13.5;
|
||||
unitrigger_stub.script_width = script_width;
|
||||
unitrigger_stub.script_height = script_height;
|
||||
unitrigger_stub.radius = radius;
|
||||
@ -469,7 +470,7 @@ setup_unitrigger( str_hint, func_update )
|
||||
unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use";
|
||||
unitrigger_stub.require_look_at = 1;
|
||||
unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt;
|
||||
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, func_update );
|
||||
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, func_update );
|
||||
return unitrigger_stub;
|
||||
}
|
||||
|
||||
@ -489,6 +490,7 @@ piecestub_update_prompt( player )
|
||||
unitrigger_killed()
|
||||
{
|
||||
self waittill( "kill_trigger" );
|
||||
|
||||
self _delete_progress_bar();
|
||||
}
|
||||
|
||||
@ -496,50 +498,52 @@ unitrigger_think()
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
self thread unitrigger_killed();
|
||||
b_trigger_used = 0;
|
||||
while ( !b_trigger_used )
|
||||
|
||||
for ( b_trigger_used = 0; !b_trigger_used; b_trigger_used = 1 )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
b_progress_bar_done = 0;
|
||||
n_frame_count = 0;
|
||||
|
||||
while ( player usebuttonpressed() && !b_progress_bar_done )
|
||||
{
|
||||
if ( !isDefined( self.progress_bar ) )
|
||||
if ( !isdefined( self.progress_bar ) )
|
||||
{
|
||||
self.progress_bar = player createprimaryprogressbar();
|
||||
self.progress_bar_text = player createprimaryprogressbartext();
|
||||
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
|
||||
self thread _kill_progress_bar();
|
||||
}
|
||||
n_progress_amount = n_frame_count / 30;
|
||||
|
||||
n_progress_amount = n_frame_count / 30.0;
|
||||
self.progress_bar updatebar( n_progress_amount );
|
||||
n_frame_count++;
|
||||
|
||||
if ( n_progress_amount == 1 )
|
||||
{
|
||||
b_progress_bar_done = 1;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
wait 0,05;
|
||||
}
|
||||
|
||||
self _delete_progress_bar();
|
||||
if ( b_progress_bar_done )
|
||||
{
|
||||
b_trigger_used = 1;
|
||||
}
|
||||
asm_cond( b_progress_bar_done, loc_27AB );
|
||||
}
|
||||
|
||||
if ( b_progress_bar_done )
|
||||
{
|
||||
self.stub.hint_string = "";
|
||||
self sethintstring( self.stub.hint_string );
|
||||
|
||||
if ( item_is_on_corpse() )
|
||||
{
|
||||
iprintlnbold( &"ZM_BURIED_SQ_FND" );
|
||||
player give_player_sq_tpo_switch();
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( &"ZM_BURIED_SQ_NFND" );
|
||||
}
|
||||
self thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub );
|
||||
|
||||
self thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
|
||||
}
|
||||
}
|
||||
|
||||
@ -552,36 +556,33 @@ give_player_sq_tpo_switch()
|
||||
|
||||
item_is_on_corpse()
|
||||
{
|
||||
if ( !isDefined( level.sq_tpo.times_searched ) )
|
||||
{
|
||||
if ( !isdefined( level.sq_tpo.times_searched ) )
|
||||
level.sq_tpo.times_searched = 0;
|
||||
}
|
||||
|
||||
switch ( level.sq_tpo.times_searched )
|
||||
{
|
||||
case 0:
|
||||
case "0":
|
||||
n_chance = 1;
|
||||
break;
|
||||
case 1:
|
||||
case "1":
|
||||
n_chance = 15;
|
||||
break;
|
||||
case 2:
|
||||
case "2":
|
||||
n_chance = 33;
|
||||
break;
|
||||
case 3:
|
||||
case "3":
|
||||
n_chance = 100;
|
||||
break;
|
||||
}
|
||||
if ( randomint( 100 ) > ( 100 - n_chance ) )
|
||||
{
|
||||
b_found_item = !flag( "sq_tpo_found_item" );
|
||||
}
|
||||
|
||||
b_found_item = randomint( 100 ) > 100 - n_chance && !flag( "sq_tpo_found_item" );
|
||||
level.sq_tpo.times_searched++;
|
||||
return b_found_item;
|
||||
}
|
||||
|
||||
_delete_progress_bar()
|
||||
{
|
||||
if ( isDefined( self.progress_bar ) )
|
||||
if ( isdefined( self.progress_bar ) )
|
||||
{
|
||||
self.progress_bar destroyelem();
|
||||
self.progress_bar_text destroyelem();
|
||||
@ -593,13 +594,15 @@ _kill_progress_bar()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "search_done" );
|
||||
|
||||
self _delete_progress_bar();
|
||||
}
|
||||
|
||||
setup_buildable_switch()
|
||||
{
|
||||
s_switch_piece = generate_zombie_buildable_piece( "buried_sq_tpo_switch", "p6_zm_buildable_pswitch_lever_handed", 32, 64, 2,4, "zom_icon_trap_switch_handle", ::onpickup_switch, ::ondrop_switch, undefined, undefined, 0, 5, 2 );
|
||||
s_switch_piece = generate_zombie_buildable_piece( "buried_sq_tpo_switch", "p6_zm_buildable_pswitch_lever_handed", 32, 64, 2.4, "zom_icon_trap_switch_handle", ::onpickup_switch, ::ondrop_switch, undefined, undefined, 0, 5, 2 );
|
||||
s_switch_piece.hint_grab = level.str_buildables_grab_part;
|
||||
s_switch_piece.hint_swap = level.str_buildables_swap_part;
|
||||
s_switch_piece manage_multiple_pieces( 1 );
|
||||
@ -610,12 +613,12 @@ setup_buildable_switch()
|
||||
s_switch.triggerthink = ::triggerthink_switch;
|
||||
s_switch.onuseplantobject = ::onuseplantobject_switch;
|
||||
include_buildable( s_switch );
|
||||
while ( !isDefined( level.sq_tpo_unitrig ) )
|
||||
{
|
||||
|
||||
while ( !isdefined( level.sq_tpo_unitrig ) )
|
||||
wait 1;
|
||||
}
|
||||
|
||||
level.sq_tpo_unitrig.realorigin = level.sq_tpo_unitrig.origin;
|
||||
level.sq_tpo_unitrig.origin += vectorScale( ( 0, 0, 0 ), 10000 );
|
||||
level.sq_tpo_unitrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 );
|
||||
}
|
||||
|
||||
onuseplantobject_switch( player )
|
||||
@ -625,24 +628,25 @@ onuseplantobject_switch( player )
|
||||
|
||||
onpickup_switch( player )
|
||||
{
|
||||
maps/mp/zm_buried_buildables::onpickup_common( player );
|
||||
maps\mp\zm_buried_buildables::onpickup_common( player );
|
||||
}
|
||||
|
||||
ondrop_switch( player )
|
||||
{
|
||||
maps/mp/zm_buried_buildables::ondrop_common( player );
|
||||
maps\mp\zm_buried_buildables::ondrop_common( player );
|
||||
}
|
||||
|
||||
onspawn_switch( player )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
triggerthink_switch()
|
||||
{
|
||||
if ( isDefined( getent( "guillotine_trigger", "targetname" ) ) )
|
||||
if ( isdefined( getent( "guillotine_trigger", "targetname" ) ) )
|
||||
{
|
||||
str_trigger_generator_name = "guillotine_trigger";
|
||||
level.sq_tpo_unitrig = maps/mp/zombies/_zm_buildables::buildable_trigger_think( str_trigger_generator_name, "buried_sq_tpo_switch", "none", "", 1, 0 );
|
||||
level.sq_tpo_unitrig = maps\mp\zombies\_zm_buildables::buildable_trigger_think( str_trigger_generator_name, "buried_sq_tpo_switch", "none", "", 1, 0 );
|
||||
level.sq_tpo_unitrig.ignore_open_sesame = 1;
|
||||
level.sq_tpo_unitrig.buildablestub_reject_func = ::guillotine_trigger_reject_func;
|
||||
}
|
||||
@ -651,25 +655,24 @@ triggerthink_switch()
|
||||
guillotine_trigger_reject_func( player )
|
||||
{
|
||||
b_should_reject = 0;
|
||||
|
||||
if ( flag( "sq_tpo_special_round_active" ) )
|
||||
{
|
||||
b_should_reject = 1;
|
||||
}
|
||||
|
||||
return b_should_reject;
|
||||
}
|
||||
|
||||
time_bomb_saves_wisp_state()
|
||||
{
|
||||
if ( !isDefined( self.sq_data ) )
|
||||
{
|
||||
if ( !isdefined( self.sq_data ) )
|
||||
self.sq_data = spawnstruct();
|
||||
}
|
||||
|
||||
self.sq_data.wisp_stage_complete = flag( "sq_wisp_success" );
|
||||
}
|
||||
|
||||
time_bomb_restores_wisp_state()
|
||||
{
|
||||
if ( isDefined( self.sq_data ) && isDefined( self.sq_data.wisp_stage_complete ) && !self.sq_data.wisp_stage_complete && flag( "sq_tpo_stage_started" ) )
|
||||
if ( isdefined( self.sq_data ) && isdefined( self.sq_data.wisp_stage_complete ) && !self.sq_data.wisp_stage_complete && flag( "sq_tpo_stage_started" ) )
|
||||
{
|
||||
flag_clear( "sq_wisp_success" );
|
||||
flag_clear( "sq_wisp_failed" );
|
||||
@ -680,14 +683,15 @@ time_bomb_restores_wisp_state()
|
||||
sndsidequestnoirmusic()
|
||||
{
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
level.music_override = 1;
|
||||
level setclientfield( "mus_noir_snapshot_loop", 1 );
|
||||
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||
ent playloopsound( "mus_sidequest_noir" );
|
||||
|
||||
level waittill( "sndEndNoirMusic" );
|
||||
|
||||
level setclientfield( "mus_noir_snapshot_loop", 0 );
|
||||
level.music_override = 0;
|
||||
ent stoploopsound( 2 );
|
||||
|
@ -1,7 +1,9 @@
|
||||
#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()
|
||||
{
|
||||
@ -12,15 +14,13 @@ init()
|
||||
init_stage()
|
||||
{
|
||||
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
|
||||
_a18 = a_signs;
|
||||
_k18 = getFirstArrayKey( _a18 );
|
||||
while ( isDefined( _k18 ) )
|
||||
|
||||
foreach ( m_sign in a_signs )
|
||||
{
|
||||
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" );
|
||||
}
|
||||
@ -31,37 +31,39 @@ stage_logic()
|
||||
iprintlnbold( "TS Started" );
|
||||
#/
|
||||
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 )
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
@ -70,19 +72,21 @@ ts_sign_damage_watch()
|
||||
ts_sign_activate()
|
||||
{
|
||||
self.ts_sign_activated = 1;
|
||||
while ( !isDefined( self.fx_ent ) )
|
||||
|
||||
if ( !isdefined( self.fx_ent ) )
|
||||
{
|
||||
v_forward = anglesToForward( self.angles );
|
||||
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 = 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 ) )
|
||||
|
||||
while ( isdefined( self.fx_ent ) )
|
||||
{
|
||||
playfxontag( level._effect["sq_ether_amp_trail"], self.fx_ent, "tag_origin" );
|
||||
wait 0,3;
|
||||
wait 0.3;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -90,7 +94,8 @@ ts_sign_activate()
|
||||
ts_sign_deactivate()
|
||||
{
|
||||
self.ts_sign_activated = 0;
|
||||
if ( isDefined( self.fx_ent ) )
|
||||
|
||||
if ( isdefined( self.fx_ent ) )
|
||||
{
|
||||
self.fx_ent stoploopsound( 2 );
|
||||
self.fx_ent delete();
|
||||
@ -103,25 +108,21 @@ ts_sign_check_all_activated( e_attacker, m_last_touched )
|
||||
a_signs_active = [];
|
||||
is_max_complete = 1;
|
||||
is_ric_complete = 1;
|
||||
_a125 = a_signs;
|
||||
_k125 = getFirstArrayKey( _a125 );
|
||||
while ( isDefined( _k125 ) )
|
||||
|
||||
foreach ( m_sign in a_signs )
|
||||
{
|
||||
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 )
|
||||
@ -135,18 +136,16 @@ ts_sign_check_all_activated( e_attacker, m_last_touched )
|
||||
|
||||
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;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -1,18 +1,21 @@
|
||||
#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 );
|
||||
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();
|
||||
}
|
||||
@ -22,5 +25,5 @@ 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" );
|
||||
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
|
||||
}
|
||||
|
@ -1,28 +1,29 @@
|
||||
//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();
|
||||
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 );
|
||||
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" );
|
||||
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
|
||||
generatebuildabletarps();
|
||||
deletechalktriggers();
|
||||
deleteslothbarricade( "candystore_alley" );
|
||||
@ -30,16 +31,18 @@ main() //checked matches cerberus output
|
||||
deletebuyabledebris( 1 );
|
||||
powerswitchstate( 1 );
|
||||
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
|
||||
|
||||
if ( level.cleansed_loadout )
|
||||
{
|
||||
level.humanify_custom_loadout = maps/mp/gametypes_zm/zcleansed::gunprogressionthink;
|
||||
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.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" );
|
||||
@ -47,13 +50,13 @@ main() //checked matches cerberus output
|
||||
clientnotify( "pwr" );
|
||||
}
|
||||
|
||||
custom_zombie_player_loadout() //checked matches cerberus output
|
||||
custom_zombie_player_loadout()
|
||||
{
|
||||
self character/c_zom_zombie_buried_saloongirl_mp::main();
|
||||
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" );
|
||||
@ -61,6 +64,7 @@ getspawnpoints() //checked matches cerberus output
|
||||
level._turned_powerup_spawnpoints = getstructarray( "street_turned_powerups", "targetname" );
|
||||
}
|
||||
|
||||
onendgame() //checked matches cerberus output
|
||||
onendgame()
|
||||
{
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -20,10 +22,12 @@ ghost_init_end()
|
||||
|
||||
prespawn_start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
prespawn_end()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ghost_round_start()
|
||||
@ -39,34 +43,29 @@ ghost_round_end()
|
||||
is_player_in_ghost_zone( player )
|
||||
{
|
||||
result = 0;
|
||||
if ( !isDefined( level.ghost_zone_overrides ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( 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 ) )
|
||||
foreach ( trigger in level.ghost_zone_overrides )
|
||||
{
|
||||
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" )
|
||||
{
|
||||
|
||||
if ( !is_player_in_override_trigger && isdefined( curr_zone ) && curr_zone == "zone_mansion" )
|
||||
result = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -78,13 +77,13 @@ ghost_bad_path_init()
|
||||
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[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[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 = [];
|
||||
@ -92,25 +91,25 @@ ghost_bad_path_init()
|
||||
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[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[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[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[5].ignore_func = maps\mp\zm_buried::is_tunnel_open;
|
||||
}
|
||||
|
||||
ghost_bad_path_failsafe()
|
||||
@ -119,126 +118,108 @@ ghost_bad_path_failsafe()
|
||||
self notify( "stop_bad_path_failsafe" );
|
||||
self endon( "stop_bad_path_failsafe" );
|
||||
self thread non_ghost_round_failsafe();
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player = self.favoriteenemy;
|
||||
if ( isDefined( player ) )
|
||||
|
||||
if ( isdefined( player ) )
|
||||
{
|
||||
in_bad_zone = 0;
|
||||
_a174 = level.bad_zones;
|
||||
_k174 = getFirstArrayKey( _a174 );
|
||||
while ( isDefined( _k174 ) )
|
||||
|
||||
foreach ( zone in level.bad_zones )
|
||||
{
|
||||
zone = _a174[ _k174 ];
|
||||
if ( isDefined( zone.ignore_func ) )
|
||||
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 ) )
|
||||
|
||||
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 ) )
|
||||
|
||||
ghost_is_adjacent = 0;
|
||||
|
||||
foreach ( adjacent in zone.adjacent )
|
||||
{
|
||||
adjacent = _a192[ _k192 ];
|
||||
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( adjacent ) )
|
||||
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 ) )
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( node ) )
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
if ( !is_true( self.is_traversing ) )
|
||||
{
|
||||
break;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
|
||||
self forceteleport( node.origin, ( 0, 0, 0 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 0,25;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
non_ghost_round_failsafe()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
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 ) )
|
||||
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 );
|
||||
self maps\mp\zombies\_zm_ai_ghost::start_evaporate( 1 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
wait 0,25;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
disable_traversal_clip_around_mansion()
|
||||
{
|
||||
while ( isDefined( level.ghost_zone_door_clips ) && level.ghost_zone_door_clips.size > 0 )
|
||||
if ( 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 ];
|
||||
foreach ( door_clip in level.ghost_zone_door_clips )
|
||||
door_clip notsolid();
|
||||
_k276 = getNextArrayKey( _a276, _k276 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -253,81 +234,69 @@ ghost_bad_spawn_zone_init()
|
||||
can_use_mansion_back_flying_out_node( zone_name )
|
||||
{
|
||||
if ( zone_name == "zone_mansion_backyard" )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( zone_name == "zone_maze" )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( zone_name == "zone_maze_staircase" )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
ghosts = get_current_ghosts();
|
||||
_a332 = ghosts;
|
||||
_k332 = getFirstArrayKey( _a332 );
|
||||
while ( isDefined( _k332 ) )
|
||||
|
||||
foreach ( ghost in ghosts )
|
||||
{
|
||||
ghost = _a332[ _k332 ];
|
||||
while ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
|
||||
if ( !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 ) )
|
||||
foreach ( bad_spawn_zone_name in level.ghost_bad_spawn_zones )
|
||||
{
|
||||
bad_spawn_zone_name = _a336[ _k336 ];
|
||||
if ( ghost maps/mp/zombies/_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
|
||||
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 ) )
|
||||
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;
|
||||
|
||||
monitor_time += 0.1;
|
||||
|
||||
if ( monitor_time > level.ghost_round_start_monitor_time )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
break;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,41 +1,45 @@
|
||||
#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 )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.sloth.custom_crawler_pickup_func ) )
|
||||
self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]]();
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
crawler_action()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_action" );
|
||||
self maps/mp/zombies/_zm_ai_sloth::common_context_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();
|
||||
@ -43,44 +47,46 @@ crawler_action()
|
||||
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 ( true )
|
||||
{
|
||||
while ( self sloth_is_traversing() )
|
||||
if ( self sloth_is_traversing() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
vec_forward = vectornormalize( anglesToForward( self.crawler.angles ) );
|
||||
start_pos = self.crawler.origin - ( vec_forward * sloth_offset );
|
||||
|
||||
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 maps\mp\animscripts\zm_run::needsupdate();
|
||||
self setgoalpos( start_pos );
|
||||
}
|
||||
if ( !isDefined( self.crawler ) || self.crawler.health <= 0 )
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
|
||||
self orientmode( "face angle", self.crawler.angles[1] );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
self.crawler.is_inert = 1;
|
||||
self.crawler.ignoreall = 1;
|
||||
self.crawler notify( "stop_find_flesh" );
|
||||
@ -91,7 +97,7 @@ crawler_action()
|
||||
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" );
|
||||
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;
|
||||
@ -102,24 +108,25 @@ crawler_action()
|
||||
self set_zombie_run_cycle( "walk_crawlerhold" );
|
||||
self.locomotion = "walk_crawlerhold";
|
||||
self.setanimstatefromspeed = ::slothanimstatefromspeed;
|
||||
self.crawler_end = getTime() + 5000;
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( is_true( self.release_crawler ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
||||
if ( self sloth_is_traversing() )
|
||||
{
|
||||
while ( self sloth_is_traversing() )
|
||||
{
|
||||
wait 0,1;
|
||||
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;
|
||||
@ -133,47 +140,48 @@ crawler_action()
|
||||
{
|
||||
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 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() )
|
||||
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 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;
|
||||
}
|
||||
|
||||
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" );
|
||||
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" );
|
||||
@ -181,14 +189,16 @@ crawler_action()
|
||||
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 ) )
|
||||
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 maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
|
||||
self.crawler = undefined;
|
||||
self.context_done = 1;
|
||||
}
|
||||
@ -196,134 +206,114 @@ crawler_action()
|
||||
watch_sloth_on_exit_side()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( player ) && is_true( player.is_in_ghost_zone ) )
|
||||
{
|
||||
name = player.current_ghost_room_name;
|
||||
if ( isDefined( 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() )
|
||||
{
|
||||
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() )
|
||||
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;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
watch_sloth_on_same_side()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( is_true( self.context_done ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self.on_same_side = 0;
|
||||
player = self.candy_player;
|
||||
if ( isDefined( 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() )
|
||||
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() )
|
||||
{
|
||||
else if ( !player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
|
||||
self.on_same_side = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 0,25;
|
||||
|
||||
wait 0.25;
|
||||
}
|
||||
}
|
||||
|
||||
sloth_move_to_same_side()
|
||||
{
|
||||
self endon( "death" );
|
||||
if ( isDefined( self.teleport_time ) )
|
||||
|
||||
if ( isdefined( self.teleport_time ) )
|
||||
{
|
||||
if ( ( getTime() - self.teleport_time ) < 1000 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 0;
|
||||
}
|
||||
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
|
||||
{
|
||||
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 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 ( !isdefined( zone_sloth ) || !isdefined( zone_player ) )
|
||||
return false;
|
||||
|
||||
if ( zone_sloth == zone_player )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
append_hunched( asd_name )
|
||||
{
|
||||
if ( self.is_inside )
|
||||
{
|
||||
return asd_name + "_hunched";
|
||||
}
|
||||
|
||||
return asd_name;
|
||||
}
|
||||
|
||||
@ -337,9 +327,7 @@ crawler_update_locomotion()
|
||||
self.locomotion = "walk_crawlerhold_hunched";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
|
||||
else if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
|
||||
{
|
||||
if ( !self.is_inside )
|
||||
{
|
||||
@ -348,23 +336,23 @@ crawler_update_locomotion()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
crawler_watch_death()
|
||||
{
|
||||
self endon( "stop_crawler_watch" );
|
||||
|
||||
self.crawler waittill( "death" );
|
||||
|
||||
self stop_action();
|
||||
/#
|
||||
sloth_print( "crawler died" );
|
||||
#/
|
||||
if ( isDefined( self.crawler ) )
|
||||
{
|
||||
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 maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
|
||||
self.crawler = undefined;
|
||||
self.context_done = 1;
|
||||
}
|
||||
@ -375,7 +363,7 @@ crawler_pre_traverse()
|
||||
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 maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_sling_anim" );
|
||||
self.crawler thread crawler_traverse_idle();
|
||||
}
|
||||
|
||||
@ -383,10 +371,11 @@ crawler_traverse_idle()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_traverse_idle" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" );
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,7 +386,7 @@ crawler_post_traverse()
|
||||
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 maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_unsling_anim" );
|
||||
}
|
||||
|
||||
crawler_death()
|
||||
@ -413,22 +402,21 @@ crawler_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, swe
|
||||
|
||||
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 ) )
|
||||
if ( isdefined( self.crawler ) )
|
||||
{
|
||||
crawler_walk = "zm_crawler_crawlerhold_walk";
|
||||
|
||||
if ( self.is_inside )
|
||||
{
|
||||
crawler_walk += "_hunched";
|
||||
}
|
||||
|
||||
self.crawler setanimstatefromasd( crawler_walk );
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
#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()
|
||||
{
|
||||
@ -11,4 +13,5 @@ sloth_ffotd_init()
|
||||
|
||||
sloth_ffotd_prespawn()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,44 +1,43 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
if ( !isdefined( box ) )
|
||||
return false;
|
||||
/#
|
||||
self sloth_debug_context( box, sqrt( 32400 ) );
|
||||
#/
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
dist = distancesquared( self.origin, box.origin );
|
||||
|
||||
if ( dist < 32400 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
box_get_ground_offset()
|
||||
{
|
||||
vec_right = vectornormalize( anglesToRight( self.angles ) );
|
||||
box_pos = self.origin - ( vec_right * 36 );
|
||||
vec_right = vectornormalize( anglestoright( self.angles ) );
|
||||
box_pos = self.origin - vec_right * 36;
|
||||
ground_pos = groundpos( box_pos );
|
||||
return ground_pos;
|
||||
}
|
||||
@ -48,9 +47,10 @@ common_abort_box( box )
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
self.context_done = 1;
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
if ( isDefined( box ) )
|
||||
|
||||
if ( isdefined( box ) )
|
||||
{
|
||||
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
||||
{
|
||||
@ -58,59 +58,54 @@ common_abort_box( box )
|
||||
sloth_print( "box was opened...abort" );
|
||||
#/
|
||||
self.context_done = 1;
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
common_move_to_maze( box )
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( self common_abort_box( box ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
|
||||
{
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
|
||||
wait 0,2;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
common_move_to_courtyard( box )
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( self common_abort_box( box ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
|
||||
{
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
|
||||
wait 0,2;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
common_move_to_box( box, range, ignore_open, asd_name )
|
||||
{
|
||||
if ( isDefined( asd_name ) )
|
||||
if ( isdefined( asd_name ) )
|
||||
{
|
||||
anim_id = self getanimfromasd( asd_name, 0 );
|
||||
start_org = getstartorigin( box.origin, box.angles, anim_id );
|
||||
@ -120,200 +115,189 @@ common_move_to_box( box, range, ignore_open, asd_name )
|
||||
}
|
||||
else
|
||||
{
|
||||
vec_right = vectornormalize( anglesToRight( box.angles ) );
|
||||
box_pos = box.origin - ( vec_right * 36 );
|
||||
vec_right = vectornormalize( anglestoright( box.angles ) );
|
||||
box_pos = box.origin - vec_right * 36;
|
||||
ground_pos = groundpos( box_pos );
|
||||
self setgoalpos( ground_pos );
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
self.context_done = 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
if ( !is_true( ignore_open ) || is_true( box._box_open ) && is_true( box._box_opened_by_fire_sale ) )
|
||||
|
||||
if ( !is_true( ignore_open ) && ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) )
|
||||
{
|
||||
/#
|
||||
sloth_print( "box was opened...abort" );
|
||||
#/
|
||||
self.context_done = 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
dist = distancesquared( self.origin, ground_pos );
|
||||
|
||||
if ( dist < range )
|
||||
{
|
||||
break;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
}
|
||||
if ( isDefined( asd_name ) )
|
||||
|
||||
if ( isdefined( asd_name ) )
|
||||
{
|
||||
self setgoalpos( self.origin );
|
||||
self sloth_face_object( box, "angle", start_ang[ 1 ], 0,9 );
|
||||
self sloth_face_object( box, "angle", start_ang[1], 0.9 );
|
||||
}
|
||||
else
|
||||
{
|
||||
angles = vectorToAngle( vec_right );
|
||||
angles = vectortoangles( vec_right );
|
||||
self.anchor.origin = self.origin;
|
||||
self.anchor.angles = angles;
|
||||
self orientmode( "face angle", angles[1] );
|
||||
wait 0,2;
|
||||
wait 0.2;
|
||||
}
|
||||
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
self.context_done = 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
box_lock_action()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_action" );
|
||||
self maps/mp/zombies/_zm_ai_sloth::common_context_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 );
|
||||
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" );
|
||||
#/
|
||||
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_lock" );
|
||||
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_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;
|
||||
}
|
||||
|
||||
box_move_condition()
|
||||
{
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( box_current.script_noteworthy == "courtroom_chest1" )
|
||||
{
|
||||
if ( !maps/mp/zm_buried::is_courthouse_open() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 0;
|
||||
}
|
||||
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 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.chests.size )
|
||||
|
||||
for ( i = 0; i < level.chests.size; i++ )
|
||||
{
|
||||
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";
|
||||
}
|
||||
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 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
box_move_action()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_action" );
|
||||
self maps/mp/zombies/_zm_ai_sloth::common_context_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 );
|
||||
#/
|
||||
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 );
|
||||
|
||||
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 ) )
|
||||
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 );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
@ -325,9 +309,7 @@ box_move_action()
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( is_true( self.box_move_in_maze ) )
|
||||
else if ( is_true( self.box_move_in_maze ) )
|
||||
{
|
||||
if ( !self common_move_to_maze( undefined ) )
|
||||
{
|
||||
@ -335,36 +317,36 @@ box_move_action()
|
||||
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 );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
if ( !isdefined( self.box_model ) )
|
||||
{
|
||||
self.box_model = spawn( "script_model", twr_origin );
|
||||
self.box_model.angles = twr_angles;
|
||||
@ -377,32 +359,29 @@ box_notetracks( note, box )
|
||||
self.box_model show();
|
||||
self.box_model_visible = 1;
|
||||
}
|
||||
self.box_current maps/mp/zombies/_zm_magicbox::hide_chest();
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( self.box_move.zbarrier ) )
|
||||
{
|
||||
self.box_move.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
|
||||
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" )
|
||||
{
|
||||
else if ( note == "locked" )
|
||||
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
box_model_hide()
|
||||
{
|
||||
if ( isDefined( self.box_model ) )
|
||||
if ( isdefined( self.box_model ) )
|
||||
{
|
||||
self.box_model ghost();
|
||||
self.box_model_visible = 0;
|
||||
@ -411,19 +390,19 @@ box_model_hide()
|
||||
|
||||
box_move_interrupt()
|
||||
{
|
||||
if ( isDefined( self.box_current ) )
|
||||
if ( isdefined( self.box_current ) )
|
||||
{
|
||||
if ( isDefined( self.box_current.zbarrier ) )
|
||||
if ( isdefined( self.box_current.zbarrier ) )
|
||||
{
|
||||
self.box_current.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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();
|
||||
}
|
||||
@ -431,40 +410,39 @@ box_move_interrupt()
|
||||
box_spin_condition()
|
||||
{
|
||||
if ( flag( "moving_chest_now" ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
box_spin_action()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_action" );
|
||||
self maps/mp/zombies/_zm_ai_sloth::common_context_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 );
|
||||
maps\mp\animscripts\zm_shared::donotetracks( "cycle_magicbox_anim", ::box_kick, hackable );
|
||||
self.context_done = 1;
|
||||
}
|
||||
|
||||
@ -473,47 +451,48 @@ 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 );
|
||||
hackable maps\mp\zombies\_zm_hackables_box::respin_box( self.candy_player );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
box_trigger()
|
||||
{
|
||||
if ( isDefined( self.chest ) )
|
||||
if ( isdefined( self.chest ) )
|
||||
{
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.chest.unitrigger_stub );
|
||||
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 );
|
||||
}
|
||||
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 ) )
|
||||
{
|
||||
if ( !isDefined( hackable.chest.chest_user ) )
|
||||
if ( !isdefined( hackable.chest.chest_user ) )
|
||||
{
|
||||
self.context_done = 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ( !hackable maps/mp/zombies/_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
|
||||
|
||||
if ( !hackable maps\mp\zombies\_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
|
||||
{
|
||||
/#
|
||||
sloth_print( "hack_box_qualifier failed" );
|
||||
#/
|
||||
self.context_done = 1;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1,46 +1,43 @@
|
||||
#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 ( 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() )
|
||||
if ( !maps\mp\zm_buried::is_courthouse_open() )
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) )
|
||||
{
|
||||
return 1;
|
||||
if ( !maps\mp\zm_buried::is_courthouse_open() )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) )
|
||||
|
||||
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_courthouse_open() )
|
||||
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" ) )
|
||||
{
|
||||
return 1;
|
||||
if ( !maps\mp\zombies\_zm_ai_sloth::is_bar_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 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;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
watch_crash_pos()
|
||||
@ -50,18 +47,19 @@ watch_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 ( true )
|
||||
{
|
||||
while ( !isDefined( self.state ) || self.state != "berserk" )
|
||||
if ( !isdefined( self.state ) || self.state != "berserk" )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
_a82 = level.crash_pos;
|
||||
_k82 = getFirstArrayKey( _a82 );
|
||||
while ( isDefined( _k82 ) )
|
||||
|
||||
foreach ( pos in level.crash_pos )
|
||||
{
|
||||
pos = _a82[ _k82 ];
|
||||
dist = distancesquared( self.origin, pos );
|
||||
|
||||
if ( dist < dist_crash )
|
||||
{
|
||||
self.anchor.origin = self.origin;
|
||||
@ -69,12 +67,12 @@ watch_crash_pos()
|
||||
self linkto( self.anchor );
|
||||
self setclientfield( "sloth_berserk", 0 );
|
||||
self sloth_set_state( "crash", 0 );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
self unlink();
|
||||
}
|
||||
_k82 = getNextArrayKey( _a82, _k82 );
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,10 +81,9 @@ 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;
|
||||
}
|
||||
return true;
|
||||
else
|
||||
{
|
||||
self.reset_asd = undefined;
|
||||
@ -99,7 +96,8 @@ sloth_is_pain()
|
||||
#/
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
sloth_is_traversing()
|
||||
@ -107,10 +105,9 @@ 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;
|
||||
}
|
||||
|
||||
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;
|
||||
@ -119,58 +116,48 @@ sloth_is_traversing()
|
||||
#/
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
sloth_face_object( facee, type, data, dot_limit )
|
||||
{
|
||||
if ( type == "angle" )
|
||||
{
|
||||
self orientmode( "face angle", data );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( type == "point" )
|
||||
{
|
||||
else if ( type == "point" )
|
||||
self orientmode( "face point", data );
|
||||
}
|
||||
}
|
||||
time_started = getTime();
|
||||
while ( 1 )
|
||||
|
||||
time_started = gettime();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( type == "angle" )
|
||||
{
|
||||
delta = abs( self.angles[1] - data );
|
||||
|
||||
if ( delta <= 15 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else }
|
||||
else if ( isDefined( dot_limit ) )
|
||||
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 ( gettime() - time_started > 1000 )
|
||||
{
|
||||
/#
|
||||
sloth_print( "face took too long" );
|
||||
#/
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
/#
|
||||
time_elapsed = getTime() - time_started;
|
||||
time_elapsed = gettime() - time_started;
|
||||
sloth_print( "time to face: " + time_elapsed );
|
||||
#/
|
||||
}
|
||||
@ -178,26 +165,25 @@ sloth_face_object( facee, type, data, dot_limit )
|
||||
sloth_print( str )
|
||||
{
|
||||
/#
|
||||
if ( getDvarInt( #"B6252E7C" ) )
|
||||
if ( getdvarint( _hash_B6252E7C ) )
|
||||
{
|
||||
iprintln( "sloth: " + str );
|
||||
if ( isDefined( self.debug_msg ) )
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sloth_debug_context( item, dist )
|
||||
{
|
||||
@ -206,6 +192,6 @@ sloth_debug_context( item, dist )
|
||||
{
|
||||
debugstar( item.origin, 100, ( 1, 1, 1 ) );
|
||||
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +1,31 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ta_vaultfee ) )
|
||||
level.ta_vaultfee = 100;
|
||||
}
|
||||
if ( !isDefined( level.ta_tellerfee ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ta_tellerfee ) )
|
||||
level.ta_tellerfee = 100;
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
if ( !isDefined( level.banking_map ) )
|
||||
{
|
||||
if ( !isdefined( level.banking_map ) )
|
||||
level.banking_map = level.script;
|
||||
}
|
||||
|
||||
level thread bank_teller_init();
|
||||
level thread bank_deposit_box();
|
||||
}
|
||||
@ -34,12 +33,13 @@ main()
|
||||
bank_teller_init()
|
||||
{
|
||||
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
|
||||
if ( isDefined( level.bank_teller_dmg_trig ) )
|
||||
|
||||
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.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 );
|
||||
}
|
||||
@ -48,10 +48,12 @@ bank_teller_init()
|
||||
bank_teller_logic()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
while ( 1 )
|
||||
|
||||
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" )
|
||||
|
||||
if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
|
||||
{
|
||||
bank_teller_give_money();
|
||||
level.bank_teller_transfer_trig trigger_off();
|
||||
@ -65,23 +67,25 @@ bank_teller_give_money()
|
||||
level endon( "stop_bank_teller" );
|
||||
level.bank_teller_transfer_trig trigger_on();
|
||||
bank_transfer = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level.bank_teller_transfer_trig waittill( "trigger", player );
|
||||
if ( !is_player_valid( player, 0 ) || player.score < ( 1000 + level.ta_tellerfee ) )
|
||||
{
|
||||
|
||||
if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee )
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( bank_transfer ) )
|
||||
|
||||
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 = 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 );
|
||||
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" );
|
||||
}
|
||||
}
|
||||
@ -89,7 +93,9 @@ bank_teller_give_money()
|
||||
stop_bank_teller()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
level notify( "stop_bank_teller" );
|
||||
}
|
||||
|
||||
@ -106,14 +112,11 @@ delete_bank_teller()
|
||||
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 );
|
||||
}
|
||||
self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map );
|
||||
}
|
||||
|
||||
bank_deposit_box()
|
||||
@ -142,77 +145,55 @@ bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, ove
|
||||
{
|
||||
unitrigger_stub = spawnstruct();
|
||||
unitrigger_stub.origin = self.origin;
|
||||
if ( isDefined( self.script_angles ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( override_length ) )
|
||||
unitrigger_stub.script_length = override_length;
|
||||
}
|
||||
else if ( isDefined( self.script_length ) )
|
||||
{
|
||||
else if ( isdefined( self.script_length ) )
|
||||
unitrigger_stub.script_length = self.script_length;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_length = 32;
|
||||
}
|
||||
if ( isDefined( override_width ) )
|
||||
{
|
||||
|
||||
if ( isdefined( override_width ) )
|
||||
unitrigger_stub.script_width = override_width;
|
||||
}
|
||||
else if ( isDefined( self.script_width ) )
|
||||
{
|
||||
else if ( isdefined( self.script_width ) )
|
||||
unitrigger_stub.script_width = self.script_width;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_width = 32;
|
||||
}
|
||||
if ( isDefined( override_height ) )
|
||||
{
|
||||
|
||||
if ( isdefined( override_height ) )
|
||||
unitrigger_stub.script_height = override_height;
|
||||
}
|
||||
else if ( isDefined( self.script_height ) )
|
||||
{
|
||||
else if ( isdefined( self.script_height ) )
|
||||
unitrigger_stub.script_height = self.script_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_height = 64;
|
||||
}
|
||||
if ( isDefined( override_radius ) )
|
||||
{
|
||||
|
||||
if ( isdefined( override_radius ) )
|
||||
unitrigger_stub.script_radius = override_radius;
|
||||
}
|
||||
else if ( isDefined( self.radius ) )
|
||||
{
|
||||
else if ( isdefined( self.radius ) )
|
||||
unitrigger_stub.radius = self.radius;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.radius = 32;
|
||||
}
|
||||
if ( isDefined( self.script_unitrigger_type ) )
|
||||
{
|
||||
|
||||
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.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 );
|
||||
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 );
|
||||
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
|
||||
}
|
||||
|
||||
trigger_deposit_update_prompt( player )
|
||||
@ -221,41 +202,40 @@ trigger_deposit_update_prompt( player )
|
||||
{
|
||||
player show_balance();
|
||||
self sethintstring( "" );
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
trigger_deposit_think()
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
while ( !is_player_valid( 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 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();
|
||||
}
|
||||
}
|
||||
@ -266,47 +246,45 @@ trigger_withdraw_update_prompt( player )
|
||||
{
|
||||
self sethintstring( "" );
|
||||
player show_balance();
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
trigger_withdraw_think()
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
while ( !is_player_valid( 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 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();
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +1,34 @@
|
||||
#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 ) )
|
||||
{
|
||||
if ( !isdefined( level.buildablepools ) )
|
||||
level.buildablepools = [];
|
||||
}
|
||||
if ( !isDefined( level.buildablepools[ poolname ] ) )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
#/
|
||||
}
|
||||
|
||||
stub.buildable_pool = level.buildablepools[poolname];
|
||||
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
|
||||
stub.original_trigger_func = stub.trigger_func;
|
||||
@ -37,86 +39,70 @@ add_buildable_to_pool( stub, poolname )
|
||||
reregister_unitrigger( unitrigger_stub, new_trigger_func )
|
||||
{
|
||||
static = 0;
|
||||
if ( isDefined( unitrigger_stub.in_zone ) )
|
||||
{
|
||||
|
||||
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 ] ) )
|
||||
|
||||
if ( isdefined( level.buildablepools[poolname] ) )
|
||||
{
|
||||
count = level.buildablepools[poolname].stubs.size;
|
||||
while ( count > 1 )
|
||||
|
||||
if ( count > 1 )
|
||||
{
|
||||
targets = [];
|
||||
i = 0;
|
||||
while ( i < count )
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
p = randomint( count );
|
||||
if ( !isDefined( targets[ p ] ) )
|
||||
|
||||
if ( !isdefined( targets[p] ) )
|
||||
{
|
||||
targets[p] = i;
|
||||
i++;
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < count )
|
||||
{
|
||||
if ( isDefined( targets[ i ] ) && targets[ i ] != i )
|
||||
}
|
||||
}
|
||||
|
||||
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]] );
|
||||
}
|
||||
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
|
||||
foreach ( stub in self.stubs )
|
||||
{
|
||||
if ( isdefined( stub.bound_to_buildable ) )
|
||||
continue;
|
||||
|
||||
if ( stub.buildablezone buildable_has_piece( piece ) )
|
||||
{
|
||||
return stub;
|
||||
}
|
||||
}
|
||||
_k104 = getNextArrayKey( _a104, _k104 );
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@ -124,119 +110,92 @@ 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 ) )
|
||||
|
||||
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 ) ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
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 ) )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
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 ) )
|
||||
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 ) )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -291,11 +250,13 @@ swap_buildable_fields( stub1, stub2 )
|
||||
bench1 = undefined;
|
||||
bench2 = undefined;
|
||||
transfer_pos_as_is = 1;
|
||||
if ( isDefined( stub1.model.target ) && isDefined( stub2.model.target ) )
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( bench1 ) && isdefined( bench2 ) )
|
||||
{
|
||||
transfer_pos_as_is = 0;
|
||||
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
|
||||
@ -307,13 +268,16 @@ swap_buildable_fields( stub1, stub2 )
|
||||
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;
|
||||
@ -328,92 +292,90 @@ swap_buildable_fields( stub1, stub2 )
|
||||
pooled_buildable_place_think()
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
if ( isDefined( self.stub.built ) && self.stub.built )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub.built ) && self.stub.built )
|
||||
return buildable_place_think();
|
||||
}
|
||||
|
||||
player_built = undefined;
|
||||
while ( isDefined( self.stub.built ) && !self.stub.built )
|
||||
|
||||
while ( !( isdefined( self.stub.built ) && self.stub.built ) )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
while ( player != self.parent_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;
|
||||
}
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( bind_to.oncantuse ) )
|
||||
bind_to [[ bind_to.oncantuse ]]( player );
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( bind_to.onbeginuse ) )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
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.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
if ( isDefined( bind_to.onenduse ) )
|
||||
{
|
||||
|
||||
if ( isdefined( bind_to.onenduse ) )
|
||||
self.stub [[ bind_to.onenduse ]]( team, player, result );
|
||||
}
|
||||
while ( !result )
|
||||
{
|
||||
|
||||
if ( !result )
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( self.stub.bound_to_buildable ) && isDefined( bind_to ) )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub.onuse ) )
|
||||
self.stub [[ self.stub.onuse ]]( player );
|
||||
}
|
||||
if ( isDefined( player player_get_buildable_piece( slot ) ) )
|
||||
|
||||
if ( isdefined( player player_get_buildable_piece( slot ) ) )
|
||||
{
|
||||
prompt = player player_build( self.stub.buildablezone );
|
||||
player_built = player;
|
||||
@ -422,21 +384,22 @@ pooled_buildable_place_think()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch ( self.stub.persistent )
|
||||
{
|
||||
case 1:
|
||||
case "1":
|
||||
self bptrigger_think_persistent( player_built );
|
||||
break;
|
||||
case 0:
|
||||
case "0":
|
||||
self bptrigger_think_one_time( player_built );
|
||||
break;
|
||||
case 3:
|
||||
case "3":
|
||||
self bptrigger_think_unbuild( player_built );
|
||||
break;
|
||||
case 2:
|
||||
case "2":
|
||||
self bptrigger_think_one_use_and_fly( player_built );
|
||||
break;
|
||||
case 4:
|
||||
case "4":
|
||||
self [[ self.stub.custom_completion_callback ]]( player_built );
|
||||
break;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,42 +1,40 @@
|
||||
#include maps/mp/zombies/_zm_buildables;
|
||||
#include maps/mp/zombies/_zm_power;
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zombies/_zm;
|
||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
||||
#include maps/mp/zombies/_zm_equipment;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
#using_animtree( "zombie_springpad" );
|
||||
// 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\gametypes_zm\_weaponobjects;
|
||||
#include maps\mp\zombies\_zm;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\zombies\_zm_power;
|
||||
#include maps\mp\zombies\_zm_buildables;
|
||||
|
||||
init( pickupstring, howtostring )
|
||||
{
|
||||
if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
||||
{
|
||||
if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level.springpad_name = "equip_springpad_zm";
|
||||
init_animtree();
|
||||
maps/mp/zombies/_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
||||
maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||
maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
||||
maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||
level thread onplayerconnect();
|
||||
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
||||
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
||||
level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
|
||||
if ( !isDefined( level.springpad_trigger_radius ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.springpad_trigger_radius ) )
|
||||
level.springpad_trigger_radius = 72;
|
||||
}
|
||||
|
||||
thread wait_init_damage();
|
||||
}
|
||||
|
||||
wait_init_damage()
|
||||
{
|
||||
while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) )
|
||||
{
|
||||
while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) )
|
||||
wait 1;
|
||||
}
|
||||
level.springpad_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 );
|
||||
|
||||
level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 );
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
@ -44,6 +42,7 @@ onplayerconnect()
|
||||
for (;;)
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
@ -52,9 +51,11 @@ onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self thread setupwatchers();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread watchspringpaduse();
|
||||
}
|
||||
}
|
||||
@ -62,8 +63,9 @@ onplayerspawned()
|
||||
setupwatchers()
|
||||
{
|
||||
self waittill( "weapon_watchers_created" );
|
||||
watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
||||
watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject;
|
||||
|
||||
watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
||||
watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject;
|
||||
}
|
||||
|
||||
watchspringpaduse()
|
||||
@ -72,9 +74,11 @@ watchspringpaduse()
|
||||
self endon( "watchSpringPadUse" );
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "equipment_placed", weapon, weapname );
|
||||
|
||||
if ( weapname == level.springpad_name )
|
||||
{
|
||||
self cleanupoldspringpad();
|
||||
@ -86,17 +90,19 @@ watchspringpaduse()
|
||||
|
||||
cleanupoldspringpad()
|
||||
{
|
||||
if ( isDefined( self.buildablespringpad ) )
|
||||
if ( isdefined( self.buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( self.buildablespringpad.stub ) )
|
||||
if ( isdefined( self.buildablespringpad.stub ) )
|
||||
{
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
self.buildablespringpad.stub = undefined;
|
||||
}
|
||||
|
||||
self.buildablespringpad delete();
|
||||
self.springpad_kills = undefined;
|
||||
}
|
||||
if ( isDefined( level.springpad_sound_ent ) )
|
||||
|
||||
if ( isdefined( level.springpad_sound_ent ) )
|
||||
{
|
||||
level.springpad_sound_ent delete();
|
||||
level.springpad_sound_ent = undefined;
|
||||
@ -113,30 +119,35 @@ watchforcleanup()
|
||||
|
||||
placespringpad( origin, angles )
|
||||
{
|
||||
if ( isDefined( self.turret_placement ) && !self.turret_placement[ "result" ] )
|
||||
if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] )
|
||||
{
|
||||
forward = anglesToForward( angles );
|
||||
forward = anglestoforward( angles );
|
||||
origin -= -24 * forward;
|
||||
}
|
||||
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
|
||||
if ( isDefined( item ) )
|
||||
|
||||
item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.springpad_kills = self.springpad_kills;
|
||||
item.requires_pickup = 1;
|
||||
item.zombie_attack_callback = ::springpad_fling_attacker;
|
||||
}
|
||||
|
||||
self.springpad_kills = undefined;
|
||||
return item;
|
||||
}
|
||||
|
||||
dropspringpad()
|
||||
{
|
||||
item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 );
|
||||
if ( isDefined( item ) )
|
||||
item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.springpad_kills = self.springpad_kills;
|
||||
item.requires_pickup = 1;
|
||||
}
|
||||
|
||||
self.springpad_kills = undefined;
|
||||
return item;
|
||||
}
|
||||
@ -151,22 +162,16 @@ transferspringpad( fromplayer, toplayer )
|
||||
{
|
||||
buildablespringpad = toplayer.buildablespringpad;
|
||||
toarmed = 0;
|
||||
if ( isDefined( buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( buildablespringpad.is_armed ) )
|
||||
{
|
||||
toarmed = buildablespringpad.is_armed;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( buildablespringpad ) )
|
||||
toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed;
|
||||
|
||||
springpad_kills = toplayer.springpad_kills;
|
||||
fromarmed = 0;
|
||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( fromplayer.buildablespringpad.is_armed ) )
|
||||
{
|
||||
fromarmed = fromplayer.buildablespringpad.is_armed;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||
fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed;
|
||||
|
||||
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
||||
toplayer.buildablespringpad.original_owner = toplayer;
|
||||
toplayer.buildablespringpad.owner = toplayer;
|
||||
@ -176,25 +181,23 @@ transferspringpad( fromplayer, toplayer )
|
||||
fromplayer.buildablespringpad = buildablespringpad;
|
||||
fromplayer.springpad_kills = springpad_kills;
|
||||
fromplayer notify( "equip_springpad_zm_taken" );
|
||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
||||
|
||||
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||
{
|
||||
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
||||
fromplayer.buildablespringpad.original_owner = fromplayer;
|
||||
fromplayer.buildablespringpad.owner = fromplayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
}
|
||||
fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
}
|
||||
|
||||
springpad_in_range( delta, origin, radius )
|
||||
{
|
||||
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if ( distancesquared( self.target.origin, origin ) < radius * radius )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
springpad_power_on( origin, radius )
|
||||
@ -202,12 +205,11 @@ springpad_power_on( origin, radius )
|
||||
/#
|
||||
println( "^1ZM POWER: trap on\n" );
|
||||
#/
|
||||
if ( !isDefined( self.target ) )
|
||||
{
|
||||
if ( !isdefined( self.target ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.target.power_on = 1;
|
||||
self.target.power_on_time = getTime();
|
||||
self.target.power_on_time = gettime();
|
||||
}
|
||||
|
||||
springpad_power_off( origin, radius )
|
||||
@ -215,10 +217,9 @@ springpad_power_off( origin, radius )
|
||||
/#
|
||||
println( "^1ZM POWER: trap off\n" );
|
||||
#/
|
||||
if ( !isDefined( self.target ) )
|
||||
{
|
||||
if ( !isdefined( self.target ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.target.power_on = 0;
|
||||
}
|
||||
|
||||
@ -229,45 +230,50 @@ startspringpaddeploy( weapon, armed )
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
self thread watchforcleanup();
|
||||
electricradius = 45;
|
||||
if ( isDefined( self.springpad_kills ) )
|
||||
|
||||
if ( isdefined( self.springpad_kills ) )
|
||||
{
|
||||
weapon.springpad_kills = self.springpad_kills;
|
||||
self.springpad_kills = undefined;
|
||||
}
|
||||
if ( !isDefined( weapon.springpad_kills ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( weapon.springpad_kills ) )
|
||||
weapon.springpad_kills = 0;
|
||||
}
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
/#
|
||||
weapon thread debugspringpad( electricradius );
|
||||
#/
|
||||
if ( isDefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
||||
if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
||||
{
|
||||
weapon.power_on = 0;
|
||||
maps/mp/zombies/_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon );
|
||||
maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon.power_on = 1;
|
||||
}
|
||||
|
||||
if ( !weapon.power_on )
|
||||
{
|
||||
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
||||
}
|
||||
|
||||
self thread springpadthink( weapon, electricradius, armed );
|
||||
if ( isDefined( level.equipment_springpad_needs_power ) && !level.equipment_springpad_needs_power )
|
||||
|
||||
if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) )
|
||||
{
|
||||
|
||||
}
|
||||
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon );
|
||||
|
||||
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon );
|
||||
|
||||
weapon waittill( "death" );
|
||||
if ( isDefined( level.springpad_sound_ent ) )
|
||||
|
||||
if ( isdefined( level.springpad_sound_ent ) )
|
||||
{
|
||||
level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" );
|
||||
level.springpad_sound_ent delete();
|
||||
level.springpad_sound_ent = undefined;
|
||||
}
|
||||
|
||||
self notify( "springpad_cleanup" );
|
||||
}
|
||||
}
|
||||
@ -277,6 +283,8 @@ init_animtree()
|
||||
scriptmodelsuseanimtree( -1 );
|
||||
}
|
||||
|
||||
#using_animtree("zombie_springpad");
|
||||
|
||||
springpad_animate( weapon, armed )
|
||||
{
|
||||
self endon( "death" );
|
||||
@ -289,12 +297,13 @@ springpad_animate( weapon, armed )
|
||||
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
||||
weapon thread springpad_audio();
|
||||
prearmed = 0;
|
||||
if ( isDefined( armed ) && armed )
|
||||
{
|
||||
|
||||
if ( isdefined( armed ) && armed )
|
||||
prearmed = 1;
|
||||
}
|
||||
|
||||
fast_reset = 0;
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( !prearmed )
|
||||
{
|
||||
@ -302,32 +311,35 @@ springpad_animate( weapon, armed )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||
weapon thread playspringpadresetaudio( f_animlength );
|
||||
wait f_animlength;
|
||||
wait( f_animlength );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
||||
weapon thread playspringpadresetaudio( r_animlength );
|
||||
wait r_animlength;
|
||||
wait( r_animlength );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
wait 0.05;
|
||||
|
||||
prearmed = 0;
|
||||
weapon notify( "armed" );
|
||||
fast_reset = 0;
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
||||
|
||||
weapon waittill( "fling", fast );
|
||||
|
||||
fast_reset = fast;
|
||||
}
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
||||
wait l_animlength;
|
||||
wait( l_animlength );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -338,14 +350,16 @@ playspringpadresetaudio( time )
|
||||
ent = spawn( "script_origin", self.origin );
|
||||
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
||||
self thread deleteentwhensounddone( time, ent );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
ent delete();
|
||||
}
|
||||
|
||||
deleteentwhensounddone( time, ent )
|
||||
{
|
||||
self endon( "death" );
|
||||
wait time;
|
||||
wait( time );
|
||||
self notify( "springpadAudioCleanup" );
|
||||
ent delete();
|
||||
}
|
||||
@ -354,7 +368,9 @@ springpad_audio()
|
||||
{
|
||||
loop_ent = spawn( "script_origin", self.origin );
|
||||
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
loop_ent delete();
|
||||
}
|
||||
|
||||
@ -362,7 +378,8 @@ springpad_fx( weapon )
|
||||
{
|
||||
weapon endon( "death" );
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
||||
wait 1;
|
||||
@ -377,106 +394,106 @@ springpadthink( weapon, electricradius, armed )
|
||||
weapon endon( "death" );
|
||||
radiussquared = electricradius * electricradius;
|
||||
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
|
||||
trigger.origin += anglesToForward( flat_angle( weapon.angles ) ) * -15;
|
||||
trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15;
|
||||
trigger.angles = weapon.angles;
|
||||
trigger enablelinkto();
|
||||
trigger linkto( weapon );
|
||||
weapon.trigger = trigger;
|
||||
/#
|
||||
trigger.extent = ( 24, 24, 16 );
|
||||
trigger.extent = ( 24.0, 24.0, 16.0 );
|
||||
#/
|
||||
weapon thread springpadthinkcleanup( trigger );
|
||||
direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) );
|
||||
direction_vector = vectorScale( direction_forward, 1024 );
|
||||
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
|
||||
direction_vector = vectorscale( direction_forward, 1024 );
|
||||
direction_origin = weapon.origin + direction_vector;
|
||||
home_angles = weapon.angles;
|
||||
weapon.is_armed = 0;
|
||||
self thread springpad_fx( weapon );
|
||||
self thread springpad_animate( weapon, armed );
|
||||
|
||||
weapon waittill( "armed" );
|
||||
|
||||
weapon.is_armed = 1;
|
||||
weapon.fling_targets = [];
|
||||
self thread targeting_thread( weapon, trigger );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
wait_for_targets( weapon );
|
||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
|
||||
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
{
|
||||
weapon notify( "fling" );
|
||||
weapon notify( "fling", weapon.zombies_only );
|
||||
weapon.is_armed = 0;
|
||||
weapon.zombies_only = 1;
|
||||
_a490 = weapon.fling_targets;
|
||||
_k490 = getFirstArrayKey( _a490 );
|
||||
while ( isDefined( _k490 ) )
|
||||
|
||||
foreach ( ent in weapon.fling_targets )
|
||||
{
|
||||
ent = _a490[ _k490 ];
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
ent thread player_fling( weapon.origin + vectorScale( ( 0, 0, 1 ), 30 ), weapon.angles, direction_vector, weapon );
|
||||
ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon );
|
||||
continue;
|
||||
}
|
||||
else if ( isDefined( ent ) && isDefined( ent.custom_springpad_fling ) )
|
||||
{
|
||||
if ( !isDefined( self.num_zombies_flung ) )
|
||||
|
||||
if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) )
|
||||
{
|
||||
if ( !isdefined( self.num_zombies_flung ) )
|
||||
self.num_zombies_flung = 0;
|
||||
}
|
||||
|
||||
self.num_zombies_flung++;
|
||||
self notify( "zombie_flung" );
|
||||
ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
if ( !isDefined( self.num_zombies_flung ) )
|
||||
|
||||
if ( isdefined( ent ) )
|
||||
{
|
||||
if ( !isdefined( self.num_zombies_flung ) )
|
||||
self.num_zombies_flung = 0;
|
||||
}
|
||||
|
||||
self.num_zombies_flung++;
|
||||
self notify( "zombie_flung" );
|
||||
if ( !isDefined( weapon.fling_scaler ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( weapon.fling_scaler ) )
|
||||
weapon.fling_scaler = 1;
|
||||
}
|
||||
if ( isDefined( weapon.direction_vec_override ) )
|
||||
{
|
||||
|
||||
if ( isdefined( weapon.direction_vec_override ) )
|
||||
direction_vector = weapon.direction_vec_override;
|
||||
}
|
||||
|
||||
ent dodamage( ent.health + 666, ent.origin );
|
||||
ent startragdoll();
|
||||
ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler );
|
||||
ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
|
||||
weapon.springpad_kills++;
|
||||
}
|
||||
}
|
||||
_k490 = getNextArrayKey( _a490, _k490 );
|
||||
}
|
||||
|
||||
if ( weapon.springpad_kills >= 28 )
|
||||
{
|
||||
self thread springpad_expired( weapon );
|
||||
}
|
||||
|
||||
weapon.fling_targets = [];
|
||||
|
||||
weapon waittill( "armed" );
|
||||
|
||||
weapon.is_armed = 1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_targets( weapon )
|
||||
{
|
||||
weapon endon( "hi_priority_target" );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
{
|
||||
wait 0,15;
|
||||
wait 0.15;
|
||||
return;
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -487,64 +504,50 @@ targeting_thread( weapon, trigger )
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
weapon endon( "death" );
|
||||
weapon.zombies_only = 1;
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( weapon.is_armed )
|
||||
{
|
||||
zombies = getaiarray( level.zombie_team );
|
||||
_a577 = zombies;
|
||||
_k577 = getFirstArrayKey( _a577 );
|
||||
while ( isDefined( _k577 ) )
|
||||
{
|
||||
zombie = _a577[ _k577 ];
|
||||
if ( !isDefined( zombie ) || !isalive( zombie ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
||||
foreach ( zombie in zombies )
|
||||
{
|
||||
if ( !isdefined( zombie ) || !isalive( zombie ) )
|
||||
continue;
|
||||
|
||||
if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||
continue;
|
||||
|
||||
if ( zombie istouching( trigger ) )
|
||||
{
|
||||
weapon springpad_add_fling_ent( zombie );
|
||||
}
|
||||
}
|
||||
}
|
||||
_k577 = getNextArrayKey( _a577, _k577 );
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
_a605 = players;
|
||||
_k605 = getFirstArrayKey( _a605 );
|
||||
while ( isDefined( _k605 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a605[ _k605 ];
|
||||
if ( is_player_valid( player ) && player istouching( trigger ) )
|
||||
{
|
||||
weapon springpad_add_fling_ent( player );
|
||||
weapon.zombies_only = 0;
|
||||
}
|
||||
_k605 = getNextArrayKey( _a605, _k605 );
|
||||
}
|
||||
|
||||
if ( !weapon.zombies_only )
|
||||
{
|
||||
weapon notify( "hi_priority_target" );
|
||||
}
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
springpad_fling_attacker( ent )
|
||||
{
|
||||
springpad_add_fling_ent( ent );
|
||||
if ( isDefined( level.springpad_attack_delay ) )
|
||||
{
|
||||
wait level.springpad_attack_delay;
|
||||
}
|
||||
|
||||
if ( isdefined( level.springpad_attack_delay ) )
|
||||
wait( level.springpad_attack_delay );
|
||||
}
|
||||
|
||||
springpad_add_fling_ent( ent )
|
||||
@ -554,29 +557,30 @@ springpad_add_fling_ent( ent )
|
||||
|
||||
springpad_expired( weapon )
|
||||
{
|
||||
weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 );
|
||||
self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
|
||||
self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
self.springpad_kills = 0;
|
||||
}
|
||||
|
||||
player_fling( origin, angles, velocity, weapon )
|
||||
{
|
||||
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
||||
aorigin = ( origin + torigin ) * 0,5;
|
||||
trace = physicstrace( origin, torigin, vectorScale( ( 0, 0, 1 ), 15 ), ( 15, 15, 30 ), self );
|
||||
if ( isDefined( trace ) || !isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 )
|
||||
{
|
||||
if ( !isDefined( weapon.springpad_kills ) )
|
||||
aorigin = ( origin + torigin ) * 0.5;
|
||||
trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
|
||||
|
||||
if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 )
|
||||
{
|
||||
if ( !isdefined( weapon.springpad_kills ) )
|
||||
weapon.springpad_kills = 0;
|
||||
}
|
||||
|
||||
weapon.springpad_kills += 5;
|
||||
|
||||
if ( weapon.springpad_kills >= 28 )
|
||||
{
|
||||
weapon.owner thread springpad_expired( weapon );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
self setorigin( aorigin );
|
||||
wait_network_frame();
|
||||
self setvelocity( velocity );
|
||||
@ -585,47 +589,44 @@ player_fling( origin, angles, velocity, weapon )
|
||||
springpadthinkcleanup( trigger )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger ) )
|
||||
trigger delete();
|
||||
}
|
||||
}
|
||||
|
||||
debugspringpad( radius )
|
||||
{
|
||||
/#
|
||||
color_armed = ( 0, 0, 1 );
|
||||
color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 );
|
||||
while ( isDefined( self ) )
|
||||
color_armed = ( 0, 1, 0 );
|
||||
color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 );
|
||||
|
||||
while ( isdefined( self ) )
|
||||
{
|
||||
if ( getDvarInt( #"EB512CB7" ) )
|
||||
if ( getdvarint( _hash_EB512CB7 ) )
|
||||
{
|
||||
if ( isDefined( self.trigger ) )
|
||||
if ( isdefined( self.trigger ) )
|
||||
{
|
||||
color = color_unarmed;
|
||||
if ( isDefined( self.is_armed ) && self.is_armed )
|
||||
{
|
||||
|
||||
if ( isdefined( self.is_armed ) && self.is_armed )
|
||||
color = color_armed;
|
||||
}
|
||||
|
||||
vec = self.trigger.extent;
|
||||
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
||||
}
|
||||
color = ( 0, 0, 1 );
|
||||
|
||||
color = ( 0, 1, 0 );
|
||||
text = "";
|
||||
if ( isDefined( self.springpad_kills ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.springpad_kills ) )
|
||||
text = "" + self.springpad_kills + "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.owner.springpad_kills ) )
|
||||
{
|
||||
else if ( isdefined( self.owner.springpad_kills ) )
|
||||
text = "[" + self.owner.springpad_kills + "]";
|
||||
|
||||
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 );
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), text, color, 1, 0,5, 1 );
|
||||
}
|
||||
wait 0,05;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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 );
|
||||
maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -1,51 +1,42 @@
|
||||
#include maps/mp/zombies/_zm_powerups;
|
||||
#include maps/mp/gametypes_zm/zmeat;
|
||||
#include maps/mp/zombies/_zm_audio_announcer;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#include maps/mp/zombies/_zm_game_module_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_game_module_utility;
|
||||
#include maps\mp\zombies\_zm_laststand;
|
||||
#include maps\mp\zombies\_zm_audio_announcer;
|
||||
#include maps\mp\gametypes_zm\zmeat;
|
||||
#include maps\mp\zombies\_zm_powerups;
|
||||
|
||||
award_grenades_for_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
lethal_grenade = players[i] get_player_lethal_grenade();
|
||||
players[i] giveweapon( lethal_grenade );
|
||||
players[i] setweaponammoclip( lethal_grenade, 4 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
get_players_on_meat_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
players_on_team = [];
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
players_on_team[players_on_team.size] = players[i];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return players_on_team;
|
||||
}
|
||||
|
||||
@ -53,56 +44,44 @@ get_alive_players_on_meat_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
players_on_team = [];
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
i++;
|
||||
|
||||
if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
players_on_team[players_on_team.size] = players[i];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return players_on_team;
|
||||
}
|
||||
|
||||
init_minigun_ring()
|
||||
{
|
||||
if ( isDefined( level._minigun_ring ) )
|
||||
{
|
||||
if ( isdefined( level._minigun_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._minigun_ring.angles = ring_pos.angles;
|
||||
level._minigun_ring setmodel( ring_pos.script_parameters );
|
||||
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
|
||||
if ( isDefined( level._minigun_ring_clip ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_ring_clip ) )
|
||||
level._minigun_ring_clip linkto( level._minigun_ring );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
||||
}
|
||||
|
||||
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
|
||||
if ( isDefined( level._minigun_ring_trig ) )
|
||||
|
||||
if ( isdefined( level._minigun_ring_trig ) )
|
||||
{
|
||||
level._minigun_ring_trig enablelinkto();
|
||||
level._minigun_ring_trig linkto( level._minigun_ring );
|
||||
@ -113,41 +92,38 @@ init_minigun_ring()
|
||||
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
||||
}
|
||||
|
||||
level._minigun_ring thread move_ring( ring_pos );
|
||||
level._minigun_ring thread rotate_ring( 1 );
|
||||
}
|
||||
|
||||
init_ammo_ring()
|
||||
{
|
||||
if ( isDefined( level._ammo_ring ) )
|
||||
{
|
||||
if ( isdefined( level._ammo_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
name = level._meat_location + "_meat_ammo";
|
||||
ring_pos = getstruct( name, "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._ammo_ring.angles = ring_pos.angles;
|
||||
level._ammo_ring setmodel( ring_pos.script_parameters );
|
||||
name = level._meat_location + "_meat_ammo_clip";
|
||||
level._ammo_ring_clip = getent( name, "script_noteworthy" );
|
||||
if ( isDefined( level._ammo_ring_clip ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_ring_clip ) )
|
||||
level._ammo_ring_clip linkto( level._ammo_ring );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
||||
}
|
||||
|
||||
name = level._meat_location + "_meat_ammo_trig";
|
||||
level._ammo_ring_trig = getent( name, "targetname" );
|
||||
if ( isDefined( level._ammo_ring_clip ) )
|
||||
|
||||
if ( isdefined( level._ammo_ring_clip ) )
|
||||
{
|
||||
level._ammo_ring_trig enablelinkto();
|
||||
level._ammo_ring_trig linkto( level._ammo_ring );
|
||||
@ -158,63 +134,66 @@ init_ammo_ring()
|
||||
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
||||
}
|
||||
|
||||
level._ammo_ring thread move_ring( ring_pos );
|
||||
level._ammo_ring thread rotate_ring( 1 );
|
||||
}
|
||||
|
||||
init_splitter_ring()
|
||||
{
|
||||
if ( isDefined( level._splitter_ring ) )
|
||||
{
|
||||
if ( isdefined( level._splitter_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._splitter_ring.angles = ring_pos.angles;
|
||||
level._splitter_ring setmodel( ring_pos.script_parameters );
|
||||
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
|
||||
level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" );
|
||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
||||
|
||||
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||
{
|
||||
level._splitter_ring_trig1 enablelinkto();
|
||||
level._splitter_ring_trig2 enablelinkto();
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
||||
}
|
||||
|
||||
level._splitter_ring notsolid();
|
||||
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
||||
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
||||
level._meat_icon linkto( level._splitter_ring );
|
||||
level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
|
||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
||||
|
||||
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||
{
|
||||
level._splitter_ring_trig1 linkto( level._splitter_ring );
|
||||
level._splitter_ring_trig2 linkto( level._splitter_ring );
|
||||
level thread ring_toss( level._splitter_ring_trig1, "splitter" );
|
||||
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
||||
}
|
||||
|
||||
level._splitter_ring thread move_ring( ring_pos );
|
||||
}
|
||||
|
||||
ring_toss( trig, type )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
while ( isDefined( level._ring_triggered ) && level._ring_triggered )
|
||||
if ( isdefined( level._ring_triggered ) && level._ring_triggered )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving )
|
||||
|
||||
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) )
|
||||
{
|
||||
if ( level.item_meat istouching( trig ) )
|
||||
{
|
||||
@ -223,7 +202,8 @@ ring_toss( trig, type )
|
||||
level thread ring_cooldown();
|
||||
}
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -253,27 +233,25 @@ meat_splitter( trig )
|
||||
{
|
||||
level endon( "meat_grabbed" );
|
||||
level endon( "meat_kicked" );
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
exit_trig = getent( trig.target, "targetname" );
|
||||
exit_struct = getstruct( trig.target, "targetname" );
|
||||
while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
|
||||
while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||
wait 0.05;
|
||||
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
|
||||
playfx( level._effect["fw_burst"], exit_trig.origin );
|
||||
flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) );
|
||||
velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) );
|
||||
flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) );
|
||||
velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) );
|
||||
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
||||
velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) );
|
||||
velocity3 = ( velocity[0], velocity[1], 100 );
|
||||
@ -284,12 +262,12 @@ meat_splitter( trig )
|
||||
player._spawning_meat = 1;
|
||||
player endon( "disconnect" );
|
||||
thread split_meat( player, org, velocity1, velocity2, velocity );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||
wait 0,1;
|
||||
while ( isDefined( level.splitting_meat ) && level.splitting_meat )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||
wait 0.1;
|
||||
|
||||
while ( isdefined( level.splitting_meat ) && level.splitting_meat )
|
||||
wait 0.05;
|
||||
|
||||
player._spawning_meat = 0;
|
||||
}
|
||||
|
||||
@ -304,78 +282,69 @@ split_meat( player, org, vel1, vel2, vel3 )
|
||||
wait_network_frame();
|
||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
||||
real_meat = random( level._fake_meats );
|
||||
_a330 = level._fake_meats;
|
||||
_k330 = getFirstArrayKey( _a330 );
|
||||
while ( isDefined( _k330 ) )
|
||||
|
||||
foreach ( meat in level._fake_meats )
|
||||
{
|
||||
meat = _a330[ _k330 ];
|
||||
if ( real_meat != meat )
|
||||
{
|
||||
meat._fake_meat = 1;
|
||||
meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup();
|
||||
meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
meat._fake_meat = 0;
|
||||
level.item_meat = meat;
|
||||
}
|
||||
_k330 = getNextArrayKey( _a330, _k330 );
|
||||
}
|
||||
|
||||
level.splitting_meat = 0;
|
||||
}
|
||||
|
||||
minigun_prize( trig )
|
||||
{
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||
return;
|
||||
}
|
||||
|
||||
level thread minigun_toss_cooldown();
|
||||
|
||||
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" );
|
||||
level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||
|
||||
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" );
|
||||
level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
ammo_prize( trig )
|
||||
{
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||
return;
|
||||
}
|
||||
|
||||
playfx( level._effect["poltergeist"], trig.origin );
|
||||
level thread ammo_toss_cooldown();
|
||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" );
|
||||
level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" );
|
||||
level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
minigun_toss_cooldown()
|
||||
{
|
||||
level._minigun_toss_cooldown = 1;
|
||||
if ( isDefined( level._minigun_icon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_icon ) )
|
||||
level._minigun_icon delete();
|
||||
}
|
||||
|
||||
waittill_any_or_timeout( 120, "meat_end" );
|
||||
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
||||
level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin );
|
||||
@ -388,10 +357,10 @@ minigun_toss_cooldown()
|
||||
ammo_toss_cooldown()
|
||||
{
|
||||
level._ammo_toss_cooldown = 1;
|
||||
if ( isDefined( level._ammo_icon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_icon ) )
|
||||
level._ammo_icon delete();
|
||||
}
|
||||
|
||||
waittill_any_or_timeout( 60, "meat_end" );
|
||||
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
||||
level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin );
|
||||
@ -405,119 +374,120 @@ wait_for_team_death( team )
|
||||
{
|
||||
level endon( "meat_end" );
|
||||
encounters_team = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
wait 1;
|
||||
while ( isDefined( level._checking_for_save ) && level._checking_for_save )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
while ( isdefined( level._checking_for_save ) && level._checking_for_save )
|
||||
wait 0.1;
|
||||
|
||||
alive_team_players = get_alive_players_on_meat_team( team );
|
||||
while ( alive_team_players.size > 0 )
|
||||
|
||||
if ( alive_team_players.size > 0 )
|
||||
{
|
||||
encounters_team = alive_team_players[0]._encounters_team;
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if ( !isDefined( encounters_team ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( encounters_team ) )
|
||||
return;
|
||||
}
|
||||
|
||||
winning_team = "A";
|
||||
|
||||
if ( encounters_team == "A" )
|
||||
{
|
||||
winning_team = "B";
|
||||
}
|
||||
level notify( "meat_end" );
|
||||
|
||||
level notify( "meat_end", winning_team );
|
||||
}
|
||||
|
||||
check_should_save_player( team )
|
||||
{
|
||||
if ( !isDefined( level._meat_on_team ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isdefined( level._meat_on_team ) )
|
||||
return false;
|
||||
|
||||
level._checking_for_save = 1;
|
||||
players = get_players_on_meat_team( team );
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
player = players[i];
|
||||
if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
|
||||
if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
{
|
||||
while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
{
|
||||
if ( level._meat_on_team != player._meat_team )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
||||
{
|
||||
|
||||
if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
||||
break;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
if ( !isDefined( player ) )
|
||||
|
||||
if ( !isdefined( player ) )
|
||||
{
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player )
|
||||
|
||||
if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) )
|
||||
{
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
|
||||
if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
level thread revive_saved_player( player );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
watch_save_player()
|
||||
{
|
||||
if ( !isDefined( level._meat_on_team ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isdefined( level._meat_on_team ) )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||
return false;
|
||||
|
||||
level._checking_for_save = 1;
|
||||
while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
|
||||
while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) )
|
||||
{
|
||||
if ( level._meat_on_team != self._meat_team )
|
||||
{
|
||||
break;
|
||||
|
||||
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team )
|
||||
break;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team )
|
||||
|
||||
if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
||||
{
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
level thread revive_saved_player( self );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
revive_saved_player( player )
|
||||
@ -525,11 +495,11 @@ revive_saved_player( player )
|
||||
player endon( "disconnect" );
|
||||
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
||||
player playsound( level.zmb_laugh_alias );
|
||||
wait 0,25;
|
||||
wait 0.25;
|
||||
playfx( level._effect["poltergeist"], player.origin );
|
||||
playsoundatposition( "zmb_bolt", player.origin );
|
||||
earthquake( 0,5, 0,75, player.origin, 1000 );
|
||||
player thread maps/mp/zombies/_zm_laststand::auto_revive( player );
|
||||
earthquake( 0.5, 0.75, player.origin, 1000 );
|
||||
player thread maps\mp\zombies\_zm_laststand::auto_revive( player );
|
||||
player._saved_by_throw++;
|
||||
level._checking_for_save = 0;
|
||||
}
|
||||
@ -544,9 +514,9 @@ item_meat_spawn( origin )
|
||||
org = origin;
|
||||
player = get_players()[0];
|
||||
player._spawning_meat = 1;
|
||||
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) );
|
||||
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) );
|
||||
playsoundatposition( "zmb_spawn_powerup", org );
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
player._spawning_meat = undefined;
|
||||
}
|
||||
|
||||
@ -562,6 +532,7 @@ init_item_meat( gametype )
|
||||
set_gamemode_var_once( "item_meat_name", "item_head_zm" );
|
||||
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
||||
}
|
||||
|
||||
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
||||
set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) );
|
||||
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
|
||||
@ -576,40 +547,45 @@ meat_intro( launch_spot )
|
||||
level thread multi_launch( launch_spot );
|
||||
launch_meat( launch_spot );
|
||||
drop_meat( level._meat_start_point );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
launch_meat( launch_spot )
|
||||
{
|
||||
level waittill( "launch_meat" );
|
||||
|
||||
spots = getstructarray( launch_spot, "targetname" );
|
||||
if ( isDefined( spots ) && spots.size > 0 )
|
||||
|
||||
if ( isdefined( spots ) && spots.size > 0 )
|
||||
{
|
||||
spot = random( spots );
|
||||
meat = spawn( "script_model", spot.origin );
|
||||
meat setmodel( "tag_origin" );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
||||
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||
dest = spot;
|
||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
||||
|
||||
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||
{
|
||||
new_dest = getstruct( dest.target, "targetname" );
|
||||
dest = new_dest;
|
||||
dist = distance( new_dest.origin, meat.origin );
|
||||
time = dist / 700;
|
||||
meat moveto( new_dest.origin, time );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
}
|
||||
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect["fw_burst"], meat.origin );
|
||||
wait randomfloatrange( 0,2, 0,5 );
|
||||
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
||||
wait randomfloatrange( 0,5, 0,75 );
|
||||
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
||||
wait randomfloatrange( 0,5, 0,75 );
|
||||
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect["fw_burst"], meat.origin );
|
||||
meat delete();
|
||||
@ -619,41 +595,42 @@ launch_meat( launch_spot )
|
||||
multi_launch( launch_spot )
|
||||
{
|
||||
spots = getstructarray( launch_spot, "targetname" );
|
||||
if ( isDefined( spots ) && spots.size > 0 )
|
||||
|
||||
if ( isdefined( spots ) && spots.size > 0 )
|
||||
{
|
||||
x = 0;
|
||||
while ( x < 3 )
|
||||
for ( x = 0; x < 3; x++ )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < spots.size )
|
||||
for ( i = 0; i < spots.size; i++ )
|
||||
{
|
||||
delay = randomfloatrange( 0,1, 0,25 );
|
||||
delay = randomfloatrange( 0.1, 0.25 );
|
||||
level thread fake_launch( spots[i], delay );
|
||||
i++;
|
||||
}
|
||||
wait randomfloatrange( 0,25, 0,75 );
|
||||
|
||||
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||
|
||||
if ( x > 1 )
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
else wait randomfloatrange( 0,25, 0,75 );
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
|
||||
fake_launch( launch_spot, delay )
|
||||
{
|
||||
wait delay;
|
||||
wait randomfloatrange( 0,1, 4 );
|
||||
wait( delay );
|
||||
wait( randomfloatrange( 0.1, 4 ) );
|
||||
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
||||
meat setmodel( "tag_origin" );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
||||
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||
dest = launch_spot;
|
||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
||||
|
||||
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||
{
|
||||
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
||||
new_dest = getstruct( dest.target, "targetname" );
|
||||
@ -661,8 +638,10 @@ fake_launch( launch_spot, delay )
|
||||
dist = distance( new_dest.origin + random_offset, meat.origin );
|
||||
time = dist / 700;
|
||||
meat moveto( new_dest.origin + random_offset, time );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
}
|
||||
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect["fw_pre_burst"], meat.origin );
|
||||
meat delete();
|
||||
@ -670,7 +649,7 @@ fake_launch( launch_spot, delay )
|
||||
|
||||
drop_meat( drop_spot )
|
||||
{
|
||||
meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) );
|
||||
meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) );
|
||||
meat setmodel( "tag_origin" );
|
||||
dist = distance( meat.origin, drop_spot );
|
||||
time = dist / 400;
|
||||
@ -678,7 +657,9 @@ drop_meat( drop_spot )
|
||||
meat moveto( drop_spot, time );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
|
||||
playfx( level._effect["fw_impact"], drop_spot );
|
||||
level notify( "reset_meat" );
|
||||
meat delete();
|
||||
|
@ -1,22 +1,24 @@
|
||||
#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 );
|
||||
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 ) )
|
||||
{
|
||||
if ( !isdefined( level._registered_turned_matches ) )
|
||||
level._registered_turned_matches = [];
|
||||
}
|
||||
|
||||
match = spawnstruct();
|
||||
match.match_name = name;
|
||||
match.match_start_func = start_func;
|
||||
@ -26,17 +28,11 @@ register_turned_match( start_func, end_func, name )
|
||||
|
||||
get_registered_turned_match( name )
|
||||
{
|
||||
_a41 = level._registered_turned_matches;
|
||||
_k41 = getFirstArrayKey( _a41 );
|
||||
while ( isDefined( _k41 ) )
|
||||
foreach ( struct in level._registered_turned_matches )
|
||||
{
|
||||
struct = _a41[ _k41 ];
|
||||
if ( struct.match_name == name )
|
||||
{
|
||||
return struct;
|
||||
}
|
||||
_k41 = getNextArrayKey( _a41, _k41 );
|
||||
}
|
||||
}
|
||||
|
||||
set_current_turned_match( name )
|
||||
@ -51,14 +47,13 @@ get_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();
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -16,16 +18,14 @@ move_ring( ring )
|
||||
positions = getstructarray( ring.target, "targetname" );
|
||||
positions = array_randomize( positions );
|
||||
level endon( "end_game" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
_a23 = positions;
|
||||
_k23 = getFirstArrayKey( _a23 );
|
||||
while ( isDefined( _k23 ) )
|
||||
foreach ( position in positions )
|
||||
{
|
||||
position = _a23[ _k23 ];
|
||||
self moveto( position.origin, randomintrange( 30, 45 ) );
|
||||
|
||||
self waittill( "movedone" );
|
||||
_k23 = getNextArrayKey( _a23, _k23 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -34,11 +34,11 @@ rotate_ring( forward )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
dir = -360;
|
||||
|
||||
if ( forward )
|
||||
{
|
||||
dir = 360;
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self rotateyaw( dir, 9 );
|
||||
wait 9;
|
||||
|
@ -1,10 +1,13 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#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_weapons;
|
||||
#include maps\mp\zombies\_zm_laststand;
|
||||
#include maps\mp\zombies\_zm_pers_upgrades_functions;
|
||||
#include maps\mp\zombies\_zm_score;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
@ -12,86 +15,82 @@ init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgrad
|
||||
precacheitem( flourish_weapon_name );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_triggers.size )
|
||||
|
||||
for ( i = 0; i < melee_weapon_triggers.size; i++ )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||
if ( isDefined( knife_model ) )
|
||||
{
|
||||
|
||||
if ( isdefined( knife_model ) )
|
||||
knife_model hide();
|
||||
}
|
||||
|
||||
melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format )
|
||||
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
else
|
||||
{
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon_display = get_weapon_display_name( weapon_name );
|
||||
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
}
|
||||
|
||||
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||
i++;
|
||||
}
|
||||
|
||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_structs.size )
|
||||
{
|
||||
|
||||
for ( i = 0; i < melee_weapon_structs.size; i++ )
|
||||
prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
i++;
|
||||
}
|
||||
|
||||
register_melee_weapon_for_level( weapon_name );
|
||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ballistic_weapon_name ) )
|
||||
level.ballistic_weapon_name = [];
|
||||
}
|
||||
|
||||
level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
|
||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
|
||||
level.ballistic_upgraded_weapon_name = [];
|
||||
}
|
||||
|
||||
level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
|
||||
/#
|
||||
if ( !isDefined( level.zombie_weapons[ weapon_name ] ) )
|
||||
{
|
||||
if ( isDefined( level.devgui_add_weapon ) )
|
||||
if ( !isdefined( level.zombie_weapons[weapon_name] ) )
|
||||
{
|
||||
if ( isdefined( level.devgui_add_weapon ) )
|
||||
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
if ( isDefined( stub ) )
|
||||
if ( isdefined( stub ) )
|
||||
{
|
||||
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format )
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
stub.hint_string = hint_string;
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
@ -107,7 +106,8 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
||||
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||
stub.hint_parm2 = cost;
|
||||
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
@ -118,6 +118,7 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
stub.cost = cost;
|
||||
stub.weapon_name = weapon_name;
|
||||
stub.vo_dialog_id = vo_dialog_id;
|
||||
@ -132,46 +133,36 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
||||
add_stub( stub, weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( stub ) && isdefined( melee_weapon ) )
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||
}
|
||||
}
|
||||
|
||||
give_melee_weapon_by_name( weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( melee_weapon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( melee_weapon ) )
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
}
|
||||
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
@ -185,210 +176,186 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
|
||||
melee_weapon.hint_string = hint_string;
|
||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||
melee_weapon.flourish_fn = flourish_fn;
|
||||
if ( !isDefined( level._melee_weapons ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level._melee_weapons ) )
|
||||
level._melee_weapons = [];
|
||||
}
|
||||
|
||||
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||
}
|
||||
|
||||
player_can_see_weapon_prompt( weapon_name )
|
||||
{
|
||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
spectator_respawn_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
{
|
||||
melee_triggers[i] setvisibletoall();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||
{
|
||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide( wallbuy_targetname )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
{
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
melee_triggers[i] setinvisibletoplayer( self );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
has_any_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
has_upgraded_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
give_ballistic_knife( weapon_string, upgraded )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
{
|
||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) )
|
||||
{
|
||||
if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
||||
}
|
||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
|
||||
if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||
}
|
||||
}
|
||||
|
||||
return weapon_string;
|
||||
}
|
||||
|
||||
change_melee_weapon( weapon_name, current_weapon )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||
{
|
||||
self takeweapon( current_melee_weapon );
|
||||
unacquire_weapon_toggle( current_melee_weapon );
|
||||
}
|
||||
|
||||
self set_player_melee_weapon( weapon_name );
|
||||
had_ballistic = 0;
|
||||
had_ballistic_upgraded = 0;
|
||||
ballistic_was_primary = 0;
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
i = 0;
|
||||
while ( i < primaryweapons.size )
|
||||
|
||||
for ( i = 0; i < primaryweapons.size; i++ )
|
||||
{
|
||||
primary_weapon = primaryweapons[i];
|
||||
|
||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||
{
|
||||
had_ballistic = 1;
|
||||
|
||||
if ( primary_weapon == current_weapon )
|
||||
{
|
||||
ballistic_was_primary = 1;
|
||||
}
|
||||
|
||||
self notify( "zmb_lost_knife" );
|
||||
self takeweapon( primary_weapon );
|
||||
unacquire_weapon_toggle( primary_weapon );
|
||||
|
||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||
{
|
||||
had_ballistic_upgraded = 1;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if ( had_ballistic )
|
||||
{
|
||||
if ( had_ballistic_upgraded )
|
||||
{
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
|
||||
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
|
||||
self giveweapon( new_ballistic, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
return current_weapon;
|
||||
}
|
||||
|
||||
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
{
|
||||
self.first_time_triggered = 0;
|
||||
while ( isDefined( self.stub ) )
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
if ( isDefined( self.stub.first_time_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub.first_time_triggered ) )
|
||||
self.first_time_triggered = self.stub.first_time_triggered;
|
||||
}
|
||||
|
||||
weapon_name = self.stub.weapon_name;
|
||||
cost = self.stub.cost;
|
||||
flourish_fn = self.stub.flourish_fn;
|
||||
@ -397,135 +364,130 @@ melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapo
|
||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||
players = getplayers();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||
{
|
||||
self setinvisibletoplayer( players[i] );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
if ( !is_player_valid( player ) )
|
||||
{
|
||||
player thread ignore_triggers( 0,5 );
|
||||
player thread ignore_triggers( 0.5 );
|
||||
continue;
|
||||
}
|
||||
else if ( player in_revive_trigger() )
|
||||
|
||||
if ( player in_revive_trigger() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player isthrowinggrenade() )
|
||||
|
||||
if ( player isthrowinggrenade() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player.is_drinking > 0 )
|
||||
|
||||
if ( player.is_drinking > 0 )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
|
||||
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( player isswitchingweapons() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else current_weapon = player getcurrentweapon();
|
||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
||||
|
||||
current_weapon = player getcurrentweapon();
|
||||
|
||||
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
player_has_weapon = player hasweapon( weapon_name );
|
||||
|
||||
if ( !player_has_weapon )
|
||||
{
|
||||
cost = self.stub.cost;
|
||||
|
||||
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||
cost = int( cost / 2 );
|
||||
|
||||
if ( player.score >= cost )
|
||||
{
|
||||
if ( self.first_time_triggered == 0 )
|
||||
{
|
||||
model = getent( self.target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
|
||||
if ( isdefined( model ) )
|
||||
model thread melee_weapon_show( player );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.clientfieldname ) )
|
||||
{
|
||||
else if ( isdefined( self.clientfieldname ) )
|
||||
level setclientfield( self.clientfieldname, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
self.first_time_triggered = 1;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
self.stub.first_time_triggered = 1;
|
||||
}
|
||||
}
|
||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
|
||||
|
||||
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||
}
|
||||
else
|
||||
{
|
||||
play_sound_on_ent( "no_purchase" );
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
}
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
self setinvisibletoplayer( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
melee_weapon_show( player )
|
||||
{
|
||||
player_angles = vectorToAngle( player.origin - self.origin );
|
||||
player_angles = vectortoangles( player.origin - self.origin );
|
||||
player_yaw = player_angles[1];
|
||||
weapon_yaw = self.angles[1];
|
||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
||||
yaw_diff = angleclamp180( player_yaw - weapon_yaw );
|
||||
|
||||
if ( yaw_diff > 0 )
|
||||
{
|
||||
yaw = weapon_yaw - 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = weapon_yaw + 90;
|
||||
}
|
||||
|
||||
self.og_origin = self.origin;
|
||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0,05;
|
||||
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0.05;
|
||||
self show();
|
||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||
time = 1;
|
||||
@ -534,24 +496,22 @@ melee_weapon_show( player )
|
||||
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||
{
|
||||
if ( isDefined( flourish_fn ) )
|
||||
{
|
||||
if ( isdefined( flourish_fn ) )
|
||||
self thread [[ flourish_fn ]]();
|
||||
}
|
||||
|
||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
if ( isDefined( trigger ) )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
if ( isdefined( trigger ) )
|
||||
trigger setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
self trigger_hide_all();
|
||||
}
|
||||
}
|
||||
@ -577,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
#/
|
||||
self enable_player_move_states();
|
||||
weapon = flourish_weapon_name;
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
self takeweapon( weapon );
|
||||
self.lastactiveweapon = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
self takeweapon( weapon );
|
||||
self giveweapon( weapon_name );
|
||||
gun = change_melee_weapon( weapon_name, gun );
|
||||
|
||||
if ( self hasweapon( "knife_zm" ) )
|
||||
{
|
||||
self takeweapon( "knife_zm" );
|
||||
}
|
||||
|
||||
if ( self is_multiple_drinking() )
|
||||
{
|
||||
self decrement_is_drinking();
|
||||
@ -602,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
return;
|
||||
}
|
||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||
{
|
||||
self switchtoweapon( gun );
|
||||
}
|
||||
else
|
||||
{
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
{
|
||||
|
||||
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
self switchtoweapon( primaryweapons[0] );
|
||||
}
|
||||
}
|
||||
|
||||
self waittill( "weapon_change_complete" );
|
||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
||||
{
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
|
||||
self decrement_is_drinking();
|
||||
}
|
||||
}
|
||||
|
@ -1,23 +1,25 @@
|
||||
#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 );
|
||||
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 );
|
||||
@ -26,11 +28,12 @@ init_divetonuke()
|
||||
|
||||
divetonuke_precache()
|
||||
{
|
||||
if ( isDefined( level.divetonuke_precache_override_func ) )
|
||||
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" );
|
||||
@ -61,49 +64,48 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio
|
||||
use_trigger.target = "vending_divetonuke";
|
||||
perk_machine.script_string = "divetonuke_perk";
|
||||
perk_machine.targetname = "vending_divetonuke";
|
||||
if ( isDefined( bump_trigger ) )
|
||||
{
|
||||
|
||||
if ( isdefined( bump_trigger ) )
|
||||
bump_trigger.script_string = "divetonuke_perk";
|
||||
}
|
||||
}
|
||||
|
||||
divetonuke_perk_machine_think()
|
||||
{
|
||||
init_divetonuke();
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
machine = getentarray( "vending_divetonuke", "targetname" );
|
||||
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
||||
i = 0;
|
||||
while ( i < machine.size )
|
||||
{
|
||||
|
||||
for ( i = 0; i < machine.size; i++ )
|
||||
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 )
|
||||
|
||||
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,3, 0,4, 3 );
|
||||
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();
|
||||
i++;
|
||||
}
|
||||
|
||||
level notify( "specialty_flakjacket_power_on" );
|
||||
array_thread( machine_triggers, ::set_power_on, 1 );
|
||||
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
@ -111,17 +113,14 @@ divetonuke_perk_machine_think()
|
||||
divetonuke_host_migration_func()
|
||||
{
|
||||
flop = getentarray( "vending_divetonuke", "targetname" );
|
||||
_a138 = flop;
|
||||
_k138 = getFirstArrayKey( _a138 );
|
||||
while ( isDefined( _k138 ) )
|
||||
|
||||
foreach ( perk in flop )
|
||||
{
|
||||
perk = _a138[ _k138 ];
|
||||
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model )
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,10 +129,44 @@ 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"];
|
||||
|
||||
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 );
|
||||
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
||||
wait 1;
|
||||
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,15 @@
|
||||
#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 ) )
|
||||
{
|
||||
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||
level.ballistic_knife_autorecover = 1;
|
||||
}
|
||||
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 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" );
|
||||
@ -21,9 +22,12 @@ on_spawn( watcher, player )
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( endpos ) )
|
||||
{
|
||||
retrievable_model = spawn( "script_model", endpos );
|
||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
@ -31,47 +35,38 @@ on_spawn( watcher, player )
|
||||
retrievable_model.owner = player;
|
||||
retrievable_model.angles = angles;
|
||||
retrievable_model.name = watcher.weapon;
|
||||
if ( isDefined( prey ) )
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
{
|
||||
if ( isplayer( prey ) && player.team == prey.team )
|
||||
{
|
||||
isfriendly = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isai( prey ) && player.team == prey.team )
|
||||
{
|
||||
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 )
|
||||
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" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||
else
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||
|
||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||
}
|
||||
}
|
||||
@ -90,13 +85,15 @@ on_spawn_retrieve_trigger( watcher, player )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( retrievable_model ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger_pos = [];
|
||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
||||
|
||||
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||
{
|
||||
trigger_pos[0] = prey.origin[0];
|
||||
trigger_pos[1] = prey.origin[1];
|
||||
@ -104,13 +101,14 @@ on_spawn_retrieve_trigger( watcher, player )
|
||||
}
|
||||
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 ] );
|
||||
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;
|
||||
trigger_pos[2] -= 50.0;
|
||||
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||
}
|
||||
else
|
||||
@ -118,32 +116,28 @@ on_spawn_retrieve_trigger( watcher, player )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
pickup_trigger linkto( prey );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger linkto( retrievable_model );
|
||||
}
|
||||
if ( isDefined( level.knife_planted ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
}
|
||||
@ -152,12 +146,13 @@ debug_print( endpos )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
print3d( endpos, "pickup_trigger" );
|
||||
wait 0,05;
|
||||
#/
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||
@ -167,53 +162,45 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
|
||||
level endon( "game_ended" );
|
||||
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
trigger waittill( "trigger", player );
|
||||
while ( !isalive( player ) )
|
||||
{
|
||||
|
||||
if ( !isalive( player ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
|
||||
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||
{
|
||||
if ( isdefined( playersoundonuse ) )
|
||||
player playlocalsound( playersoundonuse );
|
||||
}
|
||||
if ( isDefined( npcsoundonuse ) )
|
||||
{
|
||||
|
||||
if ( isdefined( npcsoundonuse ) )
|
||||
player playsound( npcsoundonuse );
|
||||
}
|
||||
|
||||
player thread [[ callback ]]( weapon, model, trigger );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -223,13 +210,13 @@ 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;
|
||||
@ -242,20 +229,20 @@ pick_up( weapon, model, trigger )
|
||||
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" );
|
||||
|
||||
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 ) )
|
||||
if ( isdefined( self ) )
|
||||
{
|
||||
if ( isdefined( self.glowing_model ) )
|
||||
self.glowing_model delete();
|
||||
}
|
||||
|
||||
self delete();
|
||||
}
|
||||
}
|
||||
@ -271,12 +258,14 @@ 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 ) )
|
||||
|
||||
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||
{
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
}
|
||||
@ -286,9 +275,11 @@ 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 physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
|
||||
@ -296,12 +287,15 @@ update_retrieve_trigger( player )
|
||||
{
|
||||
self endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
||||
|
||||
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 );
|
||||
|
@ -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 ) )
|
||||
{
|
||||
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" );
|
||||
|
||||
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" );
|
||||
}
|
||||
|
@ -1,30 +1,30 @@
|
||||
#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 ) )
|
||||
{
|
||||
if ( !isdefined( level.claymores_max_per_player ) )
|
||||
level.claymores_max_per_player = 12;
|
||||
}
|
||||
|
||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
{
|
||||
model = getent( trigs[i].target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
|
||||
if ( isdefined( model ) )
|
||||
model hide();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
array_thread( trigs, ::buy_claymores );
|
||||
level thread give_claymores_after_rounds();
|
||||
level.claymores_on_damage = ::satchel_damage;
|
||||
@ -41,26 +41,28 @@ buy_claymores()
|
||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
self endon( "kill_trigger" );
|
||||
if ( !isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.stub ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
|
||||
self.stub.claymores_triggered = 0;
|
||||
}
|
||||
|
||||
self.claymores_triggered = self.stub.claymores_triggered;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
while ( who in_revive_trigger() )
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
continue;
|
||||
|
||||
if ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
while ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.zombie_cost )
|
||||
@ -68,43 +70,41 @@ buy_claymores()
|
||||
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 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 ) )
|
||||
{
|
||||
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 );
|
||||
|
||||
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
|
||||
{
|
||||
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" );
|
||||
who play_sound_on_ent( "no_purchase" );
|
||||
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -116,33 +116,30 @@ claymore_unitrigger_update_prompt( player )
|
||||
{
|
||||
self sethintstring( "" );
|
||||
self setcursorhint( "HINT_NOICON" );
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
set_claymore_visible()
|
||||
{
|
||||
players = get_players();
|
||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
players = get_players();
|
||||
}
|
||||
@ -151,19 +148,17 @@ set_claymore_visible()
|
||||
claymore_safe_to_plant()
|
||||
{
|
||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||
return self [[ level.claymore_safe_to_plant ]]();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
claymore_wait_and_detonate()
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
self detonate( self.owner );
|
||||
}
|
||||
|
||||
@ -172,40 +167,38 @@ claymore_watch()
|
||||
self endon( "death" );
|
||||
self notify( "claymore_watch" );
|
||||
self endon( "claymore_watch" );
|
||||
while ( 1 )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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;
|
||||
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 ) )
|
||||
{
|
||||
if ( !isdefined( self.claymores ) )
|
||||
self.claymores = [];
|
||||
}
|
||||
|
||||
self thread claymore_watch();
|
||||
self giveweapon( "claymore_zm" );
|
||||
self set_player_placeable_mine( "claymore_zm" );
|
||||
@ -215,22 +208,22 @@ claymore_setup()
|
||||
|
||||
adjust_trigger_origin( origin )
|
||||
{
|
||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
||||
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 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();
|
||||
@ -244,6 +237,7 @@ pickup_claymores()
|
||||
{
|
||||
clip_ammo = player getweaponammoclip( self.name );
|
||||
clip_max_ammo = weaponclipsize( self.name );
|
||||
|
||||
if ( clip_ammo >= clip_max_ammo )
|
||||
{
|
||||
self destroy_ent();
|
||||
@ -251,15 +245,16 @@ pickup_claymores()
|
||||
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 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 )
|
||||
@ -272,13 +267,14 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger trigger_on();
|
||||
trigger linkto( self );
|
||||
}
|
||||
@ -288,13 +284,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill( "zmb_disable_claymore_prompt" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger unlink();
|
||||
trigger trigger_off();
|
||||
}
|
||||
@ -302,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
|
||||
shouldaffectweaponobject( object )
|
||||
{
|
||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
||||
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||
dirtopos = pos - object.origin;
|
||||
objectforward = anglesToForward( object.angles );
|
||||
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;
|
||||
@ -324,44 +321,40 @@ claymore_detonation()
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
damagearea waittill( "trigger", ent );
|
||||
if ( isDefined( self.owner ) && ent == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && ent == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
continue;
|
||||
}
|
||||
while ( !ent shouldaffectweaponobject( self ) )
|
||||
{
|
||||
|
||||
if ( !ent shouldaffectweaponobject( self ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||
{
|
||||
self playsound( "wpn_claymore_alert" );
|
||||
wait 0,4;
|
||||
if ( isDefined( self.owner ) )
|
||||
{
|
||||
wait 0.4;
|
||||
|
||||
if ( isdefined( self.owner ) )
|
||||
self detonate( self.owner );
|
||||
}
|
||||
else
|
||||
{
|
||||
self detonate( undefined );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -370,16 +363,15 @@ claymore_detonation()
|
||||
delete_claymores_on_death( player, ent )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player ) )
|
||||
arrayremovevalue( player.claymores, self );
|
||||
}
|
||||
wait 0,05;
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
|
||||
wait 0.05;
|
||||
|
||||
if ( isdefined( ent ) )
|
||||
ent delete();
|
||||
}
|
||||
}
|
||||
|
||||
satchel_damage()
|
||||
{
|
||||
@ -388,36 +380,36 @@ satchel_damage()
|
||||
self.health = 100000;
|
||||
self.maxhealth = self.health;
|
||||
attacker = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "damage", amount, attacker );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.health = self.maxhealth;
|
||||
while ( !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 );
|
||||
@ -425,7 +417,7 @@ satchel_damage()
|
||||
|
||||
reset_satchel_explode_this_frame()
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level.satchelexplodethisframe = 0;
|
||||
}
|
||||
|
||||
@ -438,14 +430,15 @@ play_claymore_effects()
|
||||
|
||||
give_claymores_after_rounds()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||
|
||||
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||
{
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
@ -454,7 +447,6 @@ give_claymores_after_rounds()
|
||||
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
||||
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -464,13 +456,11 @@ 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 );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,68 +1,67 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
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;
|
||||
|
||||
level.tazer_flourish_delay = 0.5;
|
||||
}
|
||||
|
||||
watch_bodily_functions()
|
||||
{
|
||||
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro )
|
||||
{
|
||||
if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro )
|
||||
return;
|
||||
}
|
||||
while ( isDefined( self ) && isalive( self ) )
|
||||
|
||||
while ( isdefined( self ) && isalive( self ) )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
while ( type != "MOD_MELEE" )
|
||||
{
|
||||
|
||||
if ( type != "MOD_MELEE" )
|
||||
continue;
|
||||
}
|
||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||
{
|
||||
|
||||
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 = [];
|
||||
@ -81,9 +80,11 @@ onplayerconnect()
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread watchtazerknucklemelee();
|
||||
}
|
||||
}
|
||||
@ -91,28 +92,30 @@ onplayerspawned()
|
||||
watchtazerknucklemelee()
|
||||
{
|
||||
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" );
|
||||
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 );
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,17 +1,19 @@
|
||||
#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 ) )
|
||||
{
|
||||
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 );
|
||||
@ -20,139 +22,111 @@ main()
|
||||
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 );
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
wl_clear_stored_weapondata()
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
triggerweaponslockerwatch()
|
||||
{
|
||||
unitrigger_stub = spawnstruct();
|
||||
unitrigger_stub.origin = self.origin;
|
||||
if ( isDefined( self.script_angles ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.script_length ) )
|
||||
unitrigger_stub.script_length = self.script_length;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_length = 16;
|
||||
}
|
||||
if ( isDefined( self.script_width ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.script_width ) )
|
||||
unitrigger_stub.script_width = self.script_width;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_width = 32;
|
||||
}
|
||||
if ( isDefined( self.script_height ) )
|
||||
{
|
||||
|
||||
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.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 );
|
||||
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 );
|
||||
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;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
|
||||
{
|
||||
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
||||
{
|
||||
@ -160,6 +134,7 @@ triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
|
||||
}
|
||||
}
|
||||
@ -173,74 +148,85 @@ triggerweaponslockerthinkupdateprompt( player )
|
||||
triggerweaponslockerthink()
|
||||
{
|
||||
self.parent_player thread triggerweaponslockerweaponchangethink( self );
|
||||
while ( 1 )
|
||||
|
||||
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 );
|
||||
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
||||
{
|
||||
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 );
|
||||
|
||||
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" );
|
||||
#/
|
||||
player takeweapon( curweapon );
|
||||
primaries = player getweaponslistprimaries();
|
||||
if ( isDefined( primaries[ 0 ] ) )
|
||||
{
|
||||
|
||||
if ( isdefined( primaries[0] ) )
|
||||
player switchtoweapon( primaries[0] );
|
||||
}
|
||||
else
|
||||
{
|
||||
player maps/mp/zombies/_zm_weapons::give_fallback_weapon();
|
||||
}
|
||||
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" );
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.remap_weapon_locker_weapons ) )
|
||||
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
|
||||
}
|
||||
|
||||
weapontogive = weapondata["name"];
|
||||
while ( !triggerweaponslockerisvalidweapon( weapontogive ) )
|
||||
|
||||
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 );
|
||||
while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
|
||||
|
||||
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 )
|
||||
|
||||
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon )
|
||||
{
|
||||
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon );
|
||||
while ( !triggerweaponslockerisvalidweapon( 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 );
|
||||
|
||||
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 maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
|
||||
player wl_clear_stored_weapondata();
|
||||
player wl_set_stored_weapondata( curweapondata );
|
||||
player switchtoweapon( weapondata["name"] );
|
||||
@ -248,16 +234,18 @@ triggerweaponslockerthink()
|
||||
}
|
||||
else
|
||||
{
|
||||
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
|
||||
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 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;
|
||||
|
||||
wait 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -266,19 +254,20 @@ triggerweaponslockerweaponchangethink( trigger )
|
||||
self endon( "disconnect" );
|
||||
self endon( "death" );
|
||||
trigger endon( "kill_trigger" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "weapon_change", newweapon );
|
||||
|
||||
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
|
||||
}
|
||||
}
|
||||
|
||||
add_weapon_locker_mapping( fromweapon, toweapon )
|
||||
{
|
||||
if ( !isDefined( level.remap_weapon_locker_weapons ) )
|
||||
{
|
||||
if ( !isdefined( level.remap_weapon_locker_weapons ) )
|
||||
level.remap_weapon_locker_weapons = [];
|
||||
}
|
||||
|
||||
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
|
||||
}
|
||||
|
||||
@ -286,52 +275,52 @@ remap_weapon( weapondata, maptable )
|
||||
{
|
||||
name = get_base_name( weapondata["name"] );
|
||||
att = get_attachment_name( weapondata["name"] );
|
||||
if ( isDefined( maptable[ name ] ) )
|
||||
|
||||
if ( isdefined( maptable[name] ) )
|
||||
{
|
||||
weapondata["name"] = maptable[name];
|
||||
name = weapondata["name"];
|
||||
|
||||
if ( is_weapon_upgraded( name ) )
|
||||
{
|
||||
if ( isDefined( att ) && weapon_supports_attachments( 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 ) )
|
||||
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;
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,3 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user