mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-08 01:47: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()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
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
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_ai_dogs;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
#include maps/mp/_utility;
|
#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.onprecachegametype = ::onprecachegametype;
|
||||||
level.onstartgametype = ::onstartgametype;
|
level.onstartgametype = ::onstartgametype;
|
||||||
level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func;
|
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;
|
level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update;
|
||||||
maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" );
|
maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" );
|
||||||
}
|
}
|
||||||
|
|
||||||
onprecachegametype() //checked matches cerberus output
|
onprecachegametype()
|
||||||
{
|
{
|
||||||
level.playersuicideallowed = 1;
|
level.playersuicideallowed = 1;
|
||||||
level.canplayersuicide = ::canplayersuicide;
|
level.canplayersuicide = ::canplayersuicide;
|
||||||
level.suicide_weapon = "death_self_zm";
|
level.suicide_weapon = "death_self_zm";
|
||||||
precacheitem( "death_self_zm" );
|
precacheitem( "death_self_zm" );
|
||||||
maps/mp/zombies/_zm_ai_dogs::init();
|
maps\mp\zombies\_zm_ai_dogs::init();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" );
|
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::setup_classic_gametype();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
|
maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
|
||||||
}
|
}
|
||||||
|
|
||||||
zstandard_main() //checked matches cerberus output
|
zstandard_main()
|
||||||
{
|
{
|
||||||
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
|
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
|
||||||
|
|
||||||
if ( level.dog_rounds_allowed )
|
if ( level.dog_rounds_allowed )
|
||||||
{
|
maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds();
|
||||||
maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds();
|
|
||||||
}
|
level thread maps\mp\zombies\_zm::round_start();
|
||||||
level thread maps/mp/zombies/_zm::round_start();
|
level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies();
|
||||||
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()
|
register()
|
||||||
{
|
{
|
||||||
@ -32,7 +34,7 @@ level_init()
|
|||||||
game["music"]["spawn_axis"] = "SPAWN_RUS";
|
game["music"]["spawn_axis"] = "SPAWN_RUS";
|
||||||
game["music"]["victory_axis"] = "mus_victory_soviet";
|
game["music"]["victory_axis"] = "mus_victory_soviet";
|
||||||
game["icons"]["axis"] = "faction_cia";
|
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_";
|
game["voice"]["axis"] = "vox_pmc_";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,8 +46,10 @@ cdc()
|
|||||||
|
|
||||||
allies()
|
allies()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
axis()
|
axis()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,15 @@
|
|||||||
#include maps/mp/gametypes_zm/_globallogic_score;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include common_scripts/utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\gametypes_zm\_globallogic_score;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( !is_gametype_active( "zclassic" ) )
|
if ( !is_gametype_active( "zclassic" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level thread achievement_buried_sidequest();
|
level thread achievement_buried_sidequest();
|
||||||
level thread achievement_im_your_huckleberry();
|
level thread achievement_im_your_huckleberry();
|
||||||
level.achievement_sound_func = ::achievement_sound_func;
|
level.achievement_sound_func = ::achievement_sound_func;
|
||||||
@ -18,28 +19,26 @@ init()
|
|||||||
achievement_sound_func( achievement_name_lower )
|
achievement_sound_func( achievement_name_lower )
|
||||||
{
|
{
|
||||||
if ( !sessionmodeisonlinegame() )
|
if ( !sessionmodeisonlinegame() )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self thread do_player_general_vox( "general", "achievement" );
|
self thread do_player_general_vox( "general", "achievement" );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_player_achievement_stats()
|
init_player_achievement_stats()
|
||||||
{
|
{
|
||||||
if ( !is_gametype_active( "zclassic" ) )
|
if ( !is_gametype_active( "zclassic" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_buried_sidequest", 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_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_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_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_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_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_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_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_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_when_the_revolution_comes", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect()
|
||||||
@ -59,6 +58,7 @@ achievement_buried_sidequest()
|
|||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
|
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
|
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
|
||||||
}
|
}
|
||||||
@ -67,19 +67,18 @@ achievement_im_your_huckleberry()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
num_barriers_broken = 0;
|
num_barriers_broken = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "sloth_breaks_barrier" );
|
level waittill( "sloth_breaks_barrier" );
|
||||||
|
|
||||||
num_barriers_broken++;
|
num_barriers_broken++;
|
||||||
|
|
||||||
if ( num_barriers_broken >= 8 )
|
if ( num_barriers_broken >= 8 )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
|
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
|
||||||
}
|
}
|
||||||
@ -88,8 +87,10 @@ achievement_ectoplasmic_residue()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_received_ghost_round_free_perk" );
|
self waittill( "player_received_ghost_round_free_perk" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
|
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
|
||||||
}
|
}
|
||||||
@ -99,19 +100,18 @@ achievement_death_from_below()
|
|||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
num_subwoofer_deaths = 0;
|
num_subwoofer_deaths = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "zombie_subwoofer_kill" );
|
self waittill( "zombie_subwoofer_kill" );
|
||||||
|
|
||||||
num_subwoofer_deaths++;
|
num_subwoofer_deaths++;
|
||||||
|
|
||||||
if ( num_subwoofer_deaths >= 10 )
|
if ( num_subwoofer_deaths >= 10 )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
|
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
|
||||||
}
|
}
|
||||||
@ -120,8 +120,10 @@ achievement_candygram()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_gives_sloth_candy" );
|
self waittill( "player_gives_sloth_candy" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
|
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
|
||||||
}
|
}
|
||||||
@ -133,12 +135,13 @@ achievement_awaken_the_gazebo()
|
|||||||
level endon( "bank_withdrawal" );
|
level endon( "bank_withdrawal" );
|
||||||
level endon( "bank_teller_used" );
|
level endon( "bank_teller_used" );
|
||||||
level endon( "weapon_locker_grab" );
|
level endon( "weapon_locker_grab" );
|
||||||
|
|
||||||
self waittill( "pap_taken" );
|
self waittill( "pap_taken" );
|
||||||
|
|
||||||
if ( level.round_number > 1 )
|
if ( level.round_number > 1 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" );
|
self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" );
|
||||||
}
|
}
|
||||||
@ -147,8 +150,10 @@ achievement_revisionist_historian()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_activates_timebomb" );
|
self waittill( "player_activates_timebomb" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
|
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
|
||||||
}
|
}
|
||||||
@ -157,8 +162,10 @@ achievement_mazed_and_confused()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_stayed_in_maze_for_entire_high_level_round" );
|
self waittill( "player_stayed_in_maze_for_entire_high_level_round" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" );
|
self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" );
|
||||||
}
|
}
|
||||||
@ -167,8 +174,10 @@ achievement_fsirt_against_the_wall()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_upgraded_lsat_from_wall" );
|
self waittill( "player_upgraded_lsat_from_wall" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
|
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
|
||||||
}
|
}
|
||||||
@ -177,8 +186,10 @@ achievement_when_the_revolution_comes()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_used_fountain_teleporter" );
|
self waittill( "player_used_fountain_teleporter" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
|
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,18 @@
|
|||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_audio;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_ambientpackage;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_ambientpackage;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
level.sndzombieentcontext = 1;
|
level.sndzombieentcontext = 1;
|
||||||
|
|
||||||
if ( is_classic() )
|
if ( is_classic() )
|
||||||
{
|
{
|
||||||
thread sndmusicegg();
|
thread sndmusicegg();
|
||||||
@ -41,25 +44,25 @@ sndstingersetup()
|
|||||||
|
|
||||||
sndstingersetupstates()
|
sndstingersetupstates()
|
||||||
{
|
{
|
||||||
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" );
|
createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" );
|
||||||
createstingerstate( "boards_gone", "mus_event_group_02", 0,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_tunnels_center", "mus_event_location_tunnels", 0.75, "queue" );
|
||||||
createstingerstate( "zone_stables", "mus_event_location_stables", 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_courthouse", "mus_event_location_courthouse", 0.75, "queue" );
|
||||||
createstingerstate( "zone_underground_bar", "mus_event_location_bar", 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_toy_store", "mus_event_location_toystore", 0.75, "queue" );
|
||||||
createstingerstate( "zone_underground_jail", "mus_event_location_jail", 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_general_store", "mus_event_location_genstore", 0.75, "queue" );
|
||||||
createstingerstate( "zone_morgue", "mus_event_location_morgue", 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_church_main", "mus_event_location_church", 0.75, "queue" );
|
||||||
createstingerstate( "zone_mansion_lawn", "mus_event_location_mansionlawn", 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_mansion", "mus_event_location_mansion", 0.75, "queue" );
|
||||||
createstingerstate( "zone_maze", "mus_event_location_maze", 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_maze_staircase", "mus_event_location_mazeend", 0.75, "queue" );
|
||||||
createstingerstate( "zone_candy_store", "mus_event_location_candystore", 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_lighteast", "mus_event_location_street_east", 0.75, "queue" );
|
||||||
createstingerstate( "zone_street_lightwest", "mus_event_location_street_west", 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( "zone_start_lower", "mus_event_location_diamondmine", 0.75, "queue" );
|
||||||
createstingerstate( "sloth_escape", "mus_event_sloth_breakout", 0, "reject" );
|
createstingerstate( "sloth_escape", "mus_event_sloth_breakout", 0, "reject" );
|
||||||
createstingerstate( "poweron", "mus_event_poweron", 0, "reject" );
|
createstingerstate( "poweron", "mus_event_poweron", 0, "reject" );
|
||||||
createstingerstate( "sidequest_1", "mus_sidequest_0", 0, "reject" );
|
createstingerstate( "sidequest_1", "mus_sidequest_0", 0, "reject" );
|
||||||
@ -75,7 +78,8 @@ sndstingersetupstates()
|
|||||||
createstingerstate( state, alias, prewait, interrupt )
|
createstingerstate( state, alias, prewait, interrupt )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
|
if ( !isdefined( s.states[state] ) )
|
||||||
{
|
{
|
||||||
s.states[state] = spawnstruct();
|
s.states[state] = spawnstruct();
|
||||||
s.states[state].alias = alias;
|
s.states[state].alias = alias;
|
||||||
@ -86,24 +90,19 @@ createstingerstate( state, alias, prewait, interrupt )
|
|||||||
|
|
||||||
sndboardmonitor()
|
sndboardmonitor()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "last_board_torn", barrier_origin );
|
level waittill( "last_board_torn", barrier_origin );
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a110 = players;
|
|
||||||
_k110 = getFirstArrayKey( _a110 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k110 ) )
|
|
||||||
{
|
{
|
||||||
player = _a110[ _k110 ];
|
|
||||||
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
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;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k110 = getNextArrayKey( _a110, _k110 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,41 +115,39 @@ locationstingerwait( zone_name, type )
|
|||||||
level.sndlastzone = undefined;
|
level.sndlastzone = undefined;
|
||||||
level.sndlocationplayed = 0;
|
level.sndlocationplayed = 0;
|
||||||
level thread sndlocationbetweenroundswait();
|
level thread sndlocationbetweenroundswait();
|
||||||
for ( ;; )
|
|
||||||
{
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level waittill( "newzoneActive", activezone );
|
level waittill( "newzoneActive", activezone );
|
||||||
wait 0,1;
|
|
||||||
while ( !sndlocationshouldplay( array, activezone ) )
|
wait 0.1;
|
||||||
{
|
|
||||||
|
if ( !sndlocationshouldplay( array, activezone ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( is_true( level.sndroundwait ) )
|
if ( is_true( level.sndroundwait ) )
|
||||||
{
|
continue;
|
||||||
}
|
else if ( is_true( level.sndstinger.isplaying ) )
|
||||||
}
|
|
||||||
else while ( is_true( level.sndstinger.isplaying ) )
|
|
||||||
{
|
{
|
||||||
level thread sndlocationqueue( activezone );
|
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;
|
level.sndlocationplayed = 1;
|
||||||
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
||||||
level.sndlastzone = activezone;
|
level.sndlastzone = activezone;
|
||||||
|
|
||||||
if ( numcut >= sndnorepeats )
|
if ( numcut >= sndnorepeats )
|
||||||
{
|
|
||||||
numcut = 0;
|
numcut = 0;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
numcut++;
|
numcut++;
|
||||||
}
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
level.sndlocationplayed = 0;
|
level.sndlocationplayed = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -174,208 +171,167 @@ sndlocationsarray()
|
|||||||
sndlocationshouldplay( array, activezone )
|
sndlocationshouldplay( array, activezone )
|
||||||
{
|
{
|
||||||
shouldplay = 0;
|
shouldplay = 0;
|
||||||
|
|
||||||
if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) )
|
if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) )
|
||||||
{
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
|
||||||
_a197 = array;
|
foreach ( place in array )
|
||||||
_k197 = getFirstArrayKey( _a197 );
|
|
||||||
while ( isDefined( _k197 ) )
|
|
||||||
{
|
{
|
||||||
place = _a197[ _k197 ];
|
|
||||||
if ( place == activezone )
|
if ( place == activezone )
|
||||||
{
|
|
||||||
shouldplay = 1;
|
shouldplay = 1;
|
||||||
}
|
}
|
||||||
_k197 = getNextArrayKey( _a197, _k197 );
|
|
||||||
}
|
|
||||||
if ( shouldplay == 0 )
|
if ( shouldplay == 0 )
|
||||||
{
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
|
||||||
playersinlocal = 0;
|
playersinlocal = 0;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a208 = players;
|
|
||||||
_k208 = getFirstArrayKey( _a208 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k208 ) )
|
|
||||||
{
|
{
|
||||||
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 ) )
|
if ( !is_true( player.afterlife ) )
|
||||||
{
|
|
||||||
playersinlocal++;
|
playersinlocal++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k208 = getNextArrayKey( _a208, _k208 );
|
|
||||||
}
|
|
||||||
if ( playersinlocal >= 1 )
|
if ( playersinlocal >= 1 )
|
||||||
{
|
|
||||||
shouldplay = 1;
|
shouldplay = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
shouldplay = 0;
|
shouldplay = 0;
|
||||||
}
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
||||||
{
|
{
|
||||||
if ( numcut >= max_num_removed )
|
if ( numcut >= max_num_removed )
|
||||||
{
|
|
||||||
current_array = sndlocationsarray();
|
current_array = sndlocationsarray();
|
||||||
}
|
|
||||||
_a231 = current_array;
|
foreach ( place in current_array )
|
||||||
_k231 = getFirstArrayKey( _a231 );
|
|
||||||
while ( isDefined( _k231 ) )
|
|
||||||
{
|
{
|
||||||
place = _a231[ _k231 ];
|
|
||||||
if ( place == activezone )
|
if ( place == activezone )
|
||||||
{
|
{
|
||||||
arrayremovevalue( current_array, place );
|
arrayremovevalue( current_array, place );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k231 = getNextArrayKey( _a231, _k231 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_array;
|
return current_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationbetweenrounds()
|
sndlocationbetweenrounds()
|
||||||
{
|
{
|
||||||
level endon( "newzoneActive" );
|
level endon( "newzoneActive" );
|
||||||
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names();
|
activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
|
||||||
_a248 = activezones;
|
|
||||||
_k248 = getFirstArrayKey( _a248 );
|
foreach ( zone in activezones )
|
||||||
while ( isDefined( _k248 ) )
|
|
||||||
{
|
|
||||||
zone = _a248[ _k248 ];
|
|
||||||
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||||
|
continue;
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a254 = players;
|
|
||||||
_k254 = getFirstArrayKey( _a254 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k254 ) )
|
|
||||||
{
|
{
|
||||||
player = _a254[ _k254 ];
|
|
||||||
if ( is_true( player.afterlife ) )
|
if ( is_true( player.afterlife ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) )
|
||||||
{
|
{
|
||||||
}
|
wait 0.1;
|
||||||
else
|
level notify( "newzoneActive", zone );
|
||||||
{
|
|
||||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
level notify( "newzoneActive" );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k254 = getNextArrayKey( _a254, _k254 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_k248 = getNextArrayKey( _a248, _k248 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationbetweenroundswait()
|
sndlocationbetweenroundswait()
|
||||||
{
|
{
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level thread sndlocationbetweenrounds();
|
level thread sndlocationbetweenrounds();
|
||||||
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationqueue( zone )
|
sndlocationqueue( zone )
|
||||||
{
|
{
|
||||||
level endon( "newzoneActive" );
|
level endon( "newzoneActive" );
|
||||||
|
|
||||||
while ( is_true( level.sndstinger.isplaying ) )
|
while ( is_true( level.sndstinger.isplaying ) )
|
||||||
{
|
wait 0.5;
|
||||||
wait 0,5;
|
|
||||||
}
|
level notify( "newzoneActive", zone );
|
||||||
level notify( "newzoneActive" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndplaystinger( state, player )
|
sndplaystinger( state, player )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
{
|
if ( !isdefined( s.states[state] ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
interrupt = s.states[state].interrupt == "ignore";
|
interrupt = s.states[state].interrupt == "ignore";
|
||||||
|
|
||||||
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
||||||
{
|
{
|
||||||
if ( interrupt )
|
if ( interrupt )
|
||||||
{
|
{
|
||||||
wait s.states[ state ].prewait;
|
wait( s.states[state].prewait );
|
||||||
playstinger( state, player, 1 );
|
playstinger( state, player, 1 );
|
||||||
}
|
}
|
||||||
else if ( !level.sndroundwait )
|
else if ( !level.sndroundwait )
|
||||||
{
|
{
|
||||||
s.isplaying = 1;
|
s.isplaying = 1;
|
||||||
wait s.states[ state ].prewait;
|
wait( s.states[state].prewait );
|
||||||
playstinger( state, player, 0 );
|
playstinger( state, player, 0 );
|
||||||
level notify( "sndStingerDone" );
|
level notify( "sndStingerDone" );
|
||||||
s.isplaying = 0;
|
s.isplaying = 0;
|
||||||
}
|
}
|
||||||
else
|
else if ( s.states[state].interrupt == "queue" )
|
||||||
{
|
|
||||||
if ( s.states[ state ].interrupt == "queue" )
|
|
||||||
{
|
|
||||||
level thread sndqueuestinger( state, player );
|
level thread sndqueuestinger( state, player );
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( s.states[state].interrupt == "queue" )
|
if ( s.states[state].interrupt == "queue" )
|
||||||
{
|
|
||||||
level thread sndqueuestinger( state, player );
|
level thread sndqueuestinger( state, player );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
playstinger( state, player, ignore )
|
playstinger( state, player, ignore )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
{
|
if ( !isdefined( s.states[state] ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( is_true( ignore ) )
|
if ( is_true( ignore ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( player ) )
|
if ( isdefined( player ) )
|
||||||
{
|
|
||||||
player playsoundtoplayer( s.states[state].alias, player );
|
player playsoundtoplayer( s.states[state].alias, player );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s.ent playsound( s.states[state].alias );
|
s.ent playsound( s.states[state].alias );
|
||||||
s.ent thread playstingerstop();
|
s.ent thread playstingerstop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( isDefined( player ) )
|
else if ( isdefined( player ) )
|
||||||
{
|
{
|
||||||
player playsoundtoplayer( s.states[state].alias, player );
|
player playsoundtoplayer( s.states[state].alias, player );
|
||||||
wait 8;
|
wait 8;
|
||||||
@ -384,6 +340,7 @@ playstinger( state, player, ignore )
|
|||||||
{
|
{
|
||||||
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
||||||
s.ent thread playstingerstop();
|
s.ent thread playstingerstop();
|
||||||
|
|
||||||
s.ent waittill( "sndStingerDone" );
|
s.ent waittill( "sndStingerDone" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -391,24 +348,21 @@ playstinger( state, player, ignore )
|
|||||||
sndqueuestinger( state, player )
|
sndqueuestinger( state, player )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
|
|
||||||
if ( is_true( s.queue ) )
|
if ( is_true( s.queue ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s.queue = 1;
|
s.queue = 1;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
||||||
{
|
wait 0.5;
|
||||||
wait 0,5;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level thread sndplaystinger( state, player );
|
level thread sndplaystinger( state, player );
|
||||||
s.queue = 0;
|
s.queue = 0;
|
||||||
}
|
}
|
||||||
@ -418,9 +372,11 @@ sndstingerroundwait()
|
|||||||
{
|
{
|
||||||
wait 25;
|
wait 25;
|
||||||
level.sndroundwait = 0;
|
level.sndroundwait = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
level thread sndstingerroundwait_start();
|
level thread sndstingerroundwait_start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -428,14 +384,16 @@ sndstingerroundwait()
|
|||||||
sndstingerroundwait_start()
|
sndstingerroundwait_start()
|
||||||
{
|
{
|
||||||
level.sndroundwait = 1;
|
level.sndroundwait = 1;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level thread sndstingerroundwait_end();
|
level thread sndstingerroundwait_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
sndstingerroundwait_end()
|
sndstingerroundwait_end()
|
||||||
{
|
{
|
||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
wait 28;
|
wait 28;
|
||||||
level.sndroundwait = 0;
|
level.sndroundwait = 0;
|
||||||
}
|
}
|
||||||
@ -444,7 +402,9 @@ playstingerstop()
|
|||||||
{
|
{
|
||||||
self endon( "sndStingerDone" );
|
self endon( "sndStingerDone" );
|
||||||
level endon( "sndStingerDone" );
|
level endon( "sndStingerDone" );
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
wait 2;
|
wait 2;
|
||||||
self stopsounds();
|
self stopsounds();
|
||||||
}
|
}
|
||||||
@ -454,36 +414,39 @@ sndbackgroundmustracker()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.prevzone = "null";
|
self.prevzone = "null";
|
||||||
self.prevcase = 99;
|
self.prevcase = 99;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "newzoneActive", activezone );
|
level waittill( "newzoneActive", activezone );
|
||||||
|
|
||||||
if ( self.prevzone != 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;
|
self.prevzone = activezone;
|
||||||
|
|
||||||
switch ( activezone )
|
switch ( activezone )
|
||||||
{
|
{
|
||||||
case "zone_start":
|
|
||||||
case "zone_start_lower":
|
case "zone_start_lower":
|
||||||
|
case "zone_start":
|
||||||
if ( self.prevcase != 0 )
|
if ( self.prevcase != 0 )
|
||||||
{
|
{
|
||||||
self setclientfieldtoplayer( "sndBackgroundMus", 0 );
|
self setclientfieldtoplayer( "sndBackgroundMus", 0 );
|
||||||
self.prevcase = 0;
|
self.prevcase = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
break;
|
|
||||||
case "zone_mansion":
|
|
||||||
case "zone_mansion_backyard":
|
|
||||||
case "zone_mansion_lawn":
|
|
||||||
case "zone_maze":
|
|
||||||
case "zone_maze_staircase":
|
case "zone_maze_staircase":
|
||||||
|
case "zone_maze":
|
||||||
|
case "zone_mansion_lawn":
|
||||||
|
case "zone_mansion_backyard":
|
||||||
|
case "zone_mansion":
|
||||||
if ( self.prevcase != 2 )
|
if ( self.prevcase != 2 )
|
||||||
{
|
{
|
||||||
self setclientfieldtoplayer( "sndBackgroundMus", 2 );
|
self setclientfieldtoplayer( "sndBackgroundMus", 2 );
|
||||||
self.prevcase = 2;
|
self.prevcase = 2;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ( self.prevcase != 1 )
|
if ( self.prevcase != 1 )
|
||||||
@ -491,7 +454,7 @@ sndbackgroundmustracker()
|
|||||||
self setclientfieldtoplayer( "sndBackgroundMus", 1 );
|
self setclientfieldtoplayer( "sndBackgroundMus", 1 );
|
||||||
self.prevcase = 1;
|
self.prevcase = 1;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -502,14 +465,12 @@ sndbackgroundmustracker()
|
|||||||
sndshoulditplay( activezone )
|
sndshoulditplay( activezone )
|
||||||
{
|
{
|
||||||
if ( self.prevzone == activezone )
|
if ( self.prevzone == activezone )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
return false;
|
||||||
{
|
|
||||||
return 0;
|
return true;
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlastlifesetup()
|
sndlastlifesetup()
|
||||||
@ -523,15 +484,18 @@ sndlastlife_multi()
|
|||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
level thread sndlastlife_multi_reset();
|
level thread sndlastlife_multi_reset();
|
||||||
sndplayersdead = 0;
|
sndplayersdead = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "bleed_out" );
|
level waittill( "bleed_out" );
|
||||||
|
|
||||||
sndplayersdead++;
|
sndplayersdead++;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
if ( ( players.size - sndplayersdead ) <= 1 )
|
|
||||||
|
if ( players.size - sndplayersdead <= 1 )
|
||||||
{
|
{
|
||||||
last_alive = sndlastlife_multi_getlastplayer();
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -540,55 +504,50 @@ sndlastlife_multi()
|
|||||||
sndlastlife_multi_getlastplayer()
|
sndlastlife_multi_getlastplayer()
|
||||||
{
|
{
|
||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a572 = players;
|
|
||||||
_k572 = getFirstArrayKey( _a572 );
|
foreach ( dude in players )
|
||||||
while ( isDefined( _k572 ) )
|
|
||||||
{
|
{
|
||||||
dude = _a572[ _k572 ];
|
|
||||||
if ( dude.sessionstate == "spectator" )
|
if ( dude.sessionstate == "spectator" )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return dude;
|
return dude;
|
||||||
}
|
}
|
||||||
_k572 = getNextArrayKey( _a572, _k572 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlastlife_multi_reset()
|
sndlastlife_multi_reset()
|
||||||
{
|
{
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
level thread sndlastlife_multi();
|
level thread sndlastlife_multi();
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmusicegg()
|
sndmusicegg()
|
||||||
{
|
{
|
||||||
origins = [];
|
origins = [];
|
||||||
origins[ 0 ] = ( -1215,63, -499,975, 291,89 );
|
origins[0] = ( -1215.63, -499.975, 291.89 );
|
||||||
origins[ 1 ] = ( 552,009, -342,824, 27,3921 );
|
origins[1] = ( 552.009, -342.824, 27.3921 );
|
||||||
origins[ 2 ] = ( 2827,28, 306,468, 92,783 );
|
origins[2] = ( 2827.28, 306.468, 92.783 );
|
||||||
level.meteor_counter = 0;
|
level.meteor_counter = 0;
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
i = 0;
|
|
||||||
while ( i < origins.size )
|
for ( i = 0; i < origins.size; i++ )
|
||||||
{
|
|
||||||
level thread sndmusicegg_wait( origins[i] );
|
level thread sndmusicegg_wait( origins[i] );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmusicegg_wait( bottle_origin )
|
sndmusicegg_wait( bottle_origin )
|
||||||
{
|
{
|
||||||
temp_ent = spawn( "script_origin", bottle_origin );
|
temp_ent = spawn( "script_origin", bottle_origin );
|
||||||
temp_ent playloopsound( "zmb_meteor_loop" );
|
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 waittill( "main_music_egg_hit", player );
|
||||||
|
|
||||||
temp_ent stoploopsound( 1 );
|
temp_ent stoploopsound( 1 );
|
||||||
player playsound( "zmb_meteor_activate" );
|
player playsound( "zmb_meteor_activate" );
|
||||||
level.meteor_counter += 1;
|
level.meteor_counter += 1;
|
||||||
|
|
||||||
if ( level.meteor_counter == 3 )
|
if ( level.meteor_counter == 3 )
|
||||||
{
|
{
|
||||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 363 );
|
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 363 );
|
||||||
@ -596,7 +555,7 @@ sndmusicegg_wait( bottle_origin )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wait 1,5;
|
wait 1.5;
|
||||||
temp_ent delete();
|
temp_ent delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -604,10 +563,9 @@ sndmusicegg_wait( bottle_origin )
|
|||||||
sndmusicegg_override()
|
sndmusicegg_override()
|
||||||
{
|
{
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmuseggplay( ent, alias, time )
|
sndmuseggplay( ent, alias, time )
|
||||||
@ -620,7 +578,7 @@ sndmuseggplay( ent, alias, time )
|
|||||||
level waittill_either( "end_game", "sndSongDone" );
|
level waittill_either( "end_game", "sndSongDone" );
|
||||||
ent stopsounds();
|
ent stopsounds();
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
ent delete();
|
ent delete();
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
}
|
}
|
||||||
@ -628,24 +586,23 @@ sndmuseggplay( ent, alias, time )
|
|||||||
sndeggmusicwait( time )
|
sndeggmusicwait( time )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
wait time;
|
wait( time );
|
||||||
level notify( "sndSongDone" );
|
level notify( "sndSongDone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmusicquestendgame( alias, length )
|
sndmusicquestendgame( alias, length )
|
||||||
{
|
{
|
||||||
while ( is_true( level.music_override ) )
|
while ( is_true( level.music_override ) )
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
||||||
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
ent playsound( alias );
|
ent playsound( alias );
|
||||||
wait length;
|
wait( length );
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
ent delete();
|
ent delete();
|
||||||
wait 1;
|
wait 1;
|
||||||
level thread sndendgamemusicredux( alias, length );
|
level thread sndendgamemusicredux( alias, length );
|
||||||
@ -654,26 +611,26 @@ sndmusicquestendgame( alias, length )
|
|||||||
easter_egg_song_vo( player )
|
easter_egg_song_vo( player )
|
||||||
{
|
{
|
||||||
if ( isalive( 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 )
|
sndendgamemusicredux( alias, length )
|
||||||
{
|
{
|
||||||
m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" );
|
m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" );
|
||||||
temp_ent = spawn( "script_origin", m_endgame_machine.origin );
|
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 playloopsound( "zmb_meteor_loop" );
|
||||||
|
|
||||||
temp_ent waittill( "main_music_egg_hit", player );
|
temp_ent waittill( "main_music_egg_hit", player );
|
||||||
|
|
||||||
temp_ent stoploopsound( 1 );
|
temp_ent stoploopsound( 1 );
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
temp_ent playsound( "zmb_endgame_mach_button" );
|
temp_ent playsound( "zmb_endgame_mach_button" );
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
||||||
temp_ent playsound( alias );
|
temp_ent playsound( alias );
|
||||||
wait length;
|
wait( length );
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
temp_ent delete();
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_ai_basic;
|
||||||
|
|
||||||
zombie_tracking_init()
|
zombie_tracking_init()
|
||||||
{
|
{
|
||||||
level.zombie_respawned_health = [];
|
level.zombie_respawned_health = [];
|
||||||
if ( !isDefined( level.zombie_tracking_dist ) )
|
|
||||||
{
|
if ( !isdefined( level.zombie_tracking_dist ) )
|
||||||
level.zombie_tracking_dist = 1600;
|
level.zombie_tracking_dist = 1600;
|
||||||
}
|
|
||||||
if ( !isDefined( level.zombie_tracking_high ) )
|
if ( !isdefined( level.zombie_tracking_high ) )
|
||||||
{
|
|
||||||
level.zombie_tracking_high = 600;
|
level.zombie_tracking_high = 600;
|
||||||
}
|
|
||||||
if ( !isDefined( level.zombie_tracking_wait ) )
|
if ( !isdefined( level.zombie_tracking_wait ) )
|
||||||
{
|
level.zombie_tracking_wait = 0.4;
|
||||||
level.zombie_tracking_wait = 0,4;
|
|
||||||
}
|
while ( true )
|
||||||
for ( ;; )
|
|
||||||
{
|
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
zombies = get_round_enemy_array();
|
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
|
||||||
else i = 0;
|
|
||||||
while ( i < zombies.size )
|
|
||||||
{
|
{
|
||||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking && isDefined( zombies[ i ].ignoreall ) && !zombies[ i ].ignoreall )
|
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 );
|
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 )
|
delete_zombie_noone_looking( how_close, how_high )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
if ( self can_be_deleted_from_buried_special_zones() )
|
if ( self can_be_deleted_from_buried_special_zones() )
|
||||||
{
|
{
|
||||||
self.inview = 0;
|
self.inview = 0;
|
||||||
@ -53,37 +53,32 @@ delete_zombie_noone_looking( how_close, how_high )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !isDefined( how_close ) )
|
if ( !isdefined( how_close ) )
|
||||||
{
|
|
||||||
how_close = 1000;
|
how_close = 1000;
|
||||||
}
|
|
||||||
if ( !isDefined( how_high ) )
|
if ( !isdefined( how_high ) )
|
||||||
{
|
|
||||||
how_high = 500;
|
how_high = 500;
|
||||||
}
|
|
||||||
if ( isDefined( self.has_legs ) && !self.has_legs )
|
if ( !( isdefined( self.has_legs ) && self.has_legs ) )
|
||||||
{
|
how_close *= 1.5;
|
||||||
how_close *= 1,5;
|
|
||||||
}
|
|
||||||
distance_squared_check = how_close * how_close;
|
distance_squared_check = how_close * how_close;
|
||||||
height_squared_check = how_high * how_high;
|
height_squared_check = how_high * how_high;
|
||||||
too_far_dist = distance_squared_check * 3;
|
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;
|
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||||
}
|
|
||||||
self.inview = 0;
|
self.inview = 0;
|
||||||
self.player_close = 0;
|
self.player_close = 0;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a98 = players;
|
|
||||||
_k98 = getFirstArrayKey( _a98 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k98 ) )
|
|
||||||
{
|
{
|
||||||
player = _a98[ _k98 ];
|
|
||||||
if ( player.sessionstate == "spectator" )
|
if ( player.sessionstate == "spectator" )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else if ( isDefined( player.laststand ) && player.laststand && isDefined( self.favoriteenemy ) && self.favoriteenemy == player )
|
if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
|
||||||
{
|
{
|
||||||
if ( !self can_zombie_see_any_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();
|
self thread escaped_zombies_cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( isDefined( level.only_track_targeted_players ) )
|
|
||||||
{
|
if ( isdefined( level.only_track_targeted_players ) )
|
||||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != player )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
can_be_seen = self player_can_see_me( player );
|
can_be_seen = self player_can_see_me( player );
|
||||||
distance_squared = distancesquared( self.origin, player.origin );
|
distance_squared = distancesquared( self.origin, player.origin );
|
||||||
|
|
||||||
if ( can_be_seen && distance_squared < too_far_dist )
|
if ( can_be_seen && distance_squared < too_far_dist )
|
||||||
{
|
|
||||||
self.inview++;
|
self.inview++;
|
||||||
}
|
|
||||||
if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
|
if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
|
||||||
{
|
|
||||||
self.player_close++;
|
self.player_close++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k98 = getNextArrayKey( _a98, _k98 );
|
|
||||||
}
|
wait 0.1;
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
if ( self.inview == 0 && self.player_close == 0 )
|
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;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
zombies = getaiarray( "axis" );
|
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++;
|
level.zombie_total++;
|
||||||
|
|
||||||
if ( self.health < level.zombie_health )
|
if ( self.health < level.zombie_health )
|
||||||
{
|
|
||||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.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" );
|
self notify( "zombie_delete" );
|
||||||
if ( isDefined( self.anchor ) )
|
|
||||||
{
|
if ( isdefined( self.anchor ) )
|
||||||
self.anchor delete();
|
self.anchor delete();
|
||||||
}
|
|
||||||
self delete();
|
self delete();
|
||||||
recalc_zombie_array();
|
recalc_zombie_array();
|
||||||
}
|
}
|
||||||
@ -151,46 +142,40 @@ delete_zombie_noone_looking( how_close, how_high )
|
|||||||
player_can_see_me( player )
|
player_can_see_me( player )
|
||||||
{
|
{
|
||||||
playerangles = player getplayerangles();
|
playerangles = player getplayerangles();
|
||||||
playerforwardvec = anglesToForward( playerangles );
|
playerforwardvec = anglestoforward( playerangles );
|
||||||
playerunitforwardvec = vectornormalize( playerforwardvec );
|
playerunitforwardvec = vectornormalize( playerforwardvec );
|
||||||
banzaipos = self.origin;
|
banzaipos = self.origin;
|
||||||
playerpos = player getorigin();
|
playerpos = player getorigin();
|
||||||
playertobanzaivec = banzaipos - playerpos;
|
playertobanzaivec = banzaipos - playerpos;
|
||||||
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
||||||
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
||||||
|
|
||||||
if ( forwarddotbanzai >= 1 )
|
if ( forwarddotbanzai >= 1 )
|
||||||
{
|
|
||||||
anglefromcenter = 0;
|
anglefromcenter = 0;
|
||||||
}
|
|
||||||
else if ( forwarddotbanzai <= -1 )
|
else if ( forwarddotbanzai <= -1 )
|
||||||
{
|
|
||||||
anglefromcenter = 180;
|
anglefromcenter = 180;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
anglefromcenter = acos( forwarddotbanzai );
|
anglefromcenter = acos( forwarddotbanzai );
|
||||||
}
|
|
||||||
playerfov = getDvarFloat( "cg_fov" );
|
playerfov = getdvarfloat( "cg_fov" );
|
||||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||||
|
|
||||||
if ( banzaivsplayerfovbuffer <= 0 )
|
if ( banzaivsplayerfovbuffer <= 0 )
|
||||||
{
|
banzaivsplayerfovbuffer = 0.2;
|
||||||
banzaivsplayerfovbuffer = 0,2;
|
|
||||||
}
|
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
|
||||||
return playercanseeme;
|
return playercanseeme;
|
||||||
}
|
}
|
||||||
|
|
||||||
can_be_deleted_from_buried_special_zones()
|
can_be_deleted_from_buried_special_zones()
|
||||||
{
|
{
|
||||||
if ( self can_be_deleted_from_start_area() )
|
if ( self can_be_deleted_from_start_area() )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self can_be_deleted_from_maze_area() )
|
if ( self can_be_deleted_from_maze_area() )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
can_be_deleted_from_start_area()
|
can_be_deleted_from_start_area()
|
||||||
@ -213,61 +198,56 @@ can_be_deleted_from_maze_area()
|
|||||||
can_be_deleted_from_area( zone_names )
|
can_be_deleted_from_area( zone_names )
|
||||||
{
|
{
|
||||||
self_in_zone = 0;
|
self_in_zone = 0;
|
||||||
_a265 = zone_names;
|
|
||||||
_k265 = getFirstArrayKey( _a265 );
|
foreach ( zone_name in zone_names )
|
||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
|
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;
|
self_in_zone = 1;
|
||||||
}
|
}
|
||||||
_k265 = getNextArrayKey( _a265, _k265 );
|
|
||||||
}
|
|
||||||
if ( self_in_zone )
|
if ( self_in_zone )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
escaped_zombies_cleanup_init()
|
escaped_zombies_cleanup_init()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self.zombie_path_bad = 0;
|
self.zombie_path_bad = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( !self.zombie_path_bad )
|
if ( !self.zombie_path_bad )
|
||||||
{
|
|
||||||
self waittill( "bad_path" );
|
self waittill( "bad_path" );
|
||||||
}
|
|
||||||
found_player = undefined;
|
found_player = undefined;
|
||||||
players = get_players();
|
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 ) )
|
if ( is_player_valid( players[i] ) && !is_true( players[i].is_in_ghost_zone ) && self maymovetopoint( players[i].origin, 1 ) )
|
||||||
{
|
{
|
||||||
self.favoriteenemy = players[i];
|
self.favoriteenemy = players[i];
|
||||||
found_player = 1;
|
found_player = 1;
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
n_delete_distance = 800;
|
n_delete_distance = 800;
|
||||||
n_delete_height = 300;
|
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 thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
|
||||||
self.zombie_path_bad = 1;
|
self.zombie_path_bad = 1;
|
||||||
self escaped_zombies_cleanup();
|
self escaped_zombies_cleanup();
|
||||||
}
|
}
|
||||||
wait 0,1;
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,30 +257,33 @@ escaped_zombies_cleanup()
|
|||||||
s_escape = self get_escape_position();
|
s_escape = self get_escape_position();
|
||||||
self notify( "stop_find_flesh" );
|
self notify( "stop_find_flesh" );
|
||||||
self notify( "zombie_acquire_enemy" );
|
self notify( "zombie_acquire_enemy" );
|
||||||
if ( isDefined( s_escape ) )
|
|
||||||
|
if ( isdefined( s_escape ) )
|
||||||
{
|
{
|
||||||
self setgoalpos( s_escape.origin );
|
self setgoalpos( s_escape.origin );
|
||||||
self thread check_player_available();
|
self thread check_player_available();
|
||||||
self waittill_any( "goal", "reaquire_player" );
|
self waittill_any( "goal", "reaquire_player" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
|
|
||||||
if ( !self.zombie_path_bad )
|
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()
|
get_escape_position()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
str_zone = get_current_zone();
|
str_zone = get_current_zone();
|
||||||
if ( isDefined( str_zone ) )
|
|
||||||
|
if ( isdefined( str_zone ) )
|
||||||
{
|
{
|
||||||
a_zones = get_adjacencies_to_zone( str_zone );
|
a_zones = get_adjacencies_to_zone( str_zone );
|
||||||
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
||||||
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
||||||
}
|
}
|
||||||
|
|
||||||
return s_farthest;
|
return s_farthest;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,6 +293,7 @@ check_player_available()
|
|||||||
self endon( "_check_player_available" );
|
self endon( "_check_player_available" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "goal" );
|
self endon( "goal" );
|
||||||
|
|
||||||
while ( self.zombie_path_bad )
|
while ( self.zombie_path_bad )
|
||||||
{
|
{
|
||||||
if ( self can_zombie_see_any_player() )
|
if ( self can_zombie_see_any_player() )
|
||||||
@ -317,65 +301,51 @@ check_player_available()
|
|||||||
self notify( "reaquire_player" );
|
self notify( "reaquire_player" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wait randomfloatrange( 0,2, 0,5 );
|
|
||||||
|
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
self notify( "reaquire_player" );
|
self notify( "reaquire_player" );
|
||||||
}
|
}
|
||||||
|
|
||||||
can_zombie_path_to_any_player()
|
can_zombie_path_to_any_player()
|
||||||
{
|
{
|
||||||
a_players = get_players();
|
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] ) )
|
if ( !is_player_valid( a_players[i] ) )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else if ( is_true( a_players[ i ].is_in_ghost_zone ) )
|
if ( is_true( a_players[i].is_in_ghost_zone ) )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( findpath( self.origin, a_players[i].origin ) )
|
if ( findpath( self.origin, a_players[i].origin ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
return false;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
can_zombie_see_any_player()
|
can_zombie_see_any_player()
|
||||||
{
|
{
|
||||||
a_players = get_players();
|
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] ) )
|
if ( !is_player_valid( a_players[i] ) )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
path_length = 0;
|
path_length = 0;
|
||||||
|
|
||||||
if ( !is_true( a_players[i].is_in_ghost_zone ) )
|
if ( !is_true( a_players[i].is_in_ghost_zone ) )
|
||||||
{
|
|
||||||
path_length = self calcpathlength( a_players[i].origin );
|
path_length = self calcpathlength( a_players[i].origin );
|
||||||
}
|
|
||||||
if ( self maymovetopoint( a_players[i].origin, 1 ) || path_length != 0 )
|
if ( self maymovetopoint( a_players[i].origin, 1 ) || path_length != 0 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
return false;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_adjacencies_to_zone( str_zone )
|
get_adjacencies_to_zone( str_zone )
|
||||||
@ -383,29 +353,23 @@ get_adjacencies_to_zone( str_zone )
|
|||||||
a_adjacencies = [];
|
a_adjacencies = [];
|
||||||
a_adjacencies[0] = str_zone;
|
a_adjacencies[0] = str_zone;
|
||||||
a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
|
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 )
|
if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
|
||||||
{
|
|
||||||
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
|
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return a_adjacencies;
|
return a_adjacencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_dog_locations_in_zones( a_zones )
|
get_dog_locations_in_zones( a_zones )
|
||||||
{
|
{
|
||||||
a_dog_locations = [];
|
a_dog_locations = [];
|
||||||
_a479 = a_zones;
|
|
||||||
_k479 = getFirstArrayKey( _a479 );
|
foreach ( zone in a_zones )
|
||||||
while ( isDefined( _k479 ) )
|
|
||||||
{
|
|
||||||
zone = _a479[ _k479 ];
|
|
||||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
||||||
_k479 = getNextArrayKey( _a479, _k479 );
|
|
||||||
}
|
|
||||||
return a_dog_locations;
|
return a_dog_locations;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,16 +377,17 @@ get_farthest_dog_location( a_dog_locations )
|
|||||||
{
|
{
|
||||||
n_farthest_index = 0;
|
n_farthest_index = 0;
|
||||||
n_distance_farthest = 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 );
|
n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
|
||||||
|
|
||||||
if ( n_distance_sq > n_distance_farthest )
|
if ( n_distance_sq > n_distance_farthest )
|
||||||
{
|
{
|
||||||
n_distance_farthest = n_distance_sq;
|
n_distance_farthest = n_distance_sq;
|
||||||
n_farthest_index = i;
|
n_farthest_index = i;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return a_dog_locations[n_farthest_index];
|
return a_dog_locations[n_farthest_index];
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,20 @@
|
|||||||
#include maps/mp/zombies/_zm_powerups;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_perks;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_perks;
|
||||||
#using_animtree( "zm_buried_ghost" );
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
#using_animtree( "fxanim_props_dlc3" );
|
|
||||||
|
|
||||||
init_ghost_piano()
|
init_ghost_piano()
|
||||||
{
|
{
|
||||||
t_bullseye = getent( "bullseye", "script_noteworthy" );
|
t_bullseye = getent( "bullseye", "script_noteworthy" );
|
||||||
t_chalk_line = getent( "ee_bar_chalk_line_trigger", "targetname" );
|
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;
|
return;
|
||||||
}
|
|
||||||
t_bullseye thread wait_for_valid_damage();
|
t_bullseye thread wait_for_valid_damage();
|
||||||
t_chalk_line thread set_flags_while_players_stand_in_trigger();
|
t_chalk_line thread set_flags_while_players_stand_in_trigger();
|
||||||
level thread mansion_ghost_plays_piano();
|
level thread mansion_ghost_plays_piano();
|
||||||
@ -34,15 +33,15 @@ init_ee_ghost_piano_flags()
|
|||||||
wait_for_valid_damage()
|
wait_for_valid_damage()
|
||||||
{
|
{
|
||||||
self setcandamage( 1 );
|
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 ( 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" ) )
|
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 );
|
||||||
level notify( "player_can_interact_with_ghost_piano_player" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,31 +53,31 @@ is_ballistic_knife_variant( str_weapon )
|
|||||||
|
|
||||||
set_flags_while_players_stand_in_trigger()
|
set_flags_while_players_stand_in_trigger()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( !player ent_flag_exist( "ee_standing_behind_chalk_line" ) )
|
if ( !player ent_flag_exist( "ee_standing_behind_chalk_line" ) )
|
||||||
{
|
|
||||||
player ent_flag_init( "ee_standing_behind_chalk_line" );
|
player ent_flag_init( "ee_standing_behind_chalk_line" );
|
||||||
}
|
|
||||||
if ( !player ent_flag( "ee_standing_behind_chalk_line" ) )
|
if ( !player ent_flag( "ee_standing_behind_chalk_line" ) )
|
||||||
{
|
|
||||||
player thread clear_flag_when_player_leaves_trigger( self );
|
player thread clear_flag_when_player_leaves_trigger( self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
clear_flag_when_player_leaves_trigger( trigger )
|
clear_flag_when_player_leaves_trigger( trigger )
|
||||||
{
|
{
|
||||||
self endon( "death_or_disconnect" );
|
self endon( "death_or_disconnect" );
|
||||||
self ent_flag_set( "ee_standing_behind_chalk_line" );
|
self ent_flag_set( "ee_standing_behind_chalk_line" );
|
||||||
|
|
||||||
while ( self istouching( trigger ) )
|
while ( self istouching( trigger ) )
|
||||||
{
|
wait 0.25;
|
||||||
wait 0,25;
|
|
||||||
}
|
|
||||||
self ent_flag_clear( "ee_standing_behind_chalk_line" );
|
self ent_flag_clear( "ee_standing_behind_chalk_line" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("fxanim_props_dlc3");
|
||||||
|
|
||||||
player_piano_starts()
|
player_piano_starts()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -88,7 +87,7 @@ player_piano_starts()
|
|||||||
level notify( "piano_play" );
|
level notify( "piano_play" );
|
||||||
level setclientfield( "mansion_piano_play", 1 );
|
level setclientfield( "mansion_piano_play", 1 );
|
||||||
level setclientfield( "saloon_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" );
|
iprintln( "player piano song done" );
|
||||||
#/
|
#/
|
||||||
@ -99,7 +98,7 @@ player_piano_starts()
|
|||||||
|
|
||||||
mansion_ghost_plays_piano()
|
mansion_ghost_plays_piano()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
flag_wait( "player_piano_song_active" );
|
flag_wait( "player_piano_song_active" );
|
||||||
e_ghost = spawn_and_animate_ghost_pianist();
|
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()
|
spawn_and_animate_ghost_pianist()
|
||||||
{
|
{
|
||||||
s_anim = getstruct( "ee_mansion_piano_anim_struct", "targetname" );
|
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 = getent( "ee_ghost_piano_mansion_use_trigger", "targetname" );
|
||||||
t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 );
|
t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 );
|
||||||
t_use setinvisibletoall();
|
t_use setinvisibletoall();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "player_can_interact_with_ghost_piano_player", player );
|
level waittill( "player_can_interact_with_ghost_piano_player", player );
|
||||||
|
|
||||||
level thread player_piano_starts();
|
level thread player_piano_starts();
|
||||||
|
|
||||||
if ( !player has_player_received_reward() )
|
if ( !player has_player_received_reward() )
|
||||||
{
|
{
|
||||||
t_use setvisibletoplayer( player );
|
t_use setvisibletoplayer( player );
|
||||||
t_use thread player_can_use_ghost_piano_trigger( player );
|
t_use thread player_can_use_ghost_piano_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_waitopen( "player_piano_song_active" );
|
flag_waitopen( "player_piano_song_active" );
|
||||||
t_use setinvisibletoall();
|
t_use setinvisibletoall();
|
||||||
level notify( "ghost_piano_reward_unavailable" );
|
level notify( "ghost_piano_reward_unavailable" );
|
||||||
@ -148,24 +153,25 @@ player_can_use_ghost_piano_trigger( player )
|
|||||||
{
|
{
|
||||||
player endon( "death_or_disconnect" );
|
player endon( "death_or_disconnect" );
|
||||||
level endon( "ghost_piano_reward_unavailable" );
|
level endon( "ghost_piano_reward_unavailable" );
|
||||||
|
|
||||||
|
do
|
||||||
self waittill( "trigger", user );
|
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 );
|
self give_reward( player );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
player.got_easter_egg_reward = 1;
|
||||||
self setinvisibletoplayer( player );
|
self setinvisibletoplayer( player );
|
||||||
player notify( "player_received_ghost_round_free_perk" );
|
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 ) )
|
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!!" );
|
iprintln( "player got reward!!" );
|
||||||
#/
|
#/
|
||||||
@ -189,34 +195,25 @@ delete_ghost_pianist()
|
|||||||
|
|
||||||
devgui_support_ee()
|
devgui_support_ee()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
str_notify = level waittill_any_return( "ghost_piano_warp_to_mansion_piano", "ghost_piano_warp_to_bar" );
|
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" )
|
if ( str_notify == "ghost_piano_warp_to_mansion_piano" )
|
||||||
{
|
|
||||||
get_players()[0] warp_to_struct( "ee_warp_mansion_piano", "targetname" );
|
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" );
|
get_players()[0] warp_to_struct( "ee_warp_bar", "targetname" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
warp_to_struct( str_value, str_key )
|
warp_to_struct( str_value, str_key )
|
||||||
{
|
{
|
||||||
if ( !isDefined( str_key ) )
|
if ( !isdefined( str_key ) )
|
||||||
{
|
|
||||||
str_key = "targetname";
|
str_key = "targetname";
|
||||||
}
|
|
||||||
s_warp = getstruct( str_value, str_key );
|
s_warp = getstruct( str_value, str_key );
|
||||||
self setorigin( s_warp.origin );
|
self setorigin( s_warp.origin );
|
||||||
if ( isDefined( s_warp.angles ) )
|
|
||||||
{
|
if ( isdefined( s_warp.angles ) )
|
||||||
self setplayerangles( s_warp.angles );
|
self setplayerangles( s_warp.angles );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
#include maps/mp/zombies/_zm;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_buried;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_buried;
|
||||||
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
|
#include maps\mp\zombies\_zm;
|
||||||
|
|
||||||
main_start()
|
main_start()
|
||||||
{
|
{
|
||||||
@ -16,6 +18,7 @@ main_start()
|
|||||||
level thread spawned_slide_prone_trigger();
|
level thread spawned_slide_prone_trigger();
|
||||||
level thread spawned_life_triggers();
|
level thread spawned_life_triggers();
|
||||||
onplayerconnect_callback( ::ffotd_player_threads );
|
onplayerconnect_callback( ::ffotd_player_threads );
|
||||||
|
level thread reset_vulture_dvars_post_migrate();
|
||||||
}
|
}
|
||||||
|
|
||||||
main_end()
|
main_end()
|
||||||
@ -25,6 +28,7 @@ main_end()
|
|||||||
level thread zgrief_mode_fix();
|
level thread zgrief_mode_fix();
|
||||||
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
|
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.zombie_init_done = ::ffotd_zombie_init_done;
|
level.zombie_init_done = ::ffotd_zombie_init_done;
|
||||||
level thread bar_spawner_fix();
|
level thread bar_spawner_fix();
|
||||||
level thread maze_blocker_fix();
|
level thread maze_blocker_fix();
|
||||||
@ -32,9 +36,29 @@ main_end()
|
|||||||
level thread player_respawn_fix();
|
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()
|
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();
|
self thread jail_traversal_fix();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,31 +67,31 @@ jail_traversal_fix()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
window_pos = ( -837, 496, 8 );
|
window_pos = ( -837, 496, 8 );
|
||||||
fix_dist = 64;
|
fix_dist = 64;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
dist = distancesquared( self.origin, window_pos );
|
dist = distancesquared( self.origin, window_pos );
|
||||||
|
|
||||||
if ( dist < fix_dist )
|
if ( dist < fix_dist )
|
||||||
{
|
{
|
||||||
node = self getnegotiationstartnode();
|
node = self getnegotiationstartnode();
|
||||||
if ( isDefined( node ) )
|
|
||||||
|
if ( isdefined( node ) )
|
||||||
{
|
{
|
||||||
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
|
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
|
||||||
{
|
{
|
||||||
self setphysparams( 25, 0, 72 );
|
self setphysparams( 25, 0, 72 );
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( is_true( self.has_legs ) )
|
if ( is_true( self.has_legs ) )
|
||||||
{
|
|
||||||
self setphysparams( 15, 0, 72 );
|
self setphysparams( 15, 0, 72 );
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self setphysparams( 15, 0, 24 );
|
self setphysparams( 15, 0, 24 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,91 +102,79 @@ ghost_round_override_init()
|
|||||||
width = 91;
|
width = 91;
|
||||||
height = 290;
|
height = 290;
|
||||||
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
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";
|
trig1.script_noteworthy = "ghost_round_override";
|
||||||
}
|
}
|
||||||
|
|
||||||
zgrief_mode_fix()
|
zgrief_mode_fix()
|
||||||
{
|
{
|
||||||
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
|
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
|
||||||
_a98 = speed_trigger;
|
|
||||||
_k98 = getFirstArrayKey( _a98 );
|
foreach ( trig in speed_trigger )
|
||||||
while ( isDefined( _k98 ) )
|
|
||||||
{
|
{
|
||||||
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 );
|
trig.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
|
||||||
if ( isDefined( trig.clip ) )
|
|
||||||
{
|
if ( isdefined( trig.clip ) )
|
||||||
trig.clip.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
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 )
|
zgrief_respawn_override( revivee, return_struct )
|
||||||
{
|
{
|
||||||
players = get_players();
|
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" );
|
grief_initial = getstructarray( "street_standard_player_spawns", "targetname" );
|
||||||
_a119 = grief_initial;
|
|
||||||
_k119 = getFirstArrayKey( _a119 );
|
foreach ( struct in grief_initial )
|
||||||
while ( isDefined( _k119 ) )
|
|
||||||
{
|
{
|
||||||
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;
|
spawn_points[spawn_points.size] = struct;
|
||||||
initial_point = struct;
|
initial_point = struct;
|
||||||
initial_point.locked = 0;
|
initial_point.locked = 0;
|
||||||
}
|
}
|
||||||
_k119 = getNextArrayKey( _a119, _k119 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
closest_group = undefined;
|
closest_group = undefined;
|
||||||
closest_distance = 100000000;
|
closest_distance = 100000000;
|
||||||
backup_group = undefined;
|
backup_group = undefined;
|
||||||
backup_distance = 100000000;
|
backup_distance = 100000000;
|
||||||
|
|
||||||
if ( spawn_points.size == 0 )
|
if ( spawn_points.size == 0 )
|
||||||
{
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
|
||||||
i = 0;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
|
||||||
{
|
{
|
||||||
while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self )
|
if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self )
|
||||||
{
|
{
|
||||||
j = 0;
|
for ( j = 0; j < spawn_points.size; j++ )
|
||||||
while ( j < spawn_points.size )
|
|
||||||
{
|
|
||||||
if ( isDefined( spawn_points[ j ].script_int ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( spawn_points[j].script_int ) )
|
||||||
ideal_distance = spawn_points[j].script_int;
|
ideal_distance = spawn_points[j].script_int;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
ideal_distance = 1000;
|
ideal_distance = 1000;
|
||||||
}
|
|
||||||
if ( spawn_points[j].locked == 0 )
|
if ( spawn_points[j].locked == 0 )
|
||||||
{
|
{
|
||||||
plyr_dist = distancesquared( players[i].origin, spawn_points[j].origin );
|
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 )
|
if ( plyr_dist < closest_distance )
|
||||||
{
|
{
|
||||||
closest_distance = plyr_dist;
|
closest_distance = plyr_dist;
|
||||||
closest_group = j;
|
closest_group = j;
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( plyr_dist < backup_distance )
|
if ( plyr_dist < backup_distance )
|
||||||
{
|
{
|
||||||
backup_group = j;
|
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;
|
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 );
|
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 ) && !positionwouldtelefrag( spawn_location.origin ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
|
if ( isdefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return spawn_location;
|
return spawn_location;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
if ( isdefined( initial_point ) )
|
||||||
while ( isDefined( initial_point ) )
|
|
||||||
{
|
{
|
||||||
k = 0;
|
for ( k = 0; k < spawn_points.size; k++ )
|
||||||
while ( k < spawn_points.size )
|
|
||||||
{
|
{
|
||||||
if ( spawn_points[k] == initial_point )
|
if ( spawn_points[k] == initial_point )
|
||||||
{
|
{
|
||||||
closest_group = k;
|
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;
|
return spawn_location;
|
||||||
}
|
}
|
||||||
k++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,7 +230,7 @@ spawned_slide_prone_trigger()
|
|||||||
|
|
||||||
spawned_slide_push_trigger()
|
spawned_slide_push_trigger()
|
||||||
{
|
{
|
||||||
origin = ( -1416,5, -324, 428,5 );
|
origin = ( -1416.5, -324, 428.5 );
|
||||||
length = 111;
|
length = 111;
|
||||||
width = 394;
|
width = 394;
|
||||||
height = 189;
|
height = 189;
|
||||||
@ -233,39 +238,38 @@ spawned_slide_push_trigger()
|
|||||||
trig1.angles = ( 0, 0, 0 );
|
trig1.angles = ( 0, 0, 0 );
|
||||||
trig1.targetname = "push_from_prone";
|
trig1.targetname = "push_from_prone";
|
||||||
trig1.push_player_towards_point = ( -1336, -320, 360 );
|
trig1.push_player_towards_point = ( -1336, -320, 360 );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
trig1 waittill( "trigger", who );
|
trig1 waittill( "trigger", who );
|
||||||
|
|
||||||
if ( who getstance() == "prone" && isplayer( who ) )
|
if ( who getstance() == "prone" && isplayer( who ) )
|
||||||
{
|
|
||||||
who setstance( "crouch" );
|
who setstance( "crouch" );
|
||||||
}
|
|
||||||
trig1 thread slide_push_think( who );
|
trig1 thread slide_push_think( who );
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
slide_push_think( who )
|
slide_push_think( who )
|
||||||
{
|
{
|
||||||
whopos = ( 0, 0, 0 );
|
whopos = ( 0, 0, 0 );
|
||||||
|
|
||||||
while ( who istouching( self ) )
|
while ( who istouching( self ) )
|
||||||
{
|
{
|
||||||
if ( who.origin == whopos )
|
if ( who.origin == whopos )
|
||||||
{
|
|
||||||
who setvelocity( self get_push_vector() );
|
who setvelocity( self get_push_vector() );
|
||||||
}
|
|
||||||
whopos = who.origin;
|
whopos = who.origin;
|
||||||
wait 2;
|
wait 2.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
slide_push_in_trigger( player )
|
slide_push_in_trigger( player )
|
||||||
{
|
{
|
||||||
if ( !player is_player_using_thumbstick() )
|
if ( !player is_player_using_thumbstick() )
|
||||||
{
|
|
||||||
player setvelocity( self get_push_vector() );
|
player setvelocity( self get_push_vector() );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
spawned_life_triggers()
|
spawned_life_triggers()
|
||||||
{
|
{
|
||||||
@ -294,41 +298,42 @@ spawned_collision_ffotd()
|
|||||||
precachemodel( "p6_zm_bu_rock_strata_04" );
|
precachemodel( "p6_zm_bu_rock_strata_04" );
|
||||||
precachemodel( "p6_zm_bu_wood_planks_106x171" );
|
precachemodel( "p6_zm_bu_wood_planks_106x171" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
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 setmodel( "collision_geo_64x64x128_slick" );
|
||||||
collision1.angles = ( 4,54625, 313,41, -4,78954 );
|
collision1.angles = ( 4.54625, 313.41, -4.78954 );
|
||||||
collision1 ghost();
|
collision1 ghost();
|
||||||
collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
|
collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
|
||||||
collision2 setmodel( "collision_geo_256x256x10_standard" );
|
collision2 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 3,80002 );
|
collision2.angles = vectorscale( ( 0, 0, -1 ), 3.80002 );
|
||||||
collision2 ghost();
|
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 setmodel( "collision_geo_64x64x128_slick" );
|
||||||
collision3.angles = ( 1,27355, 320,806, -5,38137 );
|
collision3.angles = ( 1.27355, 320.806, -5.38137 );
|
||||||
collision3 ghost();
|
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 setmodel( "collision_geo_64x64x64_standard" );
|
||||||
saloon1.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
saloon1.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
|
||||||
saloon1 ghost();
|
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 setmodel( "collision_geo_64x64x64_standard" );
|
||||||
saloon2.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
saloon2.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
|
||||||
saloon2 ghost();
|
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 setmodel( "collision_geo_64x64x64_standard" );
|
||||||
gs1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
gs1.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||||
gs1 ghost();
|
gs1 ghost();
|
||||||
gs1 thread delete_upon_flag( "general_store_porch_door1" );
|
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 setmodel( "collision_geo_64x64x64_standard" );
|
||||||
gs2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
gs2.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||||
gs2 ghost();
|
gs2 ghost();
|
||||||
gs2 thread delete_upon_flag( "general_store_porch_door1" );
|
gs2 thread delete_upon_flag( "general_store_porch_door1" );
|
||||||
collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
|
collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
|
||||||
collision4 setmodel( "collision_geo_128x128x10_slick" );
|
collision4 setmodel( "collision_geo_128x128x10_slick" );
|
||||||
collision4.angles = ( 280,6, 270, 86,6 );
|
collision4.angles = ( 280.6, 270, 86.6 );
|
||||||
collision4 ghost();
|
collision4 ghost();
|
||||||
cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
|
cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
|
||||||
cw1 setmodel( "collision_geo_128x128x128_standard" );
|
cw1 setmodel( "collision_geo_128x128x128_standard" );
|
||||||
@ -336,7 +341,7 @@ spawned_collision_ffotd()
|
|||||||
cw1 ghost();
|
cw1 ghost();
|
||||||
rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
|
rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
|
||||||
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
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 = spawn( "script_model", ( -736, -2, 25 ) );
|
||||||
st1 setmodel( "collision_geo_128x128x10_standard" );
|
st1 setmodel( "collision_geo_128x128x10_standard" );
|
||||||
st1.angles = ( 270, 45, 0 );
|
st1.angles = ( 270, 45, 0 );
|
||||||
@ -351,7 +356,7 @@ spawned_collision_ffotd()
|
|||||||
ml2 ghost();
|
ml2 ghost();
|
||||||
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
|
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
|
||||||
mr1 setmodel( "collision_geo_256x256x10_standard" );
|
mr1 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
mr1.angles = ( 0, 13,8, -90 );
|
mr1.angles = ( 0, 13.8, -90 );
|
||||||
mr1 ghost();
|
mr1 ghost();
|
||||||
th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
|
th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
|
||||||
th1 setmodel( "collision_geo_128x128x128_standard" );
|
th1 setmodel( "collision_geo_128x128x128_standard" );
|
||||||
@ -363,11 +368,11 @@ spawned_collision_ffotd()
|
|||||||
th1a ghost();
|
th1a ghost();
|
||||||
th2 = spawn( "script_model", ( -544, 510, 286 ) );
|
th2 = spawn( "script_model", ( -544, 510, 286 ) );
|
||||||
th2 setmodel( "collision_geo_256x256x10_standard" );
|
th2 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
th2.angles = ( 0, 7,2, -7,8 );
|
th2.angles = ( 0, 7.2, -7.8 );
|
||||||
th2 ghost();
|
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 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
th2a.angles = ( 347,355, 6,47392, -7,41809 );
|
th2a.angles = ( 347.355, 6.47392, -7.41809 );
|
||||||
th2a ghost();
|
th2a ghost();
|
||||||
th3 = spawn( "script_model", ( 864, 872, 420 ) );
|
th3 = spawn( "script_model", ( 864, 872, 420 ) );
|
||||||
th3 setmodel( "collision_geo_256x256x256_standard" );
|
th3 setmodel( "collision_geo_256x256x256_standard" );
|
||||||
@ -375,41 +380,41 @@ spawned_collision_ffotd()
|
|||||||
th3 ghost();
|
th3 ghost();
|
||||||
th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
|
th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
|
||||||
th4 setmodel( "collision_geo_256x256x10_standard" );
|
th4 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
th4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
th4.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
|
||||||
th4 ghost();
|
th4 ghost();
|
||||||
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
|
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
|
||||||
ch1 setmodel( "collision_geo_256x256x10_standard" );
|
ch1 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
ch1.angles = ( 270, 340, 0,32 );
|
ch1.angles = ( 270, 340, 0.32 );
|
||||||
ch1 ghost();
|
ch1 ghost();
|
||||||
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
|
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
|
||||||
ch2 setmodel( "collision_geo_256x256x10_standard" );
|
ch2 setmodel( "collision_geo_256x256x10_standard" );
|
||||||
ch2.angles = ( 270, 340, 0,32 );
|
ch2.angles = ( 270, 340, 0.32 );
|
||||||
ch2 ghost();
|
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 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
||||||
rock1.angles = ( 7,87264, 94,015, 4,57899 );
|
rock1.angles = ( 7.87264, 94.015, 4.57899 );
|
||||||
rock2 = spawn( "script_model", ( 3351,97, -254,58, 95 ) );
|
rock2 = spawn( "script_model", ( 3351.97, -254.58, 95 ) );
|
||||||
rock2 setmodel( "p6_zm_bu_rock_strata_01" );
|
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 = spawn( "script_model", ( 671, -1412, 214 ) );
|
||||||
yt1 setmodel( "collision_geo_64x64x10_slick" );
|
yt1 setmodel( "collision_geo_64x64x10_slick" );
|
||||||
yt1.angles = ( 62,8, 315, 0 );
|
yt1.angles = ( 62.8, 315, 0 );
|
||||||
yt1 ghost();
|
yt1 ghost();
|
||||||
yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
|
yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
|
||||||
yt2 setmodel( "collision_geo_64x64x10_slick" );
|
yt2 setmodel( "collision_geo_64x64x10_slick" );
|
||||||
yt2.angles = ( 62,8, 315, 0 );
|
yt2.angles = ( 62.8, 315, 0 );
|
||||||
yt2 ghost();
|
yt2 ghost();
|
||||||
stb1 = spawn( "script_model", ( -807, 59, 127 ) );
|
stb1 = spawn( "script_model", ( -807, 59, 127 ) );
|
||||||
stb1 setmodel( "collision_geo_64x64x10_standard" );
|
stb1 setmodel( "collision_geo_64x64x10_standard" );
|
||||||
stb1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
stb1.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||||
stb1 ghost();
|
stb1 ghost();
|
||||||
stb2 = spawn( "script_model", ( -807, 59, 191 ) );
|
stb2 = spawn( "script_model", ( -807, 59, 191 ) );
|
||||||
stb2 setmodel( "collision_geo_64x64x10_standard" );
|
stb2 setmodel( "collision_geo_64x64x10_standard" );
|
||||||
stb2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
stb2.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||||
stb2 ghost();
|
stb2 ghost();
|
||||||
stb3 = spawn( "script_model", ( -861, 59, 31 ) );
|
stb3 = spawn( "script_model", ( -861, 59, 31 ) );
|
||||||
stb3 setmodel( "collision_geo_128x128x10_standard" );
|
stb3 setmodel( "collision_geo_128x128x10_standard" );
|
||||||
stb3.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
stb3.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
|
||||||
stb3 ghost();
|
stb3 ghost();
|
||||||
j162 = spawn( "script_model", ( 912, -936, 214 ) );
|
j162 = spawn( "script_model", ( 912, -936, 214 ) );
|
||||||
j162 setmodel( "collision_geo_128x128x10_standard" );
|
j162 setmodel( "collision_geo_128x128x10_standard" );
|
||||||
@ -417,25 +422,33 @@ spawned_collision_ffotd()
|
|||||||
j162 ghost();
|
j162 ghost();
|
||||||
j156 = spawn( "script_model", ( 434, 1213, 184 ) );
|
j156 = spawn( "script_model", ( 434, 1213, 184 ) );
|
||||||
j156 setmodel( "collision_geo_128x128x10_standard" );
|
j156 setmodel( "collision_geo_128x128x10_standard" );
|
||||||
j156.angles = vectorScale( ( 0, 0, 0 ), 273 );
|
j156.angles = vectorscale( ( 1, 0, 0 ), 273.0 );
|
||||||
j156 ghost();
|
j156 ghost();
|
||||||
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
|
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
|
||||||
j163_1 setmodel( "collision_geo_128x128x10_slick" );
|
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_1 ghost();
|
||||||
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
|
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
|
||||||
j163_2 setmodel( "collision_geo_128x128x10_slick" );
|
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();
|
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 setmodel( "p6_zm_bu_rock_strata_04" );
|
||||||
j125_1.angles = ( 13,345, 103,42, -13,4657 );
|
j125_1.angles = ( 13.345, 103.42, -13.4657 );
|
||||||
j125_3 = spawn( "script_model", ( 2448,7, 852,791, 272,051 ) );
|
j125_3 = spawn( "script_model", ( 2448.7, 852.791, 272.051 ) );
|
||||||
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
||||||
j125_3.angles = ( 0, 270, 19,4 );
|
j125_3.angles = ( 0, 270, 19.4 );
|
||||||
j125_4 = spawn( "script_model", ( 2313,21, 872,54, 241,01 ) );
|
j125_4 = spawn( "script_model", ( 2313.21, 872.54, 241.01 ) );
|
||||||
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
||||||
j125_4.angles = ( 0, 0, 0 );
|
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;
|
width = 8;
|
||||||
height = 64;
|
height = 64;
|
||||||
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
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.script_noteworthy = "push_trigger";
|
||||||
trig1.push_player_towards_point = ( 2666, 685, 183 );
|
trig1.push_player_towards_point = ( 2666, 685, 183 );
|
||||||
}
|
}
|
||||||
@ -473,7 +486,7 @@ ghost_mansion_to_maze_push_trigger_right()
|
|||||||
width = 16;
|
width = 16;
|
||||||
height = 64;
|
height = 64;
|
||||||
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
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.script_noteworthy = "push_trigger";
|
||||||
trig1.push_player_towards_point = ( 2686, 440, 174 );
|
trig1.push_player_towards_point = ( 2686, 440, 174 );
|
||||||
}
|
}
|
||||||
@ -493,26 +506,25 @@ ghost_mansion_from_maze_push_trigger()
|
|||||||
push_players_standing_in_trigger_volumes()
|
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 );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( !player is_player_using_thumbstick() )
|
if ( !player is_player_using_thumbstick() )
|
||||||
{
|
|
||||||
player setvelocity( self get_push_vector() );
|
player setvelocity( self get_push_vector() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
is_player_using_thumbstick()
|
is_player_using_thumbstick()
|
||||||
{
|
{
|
||||||
b_using_thumbstick = 1;
|
b_using_thumbstick = 1;
|
||||||
v_thumbstick = self getnormalizedmovement();
|
v_thumbstick = self getnormalizedmovement();
|
||||||
if ( length( v_thumbstick ) < 0,3 )
|
|
||||||
{
|
if ( length( v_thumbstick ) < 0.3 )
|
||||||
b_using_thumbstick = 0;
|
b_using_thumbstick = 0;
|
||||||
}
|
|
||||||
return b_using_thumbstick;
|
return b_using_thumbstick;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,64 +535,50 @@ get_push_vector()
|
|||||||
|
|
||||||
bar_spawner_fix()
|
bar_spawner_fix()
|
||||||
{
|
{
|
||||||
bad_pos = ( 459,5, -1984, 84 );
|
bad_pos = ( 459.5, -1984, 84 );
|
||||||
dist_fix = 64;
|
dist_fix = 64;
|
||||||
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
|
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
|
||||||
_a586 = bar_spawners;
|
|
||||||
_k586 = getFirstArrayKey( _a586 );
|
foreach ( spawner in bar_spawners )
|
||||||
while ( isDefined( _k586 ) )
|
|
||||||
{
|
{
|
||||||
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 );
|
dist = distancesquared( spawner.origin, bad_pos );
|
||||||
|
|
||||||
if ( dist < dist_fix )
|
if ( dist < dist_fix )
|
||||||
{
|
spawner.origin = ( 459.5, -2020, 84 );
|
||||||
spawner.origin = ( 459,5, -2020, 84 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k586 = getNextArrayKey( _a586, _k586 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player_respawn_fix()
|
player_respawn_fix()
|
||||||
{
|
{
|
||||||
maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
|
maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
|
||||||
_a602 = maze_spawners;
|
|
||||||
_k602 = getFirstArrayKey( _a602 );
|
foreach ( spawner in maze_spawners )
|
||||||
while ( isDefined( _k602 ) )
|
|
||||||
{
|
{
|
||||||
spawner = _a602[ _k602 ];
|
|
||||||
if ( spawner.origin == ( 3469, 1026, 20 ) )
|
if ( spawner.origin == ( 3469, 1026, 20 ) )
|
||||||
{
|
|
||||||
spawner.origin = ( 3509, 1032, 76 );
|
spawner.origin = ( 3509, 1032, 76 );
|
||||||
}
|
}
|
||||||
_k602 = getNextArrayKey( _a602, _k602 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
door_clip_fix()
|
door_clip_fix()
|
||||||
{
|
{
|
||||||
bank1 = getentarray( "pf728_auto2510", "targetname" );
|
bank1 = getentarray( "pf728_auto2510", "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < bank1.size )
|
for ( i = 0; i < bank1.size; i++ )
|
||||||
{
|
|
||||||
if ( isDefined( bank1[ i ].script_noteworthy ) && bank1[ i ].script_noteworthy == "clip" )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( bank1[i].script_noteworthy ) && bank1[i].script_noteworthy == "clip" )
|
||||||
bank1[i] delete();
|
bank1[i] delete();
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
bank2 = getentarray( "pf728_auto2507", "targetname" );
|
bank2 = getentarray( "pf728_auto2507", "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < bank2.size )
|
for ( i = 0; i < bank2.size; i++ )
|
||||||
{
|
|
||||||
if ( isDefined( bank2[ i ].script_noteworthy ) && bank2[ i ].script_noteworthy == "clip" )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( bank2[i].script_noteworthy ) && bank2[i].script_noteworthy == "clip" )
|
||||||
bank2[i] delete();
|
bank2[i] delete();
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
maze_blocker_fix()
|
maze_blocker_fix()
|
||||||
@ -589,30 +587,31 @@ maze_blocker_fix()
|
|||||||
node_target_org = ( 4734, 1198, 32 );
|
node_target_org = ( 4734, 1198, 32 );
|
||||||
blocker_node = getnearestnode( node_org );
|
blocker_node = getnearestnode( node_org );
|
||||||
blocker_node_target = getnearestnode( node_target_org );
|
blocker_node_target = getnearestnode( node_target_org );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "zm_buried_maze_changed" );
|
level waittill( "zm_buried_maze_changed" );
|
||||||
|
|
||||||
found = 0;
|
found = 0;
|
||||||
perm_list = level._maze._perms[level._maze._cur_perm];
|
perm_list = level._maze._perms[level._maze._cur_perm];
|
||||||
_a648 = perm_list;
|
|
||||||
_k648 = getFirstArrayKey( _a648 );
|
foreach ( blocker in perm_list )
|
||||||
while ( isDefined( _k648 ) )
|
|
||||||
{
|
{
|
||||||
blocker = _a648[ _k648 ];
|
|
||||||
if ( blocker == "blocker_10" )
|
if ( blocker == "blocker_10" )
|
||||||
{
|
{
|
||||||
found = 1;
|
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, blocker_node_target, 0 );
|
||||||
unlink_nodes( blocker_node_target, blocker_node, 0 );
|
unlink_nodes( blocker_node_target, blocker_node, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k648 = getNextArrayKey( _a648, _k648 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !found )
|
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, blocker_node_target, 1 );
|
||||||
link_nodes( blocker_node_target, blocker_node, 1 );
|
link_nodes( blocker_node_target, blocker_node, 1 );
|
||||||
@ -624,15 +623,15 @@ maze_blocker_fix()
|
|||||||
time_bomb_takeaway()
|
time_bomb_takeaway()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "new_tactical_grenade", new_weapon );
|
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" );
|
self takeweapon( "time_bomb_detonator_zm" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ffotd_player_threads()
|
ffotd_player_threads()
|
||||||
{
|
{
|
||||||
@ -687,18 +686,20 @@ church_fence_push_trigger()
|
|||||||
dtp_push()
|
dtp_push()
|
||||||
{
|
{
|
||||||
pos = ( 0, 0, 0 );
|
pos = ( 0, 0, 0 );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( pos == player.origin )
|
if ( pos == player.origin )
|
||||||
{
|
{
|
||||||
if ( player getstance() == "prone" )
|
if ( player getstance() == "prone" )
|
||||||
{
|
|
||||||
player setstance( "crouch" );
|
player setstance( "crouch" );
|
||||||
}
|
|
||||||
player setvelocity( self get_push_vector() );
|
player setvelocity( self get_push_vector() );
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = player.origin;
|
pos = player.origin;
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include maps/mp/zombies/_zm_stats;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_ai_ghost;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_buried_classic;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_buried_classic;
|
||||||
|
#include maps\mp\zombies\_zm_ai_ghost;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
|
||||||
init_fountain()
|
init_fountain()
|
||||||
{
|
{
|
||||||
@ -42,14 +44,16 @@ sloth_fountain_think()
|
|||||||
flag_wait( "courtyard_fountain_broken" );
|
flag_wait( "courtyard_fountain_broken" );
|
||||||
level setclientfield( "sloth_fountain_start", 1 );
|
level setclientfield( "sloth_fountain_start", 1 );
|
||||||
s_courtyard_fountain = getstruct( "courtyard_fountain_struct", "targetname" );
|
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 );
|
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["fx_buried_fountain_spray"], s_courtyard_fountain.origin );
|
||||||
playfx( level._effect["fountain_break"], 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();
|
show_maze_fountain_water();
|
||||||
fountain_debug_print( "courtyard_fountain_broken" );
|
fountain_debug_print( "courtyard_fountain_broken" );
|
||||||
}
|
}
|
||||||
@ -57,12 +61,12 @@ sloth_fountain_think()
|
|||||||
set_flag_on_notify( notifystr, strflag )
|
set_flag_on_notify( notifystr, strflag )
|
||||||
{
|
{
|
||||||
if ( notifystr != "death" )
|
if ( notifystr != "death" )
|
||||||
{
|
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
}
|
|
||||||
if ( !level.flag[strflag] )
|
if ( !level.flag[strflag] )
|
||||||
{
|
{
|
||||||
self waittill( notifystr );
|
self waittill( notifystr );
|
||||||
|
|
||||||
flag_set( strflag );
|
flag_set( strflag );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +86,7 @@ hide_maze_fountain_water()
|
|||||||
t_water enablelinkto();
|
t_water enablelinkto();
|
||||||
m_water = getent( "maze_fountain_water", "targetname" );
|
m_water = getent( "maze_fountain_water", "targetname" );
|
||||||
t_water linkto( m_water );
|
t_water linkto( m_water );
|
||||||
m_water movez( -475, 0,05 );
|
m_water movez( -475, 0.05 );
|
||||||
}
|
}
|
||||||
|
|
||||||
show_maze_fountain_water()
|
show_maze_fountain_water()
|
||||||
@ -99,18 +103,14 @@ wait_for_maze_fountain_to_be_destroyed()
|
|||||||
level endon( "_destroy_maze_fountain" );
|
level endon( "_destroy_maze_fountain" );
|
||||||
#/
|
#/
|
||||||
t_damage = getent( "maze_fountain_trigger", "targetname" );
|
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 );
|
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;
|
damage = 0;
|
||||||
}
|
asm_cond( isdefined( type ) && type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH", loc_EE6 );
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,10 +118,10 @@ destroy_maze_fountain()
|
|||||||
{
|
{
|
||||||
s_fountain = getstruct( "maze_fountain_struct", "targetname" );
|
s_fountain = getstruct( "maze_fountain_struct", "targetname" );
|
||||||
level setclientfield( "maze_fountain_start", 1 );
|
level setclientfield( "maze_fountain_start", 1 );
|
||||||
if ( isDefined( s_fountain ) )
|
|
||||||
{
|
if ( isdefined( s_fountain ) )
|
||||||
playfx( level._effect["fountain_break"], s_fountain.origin );
|
playfx( level._effect["fountain_break"], s_fountain.origin );
|
||||||
}
|
|
||||||
s_fountain_clip = getent( "maze_fountain_clip", "targetname" );
|
s_fountain_clip = getent( "maze_fountain_clip", "targetname" );
|
||||||
s_fountain_clip delete();
|
s_fountain_clip delete();
|
||||||
flag_set( "maze_fountain_broken" );
|
flag_set( "maze_fountain_broken" );
|
||||||
@ -130,24 +130,22 @@ destroy_maze_fountain()
|
|||||||
fountain_transport_think()
|
fountain_transport_think()
|
||||||
{
|
{
|
||||||
t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
|
t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
t_transporter waittill( "trigger", player );
|
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;
|
player.is_in_fountain_transport_trigger = 1;
|
||||||
|
|
||||||
if ( flag( "fountain_transport_active" ) )
|
if ( flag( "fountain_transport_active" ) )
|
||||||
{
|
|
||||||
player thread transport_player_to_start_zone();
|
player thread transport_player_to_start_zone();
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
player thread delay_transport_check();
|
player thread delay_transport_check();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
delay_transport_check()
|
delay_transport_check()
|
||||||
{
|
{
|
||||||
@ -161,45 +159,50 @@ transport_player_to_start_zone()
|
|||||||
{
|
{
|
||||||
self endon( "death_or_disconnect" );
|
self endon( "death_or_disconnect" );
|
||||||
fountain_debug_print( "transport player!" );
|
fountain_debug_print( "transport player!" );
|
||||||
if ( !isDefined( level._fountain_transporter ) )
|
|
||||||
|
if ( !isdefined( level._fountain_transporter ) )
|
||||||
{
|
{
|
||||||
level._fountain_transporter = spawnstruct();
|
level._fountain_transporter = spawnstruct();
|
||||||
level._fountain_transporter.index = 0;
|
level._fountain_transporter.index = 0;
|
||||||
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
|
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self playsoundtoplayer( "zmb_buried_teleport", self );
|
self playsoundtoplayer( "zmb_buried_teleport", self );
|
||||||
self play_teleport_fx();
|
self play_teleport_fx();
|
||||||
self flash_screen_white();
|
self flash_screen_white();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
|
|
||||||
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
|
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
|
||||||
{
|
|
||||||
level._fountain_transporter.index = 0;
|
level._fountain_transporter.index = 0;
|
||||||
}
|
|
||||||
tries = 0;
|
tries = 0;
|
||||||
|
|
||||||
while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) )
|
while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) )
|
||||||
{
|
{
|
||||||
tries++;
|
tries++;
|
||||||
|
|
||||||
if ( tries >= 4 )
|
if ( tries >= 4 )
|
||||||
{
|
{
|
||||||
tries = 0;
|
tries = 0;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
level._fountain_transporter.index++;
|
level._fountain_transporter.index++;
|
||||||
|
|
||||||
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
|
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
|
||||||
{
|
|
||||||
level._fountain_transporter.index = 0;
|
level._fountain_transporter.index = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin );
|
self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin );
|
||||||
self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles );
|
self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles );
|
||||||
level._fountain_transporter.index++;
|
level._fountain_transporter.index++;
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self play_teleport_fx();
|
self play_teleport_fx();
|
||||||
self thread flash_screen_fade_out();
|
self thread flash_screen_fade_out();
|
||||||
self maps/mp/zm_buried_classic::buried_set_start_area_lighting();
|
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 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_client_stat( "buried_fountain_transporter_used", 0 );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
|
||||||
self notify( "player_used_fountain_teleporter" );
|
self notify( "player_used_fountain_teleporter" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -215,16 +218,16 @@ flash_screen_white()
|
|||||||
{
|
{
|
||||||
self endon( "death_or_disconnect" );
|
self endon( "death_or_disconnect" );
|
||||||
self.hud_transporter_flash = self create_client_hud_elem();
|
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;
|
self.hud_transporter_flash.alpha = 1;
|
||||||
wait 0,2;
|
wait 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
flash_screen_fade_out()
|
flash_screen_fade_out()
|
||||||
{
|
{
|
||||||
self.hud_transporter_flash fadeovertime( 0,2 );
|
self.hud_transporter_flash fadeovertime( 0.2 );
|
||||||
self.hud_transporter_flash.alpha = 0;
|
self.hud_transporter_flash.alpha = 0;
|
||||||
wait 0,2;
|
wait 0.2;
|
||||||
self.hud_transporter_flash destroy();
|
self.hud_transporter_flash destroy();
|
||||||
self.hud_transporter_flash = undefined;
|
self.hud_transporter_flash = undefined;
|
||||||
}
|
}
|
||||||
@ -246,28 +249,19 @@ create_client_hud_elem()
|
|||||||
|
|
||||||
debug_warp_player_to_fountain()
|
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" );
|
str_notify = level waittill_any_return( "warp_player_to_maze_fountain", "warp_player_to_courtyard_fountain" );
|
||||||
|
|
||||||
if ( str_notify == "warp_player_to_maze_fountain" )
|
if ( str_notify == "warp_player_to_maze_fountain" )
|
||||||
{
|
|
||||||
str_warp_point = "teleport_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";
|
str_warp_point = "teleport_player_to_courtyard_fountain";
|
||||||
}
|
|
||||||
}
|
foreach ( player in get_players() )
|
||||||
_a332 = get_players();
|
|
||||||
_k332 = getFirstArrayKey( _a332 );
|
|
||||||
while ( isDefined( _k332 ) )
|
|
||||||
{
|
{
|
||||||
player = _a332[ _k332 ];
|
|
||||||
_warp_player_to_maze_fountain( player, str_warp_point );
|
_warp_player_to_maze_fountain( player, str_warp_point );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
_k332 = getNextArrayKey( _a332, _k332 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,12 +270,10 @@ _warp_player_to_maze_fountain( player, str_teleport_point )
|
|||||||
{
|
{
|
||||||
fountain_debug_print( "teleporting player to " + str_teleport_point );
|
fountain_debug_print( "teleporting player to " + str_teleport_point );
|
||||||
s_warp = getstruct( str_teleport_point, "targetname" );
|
s_warp = getstruct( str_teleport_point, "targetname" );
|
||||||
origin = s_warp.origin;
|
|
||||||
while ( positionwouldtelefrag( origin ) )
|
for ( origin = s_warp.origin; positionwouldtelefrag( origin ); origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 );
|
|
||||||
}
|
|
||||||
player setorigin( origin );
|
player setorigin( origin );
|
||||||
player setplayerangles( s_warp.angles );
|
player setplayerangles( s_warp.angles );
|
||||||
}
|
}
|
||||||
@ -289,9 +281,7 @@ _warp_player_to_maze_fountain( player, str_teleport_point )
|
|||||||
fountain_debug_print( str_text )
|
fountain_debug_print( str_text )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getDvarInt( #"AE3F04F6" ) > 0 )
|
if ( getdvarint( _hash_AE3F04F6 ) > 0 )
|
||||||
{
|
|
||||||
iprintlnbold( str_text );
|
iprintlnbold( str_text );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
#include maps/mp/_utility;
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#using_animtree( "fxanim_props_dlc3" );
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\createfx\zm_buried_fx;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
precache_createfx_fx();
|
precache_createfx_fx();
|
||||||
precache_scripted_fx();
|
precache_scripted_fx();
|
||||||
precache_fxanim_props();
|
precache_fxanim_props();
|
||||||
maps/mp/createfx/zm_buried_fx::main();
|
maps\mp\createfx\zm_buried_fx::main();
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_scripted_fx()
|
precache_scripted_fx()
|
||||||
@ -20,19 +21,22 @@ precache_scripted_fx()
|
|||||||
level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
|
level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
|
||||||
level._effect["orange_eyes"] = loadfx( "misc/fx_zombie_eye_single" );
|
level._effect["orange_eyes"] = loadfx( "misc/fx_zombie_eye_single" );
|
||||||
level._effect["player_possessed_eyes"] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" );
|
level._effect["player_possessed_eyes"] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" );
|
||||||
gametype = getDvar( "ui_gametype" );
|
gametype = getdvar( "ui_gametype" );
|
||||||
|
|
||||||
if ( gametype == "zcleansed" )
|
if ( gametype == "zcleansed" )
|
||||||
{
|
{
|
||||||
level._effect["blue_eyes_player"] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" );
|
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" );
|
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_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_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["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["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["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["crusher_sparks"] = loadfx( "maps/zombie_buried/fx_buried_crusher_sparks" );
|
||||||
level._effect["rise_burst_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_billow_body" );
|
level._effect["rise_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" );
|
level._effect["fx_buried_meteor_lg_runner"] = loadfx( "maps/zombie_buried/fx_buried_meteor_lg_runner" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("fxanim_props_dlc3");
|
||||||
|
|
||||||
precache_fxanim_props()
|
precache_fxanim_props()
|
||||||
{
|
{
|
||||||
level.scr_anim["fxanim_props"]["sheriff_sign"] = %fxanim_zom_buried_sign_sheriff_anim;
|
level.scr_anim["fxanim_props"]["sheriff_sign"] = %fxanim_zom_buried_sign_sheriff_anim;
|
||||||
|
@ -1,185 +1,186 @@
|
|||||||
//checked includes changed to match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zm_buried_grief_street;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zm_buried_turned_street;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/zm_buried_classic;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/zm_buried;
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include maps\mp\zm_buried;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\zm_buried_classic;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\zm_buried_turned_street;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zm_buried_grief_street;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
#include common_scripts/utility;
|
#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( "zclassic", maps\mp\zm_buried::zclassic_preinit, undefined, undefined );
|
||||||
add_map_gamemode( "zcleansed", maps/mp/zm_buried::zcleansed_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_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( "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( "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_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" );
|
chalk_triggers = getentarray( "chalk_buildable_trigger", "targetname" );
|
||||||
array_thread( chalk_triggers, ::self_delete );
|
array_thread( chalk_triggers, ::self_delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
deletebuyabledoors() //checked changed to match cerberus output
|
deletebuyabledoors()
|
||||||
{
|
{
|
||||||
doors_trigs = getentarray( "zombie_door", "targetname" );
|
doors_trigs = getentarray( "zombie_door", "targetname" );
|
||||||
|
|
||||||
foreach ( door in doors_trigs )
|
foreach ( door in doors_trigs )
|
||||||
{
|
{
|
||||||
doors = getentarray( door.target, "targetname" );
|
doors = getentarray( door.target, "targetname" );
|
||||||
array_thread( doors, ::self_delete );
|
array_thread( doors, ::self_delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
array_thread( doors_trigs, ::self_delete );
|
array_thread( doors_trigs, ::self_delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
deletebuyabledebris( justtriggers ) //checked changed to match cerberus output
|
deletebuyabledebris( justtriggers )
|
||||||
{
|
{
|
||||||
debris_trigs = getentarray( "zombie_debris", "targetname" );
|
debris_trigs = getentarray( "zombie_debris", "targetname" );
|
||||||
while ( !is_true( justtriggers ) )
|
|
||||||
|
if ( !is_true( justtriggers ) )
|
||||||
{
|
{
|
||||||
foreach ( trig in debris_trigs )
|
foreach ( trig in debris_trigs )
|
||||||
{
|
{
|
||||||
if ( isDefined( trig.script_flag ) )
|
if ( isdefined( trig.script_flag ) )
|
||||||
{
|
|
||||||
flag_set( trig.script_flag );
|
flag_set( trig.script_flag );
|
||||||
}
|
|
||||||
parts = getentarray( trig.target, "targetname" );
|
parts = getentarray( trig.target, "targetname" );
|
||||||
array_thread( parts, ::self_delete );
|
array_thread( parts, ::self_delete );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
array_thread( debris_trigs, ::self_delete );
|
array_thread( debris_trigs, ::self_delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteslothbarricades( justtriggers ) //checked changed to match cerberus output
|
deleteslothbarricades( justtriggers )
|
||||||
{
|
{
|
||||||
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
|
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
|
||||||
while ( !is_true( justtriggers ) )
|
|
||||||
|
if ( !is_true( justtriggers ) )
|
||||||
{
|
{
|
||||||
foreach ( trig in sloth_trigs )
|
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 );
|
flag_set( trig.script_flag );
|
||||||
}
|
|
||||||
parts = getentarray( trig.target, "targetname" );
|
parts = getentarray( trig.target, "targetname" );
|
||||||
array_thread( parts, ::self_delete );
|
array_thread( parts, ::self_delete );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
array_thread( sloth_trigs, ::self_delete );
|
array_thread( sloth_trigs, ::self_delete );
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteslothbarricade( location ) //checked changed to match cerberus output
|
deleteslothbarricade( location )
|
||||||
{
|
{
|
||||||
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
|
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
|
||||||
|
|
||||||
foreach ( trig in sloth_trigs )
|
foreach ( trig in sloth_trigs )
|
||||||
{
|
{
|
||||||
if ( isDefined( trig.script_location ) && trig.script_location == location )
|
if ( isdefined( trig.script_location ) && trig.script_location == location )
|
||||||
{
|
|
||||||
if ( isDefined( trig.script_flag ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( trig.script_flag ) )
|
||||||
flag_set( trig.script_flag );
|
flag_set( trig.script_flag );
|
||||||
}
|
|
||||||
parts = getentarray( trig.target, "targetname" );
|
parts = getentarray( trig.target, "targetname" );
|
||||||
array_thread( parts, ::self_delete );
|
array_thread( parts, ::self_delete );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnmapcollision( collision_model, origin ) //checked matches cerberus output
|
spawnmapcollision( collision_model, origin )
|
||||||
{
|
|
||||||
if ( !isDefined( origin ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( origin ) )
|
||||||
origin = ( 0, 0, 0 );
|
origin = ( 0, 0, 0 );
|
||||||
}
|
|
||||||
collision = spawn( "script_model", origin, 1 );
|
collision = spawn( "script_model", origin, 1 );
|
||||||
collision setmodel( collision_model );
|
collision setmodel( collision_model );
|
||||||
collision disconnectpaths();
|
collision disconnectpaths();
|
||||||
}
|
}
|
||||||
|
|
||||||
turnperkon( perk ) //checked matches cerberus output
|
turnperkon( perk )
|
||||||
{
|
{
|
||||||
level notify( perk + "_on" );
|
level notify( perk + "_on" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
disableallzonesexcept( zones ) //checked changed to match cerberus output see compiler_limitations.md No. 1
|
disableallzonesexcept( zones )
|
||||||
{
|
{
|
||||||
foreach ( zone in zones )
|
foreach ( zone in zones )
|
||||||
{
|
level thread maps\mp\zombies\_zm_zonemgr::enable_zone( zone );
|
||||||
level thread maps/mp/zombies/_zm_zonemgr::enable_zone( zone );
|
|
||||||
}
|
foreach ( zoneindex, zone in level.zones )
|
||||||
zoneindex = 0;
|
|
||||||
foreach ( zone in level.zones )
|
|
||||||
{
|
{
|
||||||
should_disable = 1;
|
should_disable = 1;
|
||||||
for ( i = 0; i > zones.size; i++ )
|
|
||||||
{
|
foreach ( cleared_zone in zones )
|
||||||
if ( zoneindex == i )
|
|
||||||
{
|
{
|
||||||
|
if ( zoneindex == cleared_zone )
|
||||||
should_disable = 0;
|
should_disable = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( is_true( should_disable ) )
|
if ( is_true( should_disable ) )
|
||||||
{
|
{
|
||||||
zones[ i ].is_enabled = 0;
|
zone.is_enabled = 0;
|
||||||
zones[ i ].is_spawning_allowed = 0;
|
zone.is_spawning_allowed = 0;
|
||||||
}
|
}
|
||||||
zoneindex++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_adjacent_zone( main_zone, adjacent_zone ) //checked changed to match cerberus output
|
remove_adjacent_zone( main_zone, adjacent_zone )
|
||||||
{
|
|
||||||
if ( isDefined( level.zones[ main_zone ].adjacent_zones ) && isDefined( level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] ) )
|
|
||||||
{
|
{
|
||||||
|
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;
|
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;
|
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 )
|
foreach ( stub in level.chalk_builds )
|
||||||
{
|
{
|
||||||
wallbuy = getstruct( stub.target, "targetname" );
|
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] );
|
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];
|
player = get_players()[0];
|
||||||
|
|
||||||
foreach ( stub in level.buildable_stubs )
|
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_finish_build( player );
|
||||||
stub maps/mp/zombies/_zm_buildables::buildablestub_remove();
|
stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
|
||||||
for ( i = 0; i < stub.buildablezone.pieces.size; i++ )
|
|
||||||
{
|
foreach ( piece in stub.buildablezone.pieces )
|
||||||
stub.buildablezone.pieces[ i ] maps/mp/zombies/_zm_buildables::piece_unspawn();
|
piece maps\mp\zombies\_zm_buildables::piece_unspawn();
|
||||||
}
|
|
||||||
stub.model notsolid();
|
stub.model notsolid();
|
||||||
stub.model show();
|
stub.model show();
|
||||||
return;
|
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;
|
wait 0.1;
|
||||||
self buildablestub_remove();
|
self buildablestub_remove();
|
||||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub );
|
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
|
||||||
piece piece_unspawn();
|
piece piece_unspawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
generatebuildabletarps() //checked changed to match cerberus output
|
generatebuildabletarps()
|
||||||
{
|
{
|
||||||
struct_locations = getstructarray( "buildables_tarp", "targetname" );
|
struct_locations = getstructarray( "buildables_tarp", "targetname" );
|
||||||
level.buildable_tarps = [];
|
level.buildable_tarps = [];
|
||||||
|
|
||||||
foreach ( struct in struct_locations )
|
foreach ( struct in struct_locations )
|
||||||
{
|
{
|
||||||
tarp = spawn( "script_model", struct.origin );
|
tarp = spawn( "script_model", struct.origin );
|
||||||
tarp.angles = struct.angles;
|
tarp.angles = struct.angles;
|
||||||
tarp setmodel( "p6_zm_bu_buildable_bench_tarp" );
|
tarp setmodel( "p6_zm_bu_buildable_bench_tarp" );
|
||||||
tarp.targetname = "buildable_tarp";
|
tarp.targetname = "buildable_tarp";
|
||||||
if ( isDefined( struct.script_location ) )
|
|
||||||
{
|
if ( isdefined( struct.script_location ) )
|
||||||
tarp.script_location = struct.script_location;
|
tarp.script_location = struct.script_location;
|
||||||
}
|
|
||||||
level.buildable_tarps[level.buildable_tarps.size] = tarp;
|
level.buildable_tarps[level.buildable_tarps.size] = tarp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deletebuildabletarp( location ) //checked changed to match cerberus output
|
deletebuildabletarp( location )
|
||||||
{
|
{
|
||||||
foreach ( tarp in level.buildable_tarps )
|
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();
|
tarp delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
powerswitchstate( on ) //checked matches cerberus output
|
powerswitchstate( on )
|
||||||
{
|
{
|
||||||
trigger = getent( "use_elec_switch", "targetname" );
|
trigger = getent( "use_elec_switch", "targetname" );
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
if ( isdefined( trigger ) )
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
|
||||||
master_switch = getent( "elec_switch", "targetname" );
|
master_switch = getent( "elec_switch", "targetname" );
|
||||||
if ( isDefined( master_switch ) )
|
|
||||||
|
if ( isdefined( master_switch ) )
|
||||||
{
|
{
|
||||||
master_switch notsolid();
|
master_switch notsolid();
|
||||||
|
|
||||||
if ( is_true( on ) )
|
if ( is_true( on ) )
|
||||||
{
|
{
|
||||||
master_switch rotateroll( -90, 0.3 );
|
master_switch rotateroll( -90, 0.3 );
|
||||||
|
@ -1,31 +1,33 @@
|
|||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_equip_subwoofer;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_equip_springpad;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_equip_turbine;
|
#include maps\mp\zombies\_zm_race_utility;
|
||||||
#include maps/mp/zm_buried_buildables;
|
#include maps\mp\zm_buried_gamemodes;
|
||||||
#include maps/mp/zm_buried_gamemodes;
|
#include maps\mp\zm_buried_buildables;
|
||||||
#include maps/mp/zombies/_zm_race_utility;
|
#include maps\mp\zombies\_zm_equip_turbine;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_equip_springpad;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_equip_subwoofer;
|
||||||
#include maps/mp/_utility;
|
#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( "zm_collision_buried_street_grief" );
|
||||||
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
|
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
|
||||||
level.chalk_buildable_pieces_hide = 1;
|
level.chalk_buildable_pieces_hide = 1;
|
||||||
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
|
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
|
||||||
maps/mp/zm_buried_buildables::include_buildables( griefbuildables );
|
maps\mp\zm_buried_buildables::include_buildables( griefbuildables );
|
||||||
maps/mp/zm_buried_buildables::init_buildables( griefbuildables );
|
maps\mp\zm_buried_buildables::init_buildables( griefbuildables );
|
||||||
maps/mp/zombies/_zm_equip_turbine::init();
|
maps\mp\zombies\_zm_equip_turbine::init();
|
||||||
maps/mp/zombies/_zm_equip_turbine::init_animtree();
|
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_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\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" );
|
start_chest = getstruct( "start_chest", "script_noteworthy" );
|
||||||
court_chest = getstruct( "courtroom_chest1", "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] = tunnel_chest;
|
||||||
level.chests[level.chests.size] = jail_chest;
|
level.chests[level.chests.size] = jail_chest;
|
||||||
level.chests[level.chests.size] = gun_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.buildables_built["pap"] = 1;
|
||||||
level.equipment_team_pick_up = 1;
|
level.equipment_team_pick_up = 1;
|
||||||
level thread maps/mp/zombies/_zm_buildables::think_buildables();
|
level thread maps\mp\zombies\_zm_buildables::think_buildables();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" );
|
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
|
||||||
street_treasure_chest_init();
|
street_treasure_chest_init();
|
||||||
generatebuildabletarps();
|
generatebuildabletarps();
|
||||||
deletebuildabletarp( "courthouse" );
|
deletebuildabletarp( "courthouse" );
|
||||||
@ -71,20 +73,20 @@ main() //checked matches cerberus output
|
|||||||
turnperkon( "Pack_A_Punch" );
|
turnperkon( "Pack_A_Punch" );
|
||||||
}
|
}
|
||||||
|
|
||||||
enemy_location_override( zombie, enemy ) //checked matches cerberus output
|
enemy_location_override( zombie, enemy )
|
||||||
{
|
{
|
||||||
location = enemy.origin;
|
location = enemy.origin;
|
||||||
if ( isDefined( self.reroute ) && self.reroute )
|
|
||||||
{
|
if ( isdefined( self.reroute ) && self.reroute )
|
||||||
if ( isDefined( self.reroute_origin ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.reroute_origin ) )
|
||||||
location = self.reroute_origin;
|
location = self.reroute_origin;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
builddynamicwallbuys() //checked matches cerberus output
|
builddynamicwallbuys()
|
||||||
{
|
{
|
||||||
builddynamicwallbuy( "bank", "beretta93r_zm" );
|
builddynamicwallbuy( "bank", "beretta93r_zm" );
|
||||||
builddynamicwallbuy( "bar", "pdw57_zm" );
|
builddynamicwallbuy( "bar", "pdw57_zm" );
|
||||||
@ -100,7 +102,7 @@ builddynamicwallbuys() //checked matches cerberus output
|
|||||||
builddynamicwallbuy( "candyshop", "870mcs_zm" );
|
builddynamicwallbuy( "candyshop", "870mcs_zm" );
|
||||||
}
|
}
|
||||||
|
|
||||||
buildbuildables() //checked matches cerberus output
|
buildbuildables()
|
||||||
{
|
{
|
||||||
buildbuildable( "springpad_zm" );
|
buildbuildable( "springpad_zm" );
|
||||||
buildbuildable( "subwoofer_zm" );
|
buildbuildable( "subwoofer_zm" );
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
#include maps/mp/zombies/_zm_utility;
|
// T6 GSC SOURCE
|
||||||
#include common_scripts/utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
#using_animtree( "zm_buried_props" );
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
|
||||||
init_jail_animtree()
|
init_jail_animtree()
|
||||||
{
|
{
|
||||||
scriptmodelsuseanimtree( -1 );
|
scriptmodelsuseanimtree( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("zm_buried_props");
|
||||||
|
|
||||||
init_jail_anims()
|
init_jail_anims()
|
||||||
{
|
{
|
||||||
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
|
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
|
||||||
@ -35,15 +37,13 @@ init_jail()
|
|||||||
jail_open_door( jumpback )
|
jail_open_door( jumpback )
|
||||||
{
|
{
|
||||||
level.cell_door playsound( "zmb_jail_door_open" );
|
level.cell_door playsound( "zmb_jail_door_open" );
|
||||||
|
|
||||||
if ( is_true( jumpback ) )
|
if ( is_true( jumpback ) )
|
||||||
{
|
|
||||||
level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 );
|
level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level.cell_door setanim( level.jail_open, 1, 1, 1 );
|
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 notsolid();
|
||||||
level.cell_door.clip connectpaths();
|
level.cell_door.clip connectpaths();
|
||||||
@ -54,7 +54,8 @@ jail_close_door()
|
|||||||
{
|
{
|
||||||
level.cell_door playsound( "zmb_jail_door_close" );
|
level.cell_door playsound( "zmb_jail_door_close" );
|
||||||
level.cell_door setanim( level.jail_close_cower, 1, 1, 1 );
|
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 solid();
|
||||||
level.cell_door.clip disconnectpaths();
|
level.cell_door.clip disconnectpaths();
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_audio;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weap_time_bomb;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_equip_headchopper;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\zombies\_zm_equip_headchopper;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
#include common_scripts/utility;
|
#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" );
|
blocker_locations = getstructarray( "maze_blocker", "targetname" );
|
||||||
model_list = [];
|
model_list = [];
|
||||||
|
|
||||||
for ( i = 0; i < blocker_locations.size; i++ )
|
for ( i = 0; i < blocker_locations.size; i++ )
|
||||||
{
|
|
||||||
model_list[blocker_locations[i].model] = 1;
|
model_list[blocker_locations[i].model] = 1;
|
||||||
}
|
|
||||||
model_names = getarraykeys( model_list );
|
model_names = getarraykeys( model_list );
|
||||||
|
|
||||||
for ( i = 0; i < model_names.size; i++ )
|
for ( i = 0; i < model_names.size; i++ )
|
||||||
{
|
|
||||||
precachemodel( model_names[i] );
|
precachemodel( model_names[i] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate ) //checked changed to match cerberus output
|
maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < self.blocked_nodes.size; i++ )
|
for ( 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" );
|
blocker_locations = getstructarray( "maze_blocker", "targetname" );
|
||||||
|
|
||||||
foreach ( blocker in blocker_locations )
|
foreach ( blocker in blocker_locations )
|
||||||
{
|
|
||||||
registerclientfield( "world", "maze_blocker_" + blocker.script_noteworthy, 12000, 1, "int" );
|
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" );
|
blocker_locations = getstructarray( "maze_blocker", "targetname" );
|
||||||
level._maze._blocker_locations = [];
|
level._maze._blocker_locations = [];
|
||||||
|
|
||||||
for ( i = 0; i < blocker_locations.size; i++ )
|
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" );
|
blocker_locations[i].blocked_nodes = getnodearray( blocker_locations[i].target, "targetname" );
|
||||||
|
|
||||||
for ( j = 0; j < blocker_locations[i].blocked_nodes.size; j++ )
|
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" );
|
blocker_locations[i].blocked_nodes[j].connected_nodes = getnodearray( blocker_locations[i].blocked_nodes[j].target, "targetname" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
blocker_locations[i].blocked_nodes = [];
|
blocker_locations[i].blocked_nodes = [];
|
||||||
}
|
|
||||||
level._maze._blocker_locations[blocker_locations[i].script_noteworthy] = blocker_locations[i];
|
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" ) );
|
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();
|
randomize_maze_perms();
|
||||||
level._maze._active_perm_list = [];
|
level._maze._active_perm_list = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
init_maze_blocker_pool() //checked changed to match cerberus output
|
init_maze_blocker_pool()
|
||||||
{
|
{
|
||||||
pool_size = 0;
|
pool_size = 0;
|
||||||
|
|
||||||
for ( i = 0; i < level._maze._perms.size; i++ )
|
for ( i = 0; i < level._maze._perms.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level._maze._perms[i].size > pool_size )
|
if ( level._maze._perms[i].size > pool_size )
|
||||||
{
|
|
||||||
pool_size = level._maze._perms[i].size;
|
pool_size = level._maze._perms[i].size;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
level._maze._blocker_pool = [];
|
level._maze._blocker_pool = [];
|
||||||
|
|
||||||
for ( i = 0; i < pool_size; i++ )
|
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 ghost();
|
||||||
ent.in_use = 0;
|
ent.in_use = 0;
|
||||||
level._maze._blocker_pool[i] = ent;
|
level._maze._blocker_pool[i] = ent;
|
||||||
}
|
}
|
||||||
|
|
||||||
level._maze._blocker_pool_num_free = pool_size;
|
level._maze._blocker_pool_num_free = pool_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_blockers_available() //checked matches cerberus output
|
free_blockers_available()
|
||||||
{
|
{
|
||||||
return level._maze._blocker_pool_num_free > 0;
|
return level._maze._blocker_pool_num_free > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_free_blocker_model_from_pool() //checked changed to match cerberus output
|
get_free_blocker_model_from_pool()
|
||||||
{
|
{
|
||||||
for ( i = 0; i < level._maze._blocker_pool.size; i++ )
|
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[i].in_use = 1;
|
||||||
level._maze._blocker_pool_num_free--;
|
level._maze._blocker_pool_num_free--;
|
||||||
|
|
||||||
return level._maze._blocker_pool[i];
|
return level._maze._blocker_pool[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assertmsg( "zm_buried_maze : Blocker pool is empty." );
|
assertmsg( "zm_buried_maze : Blocker pool is empty." );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
return_blocker_model_to_pool( ent ) //checked changed to match cerberus output
|
return_blocker_model_to_pool( ent )
|
||||||
{
|
{
|
||||||
ent ghost();
|
ent 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 dontinterpolate();
|
||||||
ent.in_use = 0;
|
ent.in_use = 0;
|
||||||
level._maze._blocker_pool_num_free++;
|
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._perms = array_randomize( level._maze._perms );
|
||||||
level._maze._cur_perm = 0;
|
level._maze._cur_perm = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
level._maze = spawnstruct();
|
level._maze = spawnstruct();
|
||||||
level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" );
|
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();
|
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 );
|
self waittill( "lower_" + self.script_noteworthy );
|
||||||
|
|
||||||
if ( flag( "start_zombie_round_logic" ) )
|
if ( flag( "start_zombie_round_logic" ) )
|
||||||
{
|
|
||||||
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
|
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 - vectorScale( ( 0, 0, 1 ), 96 ), 1 );
|
blocker moveto( self.origin - vectorscale( ( 0, 0, 1 ), 96.0 ), 1.0 );
|
||||||
|
|
||||||
blocker waittill( "movedone" );
|
blocker waittill( "movedone" );
|
||||||
|
|
||||||
if ( flag( "start_zombie_round_logic" ) )
|
if ( flag( "start_zombie_round_logic" ) )
|
||||||
{
|
|
||||||
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
|
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
|
||||||
}
|
|
||||||
return_blocker_model_to_pool( blocker );
|
return_blocker_model_to_pool( blocker );
|
||||||
self link_nodes_for_blocker_location();
|
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;
|
wait 0.2;
|
||||||
corpses = getcorpsearray();
|
corpses = getcorpsearray();
|
||||||
if ( isDefined( corpses ) )
|
|
||||||
|
if ( isdefined( corpses ) )
|
||||||
{
|
{
|
||||||
foreach ( corpse in corpses )
|
foreach ( corpse in corpses )
|
||||||
{
|
{
|
||||||
if ( distancesquared( corpse.origin, self.origin ) < 2304 )
|
if ( distancesquared( corpse.origin, self.origin ) < 2304 )
|
||||||
{
|
|
||||||
corpse delete();
|
corpse delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
maze_blocker_rises_thread() //checked changed to match cerberus output
|
maze_blocker_rises_thread()
|
||||||
{
|
{
|
||||||
blocker = get_free_blocker_model_from_pool();
|
blocker = get_free_blocker_model_from_pool();
|
||||||
self thread maze_blocker_sinks_thread( blocker );
|
self thread maze_blocker_sinks_thread( blocker );
|
||||||
self unlink_nodes_for_blocker_location();
|
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.angles = self.angles;
|
||||||
blocker setmodel( self.model );
|
blocker setmodel( self.model );
|
||||||
blocker dontinterpolate();
|
blocker dontinterpolate();
|
||||||
blocker show();
|
blocker show();
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( flag( "start_zombie_round_logic" ) )
|
if ( flag( "start_zombie_round_logic" ) )
|
||||||
{
|
|
||||||
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
|
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 moveto( self.origin, 0.65 );
|
||||||
blocker thread delay_destroy_corpses_near_blocker();
|
blocker thread delay_destroy_corpses_near_blocker();
|
||||||
|
|
||||||
blocker waittill( "movedone" );
|
blocker waittill( "movedone" );
|
||||||
|
|
||||||
if ( flag( "start_zombie_round_logic" ) )
|
if ( flag( "start_zombie_round_logic" ) )
|
||||||
{
|
|
||||||
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
|
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++;
|
level._maze._cur_perm++;
|
||||||
|
|
||||||
if ( level._maze._cur_perm == level._maze._perms.size )
|
if ( level._maze._cur_perm == level._maze._perms.size )
|
||||||
{
|
|
||||||
randomize_maze_perms();
|
randomize_maze_perms();
|
||||||
}
|
|
||||||
new_perm_list = level._maze._perms[level._maze._cur_perm];
|
new_perm_list = level._maze._perms[level._maze._cur_perm];
|
||||||
blockers_raise_list = [];
|
blockers_raise_list = [];
|
||||||
blockers_lower_list = level._maze._active_perm_list;
|
blockers_lower_list = level._maze._active_perm_list;
|
||||||
|
|
||||||
for ( i = 0; i < new_perm_list.size; i++ )
|
for ( i = 0; i < new_perm_list.size; i++ )
|
||||||
{
|
{
|
||||||
found = 0;
|
found = 0;
|
||||||
|
|
||||||
for ( j = 0; j < level._maze._active_perm_list.size; j++ )
|
for ( j = 0; j < level._maze._active_perm_list.size; j++ )
|
||||||
{
|
{
|
||||||
if ( new_perm_list[i] == level._maze._active_perm_list[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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !found )
|
if ( !found )
|
||||||
{
|
|
||||||
blockers_raise_list[blockers_raise_list.size] = new_perm_list[i];
|
blockers_raise_list[blockers_raise_list.size] = new_perm_list[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
level thread raise_new_perm_blockers( blockers_raise_list );
|
level thread raise_new_perm_blockers( blockers_raise_list );
|
||||||
level thread lower_old_perm_blockers( blockers_lower_list );
|
level thread lower_old_perm_blockers( blockers_lower_list );
|
||||||
level._maze._active_perm_list = level._maze._perms[level._maze._cur_perm];
|
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++ )
|
for ( i = 0; i < list.size; i++ )
|
||||||
{
|
{
|
||||||
while ( !free_blockers_available() )
|
while ( !free_blockers_available() )
|
||||||
{
|
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
}
|
|
||||||
level._maze._blocker_locations[list[i]] thread maze_blocker_rises_thread();
|
level._maze._blocker_locations[list[i]] thread maze_blocker_rises_thread();
|
||||||
wait 0.25;
|
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++ )
|
for ( i = 0; i < list.size; i++ )
|
||||||
{
|
{
|
||||||
if ( list[i] != "" )
|
if ( list[i] != "" )
|
||||||
{
|
|
||||||
level._maze._blocker_locations[list[i]] notify( "lower_" + list[i] );
|
level._maze._blocker_locations[list[i]] notify( "lower_" + list[i] );
|
||||||
}
|
|
||||||
wait 0.25;
|
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 );
|
println( "Maze : " + str );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
maze_can_change() //checked changed to match cerberus output
|
maze_can_change()
|
||||||
{
|
{
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
foreach ( player in players )
|
foreach ( player in players )
|
||||||
{
|
{
|
||||||
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) )
|
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) )
|
||||||
{
|
{
|
||||||
maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." );
|
maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." );
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ( player in players )
|
foreach ( player in players )
|
||||||
{
|
{
|
||||||
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_can_see_maze_volume ) )
|
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." );
|
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;
|
wait 0.1;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( maze_can_change() )
|
if ( maze_can_change() )
|
||||||
{
|
{
|
||||||
maze_do_perm_change();
|
maze_do_perm_change();
|
||||||
level notify( "zm_buried_maze_changed" );
|
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" );
|
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" );
|
self endon( "death" );
|
||||||
spots = level.maze_hedge_spawnpoints;
|
spots = level.maze_hedge_spawnpoints;
|
||||||
spot = undefined;
|
spot = undefined;
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( spots.size > 0, "No spawn locations found" );
|
assert( spots.size > 0, "No spawn locations found" );
|
||||||
#/
|
#/
|
||||||
*/
|
players_in_maze = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
|
||||||
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 )
|
if ( isdefined( players_in_maze ) && players_in_maze.size != 0 )
|
||||||
{
|
{
|
||||||
player = random( players_in_maze );
|
player = random( players_in_maze );
|
||||||
maxdistance = 256;
|
maxdistance = 256;
|
||||||
|
|
||||||
if ( randomint( 100 ) > 75 )
|
if ( randomint( 100 ) > 75 )
|
||||||
{
|
|
||||||
maxdistance = 512;
|
maxdistance = 512;
|
||||||
}
|
|
||||||
closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance );
|
closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance );
|
||||||
favoritespots = [];
|
favoritespots = [];
|
||||||
|
|
||||||
foreach ( close_spot in closest_spots )
|
foreach ( close_spot in closest_spots )
|
||||||
{
|
{
|
||||||
if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) )
|
if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) )
|
||||||
{
|
{
|
||||||
favoritespots[favoritespots.size] = close_spot;
|
favoritespots[favoritespots.size] = close_spot;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( randomint( 100 ) > 75 )
|
if ( randomint( 100 ) > 75 )
|
||||||
{
|
|
||||||
favoritespots[favoritespots.size] = close_spot;
|
favoritespots[favoritespots.size] = close_spot;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
if ( isdefined( favoritespots ) && favoritespots.size >= 2 )
|
||||||
if ( isDefined( favoritespots ) && favoritespots.size >= 2 )
|
|
||||||
{
|
|
||||||
spot = random( favoritespots );
|
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 );
|
spot = random( closest_spots );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( !isDefined( spot ) )
|
if ( !isdefined( spot ) )
|
||||||
{
|
|
||||||
spot = random( spots );
|
spot = random( spots );
|
||||||
}
|
|
||||||
self.spawn_point = spot;
|
self.spawn_point = spot;
|
||||||
if ( isDefined( spot.target ) )
|
|
||||||
{
|
if ( isdefined( spot.target ) )
|
||||||
self.target = spot.target;
|
self.target = spot.target;
|
||||||
}
|
|
||||||
if ( isDefined( spot.zone_name ) )
|
if ( isdefined( spot.zone_name ) )
|
||||||
{
|
|
||||||
self.zone_name = 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.script_parameters = spot.script_parameters;
|
||||||
}
|
|
||||||
self thread maze_do_zombie_rise( spot );
|
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 endon( "death" );
|
||||||
self.in_the_ground = 1;
|
self.in_the_ground = 1;
|
||||||
if ( isDefined( self.anchor ) )
|
|
||||||
{
|
if ( isdefined( self.anchor ) )
|
||||||
self.anchor delete();
|
self.anchor delete();
|
||||||
}
|
|
||||||
self.anchor = spawn( "script_origin", self.origin );
|
self.anchor = spawn( "script_origin", self.origin );
|
||||||
self.anchor.angles = self.angles;
|
self.anchor.angles = self.angles;
|
||||||
self linkto( self.anchor );
|
self linkto( self.anchor );
|
||||||
if ( !isDefined( spot.angles ) )
|
|
||||||
{
|
if ( !isdefined( spot.angles ) )
|
||||||
spot.angles = ( 0, 0, 0 );
|
spot.angles = ( 0, 0, 0 );
|
||||||
}
|
|
||||||
anim_org = spot.origin;
|
anim_org = spot.origin;
|
||||||
anim_ang = spot.angles;
|
anim_ang = spot.angles;
|
||||||
anim_org += ( 0, 0, 0 );
|
anim_org += ( 0, 0, 0 );
|
||||||
self ghost();
|
self ghost();
|
||||||
self.anchor moveto( anim_org, 0.05 );
|
self.anchor moveto( anim_org, 0.05 );
|
||||||
|
|
||||||
self.anchor waittill( "movedone" );
|
self.anchor waittill( "movedone" );
|
||||||
|
|
||||||
target_org = get_desired_origin();
|
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 rotateto( ( 0, anim_ang[1], 0 ), 0.05 );
|
||||||
|
|
||||||
self.anchor waittill( "rotatedone" );
|
self.anchor waittill( "rotatedone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self unlink();
|
self unlink();
|
||||||
if ( isDefined( self.anchor ) )
|
|
||||||
{
|
if ( isdefined( self.anchor ) )
|
||||||
self.anchor delete();
|
self.anchor delete();
|
||||||
}
|
|
||||||
self thread maps/mp/zombies/_zm_spawner::hide_pop();
|
self thread maps\mp\zombies\_zm_spawner::hide_pop();
|
||||||
level thread maps/mp/zombies/_zm_spawner::zombie_rise_death( self, spot );
|
level thread maps\mp\zombies\_zm_spawner::zombie_rise_death( self, spot );
|
||||||
spot thread maps/mp/zombies/_zm_spawner::zombie_rise_fx( self );
|
spot thread maps\mp\zombies\_zm_spawner::zombie_rise_fx( self );
|
||||||
substate = 0;
|
substate = 0;
|
||||||
|
|
||||||
if ( self.zombie_move_speed == "walk" )
|
if ( self.zombie_move_speed == "walk" )
|
||||||
{
|
|
||||||
substate = randomint( 2 );
|
substate = randomint( 2 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
substate = 1;
|
substate = 1;
|
||||||
}
|
|
||||||
self orientmode( "face default" );
|
self orientmode( "face default" );
|
||||||
self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate );
|
self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate );
|
||||||
self notify( "rise_anim_finished" );
|
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 );
|
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" );
|
level waittill( "start_of_round" );
|
||||||
|
|
||||||
start_maze_achievement_threads();
|
start_maze_achievement_threads();
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
check_maze_achievement_threads();
|
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 )
|
if ( level.round_number >= 20 )
|
||||||
{
|
{
|
||||||
foreach ( player in get_players() )
|
foreach ( player in get_players() )
|
||||||
{
|
{
|
||||||
player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" );
|
player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" );
|
||||||
|
|
||||||
if ( player.achievement_player_started_round_in_maze )
|
if ( player.achievement_player_started_round_in_maze )
|
||||||
{
|
{
|
||||||
player thread watch_player_in_maze();
|
player thread watch_player_in_maze();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
player notify( "_maze_achievement_think_done" );
|
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 notify( "_maze_achievement_think_done" );
|
||||||
self endon( "_maze_achievement_think_done" );
|
self endon( "_maze_achievement_think_done" );
|
||||||
self endon( "death_or_disconnect" );
|
self endon( "death_or_disconnect" );
|
||||||
self.achievement_player_stayed_in_maze_for_entire_round = 1;
|
self.achievement_player_stayed_in_maze_for_entire_round = 1;
|
||||||
|
|
||||||
while ( self.achievement_player_stayed_in_maze_for_entire_round )
|
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" );
|
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 )
|
if ( level.round_number >= 20 )
|
||||||
{
|
{
|
||||||
foreach ( player in get_players() )
|
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" );
|
iprintlnbold( player.name + " got achievement MAZED AND CONFUSED" );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
player notify( "player_stayed_in_maze_for_entire_high_level_round" );
|
player notify( "player_stayed_in_maze_for_entire_high_level_round" );
|
||||||
player notify( "_maze_achievement_think_done" );
|
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" );
|
flag_wait( "mansion_door1" );
|
||||||
nwaittime = 300;
|
nwaittime = 300;
|
||||||
nminwait = 5;
|
nminwait = 5;
|
||||||
nmaxwait = 10;
|
nmaxwait = 10;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
|
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 ) )
|
||||||
while ( !isDefined( aplayersinzone ) || aplayersinzone.size == 0 )
|
wait( randomint( nminwait, nmaxwait ) );
|
||||||
{
|
|
||||||
wait randomintrange( nminwait, nmaxwait );
|
random( aplayersinzone ) maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "in_maze" );
|
||||||
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
|
|
||||||
}
|
|
||||||
random( aplayersinzone ) maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "in_maze" );
|
|
||||||
nminwait = 13;
|
nminwait = 13;
|
||||||
nmaxwait = 37;
|
nmaxwait = 37;
|
||||||
wait nwaittime;
|
wait( nwaittime );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include maps/mp/zombies/_zm_perks;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_audio;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zombies\_zm_perks;
|
||||||
|
|
||||||
electric_switch()
|
electric_switch()
|
||||||
{
|
{
|
||||||
@ -11,19 +13,23 @@ electric_switch()
|
|||||||
master_switch notsolid();
|
master_switch notsolid();
|
||||||
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
|
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
|
||||||
trig setvisibletoall();
|
trig setvisibletoall();
|
||||||
|
|
||||||
trig waittill( "trigger", user );
|
trig waittill( "trigger", user );
|
||||||
|
|
||||||
trig setinvisibletoall();
|
trig setinvisibletoall();
|
||||||
master_switch rotateroll( -90, 0,3 );
|
master_switch rotateroll( -90, 0.3 );
|
||||||
master_switch playsound( "zmb_switch_flip" );
|
master_switch playsound( "zmb_switch_flip" );
|
||||||
master_switch playsound( "zmb_poweron" );
|
master_switch playsound( "zmb_poweron" );
|
||||||
level delay_thread( 11,8, ::sndpoweronmusicstinger );
|
level delay_thread( 11.8, ::sndpoweronmusicstinger );
|
||||||
if ( isDefined( user ) )
|
|
||||||
{
|
if ( isdefined( user ) )
|
||||||
user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" );
|
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 thread maps\mp\zombies\_zm_perks::perk_unpause_all_perks();
|
||||||
|
|
||||||
master_switch waittill( "rotatedone" );
|
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" );
|
master_switch playsound( "zmb_turn_on" );
|
||||||
level notify( "electric_door" );
|
level notify( "electric_door" );
|
||||||
clientnotify( "power_on" );
|
clientnotify( "power_on" );
|
||||||
@ -33,5 +39,5 @@ electric_switch()
|
|||||||
|
|
||||||
sndpoweronmusicstinger()
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -21,6 +23,7 @@ init_stage()
|
|||||||
stage_vo()
|
stage_vo()
|
||||||
{
|
{
|
||||||
level waittill( "start_of_round" );
|
level waittill( "start_of_round" );
|
||||||
|
|
||||||
level thread stage_vo_watch_underground();
|
level thread stage_vo_watch_underground();
|
||||||
wait 5;
|
wait 5;
|
||||||
maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
|
maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
|
||||||
@ -30,67 +33,79 @@ stage_vo()
|
|||||||
maxissay( "vox_maxi_sidequest_maxis_start_5_0" );
|
maxissay( "vox_maxi_sidequest_maxis_start_5_0" );
|
||||||
flag_wait( "sq_player_underground" );
|
flag_wait( "sq_player_underground" );
|
||||||
level.m_maxis_vo_spot.origin = ( -728, -344, 280 );
|
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 ) )
|
|
||||||
{
|
while ( isdefined( level.vo_player_who_discovered_stables_roof ) && is_true( level.vo_player_who_discovered_stables_roof.isspeaking ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
maxissay( "vox_maxi_sidequest_town_0" );
|
maxissay( "vox_maxi_sidequest_town_0" );
|
||||||
maxissay( "vox_maxi_sidequest_town_1" );
|
maxissay( "vox_maxi_sidequest_town_1" );
|
||||||
wait 1;
|
wait 1;
|
||||||
level thread stage_vo_watch_gallows();
|
level thread stage_vo_watch_gallows();
|
||||||
|
|
||||||
if ( !level.richcompleted )
|
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.dontspeak = 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
|
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 );
|
richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 );
|
||||||
if ( isDefined( level.rich_sq_player ) )
|
|
||||||
{
|
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 ) )
|
|
||||||
{
|
{
|
||||||
|
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.rich_sq_player.dontspeak = 1;
|
level.rich_sq_player.dontspeak = 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 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 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" );
|
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_0" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 );
|
richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 );
|
||||||
if ( isDefined( level.rich_sq_player ) )
|
|
||||||
{
|
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 ) )
|
|
||||||
{
|
{
|
||||||
|
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.rich_sq_player.dontspeak = 1;
|
level.rich_sq_player.dontspeak = 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 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 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" );
|
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_1" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 );
|
richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 );
|
||||||
richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 );
|
richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 );
|
||||||
if ( isDefined( level.rich_sq_player ) )
|
|
||||||
{
|
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 ) )
|
|
||||||
{
|
{
|
||||||
|
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.rich_sq_player.dontspeak = 1;
|
level.rich_sq_player.dontspeak = 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 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 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" );
|
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_2" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_town_0", 6 );
|
richtofensay( "vox_zmba_sidequest_town_0", 6 );
|
||||||
richtofensay( "vox_zmba_sidequest_town_1", 6 );
|
richtofensay( "vox_zmba_sidequest_town_1", 6 );
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "sq_intro_vo_done" );
|
flag_set( "sq_intro_vo_done" );
|
||||||
level thread stage_vo_nag();
|
level thread stage_vo_nag();
|
||||||
level thread stage_vo_watch_guillotine();
|
level thread stage_vo_watch_guillotine();
|
||||||
@ -105,13 +120,13 @@ stage_vo_nag()
|
|||||||
s_struct = getstruct( "sq_gallows", "targetname" );
|
s_struct = getstruct( "sq_gallows", "targetname" );
|
||||||
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
|
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
|
||||||
m_maxis_vo_spot setmodel( "tag_origin" );
|
m_maxis_vo_spot setmodel( "tag_origin" );
|
||||||
i = 0;
|
|
||||||
while ( i < 5 )
|
for ( i = 0; i < 5; i++ )
|
||||||
{
|
{
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot );
|
maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot );
|
||||||
richtofensay( "vox_zmba_sidequest_nag_" + i, 10 );
|
richtofensay( "vox_zmba_sidequest_nag_" + i, 10 );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,17 +137,27 @@ stage_vo_watch_guillotine()
|
|||||||
level endon( "end_game_reward_starts_richtofen" );
|
level endon( "end_game_reward_starts_richtofen" );
|
||||||
s_struct = getstruct( "sq_guillotine", "targetname" );
|
s_struct = getstruct( "sq_guillotine", "targetname" );
|
||||||
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
|
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
|
||||||
|
|
||||||
trigger waittill( "trigger" );
|
trigger waittill( "trigger" );
|
||||||
|
|
||||||
trigger delete();
|
trigger delete();
|
||||||
richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
|
richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
|
||||||
richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
|
richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
|
||||||
|
|
||||||
level waittill( "rtower_object_planted" );
|
level waittill( "rtower_object_planted" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_parts_0", 9 );
|
richtofensay( "vox_zmba_sidequest_parts_0", 9 );
|
||||||
|
|
||||||
level waittill( "rtower_object_planted" );
|
level waittill( "rtower_object_planted" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_parts_1", 3 );
|
richtofensay( "vox_zmba_sidequest_parts_1", 3 );
|
||||||
|
|
||||||
level waittill( "rtower_object_planted" );
|
level waittill( "rtower_object_planted" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_parts_2", 5 );
|
richtofensay( "vox_zmba_sidequest_parts_2", 5 );
|
||||||
|
|
||||||
level waittill( "rtower_object_planted" );
|
level waittill( "rtower_object_planted" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_parts_3", 11 );
|
richtofensay( "vox_zmba_sidequest_parts_3", 11 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,25 +168,26 @@ stage_vo_watch_gallows()
|
|||||||
level endon( "end_game_reward_starts_richtofen" );
|
level endon( "end_game_reward_starts_richtofen" );
|
||||||
s_struct = getstruct( "sq_gallows", "targetname" );
|
s_struct = getstruct( "sq_gallows", "targetname" );
|
||||||
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
|
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
|
||||||
|
|
||||||
trigger waittill( "trigger" );
|
trigger waittill( "trigger" );
|
||||||
|
|
||||||
trigger delete();
|
trigger delete();
|
||||||
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
|
m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
|
||||||
m_maxis_vo_spot setmodel( "tag_origin" );
|
m_maxis_vo_spot setmodel( "tag_origin" );
|
||||||
|
|
||||||
if ( flag( "sq_intro_vo_done" ) )
|
if ( flag( "sq_intro_vo_done" ) )
|
||||||
{
|
|
||||||
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
|
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
|
||||||
}
|
|
||||||
i = 0;
|
for ( i = 0; i < 4; i++ )
|
||||||
while ( i < 4 )
|
|
||||||
{
|
{
|
||||||
level waittill( "mtower_object_planted" );
|
level waittill( "mtower_object_planted" );
|
||||||
|
|
||||||
if ( flag( "sq_intro_vo_done" ) )
|
if ( flag( "sq_intro_vo_done" ) )
|
||||||
{
|
|
||||||
maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 );
|
maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 );
|
||||||
}
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_maxis_vo_spot delete();
|
m_maxis_vo_spot delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,4 +231,5 @@ wait_for_richtofen_tower()
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include maps/mp/zm_buried_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -34,6 +36,7 @@ stage_logic()
|
|||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
ctw_ric_start_wisp();
|
ctw_ric_start_wisp();
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
|
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
@ -41,15 +44,16 @@ stage_logic()
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_max()
|
stage_vo_max()
|
||||||
{
|
{
|
||||||
level endon( "sq_wisp_failed" );
|
level endon( "sq_wisp_failed" );
|
||||||
while ( !isDefined( level.vh_wisp ) )
|
|
||||||
{
|
while ( !isdefined( level.vh_wisp ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.vh_wisp endon( "delete" );
|
level.vh_wisp endon( "delete" );
|
||||||
maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker );
|
maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker );
|
||||||
maxissay( "vox_maxi_sidequest_ctw_1", 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" );
|
level endon( "sq_wisp_failed" );
|
||||||
richtofensay( "vox_zmba_sidequest_ctw_0", 12 );
|
richtofensay( "vox_zmba_sidequest_ctw_0", 12 );
|
||||||
richtofensay( "vox_zmba_sidequest_ctw_1", 8 );
|
richtofensay( "vox_zmba_sidequest_ctw_1", 8 );
|
||||||
|
|
||||||
level waittill( "sq_ctw_zombie_powered_up" );
|
level waittill( "sq_ctw_zombie_powered_up" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_ctw_3", 8 );
|
richtofensay( "vox_zmba_sidequest_ctw_3", 8 );
|
||||||
}
|
}
|
||||||
|
|
||||||
wisp_move_from_sign_to_start( s_start )
|
wisp_move_from_sign_to_start( s_start )
|
||||||
{
|
{
|
||||||
self.origin = level.m_sq_start_sign.origin - vectorScale( ( 1, 0, 0 ), 20 );
|
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 moveto( s_start.origin, 2, 0.5, 0.5 );
|
||||||
|
|
||||||
self waittill( "movedone" );
|
self waittill( "movedone" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctw_ric_start_wisp()
|
ctw_ric_start_wisp()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.m_sq_start_sign ) )
|
if ( !isdefined( level.m_sq_start_sign ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
s_start = getstruct( level.m_sq_start_sign.target, "targetname" );
|
s_start = getstruct( level.m_sq_start_sign.target, "targetname" );
|
||||||
m_wisp = getent( "sq_wisp", "targetname" );
|
m_wisp = getent( "sq_wisp", "targetname" );
|
||||||
m_wisp setclientfield( "vulture_wisp", 1 );
|
m_wisp setclientfield( "vulture_wisp", 1 );
|
||||||
@ -90,6 +97,9 @@ ctw_ric_start_wisp()
|
|||||||
ctw_ric_move_wisp( s_current )
|
ctw_ric_move_wisp( s_current )
|
||||||
{
|
{
|
||||||
self endon( "ctw_wisp_timeout" );
|
self endon( "ctw_wisp_timeout" );
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
self setclientfield( "vulture_wisp", 0 );
|
self setclientfield( "vulture_wisp", 0 );
|
||||||
self.origin = s_current.origin;
|
self.origin = s_current.origin;
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -97,6 +107,9 @@ ctw_ric_move_wisp( s_current )
|
|||||||
self thread ctw_ric_watch_wisp_timeout();
|
self thread ctw_ric_watch_wisp_timeout();
|
||||||
ctw_ric_watch_wisp_dist();
|
ctw_ric_watch_wisp_dist();
|
||||||
s_current = ctw_ric_get_next_wisp_struct( s_current );
|
s_current = ctw_ric_get_next_wisp_struct( s_current );
|
||||||
|
}
|
||||||
|
while ( isdefined( s_current ) );
|
||||||
|
|
||||||
self endon( "ctw_wisp_moved" );
|
self endon( "ctw_wisp_moved" );
|
||||||
self ctw_ric_power_towers();
|
self ctw_ric_power_towers();
|
||||||
flag_set( "sq_wisp_success" );
|
flag_set( "sq_wisp_success" );
|
||||||
@ -104,10 +117,9 @@ ctw_ric_move_wisp( s_current )
|
|||||||
|
|
||||||
ctw_ric_get_next_wisp_struct( s_current )
|
ctw_ric_get_next_wisp_struct( s_current )
|
||||||
{
|
{
|
||||||
if ( !isDefined( s_current.target ) )
|
if ( !isdefined( s_current.target ) )
|
||||||
{
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
|
||||||
a_structs = getstructarray( s_current.target, "targetname" );
|
a_structs = getstructarray( s_current.target, "targetname" );
|
||||||
return array_randomize( a_structs )[0];
|
return array_randomize( a_structs )[0];
|
||||||
}
|
}
|
||||||
@ -125,28 +137,23 @@ ctw_ric_watch_wisp_dist( s_current )
|
|||||||
{
|
{
|
||||||
self endon( "ctw_wisp_timeout" );
|
self endon( "ctw_wisp_timeout" );
|
||||||
is_near_wisp = 0;
|
is_near_wisp = 0;
|
||||||
|
|
||||||
while ( !is_near_wisp )
|
while ( !is_near_wisp )
|
||||||
{
|
{
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a185 = players;
|
|
||||||
_k185 = getFirstArrayKey( _a185 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k185 ) )
|
|
||||||
{
|
{
|
||||||
player = _a185[ _k185 ];
|
|
||||||
if ( !player hasperk( "specialty_nomotionsensor" ) )
|
if ( !player hasperk( "specialty_nomotionsensor" ) )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( distancesquared( player.origin, self.origin ) < 4096 )
|
if ( distancesquared( player.origin, self.origin ) < 4096 )
|
||||||
{
|
|
||||||
is_near_wisp = 1;
|
is_near_wisp = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
_k185 = getNextArrayKey( _a185, _k185 );
|
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
self notify( "ctw_wisp_moved" );
|
self notify( "ctw_wisp_moved" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,48 +167,56 @@ ctw_ric_power_towers()
|
|||||||
v_guillotine_spot = self.origin;
|
v_guillotine_spot = self.origin;
|
||||||
self.origin = m_tower gettagorigin( "j_crystal_01" );
|
self.origin = m_tower gettagorigin( "j_crystal_01" );
|
||||||
m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot );
|
m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot );
|
||||||
i = 0;
|
|
||||||
while ( i < 5 )
|
for ( i = 0; i < 5; i++ )
|
||||||
{
|
{
|
||||||
wait 3;
|
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;
|
wait 1;
|
||||||
a_zombies = ctw_find_zombies_for_powerup( self.origin, 512, m_tower );
|
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" );
|
level notify( "stop_ctw_ric_guillotine_glow" );
|
||||||
e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow );
|
e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow );
|
||||||
|
|
||||||
e_powered_zombie waittill( "death" );
|
e_powered_zombie waittill( "death" );
|
||||||
|
|
||||||
level setclientfield( "vulture_wisp_orb_count", i + 1 );
|
level setclientfield( "vulture_wisp_orb_count", i + 1 );
|
||||||
m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin );
|
m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctw_ric_guillotine_glow( v_spot )
|
ctw_ric_guillotine_glow( v_spot )
|
||||||
{
|
{
|
||||||
level endon( "stop_ctw_ric_guillotine_glow" );
|
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 = spawn( "script_model", v_spot );
|
||||||
self.m_glow setmodel( "tag_origin" );
|
self.m_glow setmodel( "tag_origin" );
|
||||||
}
|
}
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect["vulture_fx_wisp"], self.m_glow, "tag_origin" );
|
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" );
|
self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctw_power_up_ric_zombie( m_wisp )
|
ctw_power_up_ric_zombie( m_wisp )
|
||||||
|
{
|
||||||
|
do
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
v_to_zombie = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_wisp.origin );
|
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;
|
m_wisp.origin = v_move_spot;
|
||||||
|
}
|
||||||
|
while ( distancesquared( m_wisp.origin, self gettagorigin( "J_SpineLower" ) ) > 1024 );
|
||||||
|
|
||||||
self ctw_power_up_zombie();
|
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.m_glow.origin = v_start;
|
||||||
self thread ctw_ric_guillotine_glow( v_start );
|
self thread ctw_ric_guillotine_glow( v_start );
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
v_to_tower = vectornormalize( v_spot - self.m_glow.origin );
|
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;
|
self.m_glow.origin = v_move_spot;
|
||||||
|
}
|
||||||
|
while ( distancesquared( self.m_glow.origin, v_spot ) > 1024 );
|
||||||
|
|
||||||
self.m_glow.origin = v_spot;
|
self.m_glow.origin = v_spot;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,29 +262,30 @@ ctw_max_start_wisp()
|
|||||||
vh_wisp cancelaimove();
|
vh_wisp cancelaimove();
|
||||||
vh_wisp clearvehgoalpos();
|
vh_wisp clearvehgoalpos();
|
||||||
vh_wisp delete();
|
vh_wisp delete();
|
||||||
if ( isDefined( level.vh_wisp ) )
|
|
||||||
{
|
if ( isdefined( level.vh_wisp ) )
|
||||||
level.vh_wisp delete();
|
level.vh_wisp delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ctw_max_wisp_play_fx()
|
ctw_max_wisp_play_fx()
|
||||||
{
|
{
|
||||||
self playloopsound( "zmb_sq_wisp_loop" );
|
self playloopsound( "zmb_sq_wisp_loop" );
|
||||||
while ( isDefined( self ) )
|
|
||||||
|
while ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect["fx_wisp_m"], self, "tag_origin" );
|
playfxontag( level._effect["fx_wisp_m"], self, "tag_origin" );
|
||||||
|
|
||||||
if ( !flag( "sq_m_wisp_weak" ) )
|
if ( !flag( "sq_m_wisp_weak" ) )
|
||||||
{
|
|
||||||
playfxontag( level._effect["fx_wisp_lg_m"], self, "tag_origin" );
|
playfxontag( level._effect["fx_wisp_lg_m"], self, "tag_origin" );
|
||||||
}
|
|
||||||
wait 0,3;
|
wait 0.3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctw_max_success_watch()
|
ctw_max_success_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self waittill( "reached_end_node" );
|
self waittill( "reached_end_node" );
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Wisp Success!" );
|
iprintlnbold( "Wisp Success!" );
|
||||||
@ -281,51 +303,46 @@ ctw_light_tube()
|
|||||||
ctw_max_fail_watch()
|
ctw_max_fail_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin );
|
n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin );
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a382 = a_players;
|
|
||||||
_k382 = getFirstArrayKey( _a382 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k382 ) )
|
|
||||||
{
|
{
|
||||||
player = _a382[ _k382 ];
|
|
||||||
if ( distancesquared( self.origin, player.origin ) < 16384 )
|
if ( distancesquared( self.origin, player.origin ) < 16384 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Too Close to Wisp" );
|
iprintlnbold( "Too Close to Wisp" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
_k382 = getNextArrayKey( _a382, _k382 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 );
|
a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 );
|
||||||
array_thread( a_zombies, ::ctw_power_up_zombie );
|
array_thread( a_zombies, ::ctw_power_up_zombie );
|
||||||
|
|
||||||
if ( a_zombies.size )
|
if ( a_zombies.size )
|
||||||
{
|
{
|
||||||
self.n_sq_energy += 10;
|
self.n_sq_energy += 10;
|
||||||
|
|
||||||
if ( self.n_sq_energy > 30 )
|
if ( self.n_sq_energy > 30 )
|
||||||
{
|
|
||||||
self.n_sq_energy = 30;
|
self.n_sq_energy = 30;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.n_sq_energy--;
|
self.n_sq_energy--;
|
||||||
|
|
||||||
}
|
if ( self.n_sq_energy <= 15.0 && !flag( "sq_m_wisp_weak" ) )
|
||||||
if ( self.n_sq_energy <= 15 && !flag( "sq_m_wisp_weak" ) )
|
|
||||||
{
|
|
||||||
flag_set( "sq_m_wisp_weak" );
|
flag_set( "sq_m_wisp_weak" );
|
||||||
}
|
else if ( self.n_sq_energy > 15.0 && flag( "sq_m_wisp_weak" ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( self.n_sq_energy > 15 && flag( "sq_m_wisp_weak" ) )
|
|
||||||
{
|
|
||||||
flag_clear( "sq_m_wisp_weak" );
|
flag_clear( "sq_m_wisp_weak" );
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( self.n_sq_energy );
|
iprintlnbold( self.n_sq_energy );
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
|
while ( n_starter_dist < 262144 );
|
||||||
|
|
||||||
level thread ctw_max_fail_vo();
|
level thread ctw_max_fail_vo();
|
||||||
flag_set( "sq_wisp_failed" );
|
flag_set( "sq_wisp_failed" );
|
||||||
}
|
}
|
||||||
@ -338,12 +355,12 @@ ctw_max_fail_vo()
|
|||||||
ctw_max_wisp_enery_watch()
|
ctw_max_wisp_enery_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( self.n_sq_energy <= 0 )
|
if ( self.n_sq_energy <= 0 )
|
||||||
{
|
|
||||||
flag_set( "sq_wisp_failed" );
|
flag_set( "sq_wisp_failed" );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -352,37 +369,33 @@ debug_origin()
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
debugstar( self.origin, 1, ( 1, 0, 0 ) );
|
debugstar( self.origin, 1, ( 1, 0, 0 ) );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore )
|
ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore )
|
||||||
{
|
{
|
||||||
if ( !isDefined( m_ignore ) )
|
if ( !isdefined( m_ignore ) )
|
||||||
{
|
|
||||||
m_ignore = undefined;
|
m_ignore = undefined;
|
||||||
}
|
|
||||||
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
|
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
|
||||||
n_radius_sq = n_radius * n_radius;
|
n_radius_sq = n_radius * n_radius;
|
||||||
a_near_zombies = [];
|
a_near_zombies = [];
|
||||||
_a473 = a_zombies;
|
|
||||||
_k473 = getFirstArrayKey( _a473 );
|
foreach ( e_zombie in a_zombies )
|
||||||
while ( isDefined( _k473 ) )
|
|
||||||
{
|
{
|
||||||
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 ) )
|
if ( sighttracepassed( v_origin, e_zombie gettagorigin( "J_SpineLower" ), 1, m_ignore ) )
|
||||||
{
|
|
||||||
a_near_zombies[a_near_zombies.size] = e_zombie;
|
a_near_zombies[a_near_zombies.size] = e_zombie;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k473 = getNextArrayKey( _a473, _k473 );
|
|
||||||
}
|
|
||||||
return a_near_zombies;
|
return a_near_zombies;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,24 +405,23 @@ ctw_power_up_zombie()
|
|||||||
self.sq_wisp_powered = 1;
|
self.sq_wisp_powered = 1;
|
||||||
n_oldhealth = self.maxhealth;
|
n_oldhealth = self.maxhealth;
|
||||||
self.maxhealth *= 2;
|
self.maxhealth *= 2;
|
||||||
|
|
||||||
if ( self.maxhealth < n_oldhealth )
|
if ( self.maxhealth < n_oldhealth )
|
||||||
{
|
|
||||||
self.maxhealth = n_oldhealth;
|
self.maxhealth = n_oldhealth;
|
||||||
}
|
|
||||||
self.health = self.maxhealth;
|
self.health = self.maxhealth;
|
||||||
|
|
||||||
if ( self.zombie_move_speed != "sprint" )
|
if ( self.zombie_move_speed != "sprint" )
|
||||||
{
|
{
|
||||||
self set_zombie_run_cycle( "sprint" );
|
self set_zombie_run_cycle( "sprint" );
|
||||||
self.zombie_move_speed_original = self.zombie_move_speed;
|
self.zombie_move_speed_original = self.zombie_move_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
str_fx = "fx_wisp_m";
|
str_fx = "fx_wisp_m";
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
str_fx = "vulture_fx_wisp";
|
str_fx = "vulture_fx_wisp";
|
||||||
}
|
|
||||||
self thread ctw_power_up_zombie_m_fx( str_fx );
|
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( "delete" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( isDefined( self ) && isalive( self ) )
|
|
||||||
|
while ( isdefined( self ) && isalive( self ) )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect[str_fx], self, "J_Wrist_RI" );
|
playfxontag( level._effect[str_fx], self, "J_Wrist_RI" );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
playfxontag( level._effect[str_fx], self, "J_Wrist_LE" );
|
playfxontag( level._effect[str_fx], self, "J_Wrist_LE" );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
self playloopsound( "zmb_sq_wisp_possess" );
|
self playloopsound( "zmb_sq_wisp_possess" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
#include maps/mp/zombies/_zm_spawner;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_buried_sq_ftl;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_buried_sq;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_buried_sq;
|
||||||
|
#include maps\mp\zm_buried_sq_ftl;
|
||||||
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -16,14 +18,12 @@ init()
|
|||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
level.sq_ftl_lantern_fuel = 0;
|
level.sq_ftl_lantern_fuel = 0;
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread stage_vo_max();
|
level thread stage_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
}
|
|
||||||
level._cur_stage_name = "ftl";
|
level._cur_stage_name = "ftl";
|
||||||
clientnotify( "ftl" );
|
clientnotify( "ftl" );
|
||||||
}
|
}
|
||||||
@ -34,22 +34,17 @@ stage_logic()
|
|||||||
iprintlnbold( "FTL Started" );
|
iprintlnbold( "FTL Started" );
|
||||||
#/
|
#/
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
max_fill_lantern_watcher();
|
max_fill_lantern_watcher();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
ric_fill_lantern_watcher();
|
ric_fill_lantern_watcher();
|
||||||
}
|
|
||||||
flag_wait( "ftl_lantern_charged" );
|
flag_wait( "ftl_lantern_charged" );
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
thread stage_vo_filled_max();
|
thread stage_vo_filled_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
thread stage_vo_filled_ric();
|
thread stage_vo_filled_ric();
|
||||||
}
|
|
||||||
sq_ftl_show_marker();
|
sq_ftl_show_marker();
|
||||||
wait_for_buildable( "buried_sq_oillamp" );
|
wait_for_buildable( "buried_sq_oillamp" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -58,6 +53,7 @@ stage_logic()
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_max()
|
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_0" );
|
||||||
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" );
|
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" );
|
||||||
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" );
|
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" );
|
||||||
|
|
||||||
level waittill( "sq_ftl_lantern_inc" );
|
level waittill( "sq_ftl_lantern_inc" );
|
||||||
|
|
||||||
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" );
|
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ftl_maxis_vo_on_holder( str_vox )
|
sq_ftl_maxis_vo_on_holder( str_vox )
|
||||||
{
|
{
|
||||||
player = sq_ftl_get_lantern_holder();
|
player = sq_ftl_get_lantern_holder();
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
if ( isdefined( player ) )
|
||||||
maxissay( str_vox, player );
|
maxissay( str_vox, player );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sq_ftl_show_marker()
|
sq_ftl_show_marker()
|
||||||
{
|
{
|
||||||
m_marker = getent( "sq_lantern_symbol", "targetname" );
|
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;
|
level.sq_lamp_generator_unitrig.origin = level.sq_lamp_generator_unitrig.realorigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ftl_get_lantern_holder()
|
sq_ftl_get_lantern_holder()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a107 = players;
|
|
||||||
_k107 = getFirstArrayKey( _a107 );
|
foreach ( player in players )
|
||||||
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" ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
_k107 = getNextArrayKey( _a107, _k107 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_filled_max()
|
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()
|
stage_vo_ric()
|
||||||
{
|
{
|
||||||
richtofensay( "vox_zmba_sidequest_pl_0", 12 );
|
richtofensay( "vox_zmba_sidequest_pl_0", 12 );
|
||||||
|
|
||||||
level waittill( "sq_ftl_lantern_inc" );
|
level waittill( "sq_ftl_lantern_inc" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_pl_1", 6 );
|
richtofensay( "vox_zmba_sidequest_pl_1", 6 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,53 +117,44 @@ max_fill_lantern_watcher()
|
|||||||
{
|
{
|
||||||
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
|
a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
|
||||||
array_thread( a_zombies, ::max_lantern_zombie_death_watcher );
|
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()
|
max_lantern_zombie_death_watcher()
|
||||||
{
|
{
|
||||||
level endon( "ftl_lantern_charged" );
|
level endon( "ftl_lantern_charged" );
|
||||||
|
|
||||||
if ( flag( "ftl_lantern_charged" ) )
|
if ( flag( "ftl_lantern_charged" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self waittill( "death", attacker );
|
self waittill( "death", attacker );
|
||||||
if ( !isDefined( attacker ) || isplayer( attacker ) )
|
|
||||||
{
|
if ( !isdefined( attacker ) || isplayer( attacker ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a164 = players;
|
|
||||||
_k164 = getFirstArrayKey( _a164 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k164 ) )
|
|
||||||
{
|
{
|
||||||
player = _a164[ _k164 ];
|
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
|
||||||
if ( isDefined( 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( self ) && distancesquared( player.origin, self.origin ) < 65536 )
|
||||||
player ftl_lantern_increment();
|
player ftl_lantern_increment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k164 = getNextArrayKey( _a164, _k164 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ric_fill_lantern_watcher()
|
ric_fill_lantern_watcher()
|
||||||
{
|
{
|
||||||
a_axis = getaiarray( "axis" );
|
a_axis = getaiarray( "axis" );
|
||||||
a_ghost = [];
|
a_ghost = [];
|
||||||
_a183 = a_axis;
|
|
||||||
_k183 = getFirstArrayKey( _a183 );
|
foreach ( e_axis in a_axis )
|
||||||
while ( isDefined( _k183 ) )
|
|
||||||
{
|
{
|
||||||
e_axis = _a183[ _k183 ];
|
|
||||||
if ( is_true( e_axis.is_ghost ) )
|
if ( is_true( e_axis.is_ghost ) )
|
||||||
{
|
|
||||||
a_ghost[a_ghost.size] = e_axis;
|
a_ghost[a_ghost.size] = e_axis;
|
||||||
}
|
}
|
||||||
_k183 = getNextArrayKey( _a183, _k183 );
|
|
||||||
}
|
|
||||||
array_thread( a_ghost, ::ric_lantern_ghost_death_watcher );
|
array_thread( a_ghost, ::ric_lantern_ghost_death_watcher );
|
||||||
a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" );
|
a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" );
|
||||||
array_thread( a_ghost_spawners, ::add_spawn_function, ::ric_lantern_ghost_death_watcher );
|
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()
|
ric_lantern_ghost_death_watcher()
|
||||||
{
|
{
|
||||||
level endon( "ftl_lantern_charged" );
|
level endon( "ftl_lantern_charged" );
|
||||||
|
|
||||||
if ( flag( "ftl_lantern_charged" ) )
|
if ( flag( "ftl_lantern_charged" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self waittill( "death", attacker );
|
self waittill( "death", attacker );
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a210 = players;
|
|
||||||
_k210 = getFirstArrayKey( _a210 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k210 ) )
|
|
||||||
{
|
{
|
||||||
player = _a210[ _k210 ];
|
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
|
||||||
if ( isDefined( 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( self ) && distancesquared( player.origin, self.origin ) < 65536 )
|
||||||
player ftl_lantern_increment();
|
player ftl_lantern_increment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k210 = getNextArrayKey( _a210, _k210 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ftl_lantern_increment()
|
ftl_lantern_increment()
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include maps/mp/zm_buried_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -14,26 +16,23 @@ init()
|
|||||||
|
|
||||||
sq_gl_setup_buildable_trig()
|
sq_gl_setup_buildable_trig()
|
||||||
{
|
{
|
||||||
while ( !isDefined( level.sq_lamp_generator_unitrig ) )
|
while ( !isdefined( level.sq_lamp_generator_unitrig ) )
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.sq_lamp_generator_unitrig.realorigin = level.sq_lamp_generator_unitrig.origin;
|
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()
|
init_stage()
|
||||||
{
|
{
|
||||||
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
|
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
|
||||||
gl_lantern_spawn( s_start );
|
gl_lantern_spawn( s_start );
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread stage_vo_max();
|
level thread stage_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
}
|
|
||||||
level._cur_stage_name = "gl";
|
level._cur_stage_name = "gl";
|
||||||
clientnotify( "gl" );
|
clientnotify( "gl" );
|
||||||
}
|
}
|
||||||
@ -52,24 +51,28 @@ stage_logic()
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_max()
|
stage_vo_max()
|
||||||
{
|
{
|
||||||
level waittill( "lantern_crashing" );
|
level waittill( "lantern_crashing" );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern );
|
maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern );
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_ric()
|
stage_vo_ric()
|
||||||
{
|
{
|
||||||
richtofensay( "vox_zmba_sidequest_gl_0", 8 );
|
richtofensay( "vox_zmba_sidequest_gl_0", 8 );
|
||||||
|
|
||||||
level waittill( "lantern_crashing" );
|
level waittill( "lantern_crashing" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_gl_1", 6 );
|
richtofensay( "vox_zmba_sidequest_gl_1", 6 );
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_lantern_spawn( s_start )
|
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 makevehicleunusable();
|
||||||
level.vh_lantern setneargoalnotifydist( 128 );
|
level.vh_lantern setneargoalnotifydist( 128 );
|
||||||
level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin );
|
level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin );
|
||||||
@ -84,22 +87,20 @@ gl_lantern_spawn( s_start )
|
|||||||
|
|
||||||
gl_lantern_delete()
|
gl_lantern_delete()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.vh_lantern ) )
|
if ( isdefined( level.vh_lantern ) )
|
||||||
{
|
|
||||||
if ( isDefined( level.vh_lantern.m_lantern ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.vh_lantern.m_lantern ) )
|
||||||
level.vh_lantern.m_lantern delete();
|
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.t_pickup delete();
|
||||||
}
|
|
||||||
level.vh_lantern cancelaimove();
|
level.vh_lantern cancelaimove();
|
||||||
level.vh_lantern clearvehgoalpos();
|
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.m_link delete();
|
||||||
}
|
|
||||||
level.vh_lantern delete();
|
level.vh_lantern delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,16 +108,17 @@ gl_lantern_delete()
|
|||||||
gl_lantern_move( s_current )
|
gl_lantern_move( s_current )
|
||||||
{
|
{
|
||||||
level endon( "lantern_crashing" );
|
level endon( "lantern_crashing" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
s_current = gl_lantern_get_next_struct( s_current );
|
s_current = gl_lantern_get_next_struct( s_current );
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
{
|
||||||
if ( randomint( 100 ) < 50 )
|
if ( randomint( 100 ) < 50 )
|
||||||
{
|
|
||||||
s_current = level.vh_lantern gl_lantern_teleport();
|
s_current = level.vh_lantern gl_lantern_teleport();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
level.vh_lantern gl_lantern_move_to_struct( s_current );
|
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_struct_links = [];
|
||||||
a_target_structs = getstructarray( s_current.target, "targetname" );
|
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, " " );
|
a_names = strtok( s_current.script_string, " " );
|
||||||
_a171 = a_names;
|
|
||||||
_k171 = getFirstArrayKey( _a171 );
|
foreach ( str_name in a_names )
|
||||||
while ( isDefined( _k171 ) )
|
|
||||||
{
|
{
|
||||||
str_name = _a171[ _k171 ];
|
|
||||||
a_new_structs = getstructarray( str_name, "targetname" );
|
a_new_structs = getstructarray( str_name, "targetname" );
|
||||||
a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 );
|
a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 );
|
||||||
_k171 = getNextArrayKey( _a171, _k171 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_randomize( a_target_structs )[0];
|
return array_randomize( a_target_structs )[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +147,7 @@ gl_lantern_move_to_struct( s_goto )
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
self setvehgoalpos( s_goto.origin, 1 );
|
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" );
|
self waittill_either( "goal", "near_goal" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,24 +167,24 @@ gl_lantern_damage_watcher()
|
|||||||
{
|
{
|
||||||
self.m_lantern endon( "delete" );
|
self.m_lantern endon( "delete" );
|
||||||
self.m_lantern setcandamage( 1 );
|
self.m_lantern setcandamage( 1 );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type );
|
self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type );
|
||||||
|
|
||||||
if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" )
|
if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.m_lantern playsound( "zmb_sq_glantern_impact" );
|
self.m_lantern playsound( "zmb_sq_glantern_impact" );
|
||||||
self gl_lantern_crash_movement();
|
self gl_lantern_crash_movement();
|
||||||
self thread gl_lantern_pickup_watch();
|
self thread gl_lantern_pickup_watch();
|
||||||
self thread gl_lantern_stop_spin_on_land();
|
self thread gl_lantern_stop_spin_on_land();
|
||||||
level thread gl_lantern_respawn_wait();
|
level thread gl_lantern_respawn_wait();
|
||||||
|
|
||||||
level waittill( "gl_lantern_respawn" );
|
level waittill( "gl_lantern_respawn" );
|
||||||
if ( isDefined( self.m_lantern ) )
|
|
||||||
|
if ( isdefined( self.m_lantern ) )
|
||||||
{
|
{
|
||||||
s_start_spot = gl_lantern_teleport();
|
s_start_spot = gl_lantern_teleport();
|
||||||
gl_lantern_move( s_start_spot );
|
gl_lantern_move( s_start_spot );
|
||||||
@ -193,11 +194,11 @@ gl_lantern_damage_watcher()
|
|||||||
gl_lantern_stop_spin_on_land()
|
gl_lantern_stop_spin_on_land()
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
while ( isDefined( self ) && length( self.velocity ) > 3 )
|
|
||||||
{
|
while ( isdefined( self ) && length( self.velocity ) > 3 )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
if ( isDefined( self ) )
|
if ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
self.m_link = spawn( "script_model", self.origin );
|
self.m_link = spawn( "script_model", self.origin );
|
||||||
self.m_link setmodel( "tag_origin" );
|
self.m_link setmodel( "tag_origin" );
|
||||||
@ -220,15 +221,19 @@ gl_lantern_pickup_watch()
|
|||||||
self.t_pickup triggerignoreteam();
|
self.t_pickup triggerignoreteam();
|
||||||
self.t_pickup enablelinkto();
|
self.t_pickup enablelinkto();
|
||||||
self.t_pickup linkto( self );
|
self.t_pickup linkto( self );
|
||||||
|
|
||||||
self.t_pickup waittill( "trigger", player );
|
self.t_pickup waittill( "trigger", player );
|
||||||
|
|
||||||
player player_take_piece( level.zombie_buildables["buried_sq_oillamp"].buildablepieces[0] );
|
player player_take_piece( level.zombie_buildables["buried_sq_oillamp"].buildablepieces[0] );
|
||||||
piece = player player_get_buildable_piece( 2 );
|
piece = player player_get_buildable_piece( 2 );
|
||||||
if ( isDefined( piece ) )
|
|
||||||
|
if ( isdefined( piece ) )
|
||||||
{
|
{
|
||||||
piece.sq_is_ghost_lamp = 1;
|
piece.sq_is_ghost_lamp = 1;
|
||||||
piece.start_origin = vectorScale( ( 0, 0, 1 ), 512 );
|
piece.start_origin = vectorscale( ( 0, 0, -1 ), 512.0 );
|
||||||
piece.start_angles = ( 0, 0, 1 );
|
piece.start_angles = ( 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.t_pickup delete();
|
self.t_pickup delete();
|
||||||
self.m_lantern delete();
|
self.m_lantern delete();
|
||||||
self delete();
|
self delete();
|
||||||
@ -240,15 +245,15 @@ gl_lantern_crash_movement()
|
|||||||
level notify( "lantern_crashing" );
|
level notify( "lantern_crashing" );
|
||||||
self cancelaimove();
|
self cancelaimove();
|
||||||
self clearvehgoalpos();
|
self clearvehgoalpos();
|
||||||
self setphysacceleration( vectorScale( ( 0, 0, 1 ), 800 ) );
|
self setphysacceleration( vectorscale( ( 0, 0, -1 ), 800.0 ) );
|
||||||
hitdir = ( 0, 0, 1 );
|
hitdir = ( 1, 0, 0 );
|
||||||
side_dir = vectorcross( hitdir, ( 0, 0, 1 ) );
|
side_dir = vectorcross( hitdir, ( 0, 0, 1 ) );
|
||||||
side_dir_mag = randomfloatrange( -100, 100 );
|
side_dir_mag = randomfloatrange( -100, 100 );
|
||||||
side_dir_mag += sign( side_dir_mag ) * 80;
|
side_dir_mag += sign( side_dir_mag ) * 80;
|
||||||
side_dir *= side_dir_mag;
|
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 = 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 = randomfloatrange( 0, 210 ) * sign( ang_vel[1] );
|
||||||
yaw_vel += sign( yaw_vel ) * 180;
|
yaw_vel += sign( yaw_vel ) * 180;
|
||||||
ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) );
|
ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) );
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_buried_sq;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
#using_animtree( "fxanim_props_dlc3" );
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -19,13 +19,10 @@ init()
|
|||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread stage_vo_max();
|
level thread stage_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
}
|
|
||||||
level._cur_stage_name = "ip";
|
level._cur_stage_name = "ip";
|
||||||
clientnotify( "ip" );
|
clientnotify( "ip" );
|
||||||
}
|
}
|
||||||
@ -40,7 +37,9 @@ stage_vo_max()
|
|||||||
maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot );
|
maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot );
|
||||||
m_lightboard = getent( "sq_bp_board", "targetname" );
|
m_lightboard = getent( "sq_bp_board", "targetname" );
|
||||||
trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 );
|
trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 );
|
||||||
|
|
||||||
trigger waittill( "trigger" );
|
trigger waittill( "trigger" );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_ip_2", m_lightboard );
|
maxissay( "vox_maxi_sidequest_ip_2", m_lightboard );
|
||||||
maxissay( "vox_maxi_sidequest_ip_3", m_lightboard );
|
maxissay( "vox_maxi_sidequest_ip_3", m_lightboard );
|
||||||
}
|
}
|
||||||
@ -48,17 +47,16 @@ stage_vo_max()
|
|||||||
stage_vo_ric()
|
stage_vo_ric()
|
||||||
{
|
{
|
||||||
richtofensay( "vox_zmba_sidequest_ip_0", 10 );
|
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_2", 8 );
|
||||||
richtofensay( "vox_zmba_sidequest_ip_3", 11 );
|
richtofensay( "vox_zmba_sidequest_ip_3", 11 );
|
||||||
if ( !isDefined( level.rich_sq_player ) )
|
|
||||||
{
|
if ( !isdefined( level.rich_sq_player ) )
|
||||||
return;
|
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;
|
wait 1;
|
||||||
}
|
|
||||||
richtofensay( "vox_zmba_sidequest_ip_4", 8 );
|
richtofensay( "vox_zmba_sidequest_ip_4", 8 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +71,7 @@ stage_logic()
|
|||||||
array_thread( a_button_structs, ::sq_bp_spawn_trigger );
|
array_thread( a_button_structs, ::sq_bp_spawn_trigger );
|
||||||
m_lightboard = getent( "sq_bp_board", "targetname" );
|
m_lightboard = getent( "sq_bp_board", "targetname" );
|
||||||
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
|
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
|
||||||
|
|
||||||
while ( !flag( "sq_ip_puzzle_complete" ) )
|
while ( !flag( "sq_ip_puzzle_complete" ) )
|
||||||
{
|
{
|
||||||
sq_bp_start_puzzle_lights();
|
sq_bp_start_puzzle_lights();
|
||||||
@ -84,17 +83,22 @@ stage_logic()
|
|||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else sq_ml_spawn_levers();
|
else
|
||||||
|
{
|
||||||
|
sq_ml_spawn_levers();
|
||||||
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
||||||
array_thread( a_levers, ::sq_ml_spawn_trigger );
|
array_thread( a_levers, ::sq_ml_spawn_trigger );
|
||||||
level thread sq_ml_puzzle_logic();
|
level thread sq_ml_puzzle_logic();
|
||||||
flag_wait( "sq_ip_puzzle_complete" );
|
flag_wait( "sq_ip_puzzle_complete" );
|
||||||
|
}
|
||||||
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_bp_spawn_trigger()
|
sq_bp_spawn_trigger()
|
||||||
@ -105,9 +109,11 @@ sq_bp_spawn_trigger()
|
|||||||
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
|
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
|
||||||
self.trig triggerignoreteam();
|
self.trig triggerignoreteam();
|
||||||
self.trig usetriggerrequirelookat();
|
self.trig usetriggerrequirelookat();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self.trig waittill( "trigger" );
|
self.trig waittill( "trigger" );
|
||||||
|
|
||||||
self.trig sethintstring( "" );
|
self.trig sethintstring( "" );
|
||||||
level thread sq_bp_button_pressed( self.script_string, self.trig );
|
level thread sq_bp_button_pressed( self.script_string, self.trig );
|
||||||
wait 1;
|
wait 1;
|
||||||
@ -125,7 +131,7 @@ sq_bp_spawn_board()
|
|||||||
|
|
||||||
sq_bp_button_pressed( str_tag, trig )
|
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 )
|
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" );
|
m_light = sq_bp_light_on( str_tag, "yellow" );
|
||||||
trig playsound( "zmb_sq_bell_no" );
|
trig playsound( "zmb_sq_bell_no" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
if ( isDefined( m_light ) )
|
|
||||||
{
|
if ( isdefined( m_light ) )
|
||||||
level setclientfield( m_light, 0 );
|
level setclientfield( m_light, 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sq_bp_start_puzzle_lights()
|
sq_bp_start_puzzle_lights()
|
||||||
{
|
{
|
||||||
@ -158,50 +164,42 @@ sq_bp_start_puzzle_lights()
|
|||||||
level endon( "sq_bp_timeout" );
|
level endon( "sq_bp_timeout" );
|
||||||
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
||||||
a_tags = [];
|
a_tags = [];
|
||||||
_a190 = a_button_structs;
|
|
||||||
_k190 = getFirstArrayKey( _a190 );
|
foreach ( m_button in a_button_structs )
|
||||||
while ( isDefined( _k190 ) )
|
|
||||||
{
|
|
||||||
m_button = _a190[ _k190 ];
|
|
||||||
a_tags[a_tags.size] = m_button.script_string;
|
a_tags[a_tags.size] = m_button.script_string;
|
||||||
_k190 = getNextArrayKey( _a190, _k190 );
|
|
||||||
}
|
|
||||||
a_tags = array_randomize( a_tags );
|
a_tags = array_randomize( a_tags );
|
||||||
m_lightboard = getent( "sq_bp_board", "targetname" );
|
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 = spawn( "trigger_radius_use", m_lightboard.origin, 0, 16, 16 );
|
||||||
}
|
|
||||||
level.t_start setcursorhint( "HINT_NOICON" );
|
level.t_start setcursorhint( "HINT_NOICON" );
|
||||||
level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
|
level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
|
||||||
level.t_start triggerignoreteam();
|
level.t_start triggerignoreteam();
|
||||||
level.t_start usetriggerrequirelookat();
|
level.t_start usetriggerrequirelookat();
|
||||||
|
|
||||||
level.t_start waittill( "trigger" );
|
level.t_start waittill( "trigger" );
|
||||||
|
|
||||||
level.t_start delete();
|
level.t_start delete();
|
||||||
_a210 = a_tags;
|
|
||||||
_k210 = getFirstArrayKey( _a210 );
|
foreach ( str_tag in a_tags )
|
||||||
while ( isDefined( _k210 ) )
|
|
||||||
{
|
{
|
||||||
str_tag = _a210[ _k210 ];
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
level thread sq_bp_set_current_bulb( str_tag );
|
level thread sq_bp_set_current_bulb( str_tag );
|
||||||
|
|
||||||
level waittill( "sq_bp_correct_button" );
|
level waittill( "sq_bp_correct_button" );
|
||||||
_k210 = getNextArrayKey( _a210, _k210 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "sq_ip_puzzle_complete" );
|
flag_set( "sq_ip_puzzle_complete" );
|
||||||
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
||||||
_a221 = a_button_structs;
|
|
||||||
_k221 = getFirstArrayKey( _a221 );
|
foreach ( s_button in a_button_structs )
|
||||||
while ( isDefined( _k221 ) )
|
|
||||||
{
|
|
||||||
s_button = _a221[ _k221 ];
|
|
||||||
if ( isDefined( s_button.trig ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( s_button.trig ) )
|
||||||
s_button.trig delete();
|
s_button.trig delete();
|
||||||
}
|
}
|
||||||
_k221 = getNextArrayKey( _a221, _k221 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_bp_set_current_bulb( str_tag )
|
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_correct_button" );
|
||||||
level endon( "sq_bp_wrong_button" );
|
level endon( "sq_bp_wrong_button" );
|
||||||
level endon( "sq_bp_timeout" );
|
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.str_sq_bp_active_light = "";
|
||||||
}
|
|
||||||
level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" );
|
level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" );
|
||||||
level.str_sq_bp_active_light = str_tag;
|
level.str_sq_bp_active_light = str_tag;
|
||||||
wait 10;
|
wait 10;
|
||||||
@ -222,29 +220,25 @@ sq_bp_set_current_bulb( str_tag )
|
|||||||
sq_bp_delete_green_lights()
|
sq_bp_delete_green_lights()
|
||||||
{
|
{
|
||||||
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
|
||||||
_a251 = a_button_structs;
|
|
||||||
_k251 = getFirstArrayKey( _a251 );
|
foreach ( m_button in a_button_structs )
|
||||||
while ( isDefined( _k251 ) )
|
|
||||||
{
|
{
|
||||||
m_button = _a251[ _k251 ];
|
|
||||||
str_clientfield = "buried_sq_bp_" + m_button.script_string;
|
str_clientfield = "buried_sq_bp_" + m_button.script_string;
|
||||||
level setclientfield( str_clientfield, 0 );
|
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 = "";
|
level.str_sq_bp_active_light = "";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sq_bp_light_on( str_tag, str_color )
|
sq_bp_light_on( str_tag, str_color )
|
||||||
{
|
{
|
||||||
str_clientfield = "buried_sq_bp_" + str_tag;
|
str_clientfield = "buried_sq_bp_" + str_tag;
|
||||||
n_color = 1;
|
n_color = 1;
|
||||||
|
|
||||||
if ( str_color == "green" )
|
if ( str_color == "green" )
|
||||||
{
|
|
||||||
n_color = 2;
|
n_color = 2;
|
||||||
}
|
|
||||||
level setclientfield( str_clientfield, 0 );
|
level setclientfield( str_clientfield, 0 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
level setclientfield( str_clientfield, n_color );
|
level setclientfield( str_clientfield, n_color );
|
||||||
@ -255,40 +249,43 @@ debug_tag( str_tag )
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
debugstar( self gettagorigin( str_tag ), 1, ( 0, 1, 0 ) );
|
debugstar( self gettagorigin( str_tag ), 1, ( 1, 0, 0 ) );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ml_spawn_lever( n_index )
|
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 setmodel( self.model );
|
||||||
m_lever.targetname = "sq_ml_lever";
|
m_lever.targetname = "sq_ml_lever";
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
v_spot = self.origin;
|
v_spot = self.origin;
|
||||||
v_angles = self.angles;
|
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 );
|
is_flip = randomint( 2 );
|
||||||
s_spot = getstruct( level._maze._active_perm_list[n_index], "script_noteworthy" );
|
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;
|
v_offset = vectornormalize( v_right ) * 2;
|
||||||
|
|
||||||
if ( is_flip )
|
if ( is_flip )
|
||||||
{
|
|
||||||
v_offset *= -1;
|
v_offset *= -1;
|
||||||
}
|
|
||||||
v_spot = s_spot.origin + vectorScale( ( 0, 1, 0 ), 48 ) + v_offset;
|
v_spot = s_spot.origin + vectorscale( ( 0, 0, 1 ), 48.0 ) + v_offset;
|
||||||
v_angles = s_spot.angles + vectorScale( ( 0, 1, 0 ), 90 );
|
v_angles = s_spot.angles + vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||||
|
|
||||||
if ( is_flip )
|
if ( is_flip )
|
||||||
{
|
v_angles = s_spot.angles - vectorscale( ( 0, 1, 0 ), 90.0 );
|
||||||
v_angles = s_spot.angles - vectorScale( ( 0, 1, 0 ), 90 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lever.origin = v_spot;
|
m_lever.origin = v_spot;
|
||||||
m_lever.angles = v_angles;
|
m_lever.angles = v_angles;
|
||||||
/#
|
/#
|
||||||
@ -302,18 +299,18 @@ sq_ml_show_lever_debug( v_spot, n_index )
|
|||||||
{
|
{
|
||||||
level endon( "zm_buried_maze_changed" );
|
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 );
|
print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ml_spawn_trigger()
|
sq_ml_spawn_trigger()
|
||||||
{
|
{
|
||||||
v_right = anglesToForward( self.angles );
|
v_right = anglestoforward( self.angles );
|
||||||
v_offset = vectornormalize( v_right ) * 8;
|
v_offset = vectornormalize( v_right ) * 8;
|
||||||
self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 );
|
self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 );
|
||||||
self.trig enablelinkto();
|
self.trig enablelinkto();
|
||||||
@ -324,16 +321,20 @@ sq_ml_spawn_trigger()
|
|||||||
self.trig usetriggerrequirelookat();
|
self.trig usetriggerrequirelookat();
|
||||||
self.is_flipped = 0;
|
self.is_flipped = 0;
|
||||||
self useanimtree( -1 );
|
self useanimtree( -1 );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self.trig waittill( "trigger" );
|
self.trig waittill( "trigger" );
|
||||||
|
|
||||||
self setanim( level.maze_switch_anim["switch_down"] );
|
self setanim( level.maze_switch_anim["switch_down"] );
|
||||||
self.trig sethintstring( "" );
|
self.trig sethintstring( "" );
|
||||||
self.is_flipped = 1;
|
self.is_flipped = 1;
|
||||||
self.n_flip_number = level.sq_ml_curr_lever;
|
self.n_flip_number = level.sq_ml_curr_lever;
|
||||||
level.sq_ml_curr_lever++;
|
level.sq_ml_curr_lever++;
|
||||||
self.trig playsound( "zmb_sq_maze_switch" );
|
self.trig playsound( "zmb_sq_maze_switch" );
|
||||||
|
|
||||||
level waittill( "sq_ml_reset_levers" );
|
level waittill( "sq_ml_reset_levers" );
|
||||||
|
|
||||||
self setanim( level.maze_switch_anim["switch_up"] );
|
self setanim( level.maze_switch_anim["switch_up"] );
|
||||||
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
|
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
|
||||||
self.is_flipped = 0;
|
self.is_flipped = 0;
|
||||||
@ -342,17 +343,13 @@ sq_ml_spawn_trigger()
|
|||||||
|
|
||||||
sq_ml_spawn_levers()
|
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" );
|
level waittill( "zm_buried_maze_changed" );
|
||||||
}
|
|
||||||
a_lever_structs = getstructarray( "sq_maze_lever", "targetname" );
|
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 );
|
a_lever_structs[i] thread sq_ml_spawn_lever( i );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ml_puzzle_logic()
|
sq_ml_puzzle_logic()
|
||||||
@ -360,38 +357,33 @@ sq_ml_puzzle_logic()
|
|||||||
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
||||||
level.sq_ml_curr_lever = 0;
|
level.sq_ml_curr_lever = 0;
|
||||||
a_levers = array_randomize( a_levers );
|
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;
|
a_levers[i].n_lever_order = i;
|
||||||
i++;
|
|
||||||
}
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level.sq_ml_curr_lever = 0;
|
level.sq_ml_curr_lever = 0;
|
||||||
sq_ml_puzzle_wait_for_levers();
|
sq_ml_puzzle_wait_for_levers();
|
||||||
n_correct = 0;
|
n_correct = 0;
|
||||||
_a424 = a_levers;
|
|
||||||
_k424 = getFirstArrayKey( _a424 );
|
foreach ( m_lever in a_levers )
|
||||||
while ( isDefined( _k424 ) )
|
|
||||||
{
|
{
|
||||||
m_lever = _a424[ _k424 ];
|
|
||||||
if ( m_lever.n_flip_number == m_lever.n_lever_order )
|
if ( m_lever.n_flip_number == m_lever.n_lever_order )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
|
playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
|
||||||
n_correct++;
|
n_correct++;
|
||||||
m_lever playsound( "zmb_sq_maze_correct_spark" );
|
m_lever playsound( "zmb_sq_maze_correct_spark" );
|
||||||
}
|
}
|
||||||
_k424 = getNextArrayKey( _a424, _k424 );
|
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Levers Correct: " + n_correct );
|
iprintlnbold( "Levers Correct: " + n_correct );
|
||||||
#/
|
#/
|
||||||
if ( n_correct == a_levers.size )
|
if ( n_correct == a_levers.size )
|
||||||
{
|
|
||||||
flag_set( "sq_ip_puzzle_complete" );
|
flag_set( "sq_ip_puzzle_complete" );
|
||||||
}
|
|
||||||
level waittill( "zm_buried_maze_changed" );
|
level waittill( "zm_buried_maze_changed" );
|
||||||
|
|
||||||
level notify( "sq_ml_reset_levers" );
|
level notify( "sq_ml_reset_levers" );
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
@ -401,20 +393,17 @@ sq_ml_puzzle_wait_for_levers()
|
|||||||
{
|
{
|
||||||
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
a_levers = getentarray( "sq_ml_lever", "targetname" );
|
||||||
are_all_flipped = 0;
|
are_all_flipped = 0;
|
||||||
|
|
||||||
while ( !are_all_flipped )
|
while ( !are_all_flipped )
|
||||||
{
|
{
|
||||||
are_all_flipped = 1;
|
are_all_flipped = 1;
|
||||||
_a458 = a_levers;
|
|
||||||
_k458 = getFirstArrayKey( _a458 );
|
foreach ( m_lever in a_levers )
|
||||||
while ( isDefined( _k458 ) )
|
|
||||||
{
|
{
|
||||||
m_lever = _a458[ _k458 ];
|
|
||||||
if ( m_lever.is_flipped == 0 )
|
if ( m_lever.is_flipped == 0 )
|
||||||
{
|
|
||||||
are_all_flipped = 0;
|
are_all_flipped = 0;
|
||||||
}
|
}
|
||||||
_k458 = getNextArrayKey( _a458, _k458 );
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include maps/mp/zm_buried_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -21,10 +23,9 @@ stage_logic()
|
|||||||
/#
|
/#
|
||||||
iprintlnbold( "LL Started" );
|
iprintlnbold( "LL Started" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( level.generator_power_states_color ) )
|
if ( !isdefined( level.generator_power_states_color ) )
|
||||||
{
|
|
||||||
level.generator_power_states_color = 0;
|
level.generator_power_states_color = 0;
|
||||||
}
|
|
||||||
sq_ll_show_code();
|
sq_ll_show_code();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
@ -35,56 +36,43 @@ sq_ll_show_code()
|
|||||||
a_spots = getstructarray( "sq_code_pos", "targetname" );
|
a_spots = getstructarray( "sq_code_pos", "targetname" );
|
||||||
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
|
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
|
||||||
a_codes = [];
|
a_codes = [];
|
||||||
_a50 = a_signs;
|
|
||||||
_k50 = getFirstArrayKey( _a50 );
|
foreach ( m_sign in a_signs )
|
||||||
while ( isDefined( _k50 ) )
|
|
||||||
{
|
{
|
||||||
m_sign = _a50[ _k50 ];
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
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";
|
a_codes[a_codes.size] = m_sign.model + "_code";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
for ( i = 0; i < a_codes.size; i++ )
|
||||||
{
|
|
||||||
if ( isDefined( m_sign.is_ric_sign ) )
|
|
||||||
{
|
|
||||||
a_codes[ a_codes.size ] = m_sign.model + "_code";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_k50 = getNextArrayKey( _a50, _k50 );
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < a_codes.size )
|
|
||||||
{
|
{
|
||||||
if ( a_codes[i] == "p6_zm_bu_sign_tunnel_consumption_code" )
|
if ( a_codes[i] == "p6_zm_bu_sign_tunnel_consumption_code" )
|
||||||
{
|
|
||||||
a_codes[i] = "p6_zm_bu_sign_tunnel_consump_code";
|
a_codes[i] = "p6_zm_bu_sign_tunnel_consump_code";
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
for ( i = 0; i < a_codes.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < a_codes.size )
|
|
||||||
{
|
{
|
||||||
m_code = spawn( "script_model", a_spots[i].origin );
|
m_code = spawn( "script_model", a_spots[i].origin );
|
||||||
m_code.angles = a_spots[i].angles;
|
m_code.angles = a_spots[i].angles;
|
||||||
m_code setmodel( a_codes[i] );
|
m_code setmodel( a_codes[i] );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread sq_ll_show_code_vo_max();
|
level thread sq_ll_show_code_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread sq_ll_show_code_vo_ric();
|
level thread sq_ll_show_code_vo_ric();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_ll_show_code_vo_max()
|
sq_ll_show_code_vo_max()
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
#include maps/mp/zm_buried_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
flag_init( "sq_amplifiers_on" );
|
flag_init( "sq_amplifiers_on" );
|
||||||
a_amp_structs = getstructarray( "sq_amplifier_spot" );
|
a_amp_structs = getstructarray( "sq_amplifier_spot" );
|
||||||
_a16 = a_amp_structs;
|
|
||||||
_k16 = getFirstArrayKey( _a16 );
|
foreach ( s_amp_spot in a_amp_structs )
|
||||||
while ( isDefined( _k16 ) )
|
|
||||||
{
|
{
|
||||||
s_amp_spot = _a16[ _k16 ];
|
|
||||||
m_amplifier = spawn( "script_model", s_amp_spot.origin );
|
m_amplifier = spawn( "script_model", s_amp_spot.origin );
|
||||||
m_amplifier thread mta_amplifier_init();
|
m_amplifier thread mta_amplifier_init();
|
||||||
_k16 = getNextArrayKey( _a16, _k16 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage );
|
declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,12 +42,15 @@ stage_logic()
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_vo_max()
|
stage_vo_max()
|
||||||
{
|
{
|
||||||
level thread stage_vo_max_amp_broken();
|
level thread stage_vo_max_amp_broken();
|
||||||
|
|
||||||
level waittill( "mta_amp_found", amp );
|
level waittill( "mta_amp_found", amp );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_amp_0", amp );
|
maxissay( "vox_maxi_sidequest_amp_0", amp );
|
||||||
maxissay( "vox_maxi_sidequest_amp_1", amp );
|
maxissay( "vox_maxi_sidequest_amp_1", amp );
|
||||||
}
|
}
|
||||||
@ -55,12 +58,19 @@ stage_vo_max()
|
|||||||
stage_vo_max_amp_broken()
|
stage_vo_max_amp_broken()
|
||||||
{
|
{
|
||||||
level waittill( "mta_amp_broken", amp );
|
level waittill( "mta_amp_broken", amp );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_amp_2", amp );
|
maxissay( "vox_maxi_sidequest_amp_2", amp );
|
||||||
|
|
||||||
level waittill( "mta_amp_broken", amp );
|
level waittill( "mta_amp_broken", amp );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_amp_3", amp );
|
maxissay( "vox_maxi_sidequest_amp_3", amp );
|
||||||
|
|
||||||
level waittill( "mta_amp_broken", amp );
|
level waittill( "mta_amp_broken", amp );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_amp_4", amp );
|
maxissay( "vox_maxi_sidequest_amp_4", amp );
|
||||||
|
|
||||||
level waittill( "mta_amp_broken", amp );
|
level waittill( "mta_amp_broken", amp );
|
||||||
|
|
||||||
maxissay( "vox_maxi_sidequest_amp_5", amp );
|
maxissay( "vox_maxi_sidequest_amp_5", amp );
|
||||||
maxissay( "vox_maxi_sidequest_gl_0", amp );
|
maxissay( "vox_maxi_sidequest_gl_0", amp );
|
||||||
maxissay( "vox_maxi_sidequest_gl_1", amp );
|
maxissay( "vox_maxi_sidequest_gl_1", amp );
|
||||||
@ -69,7 +79,9 @@ stage_vo_max_amp_broken()
|
|||||||
stage_vo_ric()
|
stage_vo_ric()
|
||||||
{
|
{
|
||||||
level thread stage_vo_ric_amp_amplified();
|
level thread stage_vo_ric_amp_amplified();
|
||||||
|
|
||||||
level waittill( "mta_amp_found_by_sam" );
|
level waittill( "mta_amp_found_by_sam" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_amp_0", 10 );
|
richtofensay( "vox_zmba_sidequest_amp_0", 10 );
|
||||||
richtofensay( "vox_zmba_sidequest_amp_1", 7 );
|
richtofensay( "vox_zmba_sidequest_amp_1", 7 );
|
||||||
}
|
}
|
||||||
@ -77,6 +89,7 @@ stage_vo_ric()
|
|||||||
stage_vo_ric_amp_amplified()
|
stage_vo_ric_amp_amplified()
|
||||||
{
|
{
|
||||||
level waittill( "mta_amp_amplified" );
|
level waittill( "mta_amp_amplified" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_amp_2", 6 );
|
richtofensay( "vox_zmba_sidequest_amp_2", 6 );
|
||||||
richtofensay( "vox_zmba_sidequest_amp_3", 4 );
|
richtofensay( "vox_zmba_sidequest_amp_3", 4 );
|
||||||
}
|
}
|
||||||
@ -85,20 +98,18 @@ mta_amplifier_found_watcher()
|
|||||||
{
|
{
|
||||||
self endon( "damaged_by_subwoofer" );
|
self endon( "damaged_by_subwoofer" );
|
||||||
self endon( "amplifier_filled" );
|
self endon( "amplifier_filled" );
|
||||||
|
|
||||||
if ( self.amplifier_state != "base" )
|
if ( self.amplifier_state != "base" )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 );
|
trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 );
|
||||||
|
|
||||||
trigger waittill( "trigger", who );
|
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" );
|
level notify( "mta_amp_found_by_sam" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
level notify( "mta_amp_found", self );
|
||||||
level notify( "mta_amp_found" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mta_amplifier_init()
|
mta_amplifier_init()
|
||||||
@ -121,9 +132,9 @@ mta_amplifier_subwoofer_watch()
|
|||||||
#/
|
#/
|
||||||
self.amplifier_state = "broken";
|
self.amplifier_state = "broken";
|
||||||
self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
|
self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
|
||||||
self stoploopsound( 0,1 );
|
self stoploopsound( 0.1 );
|
||||||
self playsound( "zmb_sq_amplifier_destroy" );
|
self playsound( "zmb_sq_amplifier_destroy" );
|
||||||
level notify( "mta_amp_broken" );
|
level notify( "mta_amp_broken", self );
|
||||||
mta_check_all_amplifier_states();
|
mta_check_all_amplifier_states();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,14 +142,17 @@ mta_amplifier_damage_watch()
|
|||||||
{
|
{
|
||||||
self endon( "damaged_by_subwoofer" );
|
self endon( "damaged_by_subwoofer" );
|
||||||
n_slowgun_count = 0;
|
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 );
|
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" )
|
if ( str_weapon == "slowgun_zm" || str_weapon == "slowgun_upgraded_zm" )
|
||||||
{
|
{
|
||||||
n_slowgun_count++;
|
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 );
|
self setclientfield( "AmplifierShaderConstant", shader_amount );
|
||||||
|
|
||||||
if ( n_slowgun_count >= 25 )
|
if ( n_slowgun_count >= 25 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -153,19 +167,18 @@ mta_amplifier_damage_watch()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
mta_check_all_amplifier_states();
|
mta_check_all_amplifier_states();
|
||||||
}
|
}
|
||||||
|
|
||||||
mta_amplifier_filled_fx()
|
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;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,30 +188,18 @@ mta_check_all_amplifier_states()
|
|||||||
is_all_broken = 1;
|
is_all_broken = 1;
|
||||||
is_all_filled = 1;
|
is_all_filled = 1;
|
||||||
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
|
a_amplifiers = getentarray( "sq_amplifier", "targetname" );
|
||||||
_a226 = a_amplifiers;
|
|
||||||
_k226 = getFirstArrayKey( _a226 );
|
foreach ( m_amplifier in a_amplifiers )
|
||||||
while ( isDefined( _k226 ) )
|
|
||||||
{
|
{
|
||||||
m_amplifier = _a226[ _k226 ];
|
|
||||||
if ( m_amplifier.amplifier_state != "filled" )
|
if ( m_amplifier.amplifier_state != "filled" )
|
||||||
{
|
|
||||||
is_all_filled = 0;
|
is_all_filled = 0;
|
||||||
}
|
|
||||||
if ( m_amplifier.amplifier_state != "broken" )
|
if ( m_amplifier.amplifier_state != "broken" )
|
||||||
{
|
|
||||||
is_all_broken = 0;
|
is_all_broken = 0;
|
||||||
}
|
}
|
||||||
_k226 = getNextArrayKey( _a226, _k226 );
|
|
||||||
}
|
|
||||||
if ( is_all_filled )
|
if ( is_all_filled )
|
||||||
{
|
|
||||||
flag_set( "sq_amplifiers_on" );
|
flag_set( "sq_amplifiers_on" );
|
||||||
}
|
else if ( is_all_broken )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( is_all_broken )
|
|
||||||
{
|
|
||||||
flag_set( "sq_amplifiers_broken" );
|
flag_set( "sq_amplifiers_broken" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include maps/mp/zm_buried_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
#include maps\mp\zm_buried_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -15,13 +17,10 @@ init()
|
|||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread stage_vo_max();
|
level thread stage_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
}
|
|
||||||
level._cur_stage_name = "ows";
|
level._cur_stage_name = "ows";
|
||||||
clientnotify( "ows" );
|
clientnotify( "ows" );
|
||||||
}
|
}
|
||||||
@ -51,11 +50,13 @@ stage_logic()
|
|||||||
ows_targets_start();
|
ows_targets_start();
|
||||||
flag_clear( "sq_ows_start" );
|
flag_clear( "sq_ows_start" );
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ows_fountain_wait()
|
ows_fountain_wait()
|
||||||
@ -67,7 +68,9 @@ ows_fountain_wait()
|
|||||||
t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" );
|
t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" );
|
||||||
t_fountain triggerignoreteam();
|
t_fountain triggerignoreteam();
|
||||||
t_fountain usetriggerrequirelookat();
|
t_fountain usetriggerrequirelookat();
|
||||||
|
|
||||||
t_fountain waittill( "trigger" );
|
t_fountain waittill( "trigger" );
|
||||||
|
|
||||||
t_fountain playsound( "zmb_sq_coin_toss" );
|
t_fountain playsound( "zmb_sq_coin_toss" );
|
||||||
t_fountain delete();
|
t_fountain delete();
|
||||||
flag_set( "sq_ows_start" );
|
flag_set( "sq_ows_start" );
|
||||||
@ -79,25 +82,26 @@ ows_targets_start()
|
|||||||
flag_clear( "sq_ows_target_missed" );
|
flag_clear( "sq_ows_target_missed" );
|
||||||
level thread sndsidequestowsmusic();
|
level thread sndsidequestowsmusic();
|
||||||
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
|
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
|
||||||
|
|
||||||
while ( n_cur_second < 40 )
|
while ( n_cur_second < 40 )
|
||||||
{
|
{
|
||||||
a_spawn_spots = ows_targets_get_cur_spots( n_cur_second );
|
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 );
|
ows_targets_spawn( a_spawn_spots );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
n_cur_second++;
|
n_cur_second++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !flag( "sq_ows_target_missed" ) )
|
if ( !flag( "sq_ows_target_missed" ) )
|
||||||
{
|
{
|
||||||
flag_set( "sq_ows_success" );
|
flag_set( "sq_ows_success" );
|
||||||
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
|
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
|
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
|
||||||
}
|
|
||||||
level notify( "sndEndOWSMusic" );
|
level notify( "sndEndOWSMusic" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,31 +110,25 @@ ows_targets_get_cur_spots( n_time )
|
|||||||
a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
|
a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
|
||||||
a_to_spawn = [];
|
a_to_spawn = [];
|
||||||
str_time = "" + n_time;
|
str_time = "" + n_time;
|
||||||
_a133 = a_target_spots;
|
|
||||||
_k133 = getFirstArrayKey( _a133 );
|
foreach ( s_spot in a_target_spots )
|
||||||
while ( isDefined( _k133 ) )
|
|
||||||
{
|
{
|
||||||
s_spot = _a133[ _k133 ];
|
if ( isdefined( s_spot.script_string ) )
|
||||||
if ( isDefined( s_spot.script_string ) )
|
|
||||||
{
|
{
|
||||||
a_spawn_times = strtok( s_spot.script_string, " " );
|
a_spawn_times = strtok( s_spot.script_string, " " );
|
||||||
|
|
||||||
if ( isinarray( a_spawn_times, str_time ) )
|
if ( isinarray( a_spawn_times, str_time ) )
|
||||||
{
|
|
||||||
a_to_spawn[a_to_spawn.size] = s_spot;
|
a_to_spawn[a_to_spawn.size] = s_spot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k133 = getNextArrayKey( _a133, _k133 );
|
|
||||||
}
|
|
||||||
return a_to_spawn;
|
return a_to_spawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
ows_targets_spawn( a_spawn_spots )
|
ows_targets_spawn( a_spawn_spots )
|
||||||
{
|
{
|
||||||
_a151 = a_spawn_spots;
|
foreach ( s_spot in a_spawn_spots )
|
||||||
_k151 = getFirstArrayKey( _a151 );
|
|
||||||
while ( isDefined( _k151 ) )
|
|
||||||
{
|
{
|
||||||
s_spot = _a151[ _k151 ];
|
|
||||||
m_target = spawn( "script_model", s_spot.origin );
|
m_target = spawn( "script_model", s_spot.origin );
|
||||||
m_target.angles = s_spot.angles;
|
m_target.angles = s_spot.angles;
|
||||||
m_target setmodel( "p6_zm_bu_target" );
|
m_target setmodel( "p6_zm_bu_target" );
|
||||||
@ -139,14 +137,13 @@ ows_targets_spawn( a_spawn_spots )
|
|||||||
m_target show();
|
m_target show();
|
||||||
playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
|
playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
|
||||||
m_target playsound( "zmb_sq_target_spawn" );
|
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_move( s_spot.target );
|
||||||
}
|
|
||||||
m_target thread ows_target_think();
|
m_target thread ows_target_think();
|
||||||
m_target thread sndhit();
|
m_target thread sndhit();
|
||||||
m_target thread sndtime();
|
m_target thread sndtime();
|
||||||
_k151 = getNextArrayKey( _a151, _k151 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,13 +152,17 @@ ows_target_think()
|
|||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self thread ows_target_delete_timer();
|
self thread ows_target_delete_timer();
|
||||||
self waittill_either( "ows_target_timeout", "damage" );
|
self waittill_either( "ows_target_timeout", "damage" );
|
||||||
if ( isDefined( self.m_linker ) )
|
|
||||||
|
if ( isdefined( self.m_linker ) )
|
||||||
{
|
{
|
||||||
self unlink();
|
self unlink();
|
||||||
self.m_linker delete();
|
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 waittill( "rotatedone" );
|
||||||
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +172,7 @@ ows_target_move( str_target )
|
|||||||
self.m_linker = spawn( "script_model", self.origin );
|
self.m_linker = spawn( "script_model", self.origin );
|
||||||
self.m_linker.angles = self.angles;
|
self.m_linker.angles = self.angles;
|
||||||
self linkto( self.m_linker );
|
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()
|
ows_target_delete_timer()
|
||||||
@ -188,36 +189,43 @@ ows_target_delete_timer()
|
|||||||
sndsidequestowsmusic()
|
sndsidequestowsmusic()
|
||||||
{
|
{
|
||||||
while ( is_true( level.music_override ) )
|
while ( is_true( level.music_override ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
|
||||||
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
ent playloopsound( "mus_sidequest_ows" );
|
ent playloopsound( "mus_sidequest_ows" );
|
||||||
|
|
||||||
level waittill( "sndEndOWSMusic" );
|
level waittill( "sndEndOWSMusic" );
|
||||||
|
|
||||||
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
ent stoploopsound( 4 );
|
ent stoploopsound( 4 );
|
||||||
|
|
||||||
if ( !flag( "sq_ows_success" ) )
|
if ( !flag( "sq_ows_success" ) )
|
||||||
{
|
{
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
ent playsound( "mus_sidequest_0" );
|
ent playsound( "mus_sidequest_0" );
|
||||||
}
|
}
|
||||||
wait 3,5;
|
|
||||||
|
wait 3.5;
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
sndhit()
|
sndhit()
|
||||||
{
|
{
|
||||||
self endon( "ows_target_timeout" );
|
self endon( "ows_target_timeout" );
|
||||||
|
|
||||||
self waittill( "damage" );
|
self waittill( "damage" );
|
||||||
|
|
||||||
self playsound( "zmb_sq_target_hit" );
|
self playsound( "zmb_sq_target_hit" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sndtime()
|
sndtime()
|
||||||
{
|
{
|
||||||
self endon( "zmb_sq_target_hit" );
|
self endon( "zmb_sq_target_hit" );
|
||||||
|
|
||||||
self waittill( "ows_target_timeout" );
|
self waittill( "ows_target_timeout" );
|
||||||
|
|
||||||
self playsound( "zmb_sq_target_flip" );
|
self playsound( "zmb_sq_target_flip" );
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#include maps/mp/zm_buried_buildables;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weap_time_bomb;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zm_buried_sq;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\_visionset_mgr;
|
||||||
#include maps/mp/_visionset_mgr;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_buried_sq;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_weap_time_bomb;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
#using_animtree( "zm_buried_props" );
|
#include maps\mp\zm_buried_buildables;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -23,8 +23,8 @@ init()
|
|||||||
flag_init( "sq_tpo_generator_powered" );
|
flag_init( "sq_tpo_generator_powered" );
|
||||||
flag_init( "sq_wisp_saved_with_time_bomb" );
|
flag_init( "sq_wisp_saved_with_time_bomb" );
|
||||||
flag_init( "sq_tpo_stage_started" );
|
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_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_restore( ::time_bomb_restores_wisp_state );
|
||||||
/#
|
/#
|
||||||
level thread debug_give_piece();
|
level thread debug_give_piece();
|
||||||
#/
|
#/
|
||||||
@ -36,13 +36,10 @@ init()
|
|||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
if ( flag( "sq_is_max_tower_built" ) )
|
if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
level thread stage_vo_max();
|
level thread stage_vo_max();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread stage_vo_ric();
|
level thread stage_vo_ric();
|
||||||
}
|
|
||||||
level._cur_stage_name = "tpo";
|
level._cur_stage_name = "tpo";
|
||||||
clientnotify( "tpo" );
|
clientnotify( "tpo" );
|
||||||
}
|
}
|
||||||
@ -64,10 +61,14 @@ stage_vo_ric()
|
|||||||
richtofensay( "vox_zmba_sidequest_step8_0", 11 );
|
richtofensay( "vox_zmba_sidequest_step8_0", 11 );
|
||||||
richtofensay( "vox_zmba_sidequest_step8_1", 6 );
|
richtofensay( "vox_zmba_sidequest_step8_1", 6 );
|
||||||
richtofensay( "vox_zmba_sidequest_step8_2", 6 );
|
richtofensay( "vox_zmba_sidequest_step8_2", 6 );
|
||||||
|
|
||||||
level waittill( "sq_tpo_special_round_started" );
|
level waittill( "sq_tpo_special_round_started" );
|
||||||
|
|
||||||
wait 2;
|
wait 2;
|
||||||
richtofensay( "vox_zmba_sidequest_step8_3", 6 );
|
richtofensay( "vox_zmba_sidequest_step8_3", 6 );
|
||||||
|
|
||||||
level waittill( "sq_tpo_special_round_ended" );
|
level waittill( "sq_tpo_special_round_ended" );
|
||||||
|
|
||||||
richtofensay( "vox_zmba_sidequest_step8_6", 4 );
|
richtofensay( "vox_zmba_sidequest_step8_6", 4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,14 +78,11 @@ stage_logic()
|
|||||||
iprintlnbold( "TPO Started" );
|
iprintlnbold( "TPO Started" );
|
||||||
#/
|
#/
|
||||||
flag_set( "sq_tpo_stage_started" );
|
flag_set( "sq_tpo_stage_started" );
|
||||||
|
|
||||||
if ( flag( "sq_is_ric_tower_built" ) )
|
if ( flag( "sq_is_ric_tower_built" ) )
|
||||||
{
|
|
||||||
stage_logic_richtofen();
|
stage_logic_richtofen();
|
||||||
}
|
|
||||||
else if ( flag( "sq_is_max_tower_built" ) )
|
else if ( flag( "sq_is_max_tower_built" ) )
|
||||||
{
|
|
||||||
stage_logic_maxis();
|
stage_logic_maxis();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -104,18 +102,27 @@ stage_logic_richtofen()
|
|||||||
iprintlnbold( "TPO: Richtofen started" );
|
iprintlnbold( "TPO: Richtofen started" );
|
||||||
#/
|
#/
|
||||||
e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" );
|
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" );
|
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 );
|
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;
|
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" );
|
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" );
|
flag_set( "sq_tpo_time_bomb_in_valid_location" );
|
||||||
level thread sq_tpo_check_players_in_time_bomb_volume( e_time_bomb_volume );
|
level thread sq_tpo_check_players_in_time_bomb_volume( e_time_bomb_volume );
|
||||||
wait_for_time_bomb_to_be_detonated_or_thrown_again();
|
wait_for_time_bomb_to_be_detonated_or_thrown_again();
|
||||||
level notify( "sq_tpo_stop_checking_time_bomb_volume" );
|
level notify( "sq_tpo_stop_checking_time_bomb_volume" );
|
||||||
|
|
||||||
if ( flag( "time_bomb_restore_active" ) )
|
if ( flag( "time_bomb_restore_active" ) )
|
||||||
{
|
{
|
||||||
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
|
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
|
||||||
@ -127,8 +134,11 @@ stage_logic_richtofen()
|
|||||||
level notify( "sq_tpo_special_round_ended" );
|
level notify( "sq_tpo_special_round_ended" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
|
while ( !flag( "sq_tpo_generator_powered" ) );
|
||||||
|
}
|
||||||
|
|
||||||
stage_logic_maxis()
|
stage_logic_maxis()
|
||||||
{
|
{
|
||||||
@ -136,32 +146,36 @@ stage_logic_maxis()
|
|||||||
iprintlnbold( "TPO: Maxis started" );
|
iprintlnbold( "TPO: Maxis started" );
|
||||||
#/
|
#/
|
||||||
flag_wait( "sq_wisp_saved_with_time_bomb" );
|
flag_wait( "sq_wisp_saved_with_time_bomb" );
|
||||||
|
|
||||||
while ( !flag( "sq_wisp_success" ) )
|
while ( !flag( "sq_wisp_success" ) )
|
||||||
{
|
{
|
||||||
stage_start( "sq", "ts" );
|
stage_start( "sq", "ts" );
|
||||||
|
|
||||||
level waittill( "sq_ts_over" );
|
level waittill( "sq_ts_over" );
|
||||||
|
|
||||||
stage_start( "sq", "ctw" );
|
stage_start( "sq", "ctw" );
|
||||||
|
|
||||||
level waittill( "sq_ctw_over" );
|
level waittill( "sq_ctw_over" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level._cur_stage_name = "tpo";
|
level._cur_stage_name = "tpo";
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_tpo_check_players_in_time_bomb_volume( e_volume )
|
sq_tpo_check_players_in_time_bomb_volume( e_volume )
|
||||||
{
|
{
|
||||||
level endon( "sq_tpo_stop_checking_time_bomb_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 );
|
b_players_ready = _are_all_players_in_time_bomb_volume( e_volume );
|
||||||
level._time_bomb.functionality_override = b_players_ready;
|
level._time_bomb.functionality_override = b_players_ready;
|
||||||
|
|
||||||
if ( b_players_ready )
|
if ( b_players_ready )
|
||||||
{
|
|
||||||
flag_set( "sq_tpo_players_in_position_for_time_warp" );
|
flag_set( "sq_tpo_players_in_position_for_time_warp" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
flag_clear( "sq_tpo_players_in_position_for_time_warp" );
|
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;
|
n_required_players = 4;
|
||||||
a_players = get_players();
|
a_players = get_players();
|
||||||
/#
|
/#
|
||||||
if ( getDvarInt( #"5256118F" ) > 0 )
|
if ( getdvarint( _hash_5256118F ) > 0 )
|
||||||
{
|
|
||||||
n_required_players = a_players.size;
|
n_required_players = a_players.size;
|
||||||
#/
|
#/
|
||||||
}
|
|
||||||
n_players_in_position = 0;
|
n_players_in_position = 0;
|
||||||
_a239 = a_players;
|
|
||||||
_k239 = getFirstArrayKey( _a239 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k239 ) )
|
|
||||||
{
|
{
|
||||||
player = _a239[ _k239 ];
|
|
||||||
if ( player istouching( e_volume ) )
|
if ( player istouching( e_volume ) )
|
||||||
{
|
|
||||||
n_players_in_position++;
|
n_players_in_position++;
|
||||||
}
|
}
|
||||||
_k239 = getNextArrayKey( _a239, _k239 );
|
|
||||||
}
|
|
||||||
b_all_in_valid_position = n_players_in_position == n_required_players;
|
b_all_in_valid_position = n_players_in_position == n_required_players;
|
||||||
return b_all_in_valid_position;
|
return b_all_in_valid_position;
|
||||||
}
|
}
|
||||||
@ -204,21 +212,17 @@ special_round_start()
|
|||||||
#/
|
#/
|
||||||
flag_set( "sq_tpo_special_round_active" );
|
flag_set( "sq_tpo_special_round_active" );
|
||||||
level.sq_tpo.times_searched = 0;
|
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" );
|
flag_clear( "time_bomb_detonation_enabled" );
|
||||||
fake_time_warp();
|
fake_time_warp();
|
||||||
level thread sndsidequestnoirmusic();
|
level thread sndsidequestnoirmusic();
|
||||||
make_super_zombies( 1 );
|
make_super_zombies( 1 );
|
||||||
level thread spawn_zombies_after_time_bomb_round_killed();
|
level thread spawn_zombies_after_time_bomb_round_killed();
|
||||||
a_players = get_players();
|
a_players = get_players();
|
||||||
_a279 = a_players;
|
|
||||||
_k279 = getFirstArrayKey( _a279 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k279 ) )
|
|
||||||
{
|
|
||||||
player = _a279[ _k279 ];
|
|
||||||
vsmgr_activate( "visionset", "cheat_bw", player );
|
vsmgr_activate( "visionset", "cheat_bw", player );
|
||||||
_k279 = getNextArrayKey( _a279, _k279 );
|
|
||||||
}
|
|
||||||
level setclientfield( "sq_tpo_special_round_active", 1 );
|
level setclientfield( "sq_tpo_special_round_active", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,6 +238,7 @@ make_super_zombies( b_toggle )
|
|||||||
n_round = level.round_number;
|
n_round = level.round_number;
|
||||||
level notify( "super_zombies_end" );
|
level notify( "super_zombies_end" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level.zombie_total = n_round;
|
level.zombie_total = n_round;
|
||||||
ai_calculate_health( n_round );
|
ai_calculate_health( n_round );
|
||||||
level.zombie_move_speed = n_round * level.zombie_vars["zombie_move_speed_multiplier"];
|
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 notify( "super_zombies_end" );
|
||||||
level endon( "super_zombies_end" );
|
level endon( "super_zombies_end" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill_any( "time_bomb_detonation_complete", "start_of_round" );
|
level waittill_any( "time_bomb_detonation_complete", "start_of_round" );
|
||||||
level.zombie_total = n_round;
|
level.zombie_total = n_round;
|
||||||
@ -260,11 +266,11 @@ spawn_zombies_after_time_bomb_round_killed()
|
|||||||
|
|
||||||
fake_time_warp()
|
fake_time_warp()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_destroy_hud_elem();
|
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_show_overlay();
|
||||||
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies();
|
maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies();
|
||||||
playsoundatposition( "zmb_timebomb_timechange_2d_sq", ( 0, 0, 0 ) );
|
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()
|
special_round_end()
|
||||||
@ -277,17 +283,15 @@ special_round_end()
|
|||||||
make_super_zombies( 0 );
|
make_super_zombies( 0 );
|
||||||
level._time_bomb.functionality_override = 0;
|
level._time_bomb.functionality_override = 0;
|
||||||
flag_set( "time_bomb_detonation_enabled" );
|
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();
|
a_players = get_players();
|
||||||
_a356 = a_players;
|
|
||||||
_k356 = getFirstArrayKey( _a356 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k356 ) )
|
|
||||||
{
|
{
|
||||||
player = _a356[ _k356 ];
|
|
||||||
vsmgr_deactivate( "visionset", "cheat_bw", player );
|
vsmgr_deactivate( "visionset", "cheat_bw", player );
|
||||||
player notify( "search_done" );
|
player notify( "search_done" );
|
||||||
_k356 = getNextArrayKey( _a356, _k356 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clean_up_special_round();
|
clean_up_special_round();
|
||||||
flag_clear( "sq_tpo_special_round_active" );
|
flag_clear( "sq_tpo_special_round_active" );
|
||||||
}
|
}
|
||||||
@ -295,30 +299,23 @@ special_round_end()
|
|||||||
clean_up_special_round()
|
clean_up_special_round()
|
||||||
{
|
{
|
||||||
a_models = getentarray( "sq_tpo_corpse_model", "targetname" );
|
a_models = getentarray( "sq_tpo_corpse_model", "targetname" );
|
||||||
_a370 = a_models;
|
|
||||||
_k370 = getFirstArrayKey( _a370 );
|
foreach ( model in a_models )
|
||||||
while ( isDefined( _k370 ) )
|
|
||||||
{
|
{
|
||||||
model = _a370[ _k370 ];
|
|
||||||
model _delete_unitrigger();
|
model _delete_unitrigger();
|
||||||
model delete();
|
model delete();
|
||||||
_k370 = getNextArrayKey( _a370, _k370 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_delete_unitrigger()
|
_delete_unitrigger()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.unitrigger ) )
|
if ( isdefined( self.unitrigger ) )
|
||||||
{
|
|
||||||
self.unitrigger.registered = 0;
|
self.unitrigger.registered = 0;
|
||||||
}
|
|
||||||
if ( isDefined( self.unitrigger.trigger ) )
|
if ( isdefined( self.unitrigger.trigger ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.unitrigger.trigger.stub ) )
|
if ( isdefined( self.unitrigger.trigger.stub ) )
|
||||||
{
|
self.unitrigger.trigger maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
|
||||||
self.unitrigger.trigger maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.trigger notify( "kill_trigger" );
|
self.trigger notify( "kill_trigger" );
|
||||||
@ -339,13 +336,15 @@ start_item_hunt_with_timeout( n_timeout )
|
|||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_give_piece()
|
debug_give_piece()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "sq_tpo_give_item" );
|
level waittill( "sq_tpo_give_item" );
|
||||||
|
|
||||||
get_players()[0] give_player_sq_tpo_switch();
|
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_models = get_randomized_corpse_list();
|
||||||
a_corpse_structs = array_randomize( getstructarray( "sq_tpo_corpse_spawn_location", "targetname" ) );
|
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] promote_to_corpse_model( a_corpse_models[i] );
|
||||||
a_corpse_structs[i] thread _debug_show_location();
|
a_corpse_structs[i] thread _debug_show_location();
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,20 +372,20 @@ _debug_show_location()
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
level endon( "sq_tpo_item_hunt_done" );
|
level endon( "sq_tpo_item_hunt_done" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( getDvarInt( #"5256118F" ) > 0 )
|
if ( getdvarint( _hash_5256118F ) > 0 )
|
||||||
{
|
debugstar( self.origin, 20, ( 0, 1, 0 ) );
|
||||||
debugstar( self.origin, 20, ( 0, 0, 0 ) );
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
promote_to_corpse_model( str_model )
|
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 = spawn( "script_model", v_spawn_point );
|
||||||
self.corpse_model.angles = self.angles;
|
self.corpse_model.angles = self.angles;
|
||||||
self.corpse_model setmodel( str_model );
|
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 );
|
self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("zm_buried_props");
|
||||||
|
|
||||||
_pose_corpse()
|
_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 )
|
switch ( self.script_noteworthy )
|
||||||
{
|
{
|
||||||
@ -448,8 +448,9 @@ _pose_corpse()
|
|||||||
#/
|
#/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.corpse_model useanimtree( -1 );
|
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 )
|
setup_unitrigger( str_hint, func_update )
|
||||||
@ -459,8 +460,8 @@ setup_unitrigger( str_hint, func_update )
|
|||||||
script_width = 0;
|
script_width = 0;
|
||||||
script_length = undefined;
|
script_length = undefined;
|
||||||
unitrigger_stub = spawnstruct();
|
unitrigger_stub = spawnstruct();
|
||||||
unitrigger_stub.origin = self.origin + vectorScale( ( 0, 0, 0 ), 10 );
|
unitrigger_stub.origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 );
|
||||||
unitrigger_stub.script_length = 13,5;
|
unitrigger_stub.script_length = 13.5;
|
||||||
unitrigger_stub.script_width = script_width;
|
unitrigger_stub.script_width = script_width;
|
||||||
unitrigger_stub.script_height = script_height;
|
unitrigger_stub.script_height = script_height;
|
||||||
unitrigger_stub.radius = radius;
|
unitrigger_stub.radius = radius;
|
||||||
@ -469,7 +470,7 @@ setup_unitrigger( str_hint, func_update )
|
|||||||
unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use";
|
unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use";
|
||||||
unitrigger_stub.require_look_at = 1;
|
unitrigger_stub.require_look_at = 1;
|
||||||
unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt;
|
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;
|
return unitrigger_stub;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,6 +490,7 @@ piecestub_update_prompt( player )
|
|||||||
unitrigger_killed()
|
unitrigger_killed()
|
||||||
{
|
{
|
||||||
self waittill( "kill_trigger" );
|
self waittill( "kill_trigger" );
|
||||||
|
|
||||||
self _delete_progress_bar();
|
self _delete_progress_bar();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,50 +498,52 @@ unitrigger_think()
|
|||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
self thread unitrigger_killed();
|
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 );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
b_progress_bar_done = 0;
|
b_progress_bar_done = 0;
|
||||||
n_frame_count = 0;
|
n_frame_count = 0;
|
||||||
|
|
||||||
while ( player usebuttonpressed() && !b_progress_bar_done )
|
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 = player createprimaryprogressbar();
|
||||||
self.progress_bar_text = player createprimaryprogressbartext();
|
self.progress_bar_text = player createprimaryprogressbartext();
|
||||||
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
|
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
|
||||||
self thread _kill_progress_bar();
|
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 );
|
self.progress_bar updatebar( n_progress_amount );
|
||||||
n_frame_count++;
|
n_frame_count++;
|
||||||
|
|
||||||
if ( n_progress_amount == 1 )
|
if ( n_progress_amount == 1 )
|
||||||
{
|
|
||||||
b_progress_bar_done = 1;
|
b_progress_bar_done = 1;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
self _delete_progress_bar();
|
self _delete_progress_bar();
|
||||||
if ( b_progress_bar_done )
|
asm_cond( b_progress_bar_done, loc_27AB );
|
||||||
{
|
|
||||||
b_trigger_used = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( b_progress_bar_done )
|
if ( b_progress_bar_done )
|
||||||
{
|
{
|
||||||
self.stub.hint_string = "";
|
self.stub.hint_string = "";
|
||||||
self sethintstring( self.stub.hint_string );
|
self sethintstring( self.stub.hint_string );
|
||||||
|
|
||||||
if ( item_is_on_corpse() )
|
if ( item_is_on_corpse() )
|
||||||
{
|
{
|
||||||
iprintlnbold( &"ZM_BURIED_SQ_FND" );
|
iprintlnbold( &"ZM_BURIED_SQ_FND" );
|
||||||
player give_player_sq_tpo_switch();
|
player give_player_sq_tpo_switch();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( &"ZM_BURIED_SQ_NFND" );
|
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()
|
item_is_on_corpse()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.sq_tpo.times_searched ) )
|
if ( !isdefined( level.sq_tpo.times_searched ) )
|
||||||
{
|
|
||||||
level.sq_tpo.times_searched = 0;
|
level.sq_tpo.times_searched = 0;
|
||||||
}
|
|
||||||
switch ( level.sq_tpo.times_searched )
|
switch ( level.sq_tpo.times_searched )
|
||||||
{
|
{
|
||||||
case 0:
|
case "0":
|
||||||
n_chance = 1;
|
n_chance = 1;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case "1":
|
||||||
n_chance = 15;
|
n_chance = 15;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case "2":
|
||||||
n_chance = 33;
|
n_chance = 33;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case "3":
|
||||||
n_chance = 100;
|
n_chance = 100;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( randomint( 100 ) > ( 100 - n_chance ) )
|
|
||||||
{
|
b_found_item = randomint( 100 ) > 100 - n_chance && !flag( "sq_tpo_found_item" );
|
||||||
b_found_item = !flag( "sq_tpo_found_item" );
|
|
||||||
}
|
|
||||||
level.sq_tpo.times_searched++;
|
level.sq_tpo.times_searched++;
|
||||||
return b_found_item;
|
return b_found_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
_delete_progress_bar()
|
_delete_progress_bar()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.progress_bar ) )
|
if ( isdefined( self.progress_bar ) )
|
||||||
{
|
{
|
||||||
self.progress_bar destroyelem();
|
self.progress_bar destroyelem();
|
||||||
self.progress_bar_text destroyelem();
|
self.progress_bar_text destroyelem();
|
||||||
@ -593,13 +594,15 @@ _kill_progress_bar()
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "search_done" );
|
self waittill( "search_done" );
|
||||||
|
|
||||||
self _delete_progress_bar();
|
self _delete_progress_bar();
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_buildable_switch()
|
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_grab = level.str_buildables_grab_part;
|
||||||
s_switch_piece.hint_swap = level.str_buildables_swap_part;
|
s_switch_piece.hint_swap = level.str_buildables_swap_part;
|
||||||
s_switch_piece manage_multiple_pieces( 1 );
|
s_switch_piece manage_multiple_pieces( 1 );
|
||||||
@ -610,12 +613,12 @@ setup_buildable_switch()
|
|||||||
s_switch.triggerthink = ::triggerthink_switch;
|
s_switch.triggerthink = ::triggerthink_switch;
|
||||||
s_switch.onuseplantobject = ::onuseplantobject_switch;
|
s_switch.onuseplantobject = ::onuseplantobject_switch;
|
||||||
include_buildable( s_switch );
|
include_buildable( s_switch );
|
||||||
while ( !isDefined( level.sq_tpo_unitrig ) )
|
|
||||||
{
|
while ( !isdefined( level.sq_tpo_unitrig ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.sq_tpo_unitrig.realorigin = level.sq_tpo_unitrig.origin;
|
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 )
|
onuseplantobject_switch( player )
|
||||||
@ -625,24 +628,25 @@ onuseplantobject_switch( player )
|
|||||||
|
|
||||||
onpickup_switch( player )
|
onpickup_switch( player )
|
||||||
{
|
{
|
||||||
maps/mp/zm_buried_buildables::onpickup_common( player );
|
maps\mp\zm_buried_buildables::onpickup_common( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
ondrop_switch( player )
|
ondrop_switch( player )
|
||||||
{
|
{
|
||||||
maps/mp/zm_buried_buildables::ondrop_common( player );
|
maps\mp\zm_buried_buildables::ondrop_common( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
onspawn_switch( player )
|
onspawn_switch( player )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
triggerthink_switch()
|
triggerthink_switch()
|
||||||
{
|
{
|
||||||
if ( isDefined( getent( "guillotine_trigger", "targetname" ) ) )
|
if ( isdefined( getent( "guillotine_trigger", "targetname" ) ) )
|
||||||
{
|
{
|
||||||
str_trigger_generator_name = "guillotine_trigger";
|
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.ignore_open_sesame = 1;
|
||||||
level.sq_tpo_unitrig.buildablestub_reject_func = ::guillotine_trigger_reject_func;
|
level.sq_tpo_unitrig.buildablestub_reject_func = ::guillotine_trigger_reject_func;
|
||||||
}
|
}
|
||||||
@ -651,25 +655,24 @@ triggerthink_switch()
|
|||||||
guillotine_trigger_reject_func( player )
|
guillotine_trigger_reject_func( player )
|
||||||
{
|
{
|
||||||
b_should_reject = 0;
|
b_should_reject = 0;
|
||||||
|
|
||||||
if ( flag( "sq_tpo_special_round_active" ) )
|
if ( flag( "sq_tpo_special_round_active" ) )
|
||||||
{
|
|
||||||
b_should_reject = 1;
|
b_should_reject = 1;
|
||||||
}
|
|
||||||
return b_should_reject;
|
return b_should_reject;
|
||||||
}
|
}
|
||||||
|
|
||||||
time_bomb_saves_wisp_state()
|
time_bomb_saves_wisp_state()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.sq_data ) )
|
if ( !isdefined( self.sq_data ) )
|
||||||
{
|
|
||||||
self.sq_data = spawnstruct();
|
self.sq_data = spawnstruct();
|
||||||
}
|
|
||||||
self.sq_data.wisp_stage_complete = flag( "sq_wisp_success" );
|
self.sq_data.wisp_stage_complete = flag( "sq_wisp_success" );
|
||||||
}
|
}
|
||||||
|
|
||||||
time_bomb_restores_wisp_state()
|
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_success" );
|
||||||
flag_clear( "sq_wisp_failed" );
|
flag_clear( "sq_wisp_failed" );
|
||||||
@ -680,14 +683,15 @@ time_bomb_restores_wisp_state()
|
|||||||
sndsidequestnoirmusic()
|
sndsidequestnoirmusic()
|
||||||
{
|
{
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
level setclientfield( "mus_noir_snapshot_loop", 1 );
|
level setclientfield( "mus_noir_snapshot_loop", 1 );
|
||||||
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
ent = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
ent playloopsound( "mus_sidequest_noir" );
|
ent playloopsound( "mus_sidequest_noir" );
|
||||||
|
|
||||||
level waittill( "sndEndNoirMusic" );
|
level waittill( "sndEndNoirMusic" );
|
||||||
|
|
||||||
level setclientfield( "mus_noir_snapshot_loop", 0 );
|
level setclientfield( "mus_noir_snapshot_loop", 0 );
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
ent stoploopsound( 2 );
|
ent stoploopsound( 2 );
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/zombies/_zm_sidequests;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -12,15 +14,13 @@ init()
|
|||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
|
a_signs = getentarray( "sq_tunnel_sign", "targetname" );
|
||||||
_a18 = a_signs;
|
|
||||||
_k18 = getFirstArrayKey( _a18 );
|
foreach ( m_sign in a_signs )
|
||||||
while ( isDefined( _k18 ) )
|
|
||||||
{
|
{
|
||||||
m_sign = _a18[ _k18 ];
|
|
||||||
m_sign setcandamage( 1 );
|
m_sign setcandamage( 1 );
|
||||||
m_sign thread ts_sign_damage_watch();
|
m_sign thread ts_sign_damage_watch();
|
||||||
_k18 = getNextArrayKey( _a18, _k18 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level._cur_stage_name = "ts";
|
level._cur_stage_name = "ts";
|
||||||
clientnotify( "ts" );
|
clientnotify( "ts" );
|
||||||
}
|
}
|
||||||
@ -31,37 +31,39 @@ stage_logic()
|
|||||||
iprintlnbold( "TS Started" );
|
iprintlnbold( "TS Started" );
|
||||||
#/
|
#/
|
||||||
level waittill( "sq_sign_damaged" );
|
level waittill( "sq_sign_damaged" );
|
||||||
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage( success )
|
exit_stage( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ts_sign_damage_watch()
|
ts_sign_damage_watch()
|
||||||
{
|
{
|
||||||
level endon( "sq_sign_damaged" );
|
level endon( "sq_sign_damaged" );
|
||||||
self ts_sign_deactivate();
|
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 );
|
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" ) )
|
if ( flag( "sq_ts_quicktest" ) )
|
||||||
{
|
{
|
||||||
level.m_sq_start_sign = self;
|
level.m_sq_start_sign = self;
|
||||||
level.e_sq_sign_attacker = e_attacker;
|
level.e_sq_sign_attacker = e_attacker;
|
||||||
level notify( "sq_sign_damaged" );
|
level notify( "sq_sign_damaged" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
|
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
|
||||||
{
|
{
|
||||||
if ( self.ts_sign_activated )
|
if ( self.ts_sign_activated )
|
||||||
{
|
|
||||||
self thread ts_sign_deactivate();
|
self thread ts_sign_deactivate();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self thread ts_sign_activate();
|
self thread ts_sign_activate();
|
||||||
}
|
|
||||||
ts_sign_check_all_activated( e_attacker, self );
|
ts_sign_check_all_activated( e_attacker, self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -70,19 +72,21 @@ ts_sign_damage_watch()
|
|||||||
ts_sign_activate()
|
ts_sign_activate()
|
||||||
{
|
{
|
||||||
self.ts_sign_activated = 1;
|
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;
|
v_offset = vectornormalize( v_forward ) * 2;
|
||||||
self.fx_ent = spawn( "script_model", ( self.origin - vectorScale( ( 0, 0, 1 ), 20 ) ) + v_offset );
|
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.angles = anglestoforward( self.angles );
|
||||||
self.fx_ent setmodel( "tag_origin" );
|
self.fx_ent setmodel( "tag_origin" );
|
||||||
self.fx_ent playsound( "zmb_sq_wisp_spawn" );
|
self.fx_ent playsound( "zmb_sq_wisp_spawn" );
|
||||||
self.fx_ent playloopsound( "zmb_sq_wisp_wall_loop" );
|
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" );
|
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()
|
ts_sign_deactivate()
|
||||||
{
|
{
|
||||||
self.ts_sign_activated = 0;
|
self.ts_sign_activated = 0;
|
||||||
if ( isDefined( self.fx_ent ) )
|
|
||||||
|
if ( isdefined( self.fx_ent ) )
|
||||||
{
|
{
|
||||||
self.fx_ent stoploopsound( 2 );
|
self.fx_ent stoploopsound( 2 );
|
||||||
self.fx_ent delete();
|
self.fx_ent delete();
|
||||||
@ -103,25 +108,21 @@ ts_sign_check_all_activated( e_attacker, m_last_touched )
|
|||||||
a_signs_active = [];
|
a_signs_active = [];
|
||||||
is_max_complete = 1;
|
is_max_complete = 1;
|
||||||
is_ric_complete = 1;
|
is_ric_complete = 1;
|
||||||
_a125 = a_signs;
|
|
||||||
_k125 = getFirstArrayKey( _a125 );
|
foreach ( m_sign in a_signs )
|
||||||
while ( isDefined( _k125 ) )
|
|
||||||
{
|
{
|
||||||
m_sign = _a125[ _k125 ];
|
|
||||||
if ( m_sign.ts_sign_activated )
|
if ( m_sign.ts_sign_activated )
|
||||||
{
|
{
|
||||||
a_signs_active[a_signs_active.size] = m_sign;
|
a_signs_active[a_signs_active.size] = m_sign;
|
||||||
|
|
||||||
if ( !is_true( m_sign.is_max_sign ) )
|
if ( !is_true( m_sign.is_max_sign ) )
|
||||||
{
|
|
||||||
is_max_complete = 0;
|
is_max_complete = 0;
|
||||||
}
|
|
||||||
if ( !is_true( m_sign.is_ric_sign ) )
|
if ( !is_true( m_sign.is_ric_sign ) )
|
||||||
{
|
|
||||||
is_ric_complete = 0;
|
is_ric_complete = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k125 = getNextArrayKey( _a125, _k125 );
|
|
||||||
}
|
|
||||||
if ( a_signs_active.size == 3 )
|
if ( a_signs_active.size == 3 )
|
||||||
{
|
{
|
||||||
if ( is_max_complete || is_ric_complete )
|
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 )
|
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" )
|
if ( str_weapon == "knife_ballistic_bowie_zm" || str_weapon == "knife_ballistic_bowie_upgraded_zm" || str_weapon == "bowie_knife_zm" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ts_is_galvaknuckles( str_weapon )
|
ts_is_galvaknuckles( str_weapon )
|
||||||
{
|
{
|
||||||
if ( str_weapon == "tazer_knuckles_zm" )
|
if ( str_weapon == "tazer_knuckles_zm" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
#include maps/mp/zombies/_zm_magicbox;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
|
||||||
precache()
|
precache()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "processing" );
|
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\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
zm_treasure_chest_init();
|
zm_treasure_chest_init();
|
||||||
}
|
}
|
||||||
@ -22,5 +25,5 @@ zm_treasure_chest_init()
|
|||||||
chest1 = getstruct( "start_chest", "script_noteworthy" );
|
chest1 = getstruct( "start_chest", "script_noteworthy" );
|
||||||
level.chests = [];
|
level.chests = [];
|
||||||
level.chests[level.chests.size] = chest1;
|
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
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/zcleansed;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_visionset_mgr;
|
#include common_scripts\utility;
|
||||||
#include character/c_zom_zombie_buried_saloongirl_mp;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zm_buried_gamemodes;
|
#include maps\mp\zm_buried_gamemodes;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include character\c_zom_zombie_buried_saloongirl_mp;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\_visionset_mgr;
|
||||||
#include maps/mp/_utility;
|
#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( "zm_collision_buried_street_turned" );
|
||||||
precachemodel( "p6_zm_bu_buildable_bench_tarp" );
|
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" );
|
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" );
|
flag_init( "sloth_blocker_towneast" );
|
||||||
level.custom_zombie_player_loadout = ::custom_zombie_player_loadout;
|
level.custom_zombie_player_loadout = ::custom_zombie_player_loadout;
|
||||||
getspawnpoints();
|
getspawnpoints();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" );
|
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
|
||||||
generatebuildabletarps();
|
generatebuildabletarps();
|
||||||
deletechalktriggers();
|
deletechalktriggers();
|
||||||
deleteslothbarricade( "candystore_alley" );
|
deleteslothbarricade( "candystore_alley" );
|
||||||
@ -30,16 +31,18 @@ main() //checked matches cerberus output
|
|||||||
deletebuyabledebris( 1 );
|
deletebuyabledebris( 1 );
|
||||||
powerswitchstate( 1 );
|
powerswitchstate( 1 );
|
||||||
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
|
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
|
||||||
|
|
||||||
if ( level.cleansed_loadout )
|
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;
|
level.cleansed_zombie_round = 5;
|
||||||
}
|
}
|
||||||
else
|
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;
|
level.cleansed_zombie_round = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnmapcollision( "zm_collision_buried_street_turned" );
|
spawnmapcollision( "zm_collision_buried_street_turned" );
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
@ -47,13 +50,13 @@ main() //checked matches cerberus output
|
|||||||
clientnotify( "pwr" );
|
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" );
|
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_spawners = getentarray( "game_mode_spawners", "targetname" );
|
||||||
level._turned_zombie_spawnpoints = getstructarray( "street_turned_zombie_spawn", "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" );
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_buried;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_buried;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_ai_ghost;
|
||||||
|
|
||||||
ghost_init_start()
|
ghost_init_start()
|
||||||
{
|
{
|
||||||
@ -20,10 +22,12 @@ ghost_init_end()
|
|||||||
|
|
||||||
prespawn_start()
|
prespawn_start()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prespawn_end()
|
prespawn_end()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ghost_round_start()
|
ghost_round_start()
|
||||||
@ -39,34 +43,29 @@ ghost_round_end()
|
|||||||
is_player_in_ghost_zone( player )
|
is_player_in_ghost_zone( player )
|
||||||
{
|
{
|
||||||
result = 0;
|
result = 0;
|
||||||
if ( !isDefined( level.ghost_zone_overrides ) )
|
|
||||||
{
|
if ( !isdefined( level.ghost_zone_overrides ) )
|
||||||
level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" );
|
level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" );
|
||||||
}
|
|
||||||
is_player_in_override_trigger = 0;
|
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;
|
foreach ( trigger in level.ghost_zone_overrides )
|
||||||
_k86 = getFirstArrayKey( _a86 );
|
|
||||||
while ( isDefined( _k86 ) )
|
|
||||||
{
|
{
|
||||||
trigger = _a86[ _k86 ];
|
|
||||||
if ( player istouching( trigger ) )
|
if ( player istouching( trigger ) )
|
||||||
{
|
{
|
||||||
is_player_in_override_trigger = 1;
|
is_player_in_override_trigger = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k86 = getNextArrayKey( _a86, _k86 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
curr_zone = player get_current_zone();
|
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;
|
result = 1;
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,13 +77,13 @@ ghost_bad_path_init()
|
|||||||
level.bad_zones[0].adjacent = [];
|
level.bad_zones[0].adjacent = [];
|
||||||
level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
|
level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
|
||||||
level.bad_zones[0].adjacent[1] = "zone_tunnels_north2";
|
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] = spawnstruct();
|
||||||
level.bad_zones[1].name = "zone_underground_courthouse2";
|
level.bad_zones[1].name = "zone_underground_courthouse2";
|
||||||
level.bad_zones[1].adjacent = [];
|
level.bad_zones[1].adjacent = [];
|
||||||
level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
|
level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
|
||||||
level.bad_zones[1].adjacent[1] = "zone_tunnels_north2";
|
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] = spawnstruct();
|
||||||
level.bad_zones[2].name = "zone_tunnels_north2";
|
level.bad_zones[2].name = "zone_tunnels_north2";
|
||||||
level.bad_zones[2].adjacent = [];
|
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].adjacent[1] = "zone_underground_courthouse";
|
||||||
level.bad_zones[2].flag = "tunnels2courthouse";
|
level.bad_zones[2].flag = "tunnels2courthouse";
|
||||||
level.bad_zones[2].flag_adjacent = "zone_tunnels_north";
|
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] = spawnstruct();
|
||||||
level.bad_zones[3].name = "zone_tunnels_north";
|
level.bad_zones[3].name = "zone_tunnels_north";
|
||||||
level.bad_zones[3].adjacent = [];
|
level.bad_zones[3].adjacent = [];
|
||||||
level.bad_zones[3].adjacent[0] = "zone_tunnels_center";
|
level.bad_zones[3].adjacent[0] = "zone_tunnels_center";
|
||||||
level.bad_zones[3].flag = "tunnels2courthouse";
|
level.bad_zones[3].flag = "tunnels2courthouse";
|
||||||
level.bad_zones[3].flag_adjacent = "zone_tunnels_north2";
|
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] = spawnstruct();
|
||||||
level.bad_zones[4].name = "zone_tunnels_center";
|
level.bad_zones[4].name = "zone_tunnels_center";
|
||||||
level.bad_zones[4].adjacent = [];
|
level.bad_zones[4].adjacent = [];
|
||||||
level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
|
level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
|
||||||
level.bad_zones[4].adjacent[1] = "zone_tunnels_south";
|
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] = spawnstruct();
|
||||||
level.bad_zones[5].name = "zone_tunnels_south";
|
level.bad_zones[5].name = "zone_tunnels_south";
|
||||||
level.bad_zones[5].adjacent = [];
|
level.bad_zones[5].adjacent = [];
|
||||||
level.bad_zones[5].adjacent[0] = "zone_tunnels_center";
|
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()
|
ghost_bad_path_failsafe()
|
||||||
@ -119,126 +118,108 @@ ghost_bad_path_failsafe()
|
|||||||
self notify( "stop_bad_path_failsafe" );
|
self notify( "stop_bad_path_failsafe" );
|
||||||
self endon( "stop_bad_path_failsafe" );
|
self endon( "stop_bad_path_failsafe" );
|
||||||
self thread non_ghost_round_failsafe();
|
self thread non_ghost_round_failsafe();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player = self.favoriteenemy;
|
player = self.favoriteenemy;
|
||||||
if ( isDefined( player ) )
|
|
||||||
|
if ( isdefined( player ) )
|
||||||
{
|
{
|
||||||
in_bad_zone = 0;
|
in_bad_zone = 0;
|
||||||
_a174 = level.bad_zones;
|
|
||||||
_k174 = getFirstArrayKey( _a174 );
|
foreach ( zone in level.bad_zones )
|
||||||
while ( isDefined( _k174 ) )
|
|
||||||
{
|
{
|
||||||
zone = _a174[ _k174 ];
|
if ( isdefined( zone.ignore_func ) )
|
||||||
if ( isDefined( zone.ignore_func ) )
|
|
||||||
{
|
{
|
||||||
if ( level [[ zone.ignore_func ]]() )
|
if ( level [[ zone.ignore_func ]]() )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if ( player 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 ) )
|
|
||||||
{
|
{
|
||||||
|
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.name ) )
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else ghost_is_adjacent = 0;
|
ghost_is_adjacent = 0;
|
||||||
_a192 = zone.adjacent;
|
|
||||||
_k192 = getFirstArrayKey( _a192 );
|
foreach ( adjacent in zone.adjacent )
|
||||||
while ( isDefined( _k192 ) )
|
|
||||||
{
|
{
|
||||||
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;
|
ghost_is_adjacent = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k192 = getNextArrayKey( _a192, _k192 );
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( isDefined( zone.flag ) && flag( zone.flag ) )
|
if ( isdefined( zone.flag ) && flag( zone.flag ) )
|
||||||
{
|
|
||||||
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
|
|
||||||
{
|
{
|
||||||
|
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
|
||||||
ghost_is_adjacent = 1;
|
ghost_is_adjacent = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( !ghost_is_adjacent )
|
if ( !ghost_is_adjacent )
|
||||||
{
|
{
|
||||||
in_bad_zone = 1;
|
in_bad_zone = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k174 = getNextArrayKey( _a174, _k174 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( in_bad_zone )
|
if ( in_bad_zone )
|
||||||
{
|
{
|
||||||
nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" );
|
nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" );
|
||||||
|
|
||||||
if ( nodes.size > 0 )
|
if ( nodes.size > 0 )
|
||||||
{
|
|
||||||
node = nodes[randomint( nodes.size )];
|
node = nodes[randomint( nodes.size )];
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
node = getnearestnode( player.origin );
|
node = getnearestnode( player.origin );
|
||||||
}
|
|
||||||
if ( isDefined( node ) )
|
if ( isdefined( node ) )
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( !is_true( self.is_traversing ) )
|
if ( !is_true( self.is_traversing ) )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self forceteleport( node.origin, ( 0, 0, 0 ) );
|
self forceteleport( node.origin, ( 0, 0, 0 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait 0,25;
|
|
||||||
|
wait 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
non_ghost_round_failsafe()
|
non_ghost_round_failsafe()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "bad_path" );
|
self waittill( "bad_path" );
|
||||||
|
|
||||||
if ( self.state == "runaway_update" )
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait 0,25;
|
|
||||||
|
wait 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_traversal_clip_around_mansion()
|
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;
|
foreach ( door_clip in level.ghost_zone_door_clips )
|
||||||
_k276 = getFirstArrayKey( _a276 );
|
|
||||||
while ( isDefined( _k276 ) )
|
|
||||||
{
|
|
||||||
door_clip = _a276[ _k276 ];
|
|
||||||
door_clip notsolid();
|
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 )
|
can_use_mansion_back_flying_out_node( zone_name )
|
||||||
{
|
{
|
||||||
if ( zone_name == "zone_mansion_backyard" )
|
if ( zone_name == "zone_mansion_backyard" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( zone_name == "zone_maze" )
|
if ( zone_name == "zone_maze" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( zone_name == "zone_maze_staircase" )
|
if ( zone_name == "zone_maze_staircase" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ghost_teleport_to_playable_area()
|
ghost_teleport_to_playable_area()
|
||||||
{
|
{
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
|
|
||||||
if ( level.intermission )
|
if ( level.intermission )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level endon( "ghost_round_end" );
|
level endon( "ghost_round_end" );
|
||||||
monitor_time = 0;
|
monitor_time = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
ghosts = get_current_ghosts();
|
ghosts = get_current_ghosts();
|
||||||
_a332 = ghosts;
|
|
||||||
_k332 = getFirstArrayKey( _a332 );
|
foreach ( ghost in ghosts )
|
||||||
while ( isDefined( _k332 ) )
|
|
||||||
{
|
{
|
||||||
ghost = _a332[ _k332 ];
|
if ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
|
||||||
while ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
|
|
||||||
{
|
{
|
||||||
_a336 = level.ghost_bad_spawn_zones;
|
foreach ( bad_spawn_zone_name in level.ghost_bad_spawn_zones )
|
||||||
_k336 = getFirstArrayKey( _a336 );
|
|
||||||
while ( isDefined( _k336 ) )
|
|
||||||
{
|
{
|
||||||
bad_spawn_zone_name = _a336[ _k336 ];
|
if ( ghost maps\mp\zombies\_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
|
||||||
if ( ghost maps/mp/zombies/_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
|
|
||||||
{
|
{
|
||||||
if ( is_player_valid( ghost.favoriteenemy ) )
|
if ( is_player_valid( ghost.favoriteenemy ) )
|
||||||
{
|
{
|
||||||
destination_node = ghost maps/mp/zombies/_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy );
|
destination_node = ghost maps\mp\zombies\_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy );
|
||||||
if ( isDefined( destination_node ) )
|
|
||||||
|
if ( isdefined( destination_node ) )
|
||||||
{
|
{
|
||||||
ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) );
|
ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) );
|
||||||
self.is_teleported_in_bad_zone = 1;
|
self.is_teleported_in_bad_zone = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !is_true( self.is_teleported_in_bad_zone ) )
|
if ( !is_true( self.is_teleported_in_bad_zone ) )
|
||||||
{
|
{
|
||||||
if ( can_use_mansion_back_flying_out_node( bad_spawn_zone_name ) )
|
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 ) );
|
ghost forceteleport( level.ghost_back_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
ghost forceteleport( level.ghost_front_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
|
ghost forceteleport( level.ghost_front_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
|
||||||
}
|
|
||||||
self.is_teleported_in_bad_zone = 1;
|
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 )
|
if ( monitor_time > level.ghost_round_start_monitor_time )
|
||||||
{
|
break;
|
||||||
return;
|
|
||||||
}
|
wait 0.1;
|
||||||
else
|
|
||||||
{
|
|
||||||
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/zm_run;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_ai_sloth;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_ai_sloth_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_ai_sloth_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_ai_sloth;
|
||||||
|
#include maps\mp\animscripts\zm_run;
|
||||||
|
#include maps\mp\animscripts\zm_shared;
|
||||||
|
|
||||||
crawler_condition()
|
crawler_condition()
|
||||||
{
|
{
|
||||||
zombies = get_round_enemy_array();
|
zombies = get_round_enemy_array();
|
||||||
i = 0;
|
|
||||||
while ( i < zombies.size )
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
{
|
{
|
||||||
zombie = zombies[i];
|
zombie = zombies[i];
|
||||||
|
|
||||||
if ( !is_true( zombie.has_legs ) )
|
if ( !is_true( zombie.has_legs ) )
|
||||||
{
|
{
|
||||||
dist = distancesquared( self.origin, zombie.origin );
|
dist = distancesquared( self.origin, zombie.origin );
|
||||||
|
|
||||||
if ( dist < 32400 )
|
if ( dist < 32400 )
|
||||||
{
|
{
|
||||||
self.crawler = zombie;
|
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 ]]();
|
self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]]();
|
||||||
}
|
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
crawler_action()
|
crawler_action()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "stop_action" );
|
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_exit_side();
|
||||||
self thread watch_sloth_on_same_side();
|
self thread watch_sloth_on_same_side();
|
||||||
self thread crawler_watch_death();
|
self thread crawler_watch_death();
|
||||||
@ -43,44 +47,46 @@ crawler_action()
|
|||||||
anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 );
|
anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 );
|
||||||
sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id );
|
sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id );
|
||||||
sloth_offset = distance( sloth_goal, self.crawler.origin );
|
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 );
|
raised_start_pos = ( start_pos[0], start_pos[1], start_pos[2] + sloth_offset );
|
||||||
ground_pos = groundpos( raised_start_pos );
|
ground_pos = groundpos( raised_start_pos );
|
||||||
height_check = abs( self.crawler.origin[2] - ground_pos[2] );
|
height_check = abs( self.crawler.origin[2] - ground_pos[2] );
|
||||||
|
|
||||||
if ( height_check > 8 )
|
if ( height_check > 8 )
|
||||||
{
|
|
||||||
self setanimstatefromasd( "zm_player_idle" );
|
self setanimstatefromasd( "zm_player_idle" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self maps/mp/animscripts/zm_run::needsupdate();
|
self maps\mp\animscripts\zm_run::needsupdate();
|
||||||
self setgoalpos( start_pos );
|
self setgoalpos( start_pos );
|
||||||
}
|
}
|
||||||
if ( !isDefined( self.crawler ) || self.crawler.health <= 0 )
|
|
||||||
|
if ( !isdefined( self.crawler ) || self.crawler.health <= 0 )
|
||||||
{
|
{
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = distancesquared( self.origin, start_pos );
|
dist = distancesquared( self.origin, start_pos );
|
||||||
z_dist = abs( self.origin[2] - start_pos[2] );
|
z_dist = abs( self.origin[2] - start_pos[2] );
|
||||||
|
|
||||||
if ( dist < 1024 && z_dist < 12 )
|
if ( dist < 1024 && z_dist < 12 )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self orientmode( "face angle", self.crawler.angles[1] );
|
self orientmode( "face angle", self.crawler.angles[1] );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
self.crawler.is_inert = 1;
|
self.crawler.is_inert = 1;
|
||||||
self.crawler.ignoreall = 1;
|
self.crawler.ignoreall = 1;
|
||||||
self.crawler notify( "stop_find_flesh" );
|
self.crawler notify( "stop_find_flesh" );
|
||||||
@ -91,7 +97,7 @@ crawler_action()
|
|||||||
crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" );
|
crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" );
|
||||||
self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup );
|
self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup );
|
||||||
self.crawler animscripted( self.anchor.origin, self.anchor.angles, crawler_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.carrying_crawler = 1;
|
||||||
self.crawler.guts_explosion = 1;
|
self.crawler.guts_explosion = 1;
|
||||||
self.pre_traverse = ::crawler_pre_traverse;
|
self.pre_traverse = ::crawler_pre_traverse;
|
||||||
@ -102,24 +108,25 @@ crawler_action()
|
|||||||
self set_zombie_run_cycle( "walk_crawlerhold" );
|
self set_zombie_run_cycle( "walk_crawlerhold" );
|
||||||
self.locomotion = "walk_crawlerhold";
|
self.locomotion = "walk_crawlerhold";
|
||||||
self.setanimstatefromspeed = ::slothanimstatefromspeed;
|
self.setanimstatefromspeed = ::slothanimstatefromspeed;
|
||||||
self.crawler_end = getTime() + 5000;
|
self.crawler_end = gettime() + 5000;
|
||||||
self.crawler.actor_damage_func = ::crawler_damage_func;
|
self.crawler.actor_damage_func = ::crawler_damage_func;
|
||||||
self.sloth_damage_func = ::crawler_damage_func;
|
self.sloth_damage_func = ::crawler_damage_func;
|
||||||
roam = array_randomize( level.roam_points );
|
roam = array_randomize( level.roam_points );
|
||||||
roam_index = 0;
|
roam_index = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( is_true( self.release_crawler ) )
|
if ( is_true( self.release_crawler ) )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else
|
if ( self sloth_is_traversing() )
|
||||||
{
|
{
|
||||||
while ( self sloth_is_traversing() )
|
wait 0.1;
|
||||||
{
|
continue;
|
||||||
wait 0,1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = distancesquared( self.origin, self.candy_player.origin );
|
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 ) )
|
if ( dist < 25600 || is_true( self.candy_player.is_in_ghost_zone ) && is_true( self.on_exit_side ) )
|
||||||
{
|
{
|
||||||
self.check_turn = 1;
|
self.check_turn = 1;
|
||||||
@ -133,47 +140,48 @@ crawler_action()
|
|||||||
{
|
{
|
||||||
self stopanimscripted();
|
self stopanimscripted();
|
||||||
self.crawler stopanimscripted();
|
self.crawler stopanimscripted();
|
||||||
|
|
||||||
if ( should_ignore_candybooze( self.candy_player ) )
|
if ( should_ignore_candybooze( self.candy_player ) )
|
||||||
{
|
{
|
||||||
dist = distancesquared( self.origin, roam[roam_index].origin );
|
dist = distancesquared( self.origin, roam[roam_index].origin );
|
||||||
|
|
||||||
if ( dist < 1024 )
|
if ( dist < 1024 )
|
||||||
{
|
{
|
||||||
roam_index++;
|
roam_index++;
|
||||||
|
|
||||||
if ( roam_index >= roam.size )
|
if ( roam_index >= roam.size )
|
||||||
{
|
|
||||||
roam_index = 0;
|
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 );
|
self setgoalpos( roam[roam_index].origin );
|
||||||
}
|
}
|
||||||
else
|
else if ( !self sloth_move_to_same_side() )
|
||||||
{
|
|
||||||
if ( !self sloth_move_to_same_side() )
|
|
||||||
{
|
{
|
||||||
if ( is_true( self.check_turn ) )
|
if ( is_true( self.check_turn ) )
|
||||||
{
|
{
|
||||||
self.check_turn = 0;
|
self.check_turn = 0;
|
||||||
|
|
||||||
if ( self sloth_is_same_zone( self.candy_player ) )
|
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 setgoalpos( self.candy_player.origin );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self crawler_update_locomotion();
|
self crawler_update_locomotion();
|
||||||
}
|
}
|
||||||
wait 0,1;
|
|
||||||
}
|
wait 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.setanimstatefromspeed = undefined;
|
self.setanimstatefromspeed = undefined;
|
||||||
self.crawler unlink();
|
self.crawler unlink();
|
||||||
sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" );
|
sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" );
|
||||||
crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" );
|
crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" );
|
||||||
self animscripted( self.origin, self.angles, sloth_putdown );
|
self animscripted( self.origin, self.angles, sloth_putdown );
|
||||||
self.crawler animscripted( self.origin, self.angles, crawler_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.carrying_crawler = 0;
|
||||||
self.crawler.deathfunction = ::crawler_death;
|
self.crawler.deathfunction = ::crawler_death;
|
||||||
sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" );
|
sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" );
|
||||||
@ -181,14 +189,16 @@ crawler_action()
|
|||||||
self notify( "stop_crawler_watch" );
|
self notify( "stop_crawler_watch" );
|
||||||
self animscripted( self.origin, self.angles, sloth_kill );
|
self animscripted( self.origin, self.angles, sloth_kill );
|
||||||
self.crawler animscripted( self.origin, self.angles, crawler_kill );
|
self.crawler animscripted( self.origin, self.angles, crawler_kill );
|
||||||
maps/mp/animscripts/zm_shared::donotetracks( "sloth_kill_crawler_anim" );
|
maps\mp\animscripts\zm_shared::donotetracks( "sloth_kill_crawler_anim" );
|
||||||
if ( isDefined( self.crawler ) )
|
|
||||||
|
if ( isdefined( self.crawler ) )
|
||||||
{
|
{
|
||||||
self.crawler dodamage( self.crawler.health * 10, self.crawler.origin );
|
self.crawler dodamage( self.crawler.health * 10, self.crawler.origin );
|
||||||
self.crawler playsound( "zmb_ai_sloth_attack_impact" );
|
self.crawler playsound( "zmb_ai_sloth_attack_impact" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.sloth_damage_func = 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.crawler = undefined;
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
}
|
}
|
||||||
@ -196,134 +206,114 @@ crawler_action()
|
|||||||
watch_sloth_on_exit_side()
|
watch_sloth_on_exit_side()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( is_true( self.context_done ) )
|
if ( is_true( self.context_done ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.on_exit_side = 0;
|
self.on_exit_side = 0;
|
||||||
player = self.candy_player;
|
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;
|
name = player.current_ghost_room_name;
|
||||||
if ( isDefined( name ) )
|
|
||||||
|
if ( isdefined( name ) )
|
||||||
{
|
{
|
||||||
room = level.ghost_rooms[name];
|
room = level.ghost_rooms[name];
|
||||||
|
|
||||||
if ( is_true( room.to_maze ) )
|
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;
|
self.on_exit_side = 1;
|
||||||
}
|
}
|
||||||
break;
|
else if ( is_true( room.from_maze ) )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( is_true( room.from_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;
|
self.on_exit_side = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
wait 0.25;
|
||||||
wait 0,25;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_sloth_on_same_side()
|
watch_sloth_on_same_side()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( is_true( self.context_done ) )
|
if ( is_true( self.context_done ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.on_same_side = 0;
|
self.on_same_side = 0;
|
||||||
player = self.candy_player;
|
player = self.candy_player;
|
||||||
if ( isDefined( player ) )
|
|
||||||
|
if ( isdefined( player ) )
|
||||||
{
|
{
|
||||||
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
|
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
|
||||||
{
|
|
||||||
if ( player maps/mp/zombies/_zm_ai_sloth::behind_mansion_zone() )
|
|
||||||
{
|
{
|
||||||
|
if ( player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
|
||||||
self.on_same_side = 1;
|
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;
|
self.on_same_side = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
wait 0.25;
|
||||||
wait 0,25;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sloth_move_to_same_side()
|
sloth_move_to_same_side()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
if ( isDefined( self.teleport_time ) )
|
|
||||||
|
if ( isdefined( self.teleport_time ) )
|
||||||
{
|
{
|
||||||
if ( ( getTime() - self.teleport_time ) < 1000 )
|
if ( gettime() - self.teleport_time < 1000 )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player = self.candy_player;
|
player = self.candy_player;
|
||||||
|
|
||||||
if ( is_true( player.is_in_ghost_zone ) )
|
if ( is_true( player.is_in_ghost_zone ) )
|
||||||
{
|
{
|
||||||
if ( is_true( self.on_exit_side ) )
|
if ( is_true( self.on_exit_side ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
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
|
else
|
||||||
{
|
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
|
||||||
if ( is_true( self.on_same_side ) )
|
|
||||||
{
|
return true;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sloth_is_same_zone( player )
|
sloth_is_same_zone( player )
|
||||||
{
|
{
|
||||||
zone_sloth = self get_current_zone();
|
zone_sloth = self get_current_zone();
|
||||||
zone_player = player get_current_zone();
|
zone_player = player get_current_zone();
|
||||||
if ( !isDefined( zone_sloth ) || !isDefined( zone_player ) )
|
|
||||||
{
|
if ( !isdefined( zone_sloth ) || !isdefined( zone_player ) )
|
||||||
return 0;
|
return false;
|
||||||
}
|
|
||||||
if ( zone_sloth == zone_player )
|
if ( zone_sloth == zone_player )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
append_hunched( asd_name )
|
append_hunched( asd_name )
|
||||||
{
|
{
|
||||||
if ( self.is_inside )
|
if ( self.is_inside )
|
||||||
{
|
|
||||||
return asd_name + "_hunched";
|
return asd_name + "_hunched";
|
||||||
}
|
|
||||||
return asd_name;
|
return asd_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,9 +327,7 @@ crawler_update_locomotion()
|
|||||||
self.locomotion = "walk_crawlerhold_hunched";
|
self.locomotion = "walk_crawlerhold_hunched";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
|
||||||
{
|
|
||||||
if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
|
|
||||||
{
|
{
|
||||||
if ( !self.is_inside )
|
if ( !self.is_inside )
|
||||||
{
|
{
|
||||||
@ -348,23 +336,23 @@ crawler_update_locomotion()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
crawler_watch_death()
|
crawler_watch_death()
|
||||||
{
|
{
|
||||||
self endon( "stop_crawler_watch" );
|
self endon( "stop_crawler_watch" );
|
||||||
|
|
||||||
self.crawler waittill( "death" );
|
self.crawler waittill( "death" );
|
||||||
|
|
||||||
self stop_action();
|
self stop_action();
|
||||||
/#
|
/#
|
||||||
sloth_print( "crawler died" );
|
sloth_print( "crawler died" );
|
||||||
#/
|
#/
|
||||||
if ( isDefined( self.crawler ) )
|
if ( isdefined( self.crawler ) )
|
||||||
{
|
|
||||||
self.crawler unlink();
|
self.crawler unlink();
|
||||||
}
|
|
||||||
self.setanimstatefromspeed = undefined;
|
self.setanimstatefromspeed = undefined;
|
||||||
self.sloth_damage_func = 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.crawler = undefined;
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
}
|
}
|
||||||
@ -375,7 +363,7 @@ crawler_pre_traverse()
|
|||||||
crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" );
|
crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" );
|
||||||
self setanimstatefromasd( sloth_sling );
|
self setanimstatefromasd( sloth_sling );
|
||||||
self.crawler setanimstatefromasd( crawler_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();
|
self.crawler thread crawler_traverse_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,10 +371,11 @@ crawler_traverse_idle()
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "stop_traverse_idle" );
|
self endon( "stop_traverse_idle" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" );
|
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" );
|
crawler_unsling = self append_hunched( "zm_crawler_sloth_crawlerhold_unsling" );
|
||||||
self setanimstatefromasd( sloth_unsling );
|
self setanimstatefromasd( sloth_unsling );
|
||||||
self.crawler setanimstatefromasd( crawler_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()
|
crawler_death()
|
||||||
@ -413,22 +402,21 @@ crawler_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, swe
|
|||||||
|
|
||||||
is_crawler_alive()
|
is_crawler_alive()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.crawler ) && self.crawler.health > 0 )
|
if ( isdefined( self.crawler ) && self.crawler.health > 0 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
slothanimstatefromspeed( animstate, substate )
|
slothanimstatefromspeed( animstate, substate )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.crawler ) )
|
if ( isdefined( self.crawler ) )
|
||||||
{
|
{
|
||||||
crawler_walk = "zm_crawler_crawlerhold_walk";
|
crawler_walk = "zm_crawler_crawlerhold_walk";
|
||||||
|
|
||||||
if ( self.is_inside )
|
if ( self.is_inside )
|
||||||
{
|
|
||||||
crawler_walk += "_hunched";
|
crawler_walk += "_hunched";
|
||||||
}
|
|
||||||
self.crawler setanimstatefromasd( crawler_walk );
|
self.crawler setanimstatefromasd( crawler_walk );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/zombies/_zm_ai_sloth_utility;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include common_scripts\utility;
|
||||||
#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()
|
sloth_ffotd_init()
|
||||||
{
|
{
|
||||||
@ -11,4 +13,5 @@ sloth_ffotd_init()
|
|||||||
|
|
||||||
sloth_ffotd_prespawn()
|
sloth_ffotd_prespawn()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,44 +1,43 @@
|
|||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_hackables_box;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zm_buried;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/animscripts/zm_shared;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_ai_sloth;
|
#include maps\mp\zombies\_zm_ai_sloth_utility;
|
||||||
#include maps/mp/zombies/_zm_ai_sloth_utility;
|
#include maps\mp\zombies\_zm_ai_sloth;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\animscripts\zm_shared;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_buried;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
#include maps\mp\zombies\_zm_hackables_box;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
|
||||||
box_lock_condition()
|
box_lock_condition()
|
||||||
{
|
{
|
||||||
box = level.chests[level.chest_index];
|
box = level.chests[level.chest_index];
|
||||||
if ( !isDefined( box ) )
|
|
||||||
{
|
if ( !isdefined( box ) )
|
||||||
return 0;
|
return false;
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
self sloth_debug_context( box, sqrt( 32400 ) );
|
self sloth_debug_context( box, sqrt( 32400 ) );
|
||||||
#/
|
#/
|
||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
dist = distancesquared( self.origin, box.origin );
|
dist = distancesquared( self.origin, box.origin );
|
||||||
|
|
||||||
if ( dist < 32400 )
|
if ( dist < 32400 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
box_get_ground_offset()
|
box_get_ground_offset()
|
||||||
{
|
{
|
||||||
vec_right = vectornormalize( anglesToRight( self.angles ) );
|
vec_right = vectornormalize( anglestoright( self.angles ) );
|
||||||
box_pos = self.origin - ( vec_right * 36 );
|
box_pos = self.origin - vec_right * 36;
|
||||||
ground_pos = groundpos( box_pos );
|
ground_pos = groundpos( box_pos );
|
||||||
return ground_pos;
|
return ground_pos;
|
||||||
}
|
}
|
||||||
@ -48,9 +47,10 @@ common_abort_box( box )
|
|||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
self.context_done = 1;
|
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 ) )
|
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" );
|
sloth_print( "box was opened...abort" );
|
||||||
#/
|
#/
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
common_move_to_maze( box )
|
common_move_to_maze( box )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( self common_abort_box( box ) )
|
if ( self common_abort_box( box ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
|
||||||
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
|
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
|
||||||
|
wait 0.2;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return true;
|
||||||
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
|
|
||||||
wait 0,2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
common_move_to_courtyard( box )
|
common_move_to_courtyard( box )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( self common_abort_box( box ) )
|
if ( self common_abort_box( box ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( !self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
|
||||||
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
|
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
|
||||||
|
wait 0.2;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return true;
|
||||||
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
|
|
||||||
wait 0,2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
common_move_to_box( box, range, ignore_open, asd_name )
|
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 );
|
anim_id = self getanimfromasd( asd_name, 0 );
|
||||||
start_org = getstartorigin( box.origin, box.angles, anim_id );
|
start_org = getstartorigin( box.origin, box.angles, anim_id );
|
||||||
@ -120,200 +115,189 @@ common_move_to_box( box, range, ignore_open, asd_name )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vec_right = vectornormalize( anglesToRight( box.angles ) );
|
vec_right = vectornormalize( anglestoright( box.angles ) );
|
||||||
box_pos = box.origin - ( vec_right * 36 );
|
box_pos = box.origin - vec_right * 36;
|
||||||
ground_pos = groundpos( box_pos );
|
ground_pos = groundpos( box_pos );
|
||||||
self setgoalpos( ground_pos );
|
self setgoalpos( ground_pos );
|
||||||
}
|
}
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
self.context_done = 1;
|
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" );
|
sloth_print( "box was opened...abort" );
|
||||||
#/
|
#/
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
dist = distancesquared( self.origin, ground_pos );
|
dist = distancesquared( self.origin, ground_pos );
|
||||||
|
|
||||||
if ( dist < range )
|
if ( dist < range )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( isdefined( asd_name ) )
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( asd_name ) )
|
|
||||||
{
|
{
|
||||||
self setgoalpos( self.origin );
|
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
|
else
|
||||||
{
|
{
|
||||||
angles = vectorToAngle( vec_right );
|
angles = vectortoangles( vec_right );
|
||||||
self.anchor.origin = self.origin;
|
self.anchor.origin = self.origin;
|
||||||
self.anchor.angles = angles;
|
self.anchor.angles = angles;
|
||||||
self orientmode( "face angle", angles[1] );
|
self orientmode( "face angle", angles[1] );
|
||||||
wait 0,2;
|
wait 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
box_lock_action()
|
box_lock_action()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "stop_action" );
|
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];
|
box = level.chests[level.chest_index];
|
||||||
|
|
||||||
if ( !self common_move_to_box( box, 1024 ) )
|
if ( !self common_move_to_box( box, 1024 ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self animscripted( box.origin, box.angles, "zm_lock_magicbox" );
|
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" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( "magic_chest_movable", "0" );
|
setdvar( "magic_chest_movable", "0" );
|
||||||
/#
|
/#
|
||||||
sloth_print( "box will not move" );
|
sloth_print( "box will not move" );
|
||||||
#/
|
#/
|
||||||
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_lock" );
|
maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_lock" );
|
||||||
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_move" );
|
maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_move" );
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
box_move_condition()
|
box_move_condition()
|
||||||
{
|
{
|
||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
self.box_move = undefined;
|
self.box_move = undefined;
|
||||||
self.box_current = undefined;
|
self.box_current = undefined;
|
||||||
self.box_current_in_maze = 0;
|
self.box_current_in_maze = 0;
|
||||||
box_current = level.chests[level.chest_index];
|
box_current = level.chests[level.chest_index];
|
||||||
|
|
||||||
if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) )
|
if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( box_current.script_noteworthy == "courtroom_chest1" )
|
if ( box_current.script_noteworthy == "courtroom_chest1" )
|
||||||
{
|
{
|
||||||
if ( !maps/mp/zm_buried::is_courthouse_open() )
|
if ( !maps\mp\zm_buried::is_courthouse_open() )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( box_current.script_noteworthy == "tunnels_chest1" )
|
if ( box_current.script_noteworthy == "tunnels_chest1" )
|
||||||
{
|
{
|
||||||
if ( !maps/mp/zm_buried::is_tunnel_open() )
|
if ( !maps\mp\zm_buried::is_tunnel_open() )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" )
|
if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" )
|
||||||
{
|
{
|
||||||
self.box_current_in_maze = 1;
|
self.box_current_in_maze = 1;
|
||||||
|
|
||||||
if ( !is_maze_open() )
|
if ( !is_maze_open() )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i = 0;
|
for ( i = 0; i < level.chests.size; i++ )
|
||||||
while ( i < level.chests.size )
|
|
||||||
{
|
{
|
||||||
if ( i == level.chest_index )
|
if ( i == level.chest_index )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
box = level.chests[i];
|
box = level.chests[i];
|
||||||
if ( box.script_noteworthy != "maze_chest1" )
|
self.box_move_in_maze = box.script_noteworthy == "maze_chest1" || box.script_noteworthy == "maze_chest2";
|
||||||
{
|
|
||||||
self.box_move_in_maze = box.script_noteworthy == "maze_chest2";
|
|
||||||
}
|
|
||||||
dist = distancesquared( self.origin, box.origin );
|
dist = distancesquared( self.origin, box.origin );
|
||||||
|
|
||||||
if ( dist < 32400 )
|
if ( dist < 32400 )
|
||||||
{
|
{
|
||||||
self.box_move_index = i;
|
self.box_move_index = i;
|
||||||
self.box_move = box;
|
self.box_move = box;
|
||||||
self.box_current = box_current;
|
self.box_current = box_current;
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
box_move_action()
|
box_move_action()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "stop_action" );
|
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 );
|
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" ) )
|
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_magicbox_point" ) )
|
||||||
{
|
|
||||||
return;
|
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_current_in_maze ) )
|
||||||
{
|
{
|
||||||
if ( !is_true( self.box_move_in_maze ) )
|
if ( !is_true( self.box_move_in_maze ) )
|
||||||
{
|
{
|
||||||
if ( !self common_move_to_maze( self.box_current ) )
|
if ( !self common_move_to_maze( self.box_current ) )
|
||||||
{
|
|
||||||
return;
|
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 ) )
|
if ( !self common_move_to_courtyard( self.box_current ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) )
|
if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self animscripted( self.box_current.origin, self.box_current.angles, "zm_pull_magicbox" );
|
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 ) )
|
if ( self common_abort_box( self.box_current ) )
|
||||||
{
|
{
|
||||||
self box_move_interrupt();
|
self box_move_interrupt();
|
||||||
return;
|
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 );
|
self thread [[ level.sloth.custom_box_move_func ]]( 0 );
|
||||||
}
|
|
||||||
level.sloth_moving_box = 1;
|
level.sloth_moving_box = 1;
|
||||||
self.ignore_common_run = 1;
|
self.ignore_common_run = 1;
|
||||||
self set_zombie_run_cycle( "run_holding_magicbox" );
|
self set_zombie_run_cycle( "run_holding_magicbox" );
|
||||||
self.locomotion = "run_holding_magicbox";
|
self.locomotion = "run_holding_magicbox";
|
||||||
|
|
||||||
if ( is_true( self.box_current_in_maze ) )
|
if ( is_true( self.box_current_in_maze ) )
|
||||||
{
|
{
|
||||||
if ( !is_true( self.box_move_in_maze ) )
|
if ( !is_true( self.box_move_in_maze ) )
|
||||||
@ -325,9 +309,7 @@ box_move_action()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( is_true( self.box_move_in_maze ) )
|
||||||
{
|
|
||||||
if ( is_true( self.box_move_in_maze ) )
|
|
||||||
{
|
{
|
||||||
if ( !self common_move_to_maze( undefined ) )
|
if ( !self common_move_to_maze( undefined ) )
|
||||||
{
|
{
|
||||||
@ -335,36 +317,36 @@ box_move_action()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) )
|
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) )
|
||||||
{
|
{
|
||||||
self box_move_interrupt();
|
self box_move_interrupt();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self animscripted( self.box_move.origin, self.box_move.angles, "zm_place_magicbox" );
|
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.box_current = undefined;
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
level.sloth_moving_box = undefined;
|
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 );
|
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
box_notetracks( note, box )
|
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;
|
return 0;
|
||||||
}
|
|
||||||
if ( note == "pulled" )
|
if ( note == "pulled" )
|
||||||
{
|
{
|
||||||
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
||||||
tag_name = "tag_stowed_back";
|
tag_name = "tag_stowed_back";
|
||||||
twr_origin = self gettagorigin( tag_name );
|
twr_origin = self gettagorigin( tag_name );
|
||||||
twr_angles = self gettagangles( 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 = spawn( "script_model", twr_origin );
|
||||||
self.box_model.angles = twr_angles;
|
self.box_model.angles = twr_angles;
|
||||||
@ -377,32 +359,29 @@ box_notetracks( note, box )
|
|||||||
self.box_model show();
|
self.box_model show();
|
||||||
self.box_model_visible = 1;
|
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" )
|
else if ( note == "placed" )
|
||||||
{
|
{
|
||||||
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
||||||
self box_model_hide();
|
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.hidden = 0;
|
||||||
self.box_move thread [[ level.pandora_show_func ]]();
|
self.box_move thread [[ level.pandora_show_func ]]();
|
||||||
level.chest_index = self.box_move_index;
|
level.chest_index = self.box_move_index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( note == "locked" )
|
||||||
{
|
|
||||||
if ( note == "locked" )
|
|
||||||
{
|
|
||||||
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
box_model_hide()
|
box_model_hide()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.box_model ) )
|
if ( isdefined( self.box_model ) )
|
||||||
{
|
{
|
||||||
self.box_model ghost();
|
self.box_model ghost();
|
||||||
self.box_model_visible = 0;
|
self.box_model_visible = 0;
|
||||||
@ -411,19 +390,19 @@ box_model_hide()
|
|||||||
|
|
||||||
box_move_interrupt()
|
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.hidden = 0;
|
||||||
self.box_current thread [[ level.pandora_show_func ]]();
|
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 );
|
self thread [[ level.sloth.custom_box_move_func ]]( 1 );
|
||||||
}
|
|
||||||
level.sloth_moving_box = undefined;
|
level.sloth_moving_box = undefined;
|
||||||
self box_model_hide();
|
self box_model_hide();
|
||||||
}
|
}
|
||||||
@ -431,40 +410,39 @@ box_move_interrupt()
|
|||||||
box_spin_condition()
|
box_spin_condition()
|
||||||
{
|
{
|
||||||
if ( flag( "moving_chest_now" ) )
|
if ( flag( "moving_chest_now" ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
box = level.chests[level.chest_index];
|
box = level.chests[level.chest_index];
|
||||||
|
|
||||||
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
|
||||||
{
|
{
|
||||||
ground_pos = groundpos( box.origin );
|
ground_pos = groundpos( box.origin );
|
||||||
dist = distancesquared( self.origin, ground_pos );
|
dist = distancesquared( self.origin, ground_pos );
|
||||||
|
|
||||||
if ( dist < 32400 )
|
if ( dist < 32400 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
box_spin_action()
|
box_spin_action()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "stop_action" );
|
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];
|
box = level.chests[level.chest_index];
|
||||||
hackable = spawnstruct();
|
hackable = spawnstruct();
|
||||||
hackable.chest = box;
|
hackable.chest = box;
|
||||||
|
|
||||||
if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) )
|
if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !self box_spin_qualifier( hackable ) )
|
if ( !self box_spin_qualifier( hackable ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self animscripted( box.origin, box.angles, "zm_cycle_magicbox" );
|
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;
|
self.context_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,47 +451,48 @@ box_kick( note, hackable )
|
|||||||
if ( note == "kick" )
|
if ( note == "kick" )
|
||||||
{
|
{
|
||||||
if ( !self box_spin_qualifier( hackable ) )
|
if ( !self box_spin_qualifier( hackable ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !flag( "moving_chest_now" ) )
|
if ( !flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
hackable thread box_trigger();
|
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()
|
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" );
|
self.chest.zbarrier waittill( "randomization_done" );
|
||||||
|
|
||||||
if ( !flag( "moving_chest_now" ) )
|
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 )
|
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;
|
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" );
|
sloth_print( "hack_box_qualifier failed" );
|
||||||
#/
|
#/
|
||||||
self.context_done = 1;
|
self.context_done = 1;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,46 +1,43 @@
|
|||||||
#include maps/mp/zombies/_zm_ai_sloth;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_buried;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/animscripts/zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\animscripts\zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
#include maps\mp\zm_buried;
|
||||||
|
#include maps\mp\zombies\_zm_ai_sloth;
|
||||||
|
|
||||||
should_ignore_candybooze( player )
|
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" ) )
|
return false;
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_crash_pos()
|
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, 1012, 56 );
|
||||||
level.crash_pos[level.crash_pos.size] = ( 3452, 1092, 56 );
|
level.crash_pos[level.crash_pos.size] = ( 3452, 1092, 56 );
|
||||||
level.crash_pos[level.crash_pos.size] = ( 3452, 1056, 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 );
|
foreach ( pos in level.crash_pos )
|
||||||
while ( isDefined( _k82 ) )
|
|
||||||
{
|
{
|
||||||
pos = _a82[ _k82 ];
|
|
||||||
dist = distancesquared( self.origin, pos );
|
dist = distancesquared( self.origin, pos );
|
||||||
|
|
||||||
if ( dist < dist_crash )
|
if ( dist < dist_crash )
|
||||||
{
|
{
|
||||||
self.anchor.origin = self.origin;
|
self.anchor.origin = self.origin;
|
||||||
@ -69,12 +67,12 @@ watch_crash_pos()
|
|||||||
self linkto( self.anchor );
|
self linkto( self.anchor );
|
||||||
self setclientfield( "sloth_berserk", 0 );
|
self setclientfield( "sloth_berserk", 0 );
|
||||||
self sloth_set_state( "crash", 0 );
|
self sloth_set_state( "crash", 0 );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
self unlink();
|
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 ) )
|
if ( is_true( self.is_pain ) )
|
||||||
{
|
{
|
||||||
anim_state = self getanimstatefromasd();
|
anim_state = self getanimstatefromasd();
|
||||||
|
|
||||||
if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" )
|
if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.reset_asd = undefined;
|
self.reset_asd = undefined;
|
||||||
@ -99,7 +96,8 @@ sloth_is_pain()
|
|||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sloth_is_traversing()
|
sloth_is_traversing()
|
||||||
@ -107,10 +105,9 @@ sloth_is_traversing()
|
|||||||
if ( is_true( self.is_traversing ) )
|
if ( is_true( self.is_traversing ) )
|
||||||
{
|
{
|
||||||
anim_state = self getanimstatefromasd();
|
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" )
|
|
||||||
{
|
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;
|
return true;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.is_traversing = 0;
|
self.is_traversing = 0;
|
||||||
@ -119,58 +116,48 @@ sloth_is_traversing()
|
|||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sloth_face_object( facee, type, data, dot_limit )
|
sloth_face_object( facee, type, data, dot_limit )
|
||||||
{
|
{
|
||||||
if ( type == "angle" )
|
if ( type == "angle" )
|
||||||
{
|
|
||||||
self orientmode( "face angle", data );
|
self orientmode( "face angle", data );
|
||||||
}
|
else if ( type == "point" )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( type == "point" )
|
|
||||||
{
|
|
||||||
self orientmode( "face point", data );
|
self orientmode( "face point", data );
|
||||||
}
|
|
||||||
}
|
time_started = gettime();
|
||||||
time_started = getTime();
|
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( type == "angle" )
|
if ( type == "angle" )
|
||||||
{
|
{
|
||||||
delta = abs( self.angles[1] - data );
|
delta = abs( self.angles[1] - data );
|
||||||
|
|
||||||
if ( delta <= 15 )
|
if ( delta <= 15 )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else }
|
else if ( isdefined( dot_limit ) )
|
||||||
else if ( isDefined( dot_limit ) )
|
|
||||||
{
|
{
|
||||||
if ( self is_facing( facee, dot_limit ) )
|
if ( self is_facing( facee, dot_limit ) )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else }
|
|
||||||
else if ( self is_facing( facee ) )
|
else if ( self is_facing( facee ) )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else if ( ( getTime() - time_started ) > 1000 )
|
if ( gettime() - time_started > 1000 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
sloth_print( "face took too long" );
|
sloth_print( "face took too long" );
|
||||||
#/
|
#/
|
||||||
break;
|
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 );
|
sloth_print( "time to face: " + time_elapsed );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
@ -178,26 +165,25 @@ sloth_face_object( facee, type, data, dot_limit )
|
|||||||
sloth_print( str )
|
sloth_print( str )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getDvarInt( #"B6252E7C" ) )
|
if ( getdvarint( _hash_B6252E7C ) )
|
||||||
{
|
{
|
||||||
iprintln( "sloth: " + str );
|
iprintln( "sloth: " + str );
|
||||||
if ( isDefined( self.debug_msg ) )
|
|
||||||
|
if ( isdefined( self.debug_msg ) )
|
||||||
{
|
{
|
||||||
self.debug_msg[self.debug_msg.size] = str;
|
self.debug_msg[self.debug_msg.size] = str;
|
||||||
|
|
||||||
if ( self.debug_msg.size > 64 )
|
if ( self.debug_msg.size > 64 )
|
||||||
{
|
|
||||||
self.debug_msg = [];
|
self.debug_msg = [];
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.debug_msg = [];
|
self.debug_msg = [];
|
||||||
self.debug_msg[self.debug_msg.size] = str;
|
self.debug_msg[self.debug_msg.size] = str;
|
||||||
|
}
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sloth_debug_context( item, dist )
|
sloth_debug_context( item, dist )
|
||||||
{
|
{
|
||||||
@ -206,6 +192,6 @@ sloth_debug_context( item, dist )
|
|||||||
{
|
{
|
||||||
debugstar( item.origin, 100, ( 1, 1, 1 ) );
|
debugstar( item.origin, 100, ( 1, 1, 1 ) );
|
||||||
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
|
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,32 +1,31 @@
|
|||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_stats;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_powerups;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
|
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
|
||||||
if ( !isDefined( level.ta_vaultfee ) )
|
|
||||||
{
|
if ( !isdefined( level.ta_vaultfee ) )
|
||||||
level.ta_vaultfee = 100;
|
level.ta_vaultfee = 100;
|
||||||
}
|
|
||||||
if ( !isDefined( level.ta_tellerfee ) )
|
if ( !isdefined( level.ta_tellerfee ) )
|
||||||
{
|
|
||||||
level.ta_tellerfee = 100;
|
level.ta_tellerfee = 100;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.banking_map ) )
|
if ( !isdefined( level.banking_map ) )
|
||||||
{
|
|
||||||
level.banking_map = level.script;
|
level.banking_map = level.script;
|
||||||
}
|
|
||||||
level thread bank_teller_init();
|
level thread bank_teller_init();
|
||||||
level thread bank_deposit_box();
|
level thread bank_deposit_box();
|
||||||
}
|
}
|
||||||
@ -34,12 +33,13 @@ main()
|
|||||||
bank_teller_init()
|
bank_teller_init()
|
||||||
{
|
{
|
||||||
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
|
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_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" );
|
||||||
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
|
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
|
||||||
level thread bank_teller_logic();
|
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 trigger_off();
|
||||||
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
|
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
|
||||||
}
|
}
|
||||||
@ -48,10 +48,12 @@ bank_teller_init()
|
|||||||
bank_teller_logic()
|
bank_teller_logic()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
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 );
|
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();
|
bank_teller_give_money();
|
||||||
level.bank_teller_transfer_trig trigger_off();
|
level.bank_teller_transfer_trig trigger_off();
|
||||||
@ -65,23 +67,25 @@ bank_teller_give_money()
|
|||||||
level endon( "stop_bank_teller" );
|
level endon( "stop_bank_teller" );
|
||||||
level.bank_teller_transfer_trig trigger_on();
|
level.bank_teller_transfer_trig trigger_on();
|
||||||
bank_transfer = undefined;
|
bank_transfer = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level.bank_teller_transfer_trig waittill( "trigger", player );
|
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;
|
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 thread stop_bank_teller();
|
||||||
bank_transfer.value = 0;
|
bank_transfer.value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bank_transfer.value += 1000;
|
bank_transfer.value += 1000;
|
||||||
bank_transfer notify( "powerup_reset" );
|
bank_transfer notify( "powerup_reset" );
|
||||||
bank_transfer thread maps/mp/zombies/_zm_powerups::powerup_timeout();
|
bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout();
|
||||||
player maps/mp/zombies/_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
|
player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
|
||||||
level notify( "bank_teller_used" );
|
level notify( "bank_teller_used" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +93,9 @@ bank_teller_give_money()
|
|||||||
stop_bank_teller()
|
stop_bank_teller()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
level notify( "stop_bank_teller" );
|
level notify( "stop_bank_teller" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,14 +112,11 @@ delete_bank_teller()
|
|||||||
onplayerconnect_bank_deposit_box()
|
onplayerconnect_bank_deposit_box()
|
||||||
{
|
{
|
||||||
online_game = sessionmodeisonlinegame();
|
online_game = sessionmodeisonlinegame();
|
||||||
|
|
||||||
if ( !online_game )
|
if ( !online_game )
|
||||||
{
|
|
||||||
self.account_value = 0;
|
self.account_value = 0;
|
||||||
}
|
|
||||||
else
|
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()
|
bank_deposit_box()
|
||||||
@ -142,77 +145,55 @@ bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, ove
|
|||||||
{
|
{
|
||||||
unitrigger_stub = spawnstruct();
|
unitrigger_stub = spawnstruct();
|
||||||
unitrigger_stub.origin = self.origin;
|
unitrigger_stub.origin = self.origin;
|
||||||
if ( isDefined( self.script_angles ) )
|
|
||||||
{
|
if ( isdefined( self.script_angles ) )
|
||||||
unitrigger_stub.angles = self.script_angles;
|
unitrigger_stub.angles = self.script_angles;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.angles = self.angles;
|
unitrigger_stub.angles = self.angles;
|
||||||
}
|
|
||||||
unitrigger_stub.script_angles = unitrigger_stub.angles;
|
unitrigger_stub.script_angles = unitrigger_stub.angles;
|
||||||
if ( isDefined( override_length ) )
|
|
||||||
{
|
if ( isdefined( override_length ) )
|
||||||
unitrigger_stub.script_length = 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;
|
unitrigger_stub.script_length = self.script_length;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_length = 32;
|
unitrigger_stub.script_length = 32;
|
||||||
}
|
|
||||||
if ( isDefined( override_width ) )
|
if ( isdefined( override_width ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = 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;
|
unitrigger_stub.script_width = self.script_width;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = 32;
|
unitrigger_stub.script_width = 32;
|
||||||
}
|
|
||||||
if ( isDefined( override_height ) )
|
if ( isdefined( override_height ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = 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;
|
unitrigger_stub.script_height = self.script_height;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = 64;
|
unitrigger_stub.script_height = 64;
|
||||||
}
|
|
||||||
if ( isDefined( override_radius ) )
|
if ( isdefined( override_radius ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_radius = override_radius;
|
unitrigger_stub.script_radius = override_radius;
|
||||||
}
|
else if ( isdefined( self.radius ) )
|
||||||
else if ( isDefined( self.radius ) )
|
|
||||||
{
|
|
||||||
unitrigger_stub.radius = self.radius;
|
unitrigger_stub.radius = self.radius;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.radius = 32;
|
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;
|
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
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.cursor_hint = "HINT_NOICON";
|
||||||
unitrigger_stub.targetname = name;
|
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;
|
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 )
|
trigger_deposit_update_prompt( player )
|
||||||
@ -221,41 +202,40 @@ trigger_deposit_update_prompt( player )
|
|||||||
{
|
{
|
||||||
player show_balance();
|
player show_balance();
|
||||||
self sethintstring( "" );
|
self sethintstring( "" );
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
|
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_deposit_think()
|
trigger_deposit_think()
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
while ( !is_player_valid( player ) )
|
|
||||||
{
|
if ( !is_player_valid( player ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
|
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
|
||||||
{
|
{
|
||||||
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
|
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
|
||||||
player.score -= level.bank_deposit_ddl_increment_amount;
|
player.score -= level.bank_deposit_ddl_increment_amount;
|
||||||
player.account_value += level.bank_account_increment;
|
player.account_value += level.bank_account_increment;
|
||||||
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
||||||
if ( isDefined( level.custom_bank_deposit_vo ) )
|
|
||||||
{
|
if ( isdefined( level.custom_bank_deposit_vo ) )
|
||||||
player thread [[ level.custom_bank_deposit_vo ]]();
|
player thread [[ level.custom_bank_deposit_vo ]]();
|
||||||
}
|
|
||||||
if ( player.account_value >= level.bank_account_max )
|
if ( player.account_value >= level.bank_account_max )
|
||||||
{
|
|
||||||
self sethintstring( "" );
|
self sethintstring( "" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
||||||
}
|
|
||||||
player show_balance();
|
player show_balance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -266,47 +246,45 @@ trigger_withdraw_update_prompt( player )
|
|||||||
{
|
{
|
||||||
self sethintstring( "" );
|
self sethintstring( "" );
|
||||||
player show_balance();
|
player show_balance();
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
|
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_withdraw_think()
|
trigger_withdraw_think()
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
while ( !is_player_valid( player ) )
|
|
||||||
{
|
if ( !is_player_valid( player ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( player.account_value >= level.bank_account_increment )
|
if ( player.account_value >= level.bank_account_increment )
|
||||||
{
|
{
|
||||||
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
|
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
|
||||||
player.score += level.bank_deposit_ddl_increment_amount;
|
player.score += level.bank_deposit_ddl_increment_amount;
|
||||||
level notify( "bank_withdrawal" );
|
level notify( "bank_withdrawal" );
|
||||||
player.account_value -= level.bank_account_increment;
|
player.account_value -= level.bank_account_increment;
|
||||||
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
||||||
if ( isDefined( level.custom_bank_withdrawl_vo ) )
|
|
||||||
{
|
if ( isdefined( level.custom_bank_withdrawl_vo ) )
|
||||||
player thread [[ level.custom_bank_withdrawl_vo ]]();
|
player thread [[ level.custom_bank_withdrawl_vo ]]();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
|
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
|
||||||
}
|
|
||||||
player thread player_withdraw_fee();
|
player thread player_withdraw_fee();
|
||||||
|
|
||||||
if ( player.account_value < level.bank_account_increment )
|
if ( player.account_value < level.bank_account_increment )
|
||||||
{
|
|
||||||
self sethintstring( "" );
|
self sethintstring( "" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
||||||
}
|
|
||||||
player show_balance();
|
player show_balance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,32 +1,34 @@
|
|||||||
#include maps/mp/gametypes_zm/_hud_util;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/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 )
|
add_buildable_to_pool( stub, poolname )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.buildablepools ) )
|
if ( !isdefined( level.buildablepools ) )
|
||||||
{
|
|
||||||
level.buildablepools = [];
|
level.buildablepools = [];
|
||||||
}
|
|
||||||
if ( !isDefined( level.buildablepools[ poolname ] ) )
|
if ( !isdefined( level.buildablepools[poolname] ) )
|
||||||
{
|
{
|
||||||
level.buildablepools[poolname] = spawnstruct();
|
level.buildablepools[poolname] = spawnstruct();
|
||||||
level.buildablepools[poolname].stubs = [];
|
level.buildablepools[poolname].stubs = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
level.buildablepools[poolname].stubs[level.buildablepools[poolname].stubs.size] = stub;
|
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;
|
level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot );
|
assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
stub.buildable_pool = level.buildablepools[poolname];
|
stub.buildable_pool = level.buildablepools[poolname];
|
||||||
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
|
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
|
||||||
stub.original_trigger_func = stub.trigger_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 )
|
reregister_unitrigger( unitrigger_stub, new_trigger_func )
|
||||||
{
|
{
|
||||||
static = 0;
|
static = 0;
|
||||||
if ( isDefined( unitrigger_stub.in_zone ) )
|
|
||||||
{
|
if ( isdefined( unitrigger_stub.in_zone ) )
|
||||||
static = 1;
|
static = 1;
|
||||||
}
|
|
||||||
unregister_unitrigger( unitrigger_stub );
|
unregister_unitrigger( unitrigger_stub );
|
||||||
unitrigger_stub.trigger_func = new_trigger_func;
|
unitrigger_stub.trigger_func = new_trigger_func;
|
||||||
|
|
||||||
if ( static )
|
if ( static )
|
||||||
{
|
|
||||||
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
|
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
register_unitrigger( unitrigger_stub, new_trigger_func );
|
register_unitrigger( unitrigger_stub, new_trigger_func );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
randomize_pooled_buildables( poolname )
|
randomize_pooled_buildables( poolname )
|
||||||
{
|
{
|
||||||
level waittill( "buildables_setup" );
|
level waittill( "buildables_setup" );
|
||||||
while ( isDefined( level.buildablepools[ poolname ] ) )
|
|
||||||
|
if ( isdefined( level.buildablepools[poolname] ) )
|
||||||
{
|
{
|
||||||
count = level.buildablepools[poolname].stubs.size;
|
count = level.buildablepools[poolname].stubs.size;
|
||||||
while ( count > 1 )
|
|
||||||
|
if ( count > 1 )
|
||||||
{
|
{
|
||||||
targets = [];
|
targets = [];
|
||||||
i = 0;
|
|
||||||
while ( i < count )
|
for ( i = 0; i < count; i++ )
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
p = randomint( count );
|
p = randomint( count );
|
||||||
if ( !isDefined( targets[ p ] ) )
|
|
||||||
|
if ( !isdefined( targets[p] ) )
|
||||||
{
|
{
|
||||||
targets[p] = i;
|
targets[p] = i;
|
||||||
i++;
|
break;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
}
|
|
||||||
}
|
for ( i = 0; i < count; i++ )
|
||||||
i++;
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < count )
|
|
||||||
{
|
|
||||||
if ( isDefined( targets[ i ] ) && targets[ i ] != i )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( targets[i] ) && targets[i] != i )
|
||||||
swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[targets[i]] );
|
swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[targets[i]] );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pooledbuildable_has_piece( piece )
|
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 )
|
pooledbuildable_stub_for_piece( piece )
|
||||||
{
|
{
|
||||||
_a104 = self.stubs;
|
foreach ( stub in self.stubs )
|
||||||
_k104 = getFirstArrayKey( _a104 );
|
|
||||||
while ( isDefined( _k104 ) )
|
|
||||||
{
|
|
||||||
stub = _a104[ _k104 ];
|
|
||||||
if ( isDefined( stub.bound_to_buildable ) )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( stub.bound_to_buildable ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
if ( stub.buildablezone buildable_has_piece( piece ) )
|
if ( stub.buildablezone buildable_has_piece( piece ) )
|
||||||
{
|
|
||||||
return stub;
|
return stub;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
_k104 = getNextArrayKey( _a104, _k104 );
|
|
||||||
}
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,119 +110,92 @@ pooledbuildabletrigger_update_prompt( player )
|
|||||||
{
|
{
|
||||||
can_use = self.stub pooledbuildablestub_update_prompt( player, self );
|
can_use = self.stub pooledbuildablestub_update_prompt( player, self );
|
||||||
self sethintstring( self.stub.hint_string );
|
self sethintstring( self.stub.hint_string );
|
||||||
if ( isDefined( self.stub.cursor_hint ) )
|
|
||||||
{
|
if ( isdefined( self.stub.cursor_hint ) )
|
||||||
if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) )
|
|
||||||
{
|
{
|
||||||
|
if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) )
|
||||||
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
|
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self setcursorhint( self.stub.cursor_hint );
|
self setcursorhint( self.stub.cursor_hint );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return can_use;
|
return can_use;
|
||||||
}
|
}
|
||||||
|
|
||||||
pooledbuildablestub_update_prompt( player, trigger )
|
pooledbuildablestub_update_prompt( player, trigger )
|
||||||
{
|
{
|
||||||
if ( !self anystub_update_prompt( player ) )
|
if ( !self anystub_update_prompt( player ) )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
can_use = 1;
|
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;
|
return 0;
|
||||||
}
|
|
||||||
self.cursor_hint = "HINT_NOICON";
|
self.cursor_hint = "HINT_NOICON";
|
||||||
self.cursor_hint_weapon = undefined;
|
self.cursor_hint_weapon = undefined;
|
||||||
if ( isDefined( self.built ) && !self.built )
|
|
||||||
|
if ( !( isdefined( self.built ) && self.built ) )
|
||||||
{
|
{
|
||||||
slot = self.buildablestruct.buildable_slot;
|
slot = self.buildablestruct.buildable_slot;
|
||||||
if ( !isDefined( player player_get_buildable_piece( slot ) ) )
|
|
||||||
{
|
if ( !isdefined( player player_get_buildable_piece( slot ) ) )
|
||||||
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.zombie_buildables[self.equipname].hint_more ) )
|
||||||
self.hint_string = level.zombie_buildables[self.equipname].hint_more;
|
self.hint_string = level.zombie_buildables[self.equipname].hint_more;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
|
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 ]]();
|
player thread [[ level.custom_buildable_need_part_vo ]]();
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else if ( isdefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) )
|
||||||
{
|
|
||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
|
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;
|
self.hint_string = level.zombie_buildables[self.bound_to_buildable.equipname].hint_wrong;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
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 ]]();
|
player thread [[ level.custom_buildable_wrong_part_vo ]]();
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else if ( !isdefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( player player_get_buildable_piece( slot ) ) )
|
||||||
{
|
|
||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.zombie_buildables[self.equipname].hint_wrong ) )
|
||||||
self.hint_string = level.zombie_buildables[self.equipname].hint_wrong;
|
self.hint_string = level.zombie_buildables[self.equipname].hint_wrong;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else if ( isdefined( self.bound_to_buildable ) )
|
||||||
{
|
|
||||||
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;
|
self.hint_string = level.zombie_buildables[self.equipname].hint;
|
||||||
|
else
|
||||||
|
self.hint_string = "Missing buildable hint";
|
||||||
}
|
}
|
||||||
else
|
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";
|
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
|
else
|
||||||
{
|
|
||||||
self.hint_string = "Missing buildable hint";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return trigger [[ self.original_prompt_and_visibility_func ]]( player );
|
return trigger [[ self.original_prompt_and_visibility_func ]]( player );
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,11 +250,13 @@ swap_buildable_fields( stub1, stub2 )
|
|||||||
bench1 = undefined;
|
bench1 = undefined;
|
||||||
bench2 = undefined;
|
bench2 = undefined;
|
||||||
transfer_pos_as_is = 1;
|
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 );
|
bench1 = find_bench( stub1.model.target );
|
||||||
bench2 = find_bench( stub2.model.target );
|
bench2 = find_bench( stub2.model.target );
|
||||||
if ( isDefined( bench1 ) && isDefined( bench2 ) )
|
|
||||||
|
if ( isdefined( bench1 ) && isdefined( bench2 ) )
|
||||||
{
|
{
|
||||||
transfer_pos_as_is = 0;
|
transfer_pos_as_is = 0;
|
||||||
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
|
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
|
||||||
@ -307,13 +268,16 @@ swap_buildable_fields( stub1, stub2 )
|
|||||||
stub2.model.origin = bench1 localtoworldcoords( w2lo2 );
|
stub2.model.origin = bench1 localtoworldcoords( w2lo2 );
|
||||||
stub2.model.angles = bench1.angles + w2la2;
|
stub2.model.angles = bench1.angles + w2la2;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmt = stub2.model.target;
|
tmt = stub2.model.target;
|
||||||
stub2.model.target = stub1.model.target;
|
stub2.model.target = stub1.model.target;
|
||||||
stub1.model.target = tmt;
|
stub1.model.target = tmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
tm = stub2.model;
|
tm = stub2.model;
|
||||||
stub2.model = stub1.model;
|
stub2.model = stub1.model;
|
||||||
stub1.model = tm;
|
stub1.model = tm;
|
||||||
|
|
||||||
if ( transfer_pos_as_is )
|
if ( transfer_pos_as_is )
|
||||||
{
|
{
|
||||||
tmo = stub2.model.origin;
|
tmo = stub2.model.origin;
|
||||||
@ -328,92 +292,90 @@ swap_buildable_fields( stub1, stub2 )
|
|||||||
pooled_buildable_place_think()
|
pooled_buildable_place_think()
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
if ( isDefined( self.stub.built ) && self.stub.built )
|
|
||||||
{
|
if ( isdefined( self.stub.built ) && self.stub.built )
|
||||||
return buildable_place_think();
|
return buildable_place_think();
|
||||||
}
|
|
||||||
player_built = undefined;
|
player_built = undefined;
|
||||||
while ( isDefined( self.stub.built ) && !self.stub.built )
|
|
||||||
|
while ( !( isdefined( self.stub.built ) && self.stub.built ) )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
while ( isDefined( player.screecher_weapon ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
while ( !is_player_valid( player ) )
|
|
||||||
{
|
|
||||||
player thread ignore_triggers( 0,5 );
|
|
||||||
}
|
|
||||||
bind_to = self.stub;
|
bind_to = self.stub;
|
||||||
slot = bind_to.buildablestruct.buildable_slot;
|
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 ) );
|
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.stub.hint_string = "";
|
||||||
self sethintstring( 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 );
|
self.stub [[ self.stub.oncantuse ]]( player );
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
status = player player_can_build( bind_to.buildablezone );
|
status = player player_can_build( bind_to.buildablezone );
|
||||||
|
|
||||||
if ( !status )
|
if ( !status )
|
||||||
{
|
{
|
||||||
self.stub.hint_string = "";
|
self.stub.hint_string = "";
|
||||||
self sethintstring( 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 );
|
bind_to [[ bind_to.oncantuse ]]( player );
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( isDefined( bind_to.onbeginuse ) )
|
if ( isdefined( bind_to.onbeginuse ) )
|
||||||
{
|
|
||||||
self.stub [[ bind_to.onbeginuse ]]( player );
|
self.stub [[ bind_to.onbeginuse ]]( player );
|
||||||
}
|
|
||||||
result = self buildable_use_hold_think( player, bind_to );
|
result = self buildable_use_hold_think( player, bind_to );
|
||||||
team = player.pers["team"];
|
team = player.pers["team"];
|
||||||
|
|
||||||
if ( result )
|
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;
|
result = 0;
|
||||||
}
|
}
|
||||||
if ( isDefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
|
|
||||||
{
|
if ( isdefined( bind_to.onenduse ) )
|
||||||
result = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( bind_to.onenduse ) )
|
|
||||||
{
|
|
||||||
self.stub [[ bind_to.onenduse ]]( team, player, result );
|
self.stub [[ bind_to.onenduse ]]( team, player, result );
|
||||||
}
|
|
||||||
while ( !result )
|
if ( !result )
|
||||||
{
|
|
||||||
continue;
|
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 )
|
if ( bind_to != self.stub )
|
||||||
{
|
|
||||||
swap_buildable_fields( self.stub, bind_to );
|
swap_buildable_fields( self.stub, bind_to );
|
||||||
}
|
|
||||||
self.stub.bound_to_buildable = self.stub;
|
self.stub.bound_to_buildable = self.stub;
|
||||||
}
|
}
|
||||||
if ( isDefined( self.stub.onuse ) )
|
|
||||||
{
|
if ( isdefined( self.stub.onuse ) )
|
||||||
self.stub [[ self.stub.onuse ]]( player );
|
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 );
|
prompt = player player_build( self.stub.buildablezone );
|
||||||
player_built = player;
|
player_built = player;
|
||||||
@ -422,21 +384,22 @@ pooled_buildable_place_think()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( self.stub.persistent )
|
switch ( self.stub.persistent )
|
||||||
{
|
{
|
||||||
case 1:
|
case "1":
|
||||||
self bptrigger_think_persistent( player_built );
|
self bptrigger_think_persistent( player_built );
|
||||||
break;
|
break;
|
||||||
case 0:
|
case "0":
|
||||||
self bptrigger_think_one_time( player_built );
|
self bptrigger_think_one_time( player_built );
|
||||||
break;
|
break;
|
||||||
case 3:
|
case "3":
|
||||||
self bptrigger_think_unbuild( player_built );
|
self bptrigger_think_unbuild( player_built );
|
||||||
break;
|
break;
|
||||||
case 2:
|
case "2":
|
||||||
self bptrigger_think_one_use_and_fly( player_built );
|
self bptrigger_think_one_use_and_fly( player_built );
|
||||||
break;
|
break;
|
||||||
case 4:
|
case "4":
|
||||||
self [[ self.stub.custom_completion_callback ]]( player_built );
|
self [[ self.stub.custom_completion_callback ]]( player_built );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,42 +1,40 @@
|
|||||||
#include maps/mp/zombies/_zm_buildables;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_power;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_equipment;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
#include maps\mp\zombies\_zm_power;
|
||||||
#using_animtree( "zombie_springpad" );
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
|
|
||||||
init( pickupstring, howtostring )
|
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;
|
return;
|
||||||
}
|
|
||||||
level.springpad_name = "equip_springpad_zm";
|
level.springpad_name = "equip_springpad_zm";
|
||||||
init_animtree();
|
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::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::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||||
level thread onplayerconnect();
|
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" );
|
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;
|
level.springpad_trigger_radius = 72;
|
||||||
}
|
|
||||||
thread wait_init_damage();
|
thread wait_init_damage();
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
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()
|
onplayerconnect()
|
||||||
@ -44,6 +42,7 @@ onplayerconnect()
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,9 +51,11 @@ onplayerspawned()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self thread setupwatchers();
|
self thread setupwatchers();
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread watchspringpaduse();
|
self thread watchspringpaduse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,8 +63,9 @@ onplayerspawned()
|
|||||||
setupwatchers()
|
setupwatchers()
|
||||||
{
|
{
|
||||||
self waittill( "weapon_watchers_created" );
|
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()
|
watchspringpaduse()
|
||||||
@ -72,9 +74,11 @@ watchspringpaduse()
|
|||||||
self endon( "watchSpringPadUse" );
|
self endon( "watchSpringPadUse" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "equipment_placed", weapon, weapname );
|
self waittill( "equipment_placed", weapon, weapname );
|
||||||
|
|
||||||
if ( weapname == level.springpad_name )
|
if ( weapname == level.springpad_name )
|
||||||
{
|
{
|
||||||
self cleanupoldspringpad();
|
self cleanupoldspringpad();
|
||||||
@ -86,17 +90,19 @@ watchspringpaduse()
|
|||||||
|
|
||||||
cleanupoldspringpad()
|
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.stub = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.buildablespringpad delete();
|
self.buildablespringpad delete();
|
||||||
self.springpad_kills = undefined;
|
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 delete();
|
||||||
level.springpad_sound_ent = undefined;
|
level.springpad_sound_ent = undefined;
|
||||||
@ -113,30 +119,35 @@ watchforcleanup()
|
|||||||
|
|
||||||
placespringpad( origin, angles )
|
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;
|
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.springpad_kills = self.springpad_kills;
|
||||||
item.requires_pickup = 1;
|
item.requires_pickup = 1;
|
||||||
item.zombie_attack_callback = ::springpad_fling_attacker;
|
item.zombie_attack_callback = ::springpad_fling_attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
dropspringpad()
|
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 );
|
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 ) )
|
|
||||||
|
if ( isdefined( item ) )
|
||||||
{
|
{
|
||||||
item.springpad_kills = self.springpad_kills;
|
item.springpad_kills = self.springpad_kills;
|
||||||
item.requires_pickup = 1;
|
item.requires_pickup = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@ -151,22 +162,16 @@ transferspringpad( fromplayer, toplayer )
|
|||||||
{
|
{
|
||||||
buildablespringpad = toplayer.buildablespringpad;
|
buildablespringpad = toplayer.buildablespringpad;
|
||||||
toarmed = 0;
|
toarmed = 0;
|
||||||
if ( isDefined( buildablespringpad ) )
|
|
||||||
{
|
if ( isdefined( buildablespringpad ) )
|
||||||
if ( isDefined( buildablespringpad.is_armed ) )
|
toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed;
|
||||||
{
|
|
||||||
toarmed = buildablespringpad.is_armed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
springpad_kills = toplayer.springpad_kills;
|
springpad_kills = toplayer.springpad_kills;
|
||||||
fromarmed = 0;
|
fromarmed = 0;
|
||||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
|
||||||
{
|
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||||
if ( isDefined( fromplayer.buildablespringpad.is_armed ) )
|
fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed;
|
||||||
{
|
|
||||||
fromarmed = fromplayer.buildablespringpad.is_armed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
||||||
toplayer.buildablespringpad.original_owner = toplayer;
|
toplayer.buildablespringpad.original_owner = toplayer;
|
||||||
toplayer.buildablespringpad.owner = toplayer;
|
toplayer.buildablespringpad.owner = toplayer;
|
||||||
@ -176,25 +181,23 @@ transferspringpad( fromplayer, toplayer )
|
|||||||
fromplayer.buildablespringpad = buildablespringpad;
|
fromplayer.buildablespringpad = buildablespringpad;
|
||||||
fromplayer.springpad_kills = springpad_kills;
|
fromplayer.springpad_kills = springpad_kills;
|
||||||
fromplayer notify( "equip_springpad_zm_taken" );
|
fromplayer notify( "equip_springpad_zm_taken" );
|
||||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
|
||||||
|
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||||
{
|
{
|
||||||
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
||||||
fromplayer.buildablespringpad.original_owner = fromplayer;
|
fromplayer.buildablespringpad.original_owner = fromplayer;
|
||||||
fromplayer.buildablespringpad.owner = fromplayer;
|
fromplayer.buildablespringpad.owner = fromplayer;
|
||||||
}
|
}
|
||||||
else
|
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 )
|
springpad_in_range( delta, origin, radius )
|
||||||
{
|
{
|
||||||
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
|
if ( distancesquared( self.target.origin, origin ) < radius * radius )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_power_on( origin, radius )
|
springpad_power_on( origin, radius )
|
||||||
@ -202,12 +205,11 @@ springpad_power_on( origin, radius )
|
|||||||
/#
|
/#
|
||||||
println( "^1ZM POWER: trap on\n" );
|
println( "^1ZM POWER: trap on\n" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( self.target ) )
|
if ( !isdefined( self.target ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.target.power_on = 1;
|
self.target.power_on = 1;
|
||||||
self.target.power_on_time = getTime();
|
self.target.power_on_time = gettime();
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_power_off( origin, radius )
|
springpad_power_off( origin, radius )
|
||||||
@ -215,10 +217,9 @@ springpad_power_off( origin, radius )
|
|||||||
/#
|
/#
|
||||||
println( "^1ZM POWER: trap off\n" );
|
println( "^1ZM POWER: trap off\n" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( self.target ) )
|
if ( !isdefined( self.target ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.target.power_on = 0;
|
self.target.power_on = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,45 +230,50 @@ startspringpaddeploy( weapon, armed )
|
|||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
self thread watchforcleanup();
|
self thread watchforcleanup();
|
||||||
electricradius = 45;
|
electricradius = 45;
|
||||||
if ( isDefined( self.springpad_kills ) )
|
|
||||||
|
if ( isdefined( self.springpad_kills ) )
|
||||||
{
|
{
|
||||||
weapon.springpad_kills = self.springpad_kills;
|
weapon.springpad_kills = self.springpad_kills;
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
}
|
}
|
||||||
if ( !isDefined( weapon.springpad_kills ) )
|
|
||||||
{
|
if ( !isdefined( weapon.springpad_kills ) )
|
||||||
weapon.springpad_kills = 0;
|
weapon.springpad_kills = 0;
|
||||||
}
|
|
||||||
if ( isDefined( weapon ) )
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
weapon thread debugspringpad( electricradius );
|
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;
|
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
|
else
|
||||||
{
|
|
||||||
weapon.power_on = 1;
|
weapon.power_on = 1;
|
||||||
}
|
|
||||||
if ( !weapon.power_on )
|
if ( !weapon.power_on )
|
||||||
{
|
|
||||||
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
||||||
}
|
|
||||||
self thread springpadthink( weapon, electricradius, armed );
|
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" );
|
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 playsound( "wpn_zmb_electrap_stop" );
|
||||||
level.springpad_sound_ent delete();
|
level.springpad_sound_ent delete();
|
||||||
level.springpad_sound_ent = undefined;
|
level.springpad_sound_ent = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self notify( "springpad_cleanup" );
|
self notify( "springpad_cleanup" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -277,6 +283,8 @@ init_animtree()
|
|||||||
scriptmodelsuseanimtree( -1 );
|
scriptmodelsuseanimtree( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("zombie_springpad");
|
||||||
|
|
||||||
springpad_animate( weapon, armed )
|
springpad_animate( weapon, armed )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
@ -289,12 +297,13 @@ springpad_animate( weapon, armed )
|
|||||||
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
||||||
weapon thread springpad_audio();
|
weapon thread springpad_audio();
|
||||||
prearmed = 0;
|
prearmed = 0;
|
||||||
if ( isDefined( armed ) && armed )
|
|
||||||
{
|
if ( isdefined( armed ) && armed )
|
||||||
prearmed = 1;
|
prearmed = 1;
|
||||||
}
|
|
||||||
fast_reset = 0;
|
fast_reset = 0;
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
if ( !prearmed )
|
if ( !prearmed )
|
||||||
{
|
{
|
||||||
@ -302,32 +311,35 @@ springpad_animate( weapon, armed )
|
|||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||||
weapon thread playspringpadresetaudio( f_animlength );
|
weapon thread playspringpadresetaudio( f_animlength );
|
||||||
wait f_animlength;
|
wait( f_animlength );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
||||||
weapon thread playspringpadresetaudio( r_animlength );
|
weapon thread playspringpadresetaudio( r_animlength );
|
||||||
wait r_animlength;
|
wait( r_animlength );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
prearmed = 0;
|
prearmed = 0;
|
||||||
weapon notify( "armed" );
|
weapon notify( "armed" );
|
||||||
fast_reset = 0;
|
fast_reset = 0;
|
||||||
if ( isDefined( weapon ) )
|
|
||||||
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
||||||
|
|
||||||
weapon waittill( "fling", fast );
|
weapon waittill( "fling", fast );
|
||||||
|
|
||||||
fast_reset = fast;
|
fast_reset = fast;
|
||||||
}
|
}
|
||||||
if ( isDefined( weapon ) )
|
|
||||||
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
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 = spawn( "script_origin", self.origin );
|
||||||
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
||||||
self thread deleteentwhensounddone( time, ent );
|
self thread deleteentwhensounddone( time, ent );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteentwhensounddone( time, ent )
|
deleteentwhensounddone( time, ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait time;
|
wait( time );
|
||||||
self notify( "springpadAudioCleanup" );
|
self notify( "springpadAudioCleanup" );
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
@ -354,7 +368,9 @@ springpad_audio()
|
|||||||
{
|
{
|
||||||
loop_ent = spawn( "script_origin", self.origin );
|
loop_ent = spawn( "script_origin", self.origin );
|
||||||
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
loop_ent delete();
|
loop_ent delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,7 +378,8 @@ springpad_fx( weapon )
|
|||||||
{
|
{
|
||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
||||||
wait 1;
|
wait 1;
|
||||||
@ -377,106 +394,106 @@ springpadthink( weapon, electricradius, armed )
|
|||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
radiussquared = electricradius * electricradius;
|
radiussquared = electricradius * electricradius;
|
||||||
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
|
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.angles = weapon.angles;
|
||||||
trigger enablelinkto();
|
trigger enablelinkto();
|
||||||
trigger linkto( weapon );
|
trigger linkto( weapon );
|
||||||
weapon.trigger = trigger;
|
weapon.trigger = trigger;
|
||||||
/#
|
/#
|
||||||
trigger.extent = ( 24, 24, 16 );
|
trigger.extent = ( 24.0, 24.0, 16.0 );
|
||||||
#/
|
#/
|
||||||
weapon thread springpadthinkcleanup( trigger );
|
weapon thread springpadthinkcleanup( trigger );
|
||||||
direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) );
|
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
|
||||||
direction_vector = vectorScale( direction_forward, 1024 );
|
direction_vector = vectorscale( direction_forward, 1024 );
|
||||||
direction_origin = weapon.origin + direction_vector;
|
direction_origin = weapon.origin + direction_vector;
|
||||||
home_angles = weapon.angles;
|
home_angles = weapon.angles;
|
||||||
weapon.is_armed = 0;
|
weapon.is_armed = 0;
|
||||||
self thread springpad_fx( weapon );
|
self thread springpad_fx( weapon );
|
||||||
self thread springpad_animate( weapon, armed );
|
self thread springpad_animate( weapon, armed );
|
||||||
|
|
||||||
weapon waittill( "armed" );
|
weapon waittill( "armed" );
|
||||||
|
|
||||||
weapon.is_armed = 1;
|
weapon.is_armed = 1;
|
||||||
weapon.fling_targets = [];
|
weapon.fling_targets = [];
|
||||||
self thread targeting_thread( weapon, trigger );
|
self thread targeting_thread( weapon, trigger );
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
wait_for_targets( 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.is_armed = 0;
|
||||||
weapon.zombies_only = 1;
|
weapon.zombies_only = 1;
|
||||||
_a490 = weapon.fling_targets;
|
|
||||||
_k490 = getFirstArrayKey( _a490 );
|
foreach ( ent in weapon.fling_targets )
|
||||||
while ( isDefined( _k490 ) )
|
|
||||||
{
|
{
|
||||||
ent = _a490[ _k490 ];
|
|
||||||
if ( isplayer( ent ) )
|
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( ent ) && isdefined( ent.custom_springpad_fling ) )
|
||||||
if ( !isDefined( self.num_zombies_flung ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( self.num_zombies_flung ) )
|
||||||
self.num_zombies_flung = 0;
|
self.num_zombies_flung = 0;
|
||||||
}
|
|
||||||
self.num_zombies_flung++;
|
self.num_zombies_flung++;
|
||||||
self notify( "zombie_flung" );
|
self notify( "zombie_flung" );
|
||||||
ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
|
ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( isdefined( ent ) )
|
||||||
if ( isDefined( ent ) )
|
|
||||||
{
|
|
||||||
if ( !isDefined( self.num_zombies_flung ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( self.num_zombies_flung ) )
|
||||||
self.num_zombies_flung = 0;
|
self.num_zombies_flung = 0;
|
||||||
}
|
|
||||||
self.num_zombies_flung++;
|
self.num_zombies_flung++;
|
||||||
self notify( "zombie_flung" );
|
self notify( "zombie_flung" );
|
||||||
if ( !isDefined( weapon.fling_scaler ) )
|
|
||||||
{
|
if ( !isdefined( weapon.fling_scaler ) )
|
||||||
weapon.fling_scaler = 1;
|
weapon.fling_scaler = 1;
|
||||||
}
|
|
||||||
if ( isDefined( weapon.direction_vec_override ) )
|
if ( isdefined( weapon.direction_vec_override ) )
|
||||||
{
|
|
||||||
direction_vector = weapon.direction_vec_override;
|
direction_vector = weapon.direction_vec_override;
|
||||||
}
|
|
||||||
ent dodamage( ent.health + 666, ent.origin );
|
ent dodamage( ent.health + 666, ent.origin );
|
||||||
ent startragdoll();
|
ent startragdoll();
|
||||||
ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler );
|
ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
|
||||||
weapon.springpad_kills++;
|
weapon.springpad_kills++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k490 = getNextArrayKey( _a490, _k490 );
|
|
||||||
}
|
|
||||||
if ( weapon.springpad_kills >= 28 )
|
if ( weapon.springpad_kills >= 28 )
|
||||||
{
|
|
||||||
self thread springpad_expired( weapon );
|
self thread springpad_expired( weapon );
|
||||||
}
|
|
||||||
weapon.fling_targets = [];
|
weapon.fling_targets = [];
|
||||||
|
|
||||||
weapon waittill( "armed" );
|
weapon waittill( "armed" );
|
||||||
|
|
||||||
weapon.is_armed = 1;
|
weapon.is_armed = 1;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_targets( weapon )
|
wait_for_targets( weapon )
|
||||||
{
|
{
|
||||||
weapon endon( "hi_priority_target" );
|
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;
|
return;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,64 +504,50 @@ targeting_thread( weapon, trigger )
|
|||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
weapon.zombies_only = 1;
|
weapon.zombies_only = 1;
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
if ( weapon.is_armed )
|
if ( weapon.is_armed )
|
||||||
{
|
{
|
||||||
zombies = getaiarray( level.zombie_team );
|
zombies = getaiarray( level.zombie_team );
|
||||||
_a577 = zombies;
|
|
||||||
_k577 = getFirstArrayKey( _a577 );
|
foreach ( zombie in zombies )
|
||||||
while ( isDefined( _k577 ) )
|
|
||||||
{
|
|
||||||
zombie = _a577[ _k577 ];
|
|
||||||
if ( !isDefined( zombie ) || !isalive( zombie ) )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( zombie ) || !isalive( zombie ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||||
|
continue;
|
||||||
|
|
||||||
if ( zombie istouching( trigger ) )
|
if ( zombie istouching( trigger ) )
|
||||||
{
|
|
||||||
weapon springpad_add_fling_ent( zombie );
|
weapon springpad_add_fling_ent( zombie );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
_k577 = getNextArrayKey( _a577, _k577 );
|
|
||||||
}
|
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a605 = players;
|
|
||||||
_k605 = getFirstArrayKey( _a605 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k605 ) )
|
|
||||||
{
|
{
|
||||||
player = _a605[ _k605 ];
|
|
||||||
if ( is_player_valid( player ) && player istouching( trigger ) )
|
if ( is_player_valid( player ) && player istouching( trigger ) )
|
||||||
{
|
{
|
||||||
weapon springpad_add_fling_ent( player );
|
weapon springpad_add_fling_ent( player );
|
||||||
weapon.zombies_only = 0;
|
weapon.zombies_only = 0;
|
||||||
}
|
}
|
||||||
_k605 = getNextArrayKey( _a605, _k605 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !weapon.zombies_only )
|
if ( !weapon.zombies_only )
|
||||||
{
|
|
||||||
weapon notify( "hi_priority_target" );
|
weapon notify( "hi_priority_target" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_fling_attacker( ent )
|
springpad_fling_attacker( ent )
|
||||||
{
|
{
|
||||||
springpad_add_fling_ent( ent );
|
springpad_add_fling_ent( ent );
|
||||||
if ( isDefined( level.springpad_attack_delay ) )
|
|
||||||
{
|
if ( isdefined( level.springpad_attack_delay ) )
|
||||||
wait level.springpad_attack_delay;
|
wait( level.springpad_attack_delay );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_add_fling_ent( ent )
|
springpad_add_fling_ent( ent )
|
||||||
@ -554,29 +557,30 @@ springpad_add_fling_ent( ent )
|
|||||||
|
|
||||||
springpad_expired( weapon )
|
springpad_expired( weapon )
|
||||||
{
|
{
|
||||||
weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 );
|
weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||||
self.springpad_kills = 0;
|
self.springpad_kills = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
player_fling( origin, angles, velocity, weapon )
|
player_fling( origin, angles, velocity, weapon )
|
||||||
{
|
{
|
||||||
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
||||||
aorigin = ( origin + torigin ) * 0,5;
|
aorigin = ( origin + torigin ) * 0.5;
|
||||||
trace = physicstrace( origin, torigin, vectorScale( ( 0, 0, 1 ), 15 ), ( 15, 15, 30 ), self );
|
trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
|
||||||
if ( isDefined( trace ) || !isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 )
|
|
||||||
{
|
if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 )
|
||||||
if ( !isDefined( weapon.springpad_kills ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( weapon.springpad_kills ) )
|
||||||
weapon.springpad_kills = 0;
|
weapon.springpad_kills = 0;
|
||||||
}
|
|
||||||
weapon.springpad_kills += 5;
|
weapon.springpad_kills += 5;
|
||||||
|
|
||||||
if ( weapon.springpad_kills >= 28 )
|
if ( weapon.springpad_kills >= 28 )
|
||||||
{
|
|
||||||
weapon.owner thread springpad_expired( weapon );
|
weapon.owner thread springpad_expired( weapon );
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self setorigin( aorigin );
|
self setorigin( aorigin );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self setvelocity( velocity );
|
self setvelocity( velocity );
|
||||||
@ -585,47 +589,44 @@ player_fling( origin, angles, velocity, weapon )
|
|||||||
springpadthinkcleanup( trigger )
|
springpadthinkcleanup( trigger )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
if ( isdefined( trigger ) )
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
debugspringpad( radius )
|
debugspringpad( radius )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
color_armed = ( 0, 0, 1 );
|
color_armed = ( 0, 1, 0 );
|
||||||
color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 );
|
color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 );
|
||||||
while ( isDefined( self ) )
|
|
||||||
|
while ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
if ( getDvarInt( #"EB512CB7" ) )
|
if ( getdvarint( _hash_EB512CB7 ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.trigger ) )
|
if ( isdefined( self.trigger ) )
|
||||||
{
|
{
|
||||||
color = color_unarmed;
|
color = color_unarmed;
|
||||||
if ( isDefined( self.is_armed ) && self.is_armed )
|
|
||||||
{
|
if ( isdefined( self.is_armed ) && self.is_armed )
|
||||||
color = color_armed;
|
color = color_armed;
|
||||||
}
|
|
||||||
vec = self.trigger.extent;
|
vec = self.trigger.extent;
|
||||||
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
||||||
}
|
}
|
||||||
color = ( 0, 0, 1 );
|
|
||||||
|
color = ( 0, 1, 0 );
|
||||||
text = "";
|
text = "";
|
||||||
if ( isDefined( self.springpad_kills ) )
|
|
||||||
{
|
if ( isdefined( self.springpad_kills ) )
|
||||||
text = "" + 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 + "]";
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include common_scripts/utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/_utility;
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_turned;
|
||||||
|
|
||||||
register_game_module()
|
register_game_module()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onstartgametype( name )
|
onstartgametype( name )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onstartcleansedgametype()
|
onstartcleansedgametype()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
#include maps/mp/zombies/_zm_game_module_utility;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include common_scripts/utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/_utility;
|
#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()
|
register_game_module()
|
||||||
{
|
{
|
||||||
level.game_module_grief_index = 9;
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module_meat_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/zmeat;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio_announcer;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_game_module_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_game_module_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio_announcer;
|
||||||
|
#include maps\mp\gametypes_zm\zmeat;
|
||||||
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
|
|
||||||
award_grenades_for_team( team )
|
award_grenades_for_team( team )
|
||||||
{
|
{
|
||||||
players = get_players();
|
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 )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lethal_grenade = players[i] get_player_lethal_grenade();
|
lethal_grenade = players[i] get_player_lethal_grenade();
|
||||||
players[i] giveweapon( lethal_grenade );
|
players[i] giveweapon( lethal_grenade );
|
||||||
players[i] setweaponammoclip( lethal_grenade, 4 );
|
players[i] setweaponammoclip( lethal_grenade, 4 );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_players_on_meat_team( team )
|
get_players_on_meat_team( team )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
players_on_team = [];
|
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 )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
players_on_team[players_on_team.size] = players[i];
|
players_on_team[players_on_team.size] = players[i];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return players_on_team;
|
return players_on_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,56 +44,44 @@ get_alive_players_on_meat_team( team )
|
|||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
players_on_team = [];
|
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 )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
|
||||||
if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
players_on_team[players_on_team.size] = players[i];
|
players_on_team[players_on_team.size] = players[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return players_on_team;
|
return players_on_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
init_minigun_ring()
|
init_minigun_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._minigun_ring ) )
|
if ( isdefined( level._minigun_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._minigun_ring.angles = ring_pos.angles;
|
level._minigun_ring.angles = ring_pos.angles;
|
||||||
level._minigun_ring setmodel( ring_pos.script_parameters );
|
level._minigun_ring setmodel( ring_pos.script_parameters );
|
||||||
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
|
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 );
|
level._minigun_ring_clip linkto( level._minigun_ring );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
||||||
}
|
|
||||||
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
|
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 enablelinkto();
|
||||||
level._minigun_ring_trig linkto( level._minigun_ring );
|
level._minigun_ring_trig linkto( level._minigun_ring );
|
||||||
@ -113,41 +92,38 @@ init_minigun_ring()
|
|||||||
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
||||||
}
|
|
||||||
level._minigun_ring thread move_ring( ring_pos );
|
level._minigun_ring thread move_ring( ring_pos );
|
||||||
level._minigun_ring thread rotate_ring( 1 );
|
level._minigun_ring thread rotate_ring( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_ammo_ring()
|
init_ammo_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._ammo_ring ) )
|
if ( isdefined( level._ammo_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
name = level._meat_location + "_meat_ammo";
|
name = level._meat_location + "_meat_ammo";
|
||||||
ring_pos = getstruct( name, "script_noteworthy" );
|
ring_pos = getstruct( name, "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._ammo_ring.angles = ring_pos.angles;
|
level._ammo_ring.angles = ring_pos.angles;
|
||||||
level._ammo_ring setmodel( ring_pos.script_parameters );
|
level._ammo_ring setmodel( ring_pos.script_parameters );
|
||||||
name = level._meat_location + "_meat_ammo_clip";
|
name = level._meat_location + "_meat_ammo_clip";
|
||||||
level._ammo_ring_clip = getent( name, "script_noteworthy" );
|
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 );
|
level._ammo_ring_clip linkto( level._ammo_ring );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
||||||
}
|
|
||||||
name = level._meat_location + "_meat_ammo_trig";
|
name = level._meat_location + "_meat_ammo_trig";
|
||||||
level._ammo_ring_trig = getent( name, "targetname" );
|
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 enablelinkto();
|
||||||
level._ammo_ring_trig linkto( level._ammo_ring );
|
level._ammo_ring_trig linkto( level._ammo_ring );
|
||||||
@ -158,63 +134,66 @@ init_ammo_ring()
|
|||||||
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
||||||
}
|
|
||||||
level._ammo_ring thread move_ring( ring_pos );
|
level._ammo_ring thread move_ring( ring_pos );
|
||||||
level._ammo_ring thread rotate_ring( 1 );
|
level._ammo_ring thread rotate_ring( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_splitter_ring()
|
init_splitter_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._splitter_ring ) )
|
if ( isdefined( level._splitter_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._splitter_ring.angles = ring_pos.angles;
|
level._splitter_ring.angles = ring_pos.angles;
|
||||||
level._splitter_ring setmodel( ring_pos.script_parameters );
|
level._splitter_ring setmodel( ring_pos.script_parameters );
|
||||||
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
|
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" );
|
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_trig1 enablelinkto();
|
||||||
level._splitter_ring_trig2 enablelinkto();
|
level._splitter_ring_trig2 enablelinkto();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
||||||
}
|
|
||||||
level._splitter_ring notsolid();
|
level._splitter_ring notsolid();
|
||||||
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
||||||
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
||||||
level._meat_icon linkto( level._splitter_ring );
|
level._meat_icon linkto( level._splitter_ring );
|
||||||
level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
|
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_trig1 linkto( level._splitter_ring );
|
||||||
level._splitter_ring_trig2 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_trig1, "splitter" );
|
||||||
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level._splitter_ring thread move_ring( ring_pos );
|
level._splitter_ring thread move_ring( ring_pos );
|
||||||
}
|
}
|
||||||
|
|
||||||
ring_toss( trig, type )
|
ring_toss( trig, type )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
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 ) )
|
if ( level.item_meat istouching( trig ) )
|
||||||
{
|
{
|
||||||
@ -223,7 +202,8 @@ ring_toss( trig, type )
|
|||||||
level thread ring_cooldown();
|
level thread ring_cooldown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,27 +233,25 @@ meat_splitter( trig )
|
|||||||
{
|
{
|
||||||
level endon( "meat_grabbed" );
|
level endon( "meat_grabbed" );
|
||||||
level endon( "meat_kicked" );
|
level endon( "meat_kicked" );
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
|
||||||
{
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
exit_trig = getent( trig.target, "targetname" );
|
exit_trig = getent( trig.target, "targetname" );
|
||||||
exit_struct = getstruct( trig.target, "targetname" );
|
exit_struct = getstruct( trig.target, "targetname" );
|
||||||
while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
|
||||||
{
|
while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
playfx( level._effect["fw_burst"], exit_trig.origin );
|
playfx( level._effect["fw_burst"], exit_trig.origin );
|
||||||
flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) );
|
flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) );
|
||||||
velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) );
|
velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) );
|
||||||
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
||||||
velocity2 = ( 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 );
|
velocity3 = ( velocity[0], velocity[1], 100 );
|
||||||
@ -284,12 +262,12 @@ meat_splitter( trig )
|
|||||||
player._spawning_meat = 1;
|
player._spawning_meat = 1;
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
thread split_meat( player, org, velocity1, velocity2, velocity );
|
thread split_meat( player, org, velocity1, velocity2, velocity );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
while ( isDefined( level.splitting_meat ) && level.splitting_meat )
|
|
||||||
{
|
while ( isdefined( level.splitting_meat ) && level.splitting_meat )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
player._spawning_meat = 0;
|
player._spawning_meat = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,78 +282,69 @@ split_meat( player, org, vel1, vel2, vel3 )
|
|||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
||||||
real_meat = random( level._fake_meats );
|
real_meat = random( level._fake_meats );
|
||||||
_a330 = level._fake_meats;
|
|
||||||
_k330 = getFirstArrayKey( _a330 );
|
foreach ( meat in level._fake_meats )
|
||||||
while ( isDefined( _k330 ) )
|
|
||||||
{
|
{
|
||||||
meat = _a330[ _k330 ];
|
|
||||||
if ( real_meat != meat )
|
if ( real_meat != meat )
|
||||||
{
|
{
|
||||||
meat._fake_meat = 1;
|
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;
|
meat._fake_meat = 0;
|
||||||
level.item_meat = meat;
|
level.item_meat = meat;
|
||||||
}
|
}
|
||||||
_k330 = getNextArrayKey( _a330, _k330 );
|
|
||||||
}
|
|
||||||
level.splitting_meat = 0;
|
level.splitting_meat = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
minigun_prize( trig )
|
minigun_prize( trig )
|
||||||
{
|
{
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level thread minigun_toss_cooldown();
|
level thread minigun_toss_cooldown();
|
||||||
|
|
||||||
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" );
|
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_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 thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
ammo_prize( trig )
|
ammo_prize( trig )
|
||||||
{
|
{
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
playfx( level._effect["poltergeist"], trig.origin );
|
playfx( level._effect["poltergeist"], trig.origin );
|
||||||
level thread ammo_toss_cooldown();
|
level thread ammo_toss_cooldown();
|
||||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" );
|
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_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 thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
minigun_toss_cooldown()
|
minigun_toss_cooldown()
|
||||||
{
|
{
|
||||||
level._minigun_toss_cooldown = 1;
|
level._minigun_toss_cooldown = 1;
|
||||||
if ( isDefined( level._minigun_icon ) )
|
|
||||||
{
|
if ( isdefined( level._minigun_icon ) )
|
||||||
level._minigun_icon delete();
|
level._minigun_icon delete();
|
||||||
}
|
|
||||||
waittill_any_or_timeout( 120, "meat_end" );
|
waittill_any_or_timeout( 120, "meat_end" );
|
||||||
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
||||||
level._minigun_icon = spawn( "script_model", 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()
|
ammo_toss_cooldown()
|
||||||
{
|
{
|
||||||
level._ammo_toss_cooldown = 1;
|
level._ammo_toss_cooldown = 1;
|
||||||
if ( isDefined( level._ammo_icon ) )
|
|
||||||
{
|
if ( isdefined( level._ammo_icon ) )
|
||||||
level._ammo_icon delete();
|
level._ammo_icon delete();
|
||||||
}
|
|
||||||
waittill_any_or_timeout( 60, "meat_end" );
|
waittill_any_or_timeout( 60, "meat_end" );
|
||||||
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
||||||
level._ammo_icon = spawn( "script_model", 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" );
|
level endon( "meat_end" );
|
||||||
encounters_team = undefined;
|
encounters_team = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
while ( isDefined( level._checking_for_save ) && level._checking_for_save )
|
|
||||||
{
|
while ( isdefined( level._checking_for_save ) && level._checking_for_save )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
alive_team_players = get_alive_players_on_meat_team( team );
|
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;
|
encounters_team = alive_team_players[0]._encounters_team;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ( !isDefined( encounters_team ) )
|
|
||||||
{
|
if ( !isdefined( encounters_team ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
winning_team = "A";
|
winning_team = "A";
|
||||||
|
|
||||||
if ( encounters_team == "A" )
|
if ( encounters_team == "A" )
|
||||||
{
|
|
||||||
winning_team = "B";
|
winning_team = "B";
|
||||||
}
|
|
||||||
level notify( "meat_end" );
|
level notify( "meat_end", winning_team );
|
||||||
}
|
}
|
||||||
|
|
||||||
check_should_save_player( team )
|
check_should_save_player( team )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level._meat_on_team ) )
|
if ( !isdefined( level._meat_on_team ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
level._checking_for_save = 1;
|
level._checking_for_save = 1;
|
||||||
players = get_players_on_meat_team( team );
|
players = get_players_on_meat_team( team );
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
player = players[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 )
|
if ( level._meat_on_team != player._meat_team )
|
||||||
{
|
|
||||||
break;
|
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;
|
break;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( !isdefined( player ) )
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
level._checking_for_save = 0;
|
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;
|
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 );
|
level thread revive_saved_player( player );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_save_player()
|
watch_save_player()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level._meat_on_team ) )
|
if ( !isdefined( level._meat_on_team ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||||
if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
return false;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
level._checking_for_save = 1;
|
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 )
|
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 )
|
||||||
{
|
{
|
||||||
}
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
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() )
|
|
||||||
{
|
{
|
||||||
level thread revive_saved_player( self );
|
level thread revive_saved_player( self );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
revive_saved_player( player )
|
revive_saved_player( player )
|
||||||
@ -525,11 +495,11 @@ revive_saved_player( player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
||||||
player playsound( level.zmb_laugh_alias );
|
player playsound( level.zmb_laugh_alias );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
playfx( level._effect["poltergeist"], player.origin );
|
playfx( level._effect["poltergeist"], player.origin );
|
||||||
playsoundatposition( "zmb_bolt", player.origin );
|
playsoundatposition( "zmb_bolt", player.origin );
|
||||||
earthquake( 0,5, 0,75, player.origin, 1000 );
|
earthquake( 0.5, 0.75, player.origin, 1000 );
|
||||||
player thread maps/mp/zombies/_zm_laststand::auto_revive( player );
|
player thread maps\mp\zombies\_zm_laststand::auto_revive( player );
|
||||||
player._saved_by_throw++;
|
player._saved_by_throw++;
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
}
|
}
|
||||||
@ -544,9 +514,9 @@ item_meat_spawn( origin )
|
|||||||
org = origin;
|
org = origin;
|
||||||
player = get_players()[0];
|
player = get_players()[0];
|
||||||
player._spawning_meat = 1;
|
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 );
|
playsoundatposition( "zmb_spawn_powerup", org );
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
player._spawning_meat = undefined;
|
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_name", "item_head_zm" );
|
||||||
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
||||||
}
|
}
|
||||||
|
|
||||||
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
||||||
set_gamemode_var_once( "start_item_meat_name", 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" ) );
|
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
|
||||||
@ -576,40 +547,45 @@ meat_intro( launch_spot )
|
|||||||
level thread multi_launch( launch_spot );
|
level thread multi_launch( launch_spot );
|
||||||
launch_meat( launch_spot );
|
launch_meat( launch_spot );
|
||||||
drop_meat( level._meat_start_point );
|
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 )
|
launch_meat( launch_spot )
|
||||||
{
|
{
|
||||||
level waittill( "launch_meat" );
|
level waittill( "launch_meat" );
|
||||||
|
|
||||||
spots = getstructarray( launch_spot, "targetname" );
|
spots = getstructarray( launch_spot, "targetname" );
|
||||||
if ( isDefined( spots ) && spots.size > 0 )
|
|
||||||
|
if ( isdefined( spots ) && spots.size > 0 )
|
||||||
{
|
{
|
||||||
spot = random( spots );
|
spot = random( spots );
|
||||||
meat = spawn( "script_model", spot.origin );
|
meat = spawn( "script_model", spot.origin );
|
||||||
meat setmodel( "tag_origin" );
|
meat setmodel( "tag_origin" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
||||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||||
dest = spot;
|
dest = spot;
|
||||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
|
||||||
|
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||||
{
|
{
|
||||||
new_dest = getstruct( dest.target, "targetname" );
|
new_dest = getstruct( dest.target, "targetname" );
|
||||||
dest = new_dest;
|
dest = new_dest;
|
||||||
dist = distance( new_dest.origin, meat.origin );
|
dist = distance( new_dest.origin, meat.origin );
|
||||||
time = dist / 700;
|
time = dist / 700;
|
||||||
meat moveto( new_dest.origin, time );
|
meat moveto( new_dest.origin, time );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin );
|
playfx( level._effect["fw_burst"], meat.origin );
|
||||||
wait randomfloatrange( 0,2, 0,5 );
|
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
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" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
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" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin );
|
playfx( level._effect["fw_burst"], meat.origin );
|
||||||
meat delete();
|
meat delete();
|
||||||
@ -619,41 +595,42 @@ launch_meat( launch_spot )
|
|||||||
multi_launch( launch_spot )
|
multi_launch( launch_spot )
|
||||||
{
|
{
|
||||||
spots = getstructarray( launch_spot, "targetname" );
|
spots = getstructarray( launch_spot, "targetname" );
|
||||||
if ( isDefined( spots ) && spots.size > 0 )
|
|
||||||
|
if ( isdefined( spots ) && spots.size > 0 )
|
||||||
{
|
{
|
||||||
x = 0;
|
for ( x = 0; x < 3; x++ )
|
||||||
while ( x < 3 )
|
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < spots.size; i++ )
|
||||||
while ( i < spots.size )
|
|
||||||
{
|
{
|
||||||
delay = randomfloatrange( 0,1, 0,25 );
|
delay = randomfloatrange( 0.1, 0.25 );
|
||||||
level thread fake_launch( spots[i], delay );
|
level thread fake_launch( spots[i], delay );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
wait randomfloatrange( 0,25, 0,75 );
|
|
||||||
|
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||||
|
|
||||||
if ( x > 1 )
|
if ( x > 1 )
|
||||||
|
level notify( "launch_meat" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
|
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||||
level notify( "launch_meat" );
|
level notify( "launch_meat" );
|
||||||
}
|
}
|
||||||
x++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else wait randomfloatrange( 0,25, 0,75 );
|
|
||||||
level notify( "launch_meat" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fake_launch( launch_spot, delay )
|
fake_launch( launch_spot, delay )
|
||||||
{
|
{
|
||||||
wait delay;
|
wait( delay );
|
||||||
wait randomfloatrange( 0,1, 4 );
|
wait( randomfloatrange( 0.1, 4 ) );
|
||||||
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
||||||
meat setmodel( "tag_origin" );
|
meat setmodel( "tag_origin" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
|
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;
|
dest = launch_spot;
|
||||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
|
||||||
|
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||||
{
|
{
|
||||||
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
||||||
new_dest = getstruct( dest.target, "targetname" );
|
new_dest = getstruct( dest.target, "targetname" );
|
||||||
@ -661,8 +638,10 @@ fake_launch( launch_spot, delay )
|
|||||||
dist = distance( new_dest.origin + random_offset, meat.origin );
|
dist = distance( new_dest.origin + random_offset, meat.origin );
|
||||||
time = dist / 700;
|
time = dist / 700;
|
||||||
meat moveto( new_dest.origin + random_offset, time );
|
meat moveto( new_dest.origin + random_offset, time );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_pre_burst"], meat.origin );
|
playfx( level._effect["fw_pre_burst"], meat.origin );
|
||||||
meat delete();
|
meat delete();
|
||||||
@ -670,7 +649,7 @@ fake_launch( launch_spot, delay )
|
|||||||
|
|
||||||
drop_meat( drop_spot )
|
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" );
|
meat setmodel( "tag_origin" );
|
||||||
dist = distance( meat.origin, drop_spot );
|
dist = distance( meat.origin, drop_spot );
|
||||||
time = dist / 400;
|
time = dist / 400;
|
||||||
@ -678,7 +657,9 @@ drop_meat( drop_spot )
|
|||||||
meat moveto( drop_spot, time );
|
meat moveto( drop_spot, time );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
|
|
||||||
playfx( level._effect["fw_impact"], drop_spot );
|
playfx( level._effect["fw_impact"], drop_spot );
|
||||||
level notify( "reset_meat" );
|
level notify( "reset_meat" );
|
||||||
meat delete();
|
meat delete();
|
||||||
|
@ -1,22 +1,24 @@
|
|||||||
#include maps/mp/zombies/_zm_game_module_cleansed;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_turned;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_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()
|
register_game_module()
|
||||||
{
|
{
|
||||||
level.game_module_turned_index = 6;
|
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 )
|
register_turned_match( start_func, end_func, name )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level._registered_turned_matches ) )
|
if ( !isdefined( level._registered_turned_matches ) )
|
||||||
{
|
|
||||||
level._registered_turned_matches = [];
|
level._registered_turned_matches = [];
|
||||||
}
|
|
||||||
match = spawnstruct();
|
match = spawnstruct();
|
||||||
match.match_name = name;
|
match.match_name = name;
|
||||||
match.match_start_func = start_func;
|
match.match_start_func = start_func;
|
||||||
@ -26,17 +28,11 @@ register_turned_match( start_func, end_func, name )
|
|||||||
|
|
||||||
get_registered_turned_match( name )
|
get_registered_turned_match( name )
|
||||||
{
|
{
|
||||||
_a41 = level._registered_turned_matches;
|
foreach ( struct in level._registered_turned_matches )
|
||||||
_k41 = getFirstArrayKey( _a41 );
|
|
||||||
while ( isDefined( _k41 ) )
|
|
||||||
{
|
{
|
||||||
struct = _a41[ _k41 ];
|
|
||||||
if ( struct.match_name == name )
|
if ( struct.match_name == name )
|
||||||
{
|
|
||||||
return struct;
|
return struct;
|
||||||
}
|
}
|
||||||
_k41 = getNextArrayKey( _a41, _k41 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set_current_turned_match( name )
|
set_current_turned_match( name )
|
||||||
@ -51,14 +47,13 @@ get_current_turned_match()
|
|||||||
|
|
||||||
init_zombie_weapon()
|
init_zombie_weapon()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_turned::init();
|
maps\mp\zombies\_zm_turned::init();
|
||||||
}
|
}
|
||||||
|
|
||||||
onpostinitgametype()
|
onpostinitgametype()
|
||||||
{
|
{
|
||||||
if ( level.scr_zm_game_module != level.game_module_turned_index )
|
if ( level.scr_zm_game_module != level.game_module_turned_index )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level thread init_zombie_weapon();
|
level thread init_zombie_weapon();
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#include maps/mp/zombies/_zm_game_module_meat;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module_meat_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_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()
|
init_item_meat()
|
||||||
{
|
{
|
||||||
@ -16,16 +18,14 @@ move_ring( ring )
|
|||||||
positions = getstructarray( ring.target, "targetname" );
|
positions = getstructarray( ring.target, "targetname" );
|
||||||
positions = array_randomize( positions );
|
positions = array_randomize( positions );
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
_a23 = positions;
|
foreach ( position in positions )
|
||||||
_k23 = getFirstArrayKey( _a23 );
|
|
||||||
while ( isDefined( _k23 ) )
|
|
||||||
{
|
{
|
||||||
position = _a23[ _k23 ];
|
|
||||||
self moveto( position.origin, randomintrange( 30, 45 ) );
|
self moveto( position.origin, randomintrange( 30, 45 ) );
|
||||||
|
|
||||||
self waittill( "movedone" );
|
self waittill( "movedone" );
|
||||||
_k23 = getNextArrayKey( _a23, _k23 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -34,11 +34,11 @@ rotate_ring( forward )
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
dir = -360;
|
dir = -360;
|
||||||
|
|
||||||
if ( forward )
|
if ( forward )
|
||||||
{
|
|
||||||
dir = 360;
|
dir = 360;
|
||||||
}
|
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
self rotateyaw( dir, 9 );
|
self rotateyaw( dir, 9 );
|
||||||
wait 9;
|
wait 9;
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
#include maps/mp/zombies/_zm_audio;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_score;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include common_scripts/utility;
|
#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 )
|
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 );
|
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 );
|
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" );
|
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" );
|
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||||
if ( isDefined( knife_model ) )
|
|
||||||
{
|
if ( isdefined( knife_model ) )
|
||||||
knife_model hide();
|
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 );
|
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 );
|
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 = "HINT_WEAPON";
|
||||||
cursor_hint_weapon = weapon_name;
|
cursor_hint_weapon = weapon_name;
|
||||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
weapon_display = get_weapon_display_name( weapon_name );
|
weapon_display = get_weapon_display_name( weapon_name );
|
||||||
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||||
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
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 = "HINT_WEAPON";
|
||||||
cursor_hint_weapon = weapon_name;
|
cursor_hint_weapon = weapon_name;
|
||||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
melee_weapon_triggers[i] usetriggerrequirelookat();
|
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
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 );
|
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 );
|
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 = [];
|
||||||
}
|
|
||||||
level.ballistic_weapon_name[weapon_name] = 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 = [];
|
||||||
}
|
|
||||||
level.ballistic_upgraded_weapon_name[weapon_name] = 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.zombie_weapons[weapon_name] ) )
|
||||||
{
|
|
||||||
if ( isDefined( level.devgui_add_weapon ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.devgui_add_weapon ) )
|
||||||
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
[[ 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 )
|
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;
|
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 = "HINT_WEAPON";
|
||||||
stub.cursor_hint_weapon = weapon_name;
|
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_parm1 = get_weapon_display_name( weapon_name );
|
||||||
stub.hint_parm2 = cost;
|
stub.hint_parm2 = cost;
|
||||||
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
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 = "HINT_WEAPON";
|
||||||
stub.cursor_hint_weapon = weapon_name;
|
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.cursor_hint_weapon = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stub.cost = cost;
|
stub.cost = cost;
|
||||||
stub.weapon_name = weapon_name;
|
stub.weapon_name = weapon_name;
|
||||||
stub.vo_dialog_id = vo_dialog_id;
|
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 )
|
add_stub( stub, weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
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 )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
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 );
|
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 )
|
give_melee_weapon_by_name( weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
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 )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
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 );
|
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 )
|
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.hint_string = hint_string;
|
||||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||||
melee_weapon.flourish_fn = flourish_fn;
|
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[level._melee_weapons.size] = melee_weapon;
|
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
player_can_see_weapon_prompt( weapon_name )
|
player_can_see_weapon_prompt( weapon_name )
|
||||||
{
|
{
|
||||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||||
if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
return false;
|
||||||
{
|
|
||||||
return 0;
|
return true;
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spectator_respawn_all()
|
spectator_respawn_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spectator_respawn( wallbuy_targetname, weapon_name )
|
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < melee_triggers.size )
|
for ( i = 0; i < melee_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
melee_triggers[i] setvisibletoall();
|
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;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
{
|
||||||
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
{
|
|
||||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide_all()
|
trigger_hide_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide( wallbuy_targetname )
|
trigger_hide( wallbuy_targetname )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "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 );
|
melee_triggers[i] setinvisibletoplayer( self );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_any_ballistic_knife()
|
has_any_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_upgraded_ballistic_knife()
|
has_upgraded_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
give_ballistic_knife( weapon_string, upgraded )
|
give_ballistic_knife( weapon_string, upgraded )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_weapon();
|
current_melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( 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 ] ) )
|
|
||||||
{
|
{
|
||||||
|
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];
|
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];
|
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return weapon_string;
|
return weapon_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
change_melee_weapon( weapon_name, current_weapon )
|
change_melee_weapon( weapon_name, current_weapon )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_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 );
|
self takeweapon( current_melee_weapon );
|
||||||
unacquire_weapon_toggle( current_melee_weapon );
|
unacquire_weapon_toggle( current_melee_weapon );
|
||||||
}
|
}
|
||||||
|
|
||||||
self set_player_melee_weapon( weapon_name );
|
self set_player_melee_weapon( weapon_name );
|
||||||
had_ballistic = 0;
|
had_ballistic = 0;
|
||||||
had_ballistic_upgraded = 0;
|
had_ballistic_upgraded = 0;
|
||||||
ballistic_was_primary = 0;
|
ballistic_was_primary = 0;
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
i = 0;
|
|
||||||
while ( i < primaryweapons.size )
|
for ( i = 0; i < primaryweapons.size; i++ )
|
||||||
{
|
{
|
||||||
primary_weapon = primaryweapons[i];
|
primary_weapon = primaryweapons[i];
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||||
{
|
{
|
||||||
had_ballistic = 1;
|
had_ballistic = 1;
|
||||||
|
|
||||||
if ( primary_weapon == current_weapon )
|
if ( primary_weapon == current_weapon )
|
||||||
{
|
|
||||||
ballistic_was_primary = 1;
|
ballistic_was_primary = 1;
|
||||||
}
|
|
||||||
self notify( "zmb_lost_knife" );
|
self notify( "zmb_lost_knife" );
|
||||||
self takeweapon( primary_weapon );
|
self takeweapon( primary_weapon );
|
||||||
unacquire_weapon_toggle( primary_weapon );
|
unacquire_weapon_toggle( primary_weapon );
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||||
{
|
|
||||||
had_ballistic_upgraded = 1;
|
had_ballistic_upgraded = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if ( had_ballistic )
|
if ( had_ballistic )
|
||||||
{
|
{
|
||||||
if ( had_ballistic_upgraded )
|
if ( had_ballistic_upgraded )
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
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
|
else
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
current_weapon = new_ballistic;
|
||||||
}
|
|
||||||
self giveweapon( new_ballistic, 0 );
|
self giveweapon( new_ballistic, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_weapon;
|
return current_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
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;
|
self.first_time_triggered = 0;
|
||||||
while ( isDefined( self.stub ) )
|
|
||||||
|
if ( isdefined( self.stub ) )
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
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;
|
self.first_time_triggered = self.stub.first_time_triggered;
|
||||||
}
|
|
||||||
weapon_name = self.stub.weapon_name;
|
weapon_name = self.stub.weapon_name;
|
||||||
cost = self.stub.cost;
|
cost = self.stub.cost;
|
||||||
flourish_fn = self.stub.flourish_fn;
|
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_weapon_name = self.stub.ballistic_weapon_name;
|
||||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||||
players = getplayers();
|
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;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
|
||||||
{
|
{
|
||||||
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
{
|
|
||||||
self setinvisibletoplayer( players[i] );
|
self setinvisibletoplayer( players[i] );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( !is_player_valid( player ) )
|
if ( !is_player_valid( player ) )
|
||||||
{
|
{
|
||||||
player thread ignore_triggers( 0,5 );
|
player thread ignore_triggers( 0.5 );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player in_revive_trigger() )
|
|
||||||
|
if ( player in_revive_trigger() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player isthrowinggrenade() )
|
|
||||||
|
if ( player isthrowinggrenade() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player.is_drinking > 0 )
|
|
||||||
|
if ( player.is_drinking > 0 )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( player isswitchingweapons() )
|
if ( player isswitchingweapons() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
break;
|
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;
|
wait 0.1;
|
||||||
break;
|
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;
|
||||||
{
|
continue;
|
||||||
wait 0,1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
player_has_weapon = player hasweapon( weapon_name );
|
player_has_weapon = player hasweapon( weapon_name );
|
||||||
|
|
||||||
if ( !player_has_weapon )
|
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 ( player.score >= cost )
|
||||||
{
|
{
|
||||||
if ( self.first_time_triggered == 0 )
|
if ( self.first_time_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread melee_weapon_show( player );
|
model thread melee_weapon_show( player );
|
||||||
}
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( self.clientfieldname ) )
|
|
||||||
{
|
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
}
|
|
||||||
}
|
|
||||||
self.first_time_triggered = 1;
|
self.first_time_triggered = 1;
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.stub.first_time_triggered = 1;
|
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" );
|
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 );
|
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
play_sound_on_ent( "no_purchase" );
|
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 );
|
self setinvisibletoplayer( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
melee_weapon_show( player )
|
melee_weapon_show( player )
|
||||||
{
|
{
|
||||||
player_angles = vectorToAngle( player.origin - self.origin );
|
player_angles = vectortoangles( player.origin - self.origin );
|
||||||
player_yaw = player_angles[1];
|
player_yaw = player_angles[1];
|
||||||
weapon_yaw = self.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 )
|
if ( yaw_diff > 0 )
|
||||||
{
|
|
||||||
yaw = weapon_yaw - 90;
|
yaw = weapon_yaw - 90;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
yaw = weapon_yaw + 90;
|
yaw = weapon_yaw + 90;
|
||||||
}
|
|
||||||
self.og_origin = self.origin;
|
self.og_origin = self.origin;
|
||||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
self show();
|
self show();
|
||||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||||
time = 1;
|
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 )
|
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 ]]();
|
self thread [[ flourish_fn ]]();
|
||||||
}
|
|
||||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
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 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 );
|
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;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
{
|
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( trigger ) )
|
||||||
trigger setinvisibletoplayer( self );
|
trigger setinvisibletoplayer( self );
|
||||||
}
|
|
||||||
self trigger_hide_all();
|
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();
|
self enable_player_move_states();
|
||||||
weapon = flourish_weapon_name;
|
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 takeweapon( weapon );
|
||||||
self.lastactiveweapon = "none";
|
self.lastactiveweapon = "none";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self takeweapon( weapon );
|
self takeweapon( weapon );
|
||||||
self giveweapon( weapon_name );
|
self giveweapon( weapon_name );
|
||||||
gun = change_melee_weapon( weapon_name, gun );
|
gun = change_melee_weapon( weapon_name, gun );
|
||||||
|
|
||||||
if ( self hasweapon( "knife_zm" ) )
|
if ( self hasweapon( "knife_zm" ) )
|
||||||
{
|
|
||||||
self takeweapon( "knife_zm" );
|
self takeweapon( "knife_zm" );
|
||||||
}
|
|
||||||
if ( self is_multiple_drinking() )
|
if ( self is_multiple_drinking() )
|
||||||
{
|
{
|
||||||
self decrement_is_drinking();
|
self decrement_is_drinking();
|
||||||
@ -602,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||||
{
|
|
||||||
self switchtoweapon( gun );
|
self switchtoweapon( gun );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
|
||||||
{
|
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||||
self switchtoweapon( primaryweapons[0] );
|
self switchtoweapon( primaryweapons[0] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self waittill( "weapon_change_complete" );
|
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();
|
self decrement_is_drinking();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,23 +1,25 @@
|
|||||||
#include maps/mp/_visionset_mgr;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_perks;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_net;
|
||||||
|
#include maps\mp\zombies\_zm_perks;
|
||||||
|
#include maps\mp\_visionset_mgr;
|
||||||
|
|
||||||
enable_divetonuke_perk_for_level()
|
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_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_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_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_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_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_divetonuke()
|
init_divetonuke()
|
||||||
{
|
{
|
||||||
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
|
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" );
|
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_radius", 300 );
|
||||||
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
|
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
|
||||||
@ -26,11 +28,12 @@ init_divetonuke()
|
|||||||
|
|
||||||
divetonuke_precache()
|
divetonuke_precache()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.divetonuke_precache_override_func ) )
|
if ( isdefined( level.divetonuke_precache_override_func ) )
|
||||||
{
|
{
|
||||||
[[ level.divetonuke_precache_override_func ]]();
|
[[ level.divetonuke_precache_override_func ]]();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
precacheitem( "zombie_perk_bottle_nuke" );
|
precacheitem( "zombie_perk_bottle_nuke" );
|
||||||
precacheshader( "specialty_divetonuke_zombies" );
|
precacheshader( "specialty_divetonuke_zombies" );
|
||||||
precachemodel( "zombie_vending_nuke" );
|
precachemodel( "zombie_vending_nuke" );
|
||||||
@ -61,49 +64,48 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio
|
|||||||
use_trigger.target = "vending_divetonuke";
|
use_trigger.target = "vending_divetonuke";
|
||||||
perk_machine.script_string = "divetonuke_perk";
|
perk_machine.script_string = "divetonuke_perk";
|
||||||
perk_machine.targetname = "vending_divetonuke";
|
perk_machine.targetname = "vending_divetonuke";
|
||||||
if ( isDefined( bump_trigger ) )
|
|
||||||
{
|
if ( isdefined( bump_trigger ) )
|
||||||
bump_trigger.script_string = "divetonuke_perk";
|
bump_trigger.script_string = "divetonuke_perk";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
divetonuke_perk_machine_think()
|
divetonuke_perk_machine_think()
|
||||||
{
|
{
|
||||||
init_divetonuke();
|
init_divetonuke();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
machine = getentarray( "vending_divetonuke", "targetname" );
|
machine = getentarray( "vending_divetonuke", "targetname" );
|
||||||
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
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 );
|
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
array_thread( machine_triggers, ::set_power_on, 0 );
|
array_thread( machine_triggers, ::set_power_on, 0 );
|
||||||
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
||||||
|
|
||||||
level waittill( "divetonuke_on" );
|
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] 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] playsound( "zmb_perks_power_on" );
|
||||||
machine[i] thread perk_fx( "divetonuke_light" );
|
machine[i] thread perk_fx( "divetonuke_light" );
|
||||||
machine[i] thread play_loop_on_machine();
|
machine[i] thread play_loop_on_machine();
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level notify( "specialty_flakjacket_power_on" );
|
level notify( "specialty_flakjacket_power_on" );
|
||||||
array_thread( machine_triggers, ::set_power_on, 1 );
|
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 );
|
array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
|
||||||
}
|
|
||||||
level waittill( "divetonuke_off" );
|
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, level.machine_assets["divetonuke"].power_off_callback );
|
||||||
}
|
|
||||||
array_thread( machine, ::turn_perk_off );
|
array_thread( machine, ::turn_perk_off );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,17 +113,14 @@ divetonuke_perk_machine_think()
|
|||||||
divetonuke_host_migration_func()
|
divetonuke_host_migration_func()
|
||||||
{
|
{
|
||||||
flop = getentarray( "vending_divetonuke", "targetname" );
|
flop = getentarray( "vending_divetonuke", "targetname" );
|
||||||
_a138 = flop;
|
|
||||||
_k138 = getFirstArrayKey( _a138 );
|
foreach ( perk in flop )
|
||||||
while ( isDefined( _k138 ) )
|
|
||||||
{
|
{
|
||||||
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 perk_fx( undefined, 1 );
|
||||||
perk thread perk_fx( "divetonuke_light" );
|
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"];
|
radius = level.zombie_vars["zombie_perk_divetonuke_radius"];
|
||||||
min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"];
|
min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"];
|
||||||
max_damage = level.zombie_vars["zombie_perk_divetonuke_max_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" );
|
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
|
||||||
|
|
||||||
playfx( level._effect["divetonuke_groundhit"], origin );
|
playfx( level._effect["divetonuke_groundhit"], origin );
|
||||||
attacker playsound( "zmb_phdflop_explo" );
|
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;
|
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;
|
// T6 GSC SOURCE
|
||||||
#include common_scripts/utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.ballistic_knife_autorecover ) )
|
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||||
{
|
|
||||||
level.ballistic_knife_autorecover = 1;
|
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_projectile" );
|
||||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -21,9 +22,12 @@ on_spawn( watcher, player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
|
|
||||||
isfriendly = 0;
|
isfriendly = 0;
|
||||||
if ( isDefined( endpos ) )
|
|
||||||
|
if ( isdefined( endpos ) )
|
||||||
{
|
{
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -31,47 +35,38 @@ on_spawn( watcher, player )
|
|||||||
retrievable_model.owner = player;
|
retrievable_model.owner = player;
|
||||||
retrievable_model.angles = angles;
|
retrievable_model.angles = angles;
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model.name = watcher.weapon;
|
||||||
if ( isDefined( prey ) )
|
|
||||||
|
if ( isdefined( prey ) )
|
||||||
{
|
{
|
||||||
if ( isplayer( prey ) && player.team == prey.team )
|
if ( isplayer( prey ) && player.team == prey.team )
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
else if ( isai( prey ) && player.team == prey.team )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isai( prey ) && player.team == prey.team )
|
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !isfriendly )
|
if ( !isfriendly )
|
||||||
{
|
{
|
||||||
retrievable_model linkto( prey, bone );
|
retrievable_model linkto( prey, bone );
|
||||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
||||||
}
|
}
|
||||||
else
|
else if ( isfriendly )
|
||||||
{
|
|
||||||
if ( isfriendly )
|
|
||||||
{
|
{
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
normal = ( 0, 0, 1 );
|
normal = ( 0, 0, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
|
||||||
retrievable_model waittill( "stationary" );
|
retrievable_model waittill( "stationary" );
|
||||||
}
|
|
||||||
retrievable_model thread drop_knives_to_ground( player );
|
retrievable_model thread drop_knives_to_ground( player );
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
retrievable_model thread wait_to_show_glowing_model( 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( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
if ( !isDefined( retrievable_model ) )
|
|
||||||
{
|
if ( !isdefined( retrievable_model ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger_pos = [];
|
trigger_pos = [];
|
||||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
|
||||||
|
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||||
{
|
{
|
||||||
trigger_pos[0] = prey.origin[0];
|
trigger_pos[0] = prey.origin[0];
|
||||||
trigger_pos[1] = prey.origin[1];
|
trigger_pos[1] = prey.origin[1];
|
||||||
@ -104,13 +101,14 @@ on_spawn_retrieve_trigger( watcher, player )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
|
||||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
|
||||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_true( level.ballistic_knife_autorecover ) )
|
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 );
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||||
}
|
}
|
||||||
else
|
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 = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
||||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_trigger.owner = player;
|
pickup_trigger.owner = player;
|
||||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||||
if ( isDefined( hint_string ) )
|
|
||||||
{
|
if ( isdefined( hint_string ) )
|
||||||
pickup_trigger sethintstring( hint_string );
|
pickup_trigger sethintstring( hint_string );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||||
}
|
|
||||||
pickup_trigger setteamfortrigger( player.team );
|
pickup_trigger setteamfortrigger( player.team );
|
||||||
player clientclaimtrigger( pickup_trigger );
|
player clientclaimtrigger( pickup_trigger );
|
||||||
pickup_trigger enablelinkto();
|
pickup_trigger enablelinkto();
|
||||||
if ( isDefined( prey ) )
|
|
||||||
{
|
if ( isdefined( prey ) )
|
||||||
pickup_trigger linkto( prey );
|
pickup_trigger linkto( prey );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger linkto( retrievable_model );
|
pickup_trigger linkto( retrievable_model );
|
||||||
}
|
|
||||||
if ( isDefined( level.knife_planted ) )
|
if ( isdefined( level.knife_planted ) )
|
||||||
{
|
|
||||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
[[ 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 );
|
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||||
}
|
}
|
||||||
@ -152,12 +146,13 @@ debug_print( endpos )
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
print3d( endpos, "pickup_trigger" );
|
print3d( endpos, "pickup_trigger" );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
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" );
|
level endon( "game_ended" );
|
||||||
max_ammo = weaponmaxammo( weapon ) + 1;
|
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||||
autorecover = is_true( level.ballistic_knife_autorecover );
|
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
trigger waittill( "trigger", player );
|
trigger waittill( "trigger", player );
|
||||||
while ( !isalive( player ) )
|
|
||||||
{
|
if ( !isalive( player ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
ammo_stock = player getweaponammostock( weapon );
|
ammo_stock = player getweaponammostock( weapon );
|
||||||
ammo_clip = player getweaponammoclip( weapon );
|
ammo_clip = player getweaponammoclip( weapon );
|
||||||
current_weapon = player getcurrentweapon();
|
current_weapon = player getcurrentweapon();
|
||||||
total_ammo = ammo_stock + ammo_clip;
|
total_ammo = ammo_stock + ammo_clip;
|
||||||
hasreloaded = 1;
|
hasreloaded = 1;
|
||||||
|
|
||||||
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||||
{
|
|
||||||
hasreloaded = 0;
|
hasreloaded = 0;
|
||||||
}
|
|
||||||
if ( total_ammo >= max_ammo || !hasreloaded )
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) )
|
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||||
{
|
|
||||||
if ( isDefined( playersoundonuse ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( playersoundonuse ) )
|
||||||
player playlocalsound( playersoundonuse );
|
player playlocalsound( playersoundonuse );
|
||||||
}
|
|
||||||
if ( isDefined( npcsoundonuse ) )
|
if ( isdefined( npcsoundonuse ) )
|
||||||
{
|
|
||||||
player playsound( npcsoundonuse );
|
player playsound( npcsoundonuse );
|
||||||
}
|
|
||||||
player thread [[ callback ]]( weapon, model, trigger );
|
player thread [[ callback ]]( weapon, model, trigger );
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,13 +210,13 @@ pick_up( weapon, model, trigger )
|
|||||||
if ( self hasweapon( weapon ) )
|
if ( self hasweapon( weapon ) )
|
||||||
{
|
{
|
||||||
current_weapon = self getcurrentweapon();
|
current_weapon = self getcurrentweapon();
|
||||||
|
|
||||||
if ( current_weapon != weapon )
|
if ( current_weapon != weapon )
|
||||||
{
|
{
|
||||||
clip_ammo = self getweaponammoclip( weapon );
|
clip_ammo = self getweaponammoclip( weapon );
|
||||||
|
|
||||||
if ( !clip_ammo )
|
if ( !clip_ammo )
|
||||||
{
|
|
||||||
self setweaponammoclip( weapon, 1 );
|
self setweaponammoclip( weapon, 1 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
@ -242,20 +229,20 @@ pick_up( weapon, model, trigger )
|
|||||||
self setweaponammostock( weapon, new_ammo_stock );
|
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();
|
model destroy_ent();
|
||||||
trigger destroy_ent();
|
trigger destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_ent()
|
destroy_ent()
|
||||||
{
|
{
|
||||||
if ( isDefined( self ) )
|
if ( isdefined( self ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.glowing_model ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.glowing_model ) )
|
||||||
self.glowing_model delete();
|
self.glowing_model delete();
|
||||||
}
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,12 +258,14 @@ drop_knives_to_ground( player )
|
|||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
level waittill( "drop_objects_to_ground", origin, radius );
|
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 );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,9 +275,11 @@ force_drop_knives_to_ground_on_death( player, prey )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
prey waittill( "death" );
|
prey waittill( "death" );
|
||||||
|
|
||||||
self unlink();
|
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 );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,12 +287,15 @@ update_retrieve_trigger( player )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
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 );
|
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self waittill( "stationary" );
|
self waittill( "stationary" );
|
||||||
|
|
||||||
trigger = self.retrievabletrigger;
|
trigger = self.retrievabletrigger;
|
||||||
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
#include maps/mp/zombies/_zm_weapons;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include common_scripts\utility;
|
||||||
#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()
|
init()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.bowie_cost ) )
|
if ( isdefined( level.bowie_cost ) )
|
||||||
{
|
|
||||||
cost = level.bowie_cost;
|
cost = level.bowie_cost;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
cost = 3000;
|
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_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" );
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
|
||||||
}
|
}
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_stats;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_equipment;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.claymores_max_per_player ) )
|
if ( !isdefined( level.claymores_max_per_player ) )
|
||||||
{
|
|
||||||
level.claymores_max_per_player = 12;
|
level.claymores_max_per_player = 12;
|
||||||
}
|
|
||||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
{
|
{
|
||||||
model = getent( trigs[i].target, "targetname" );
|
model = getent( trigs[i].target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model hide();
|
model hide();
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
array_thread( trigs, ::buy_claymores );
|
array_thread( trigs, ::buy_claymores );
|
||||||
level thread give_claymores_after_rounds();
|
level thread give_claymores_after_rounds();
|
||||||
level.claymores_on_damage = ::satchel_damage;
|
level.claymores_on_damage = ::satchel_damage;
|
||||||
@ -41,26 +41,28 @@ buy_claymores()
|
|||||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
if ( !isDefined( self.stub ) )
|
|
||||||
{
|
if ( !isdefined( self.stub ) )
|
||||||
return;
|
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.stub.claymores_triggered = 0;
|
||||||
}
|
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
while ( who in_revive_trigger() )
|
|
||||||
|
if ( who in_revive_trigger() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( who has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
while ( who has_powerup_weapon() )
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.zombie_cost )
|
if ( who.score >= self.zombie_cost )
|
||||||
@ -68,43 +70,41 @@ buy_claymores()
|
|||||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
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 claymore_setup();
|
||||||
who thread show_claymore_hint( "claymore_purchased" );
|
who thread show_claymore_hint( "claymore_purchased" );
|
||||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
}
|
|
||||||
if ( self.claymores_triggered == 0 )
|
if ( self.claymores_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
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
|
else
|
||||||
{
|
{
|
||||||
if ( isDefined( self.clientfieldname ) )
|
who play_sound_on_ent( "no_purchase" );
|
||||||
{
|
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||||
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" );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -116,33 +116,30 @@ claymore_unitrigger_update_prompt( player )
|
|||||||
{
|
{
|
||||||
self sethintstring( "" );
|
self sethintstring( "" );
|
||||||
self setcursorhint( "HINT_NOICON" );
|
self setcursorhint( "HINT_NOICON" );
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_claymore_visible()
|
set_claymore_visible()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
j = 0;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
{
|
||||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
|
||||||
{
|
{
|
||||||
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
}
|
}
|
||||||
@ -151,19 +148,17 @@ set_claymore_visible()
|
|||||||
claymore_safe_to_plant()
|
claymore_safe_to_plant()
|
||||||
{
|
{
|
||||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||||
{
|
|
||||||
return self [[ level.claymore_safe_to_plant ]]();
|
return self [[ level.claymore_safe_to_plant ]]();
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_wait_and_detonate()
|
claymore_wait_and_detonate()
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,40 +167,38 @@ claymore_watch()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self notify( "claymore_watch" );
|
self notify( "claymore_watch" );
|
||||||
self endon( "claymore_watch" );
|
self endon( "claymore_watch" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", claymore, weapname );
|
self waittill( "grenade_fire", claymore, weapname );
|
||||||
|
|
||||||
if ( weapname == "claymore_zm" )
|
if ( weapname == "claymore_zm" )
|
||||||
{
|
{
|
||||||
claymore.owner = self;
|
claymore.owner = self;
|
||||||
claymore.team = self.team;
|
claymore.team = self.team;
|
||||||
self notify( "zmb_enable_claymore_prompt" );
|
self notify( "zmb_enable_claymore_prompt" );
|
||||||
|
|
||||||
if ( claymore claymore_safe_to_plant() )
|
if ( claymore claymore_safe_to_plant() )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.claymore_planted ) )
|
if ( isdefined( level.claymore_planted ) )
|
||||||
{
|
|
||||||
self thread [[ level.claymore_planted ]]( claymore );
|
self thread [[ level.claymore_planted ]]( claymore );
|
||||||
}
|
|
||||||
claymore thread claymore_detonation();
|
claymore thread claymore_detonation();
|
||||||
claymore thread play_claymore_effects();
|
claymore thread play_claymore_effects();
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
claymore thread claymore_wait_and_detonate();
|
claymore thread claymore_wait_and_detonate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
claymore_setup()
|
claymore_setup()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.claymores ) )
|
if ( !isdefined( self.claymores ) )
|
||||||
{
|
|
||||||
self.claymores = [];
|
self.claymores = [];
|
||||||
}
|
|
||||||
self thread claymore_watch();
|
self thread claymore_watch();
|
||||||
self giveweapon( "claymore_zm" );
|
self giveweapon( "claymore_zm" );
|
||||||
self set_player_placeable_mine( "claymore_zm" );
|
self set_player_placeable_mine( "claymore_zm" );
|
||||||
@ -215,22 +208,22 @@ claymore_setup()
|
|||||||
|
|
||||||
adjust_trigger_origin( origin )
|
adjust_trigger_origin( origin )
|
||||||
{
|
{
|
||||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
|
||||||
return origin;
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn_retrieve_trigger( watcher, player )
|
on_spawn_retrieve_trigger( watcher, player )
|
||||||
{
|
{
|
||||||
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
||||||
if ( isDefined( self.pickuptrigger ) )
|
|
||||||
{
|
if ( isdefined( self.pickuptrigger ) )
|
||||||
self.pickuptrigger sethintlowpriority( 0 );
|
self.pickuptrigger sethintlowpriority( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pickup_claymores()
|
pickup_claymores()
|
||||||
{
|
{
|
||||||
player = self.owner;
|
player = self.owner;
|
||||||
|
|
||||||
if ( !player hasweapon( "claymore_zm" ) )
|
if ( !player hasweapon( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
player thread claymore_watch();
|
player thread claymore_watch();
|
||||||
@ -244,6 +237,7 @@ pickup_claymores()
|
|||||||
{
|
{
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
{
|
||||||
self destroy_ent();
|
self destroy_ent();
|
||||||
@ -251,15 +245,16 @@ pickup_claymores()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self pick_up();
|
self pick_up();
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_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" );
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener( trigger, player )
|
pickup_claymores_trigger_listener( trigger, player )
|
||||||
@ -272,13 +267,14 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
|||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger trigger_on();
|
trigger trigger_on();
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
}
|
}
|
||||||
@ -288,13 +284,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
|||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill( "zmb_disable_claymore_prompt" );
|
player waittill( "zmb_disable_claymore_prompt" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger unlink();
|
trigger unlink();
|
||||||
trigger trigger_off();
|
trigger trigger_off();
|
||||||
}
|
}
|
||||||
@ -302,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
|||||||
|
|
||||||
shouldaffectweaponobject( object )
|
shouldaffectweaponobject( object )
|
||||||
{
|
{
|
||||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||||
dirtopos = pos - object.origin;
|
dirtopos = pos - object.origin;
|
||||||
objectforward = anglesToForward( object.angles );
|
objectforward = anglestoforward( object.angles );
|
||||||
dist = vectordot( dirtopos, objectforward );
|
dist = vectordot( dirtopos, objectforward );
|
||||||
|
|
||||||
if ( dist < level.claymore_detectionmindist )
|
if ( dist < level.claymore_detectionmindist )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
dirtopos = vectornormalize( dirtopos );
|
dirtopos = vectornormalize( dirtopos );
|
||||||
dot = vectordot( dirtopos, objectforward );
|
dot = vectordot( dirtopos, objectforward );
|
||||||
return dot > level.claymore_detectiondot;
|
return dot > level.claymore_detectiondot;
|
||||||
@ -324,44 +321,40 @@ claymore_detonation()
|
|||||||
damagearea setexcludeteamfortrigger( self.team );
|
damagearea setexcludeteamfortrigger( self.team );
|
||||||
damagearea enablelinkto();
|
damagearea enablelinkto();
|
||||||
damagearea linkto( self );
|
damagearea linkto( self );
|
||||||
|
|
||||||
if ( is_true( self.isonbus ) )
|
if ( is_true( self.isonbus ) )
|
||||||
{
|
|
||||||
damagearea setmovingplatformenabled( 1 );
|
damagearea setmovingplatformenabled( 1 );
|
||||||
}
|
|
||||||
self.damagearea = damagearea;
|
self.damagearea = damagearea;
|
||||||
self thread delete_claymores_on_death( self.owner, damagearea );
|
self thread delete_claymores_on_death( self.owner, damagearea );
|
||||||
self.owner.claymores[self.owner.claymores.size] = self;
|
self.owner.claymores[self.owner.claymores.size] = self;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
damagearea waittill( "trigger", ent );
|
damagearea waittill( "trigger", ent );
|
||||||
if ( isDefined( self.owner ) && ent == self.owner )
|
|
||||||
{
|
if ( isdefined( self.owner ) && ent == self.owner )
|
||||||
continue;
|
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;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( !ent shouldaffectweaponobject( self ) )
|
if ( !ent shouldaffectweaponobject( self ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||||
{
|
{
|
||||||
self playsound( "wpn_claymore_alert" );
|
self playsound( "wpn_claymore_alert" );
|
||||||
wait 0,4;
|
wait 0.4;
|
||||||
if ( isDefined( self.owner ) )
|
|
||||||
{
|
if ( isdefined( self.owner ) )
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self detonate( undefined );
|
self detonate( undefined );
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -370,16 +363,15 @@ claymore_detonation()
|
|||||||
delete_claymores_on_death( player, ent )
|
delete_claymores_on_death( player, ent )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
if ( isdefined( player ) )
|
||||||
arrayremovevalue( player.claymores, self );
|
arrayremovevalue( player.claymores, self );
|
||||||
}
|
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
if ( isDefined( ent ) )
|
|
||||||
{
|
if ( isdefined( ent ) )
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
satchel_damage()
|
satchel_damage()
|
||||||
{
|
{
|
||||||
@ -388,36 +380,36 @@ satchel_damage()
|
|||||||
self.health = 100000;
|
self.health = 100000;
|
||||||
self.maxhealth = self.health;
|
self.maxhealth = self.health;
|
||||||
attacker = undefined;
|
attacker = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker );
|
self waittill( "damage", amount, attacker );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.health = self.maxhealth;
|
self.health = self.maxhealth;
|
||||||
while ( !isplayer( attacker ) )
|
|
||||||
{
|
if ( !isplayer( attacker ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||||
{
|
|
||||||
continue;
|
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;
|
continue;
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( level.satchelexplodethisframe )
|
if ( level.satchelexplodethisframe )
|
||||||
{
|
wait( 0.1 + randomfloat( 0.4 ) );
|
||||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
else
|
||||||
}
|
wait 0.05;
|
||||||
else wait 0,05;
|
|
||||||
if ( !isDefined( self ) )
|
if ( !isdefined( self ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.satchelexplodethisframe = 1;
|
level.satchelexplodethisframe = 1;
|
||||||
thread reset_satchel_explode_this_frame();
|
thread reset_satchel_explode_this_frame();
|
||||||
self detonate( attacker );
|
self detonate( attacker );
|
||||||
@ -425,7 +417,7 @@ satchel_damage()
|
|||||||
|
|
||||||
reset_satchel_explode_this_frame()
|
reset_satchel_explode_this_frame()
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level.satchelexplodethisframe = 0;
|
level.satchelexplodethisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,14 +430,15 @@ play_claymore_effects()
|
|||||||
|
|
||||||
give_claymores_after_rounds()
|
give_claymores_after_rounds()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "between_round_over" );
|
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();
|
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" ) )
|
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] setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
players[i] setweaponammoclip( "claymore_zm", 2 );
|
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -464,13 +456,11 @@ show_claymore_hint( string )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
if ( string == "claymore_purchased" )
|
if ( string == "claymore_purchased" )
|
||||||
{
|
|
||||||
text = &"ZOMBIE_CLAYMORE_HOWTO";
|
text = &"ZOMBIE_CLAYMORE_HOWTO";
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
|
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
|
||||||
}
|
|
||||||
show_equipment_hint_text( text );
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include common_scripts/utility;
|
#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()
|
init()
|
||||||
{
|
{
|
||||||
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
|
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
|
||||||
register_melee_weapon_for_level( "tazer_knuckles_zm" );
|
register_melee_weapon_for_level( "tazer_knuckles_zm" );
|
||||||
if ( isDefined( level.tazer_cost ) )
|
|
||||||
{
|
if ( isdefined( level.tazer_cost ) )
|
||||||
cost = level.tazer_cost;
|
cost = level.tazer_cost;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
cost = 6000;
|
cost = 6000;
|
||||||
}
|
|
||||||
level.use_tazer_impact_fx = 0;
|
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_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" );
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
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_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_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
||||||
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
||||||
|
|
||||||
if ( level.script != "zm_transit" )
|
if ( level.script != "zm_transit" )
|
||||||
{
|
{
|
||||||
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
||||||
level.use_tazer_impact_fx = 1;
|
level.use_tazer_impact_fx = 1;
|
||||||
}
|
}
|
||||||
level.tazer_flourish_delay = 0,5;
|
|
||||||
|
level.tazer_flourish_delay = 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_bodily_functions()
|
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;
|
return;
|
||||||
}
|
|
||||||
while ( isDefined( self ) && isalive( self ) )
|
while ( isdefined( self ) && isalive( self ) )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( type != "MOD_MELEE" )
|
if ( type != "MOD_MELEE" )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
ch = randomint( 100 );
|
ch = randomint( 100 );
|
||||||
|
|
||||||
if ( ch < 4 )
|
if ( ch < 4 )
|
||||||
{
|
|
||||||
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
|
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
|
||||||
}
|
|
||||||
if ( level.use_tazer_impact_fx )
|
if ( level.use_tazer_impact_fx )
|
||||||
{
|
{
|
||||||
tags = [];
|
tags = [];
|
||||||
@ -81,9 +80,11 @@ onplayerconnect()
|
|||||||
onplayerspawned()
|
onplayerspawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread watchtazerknucklemelee();
|
self thread watchtazerknucklemelee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,28 +92,30 @@ onplayerspawned()
|
|||||||
watchtazerknucklemelee()
|
watchtazerknucklemelee()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_melee", weapon );
|
self waittill( "weapon_melee", weapon );
|
||||||
|
|
||||||
if ( weapon == "tazer_knuckles_zm" )
|
if ( weapon == "tazer_knuckles_zm" )
|
||||||
{
|
|
||||||
self tazerknuckle_melee();
|
self tazerknuckle_melee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tazerknuckle_melee()
|
tazerknuckle_melee()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tazer_flourish_fx()
|
tazer_flourish_fx()
|
||||||
{
|
{
|
||||||
self waittill( "weapon_change", newweapon );
|
self waittill( "weapon_change", newweapon );
|
||||||
|
|
||||||
if ( newweapon == "zombie_tazer_flourish" )
|
if ( newweapon == "zombie_tazer_flourish" )
|
||||||
{
|
{
|
||||||
self endon( "weapon_change" );
|
self endon( "weapon_change" );
|
||||||
wait level.tazer_flourish_delay;
|
wait( level.tazer_flourish_delay );
|
||||||
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
|
self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
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;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
#include common_scripts/utility;
|
#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()
|
main()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.weapon_locker_map ) )
|
if ( !isdefined( level.weapon_locker_map ) )
|
||||||
{
|
|
||||||
level.weapon_locker_map = level.script;
|
level.weapon_locker_map = level.script;
|
||||||
}
|
|
||||||
level.weapon_locker_online = sessionmodeisonlinegame();
|
level.weapon_locker_online = sessionmodeisonlinegame();
|
||||||
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
|
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
|
||||||
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
|
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
|
||||||
@ -20,139 +22,111 @@ main()
|
|||||||
wl_has_stored_weapondata()
|
wl_has_stored_weapondata()
|
||||||
{
|
{
|
||||||
if ( level.weapon_locker_online )
|
if ( level.weapon_locker_online )
|
||||||
{
|
|
||||||
return self has_stored_weapondata( level.weapon_locker_map );
|
return self has_stored_weapondata( level.weapon_locker_map );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
return isdefined( self.stored_weapon_data );
|
||||||
return isDefined( self.stored_weapon_data );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_get_stored_weapondata()
|
wl_get_stored_weapondata()
|
||||||
{
|
{
|
||||||
if ( level.weapon_locker_online )
|
if ( level.weapon_locker_online )
|
||||||
{
|
|
||||||
return self get_stored_weapondata( level.weapon_locker_map );
|
return self get_stored_weapondata( level.weapon_locker_map );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return self.stored_weapon_data;
|
return self.stored_weapon_data;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wl_clear_stored_weapondata()
|
wl_clear_stored_weapondata()
|
||||||
{
|
{
|
||||||
if ( level.weapon_locker_online )
|
if ( level.weapon_locker_online )
|
||||||
{
|
|
||||||
self clear_stored_weapondata( level.weapon_locker_map );
|
self clear_stored_weapondata( level.weapon_locker_map );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.stored_weapon_data = undefined;
|
self.stored_weapon_data = undefined;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wl_set_stored_weapondata( weapondata )
|
wl_set_stored_weapondata( weapondata )
|
||||||
{
|
{
|
||||||
if ( level.weapon_locker_online )
|
if ( level.weapon_locker_online )
|
||||||
{
|
|
||||||
self set_stored_weapondata( weapondata, level.weapon_locker_map );
|
self set_stored_weapondata( weapondata, level.weapon_locker_map );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.stored_weapon_data = weapondata;
|
self.stored_weapon_data = weapondata;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
triggerweaponslockerwatch()
|
triggerweaponslockerwatch()
|
||||||
{
|
{
|
||||||
unitrigger_stub = spawnstruct();
|
unitrigger_stub = spawnstruct();
|
||||||
unitrigger_stub.origin = self.origin;
|
unitrigger_stub.origin = self.origin;
|
||||||
if ( isDefined( self.script_angles ) )
|
|
||||||
{
|
if ( isdefined( self.script_angles ) )
|
||||||
unitrigger_stub.angles = self.script_angles;
|
unitrigger_stub.angles = self.script_angles;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.angles = self.angles;
|
unitrigger_stub.angles = self.angles;
|
||||||
}
|
|
||||||
unitrigger_stub.script_angles = unitrigger_stub.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;
|
unitrigger_stub.script_length = self.script_length;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_length = 16;
|
unitrigger_stub.script_length = 16;
|
||||||
}
|
|
||||||
if ( isDefined( self.script_width ) )
|
if ( isdefined( self.script_width ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = self.script_width;
|
unitrigger_stub.script_width = self.script_width;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = 32;
|
unitrigger_stub.script_width = 32;
|
||||||
}
|
|
||||||
if ( isDefined( self.script_height ) )
|
if ( isdefined( self.script_height ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = self.script_height;
|
unitrigger_stub.script_height = self.script_height;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = 64;
|
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.targetname = "weapon_locker";
|
||||||
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
||||||
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
||||||
unitrigger_stub.clientfieldname = "weapon_locker";
|
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;
|
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 )
|
triggerweaponslockerisvalidweapon( weaponname )
|
||||||
{
|
{
|
||||||
weaponname = get_base_weapon_name( weaponname, 1 );
|
weaponname = get_base_weapon_name( weaponname, 1 );
|
||||||
|
|
||||||
if ( !is_weapon_included( weaponname ) )
|
if ( !is_weapon_included( weaponname ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
|
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
|
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
|
||||||
{
|
{
|
||||||
retrievingweapon = player wl_has_stored_weapondata();
|
retrievingweapon = player wl_has_stored_weapondata();
|
||||||
|
|
||||||
if ( !retrievingweapon )
|
if ( !retrievingweapon )
|
||||||
{
|
{
|
||||||
weaponname = player get_nonalternate_weapon( weaponname );
|
weaponname = player get_nonalternate_weapon( weaponname );
|
||||||
|
|
||||||
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
||||||
{
|
|
||||||
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
weapondata = player wl_get_stored_weapondata();
|
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 );
|
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
|
||||||
}
|
|
||||||
weapontogive = weapondata["name"];
|
weapontogive = weapondata["name"];
|
||||||
primaries = player getweaponslistprimaries();
|
primaries = player getweaponslistprimaries();
|
||||||
maxweapons = get_player_weapon_limit( player );
|
maxweapons = get_player_weapon_limit( player );
|
||||||
weaponname = player get_nonalternate_weapon( weaponname );
|
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 ) )
|
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
||||||
{
|
{
|
||||||
@ -160,6 +134,7 @@ triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,74 +148,85 @@ triggerweaponslockerthinkupdateprompt( player )
|
|||||||
triggerweaponslockerthink()
|
triggerweaponslockerthink()
|
||||||
{
|
{
|
||||||
self.parent_player thread triggerweaponslockerweaponchangethink( self );
|
self.parent_player thread triggerweaponslockerweaponchangethink( self );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
retrievingweapon = player wl_has_stored_weapondata();
|
retrievingweapon = player wl_has_stored_weapondata();
|
||||||
|
|
||||||
if ( !retrievingweapon )
|
if ( !retrievingweapon )
|
||||||
{
|
{
|
||||||
curweapon = player getcurrentweapon();
|
curweapon = player getcurrentweapon();
|
||||||
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon );
|
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
|
||||||
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
|
||||||
{
|
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
||||||
continue;
|
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 );
|
player wl_set_stored_weapondata( weapondata );
|
||||||
/#
|
/#
|
||||||
assert( curweapon == weapondata["name"], "weapon data does not match" );
|
assert( curweapon == weapondata["name"], "weapon data does not match" );
|
||||||
#/
|
#/
|
||||||
player takeweapon( curweapon );
|
player takeweapon( curweapon );
|
||||||
primaries = player getweaponslistprimaries();
|
primaries = player getweaponslistprimaries();
|
||||||
if ( isDefined( primaries[ 0 ] ) )
|
|
||||||
{
|
if ( isdefined( primaries[0] ) )
|
||||||
player switchtoweapon( primaries[0] );
|
player switchtoweapon( primaries[0] );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
player maps\mp\zombies\_zm_weapons::give_fallback_weapon();
|
||||||
player maps/mp/zombies/_zm_weapons::give_fallback_weapon();
|
|
||||||
}
|
|
||||||
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
player playsoundtoplayer( "evt_fridge_locker_close", player );
|
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
|
else
|
||||||
{
|
{
|
||||||
curweapon = player getcurrentweapon();
|
curweapon = player getcurrentweapon();
|
||||||
primaries = player getweaponslistprimaries();
|
primaries = player getweaponslistprimaries();
|
||||||
weapondata = player wl_get_stored_weapondata();
|
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 );
|
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
|
||||||
}
|
|
||||||
weapontogive = weapondata["name"];
|
weapontogive = weapondata["name"];
|
||||||
while ( !triggerweaponslockerisvalidweapon( weapontogive ) )
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( weapontogive ) )
|
||||||
{
|
{
|
||||||
player playlocalsound( level.zmb_laugh_alias );
|
player playlocalsound( level.zmb_laugh_alias );
|
||||||
player wl_clear_stored_weapondata();
|
player wl_clear_stored_weapondata();
|
||||||
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
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 );
|
curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 );
|
||||||
while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
|
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" );
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
wait 3;
|
wait 3;
|
||||||
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
maxweapons = get_player_weapon_limit( player );
|
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 );
|
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
|
||||||
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
||||||
{
|
{
|
||||||
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
wait 3;
|
wait 3;
|
||||||
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
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 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_clear_stored_weapondata();
|
||||||
player wl_set_stored_weapondata( curweapondata );
|
player wl_set_stored_weapondata( curweapondata );
|
||||||
player switchtoweapon( weapondata["name"] );
|
player switchtoweapon( weapondata["name"] );
|
||||||
@ -248,16 +234,18 @@ triggerweaponslockerthink()
|
|||||||
}
|
}
|
||||||
else
|
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 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"] );
|
player switchtoweapon( weapondata["name"] );
|
||||||
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
}
|
}
|
||||||
|
|
||||||
level notify( "weapon_locker_grab" );
|
level notify( "weapon_locker_grab" );
|
||||||
player playsoundtoplayer( "evt_fridge_locker_open", player );
|
player playsoundtoplayer( "evt_fridge_locker_open", player );
|
||||||
}
|
}
|
||||||
wait 0,5;
|
|
||||||
|
wait 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,19 +254,20 @@ triggerweaponslockerweaponchangethink( trigger )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
trigger endon( "kill_trigger" );
|
trigger endon( "kill_trigger" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "weapon_change", newweapon );
|
self waittill( "weapon_change", newweapon );
|
||||||
|
|
||||||
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
|
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
add_weapon_locker_mapping( fromweapon, toweapon )
|
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 = [];
|
||||||
}
|
|
||||||
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
|
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,52 +275,52 @@ remap_weapon( weapondata, maptable )
|
|||||||
{
|
{
|
||||||
name = get_base_name( weapondata["name"] );
|
name = get_base_name( weapondata["name"] );
|
||||||
att = get_attachment_name( weapondata["name"] );
|
att = get_attachment_name( weapondata["name"] );
|
||||||
if ( isDefined( maptable[ name ] ) )
|
|
||||||
|
if ( isdefined( maptable[name] ) )
|
||||||
{
|
{
|
||||||
weapondata["name"] = maptable[name];
|
weapondata["name"] = maptable[name];
|
||||||
name = weapondata["name"];
|
name = weapondata["name"];
|
||||||
|
|
||||||
if ( is_weapon_upgraded( 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 );
|
base = get_base_weapon_name( name, 1 );
|
||||||
|
|
||||||
if ( !weapon_supports_this_attachment( base, att ) )
|
if ( !weapon_supports_this_attachment( base, att ) )
|
||||||
{
|
|
||||||
att = random_attachment( base );
|
att = random_attachment( base );
|
||||||
}
|
|
||||||
weapondata["name"] = weapondata["name"] + "+" + att;
|
weapondata["name"] = weapondata["name"] + "+" + att;
|
||||||
}
|
}
|
||||||
else
|
else if ( weapon_supports_default_attachment( name ) )
|
||||||
{
|
|
||||||
if ( weapon_supports_default_attachment( name ) )
|
|
||||||
{
|
{
|
||||||
att = default_attachment( name );
|
att = default_attachment( name );
|
||||||
weapondata["name"] = weapondata["name"] + "+" + att;
|
weapondata["name"] = weapondata["name"] + "+" + att;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return weapondata;
|
return weapondata;
|
||||||
}
|
|
||||||
name = weapondata["name"];
|
name = weapondata["name"];
|
||||||
dw_name = weapondualwieldweaponname( name );
|
dw_name = weapondualwieldweaponname( name );
|
||||||
alt_name = weaponaltweaponname( name );
|
alt_name = weaponaltweaponname( name );
|
||||||
|
|
||||||
if ( name != "none" )
|
if ( name != "none" )
|
||||||
{
|
{
|
||||||
weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
|
weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
|
||||||
weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
|
weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( dw_name != "none" )
|
if ( dw_name != "none" )
|
||||||
{
|
|
||||||
weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
|
weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
|
||||||
}
|
|
||||||
if ( alt_name != "none" )
|
if ( alt_name != "none" )
|
||||||
{
|
{
|
||||||
weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
|
weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
|
||||||
weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
|
weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
weapondata["dw_name"] = dw_name;
|
weapondata["dw_name"] = dw_name;
|
||||||
weapondata["alt_name"] = alt_name;
|
weapondata["alt_name"] = alt_name;
|
||||||
return weapondata;
|
return weapondata;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user