mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
[ZM] Added zm_prison and zm_highrise GSCs
This commit is contained in:
parent
8ccce7f949
commit
f97389d9da
@ -1,13 +0,0 @@
|
|||||||
//checked includes match cerberus output
|
|
||||||
#include common_scripts/utility;
|
|
||||||
#include maps/mp/_utility;
|
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
|
||||||
{
|
|
||||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
|
|
||||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
|
|
||||||
}
|
|
||||||
|
|
||||||
watch_bolt_detonation( owner ) //checked matches cerberus output
|
|
||||||
{
|
|
||||||
}
|
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "baseball_to_first_floor_climb" );
|
dosimpletraverse( "baseball_to_first_floor_climb" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "baseball_to_roof_climb" );
|
dosimpletraverse( "baseball_to_roof_climb" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "baseball_to_second_floor_climb" );
|
dosimpletraverse( "baseball_to_second_floor_climb" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_down_cellblock" );
|
dosimpletraverse( "jump_down_cellblock" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_down_cellblock_norailing" );
|
dosimpletraverse( "jump_down_cellblock_norailing" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_up_cellblock" );
|
dosimpletraverse( "jump_up_cellblock" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "climb_over_dock_fence", 1 );
|
dosimpletraverse( "climb_over_dock_fence", 1 );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "dock_mid_way_jump_up_climb", 1 );
|
dosimpletraverse( "dock_mid_way_jump_up_climb", 1 );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "dock_tommygun_dropdown", 1 );
|
dosimpletraverse( "dock_tommygun_dropdown", 1 );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "dock_water_climb_up" );
|
dosimpletraverse( "dock_water_climb_up" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "golden_gate_jump_up" );
|
dosimpletraverse( "golden_gate_jump_up" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "prison_gondola_traversal", 1 );
|
dosimpletraverse( "prison_gondola_traversal", 1 );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_down_127" );
|
dosimpletraverse( "jump_down_127" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_down_222" );
|
dosimpletraverse( "jump_down_222" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_down_286" );
|
dosimpletraverse( "jump_down_286" );
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.isdog ) && self.isdog )
|
if ( isdefined( self.isdog ) && self.isdog )
|
||||||
{
|
dog_jump_down( 72, 7 );
|
||||||
dog_jump_down( 72, 7 );
|
else
|
||||||
}
|
dosimpletraverse( "jump_down_72" );
|
||||||
else
|
|
||||||
{
|
|
||||||
dosimpletraverse( "jump_down_72" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.isdog ) && self.isdog )
|
if ( isdefined( self.isdog ) && self.isdog )
|
||||||
{
|
dog_jump_down( 96, 7 );
|
||||||
dog_jump_down( 96, 7 );
|
else
|
||||||
}
|
dosimpletraverse( "jump_down_96" );
|
||||||
else
|
|
||||||
{
|
|
||||||
dosimpletraverse( "jump_down_96" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_up_127" );
|
dosimpletraverse( "jump_up_127" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "jump_up_222" );
|
dosimpletraverse( "jump_up_222" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include maps/mp/animscripts/traverse/zm_shared;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/traverse/shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include maps\mp\animscripts\traverse\shared;
|
||||||
|
#include maps\mp\animscripts\traverse\zm_shared;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
dosimpletraverse( "cellblock_jump_up_climb" );
|
dosimpletraverse( "cellblock_jump_up_climb" );
|
||||||
}
|
}
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,304 +1,314 @@
|
|||||||
//checked includes changed to match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_prison_sq_wth;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_prison_sq_fc;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zm_prison_sq_final;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_powerups;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
#include maps/mp/zm_alcatraz_travel;
|
#include maps\mp\zombies\_zm_craftables;
|
||||||
#include maps/mp/zm_alcatraz_traps;
|
#include maps\mp\zm_alcatraz_craftables;
|
||||||
#include maps/mp/zm_prison;
|
#include maps\mp\zombies\_zm_ai_brutus;
|
||||||
#include maps/mp/zm_alcatraz_sq;
|
#include maps\mp\zombies\_zm_afterlife;
|
||||||
#include maps/mp/zm_prison_sq_bg;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/zm_prison_spoon;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/zm_prison_achievement;
|
#include maps\mp\zm_prison_achievement;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\zm_prison_spoon;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\zm_prison_sq_bg;
|
||||||
#include maps/mp/zombies/_zm_afterlife;
|
#include maps\mp\zm_alcatraz_sq;
|
||||||
#include maps/mp/zombies/_zm_ai_brutus;
|
#include maps\mp\zm_prison;
|
||||||
#include maps/mp/zm_alcatraz_craftables;
|
#include maps\mp\zm_alcatraz_traps;
|
||||||
#include maps/mp/zombies/_zm_craftables;
|
#include maps\mp\zm_alcatraz_travel;
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_prison_sq_final;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_prison_sq_fc;
|
||||||
|
#include maps\mp\zm_prison_sq_wth;
|
||||||
|
|
||||||
precache() //checked matches cerberus output
|
precache()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.createfx_enabled ) && level.createfx_enabled )
|
if ( isdefined( level.createfx_enabled ) && level.createfx_enabled )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
maps\mp\zombies\_zm_craftables::init();
|
||||||
maps/mp/zombies/_zm_craftables::init();
|
maps\mp\zm_alcatraz_craftables::include_craftables();
|
||||||
maps/mp/zm_alcatraz_craftables::include_craftables();
|
maps\mp\zm_alcatraz_craftables::init_craftables();
|
||||||
maps/mp/zm_alcatraz_craftables::init_craftables();
|
maps\mp\zombies\_zm_ai_brutus::precache();
|
||||||
maps/mp/zombies/_zm_ai_brutus::precache();
|
maps\mp\zombies\_zm_afterlife::init();
|
||||||
maps/mp/zombies/_zm_afterlife::init();
|
precacheshader( "waypoint_kill_red" );
|
||||||
precacheshader( "waypoint_kill_red" );
|
level._effect["powerup_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
|
||||||
level._effect[ "powerup_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main() //checked changed to match cerberus output
|
main()
|
||||||
{
|
{
|
||||||
level thread sq_main_controller();
|
level thread sq_main_controller();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "zclassic" );
|
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "zclassic" );
|
||||||
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 );
|
||||||
maps/mp/zombies/_zm_ai_brutus::init();
|
maps\mp\zombies\_zm_ai_brutus::init();
|
||||||
level thread maps/mp/zombies/_zm_craftables::think_craftables();
|
level thread maps\mp\zombies\_zm_craftables::think_craftables();
|
||||||
maps/mp/zm_prison_achievement::init();
|
maps\mp\zm_prison_achievement::init();
|
||||||
level thread maps/mp/zm_prison_spoon::init();
|
level thread maps\mp\zm_prison_spoon::init();
|
||||||
level thread maps/mp/zm_prison_sq_bg::init();
|
level thread maps\mp\zm_prison_sq_bg::init();
|
||||||
a_grief_clips = getentarray( "grief_clips", "targetname" );
|
a_grief_clips = getentarray( "grief_clips", "targetname" );
|
||||||
foreach ( clip in a_grief_clips )
|
|
||||||
{
|
foreach ( clip in a_grief_clips )
|
||||||
clip connectpaths();
|
{
|
||||||
clip delete();
|
clip connectpaths();
|
||||||
}
|
clip delete();
|
||||||
level thread give_afterlife();
|
}
|
||||||
level thread maps/mp/zm_alcatraz_sq::start_alcatraz_sidequest();
|
|
||||||
onplayerconnect_callback( ::player_quest_vfx );
|
level thread give_afterlife();
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
level thread maps\mp\zm_alcatraz_sq::start_alcatraz_sidequest();
|
||||||
level notify( "Pack_A_Punch_on" );
|
onplayerconnect_callback( ::player_quest_vfx );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
level thread maps/mp/zm_prison::delete_perk_machine_clip();
|
level notify( "Pack_A_Punch_on" );
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
|
flag_wait( "start_zombie_round_logic" );
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
|
level thread maps\mp\zm_prison::delete_perk_machine_clip();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_tower_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
|
||||||
level thread maps/mp/zm_alcatraz_travel::init_alcatraz_zipline();
|
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
|
||||||
level thread power_on_perk_machines();
|
level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs();
|
||||||
level thread afterlife_powerups();
|
level thread maps\mp\zm_alcatraz_travel::init_alcatraz_zipline();
|
||||||
level thread afterlife_intro_door();
|
level thread power_on_perk_machines();
|
||||||
level thread afterlife_cell_door_1();
|
level thread afterlife_powerups();
|
||||||
level thread afterlife_cell_door_2();
|
level thread afterlife_intro_door();
|
||||||
level thread blundergat_upgrade_station();
|
level thread afterlife_cell_door_1();
|
||||||
|
level thread afterlife_cell_door_2();
|
||||||
|
level thread blundergat_upgrade_station();
|
||||||
}
|
}
|
||||||
|
|
||||||
zm_treasure_chest_init() //checked matches cerberus output
|
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" );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_afterlife() //checked changed to match cerberus output
|
give_afterlife()
|
||||||
{
|
{
|
||||||
onplayerconnect_callback( maps/mp/zombies/_zm_afterlife::init_player );
|
onplayerconnect_callback( maps\mp\zombies\_zm_afterlife::init_player );
|
||||||
flag_wait( "initial_players_connected" );
|
flag_wait( "initial_players_connected" );
|
||||||
wait 0.5;
|
wait 0.5;
|
||||||
n_start_pos = 1;
|
n_start_pos = 1;
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
foreach ( player in a_players )
|
|
||||||
{
|
foreach ( player in a_players )
|
||||||
if ( isDefined( player.afterlife ) && !player.afterlife )
|
{
|
||||||
{
|
if ( isdefined( player.afterlife ) && !player.afterlife )
|
||||||
player thread fake_kill_player( n_start_pos );
|
{
|
||||||
n_start_pos++;
|
player thread fake_kill_player( n_start_pos );
|
||||||
}
|
n_start_pos++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fake_kill_player( n_start_pos ) //checked changed to match cerberus output
|
fake_kill_player( n_start_pos )
|
||||||
{
|
{
|
||||||
self afterlife_remove();
|
self afterlife_remove();
|
||||||
self.afterlife = 1;
|
self.afterlife = 1;
|
||||||
self thread afterlife_laststand();
|
self thread afterlife_laststand();
|
||||||
self waittill( "player_fake_corpse_created" );
|
|
||||||
self thread afterlife_tutorial();
|
self waittill( "player_fake_corpse_created" );
|
||||||
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
|
|
||||||
trace_start = e_corpse_location.origin;
|
self thread afterlife_tutorial();
|
||||||
trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, -1 ), 100 );
|
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
|
||||||
corpse_trace = physicstrace( trace_start, trace_end, vectorScale( ( -1, -1, 0 ), 10 ), vectorScale( ( 1, 1, 0 ), 10 ), self.e_afterlife_corpse );
|
trace_start = e_corpse_location.origin;
|
||||||
self.e_afterlife_corpse.origin = corpse_trace[ "position" ];
|
trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 );
|
||||||
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
|
corpse_trace = physicstrace( trace_start, trace_end, vectorscale( ( -1, -1, 0 ), 10.0 ), vectorscale( ( 1, 1, 0 ), 10.0 ), self.e_afterlife_corpse );
|
||||||
vec_to_target = vectorToAngles( vec_to_target );
|
self.e_afterlife_corpse.origin = corpse_trace["position"];
|
||||||
vec_to_target = ( 0, vec_to_target[ 1 ], 0 );
|
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
|
||||||
self setplayerangles( vec_to_target );
|
vec_to_target = vectortoangles( vec_to_target );
|
||||||
self notify( "al_all_setup" );
|
vec_to_target = ( 0, vec_to_target[1], 0 );
|
||||||
|
self setplayerangles( vec_to_target );
|
||||||
|
self notify( "al_all_setup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_tutorial() //checked matches cerberus output
|
afterlife_tutorial()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
wait 3;
|
wait 3;
|
||||||
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" );
|
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" );
|
||||||
self thread afterlife_tutorial_attack_watch();
|
self thread afterlife_tutorial_attack_watch();
|
||||||
waittill_notify_or_timeout( "stop_tutorial", 5 );
|
waittill_notify_or_timeout( "stop_tutorial", 5 );
|
||||||
self thread destroy_tutorial_message();
|
self thread destroy_tutorial_message();
|
||||||
wait 1;
|
wait 1;
|
||||||
if ( isDefined( self.afterlife ) && self.afterlife )
|
|
||||||
{
|
if ( isdefined( self.afterlife ) && self.afterlife )
|
||||||
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
|
{
|
||||||
self thread afterlife_tutorial_jump_watch();
|
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
|
||||||
waittill_notify_or_timeout( "stop_tutorial", 5 );
|
self thread afterlife_tutorial_jump_watch();
|
||||||
self thread destroy_tutorial_message();
|
waittill_notify_or_timeout( "stop_tutorial", 5 );
|
||||||
}
|
self thread destroy_tutorial_message();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_tutorial_attack_watch() //checked matches cerberus output
|
afterlife_tutorial_attack_watch()
|
||||||
{
|
{
|
||||||
self endon( "stop_tutorial" );
|
self endon( "stop_tutorial" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( isDefined( self.afterlife ) && self.afterlife && !self isfiring() )
|
|
||||||
{
|
while ( isdefined( self.afterlife ) && self.afterlife && !self isfiring() )
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
|
||||||
wait 0.2;
|
wait 0.2;
|
||||||
self notify( "stop_tutorial" );
|
self notify( "stop_tutorial" );
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_tutorial_jump_watch() //checked matches cerberus output
|
afterlife_tutorial_jump_watch()
|
||||||
{
|
{
|
||||||
self endon( "stop_tutorial" );
|
self endon( "stop_tutorial" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( isDefined( self.afterlife ) && self.afterlife && !self is_jumping() )
|
|
||||||
{
|
while ( isdefined( self.afterlife ) && self.afterlife && !self is_jumping() )
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
|
||||||
wait 0.2;
|
wait 0.2;
|
||||||
self notify( "stop_tutorial" );
|
self notify( "stop_tutorial" );
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_powerups() //checked matches cerberus output
|
afterlife_powerups()
|
||||||
{
|
{
|
||||||
level._powerup_grab_check = ::cell_grab_check;
|
level._powerup_grab_check = ::cell_grab_check;
|
||||||
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
||||||
s_powerup_loc = getstruct( "powerup_cell_1", "targetname" );
|
s_powerup_loc = getstruct( "powerup_cell_1", "targetname" );
|
||||||
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
|
||||||
{
|
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
||||||
}
|
else
|
||||||
else
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" );
|
||||||
{
|
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" );
|
s_powerup_loc = getstruct( "powerup_cell_2", "targetname" );
|
||||||
}
|
|
||||||
s_powerup_loc = getstruct( "powerup_cell_2", "targetname" );
|
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
||||||
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
||||||
{
|
else
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cell_grab_check( player ) //checked matches cerberus output
|
cell_grab_check( player )
|
||||||
{
|
{
|
||||||
cell_powerup = getstruct( "powerup_start", "targetname" );
|
cell_powerup = getstruct( "powerup_start", "targetname" );
|
||||||
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
|
|
||||||
{
|
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
|
||||||
m_door = getent( "powerup_door", "targetname" );
|
{
|
||||||
if ( !isDefined( m_door.opened ) )
|
m_door = getent( "powerup_door", "targetname" );
|
||||||
{
|
|
||||||
return 0;
|
if ( !isdefined( m_door.opened ) )
|
||||||
}
|
return false;
|
||||||
}
|
}
|
||||||
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
|
|
||||||
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
|
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
|
||||||
{
|
|
||||||
m_door = getent( "powerup_cell_door_1", "targetname" );
|
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
|
||||||
if ( !isDefined( m_door.opened ) )
|
{
|
||||||
{
|
m_door = getent( "powerup_cell_door_1", "targetname" );
|
||||||
return 0;
|
|
||||||
}
|
if ( !isdefined( m_door.opened ) )
|
||||||
}
|
return false;
|
||||||
cell_powerup = getstruct( "powerup_cell_2", "targetname" );
|
}
|
||||||
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
|
|
||||||
{
|
cell_powerup = getstruct( "powerup_cell_2", "targetname" );
|
||||||
m_door = getent( "powerup_cell_door_2", "targetname" );
|
|
||||||
if ( !isDefined( m_door.opened ) )
|
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
|
||||||
{
|
{
|
||||||
return 0;
|
m_door = getent( "powerup_cell_door_2", "targetname" );
|
||||||
}
|
|
||||||
}
|
if ( !isdefined( m_door.opened ) )
|
||||||
return 1;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_intro_door() //checked matches cerberus output
|
afterlife_intro_door()
|
||||||
{
|
{
|
||||||
m_door = getent( "powerup_door", "targetname" );
|
m_door = getent( "powerup_door", "targetname" );
|
||||||
level waittill( "intro_powerup_activate" );
|
|
||||||
wait 1;
|
level waittill( "intro_powerup_activate" );
|
||||||
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
|
|
||||||
m_door.opened = 1;
|
wait 1;
|
||||||
m_door movex( 34, 2, 1 );
|
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
|
||||||
m_door playsound( "zmb_jail_door" );
|
m_door.opened = 1;
|
||||||
level waittill( "intro_powerup_restored" );
|
m_door movex( 34, 2, 1 );
|
||||||
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
m_door playsound( "zmb_jail_door" );
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin );
|
|
||||||
|
level waittill( "intro_powerup_restored" );
|
||||||
|
|
||||||
|
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
||||||
|
spawn_infinite_powerup_drop( s_powerup_loc.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_cell_door_1() //checked matches cerberus output
|
afterlife_cell_door_1()
|
||||||
{
|
{
|
||||||
m_door = getent( "powerup_cell_door_1", "targetname" );
|
m_door = getent( "powerup_cell_door_1", "targetname" );
|
||||||
level waittill( "cell_1_powerup_activate" );
|
|
||||||
wait 1;
|
level waittill( "cell_1_powerup_activate" );
|
||||||
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
|
|
||||||
m_door.opened = 1;
|
wait 1;
|
||||||
m_door movex( 36, 2, 1 );
|
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
|
||||||
m_door playsound( "zmb_jail_door" );
|
m_door.opened = 1;
|
||||||
|
m_door movex( 36, 2, 1 );
|
||||||
|
m_door playsound( "zmb_jail_door" );
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_cell_door_2() //checked matches cerberus output
|
afterlife_cell_door_2()
|
||||||
{
|
{
|
||||||
m_door = getent( "powerup_cell_door_2", "targetname" );
|
m_door = getent( "powerup_cell_door_2", "targetname" );
|
||||||
level waittill( "cell_2_powerup_activate" );
|
|
||||||
wait 1;
|
level waittill( "cell_2_powerup_activate" );
|
||||||
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
|
|
||||||
m_door.opened = 1;
|
wait 1;
|
||||||
m_door movex( -34, 2, 1 );
|
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
|
||||||
m_door playsound( "zmb_jail_door" );
|
m_door.opened = 1;
|
||||||
|
m_door movex( -34, 2, 1 );
|
||||||
|
m_door playsound( "zmb_jail_door" );
|
||||||
}
|
}
|
||||||
|
|
||||||
spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output
|
spawn_infinite_powerup_drop( v_origin, str_type )
|
||||||
{
|
{
|
||||||
level._powerup_timeout_override = ::powerup_infinite_time;
|
level._powerup_timeout_override = ::powerup_infinite_time;
|
||||||
if ( isDefined( str_type ) )
|
|
||||||
{
|
if ( isdefined( str_type ) )
|
||||||
intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin );
|
intro_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_type, v_origin );
|
||||||
}
|
else
|
||||||
else
|
intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin );
|
||||||
{
|
|
||||||
intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin );
|
level._powerup_timeout_override = undefined;
|
||||||
}
|
|
||||||
level._powerup_timeout_override = undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
powerup_infinite_time() //checked matches cerberus output
|
powerup_infinite_time()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
power_on_perk_machines() //checked changed to match cerberus output
|
power_on_perk_machines()
|
||||||
{
|
{
|
||||||
level waittill_any( "unlock_all_perk_machines", "open_sesame" );
|
level waittill_any( "unlock_all_perk_machines", "open_sesame" );
|
||||||
a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" );
|
a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" );
|
||||||
foreach ( e_shockbox in a_shockboxes )
|
|
||||||
{
|
foreach ( e_shockbox in a_shockboxes )
|
||||||
e_shockbox notify( "damage" );
|
{
|
||||||
wait 1;
|
e_shockbox notify( "damage", 1, level );
|
||||||
}
|
wait 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_main_controller() //checked matches cerberus output
|
sq_main_controller()
|
||||||
{
|
{
|
||||||
precacheshader( "zm_al_wth_zombie" );
|
precacheshader( "zm_al_wth_zombie" );
|
||||||
onplayerconnect_callback( maps/mp/zm_prison_sq_final::onplayerconnect_sq_final );
|
onplayerconnect_callback( maps\mp\zm_prison_sq_final::onplayerconnect_sq_final );
|
||||||
level thread maps/mp/zm_prison_sq_final::stage_one();
|
level thread maps\mp\zm_prison_sq_final::stage_one();
|
||||||
onplayerconnect_callback( maps/mp/zm_prison_sq_fc::onplayerconnect_sq_fc );
|
onplayerconnect_callback( maps\mp\zm_prison_sq_fc::onplayerconnect_sq_fc );
|
||||||
level thread maps/mp/zm_prison_sq_fc::watch_for_trigger_condition();
|
level thread maps\mp\zm_prison_sq_fc::watch_for_trigger_condition();
|
||||||
onplayerconnect_callback( maps/mp/zm_prison_sq_wth::onplayerconnect_sq_wth );
|
onplayerconnect_callback( maps\mp\zm_prison_sq_wth::onplayerconnect_sq_wth );
|
||||||
}
|
}
|
||||||
|
|
||||||
player_quest_vfx() //checked matches cerberus output
|
player_quest_vfx()
|
||||||
{
|
{
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
wait 1;
|
wait 1;
|
||||||
if ( !flag( "generator_challenge_completed" ) )
|
|
||||||
{
|
|
||||||
exploder( 2000 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if ( !flag( "generator_challenge_completed" ) )
|
||||||
|
exploder( 2000 );
|
||||||
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,169 +1,150 @@
|
|||||||
#include maps/mp/zombies/_zm_spawner;
|
// 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_spawner;
|
||||||
|
|
||||||
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 = 1500;
|
level.zombie_tracking_dist = 1500;
|
||||||
}
|
|
||||||
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 = 10;
|
||||||
{
|
|
||||||
level.zombie_tracking_wait = 10;
|
while ( true )
|
||||||
}
|
{
|
||||||
for ( ;; )
|
zombies = get_round_enemy_array();
|
||||||
{
|
|
||||||
while ( 1 )
|
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||||
{
|
{
|
||||||
zombies = get_round_enemy_array();
|
wait( level.zombie_tracking_wait );
|
||||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
continue;
|
||||||
{
|
}
|
||||||
wait level.zombie_tracking_wait;
|
else
|
||||||
}
|
{
|
||||||
}
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
else i = 0;
|
{
|
||||||
while ( i < zombies.size )
|
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
|
||||||
{
|
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
||||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
}
|
||||||
{
|
}
|
||||||
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
|
||||||
}
|
wait( level.zombie_tracking_wait );
|
||||||
i++;
|
}
|
||||||
}
|
|
||||||
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 ( !isDefined( how_close ) )
|
|
||||||
{
|
if ( !isdefined( how_close ) )
|
||||||
how_close = 1500;
|
how_close = 1500;
|
||||||
}
|
|
||||||
if ( !isDefined( how_high ) )
|
if ( !isdefined( how_high ) )
|
||||||
{
|
how_close = 600;
|
||||||
how_close = 600;
|
|
||||||
}
|
distance_squared_check = how_close * how_close;
|
||||||
distance_squared_check = how_close * how_close;
|
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();
|
|
||||||
i = 0;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
{
|
||||||
{
|
if ( players[i].sessionstate == "spectator" )
|
||||||
if ( players[ i ].sessionstate == "spectator" )
|
continue;
|
||||||
{
|
|
||||||
i++;
|
if ( isdefined( level.only_track_targeted_players ) )
|
||||||
continue;
|
{
|
||||||
}
|
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||||
else if ( isDefined( level.only_track_targeted_players ) )
|
continue;
|
||||||
{
|
}
|
||||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
|
|
||||||
{
|
can_be_seen = self player_can_see_me( players[i] );
|
||||||
i++;
|
|
||||||
continue;
|
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||||
}
|
self.inview++;
|
||||||
}
|
|
||||||
else
|
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||||
{
|
self.player_close++;
|
||||||
can_be_seen = self player_can_see_me( players[ i ] );
|
}
|
||||||
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
|
|
||||||
{
|
wait 0.1;
|
||||||
self.inview++;
|
|
||||||
}
|
if ( self.inview == 0 && self.player_close == 0 )
|
||||||
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
|
{
|
||||||
{
|
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||||
self.player_close++;
|
return;
|
||||||
}
|
|
||||||
}
|
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||||
i++;
|
return;
|
||||||
}
|
|
||||||
wait 0,1;
|
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||||
if ( self.inview == 0 && self.player_close == 0 )
|
return;
|
||||||
{
|
|
||||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
zombies = getaiarray( "axis" );
|
||||||
{
|
|
||||||
return;
|
if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth )
|
||||||
}
|
{
|
||||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
{
|
{
|
||||||
return;
|
level.zombie_total++;
|
||||||
}
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
}
|
||||||
{
|
}
|
||||||
return;
|
else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
|
||||||
}
|
{
|
||||||
zombies = getaiarray( "axis" );
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth )
|
{
|
||||||
{
|
level.zombie_total++;
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
|
||||||
{
|
if ( self.health < level.zombie_health )
|
||||||
level.zombie_total++;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
{
|
self notify( "zombie_delete" );
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
|
self delete();
|
||||||
{
|
recalc_zombie_array();
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
}
|
||||||
{
|
|
||||||
level.zombie_total++;
|
|
||||||
if ( self.health < level.zombie_health )
|
|
||||||
{
|
|
||||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
|
||||||
self notify( "zombie_delete" );
|
|
||||||
self delete();
|
|
||||||
recalc_zombie_array();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
{
|
else
|
||||||
anglefromcenter = 180;
|
anglefromcenter = acos( forwarddotbanzai );
|
||||||
}
|
|
||||||
else
|
playerfov = getdvarfloat( "cg_fov" );
|
||||||
{
|
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||||
anglefromcenter = acos( forwarddotbanzai );
|
|
||||||
}
|
if ( banzaivsplayerfovbuffer <= 0 )
|
||||||
playerfov = getDvarFloat( "cg_fov" );
|
banzaivsplayerfovbuffer = 0.2;
|
||||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
|
||||||
if ( banzaivsplayerfovbuffer <= 0 )
|
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||||
{
|
return playercanseeme;
|
||||||
banzaivsplayerfovbuffer = 0,2;
|
|
||||||
}
|
|
||||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
|
||||||
return playercanseeme;
|
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
//checked includes changed to match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_alcatraz_classic;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_alcatraz_grief_cellblock;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zm_prison;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_prison;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_alcatraz_grief_cellblock;
|
||||||
|
#include maps\mp\zm_alcatraz_classic;
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
level.custom_vending_precaching = maps/mp/zm_prison::custom_vending_precaching;
|
level.custom_vending_precaching = maps\mp\zm_prison::custom_vending_precaching;
|
||||||
add_map_gamemode( "zclassic", maps/mp/zm_prison::zclassic_preinit, undefined, undefined );
|
add_map_gamemode( "zclassic", maps\mp\zm_prison::zclassic_preinit, undefined, undefined );
|
||||||
add_map_gamemode( "zgrief", maps/mp/zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
|
add_map_gamemode( "zgrief", maps\mp\zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
|
||||||
add_map_location_gamemode( "zclassic", "prison", maps/mp/zm_alcatraz_classic::precache, maps/mp/zm_alcatraz_classic::main );
|
add_map_location_gamemode( "zclassic", "prison", maps\mp\zm_alcatraz_classic::precache, maps\mp\zm_alcatraz_classic::main );
|
||||||
add_map_location_gamemode( "zgrief", "cellblock", maps/mp/zm_alcatraz_grief_cellblock::precache, maps/mp/zm_alcatraz_grief_cellblock::main );
|
add_map_location_gamemode( "zgrief", "cellblock", maps\mp\zm_alcatraz_grief_cellblock::precache, maps\mp\zm_alcatraz_grief_cellblock::main );
|
||||||
}
|
}
|
||||||
|
@ -1,482 +1,498 @@
|
|||||||
//checked includes changed to match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/zmeat;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_alcatraz_traps;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_blockers;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_ai_brutus;
|
#include maps\mp\zombies\_zm_race_utility;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\zm_prison;
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
#include maps/mp/zm_prison;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/zombies/_zm_race_utility;
|
#include maps\mp\zombies\_zm_ai_brutus;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_blockers;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_alcatraz_traps;
|
||||||
|
#include maps\mp\gametypes_zm\zmeat;
|
||||||
|
|
||||||
precache() //checked matches cerberus output
|
precache()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zgrief_preinit() //checked matches cerberus output
|
zgrief_preinit()
|
||||||
{
|
{
|
||||||
registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
|
registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
|
||||||
level.givecustomloadout = maps/mp/zm_prison::givecustomloadout;
|
level.givecustomloadout = maps\mp\zm_prison::givecustomloadout;
|
||||||
zgrief_init();
|
zgrief_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
zgrief_init() //checked matches cerberus output
|
zgrief_init()
|
||||||
{
|
{
|
||||||
encounter_init();
|
encounter_init();
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
if ( level.round_number < 4 && level.gamedifficulty != 0 )
|
|
||||||
{
|
if ( level.round_number < 4 && level.gamedifficulty != 0 )
|
||||||
level.zombie_move_speed = 35;
|
level.zombie_move_speed = 35;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
encounter_init() //checked matches cerberus output
|
encounter_init()
|
||||||
{
|
{
|
||||||
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
|
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
|
||||||
level.precachecustomcharacters = ::precache_team_characters;
|
level.precachecustomcharacters = ::precache_team_characters;
|
||||||
level.givecustomcharacters = ::give_team_characters;
|
level.givecustomcharacters = ::give_team_characters;
|
||||||
level.gamemode_post_spawn_logic = ::give_player_shiv;
|
level.gamemode_post_spawn_logic = ::give_player_shiv;
|
||||||
}
|
}
|
||||||
|
|
||||||
alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output
|
alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
|
||||||
{
|
{
|
||||||
if ( self hasperk( "specialty_additionalprimaryweapon" ) )
|
if ( self hasperk( "specialty_additionalprimaryweapon" ) )
|
||||||
{
|
{
|
||||||
primary_weapons_that_can_be_taken = [];
|
primary_weapons_that_can_be_taken = [];
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
for ( i = 0; i < primaryweapons.size; i++ )
|
|
||||||
{
|
for ( i = 0; i < primaryweapons.size; i++ )
|
||||||
if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) )
|
{
|
||||||
{
|
if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) )
|
||||||
primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ];
|
primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( primary_weapons_that_can_be_taken.size >= 3 )
|
if ( primary_weapons_that_can_be_taken.size >= 3 )
|
||||||
{
|
{
|
||||||
weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ];
|
weapon_to_take = primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size - 1];
|
||||||
self takeweapon( weapon_to_take );
|
self takeweapon( weapon_to_take );
|
||||||
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take;
|
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.grief_savedweapon_weapons = self getweaponslist();
|
|
||||||
self.grief_savedweapon_weaponsammo_stock = [];
|
self.grief_savedweapon_weapons = self getweaponslist();
|
||||||
self.grief_savedweapon_weaponsammo_clip = [];
|
self.grief_savedweapon_weaponsammo_stock = [];
|
||||||
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
self.grief_savedweapon_weaponsammo_clip = [];
|
||||||
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
||||||
if ( isDefined( self.grief_savedweapon_grenades ) )
|
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
||||||
{
|
|
||||||
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
if ( isdefined( self.grief_savedweapon_grenades ) )
|
||||||
}
|
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
||||||
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
|
||||||
if ( isDefined( self.grief_savedweapon_tactical ) )
|
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
||||||
{
|
|
||||||
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
|
if ( isdefined( self.grief_savedweapon_tactical ) )
|
||||||
}
|
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
|
||||||
for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ )
|
|
||||||
{
|
for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ )
|
||||||
self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] );
|
{
|
||||||
self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] );
|
self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] );
|
||||||
}
|
self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] );
|
||||||
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
|
}
|
||||||
{
|
|
||||||
self.grief_hasriotshield = 1;
|
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||||
}
|
self.grief_hasriotshield = 1;
|
||||||
if ( self hasweapon( "claymore_zm" ) )
|
|
||||||
{
|
if ( self hasweapon( "claymore_zm" ) )
|
||||||
self.grief_savedweapon_claymore = 1;
|
{
|
||||||
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
|
self.grief_savedweapon_claymore = 1;
|
||||||
}
|
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_team_characters() //checked matches cerberus output
|
precache_team_characters()
|
||||||
{
|
{
|
||||||
precachemodel( "c_zom_player_grief_guard_fb" );
|
precachemodel( "c_zom_player_grief_guard_fb" );
|
||||||
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
|
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
|
||||||
precachemodel( "c_zom_player_grief_inmate_fb" );
|
precachemodel( "c_zom_player_grief_inmate_fb" );
|
||||||
precachemodel( "c_zom_grief_guard_viewhands" );
|
precachemodel( "c_zom_grief_guard_viewhands" );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_team_characters() //checked matches cerberus output
|
give_team_characters()
|
||||||
{
|
{
|
||||||
self detachall();
|
self detachall();
|
||||||
self set_player_is_female( 0 );
|
self set_player_is_female( 0 );
|
||||||
if ( !isDefined( self.characterindex ) )
|
|
||||||
{
|
if ( !isdefined( self.characterindex ) )
|
||||||
self.characterindex = 1;
|
{
|
||||||
if ( self.team == "axis" )
|
self.characterindex = 1;
|
||||||
{
|
|
||||||
self.characterindex = 0;
|
if ( self.team == "axis" )
|
||||||
}
|
self.characterindex = 0;
|
||||||
}
|
}
|
||||||
switch( self.characterindex )
|
|
||||||
{
|
switch ( self.characterindex )
|
||||||
case 0:
|
{
|
||||||
case 2:
|
case "2":
|
||||||
self setmodel( "c_zom_player_grief_inmate_fb" );
|
case "0":
|
||||||
self.voice = "american";
|
self setmodel( "c_zom_player_grief_inmate_fb" );
|
||||||
self.skeleton = "base";
|
self.voice = "american";
|
||||||
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
|
self.skeleton = "base";
|
||||||
self.characterindex = 0;
|
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
|
||||||
break;
|
self.characterindex = 0;
|
||||||
case 1:
|
break;
|
||||||
case 3:
|
case "3":
|
||||||
self setmodel( "c_zom_player_grief_guard_fb" );
|
case "1":
|
||||||
self.voice = "american";
|
self setmodel( "c_zom_player_grief_guard_fb" );
|
||||||
self.skeleton = "base";
|
self.voice = "american";
|
||||||
self setviewmodel( "c_zom_grief_guard_viewhands" );
|
self.skeleton = "base";
|
||||||
self.characterindex = 1;
|
self setviewmodel( "c_zom_grief_guard_viewhands" );
|
||||||
break;
|
self.characterindex = 1;
|
||||||
}
|
break;
|
||||||
self setmovespeedscale( 1 );
|
}
|
||||||
self setsprintduration( 4 );
|
|
||||||
self setsprintcooldown( 0 );
|
self setmovespeedscale( 1 );
|
||||||
|
self setsprintduration( 4 );
|
||||||
|
self setsprintcooldown( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_player_shiv() //checked matches cerberus output
|
give_player_shiv()
|
||||||
{
|
{
|
||||||
self takeweapon( "knife_zm" );
|
self takeweapon( "knife_zm" );
|
||||||
self giveweapon( "knife_zm_alcatraz" );
|
self giveweapon( "knife_zm_alcatraz" );
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_treasure_chest_init() //checked matches cerberus output
|
grief_treasure_chest_init()
|
||||||
{
|
{
|
||||||
chest1 = getstruct( "start_chest", "script_noteworthy" );
|
chest1 = getstruct( "start_chest", "script_noteworthy" );
|
||||||
chest2 = getstruct( "cafe_chest", "script_noteworthy" );
|
chest2 = getstruct( "cafe_chest", "script_noteworthy" );
|
||||||
setdvar( "disableLookAtEntityLogic", 1 );
|
setdvar( "disableLookAtEntityLogic", 1 );
|
||||||
level.chests = [];
|
level.chests = [];
|
||||||
level.chests[ level.chests.size ] = chest1;
|
level.chests[level.chests.size] = chest1;
|
||||||
level.chests[ level.chests.size ] = chest2;
|
level.chests[level.chests.size] = chest2;
|
||||||
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
|
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
|
||||||
}
|
}
|
||||||
|
|
||||||
main() //checked partially changed to match cerberus output changed at own discretion see info.md
|
main()
|
||||||
{
|
{
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "cellblock" );
|
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" );
|
||||||
grief_treasure_chest_init();
|
grief_treasure_chest_init();
|
||||||
precacheshader( "zm_al_wth_zombie" );
|
precacheshader( "zm_al_wth_zombie" );
|
||||||
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief );
|
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief );
|
||||||
maps/mp/zombies/_zm_ai_brutus::precache();
|
maps\mp\zombies\_zm_ai_brutus::precache();
|
||||||
maps/mp/zombies/_zm_ai_brutus::init();
|
maps\mp\zombies\_zm_ai_brutus::init();
|
||||||
level.enemy_location_override_func = ::enemy_location_override;
|
level.enemy_location_override_func = ::enemy_location_override;
|
||||||
level._effect[ "butterflies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
|
level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
|
||||||
a_t_door_triggers = getentarray( "zombie_door", "targetname" );
|
a_t_door_triggers = getentarray( "zombie_door", "targetname" );
|
||||||
triggers = a_t_door_triggers;
|
|
||||||
i = 0;
|
foreach ( trigger in a_t_door_triggers )
|
||||||
while ( i < triggers.size )
|
{
|
||||||
{
|
if ( isdefined( trigger.script_flag ) )
|
||||||
if ( isDefined( triggers[ i ].script_flag ) )
|
{
|
||||||
{
|
if ( trigger.script_flag == "activate_cellblock_citadel" || trigger.script_flag == "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" || trigger.script_flag == "activate_infirmary" )
|
||||||
if ( triggers[ i ].script_flag == "activate_cellblock_citadel" || triggers[ i ].script_flag == "activate_shower_room" || triggers[ i ].script_flag == "activate_cellblock_infirmary" || triggers[ i ].script_flag == "activate_infirmary" )
|
{
|
||||||
{
|
trigger delete();
|
||||||
triggers[ i ] delete();
|
continue;
|
||||||
i++;
|
}
|
||||||
continue;
|
|
||||||
}
|
if ( trigger.script_flag == "activate_cafeteria" || trigger.script_flag == "activate_cellblock_east" || trigger.script_flag == "activate_cellblock_west" || trigger.script_flag == "activate_cellblock_barber" || trigger.script_flag == "activate_cellblock_gondola" || trigger.script_flag == "activate_cellblock_east_west" || trigger.script_flag == "activate_warden_office" )
|
||||||
if ( triggers[ i ].script_flag == "activate_cafeteria" || triggers[ i ].script_flag == "activate_cellblock_east" || triggers[ i ].script_flag == "activate_cellblock_west" || triggers[ i ].script_flag == "activate_cellblock_barber" || triggers[ i ].script_flag == "activate_cellblock_gondola" || triggers[ i ].script_flag == "activate_cellblock_east_west" || triggers[ i ].script_flag == "activate_warden_office" )
|
{
|
||||||
{
|
continue;
|
||||||
i++;
|
continue;
|
||||||
continue;
|
}
|
||||||
}
|
|
||||||
if ( isDefined( triggers[ i ].target ) )
|
if ( isdefined( trigger.target ) )
|
||||||
{
|
{
|
||||||
str_target = triggers[ i ].target;
|
str_target = trigger.target;
|
||||||
a_door_and_clip = getentarray( str_target, "targetname" );
|
a_door_and_clip = getentarray( str_target, "targetname" );
|
||||||
foreach ( ent in a_door_and_clip )
|
|
||||||
{
|
foreach ( ent in a_door_and_clip )
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
triggers[ i ] delete();
|
trigger delete();
|
||||||
}
|
}
|
||||||
i++;
|
}
|
||||||
}
|
|
||||||
a_t_doors = getentarray( "zombie_door", "targetname" );
|
a_t_doors = getentarray( "zombie_door", "targetname" );
|
||||||
foreach ( t_door in a_t_doors )
|
|
||||||
{
|
foreach ( t_door in a_t_doors )
|
||||||
if ( isDefined( t_door.script_flag ) )
|
{
|
||||||
{
|
if ( isdefined( t_door.script_flag ) )
|
||||||
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" )
|
{
|
||||||
{
|
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" )
|
||||||
t_door maps/mp/zombies/_zm_blockers::door_opened( self.zombie_cost );
|
t_door maps\mp\zombies\_zm_blockers::door_opened( self.zombie_cost );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
zbarriers = getzbarrierarray();
|
zbarriers = getzbarrierarray();
|
||||||
a_str_zones = [];
|
a_str_zones = [];
|
||||||
a_str_zones[ 0 ] = "zone_start";
|
a_str_zones[0] = "zone_start";
|
||||||
a_str_zones[ 1 ] = "zone_library";
|
a_str_zones[1] = "zone_library";
|
||||||
a_str_zones[ 2 ] = "zone_cafeteria";
|
a_str_zones[2] = "zone_cafeteria";
|
||||||
a_str_zones[ 3 ] = "zone_cafeteria_end";
|
a_str_zones[3] = "zone_cafeteria_end";
|
||||||
a_str_zones[ 4 ] = "zone_warden_office";
|
a_str_zones[4] = "zone_warden_office";
|
||||||
a_str_zones[ 5 ] = "zone_cellblock_east";
|
a_str_zones[5] = "zone_cellblock_east";
|
||||||
a_str_zones[ 6 ] = "zone_cellblock_west_warden";
|
a_str_zones[6] = "zone_cellblock_west_warden";
|
||||||
a_str_zones[ 7 ] = "zone_cellblock_west_barber";
|
a_str_zones[7] = "zone_cellblock_west_barber";
|
||||||
a_str_zones[ 8 ] = "zone_cellblock_west";
|
a_str_zones[8] = "zone_cellblock_west";
|
||||||
a_str_zones[ 9 ] = "zone_cellblock_west_gondola";
|
a_str_zones[9] = "zone_cellblock_west_gondola";
|
||||||
foreach ( barrier in zbarriers )
|
|
||||||
{
|
foreach ( barrier in zbarriers )
|
||||||
if ( isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "cafe_chest_zbarrier" || isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "start_chest_zbarrier" )
|
{
|
||||||
{
|
if ( isdefined( barrier.script_noteworthy ) )
|
||||||
}
|
{
|
||||||
else
|
if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
|
||||||
{
|
continue;
|
||||||
str_model = barrier.model;
|
}
|
||||||
b_delete_barrier = 1;
|
|
||||||
if ( isdefined( barrier.script_string ) )
|
b_delete_barrier = 1;
|
||||||
{
|
|
||||||
for ( i = 0; i < a_str_zones.size; i++ )
|
if ( isdefined( barrier.script_string ) )
|
||||||
{
|
{
|
||||||
if ( str_model == a_str_zones[ i ] )
|
for ( i = 0; i < a_str_zones.size; i++ )
|
||||||
{
|
{
|
||||||
b_delete_barrier = 0;
|
if ( barrier.script_string == a_str_zones[i] )
|
||||||
break;
|
{
|
||||||
}
|
b_delete_barrier = 0;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
else if ( b_delete_barrier == 1 )
|
}
|
||||||
{
|
}
|
||||||
barrier delete();
|
|
||||||
}
|
if ( b_delete_barrier == 1 )
|
||||||
}
|
barrier delete();
|
||||||
}
|
}
|
||||||
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
|
|
||||||
t_temp delete();
|
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
|
||||||
t_temp = getent( "tower_trap_range_trigger", "targetname" );
|
t_temp delete();
|
||||||
t_temp delete();
|
t_temp = getent( "tower_trap_range_trigger", "targetname" );
|
||||||
e_model = getent( "trap_control_docks", "targetname" );
|
t_temp delete();
|
||||||
e_model delete();
|
e_model = getent( "trap_control_docks", "targetname" );
|
||||||
e_brush = getent( "tower_shockbox_door", "targetname" );
|
e_model delete();
|
||||||
e_brush delete();
|
e_brush = getent( "tower_shockbox_door", "targetname" );
|
||||||
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
|
e_brush delete();
|
||||||
foreach ( trigger in a_t_travel_triggers )
|
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
|
||||||
{
|
|
||||||
trigger delete();
|
foreach ( trigger in a_t_travel_triggers )
|
||||||
}
|
trigger delete();
|
||||||
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
|
|
||||||
foreach ( light in a_e_gondola_lights )
|
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
|
||||||
{
|
|
||||||
light delete();
|
foreach ( light in a_e_gondola_lights )
|
||||||
}
|
light delete();
|
||||||
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
|
|
||||||
foreach ( model in a_e_gondola_landing_gates )
|
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
|
||||||
{
|
|
||||||
model delete();
|
foreach ( model in a_e_gondola_landing_gates )
|
||||||
}
|
model delete();
|
||||||
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
|
|
||||||
foreach ( model in a_e_gondola_landing_doors )
|
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
|
||||||
{
|
|
||||||
model delete();
|
foreach ( model in a_e_gondola_landing_doors )
|
||||||
}
|
model delete();
|
||||||
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
|
|
||||||
foreach ( model in a_e_gondola_gates )
|
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
|
||||||
{
|
|
||||||
model delete();
|
foreach ( model in a_e_gondola_gates )
|
||||||
}
|
model delete();
|
||||||
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
|
|
||||||
foreach ( model in a_e_gondola_doors )
|
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
|
||||||
{
|
|
||||||
model delete();
|
foreach ( model in a_e_gondola_doors )
|
||||||
}
|
model delete();
|
||||||
m_gondola = getent( "zipline_gondola", "targetname" );
|
|
||||||
m_gondola delete();
|
m_gondola = getent( "zipline_gondola", "targetname" );
|
||||||
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
|
m_gondola delete();
|
||||||
t_ride_trigger delete();
|
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
|
||||||
a_classic_clips = getentarray( "classic_clips", "targetname" );
|
t_ride_trigger delete();
|
||||||
foreach ( clip in a_classic_clips )
|
a_classic_clips = getentarray( "classic_clips", "targetname" );
|
||||||
{
|
|
||||||
clip connectpaths();
|
foreach ( clip in a_classic_clips )
|
||||||
clip delete();
|
{
|
||||||
}
|
clip connectpaths();
|
||||||
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
|
clip delete();
|
||||||
foreach ( m_prop in a_afterlife_props )
|
}
|
||||||
{
|
|
||||||
m_prop delete();
|
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
|
||||||
}
|
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
foreach ( m_prop in a_afterlife_props )
|
||||||
spork_portal delete();
|
m_prop delete();
|
||||||
a_audio = getentarray( "at_headphones", "script_noteworthy" );
|
|
||||||
foreach ( model in a_audio )
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
{
|
spork_portal delete();
|
||||||
model delete();
|
a_audio = getentarray( "at_headphones", "script_noteworthy" );
|
||||||
}
|
|
||||||
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
foreach ( model in a_audio )
|
||||||
m_spoon_pickup delete();
|
model delete();
|
||||||
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
|
|
||||||
t_sq_bg delete();
|
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
||||||
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
|
m_spoon_pickup delete();
|
||||||
foreach ( trigger in t_crafting_table )
|
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
|
||||||
{
|
t_sq_bg delete();
|
||||||
trigger delete();
|
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
|
||||||
}
|
|
||||||
t_warden_fence = getent( "warden_fence_damage", "targetname" );
|
foreach ( trigger in t_crafting_table )
|
||||||
t_warden_fence delete();
|
trigger delete();
|
||||||
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
|
|
||||||
m_plane_about_to_crash delete();
|
t_warden_fence = getent( "warden_fence_damage", "targetname" );
|
||||||
m_plane_craftable = getent( "plane_craftable", "targetname" );
|
t_warden_fence delete();
|
||||||
m_plane_craftable delete();
|
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
|
||||||
for ( i = 1; i <= 5; i++ )
|
m_plane_about_to_crash delete();
|
||||||
{
|
m_plane_craftable = getent( "plane_craftable", "targetname" );
|
||||||
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
|
m_plane_craftable delete();
|
||||||
m_key_lock delete();
|
|
||||||
}
|
for ( i = 1; i <= 5; i++ )
|
||||||
m_shower_door = getent( "shower_key_door", "targetname" );
|
{
|
||||||
m_shower_door delete();
|
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
|
||||||
m_nixie_door = getent( "nixie_door_left", "targetname" );
|
m_key_lock delete();
|
||||||
m_nixie_door delete();
|
}
|
||||||
m_nixie_door = getent( "nixie_door_right", "targetname" );
|
|
||||||
m_nixie_door delete();
|
m_shower_door = getent( "shower_key_door", "targetname" );
|
||||||
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
|
m_shower_door delete();
|
||||||
m_nixie_brush delete();
|
m_nixie_door = getent( "nixie_door_left", "targetname" );
|
||||||
for ( i = 1; i <= 3; i++ )
|
m_nixie_door delete();
|
||||||
{
|
m_nixie_door = getent( "nixie_door_right", "targetname" );
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_door delete();
|
||||||
m_nixie_tube delete();
|
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
|
||||||
}
|
m_nixie_brush delete();
|
||||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
|
||||||
t_elevator_door delete();
|
for ( i = 1; i <= 3; i++ )
|
||||||
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
|
{
|
||||||
e_elevator_clip delete();
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
|
m_nixie_tube delete();
|
||||||
e_elevator_bottom_gate delete();
|
}
|
||||||
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
|
|
||||||
e_elevator_bottom_gate delete();
|
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||||
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
|
t_elevator_door delete();
|
||||||
m_docks_puzzle delete();
|
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
|
||||||
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
|
e_elevator_clip delete();
|
||||||
m_docks_puzzle delete();
|
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
|
||||||
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
|
e_elevator_bottom_gate delete();
|
||||||
m_infirmary_case delete();
|
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
|
||||||
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
|
e_elevator_bottom_gate delete();
|
||||||
m_infirmary_case delete();
|
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
|
||||||
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
|
m_docks_puzzle delete();
|
||||||
fake_plane_part delete();
|
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
|
||||||
for ( i = 1; i <= 3; i++ )
|
m_docks_puzzle delete();
|
||||||
{
|
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
|
||||||
m_generator = getent( "generator_panel_" + i, "targetname" );
|
m_infirmary_case delete();
|
||||||
m_generator delete();
|
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
|
||||||
}
|
m_infirmary_case delete();
|
||||||
a_m_generator_core = getentarray( "generator_core", "targetname" );
|
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
|
||||||
foreach ( generator in a_m_generator_core )
|
fake_plane_part delete();
|
||||||
{
|
|
||||||
generator delete();
|
for ( i = 1; i <= 3; i++ )
|
||||||
}
|
{
|
||||||
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
|
m_generator = getent( "generator_panel_" + i, "targetname" );
|
||||||
e_playerclip delete();
|
m_generator delete();
|
||||||
for ( i = 1; i <= 4; i++ )
|
}
|
||||||
{
|
|
||||||
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
|
a_m_generator_core = getentarray( "generator_core", "targetname" );
|
||||||
t_use delete();
|
|
||||||
m_chair = getent( "electric_chair_" + i, "targetname" );
|
foreach ( generator in a_m_generator_core )
|
||||||
m_chair delete();
|
generator delete();
|
||||||
}
|
|
||||||
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
|
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
|
||||||
foreach ( model in a_afterlife_interact )
|
e_playerclip delete();
|
||||||
{
|
|
||||||
model turn_afterlife_interact_on();
|
for ( i = 1; i <= 4; i++ )
|
||||||
wait 0.1;
|
{
|
||||||
}
|
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
t_use delete();
|
||||||
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors();
|
m_chair = getent( "electric_chair_" + i, "targetname" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
m_chair delete();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
|
}
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
|
|
||||||
wait 1;
|
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
|
||||||
level notify( "sleight_on" );
|
|
||||||
wait_network_frame();
|
foreach ( model in a_afterlife_interact )
|
||||||
level notify( "doubletap_on" );
|
{
|
||||||
wait_network_frame();
|
model turn_afterlife_interact_on();
|
||||||
level notify( "juggernog_on" );
|
wait 0.1;
|
||||||
wait_network_frame();
|
}
|
||||||
level notify( "electric_cherry_on" );
|
|
||||||
wait_network_frame();
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
level notify( "deadshot_on" );
|
maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors();
|
||||||
wait_network_frame();
|
flag_wait( "start_zombie_round_logic" );
|
||||||
level notify( "divetonuke_on" );
|
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
|
||||||
wait_network_frame();
|
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
|
||||||
level notify( "additionalprimaryweapon_on" );
|
wait 1;
|
||||||
wait_network_frame();
|
level notify( "sleight_on" );
|
||||||
level notify( "Pack_A_Punch_on" );
|
wait_network_frame();
|
||||||
wait_network_frame();
|
level notify( "doubletap_on" );
|
||||||
/*
|
wait_network_frame();
|
||||||
|
level notify( "juggernog_on" );
|
||||||
|
wait_network_frame();
|
||||||
|
level notify( "electric_cherry_on" );
|
||||||
|
wait_network_frame();
|
||||||
|
level notify( "deadshot_on" );
|
||||||
|
wait_network_frame();
|
||||||
|
level notify( "divetonuke_on" );
|
||||||
|
wait_network_frame();
|
||||||
|
level notify( "additionalprimaryweapon_on" );
|
||||||
|
wait_network_frame();
|
||||||
|
level notify( "Pack_A_Punch_on" );
|
||||||
|
wait_network_frame();
|
||||||
/#
|
/#
|
||||||
level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager();
|
level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager();
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_zombie_hats_for_grief() //checked matches cerberus output
|
remove_zombie_hats_for_grief()
|
||||||
{
|
{
|
||||||
self detach( "c_zom_guard_hat" );
|
self detach( "c_zom_guard_hat" );
|
||||||
}
|
}
|
||||||
|
|
||||||
enemy_location_override( zombie, enemy ) //checked matches cerberus output
|
enemy_location_override( zombie, enemy )
|
||||||
{
|
{
|
||||||
location = enemy.origin;
|
location = enemy.origin;
|
||||||
if ( is_true( self.reroute ) )
|
|
||||||
{
|
if ( is_true( self.reroute ) )
|
||||||
if ( isDefined( self.reroute_origin ) )
|
{
|
||||||
{
|
if ( isdefined( self.reroute_origin ) )
|
||||||
location = self.reroute_origin;
|
location = self.reroute_origin;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
magicbox_face_spawn() //checked matches cerberus output
|
magicbox_face_spawn()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
if ( !is_gametype_active( "zgrief" ) )
|
|
||||||
{
|
if ( !is_gametype_active( "zgrief" ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "user_grabbed_weapon" );
|
self waittill( "user_grabbed_weapon" );
|
||||||
if ( randomint( 50000 ) == 115 )
|
|
||||||
{
|
if ( randomint( 50000 ) == 115 )
|
||||||
self playsoundtoplayer( "zmb_easteregg_face", self );
|
{
|
||||||
self.wth_elem = newclienthudelem( self );
|
self playsoundtoplayer( "zmb_easteregg_face", self );
|
||||||
self.wth_elem.horzalign = "fullscreen";
|
self.wth_elem = newclienthudelem( self );
|
||||||
self.wth_elem.vertalign = "fullscreen";
|
self.wth_elem.horzalign = "fullscreen";
|
||||||
self.wth_elem.sort = 1000;
|
self.wth_elem.vertalign = "fullscreen";
|
||||||
self.wth_elem.foreground = 0;
|
self.wth_elem.sort = 1000;
|
||||||
self.wth_elem.alpha = 1;
|
self.wth_elem.foreground = 0;
|
||||||
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
self.wth_elem.alpha = 1.0;
|
||||||
self.wth_elem.hidewheninmenu = 1;
|
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
||||||
wait 0.25;
|
self.wth_elem.hidewheninmenu = 1;
|
||||||
self.wth_elem destroy();
|
wait 0.25;
|
||||||
}
|
self.wth_elem destroy();
|
||||||
wait 0.05;
|
}
|
||||||
}
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("fxanim_props");
|
||||||
|
|
||||||
turn_afterlife_interact_on()
|
turn_afterlife_interact_on()
|
||||||
{
|
{
|
||||||
if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" )
|
if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
|
|
||||||
{
|
|
||||||
if ( !isDefined( level.shockbox_anim ) )
|
|
||||||
{
|
|
||||||
level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim;
|
|
||||||
level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim;
|
|
||||||
}
|
|
||||||
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
|
|
||||||
{
|
|
||||||
self useanimtree( -1 );
|
|
||||||
self setmodel( "p6_zm_al_shock_box_on" );
|
|
||||||
self setanim( level.shockbox_anim[ "on" ] );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.shockbox_anim ) )
|
||||||
|
{
|
||||||
|
level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim;
|
||||||
|
level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
|
||||||
|
{
|
||||||
|
self useanimtree( -1 );
|
||||||
|
self setmodel( "p6_zm_al_shock_box_on" );
|
||||||
|
self setanim( level.shockbox_anim["on"] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
self delete();
|
||||||
|
}
|
||||||
|
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,28 +1,30 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
|
||||||
precache() //checked matches cerberus output
|
precache()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main() //checked matches cerberus output
|
main()
|
||||||
{
|
{
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "working" );
|
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "working" );
|
||||||
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" );
|
||||||
flag_set( "power_on" );
|
flag_set( "power_on" );
|
||||||
zm_treasure_chest_init();
|
zm_treasure_chest_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
zm_treasure_chest_init() //checked matches cerberus output
|
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" );
|
||||||
}
|
}
|
||||||
|
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
File diff suppressed because it is too large
Load Diff
@ -1,209 +1,211 @@
|
|||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/_globallogic_score;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#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\gametypes_zm\_globallogic_score;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
level thread achievement_full_lockdown();
|
level thread achievement_full_lockdown();
|
||||||
level thread achievement_pop_goes_the_weasel();
|
level thread achievement_pop_goes_the_weasel();
|
||||||
level thread achievement_trapped_in_time();
|
level thread achievement_trapped_in_time();
|
||||||
onplayerconnect_callback( ::onplayerconnect );
|
onplayerconnect_callback( ::onplayerconnect );
|
||||||
level.achievement_sound_func = ::achievement_sound_func;
|
level.achievement_sound_func = ::achievement_sound_func;
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect()
|
||||||
{
|
{
|
||||||
self thread achievement_no_one_escapes_alive();
|
self thread achievement_no_one_escapes_alive();
|
||||||
self thread achievement_feed_the_beast();
|
self thread achievement_feed_the_beast();
|
||||||
self thread achievement_making_the_rounds();
|
self thread achievement_making_the_rounds();
|
||||||
self thread achievement_acid_drip();
|
self thread achievement_acid_drip();
|
||||||
self thread achievement_a_burst_of_flavor();
|
self thread achievement_a_burst_of_flavor();
|
||||||
self thread achievement_paranormal_progress();
|
self thread achievement_paranormal_progress();
|
||||||
self thread achievement_gg_bridge();
|
self thread achievement_gg_bridge();
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_sound_func( achievement_name_lower )
|
achievement_sound_func( achievement_name_lower )
|
||||||
{
|
{
|
||||||
self thread do_player_general_vox( "general", "achievement" );
|
self thread do_player_general_vox( "general", "achievement" );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_player_achievement_stats()
|
init_player_achievement_stats()
|
||||||
{
|
{
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_full_lockdown()
|
achievement_full_lockdown()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level.lockdown_track[ "magic_box" ] = 0;
|
level.lockdown_track["magic_box"] = 0;
|
||||||
level.lockdown_track[ "speedcola_perk" ] = 0;
|
level.lockdown_track["speedcola_perk"] = 0;
|
||||||
level.lockdown_track[ "electric_cherry_perk" ] = 0;
|
level.lockdown_track["electric_cherry_perk"] = 0;
|
||||||
level.lockdown_track[ "jugg_perk" ] = 0;
|
level.lockdown_track["jugg_perk"] = 0;
|
||||||
level.lockdown_track[ "deadshot_perk" ] = 0;
|
level.lockdown_track["deadshot_perk"] = 0;
|
||||||
level.lockdown_track[ "tap_perk" ] = 0;
|
level.lockdown_track["tap_perk"] = 0;
|
||||||
level.lockdown_track[ "plane_ramp" ] = 0;
|
level.lockdown_track["plane_ramp"] = 0;
|
||||||
level.lockdown_track[ "craft_shield" ] = 0;
|
level.lockdown_track["craft_shield"] = 0;
|
||||||
level.lockdown_track[ "craft_kit" ] = 0;
|
level.lockdown_track["craft_kit"] = 0;
|
||||||
b_unlock = 0;
|
b_unlock = 0;
|
||||||
while ( b_unlock == 0 )
|
|
||||||
{
|
while ( b_unlock == 0 )
|
||||||
level waittill( "brutus_locked_object" );
|
{
|
||||||
b_unlock = 1;
|
level waittill( "brutus_locked_object" );
|
||||||
_a92 = level.lockdown_track;
|
|
||||||
_k92 = getFirstArrayKey( _a92 );
|
b_unlock = 1;
|
||||||
while ( isDefined( _k92 ) )
|
|
||||||
{
|
foreach ( b_check in level.lockdown_track )
|
||||||
b_check = _a92[ _k92 ];
|
{
|
||||||
if ( b_check == 0 )
|
if ( b_check == 0 )
|
||||||
{
|
{
|
||||||
b_unlock = 0;
|
b_unlock = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
_k92 = getNextArrayKey( _a92, _k92 );
|
|
||||||
}
|
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
|
||||||
}
|
|
||||||
}
|
|
||||||
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_trapped_in_time()
|
achievement_trapped_in_time()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level.trapped_track[ "acid" ] = 0;
|
level.trapped_track["acid"] = 0;
|
||||||
level.trapped_track[ "fan" ] = 0;
|
level.trapped_track["fan"] = 0;
|
||||||
level.trapped_track[ "tower" ] = 0;
|
level.trapped_track["tower"] = 0;
|
||||||
level.trapped_track[ "tower_upgrade" ] = 0;
|
level.trapped_track["tower_upgrade"] = 0;
|
||||||
b_unlock = 0;
|
b_unlock = 0;
|
||||||
while ( b_unlock == 0 )
|
|
||||||
{
|
while ( b_unlock == 0 )
|
||||||
level waittill_either( "trap_activated", "tower_trap_upgraded" );
|
{
|
||||||
if ( level.round_number >= 10 )
|
level waittill_either( "trap_activated", "tower_trap_upgraded" );
|
||||||
{
|
|
||||||
return;
|
if ( level.round_number >= 10 )
|
||||||
}
|
return;
|
||||||
b_unlock = 1;
|
|
||||||
_a131 = level.trapped_track;
|
b_unlock = 1;
|
||||||
_k131 = getFirstArrayKey( _a131 );
|
|
||||||
while ( isDefined( _k131 ) )
|
foreach ( b_check in level.trapped_track )
|
||||||
{
|
{
|
||||||
b_check = _a131[ _k131 ];
|
if ( b_check == 0 )
|
||||||
if ( b_check == 0 )
|
{
|
||||||
{
|
b_unlock = 0;
|
||||||
b_unlock = 0;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
_k131 = getNextArrayKey( _a131, _k131 );
|
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_pop_goes_the_weasel()
|
achievement_pop_goes_the_weasel()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level waittill( "pop_goes_the_weasel_achieved" );
|
|
||||||
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
|
level waittill( "pop_goes_the_weasel_achieved" );
|
||||||
|
|
||||||
|
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_no_one_escapes_alive()
|
achievement_no_one_escapes_alive()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "player_at_bridge" );
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
|
self waittill( "player_at_bridge" );
|
||||||
|
|
||||||
|
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_feed_the_beast()
|
achievement_feed_the_beast()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "player_obtained_tomahawk" );
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
|
self waittill( "player_obtained_tomahawk" );
|
||||||
|
|
||||||
|
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_making_the_rounds()
|
achievement_making_the_rounds()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
n_completed_trips = 0;
|
|
||||||
while ( n_completed_trips < 3 )
|
for ( n_completed_trips = 0; n_completed_trips < 3; n_completed_trips++ )
|
||||||
{
|
self waittill( "player_completed_cycle" );
|
||||||
self waittill( "player_completed_cycle" );
|
|
||||||
n_completed_trips++;
|
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
|
||||||
}
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_acid_drip()
|
achievement_acid_drip()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "player_obtained_acidgat" );
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
|
self waittill( "player_obtained_acidgat" );
|
||||||
|
|
||||||
|
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_a_burst_of_flavor()
|
achievement_a_burst_of_flavor()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "electric_cherry_start" );
|
{
|
||||||
self.cherry_kills = 0;
|
self waittill( "electric_cherry_start" );
|
||||||
self waittill( "electric_cherry_end" );
|
|
||||||
if ( self.cherry_kills >= 10 )
|
self.cherry_kills = 0;
|
||||||
{
|
|
||||||
break;
|
self waittill( "electric_cherry_end" );
|
||||||
}
|
|
||||||
else
|
if ( self.cherry_kills >= 10 )
|
||||||
{
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
|
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_paranormal_progress()
|
achievement_paranormal_progress()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "player_opened_afterlife_door" );
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
|
self waittill( "player_opened_afterlife_door" );
|
||||||
|
|
||||||
|
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_gg_bridge()
|
achievement_gg_bridge()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
level waittill( "end_of_round" );
|
{
|
||||||
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
|
level waittill( "end_of_round" );
|
||||||
{
|
|
||||||
level waittill( "end_of_round" );
|
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
|
||||||
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
{
|
||||||
{
|
level waittill( "end_of_round" );
|
||||||
break;
|
|
||||||
}
|
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||||
}
|
break;
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
}
|
|
||||||
}
|
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
|
||||||
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
|
|
||||||
}
|
}
|
||||||
|
@ -1,148 +1,178 @@
|
|||||||
#include maps/mp/zombies/_zm_afterlife;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_prison;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#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_zonemgr;
|
||||||
|
#include maps\mp\zm_prison;
|
||||||
|
#include maps\mp\zombies\_zm_afterlife;
|
||||||
|
|
||||||
main_start()
|
main_start()
|
||||||
{
|
{
|
||||||
level thread spawned_collision_ffotd();
|
level thread spawned_collision_ffotd();
|
||||||
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
|
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
|
||||||
t_killbrush_1.script_noteworthy = "kill_brush";
|
t_killbrush_1.script_noteworthy = "kill_brush";
|
||||||
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
|
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
|
||||||
t_killbrush_2.script_noteworthy = "kill_brush";
|
t_killbrush_2.script_noteworthy = "kill_brush";
|
||||||
t_killbrush_3 = spawn( "trigger_box", ( -42, 9348, 1392 ), 0, 200, 100, 128 );
|
t_killbrush_3 = spawn( "trigger_box", ( -50, 9318, 1392 ), 0, 200, 110, 128 );
|
||||||
t_killbrush_3.script_noteworthy = "kill_brush";
|
t_killbrush_3.script_noteworthy = "kill_brush";
|
||||||
|
t_killbrush_4 = spawn( "trigger_box", ( -212, 7876, 74 ), 0, 220, 280, 30 );
|
||||||
|
t_killbrush_4.angles = vectorscale( ( 0, 1, 0 ), 315.0 );
|
||||||
|
t_killbrush_4.script_noteworthy = "kill_brush";
|
||||||
|
t_killbrush_5 = spawn( "trigger_box", ( 896, 6291, 84 ), 0, 798, 498, 332 );
|
||||||
|
t_killbrush_5.angles = vectorscale( ( 0, 1, 0 ), 10.0 );
|
||||||
|
t_killbrush_5.script_noteworthy = "kill_brush";
|
||||||
|
t_killbrush_6 = spawn( "trigger_box", ( 1268, 6870, 232 ), 0, 1024, 512, 512 );
|
||||||
|
t_killbrush_6.angles = vectorscale( ( 0, 1, 0 ), 10.0 );
|
||||||
|
t_killbrush_6.script_noteworthy = "kill_brush";
|
||||||
|
t_killbrush_7 = spawn( "trigger_box", ( 896, 6009, 304 ), 0, 320, 192, 128 );
|
||||||
|
t_killbrush_7.angles = ( 0, 0, 0 );
|
||||||
|
t_killbrush_7.script_noteworthy = "kill_brush";
|
||||||
|
level.gondola_docks_landing_killbrush = t_killbrush_7;
|
||||||
|
t_killbrush_8 = spawn( "trigger_box", ( 934, 9148, 1346 ), 0, 39.7, 55.6, 39.7 );
|
||||||
|
t_killbrush_8.angles = vectorscale( ( 1, 0, 0 ), 325.0 );
|
||||||
|
t_killbrush_8.script_noteworthy = "kill_brush";
|
||||||
|
t_killbrush_9 = spawn( "trigger_box", ( -1338, 5478, 114 ), 0, 200, 50, 100 );
|
||||||
|
t_killbrush_9.angles = vectorscale( ( 0, 1, 0 ), 280.0 );
|
||||||
|
t_killbrush_9.script_noteworthy = "kill_brush";
|
||||||
}
|
}
|
||||||
|
|
||||||
main_end()
|
main_end()
|
||||||
{
|
{
|
||||||
level.equipment_dead_zone_pos = [];
|
level.equipment_dead_zone_pos = [];
|
||||||
level.equipment_dead_zone_rad2 = [];
|
level.equipment_dead_zone_rad2 = [];
|
||||||
level.equipment_dead_zone_pos[ 0 ] = ( 408, 10016, 1128 );
|
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
|
||||||
level.equipment_dead_zone_rad2[ 0 ] = 65536;
|
waittillframeend;
|
||||||
level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 );
|
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
|
||||||
level.equipment_dead_zone_rad2[ 1 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 2 ] = ( -104, 8056, 280 );
|
|
||||||
level.equipment_dead_zone_rad2[ 2 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 3 ] = ( -86, 7712, 114 );
|
|
||||||
level.equipment_dead_zone_rad2[ 3 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 4 ] = ( 447, 5963, 264 );
|
|
||||||
level.equipment_dead_zone_rad2[ 4 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 5 ] = ( 231, 5913, 200 );
|
|
||||||
level.equipment_dead_zone_rad2[ 5 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 6 ] = ( 15, 5877, 136 );
|
|
||||||
level.equipment_dead_zone_rad2[ 6 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 7 ] = ( -335, 5795, 14 );
|
|
||||||
level.equipment_dead_zone_rad2[ 7 ] = 22500;
|
|
||||||
level.equipment_dead_zone_pos[ 8 ] = ( -621, 5737, -48 );
|
|
||||||
level.equipment_dead_zone_rad2[ 8 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 9 ] = ( 402, 7058, 147 );
|
|
||||||
level.equipment_dead_zone_rad2[ 9 ] = 10000;
|
|
||||||
level.equipment_dead_zone_pos[ 10 ] = ( 2151, 10180, 1204 );
|
|
||||||
level.equipment_dead_zone_rad2[ 10 ] = 625;
|
|
||||||
level.equipment_dead_zone_pos[ 11 ] = ( 2144, 9486, 1364 );
|
|
||||||
level.equipment_dead_zone_rad2[ 11 ] = 2500;
|
|
||||||
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
|
|
||||||
waittillframeend;
|
|
||||||
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
equipment_safe_to_drop_ffotd( weapon )
|
equipment_safe_to_drop_ffotd( weapon )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level.equipment_dead_zone_pos.size; i++ )
|
||||||
while ( i < level.equipment_dead_zone_pos.size )
|
{
|
||||||
{
|
if ( distancesquared( level.equipment_dead_zone_pos[i], weapon.origin ) < level.equipment_dead_zone_rad2[i] )
|
||||||
if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] )
|
return 0;
|
||||||
{
|
}
|
||||||
return 0;
|
|
||||||
}
|
return self maps\mp\zm_prison::equipment_safe_to_drop( weapon );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned_collision_ffotd()
|
spawned_collision_ffotd()
|
||||||
{
|
{
|
||||||
precachemodel( "collision_ai_64x64x10" );
|
precachemodel( "collision_ai_64x64x10" );
|
||||||
precachemodel( "collision_wall_256x256x10_standard" );
|
precachemodel( "collision_wall_256x256x10_standard" );
|
||||||
precachemodel( "collision_wall_128x128x10_standard" );
|
precachemodel( "collision_wall_128x128x10_standard" );
|
||||||
precachemodel( "collision_wall_512x512x10_standard" );
|
precachemodel( "collision_wall_512x512x10_standard" );
|
||||||
precachemodel( "collision_geo_256x256x256_standard" );
|
precachemodel( "collision_geo_256x256x256_standard" );
|
||||||
precachemodel( "collision_geo_64x64x256_standard" );
|
precachemodel( "collision_geo_64x64x256_standard" );
|
||||||
precachemodel( "collision_geo_128x128x128_standard" );
|
precachemodel( "collision_geo_128x128x128_standard" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
precachemodel( "collision_geo_128x128x10_standard" );
|
||||||
if ( !is_true( level.optimise_for_splitscreen ) )
|
precachemodel( "collision_geo_64x64x64_standard" );
|
||||||
{
|
precachemodel( "collision_geo_32x32x128_standard" );
|
||||||
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
|
precachemodel( "p6_zm_al_surgery_cart" );
|
||||||
collision1 setmodel( "collision_ai_64x64x10" );
|
precachemodel( "p6_zm_al_laundry_bag" );
|
||||||
collision1.angles = ( 0, 270, -90 );
|
precachemodel( "ch_furniture_teachers_chair1" );
|
||||||
collision1 ghost();
|
flag_wait( "start_zombie_round_logic" );
|
||||||
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
|
|
||||||
collision2 setmodel( "collision_wall_256x256x10_standard" );
|
if ( !is_true( level.optimise_for_splitscreen ) )
|
||||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 );
|
{
|
||||||
collision2 ghost();
|
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
|
||||||
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) );
|
collision1 setmodel( "collision_ai_64x64x10" );
|
||||||
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
collision1.angles = ( 0, 270, -90 );
|
||||||
collision3.angles = ( 0, 270, 38,6 );
|
collision1 ghost();
|
||||||
collision3 ghost();
|
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
|
||||||
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) );
|
collision2 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision4 setmodel( "collision_geo_256x256x256_standard" );
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 );
|
||||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 );
|
collision2 ghost();
|
||||||
collision4 ghost();
|
collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) );
|
||||||
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
|
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision5a setmodel( "collision_geo_64x64x256_standard" );
|
collision3.angles = ( 0, 270, 38.6 );
|
||||||
collision5a.angles = ( 0, 0, 0 );
|
collision3 ghost();
|
||||||
collision5a ghost();
|
collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) );
|
||||||
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
|
collision4 setmodel( "collision_geo_256x256x256_standard" );
|
||||||
collision5b setmodel( "collision_geo_64x64x256_standard" );
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 );
|
||||||
collision5b.angles = ( 0, 0, 0 );
|
collision4 ghost();
|
||||||
collision5b ghost();
|
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
|
||||||
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
|
collision5a setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision6 setmodel( "collision_wall_128x128x10_standard" );
|
collision5a.angles = ( 0, 0, 0 );
|
||||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 );
|
collision5a ghost();
|
||||||
collision6 ghost();
|
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
|
||||||
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
|
collision5b setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision7 setmodel( "collision_geo_64x64x256_standard" );
|
collision5b.angles = ( 0, 0, 0 );
|
||||||
collision7.angles = ( 0, 0, 0 );
|
collision5b ghost();
|
||||||
collision7 ghost();
|
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
|
||||||
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
|
collision6 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision8 setmodel( "collision_geo_64x64x256_standard" );
|
collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 );
|
||||||
collision8.angles = ( 0, 0, 0 );
|
collision6 ghost();
|
||||||
collision8 ghost();
|
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
|
||||||
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
|
collision7 setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision9 setmodel( "collision_ai_64x64x10" );
|
collision7.angles = ( 0, 0, 0 );
|
||||||
collision9.angles = ( 270, 180, -180 );
|
collision7 ghost();
|
||||||
collision9 ghost();
|
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
|
||||||
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) );
|
collision8 setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision10 setmodel( "collision_geo_128x128x128_standard" );
|
collision8.angles = ( 0, 0, 0 );
|
||||||
collision10.angles = ( 354,9, 11, 0 );
|
collision8 ghost();
|
||||||
collision10 ghost();
|
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
|
||||||
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
|
collision9 setmodel( "collision_ai_64x64x10" );
|
||||||
collision11 setmodel( "collision_wall_128x128x10_standard" );
|
collision9.angles = ( 270, 180, -180 );
|
||||||
collision11.angles = vectorScale( ( 0, 0, 0 ), 292 );
|
collision9 ghost();
|
||||||
collision11 ghost();
|
collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) );
|
||||||
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
|
collision10 setmodel( "collision_geo_128x128x128_standard" );
|
||||||
collision12 setmodel( "collision_wall_512x512x10_standard" );
|
collision10.angles = ( 354.9, 11, 0 );
|
||||||
collision12.angles = ( 0, 0, 0 );
|
collision10 ghost();
|
||||||
collision12 ghost();
|
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
|
||||||
}
|
collision11 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
|
collision11.angles = vectorscale( ( 0, 1, 0 ), 292.0 );
|
||||||
|
collision11 ghost();
|
||||||
|
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
|
||||||
|
collision12 setmodel( "collision_wall_512x512x10_standard" );
|
||||||
|
collision12.angles = ( 0, 0, 0 );
|
||||||
|
collision12 ghost();
|
||||||
|
collision13 = spawn( "script_model", ( 1788, 9758, 1472 ) );
|
||||||
|
collision13 setmodel( "collision_geo_64x64x64_standard" );
|
||||||
|
collision13.angles = ( 0, 0, 0 );
|
||||||
|
collision13 ghost();
|
||||||
|
collision13_prop1 = spawn( "script_model", ( 1801.27, 9753.57, 1440 ) );
|
||||||
|
collision13_prop1 setmodel( "p6_zm_al_surgery_cart" );
|
||||||
|
collision13_prop1.angles = vectorscale( ( 0, 1, 0 ), 14.8 );
|
||||||
|
collision13_prop2 = spawn( "script_model", ( 1802.64, 9754.85, 1476 ) );
|
||||||
|
collision13_prop2 setmodel( "p6_zm_al_laundry_bag" );
|
||||||
|
collision13_prop2.angles = vectorscale( ( 0, 1, 0 ), 314.351 );
|
||||||
|
collision14 = spawn( "script_model", ( -820, 8668, 1400 ) );
|
||||||
|
collision14 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
|
collision14.angles = ( 0, 0, 0 );
|
||||||
|
collision14 ghost();
|
||||||
|
collision14_prop1 = spawn( "script_model", ( -820.273, 8668.71, 1336 ) );
|
||||||
|
collision14_prop1 setmodel( "ch_furniture_teachers_chair1" );
|
||||||
|
collision14_prop1.angles = vectorscale( ( 0, 1, 0 ), 80.0 );
|
||||||
|
collision15 = spawn( "script_model", ( 2557, 9723.5, 1520 ) );
|
||||||
|
collision15 setmodel( "collision_geo_128x128x10_standard" );
|
||||||
|
collision15.angles = vectorscale( ( 0, 0, 1 ), 34.2 );
|
||||||
|
collision15 ghost();
|
||||||
|
collision16 = spawn( "script_model", ( -1909.5, -3614, -8583 ) );
|
||||||
|
collision16 setmodel( "collision_geo_256x256x256_standard" );
|
||||||
|
collision16.angles = vectorscale( ( 1, 0, 0 ), 34.9 );
|
||||||
|
collision16 ghost();
|
||||||
|
collision17 = spawn( "script_model", ( -1909.5, -3554, -8583 ) );
|
||||||
|
collision17 setmodel( "collision_geo_256x256x256_standard" );
|
||||||
|
collision17.angles = vectorscale( ( 1, 0, 0 ), 34.9 );
|
||||||
|
collision17 ghost();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_give_loadout_override()
|
afterlife_give_loadout_override()
|
||||||
{
|
{
|
||||||
self thread afterlife_leave_freeze();
|
self thread afterlife_leave_freeze();
|
||||||
self maps/mp/zombies/_zm_afterlife::afterlife_give_loadout();
|
self maps\mp\zombies\_zm_afterlife::afterlife_give_loadout();
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_leave_freeze()
|
afterlife_leave_freeze()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self freezecontrols( 1 );
|
level endon( "end_game" );
|
||||||
wait 0,5;
|
self freezecontrols( 1 );
|
||||||
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
|
wait 0.5;
|
||||||
{
|
|
||||||
self freezecontrols( 0 );
|
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
|
||||||
}
|
self freezecontrols( 0 );
|
||||||
}
|
}
|
||||||
|
@ -1,144 +1,147 @@
|
|||||||
#include maps/mp/_utility;
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#using_animtree( "fxanim_props" );
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\createfx\zm_prison_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_prison_fx::main();
|
maps\mp\createfx\zm_prison_fx::main();
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_scripted_fx()
|
precache_scripted_fx()
|
||||||
{
|
{
|
||||||
level._effect[ "elevator_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" );
|
level._effect["elevator_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" );
|
||||||
level._effect[ "key_glint" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" );
|
level._effect["key_glint"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" );
|
||||||
level._effect[ "quest_item_glow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" );
|
level._effect["quest_item_glow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" );
|
||||||
level._effect[ "eye_glow" ] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" );
|
level._effect["eye_glow"] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" );
|
||||||
level._effect[ "fx_alcatraz_unlock_door" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" );
|
level._effect["fx_alcatraz_unlock_door"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" );
|
||||||
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
|
level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
|
||||||
level._effect[ "fx_alcatraz_lightning_finale" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" );
|
level._effect["fx_alcatraz_lightning_finale"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" );
|
||||||
level._effect[ "fx_alcatraz_panel_on_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" );
|
level._effect["fx_alcatraz_panel_on_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" );
|
||||||
level._effect[ "fx_alcatraz_panel_off_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" );
|
level._effect["fx_alcatraz_panel_off_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" );
|
||||||
level._effect[ "fx_alcatraz_lightning_wire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" );
|
level._effect["fx_alcatraz_lightning_wire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" );
|
||||||
level._effect[ "fx_alcatraz_afterlife_zmb_tport" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" );
|
level._effect["fx_alcatraz_afterlife_zmb_tport"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" );
|
||||||
level._effect[ "fx_alcatraz_panel_ol" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" );
|
level._effect["fx_alcatraz_panel_ol"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" );
|
||||||
level._effect[ "fx_alcatraz_plane_apear" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" );
|
level._effect["fx_alcatraz_plane_apear"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" );
|
||||||
level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" );
|
level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" );
|
||||||
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
|
level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
|
||||||
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
|
level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
|
||||||
level._effect[ "fx_alcatraz_plane_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" );
|
level._effect["fx_alcatraz_plane_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" );
|
||||||
level._effect[ "fx_alcatraz_plane_trail_fast" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" );
|
level._effect["fx_alcatraz_plane_trail_fast"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" );
|
||||||
level._effect[ "fx_alcatraz_flight_lightning" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" );
|
level._effect["fx_alcatraz_flight_lightning"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" );
|
||||||
level._effect[ "fx_alcatraz_plane_fire_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" );
|
level._effect["fx_alcatraz_plane_fire_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" );
|
||||||
level._effect[ "alcatraz_dryer_light_green" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" );
|
level._effect["alcatraz_dryer_light_green"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" );
|
||||||
level._effect[ "alcatraz_dryer_light_red" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" );
|
level._effect["alcatraz_dryer_light_red"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" );
|
||||||
level._effect[ "alcatraz_dryer_light_yellow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" );
|
level._effect["alcatraz_dryer_light_yellow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" );
|
||||||
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
|
level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
|
||||||
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
|
level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" );
|
||||||
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
|
level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
|
||||||
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
|
level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" );
|
||||||
level._effect[ "acid_spray" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
|
level._effect["acid_spray"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
|
||||||
level._effect[ "acid_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" );
|
level._effect["acid_death"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" );
|
||||||
level._effect[ "box_activated" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
|
level._effect["box_activated"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
|
||||||
level._effect[ "fan_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" );
|
level._effect["fan_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" );
|
||||||
level._effect[ "light_gondola" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
|
level._effect["light_gondola"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
|
||||||
level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" );
|
level._effect["lightning_flash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" );
|
||||||
level._effect[ "tomahawk_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
|
level._effect["tomahawk_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
|
||||||
level._effect[ "tomahawk_trail_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" );
|
level._effect["tomahawk_trail_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" );
|
||||||
level._effect[ "tomahawk_impact" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
|
level._effect["tomahawk_impact"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
|
||||||
level._effect[ "tomahawk_impact_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" );
|
level._effect["tomahawk_impact_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" );
|
||||||
level._effect[ "tomahawk_charge_up" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
|
level._effect["tomahawk_charge_up"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
|
||||||
level._effect[ "tomahawk_charge_up_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" );
|
level._effect["tomahawk_charge_up_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" );
|
||||||
level._effect[ "tomahawk_pickup" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" );
|
level._effect["tomahawk_pickup"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" );
|
||||||
level._effect[ "tomahawk_pickup_upgrade" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" );
|
level._effect["tomahawk_pickup_upgrade"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" );
|
||||||
level._effect[ "tomahawk_charged_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" );
|
level._effect["tomahawk_charged_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" );
|
||||||
level._effect[ "tomahawk_fire_dot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" );
|
level._effect["tomahawk_fire_dot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" );
|
||||||
level._effect[ "soul_charge_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" );
|
level._effect["soul_charge_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" );
|
||||||
level._effect[ "soul_charge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" );
|
level._effect["soul_charge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" );
|
||||||
level._effect[ "soul_charge_impact" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" );
|
level._effect["soul_charge_impact"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" );
|
||||||
level._effect[ "soul_charged" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" );
|
level._effect["soul_charged"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" );
|
||||||
level._effect[ "hell_portal" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
|
level._effect["hell_portal"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
|
||||||
level._effect[ "hell_portal_close" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" );
|
level._effect["hell_portal_close"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" );
|
||||||
level._effect[ "tomahawk_hellhole" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" );
|
level._effect["tomahawk_hellhole"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" );
|
||||||
level._effect[ "wolf_bite_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" );
|
level._effect["wolf_bite_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" );
|
||||||
level._effect[ "uzi_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" );
|
level._effect["uzi_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" );
|
||||||
level._effect[ "thompson_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" );
|
level._effect["thompson_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" );
|
||||||
level._effect[ "fx_alcatraz_lighthouse" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" );
|
level._effect["fx_alcatraz_lighthouse"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" );
|
||||||
level._effect[ "ee_skull_shot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
|
level._effect["ee_skull_shot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_createfx_fx()
|
precache_createfx_fx()
|
||||||
{
|
{
|
||||||
level._effect[ "fx_alcatraz_storm_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" );
|
level._effect["fx_alcatraz_storm_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" );
|
||||||
level._effect[ "fx_alcatraz_vista_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" );
|
level._effect["fx_alcatraz_vista_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" );
|
||||||
level._effect[ "fx_alcatraz_docks_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" );
|
level._effect["fx_alcatraz_docks_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" );
|
||||||
level._effect[ "fx_alcatraz_fog_closet" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" );
|
level._effect["fx_alcatraz_fog_closet"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" );
|
||||||
level._effect[ "fx_alcatraz_fire_works" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" );
|
level._effect["fx_alcatraz_fire_works"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" );
|
||||||
level._effect[ "fx_alcatraz_tunnel_dust_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" );
|
level._effect["fx_alcatraz_tunnel_dust_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" );
|
||||||
level._effect[ "fx_alcatraz_tunnel_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" );
|
level._effect["fx_alcatraz_tunnel_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" );
|
||||||
level._effect[ "fx_alcatraz_steam_pipe_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" );
|
level._effect["fx_alcatraz_steam_pipe_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" );
|
||||||
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
||||||
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
|
level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
|
||||||
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
||||||
level._effect[ "fx_alcatraz_panel_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" );
|
level._effect["fx_alcatraz_panel_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" );
|
||||||
level._effect[ "fx_alcatraz_door_blocker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" );
|
level._effect["fx_alcatraz_door_blocker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" );
|
||||||
level._effect[ "fx_alcatraz_dryer_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" );
|
level._effect["fx_alcatraz_dryer_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" );
|
||||||
level._effect[ "fx_alcatraz_elec_fence" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" );
|
level._effect["fx_alcatraz_elec_fence"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" );
|
||||||
level._effect[ "fx_alcatraz_generator_smk" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" );
|
level._effect["fx_alcatraz_generator_smk"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" );
|
||||||
level._effect[ "fx_alcatraz_generator_sparks" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" );
|
level._effect["fx_alcatraz_generator_sparks"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" );
|
||||||
level._effect[ "fx_alcatraz_generator_exp" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" );
|
level._effect["fx_alcatraz_generator_exp"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" );
|
||||||
level._effect[ "fx_alcatraz_elevator_spark" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" );
|
level._effect["fx_alcatraz_elevator_spark"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" );
|
||||||
level._effect[ "fx_alcatraz_elec_key" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" );
|
level._effect["fx_alcatraz_elec_key"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" );
|
||||||
level._effect[ "fx_alcatraz_sparks_ceiling" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" );
|
level._effect["fx_alcatraz_sparks_ceiling"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" );
|
||||||
level._effect[ "fx_alcatraz_sparks_panel" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" );
|
level._effect["fx_alcatraz_sparks_panel"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" );
|
||||||
level._effect[ "fx_alcatraz_fire_sm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" );
|
level._effect["fx_alcatraz_fire_sm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" );
|
||||||
level._effect[ "fx_alcatraz_fire_xsm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" );
|
level._effect["fx_alcatraz_fire_xsm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" );
|
||||||
level._effect[ "fx_alcatraz_embers_flat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" );
|
level._effect["fx_alcatraz_embers_flat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" );
|
||||||
level._effect[ "fx_alcatraz_falling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" );
|
level._effect["fx_alcatraz_falling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" );
|
||||||
level._effect[ "fx_alcatraz_steam_3floor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" );
|
level._effect["fx_alcatraz_steam_3floor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" );
|
||||||
level._effect[ "fx_alcatraz_elec_box_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" );
|
level._effect["fx_alcatraz_elec_box_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" );
|
||||||
level._effect[ "fx_alcatraz_blood_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" );
|
level._effect["fx_alcatraz_blood_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" );
|
||||||
level._effect[ "fx_alcatraz_godray_grill" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" );
|
level._effect["fx_alcatraz_godray_grill"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" );
|
||||||
level._effect[ "fx_alcatraz_godray_grill_lg" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" );
|
level._effect["fx_alcatraz_godray_grill_lg"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" );
|
||||||
level._effect[ "fx_alcatraz_godray_skinny" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" );
|
level._effect["fx_alcatraz_godray_skinny"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" );
|
||||||
level._effect[ "fx_alcatraz_ground_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" );
|
level._effect["fx_alcatraz_ground_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" );
|
||||||
level._effect[ "fx_alcatraz_flies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" );
|
level._effect["fx_alcatraz_flies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" );
|
||||||
level._effect[ "fx_alcatraz_candle_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" );
|
level._effect["fx_alcatraz_candle_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" );
|
||||||
level._effect[ "fx_alcatraz_portal_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" );
|
level._effect["fx_alcatraz_portal_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" );
|
||||||
level._effect[ "fx_alcatraz_fire_md" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" );
|
level._effect["fx_alcatraz_fire_md"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" );
|
||||||
level._effect[ "fx_alcatraz_smk_linger" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" );
|
level._effect["fx_alcatraz_smk_linger"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" );
|
||||||
level._effect[ "fx_alcatraz_embers_indoor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" );
|
level._effect["fx_alcatraz_embers_indoor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" );
|
||||||
level._effect[ "fx_alcatraz_papers" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" );
|
level._effect["fx_alcatraz_papers"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" );
|
||||||
level._effect[ "fx_alcatraz_ceiling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" );
|
level._effect["fx_alcatraz_ceiling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" );
|
||||||
level._effect[ "fx_alcatraz_steam_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" );
|
level._effect["fx_alcatraz_steam_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" );
|
||||||
level._effect[ "fx_alcatraz_godray_jail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" );
|
level._effect["fx_alcatraz_godray_jail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" );
|
||||||
level._effect[ "fx_alcatraz_water_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" );
|
level._effect["fx_alcatraz_water_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" );
|
||||||
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
|
level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
|
||||||
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
|
||||||
level._effect[ "fx_alcatraz_light_tinhat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" );
|
level._effect["fx_alcatraz_light_tinhat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" );
|
||||||
level._effect[ "fx_alcatraz_light_round_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" );
|
level._effect["fx_alcatraz_light_round_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" );
|
||||||
level._effect[ "fx_alcatraz_light_tinhat_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" );
|
level._effect["fx_alcatraz_light_tinhat_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" );
|
||||||
level._effect[ "fx_alcatraz_flight_clouds" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" );
|
level._effect["fx_alcatraz_flight_clouds"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" );
|
||||||
level._effect[ "fx_alcatraz_lightning_bridge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" );
|
level._effect["fx_alcatraz_lightning_bridge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" );
|
||||||
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
|
level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("fxanim_props");
|
||||||
|
|
||||||
precache_fxanim_props()
|
precache_fxanim_props()
|
||||||
{
|
{
|
||||||
level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim;
|
level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dryer_start" ] = %fxanim_zom_al_industrial_dryer_start_anim;
|
level.scr_anim["fxanim_props"]["dryer_start"] = %fxanim_zom_al_industrial_dryer_start_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dryer_idle" ] = %fxanim_zom_al_industrial_dryer_idle_anim;
|
level.scr_anim["fxanim_props"]["dryer_idle"] = %fxanim_zom_al_industrial_dryer_idle_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dryer_end" ] = %fxanim_zom_al_industrial_dryer_end_anim;
|
level.scr_anim["fxanim_props"]["dryer_end"] = %fxanim_zom_al_industrial_dryer_end_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dryer_hide" ] = %fxanim_zom_al_industrial_dryer_hide_anim;
|
level.scr_anim["fxanim_props"]["dryer_hide"] = %fxanim_zom_al_industrial_dryer_hide_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "pulley_down" ] = %fxanim_zom_al_key_pulley_down_anim;
|
level.scr_anim["fxanim_props"]["pulley_down"] = %fxanim_zom_al_key_pulley_down_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "pulley_up" ] = %fxanim_zom_al_key_pulley_up_anim;
|
level.scr_anim["fxanim_props"]["pulley_up"] = %fxanim_zom_al_key_pulley_up_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "crane_palette" ] = %fxanim_zom_al_crane_palette_anim;
|
level.scr_anim["fxanim_props"]["crane_palette"] = %fxanim_zom_al_crane_palette_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "chain_hook_rotate" ] = %fxanim_zom_al_chain_short_hook_rotate_anim;
|
level.scr_anim["fxanim_props"]["chain_hook_rotate"] = %fxanim_zom_al_chain_short_hook_rotate_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "bodybag_rotate" ] = %fxanim_zom_al_bodybag_rotate_anim;
|
level.scr_anim["fxanim_props"]["bodybag_rotate"] = %fxanim_zom_al_bodybag_rotate_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "chain_hook_swing" ] = %fxanim_zom_al_chain_short_hook_swing_anim;
|
level.scr_anim["fxanim_props"]["chain_hook_swing"] = %fxanim_zom_al_chain_short_hook_swing_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "bodybag_swing" ] = %fxanim_zom_al_bodybag_swing_anim;
|
level.scr_anim["fxanim_props"]["bodybag_swing"] = %fxanim_zom_al_bodybag_swing_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "chain_hook_crane" ] = %fxanim_zom_al_chain_short_hook_crane_anim;
|
level.scr_anim["fxanim_props"]["chain_hook_crane"] = %fxanim_zom_al_chain_short_hook_crane_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "bodybag_crane" ] = %fxanim_zom_al_bodybag_crane_anim;
|
level.scr_anim["fxanim_props"]["bodybag_crane"] = %fxanim_zom_al_bodybag_crane_anim;
|
||||||
}
|
}
|
||||||
|
@ -1,305 +1,294 @@
|
|||||||
//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_stats;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_weap_tomahawk;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weap_tomahawk;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
//#using_animtree( "fxanim_props" );
|
init()
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
|
||||||
{
|
{
|
||||||
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
||||||
{
|
{
|
||||||
spoon_easy_cleanup();
|
spoon_easy_cleanup();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
precachemodel( "t6_wpn_zmb_spoon_world" );
|
|
||||||
precachemodel( "c_zom_inmate_g_rarmspawn" );
|
precachemodel( "t6_wpn_zmb_spoon_world" );
|
||||||
level thread wait_for_initial_conditions();
|
precachemodel( "c_zom_inmate_g_rarmspawn" );
|
||||||
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
|
level thread wait_for_initial_conditions();
|
||||||
level thread bucket_init();
|
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
level thread bucket_init();
|
||||||
spork_portal setinvisibletoall();
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
level.b_spoon_in_tub = 0;
|
spork_portal setinvisibletoall();
|
||||||
level.n_spoon_kill_count = 0;
|
level.b_spoon_in_tub = 0;
|
||||||
flag_init( "spoon_obtained" );
|
level.n_spoon_kill_count = 0;
|
||||||
flag_init( "charged_spoon" );
|
flag_init( "spoon_obtained" );
|
||||||
|
flag_init( "charged_spoon" );
|
||||||
/#
|
/#
|
||||||
level thread debug_prison_spoon_quest();
|
level thread debug_prison_spoon_quest();
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
spoon_easy_cleanup() //checked matches cerberus output
|
spoon_easy_cleanup()
|
||||||
{
|
{
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
spork_portal delete();
|
spork_portal delete();
|
||||||
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
||||||
m_spoon_pickup delete();
|
m_spoon_pickup delete();
|
||||||
m_spoon = getent( "zap_spoon", "targetname" );
|
m_spoon = getent( "zap_spoon", "targetname" );
|
||||||
m_spoon delete();
|
m_spoon delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
extra_death_func_to_check_for_splat_death() //checked matches cerberus output
|
extra_death_func_to_check_for_splat_death()
|
||||||
{
|
{
|
||||||
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
|
self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript();
|
||||||
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
|
|
||||||
{
|
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
|
||||||
if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
|
{
|
||||||
{
|
if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
|
||||||
if ( isplayer( self.attacker ) )
|
{
|
||||||
{
|
if ( isplayer( self.attacker ) )
|
||||||
self notify( "killed_by_a_blundersplat" );
|
self notify( "killed_by_a_blundersplat", self.attacker );
|
||||||
}
|
}
|
||||||
}
|
else if ( self.damageweapon == "bouncing_tomahawk_zm" )
|
||||||
else
|
{
|
||||||
{
|
if ( isplayer( self.attacker ) )
|
||||||
if ( self.damageweapon == "bouncing_tomahawk_zm" )
|
self.attacker notify( "got_a_tomahawk_kill" );
|
||||||
{
|
}
|
||||||
if ( isplayer( self.attacker ) )
|
}
|
||||||
{
|
|
||||||
self.attacker notify( "got_a_tomahawk_kill" );
|
if ( isdefined( self.attacker.killed_with_only_tomahawk ) )
|
||||||
}
|
{
|
||||||
}
|
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
|
||||||
}
|
self.attacker.killed_with_only_tomahawk = 0;
|
||||||
}
|
}
|
||||||
if ( isDefined( self.attacker.killed_with_only_tomahawk ) )
|
|
||||||
{
|
if ( isdefined( self.attacker.killed_something_thq ) )
|
||||||
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
|
self.attacker.killed_something_thq = 1;
|
||||||
{
|
|
||||||
self.attacker.killed_with_only_tomahawk = 0;
|
return 0;
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( self.attacker.killed_something_thq ) )
|
|
||||||
{
|
|
||||||
self.attacker.killed_something_thq = 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie_spoon_func() //checked matches cerberus output
|
zombie_spoon_func()
|
||||||
{
|
{
|
||||||
self.deathfunction = ::extra_death_func_to_check_for_splat_death;
|
self.deathfunction = ::extra_death_func_to_check_for_splat_death;
|
||||||
self waittill( "killed_by_a_blundersplat", player );
|
|
||||||
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
|
self waittill( "killed_by_a_blundersplat", player );
|
||||||
{
|
|
||||||
return;
|
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
|
||||||
}
|
return;
|
||||||
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
|
|
||||||
{
|
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
|
||||||
level.n_spoon_kill_count++;
|
level.n_spoon_kill_count++;
|
||||||
}
|
else
|
||||||
else
|
return;
|
||||||
{
|
|
||||||
return;
|
if ( level.n_spoon_kill_count >= 50 )
|
||||||
}
|
{
|
||||||
if ( level.n_spoon_kill_count >= 50 )
|
|
||||||
{
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Spoon Charged" );
|
iprintlnbold( "Spoon Charged" );
|
||||||
#/
|
#/
|
||||||
flag_set( "charged_spoon" );
|
flag_set( "charged_spoon" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_initial_conditions() //checked changed to match cerberus output
|
wait_for_initial_conditions()
|
||||||
{
|
{
|
||||||
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
||||||
m_spoon_pickup ghost();
|
m_spoon_pickup ghost();
|
||||||
m_spoon_pickup ghostindemo();
|
m_spoon_pickup ghostindemo();
|
||||||
while ( !isDefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
|
|
||||||
{
|
while ( !isdefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
flag_wait( "soul_catchers_charged" );
|
flag_wait( "soul_catchers_charged" );
|
||||||
m_poster = getent( "poster", "targetname" );
|
m_poster = getent( "poster", "targetname" );
|
||||||
m_poster.health = 5000;
|
m_poster.health = 5000;
|
||||||
m_poster setcandamage( 1 );
|
m_poster setcandamage( 1 );
|
||||||
b_poster_knocked_down = 0;
|
b_poster_knocked_down = 0;
|
||||||
while ( !b_poster_knocked_down )
|
|
||||||
{
|
while ( !b_poster_knocked_down )
|
||||||
m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
{
|
||||||
if ( weaponname != "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
|
m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
||||||
{
|
|
||||||
b_poster_knocked_down = 1;
|
if ( weaponname == "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
|
||||||
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
|
{
|
||||||
m_poster delete();
|
b_poster_knocked_down = 1;
|
||||||
if ( isDefined( attacker ) && isplayer( attacker ) )
|
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
|
||||||
{
|
m_poster delete();
|
||||||
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
|
|
||||||
}
|
if ( isdefined( attacker ) && isplayer( attacker ) )
|
||||||
wait 1;
|
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
|
||||||
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
|
||||||
}
|
wait 1.0;
|
||||||
}
|
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||||
spork_door = getent( "spork_door", "targetname" );
|
}
|
||||||
spork_door.targetname = "afterlife_door";
|
}
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
|
||||||
spork_portal.targetname = "afterlife_show";
|
spork_door = getent( "spork_door", "targetname" );
|
||||||
m_spoon = getent( "zap_spoon", "targetname" );
|
spork_door.targetname = "afterlife_door";
|
||||||
m_spoon ghostindemo();
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
m_spoon.health = 50000;
|
spork_portal.targetname = "afterlife_show";
|
||||||
m_spoon setcandamage( 1 );
|
m_spoon = getent( "zap_spoon", "targetname" );
|
||||||
b_spoon_shocked = 0;
|
m_spoon ghostindemo();
|
||||||
while ( !b_spoon_shocked )
|
m_spoon.health = 50000;
|
||||||
{
|
m_spoon setcandamage( 1 );
|
||||||
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
b_spoon_shocked = 0;
|
||||||
m_spoon.health += damage;
|
|
||||||
if ( weaponname == "lightning_hands_zm" )
|
while ( !b_spoon_shocked )
|
||||||
{
|
{
|
||||||
b_spoon_shocked = 1;
|
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
||||||
m_spoon delete();
|
|
||||||
attacker playsound( "zmb_easteregg_laugh" );
|
m_spoon.health += damage;
|
||||||
}
|
|
||||||
}
|
if ( weaponname == "lightning_hands_zm" )
|
||||||
m_spoon_pickup show();
|
{
|
||||||
m_spoon_pickup.health = 10000;
|
b_spoon_shocked = 1;
|
||||||
m_spoon_pickup setcandamage( 1 );
|
m_spoon delete();
|
||||||
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_spoon;
|
attacker playsound( "zmb_easteregg_laugh" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_spoon_pickup show();
|
||||||
|
m_spoon_pickup.health = 10000;
|
||||||
|
m_spoon_pickup setcandamage( 1 );
|
||||||
|
level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_spoon;
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_the_spoon( grenade, n_grenade_charge_power ) //checked matches cerberus output
|
tomahawk_the_spoon( grenade, n_grenade_charge_power )
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
|
if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
m_spoon = getent( "pickup_spoon", "targetname" );
|
||||||
m_spoon = getent( "pickup_spoon", "targetname" );
|
|
||||||
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
|
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
|
||||||
{
|
{
|
||||||
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
|
m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
|
||||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||||
m_player_spoon = spawn( "script_model", grenade.origin );
|
m_player_spoon = spawn( "script_model", grenade.origin );
|
||||||
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
|
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
|
||||||
m_player_spoon linkto( m_tomahawk );
|
m_player_spoon linkto( m_tomahawk );
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 );
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 );
|
||||||
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
|
self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
|
||||||
self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
|
self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
|
||||||
self thread dip_the_spoon();
|
self thread dip_the_spoon();
|
||||||
flag_set( "spoon_obtained" );
|
flag_set( "spoon_obtained" );
|
||||||
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
|
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ) //checked changed to match cerberus output
|
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon )
|
||||||
{
|
{
|
||||||
while ( isDefined( m_tomahawk ) )
|
while ( isdefined( m_tomahawk ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0.05;
|
|
||||||
}
|
m_player_spoon delete();
|
||||||
m_player_spoon delete();
|
|
||||||
if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !is_true( self.spoon_in_tub ) )
|
if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !( isdefined( self.spoon_in_tub ) && self.spoon_in_tub ) )
|
||||||
{
|
{
|
||||||
self giveweapon( "spoon_zm_alcatraz" );
|
self giveweapon( "spoon_zm_alcatraz" );
|
||||||
self set_player_melee_weapon( "spoon_zm_alcatraz" );
|
self set_player_melee_weapon( "spoon_zm_alcatraz" );
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spoon", self );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spoon", self );
|
||||||
weapons = self getweaponslist();
|
weapons = self getweaponslist();
|
||||||
for ( i = 0; i < weapons.size; i++ )
|
|
||||||
{
|
for ( i = 0; i < weapons.size; i++ )
|
||||||
if ( issubstr( weapons[ i ], "knife" ) )
|
{
|
||||||
{
|
if ( issubstr( weapons[i], "knife" ) )
|
||||||
self takeweapon( weapons[ i ] );
|
self takeweapon( weapons[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
weapons = self getweaponslist();
|
weapons = self getweaponslist();
|
||||||
wait 1;
|
wait 1.0;
|
||||||
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||||
}
|
}
|
||||||
|
|
||||||
bucket_init() //checked matches cerberus output
|
bucket_init()
|
||||||
{
|
{
|
||||||
s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
|
s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
|
||||||
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
|
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
|
||||||
level.t_bathtub usetriggerrequirelookat();
|
level.t_bathtub usetriggerrequirelookat();
|
||||||
level.t_bathtub triggerignoreteam();
|
level.t_bathtub triggerignoreteam();
|
||||||
level.t_bathtub sethintstring( "" );
|
level.t_bathtub sethintstring( "" );
|
||||||
level.t_bathtub setcursorhint( "HINT_NOICON" );
|
level.t_bathtub setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_bucket_activated( player ) //checked matches cerberus output
|
wait_for_bucket_activated( player )
|
||||||
{
|
{
|
||||||
if ( isDefined( player ) )
|
if ( isdefined( player ) )
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level.t_bathtub waittill( "trigger", who );
|
level.t_bathtub waittill( "trigger", who );
|
||||||
if ( who == player )
|
|
||||||
{
|
if ( who == player )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
level.t_bathtub waittill( "trigger", who );
|
||||||
{
|
|
||||||
level.t_bathtub waittill( "trigger", who );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dip_the_spoon() //checked matches cerberus output
|
dip_the_spoon()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
wait_for_bucket_activated( self );
|
wait_for_bucket_activated( self );
|
||||||
self takeweapon( "spoon_zm_alcatraz" );
|
self takeweapon( "spoon_zm_alcatraz" );
|
||||||
self giveweapon( "knife_zm_alcatraz" );
|
self giveweapon( "knife_zm_alcatraz" );
|
||||||
self set_player_melee_weapon( "knife_zm_alcatraz" );
|
self set_player_melee_weapon( "knife_zm_alcatraz" );
|
||||||
self.spoon_in_tub = 1;
|
self.spoon_in_tub = 1;
|
||||||
self setclientfieldtoplayer( "spoon_visual_state", 1 );
|
self setclientfieldtoplayer( "spoon_visual_state", 1 );
|
||||||
wait 5;
|
wait 5;
|
||||||
level.b_spoon_in_tub = 1;
|
level.b_spoon_in_tub = 1;
|
||||||
flag_wait( "charged_spoon" );
|
flag_wait( "charged_spoon" );
|
||||||
wait 1;
|
wait 1.0;
|
||||||
level.t_bathtub playsound( "zmb_easteregg_laugh" );
|
level.t_bathtub playsound( "zmb_easteregg_laugh" );
|
||||||
self thread thrust_the_spork();
|
self thread thrust_the_spork();
|
||||||
}
|
}
|
||||||
|
|
||||||
thrust_the_spork() //checked matches cerberus output
|
thrust_the_spork()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
wait_for_bucket_activated( self );
|
wait_for_bucket_activated( self );
|
||||||
self setclientfieldtoplayer( "spoon_visual_state", 2 );
|
self setclientfieldtoplayer( "spoon_visual_state", 2 );
|
||||||
wait 5;
|
wait 5;
|
||||||
wait_for_bucket_activated( self );
|
wait_for_bucket_activated( self );
|
||||||
self takeweapon( "knife_zm_alcatraz" );
|
self takeweapon( "knife_zm_alcatraz" );
|
||||||
self giveweapon( "spork_zm_alcatraz" );
|
self giveweapon( "spork_zm_alcatraz" );
|
||||||
self set_player_melee_weapon( "spork_zm_alcatraz" );
|
self set_player_melee_weapon( "spork_zm_alcatraz" );
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spork", self );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spork", self );
|
||||||
self.spoon_in_tub = undefined;
|
self.spoon_in_tub = undefined;
|
||||||
self setclientfieldtoplayer( "spoon_visual_state", 3 );
|
self setclientfieldtoplayer( "spoon_visual_state", 3 );
|
||||||
wait 1;
|
wait 1.0;
|
||||||
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_prison_spoon_quest() //dev call didn't check
|
debug_prison_spoon_quest()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a377 = a_players;
|
|
||||||
_k377 = getFirstArrayKey( _a377 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k377 ) )
|
{
|
||||||
{
|
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||||
player = _a377[ _k377 ];
|
{
|
||||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
flag_set( "soul_catchers_charged" );
|
||||||
{
|
break;
|
||||||
flag_set( "soul_catchers_charged" );
|
}
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
else
|
wait 1.0;
|
||||||
{
|
}
|
||||||
_k377 = getNextArrayKey( _a377, _k377 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
#/
|
#/
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
@ -1,287 +1,289 @@
|
|||||||
#include maps/mp/zombies/_zm_weap_tomahawk;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_afterlife;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#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_audio;
|
||||||
|
#include maps\mp\zombies\_zm_afterlife;
|
||||||
|
#include maps\mp\zombies\_zm_weap_tomahawk;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
||||||
{
|
{
|
||||||
sq_bg_easy_cleanup();
|
sq_bg_easy_cleanup();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
precachemodel( "p6_zm_al_skull_afterlife" );
|
|
||||||
flag_init( "warden_blundergat_obtained" );
|
precachemodel( "p6_zm_al_skull_afterlife" );
|
||||||
level thread wait_for_initial_conditions();
|
flag_init( "warden_blundergat_obtained" );
|
||||||
|
level thread wait_for_initial_conditions();
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_bg_easy_cleanup()
|
sq_bg_easy_cleanup()
|
||||||
{
|
{
|
||||||
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
|
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
|
||||||
t_reward_pickup delete();
|
t_reward_pickup delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_initial_conditions()
|
wait_for_initial_conditions()
|
||||||
{
|
{
|
||||||
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
|
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
|
||||||
t_reward_pickup sethintstring( "" );
|
t_reward_pickup sethintstring( "" );
|
||||||
t_reward_pickup setcursorhint( "HINT_NOICON" );
|
t_reward_pickup setcursorhint( "HINT_NOICON" );
|
||||||
/#
|
/#
|
||||||
level thread debug_sq_bg_quest_starter();
|
level thread debug_sq_bg_quest_starter();
|
||||||
#/
|
#/
|
||||||
level waittill( "bouncing_tomahawk_zm_aquired" );
|
level waittill( "bouncing_tomahawk_zm_aquired" );
|
||||||
level.sq_bg_macguffins = [];
|
|
||||||
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
|
level.sq_bg_macguffins = [];
|
||||||
_a46 = a_s_mcguffin;
|
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
|
||||||
_k46 = getFirstArrayKey( _a46 );
|
|
||||||
while ( isDefined( _k46 ) )
|
foreach ( struct in a_s_mcguffin )
|
||||||
{
|
{
|
||||||
struct = _a46[ _k46 ];
|
m_temp = spawn( "script_model", struct.origin, 0 );
|
||||||
m_temp = spawn( "script_model", struct.origin, 0 );
|
m_temp.targetname = "sq_bg_macguffin";
|
||||||
m_temp.targetname = "sq_bg_macguffin";
|
m_temp setmodel( struct.model );
|
||||||
m_temp setmodel( struct.model );
|
m_temp.angles = struct.angles;
|
||||||
m_temp.angles = struct.angles;
|
m_temp ghost();
|
||||||
m_temp ghost();
|
m_temp ghostindemo();
|
||||||
m_temp ghostindemo();
|
level.sq_bg_macguffins[level.sq_bg_macguffins.size] = m_temp;
|
||||||
level.sq_bg_macguffins[ level.sq_bg_macguffins.size ] = m_temp;
|
wait_network_frame();
|
||||||
wait_network_frame();
|
}
|
||||||
_k46 = getNextArrayKey( _a46, _k46 );
|
|
||||||
}
|
array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
|
||||||
array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
|
level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_macguffin;
|
||||||
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_macguffin;
|
level thread check_sq_bg_progress();
|
||||||
level thread check_sq_bg_progress();
|
|
||||||
level waittill( "all_macguffins_acquired" );
|
level waittill( "all_macguffins_acquired" );
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
|
||||||
t_reward_pickup thread give_sq_bg_reward();
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||||
|
t_reward_pickup thread give_sq_bg_reward();
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_bg_macguffin_think()
|
sq_bg_macguffin_think()
|
||||||
{
|
{
|
||||||
self endon( "sq_bg_macguffin_received_by_player" );
|
self endon( "sq_bg_macguffin_received_by_player" );
|
||||||
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
|
self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
|
||||||
self.health = 10000;
|
self.health = 10000;
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self setforcenocull();
|
self setforcenocull();
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "damage", amount, attacker );
|
{
|
||||||
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
|
self waittill( "damage", amount, attacker );
|
||||||
{
|
|
||||||
playfx( level._effect[ "ee_skull_shot" ], self.origin );
|
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
|
||||||
self playsound( "zmb_powerpanel_activate" );
|
{
|
||||||
self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
|
playfx( level._effect["ee_skull_shot"], self.origin );
|
||||||
self thread wait_and_hide_sq_bg_macguffin();
|
self playsound( "zmb_powerpanel_activate" );
|
||||||
}
|
self thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
|
||||||
}
|
self thread wait_and_hide_sq_bg_macguffin();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_and_hide_sq_bg_macguffin()
|
wait_and_hide_sq_bg_macguffin()
|
||||||
{
|
{
|
||||||
self notify( "restart_show_timer" );
|
self notify( "restart_show_timer" );
|
||||||
self endon( "restart_show_timer" );
|
self endon( "restart_show_timer" );
|
||||||
self endon( "caught_by_tomahawk" );
|
self endon( "caught_by_tomahawk" );
|
||||||
wait 1,6;
|
wait 1.6;
|
||||||
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
|
self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_the_macguffin( grenade, n_grenade_charge_power )
|
tomahawk_the_macguffin( grenade, n_grenade_charge_power )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
|
if ( !isdefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
foreach ( macguffin in level.sq_bg_macguffins )
|
||||||
_a119 = level.sq_bg_macguffins;
|
{
|
||||||
_k119 = getFirstArrayKey( _a119 );
|
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
|
||||||
while ( isDefined( _k119 ) )
|
{
|
||||||
{
|
m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
|
||||||
macguffin = _a119[ _k119 ];
|
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||||
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
|
macguffin notify( "caught_by_tomahawk" );
|
||||||
{
|
macguffin.origin = grenade.origin;
|
||||||
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
|
macguffin linkto( m_tomahawk );
|
||||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
macguffin thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
|
||||||
macguffin notify( "caught_by_tomahawk" );
|
self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
|
||||||
macguffin.origin = grenade.origin;
|
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
|
||||||
macguffin linkto( m_tomahawk );
|
return true;
|
||||||
macguffin thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
|
}
|
||||||
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
|
}
|
||||||
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
|
|
||||||
return 1;
|
return false;
|
||||||
}
|
|
||||||
_k119 = getNextArrayKey( _a119, _k119 );
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
|
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( isDefined( m_tomahawk ) )
|
|
||||||
{
|
while ( isdefined( m_tomahawk ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
m_macguffin notify( "sq_bg_macguffin_received_by_player" );
|
m_macguffin notify( "sq_bg_macguffin_received_by_player" );
|
||||||
arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
|
arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
|
||||||
m_macguffin delete();
|
m_macguffin delete();
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
play_sound_at_pos( "purchase", self.origin );
|
||||||
level notify( "sq_bg_macguffin_collected" );
|
level notify( "sq_bg_macguffin_collected", self );
|
||||||
}
|
}
|
||||||
|
|
||||||
check_sq_bg_progress()
|
check_sq_bg_progress()
|
||||||
{
|
{
|
||||||
n_macguffins_total = level.sq_bg_macguffins.size;
|
n_macguffins_total = level.sq_bg_macguffins.size;
|
||||||
n_macguffins_collected = 0;
|
n_macguffins_collected = 0;
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
level waittill( "sq_bg_macguffin_collected", player );
|
{
|
||||||
n_macguffins_collected++;
|
level waittill( "sq_bg_macguffin_collected", player );
|
||||||
if ( n_macguffins_collected >= n_macguffins_total )
|
|
||||||
{
|
n_macguffins_collected++;
|
||||||
level notify( "all_macguffins_acquired" );
|
|
||||||
break;
|
if ( n_macguffins_collected >= n_macguffins_total )
|
||||||
}
|
{
|
||||||
else play_sq_bg_collected_vo( player );
|
level notify( "all_macguffins_acquired" );
|
||||||
}
|
break;
|
||||||
wait 1;
|
}
|
||||||
player playsound( "zmb_easteregg_laugh" );
|
else
|
||||||
|
play_sq_bg_collected_vo( player );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 1.0;
|
||||||
|
player playsound( "zmb_easteregg_laugh" );
|
||||||
}
|
}
|
||||||
|
|
||||||
play_sq_bg_collected_vo( player )
|
play_sq_bg_collected_vo( player )
|
||||||
{
|
{
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
wait 1;
|
wait 1.0;
|
||||||
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_sq_bg_reward()
|
give_sq_bg_reward()
|
||||||
{
|
{
|
||||||
s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
|
s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
|
||||||
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
|
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
t_near waittill( "trigger", ent );
|
{
|
||||||
if ( isplayer( ent ) )
|
t_near waittill( "trigger", ent );
|
||||||
{
|
|
||||||
t_near thread sq_bg_spawn_rumble();
|
if ( isplayer( ent ) )
|
||||||
break;
|
{
|
||||||
}
|
t_near thread sq_bg_spawn_rumble();
|
||||||
else
|
break;
|
||||||
{
|
}
|
||||||
wait 0,1;
|
|
||||||
}
|
wait 0.1;
|
||||||
}
|
}
|
||||||
a_players = getplayers();
|
|
||||||
if ( a_players.size == 1 )
|
a_players = getplayers();
|
||||||
{
|
|
||||||
if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) )
|
if ( a_players.size == 1 )
|
||||||
{
|
{
|
||||||
str_reward_weapon = "blundersplat_zm";
|
if ( a_players[0] hasweapon( "blundergat_zm" ) )
|
||||||
str_loc = &"ZM_PRISON_SQ_BS";
|
{
|
||||||
}
|
str_reward_weapon = "blundersplat_zm";
|
||||||
else
|
str_loc = &"ZM_PRISON_SQ_BS";
|
||||||
{
|
}
|
||||||
str_reward_weapon = "blundergat_zm";
|
else
|
||||||
str_loc = &"ZM_PRISON_SQ_BG";
|
{
|
||||||
}
|
str_reward_weapon = "blundergat_zm";
|
||||||
}
|
str_loc = &"ZM_PRISON_SQ_BG";
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
str_reward_weapon = "blundergat_zm";
|
else
|
||||||
str_loc = &"ZM_PRISON_SQ_BG";
|
{
|
||||||
}
|
str_reward_weapon = "blundergat_zm";
|
||||||
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
|
str_loc = &"ZM_PRISON_SQ_BG";
|
||||||
m_reward_model moveto( m_reward_model.origin + vectorScale( ( 0, 0, 1 ), 14 ), 5 );
|
}
|
||||||
level setclientfield( "sq_bg_reward_portal", 1 );
|
|
||||||
self sethintstring( str_loc );
|
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
|
||||||
for ( ;; )
|
m_reward_model moveto( m_reward_model.origin + vectorscale( ( 0, 0, 1 ), 14.0 ), 5 );
|
||||||
{
|
level setclientfield( "sq_bg_reward_portal", 1 );
|
||||||
while ( 1 )
|
self sethintstring( str_loc );
|
||||||
{
|
|
||||||
self waittill( "trigger", player );
|
while ( true )
|
||||||
current_weapon = player getcurrentweapon();
|
{
|
||||||
if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() )
|
self waittill( "trigger", player );
|
||||||
{
|
|
||||||
if ( player hasweapon( str_reward_weapon ) )
|
current_weapon = player getcurrentweapon();
|
||||||
{
|
|
||||||
|
if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active() )
|
||||||
|
{
|
||||||
|
if ( player hasweapon( str_reward_weapon ) )
|
||||||
|
{
|
||||||
/#
|
/#
|
||||||
iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" );
|
iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" );
|
||||||
#/
|
#/
|
||||||
}
|
continue;
|
||||||
}
|
}
|
||||||
else self delete();
|
else
|
||||||
level setclientfield( "sq_bg_reward_portal", 0 );
|
{
|
||||||
wait_network_frame();
|
self delete();
|
||||||
m_reward_model delete();
|
level setclientfield( "sq_bg_reward_portal", 0 );
|
||||||
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
|
wait_network_frame();
|
||||||
}
|
m_reward_model delete();
|
||||||
}
|
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
|
||||||
t_near delete();
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t_near delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_bg_spawn_rumble()
|
sq_bg_spawn_rumble()
|
||||||
{
|
{
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a285 = a_players;
|
|
||||||
_k285 = getFirstArrayKey( _a285 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k285 ) )
|
{
|
||||||
{
|
if ( player istouching( self ) )
|
||||||
player = _a285[ _k285 ];
|
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
|
||||||
if ( player istouching( self ) )
|
}
|
||||||
{
|
|
||||||
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
|
|
||||||
}
|
|
||||||
_k285 = getNextArrayKey( _a285, _k285 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
|
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
|
||||||
{
|
{
|
||||||
if ( !isDefined( weapon_limit_override ) )
|
if ( !isdefined( weapon_limit_override ) )
|
||||||
{
|
weapon_limit_override = 0;
|
||||||
weapon_limit_override = 0;
|
|
||||||
}
|
if ( weapon_limit_override == 1 )
|
||||||
if ( weapon_limit_override == 1 )
|
self takeweapon( current_weapon );
|
||||||
{
|
else
|
||||||
self takeweapon( current_weapon );
|
{
|
||||||
}
|
primaries = self getweaponslistprimaries();
|
||||||
else
|
|
||||||
{
|
if ( isdefined( primaries ) && primaries.size >= 2 )
|
||||||
primaries = self getweaponslistprimaries();
|
self takeweapon( current_weapon );
|
||||||
if ( isDefined( primaries ) && primaries.size >= 2 )
|
}
|
||||||
{
|
|
||||||
self takeweapon( current_weapon );
|
self giveweapon( reward_weapon );
|
||||||
}
|
self switchtoweapon( reward_weapon );
|
||||||
}
|
flag_set( "warden_blundergat_obtained" );
|
||||||
self giveweapon( reward_weapon );
|
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
|
||||||
self switchtoweapon( reward_weapon );
|
|
||||||
flag_set( "warden_blundergat_obtained" );
|
|
||||||
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_sq_bg_quest_starter()
|
debug_sq_bg_quest_starter()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a327 = a_players;
|
|
||||||
_k327 = getFirstArrayKey( _a327 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k327 ) )
|
{
|
||||||
{
|
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||||
player = _a327[ _k327 ];
|
{
|
||||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||||
{
|
break;
|
||||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
}
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
else
|
wait 1.0;
|
||||||
{
|
}
|
||||||
_k327 = getNextArrayKey( _a327, _k327 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
#/
|
#/
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,162 +1,162 @@
|
|||||||
#include maps/mp/zombies/_zm;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/_visionset_mgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_net;
|
#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_net;
|
||||||
|
#include maps\mp\_visionset_mgr;
|
||||||
|
#include maps\mp\zombies\_zm;
|
||||||
|
|
||||||
onplayerconnect_sq_fc()
|
onplayerconnect_sq_fc()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.sq_fc_still_valid ) )
|
if ( !isdefined( level.sq_fc_still_valid ) )
|
||||||
{
|
level.sq_fc_still_valid = 1;
|
||||||
level.sq_fc_still_valid = 1;
|
|
||||||
}
|
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
|
||||||
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
|
return;
|
||||||
{
|
|
||||||
return;
|
self thread watch_for_touching_controls();
|
||||||
}
|
|
||||||
self thread watch_for_touching_controls();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_touching_controls()
|
watch_for_touching_controls()
|
||||||
{
|
{
|
||||||
self endon( "out_of_mana" );
|
self endon( "out_of_mana" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "al_all_setup" );
|
|
||||||
wait 1;
|
self waittill( "al_all_setup" );
|
||||||
v_original_origin = ( self.origin[ 0 ], self.origin[ 1 ], 0 );
|
|
||||||
v_original_angles = self.angles;
|
wait 1;
|
||||||
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
|
v_original_origin = ( self.origin[0], self.origin[1], 0 );
|
||||||
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
|
v_original_angles = self.angles;
|
||||||
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
|
v_forward_point = self.origin + anglestoforward( self.angles ) * 10;
|
||||||
{
|
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
|
||||||
v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
|
|
||||||
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
|
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
|
||||||
move_length = length( ( self.origin[ 0 ], self.origin[ 1 ], 0 ) - v_original_origin );
|
{
|
||||||
if ( !self actionslotonebuttonpressed() && !self actionslottwobuttonpressed() && !self actionslotthreebuttonpressed() && !self actionslotfourbuttonpressed() && !self adsbuttonpressed() && !self attackbuttonpressed() && !self fragbuttonpressed() && !self inventorybuttonpressed() && !self jumpbuttonpressed() && !self meleebuttonpressed() && !self secondaryoffhandbuttonpressed() && !self sprintbuttonpressed() && !self stancebuttonpressed() && !self throwbuttonpressed() && !self usebuttonpressed() && !self changeseatbuttonpressed() || move_length > 2 && vectordot( v_original_forward_vec, v_new_forward_vec ) < 0,99 )
|
v_new_forward_point = self.origin + anglestoforward( self.angles ) * 10;
|
||||||
{
|
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
|
||||||
level.sq_fc_still_valid = 0;
|
move_length = length( ( self.origin[0], self.origin[1], 0 ) - v_original_origin );
|
||||||
}
|
|
||||||
wait 0,05;
|
if ( self actionslotonebuttonpressed() || self actionslottwobuttonpressed() || self actionslotthreebuttonpressed() || self actionslotfourbuttonpressed() || self adsbuttonpressed() || self attackbuttonpressed() || self fragbuttonpressed() || self inventorybuttonpressed() || self jumpbuttonpressed() || self meleebuttonpressed() || self secondaryoffhandbuttonpressed() || self sprintbuttonpressed() || self stancebuttonpressed() || self throwbuttonpressed() || self usebuttonpressed() || self changeseatbuttonpressed() || move_length > 2 || vectordot( v_original_forward_vec, v_new_forward_vec ) < 0.99 )
|
||||||
}
|
level.sq_fc_still_valid = 0;
|
||||||
level notify( "someone_touched_controls" );
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
level notify( "someone_touched_controls" );
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_trigger_condition()
|
watch_for_trigger_condition()
|
||||||
{
|
{
|
||||||
level waittill( "pre_end_game" );
|
level waittill( "pre_end_game" );
|
||||||
if ( !level.sq_fc_still_valid )
|
|
||||||
{
|
if ( !level.sq_fc_still_valid )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.sndgameovermusicoverride = "game_over_nomove";
|
level.sndgameovermusicoverride = "game_over_nomove";
|
||||||
level.custom_intermission = ::player_intermission_prison;
|
level.custom_intermission = ::player_intermission_prison;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a94 = players;
|
|
||||||
_k94 = getFirstArrayKey( _a94 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k94 ) )
|
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
|
||||||
{
|
|
||||||
player = _a94[ _k94 ];
|
|
||||||
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
|
|
||||||
_k94 = getNextArrayKey( _a94, _k94 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player_intermission_prison()
|
player_intermission_prison()
|
||||||
{
|
{
|
||||||
self closemenu();
|
self closemenu();
|
||||||
self closeingamemenu();
|
self closeingamemenu();
|
||||||
level endon( "stop_intermission" );
|
level endon( "stop_intermission" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self notify( "_zombie_game_over" );
|
self notify( "_zombie_game_over" );
|
||||||
self.score = self.score_total;
|
self.score = self.score_total;
|
||||||
self.sessionstate = "intermission";
|
self.sessionstate = "intermission";
|
||||||
self.spectatorclient = -1;
|
self.spectatorclient = -1;
|
||||||
self.killcamentity = -1;
|
self.killcamentity = -1;
|
||||||
self.archivetime = 0;
|
self.archivetime = 0;
|
||||||
self.psoffsettime = 0;
|
self.psoffsettime = 0;
|
||||||
self.friendlydamage = undefined;
|
self.friendlydamage = undefined;
|
||||||
points = getstructarray( "dblock_cam", "targetname" );
|
points = getstructarray( "dblock_cam", "targetname" );
|
||||||
if ( !isDefined( points ) || points.size == 0 )
|
|
||||||
{
|
if ( !isdefined( points ) || points.size == 0 )
|
||||||
points = getentarray( "info_intermission", "classname" );
|
{
|
||||||
if ( points.size < 1 )
|
points = getentarray( "info_intermission", "classname" );
|
||||||
{
|
|
||||||
|
if ( points.size < 1 )
|
||||||
|
{
|
||||||
/#
|
/#
|
||||||
println( "NO info_intermission POINTS IN MAP" );
|
println( "NO info_intermission POINTS IN MAP" );
|
||||||
#/
|
#/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.game_over_bg = newclienthudelem( self );
|
|
||||||
self.game_over_bg.horzalign = "fullscreen";
|
self.game_over_bg = newclienthudelem( self );
|
||||||
self.game_over_bg.vertalign = "fullscreen";
|
self.game_over_bg.horzalign = "fullscreen";
|
||||||
self.game_over_bg setshader( "black", 640, 480 );
|
self.game_over_bg.vertalign = "fullscreen";
|
||||||
self.game_over_bg.alpha = 1;
|
self.game_over_bg setshader( "black", 640, 480 );
|
||||||
visionsetnaked( "cheat_bw", 0,05 );
|
self.game_over_bg.alpha = 1;
|
||||||
org = undefined;
|
visionsetnaked( "cheat_bw", 0.05 );
|
||||||
while ( 1 )
|
org = undefined;
|
||||||
{
|
|
||||||
points = array_randomize( points );
|
while ( true )
|
||||||
i = 0;
|
{
|
||||||
while ( i < points.size )
|
points = array_randomize( points );
|
||||||
{
|
|
||||||
point = points[ i ];
|
for ( i = 0; i < points.size; i++ )
|
||||||
if ( !isDefined( org ) )
|
{
|
||||||
{
|
point = points[i];
|
||||||
self spawn( point.origin, point.angles );
|
|
||||||
}
|
if ( !isdefined( org ) )
|
||||||
if ( isDefined( points[ i ].target ) )
|
self spawn( point.origin, point.angles );
|
||||||
{
|
|
||||||
if ( !isDefined( org ) )
|
if ( isdefined( points[i].target ) )
|
||||||
{
|
{
|
||||||
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) );
|
if ( !isdefined( org ) )
|
||||||
org setmodel( "tag_origin" );
|
{
|
||||||
}
|
org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) );
|
||||||
org.origin = points[ i ].origin;
|
org setmodel( "tag_origin" );
|
||||||
org.angles = points[ i ].angles;
|
}
|
||||||
j = 0;
|
|
||||||
while ( j < get_players().size )
|
org.origin = points[i].origin;
|
||||||
{
|
org.angles = points[i].angles;
|
||||||
player = get_players()[ j ];
|
|
||||||
player camerasetposition( org );
|
for ( j = 0; j < get_players().size; j++ )
|
||||||
player camerasetlookat();
|
{
|
||||||
player cameraactivate( 1 );
|
player = get_players()[j];
|
||||||
j++;
|
player camerasetposition( org );
|
||||||
}
|
player camerasetlookat();
|
||||||
speed = 20;
|
player cameraactivate( 1 );
|
||||||
if ( isDefined( points[ i ].speed ) )
|
}
|
||||||
{
|
|
||||||
speed = points[ i ].speed;
|
speed = 20;
|
||||||
}
|
|
||||||
target_point = getstruct( points[ i ].target, "targetname" );
|
if ( isdefined( points[i].speed ) )
|
||||||
dist = distance( points[ i ].origin, target_point.origin );
|
speed = points[i].speed;
|
||||||
time = dist / speed;
|
|
||||||
q_time = time * 0,25;
|
target_point = getstruct( points[i].target, "targetname" );
|
||||||
if ( q_time > 1 )
|
dist = distance( points[i].origin, target_point.origin );
|
||||||
{
|
time = dist / speed;
|
||||||
q_time = 1;
|
q_time = time * 0.25;
|
||||||
}
|
|
||||||
self.game_over_bg fadeovertime( q_time );
|
if ( q_time > 1 )
|
||||||
self.game_over_bg.alpha = 0;
|
q_time = 1;
|
||||||
org moveto( target_point.origin, time, q_time, q_time );
|
|
||||||
org rotateto( target_point.angles, time, q_time, q_time );
|
self.game_over_bg fadeovertime( q_time );
|
||||||
wait ( time - q_time );
|
self.game_over_bg.alpha = 0;
|
||||||
self.game_over_bg fadeovertime( q_time );
|
org moveto( target_point.origin, time, q_time, q_time );
|
||||||
self.game_over_bg.alpha = 1;
|
org rotateto( target_point.angles, time, q_time, q_time );
|
||||||
wait q_time;
|
wait( time - q_time );
|
||||||
i++;
|
self.game_over_bg fadeovertime( q_time );
|
||||||
continue;
|
self.game_over_bg.alpha = 1;
|
||||||
}
|
wait( q_time );
|
||||||
else
|
continue;
|
||||||
{
|
}
|
||||||
self.game_over_bg fadeovertime( 1 );
|
|
||||||
self.game_over_bg.alpha = 0;
|
self.game_over_bg fadeovertime( 1 );
|
||||||
wait 5;
|
self.game_over_bg.alpha = 0;
|
||||||
self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 );
|
wait 5;
|
||||||
}
|
self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 );
|
||||||
i++;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,108 +1,112 @@
|
|||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_net;
|
// 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_net;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
|
||||||
onplayerconnect_sq_wth()
|
onplayerconnect_sq_wth()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.wth_lookat_point ) )
|
if ( !isdefined( level.wth_lookat_point ) )
|
||||||
{
|
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
|
||||||
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
|
|
||||||
}
|
self thread track_player_eyes();
|
||||||
self thread track_player_eyes();
|
self thread play_scary_lightning();
|
||||||
self thread play_scary_lightning();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
track_player_eyes()
|
track_player_eyes()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
b_saw_the_wth = 0;
|
b_saw_the_wth = 0;
|
||||||
while ( !b_saw_the_wth )
|
|
||||||
{
|
while ( !b_saw_the_wth )
|
||||||
n_time = 0;
|
{
|
||||||
while ( self adsbuttonpressed() && n_time < 25 )
|
n_time = 0;
|
||||||
{
|
|
||||||
n_time++;
|
while ( self adsbuttonpressed() && n_time < 25 )
|
||||||
wait 0,05;
|
{
|
||||||
}
|
n_time++;
|
||||||
if ( n_time >= 25 && self adsbuttonpressed() && self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0,9, 0, undefined ) )
|
wait 0.05;
|
||||||
{
|
}
|
||||||
self do_player_general_vox( "general", "scare_react", undefined, 100 );
|
|
||||||
self playsoundtoplayer( "zmb_easteregg_face", self );
|
if ( n_time >= 25 && self adsbuttonpressed() && self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0.9, 0, undefined ) )
|
||||||
self.wth_elem = newclienthudelem( self );
|
{
|
||||||
self.wth_elem.horzalign = "fullscreen";
|
self do_player_general_vox( "general", "scare_react", undefined, 100 );
|
||||||
self.wth_elem.vertalign = "fullscreen";
|
self playsoundtoplayer( "zmb_easteregg_face", self );
|
||||||
self.wth_elem.sort = 1000;
|
self.wth_elem = newclienthudelem( self );
|
||||||
self.wth_elem.foreground = 0;
|
self.wth_elem.horzalign = "fullscreen";
|
||||||
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
self.wth_elem.vertalign = "fullscreen";
|
||||||
self.wth_elem.hidewheninmenu = 1;
|
self.wth_elem.sort = 1000;
|
||||||
j_time = 0;
|
self.wth_elem.foreground = 0;
|
||||||
while ( self adsbuttonpressed() && j_time < 5 )
|
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
||||||
{
|
self.wth_elem.hidewheninmenu = 1;
|
||||||
j_time++;
|
j_time = 0;
|
||||||
wait 0,05;
|
|
||||||
}
|
while ( self adsbuttonpressed() && j_time < 5 )
|
||||||
self.wth_elem destroy();
|
{
|
||||||
b_saw_the_wth = 1;
|
j_time++;
|
||||||
}
|
wait 0.05;
|
||||||
wait 0,05;
|
}
|
||||||
}
|
|
||||||
|
self.wth_elem destroy();
|
||||||
|
b_saw_the_wth = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_is_weapon_sniper( str_weapon )
|
sq_is_weapon_sniper( str_weapon )
|
||||||
{
|
{
|
||||||
a_snipers = array( "dsr50", "barretm82" );
|
a_snipers = array( "dsr50", "barretm82" );
|
||||||
_a77 = a_snipers;
|
|
||||||
_k77 = getFirstArrayKey( _a77 );
|
foreach ( str_sniper in a_snipers )
|
||||||
while ( isDefined( _k77 ) )
|
{
|
||||||
{
|
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
|
||||||
str_sniper = _a77[ _k77 ];
|
return true;
|
||||||
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
|
}
|
||||||
{
|
|
||||||
return 1;
|
return false;
|
||||||
}
|
|
||||||
_k77 = getNextArrayKey( _a77, _k77 );
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
play_scary_lightning()
|
play_scary_lightning()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
while ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && isDefined( self.b_lightning ) || !self.b_lightning && flag( "plane_zapped" ) )
|
{
|
||||||
{
|
while ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) || !( isdefined( self.b_lightning ) && self.b_lightning ) || flag( "plane_zapped" ) )
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
}
|
|
||||||
if ( randomint( 100000 ) == 1337 )
|
if ( randomint( 100000 ) == 1337 )
|
||||||
{
|
{
|
||||||
self.scary_lighting = 1;
|
self.scary_lighting = 1;
|
||||||
level setclientfield( "scripted_lightning_flash", 1 );
|
level setclientfield( "scripted_lightning_flash", 1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self.sl_elem = newclienthudelem( self );
|
self.sl_elem = newclienthudelem( self );
|
||||||
self.sl_elem.horzalign = "fullscreen";
|
self.sl_elem.horzalign = "fullscreen";
|
||||||
self.sl_elem.vertalign = "fullscreen";
|
self.sl_elem.vertalign = "fullscreen";
|
||||||
self.sl_elem.sort = 1000;
|
self.sl_elem.sort = 1000;
|
||||||
self.sl_elem.foreground = 0;
|
self.sl_elem.foreground = 0;
|
||||||
self.sl_elem.alpha = 0,6;
|
self.sl_elem.alpha = 0.6;
|
||||||
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
||||||
self.sl_elem.hidewheninmenu = 1;
|
self.sl_elem.hidewheninmenu = 1;
|
||||||
self.sl_elem.alpha = 0;
|
self.sl_elem.alpha = 0.0;
|
||||||
self.sl_elem fadeovertime( 0,1 );
|
self.sl_elem fadeovertime( 0.1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self.sl_elem.alpha = 0,6;
|
self.sl_elem.alpha = 0.6;
|
||||||
self.sl_elem fadeovertime( 0,1 );
|
self.sl_elem fadeovertime( 0.1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self.sl_elem.alpha = 0;
|
self.sl_elem.alpha = 0.0;
|
||||||
self.sl_elem fadeovertime( 0,1 );
|
self.sl_elem fadeovertime( 0.1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self.sl_elem destroy();
|
self.sl_elem destroy();
|
||||||
self.scary_lightning = 0;
|
self.scary_lightning = 0;
|
||||||
wait 10;
|
wait 10;
|
||||||
level setclientfield( "scripted_lightning_flash", 0 );
|
level setclientfield( "scripted_lightning_flash", 0 );
|
||||||
}
|
}
|
||||||
wait 1;
|
|
||||||
}
|
wait 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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,13 +1,14 @@
|
|||||||
//checked includes changed to match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_game_module_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include common_scripts/utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_game_module_utility;
|
||||||
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
|
|
||||||
register_game_module() //checked matches cerberus output
|
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,7 +1,9 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module_utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_game_module_meat_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include common_scripts/utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_game_module_meat_utility;
|
||||||
|
#include maps\mp\zombies\_zm_game_module_utility;
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,43 +1,46 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_game_module_meat;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_game_module_meat_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include common_scripts/utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_game_module_meat_utility;
|
||||||
|
#include maps\mp\zombies\_zm_game_module_meat;
|
||||||
|
|
||||||
init_item_meat() //checked matches cerberus output
|
init_item_meat()
|
||||||
{
|
{
|
||||||
level.item_meat_name = "item_meat_zm";
|
level.item_meat_name = "item_meat_zm";
|
||||||
precacheitem( level.item_meat_name );
|
precacheitem( level.item_meat_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
move_ring( ring ) //checked changed to match cerberus output
|
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 )
|
||||||
foreach ( position in positions )
|
{
|
||||||
{
|
foreach ( position in positions )
|
||||||
self moveto( position.origin, randomintrange( 30, 45 ) );
|
{
|
||||||
self waittill( "movedone" );
|
self moveto( position.origin, randomintrange( 30, 45 ) );
|
||||||
}
|
|
||||||
}
|
self waittill( "movedone" );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rotate_ring( forward ) //checked matches cerberus output
|
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,217 +1,209 @@
|
|||||||
#include maps/mp/zombies/_zm_magicbox;
|
// 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_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" );
|
registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" );
|
||||||
registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" );
|
registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" );
|
||||||
registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" );
|
registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" );
|
||||||
registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" );
|
registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" );
|
||||||
level._effect[ "lght_marker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" );
|
level._effect["lght_marker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" );
|
||||||
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" );
|
level._effect["lght_marker_flare"] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" );
|
||||||
level._effect[ "poltergeist" ] = loadfx( "system_elements/fx_null" );
|
level._effect["poltergeist"] = loadfx( "system_elements/fx_null" );
|
||||||
level._effect[ "box_gone_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" );
|
level._effect["box_gone_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" );
|
||||||
level._effect[ "box_here_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" );
|
level._effect["box_here_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" );
|
||||||
level._effect[ "box_is_open" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" );
|
level._effect["box_is_open"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" );
|
||||||
level._effect[ "box_is_locked" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" );
|
level._effect["box_is_locked"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" );
|
||||||
level._effect[ "box_is_leaving" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" );
|
level._effect["box_is_leaving"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" );
|
||||||
level.using_locked_magicbox = 1;
|
level.using_locked_magicbox = 1;
|
||||||
level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red";
|
level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red";
|
||||||
precachemodel( level.chest_joker_model );
|
precachemodel( level.chest_joker_model );
|
||||||
level.chest_joker_custom_movement = ::custom_joker_movement;
|
level.chest_joker_custom_movement = ::custom_joker_movement;
|
||||||
level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state;
|
level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state;
|
||||||
level thread wait_then_create_base_magic_box_fx();
|
level thread wait_then_create_base_magic_box_fx();
|
||||||
level thread handle_fire_sale();
|
level thread handle_fire_sale();
|
||||||
}
|
}
|
||||||
|
|
||||||
custom_joker_movement()
|
custom_joker_movement()
|
||||||
{
|
{
|
||||||
v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 );
|
v_origin = self.weapon_model.origin - vectorscale( ( 0, 0, 1 ), 5.0 );
|
||||||
self.weapon_model delete();
|
self.weapon_model delete();
|
||||||
m_lock = spawn( "script_model", v_origin );
|
m_lock = spawn( "script_model", v_origin );
|
||||||
m_lock setmodel( level.chest_joker_model );
|
m_lock setmodel( level.chest_joker_model );
|
||||||
m_lock.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 );
|
m_lock.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
level notify( "weapon_fly_away_start" );
|
level notify( "weapon_fly_away_start" );
|
||||||
wait 1;
|
wait 1;
|
||||||
m_lock rotateyaw( 3000, 4, 4 );
|
m_lock rotateyaw( 3000, 4, 4 );
|
||||||
wait 3;
|
wait 3;
|
||||||
m_lock movez( 20, 0,5, 0,5 );
|
m_lock movez( 20, 0.5, 0.5 );
|
||||||
m_lock waittill( "movedone" );
|
|
||||||
m_lock movez( -100, 0,5, 0,5 );
|
m_lock waittill( "movedone" );
|
||||||
m_lock waittill( "movedone" );
|
|
||||||
m_lock delete();
|
m_lock movez( -100, 0.5, 0.5 );
|
||||||
self notify( "box_moving" );
|
|
||||||
level notify( "weapon_fly_away_end" );
|
m_lock waittill( "movedone" );
|
||||||
|
|
||||||
|
m_lock delete();
|
||||||
|
self notify( "box_moving" );
|
||||||
|
level notify( "weapon_fly_away_end" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_then_create_base_magic_box_fx()
|
wait_then_create_base_magic_box_fx()
|
||||||
{
|
{
|
||||||
while ( !isDefined( level.chests ) )
|
while ( !isdefined( level.chests ) )
|
||||||
{
|
wait 0.5;
|
||||||
wait 0,5;
|
|
||||||
}
|
while ( !isdefined( level.chests[level.chests.size - 1].zbarrier ) )
|
||||||
while ( !isDefined( level.chests[ level.chests.size - 1 ].zbarrier ) )
|
wait 0.5;
|
||||||
{
|
|
||||||
wait 0,5;
|
foreach ( chest in level.chests )
|
||||||
}
|
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
|
||||||
_a92 = level.chests;
|
|
||||||
_k92 = getFirstArrayKey( _a92 );
|
|
||||||
while ( isDefined( _k92 ) )
|
|
||||||
{
|
|
||||||
chest = _a92[ _k92 ];
|
|
||||||
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
|
|
||||||
_k92 = getNextArrayKey( _a92, _k92 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set_magic_box_zbarrier_state( state )
|
set_magic_box_zbarrier_state( state )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < self getnumzbarrierpieces(); i++ )
|
||||||
while ( i < self getnumzbarrierpieces() )
|
self hidezbarrierpiece( i );
|
||||||
{
|
|
||||||
self hidezbarrierpiece( i );
|
self notify( "zbarrier_state_change" );
|
||||||
i++;
|
|
||||||
}
|
switch ( state )
|
||||||
self notify( "zbarrier_state_change" );
|
{
|
||||||
switch( state )
|
case "away":
|
||||||
{
|
self showzbarrierpiece( 0 );
|
||||||
case "away":
|
self.state = "away";
|
||||||
self showzbarrierpiece( 0 );
|
self.owner.is_locked = 0;
|
||||||
self.state = "away";
|
break;
|
||||||
self.owner.is_locked = 0;
|
case "arriving":
|
||||||
break;
|
self showzbarrierpiece( 1 );
|
||||||
case "arriving":
|
self thread magic_box_arrives();
|
||||||
self showzbarrierpiece( 1 );
|
self.state = "arriving";
|
||||||
self thread magic_box_arrives();
|
break;
|
||||||
self.state = "arriving";
|
case "initial":
|
||||||
break;
|
self showzbarrierpiece( 1 );
|
||||||
case "initial":
|
self thread magic_box_initial();
|
||||||
self showzbarrierpiece( 1 );
|
thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
|
||||||
self thread magic_box_initial();
|
self.state = "close";
|
||||||
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think );
|
break;
|
||||||
self.state = "close";
|
case "open":
|
||||||
break;
|
self showzbarrierpiece( 2 );
|
||||||
case "open":
|
self thread magic_box_opens();
|
||||||
self showzbarrierpiece( 2 );
|
self.state = "open";
|
||||||
self thread magic_box_opens();
|
break;
|
||||||
self.state = "open";
|
case "close":
|
||||||
break;
|
self showzbarrierpiece( 2 );
|
||||||
case "close":
|
self thread magic_box_closes();
|
||||||
self showzbarrierpiece( 2 );
|
self.state = "close";
|
||||||
self thread magic_box_closes();
|
break;
|
||||||
self.state = "close";
|
case "leaving":
|
||||||
break;
|
self showzbarrierpiece( 1 );
|
||||||
case "leaving":
|
self thread magic_box_leaves();
|
||||||
self showzbarrierpiece( 1 );
|
self.state = "leaving";
|
||||||
self thread magic_box_leaves();
|
self.owner.is_locked = 0;
|
||||||
self.state = "leaving";
|
break;
|
||||||
self.owner.is_locked = 0;
|
default:
|
||||||
break;
|
if ( isdefined( level.custom_magicbox_state_handler ) )
|
||||||
default:
|
self [[ level.custom_magicbox_state_handler ]]( state );
|
||||||
if ( isDefined( level.custom_magicbox_state_handler ) )
|
|
||||||
{
|
break;
|
||||||
self [[ level.custom_magicbox_state_handler ]]( state );
|
}
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_initial()
|
magic_box_initial()
|
||||||
{
|
{
|
||||||
self setzbarrierpiecestate( 1, "open" );
|
self setzbarrierpiecestate( 1, "open" );
|
||||||
wait 1;
|
wait 1;
|
||||||
self setclientfield( "magicbox_amb_fx", 1 );
|
self setclientfield( "magicbox_amb_fx", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_arrives()
|
magic_box_arrives()
|
||||||
{
|
{
|
||||||
self setclientfield( "magicbox_leaving_fx", 0 );
|
self setclientfield( "magicbox_leaving_fx", 0 );
|
||||||
self setclientfield( "magicbox_amb_fx", 1 );
|
self setclientfield( "magicbox_amb_fx", 1 );
|
||||||
self setzbarrierpiecestate( 1, "opening" );
|
self setzbarrierpiecestate( 1, "opening" );
|
||||||
while ( self getzbarrierpiecestate( 1 ) == "opening" )
|
|
||||||
{
|
while ( self getzbarrierpiecestate( 1 ) == "opening" )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
self notify( "arrived" );
|
self notify( "arrived" );
|
||||||
self.state = "close";
|
self.state = "close";
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_leaves()
|
magic_box_leaves()
|
||||||
{
|
{
|
||||||
self setclientfield( "magicbox_leaving_fx", 1 );
|
self setclientfield( "magicbox_leaving_fx", 1 );
|
||||||
self setclientfield( "magicbox_open_fx", 0 );
|
self setclientfield( "magicbox_open_fx", 0 );
|
||||||
self setzbarrierpiecestate( 1, "closing" );
|
self setzbarrierpiecestate( 1, "closing" );
|
||||||
self playsound( "zmb_hellbox_rise" );
|
self playsound( "zmb_hellbox_rise" );
|
||||||
while ( self getzbarrierpiecestate( 1 ) == "closing" )
|
|
||||||
{
|
while ( self getzbarrierpiecestate( 1 ) == "closing" )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
self notify( "left" );
|
self notify( "left" );
|
||||||
self setclientfield( "magicbox_amb_fx", 0 );
|
self setclientfield( "magicbox_amb_fx", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_opens()
|
magic_box_opens()
|
||||||
{
|
{
|
||||||
self setclientfield( "magicbox_open_fx", 1 );
|
self setclientfield( "magicbox_open_fx", 1 );
|
||||||
self setzbarrierpiecestate( 2, "opening" );
|
self setzbarrierpiecestate( 2, "opening" );
|
||||||
self playsound( "zmb_hellbox_open" );
|
self playsound( "zmb_hellbox_open" );
|
||||||
while ( self getzbarrierpiecestate( 2 ) == "opening" )
|
|
||||||
{
|
while ( self getzbarrierpiecestate( 2 ) == "opening" )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
self notify( "opened" );
|
self notify( "opened" );
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_closes()
|
magic_box_closes()
|
||||||
{
|
{
|
||||||
self setzbarrierpiecestate( 2, "closing" );
|
self setzbarrierpiecestate( 2, "closing" );
|
||||||
self playsound( "zmb_hellbox_close" );
|
self playsound( "zmb_hellbox_close" );
|
||||||
while ( self getzbarrierpiecestate( 2 ) == "closing" )
|
|
||||||
{
|
while ( self getzbarrierpiecestate( 2 ) == "closing" )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
self notify( "closed" );
|
self notify( "closed" );
|
||||||
self setclientfield( "magicbox_open_fx", 0 );
|
self setclientfield( "magicbox_open_fx", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
magic_box_do_weapon_rise()
|
magic_box_do_weapon_rise()
|
||||||
{
|
{
|
||||||
self endon( "box_hacked_respin" );
|
self endon( "box_hacked_respin" );
|
||||||
self setzbarrierpiecestate( 3, "closed" );
|
self setzbarrierpiecestate( 3, "closed" );
|
||||||
self setzbarrierpiecestate( 4, "closed" );
|
self setzbarrierpiecestate( 4, "closed" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self zbarrierpieceuseboxriselogic( 3 );
|
self zbarrierpieceuseboxriselogic( 3 );
|
||||||
self zbarrierpieceuseboxriselogic( 4 );
|
self zbarrierpieceuseboxriselogic( 4 );
|
||||||
self showzbarrierpiece( 3 );
|
self showzbarrierpiece( 3 );
|
||||||
self showzbarrierpiece( 4 );
|
self showzbarrierpiece( 4 );
|
||||||
self setzbarrierpiecestate( 3, "opening" );
|
self setzbarrierpiecestate( 3, "opening" );
|
||||||
self setzbarrierpiecestate( 4, "opening" );
|
self setzbarrierpiecestate( 4, "opening" );
|
||||||
while ( self getzbarrierpiecestate( 3 ) != "open" )
|
|
||||||
{
|
while ( self getzbarrierpiecestate( 3 ) != "open" )
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
|
||||||
self hidezbarrierpiece( 3 );
|
self hidezbarrierpiece( 3 );
|
||||||
self hidezbarrierpiece( 4 );
|
self hidezbarrierpiece( 4 );
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_fire_sale()
|
handle_fire_sale()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "fire_sale_off" );
|
level waittill( "fire_sale_off" );
|
||||||
i = 0;
|
|
||||||
while ( i < level.chests.size )
|
for ( i = 0; i < level.chests.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) )
|
if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) )
|
||||||
{
|
level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 );
|
||||||
level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 0 );
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,169 +1,172 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/_visionset_mgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_perks;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#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_net;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_perks;
|
||||||
|
#include maps\mp\_visionset_mgr;
|
||||||
|
|
||||||
enable_divetonuke_perk_for_level() //checked matches cerberus output
|
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() //checked matches cerberus output
|
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 );
|
||||||
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
|
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_precache() //checked matches cerberus output
|
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" );
|
|
||||||
precacheshader( "specialty_divetonuke_zombies" );
|
precacheitem( "zombie_perk_bottle_nuke" );
|
||||||
precachemodel( "zombie_vending_nuke" );
|
precacheshader( "specialty_divetonuke_zombies" );
|
||||||
precachemodel( "zombie_vending_nuke_on" );
|
precachemodel( "zombie_vending_nuke" );
|
||||||
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
|
precachemodel( "zombie_vending_nuke_on" );
|
||||||
level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" );
|
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
|
||||||
level.machine_assets[ "divetonuke" ] = spawnstruct();
|
level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" );
|
||||||
level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke";
|
level.machine_assets["divetonuke"] = spawnstruct();
|
||||||
level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke";
|
level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke";
|
||||||
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on";
|
level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke";
|
||||||
|
level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on";
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_register_clientfield() //checked matches cerberus output
|
divetonuke_register_clientfield()
|
||||||
{
|
{
|
||||||
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
|
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_set_clientfield( state ) //checked matches cerberus output
|
divetonuke_set_clientfield( state )
|
||||||
{
|
{
|
||||||
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
|
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output
|
divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision )
|
||||||
{
|
{
|
||||||
use_trigger.script_sound = "mus_perks_phd_jingle";
|
use_trigger.script_sound = "mus_perks_phd_jingle";
|
||||||
use_trigger.script_string = "divetonuke_perk";
|
use_trigger.script_string = "divetonuke_perk";
|
||||||
use_trigger.script_label = "mus_perks_phd_sting";
|
use_trigger.script_label = "mus_perks_phd_sting";
|
||||||
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() //checked changed to match cerberus output
|
divetonuke_perk_machine_think()
|
||||||
{
|
{
|
||||||
init_divetonuke();
|
init_divetonuke();
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
machine = getentarray( "vending_divetonuke", "targetname" );
|
{
|
||||||
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
machine = getentarray( "vending_divetonuke", "targetname" );
|
||||||
for ( i = 0; i < machine.size; i++ )
|
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
||||||
{
|
|
||||||
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model );
|
for ( i = 0; i < machine.size; i++ )
|
||||||
}
|
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
|
||||||
array_thread( machine_triggers, ::set_power_on, 0 );
|
|
||||||
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
array_thread( machine_triggers, ::set_power_on, 0 );
|
||||||
level waittill( "divetonuke_on" );
|
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
||||||
for ( i = 0; i < machine.size; i++ )
|
|
||||||
{
|
level waittill( "divetonuke_on" );
|
||||||
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model );
|
|
||||||
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 );
|
for ( i = 0; i < machine.size; i++ )
|
||||||
machine[ i ] playsound( "zmb_perks_power_on" );
|
{
|
||||||
machine[ i ] thread perk_fx( "divetonuke_light" );
|
machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
|
||||||
machine[ i ] thread play_loop_on_machine();
|
machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
|
||||||
}
|
machine[i] playsound( "zmb_perks_power_on" );
|
||||||
level notify( "specialty_flakjacket_power_on" );
|
machine[i] thread perk_fx( "divetonuke_light" );
|
||||||
array_thread( machine_triggers, ::set_power_on, 1 );
|
machine[i] thread play_loop_on_machine();
|
||||||
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) )
|
}
|
||||||
{
|
|
||||||
array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback );
|
level notify( "specialty_flakjacket_power_on" );
|
||||||
}
|
array_thread( machine_triggers, ::set_power_on, 1 );
|
||||||
level waittill( "divetonuke_off" );
|
|
||||||
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_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_off_callback );
|
|
||||||
}
|
level waittill( "divetonuke_off" );
|
||||||
array_thread( machine, ::turn_perk_off );
|
|
||||||
}
|
if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) )
|
||||||
|
array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
|
||||||
|
|
||||||
|
array_thread( machine, ::turn_perk_off );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_host_migration_func() //checked changed to match cerberus output
|
divetonuke_host_migration_func()
|
||||||
{
|
{
|
||||||
flop = getentarray( "vending_divetonuke", "targetname" );
|
flop = getentarray( "vending_divetonuke", "targetname" );
|
||||||
foreach ( perk in flop )
|
|
||||||
{
|
foreach ( perk in flop )
|
||||||
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model )
|
{
|
||||||
{
|
if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model )
|
||||||
perk perk_fx( undefined, 1 );
|
{
|
||||||
perk thread perk_fx( "divetonuke_light" );
|
perk perk_fx( undefined, 1 );
|
||||||
}
|
perk thread perk_fx( "divetonuke_light" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_explode( attacker, origin )
|
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 )
|
|
||||||
{
|
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" );
|
attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
|
||||||
}
|
else
|
||||||
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 );
|
||||||
}
|
attacker playsound( "zmb_phdflop_explo" );
|
||||||
playfx( level._effect[ "divetonuke_groundhit" ], origin );
|
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
||||||
attacker playsound( "zmb_phdflop_explo" );
|
wait 1;
|
||||||
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
||||||
wait 1;
|
|
||||||
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, damage_mod)
|
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
|
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
|
||||||
network_stall_counter = 0;
|
network_stall_counter = 0;
|
||||||
if ( isdefined( a_zombies ) )
|
|
||||||
{
|
if ( isdefined( a_zombies ) )
|
||||||
i = 0;
|
{
|
||||||
while ( i < a_zombies.size )
|
for ( i = 0; i < a_zombies.size; i++ )
|
||||||
{
|
{
|
||||||
e_zombie = a_zombies[ i ];
|
e_zombie = a_zombies[i];
|
||||||
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
|
|
||||||
{
|
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
|
||||||
i++;
|
continue;
|
||||||
continue;
|
|
||||||
}
|
dist = distance( e_zombie.origin, origin );
|
||||||
dist = distance( e_zombie.origin, origin );
|
damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius );
|
||||||
damage = ( min_damage + max_damage ) - min_damage * ( 1 - ( dist / radius ) );
|
e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod );
|
||||||
e_zombie dodamage(damage, e_zombie.origin, self, self, 0, damage_mod);
|
network_stall_counter--;
|
||||||
network_stall_counter--;
|
|
||||||
if ( network_stall_counter <= 0 )
|
if ( network_stall_counter <= 0 )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
network_stall_counter = randomintrange( 1, 3 );
|
network_stall_counter = randomintrange( 1, 3 );
|
||||||
}
|
}
|
||||||
i++;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,391 +0,0 @@
|
|||||||
#include maps/mp/zombies/_zm_ai_basic;
|
|
||||||
#include maps/mp/animscripts/shared;
|
|
||||||
#include maps/mp/zombies/_zm_score;
|
|
||||||
#include maps/mp/zombies/_zm_perks;
|
|
||||||
#include maps/mp/zombies/_zm_net;
|
|
||||||
#include maps/mp/zombies/_zm_utility;
|
|
||||||
#include common_scripts/utility;
|
|
||||||
#include maps/mp/_utility;
|
|
||||||
|
|
||||||
enable_electric_cherry_perk_for_level()
|
|
||||||
{
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" );
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache );
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield );
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost );
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think );
|
|
||||||
maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func );
|
|
||||||
}
|
|
||||||
|
|
||||||
init_electric_cherry()
|
|
||||||
{
|
|
||||||
level.custom_laststand_func = ::electric_cherry_laststand;
|
|
||||||
set_zombie_var( "tesla_head_gib_chance", 50 );
|
|
||||||
registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" );
|
|
||||||
}
|
|
||||||
|
|
||||||
electic_cherry_precache()
|
|
||||||
{
|
|
||||||
precacheitem( "zombie_perk_bottle_cherry" );
|
|
||||||
precacheshader( "specialty_fastreload_zombies" );
|
|
||||||
precachemodel( "p6_zm_vending_electric_cherry_off" );
|
|
||||||
precachemodel( "p6_zm_vending_electric_cherry_on" );
|
|
||||||
precachestring( &"ZM_PRISON_PERK_CHERRY" );
|
|
||||||
level._effect[ "electriccherry" ] = loadfx( "misc/fx_zombie_cola_on" );
|
|
||||||
level._effect[ "electric_cherry_explode" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" );
|
|
||||||
level._effect[ "electric_cherry_reload_small" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" );
|
|
||||||
level._effect[ "electric_cherry_reload_medium" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" );
|
|
||||||
level._effect[ "electric_cherry_reload_large" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" );
|
|
||||||
level._effect[ "tesla_shock" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock" );
|
|
||||||
level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" );
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_register_clientfield()
|
|
||||||
{
|
|
||||||
registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" );
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_set_clientfield( state )
|
|
||||||
{
|
|
||||||
self setclientfieldtoplayer( "perk_electric_cherry", state );
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision )
|
|
||||||
{
|
|
||||||
use_trigger.script_sound = "mus_perks_cherry_jingle";
|
|
||||||
use_trigger.script_string = "electric_cherry_perk";
|
|
||||||
use_trigger.script_label = "mus_perks_cherry_sting";
|
|
||||||
use_trigger.target = "vending_electriccherry";
|
|
||||||
perk_machine.script_string = "electriccherry_perk";
|
|
||||||
perk_machine.targetname = "vendingelectric_cherry";
|
|
||||||
if ( isDefined( bump_trigger ) )
|
|
||||||
{
|
|
||||||
bump_trigger.script_string = "electriccherry_perk";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_perk_machine_think()
|
|
||||||
{
|
|
||||||
init_electric_cherry();
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
machine = getentarray( "vendingelectric_cherry", "targetname" );
|
|
||||||
machine_triggers = getentarray( "vending_electriccherry", "target" );
|
|
||||||
i = 0;
|
|
||||||
while ( i < machine.size )
|
|
||||||
{
|
|
||||||
machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
level thread do_initial_power_off_callback( machine, "electriccherry" );
|
|
||||||
array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 0 );
|
|
||||||
level waittill( "electric_cherry_on" );
|
|
||||||
i = 0;
|
|
||||||
while ( i < machine.size )
|
|
||||||
{
|
|
||||||
machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" );
|
|
||||||
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 );
|
|
||||||
machine[ i ] playsound( "zmb_perks_power_on" );
|
|
||||||
machine[ i ] thread perk_fx( "electriccherry" );
|
|
||||||
machine[ i ] thread play_loop_on_machine();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
level notify( "specialty_grenadepulldeath_power_on" );
|
|
||||||
array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 1 );
|
|
||||||
level waittill( "electric_cherry_off" );
|
|
||||||
array_thread( machine, ::maps/mp/zombies/_zm_perks::turn_perk_off );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_host_migration_func()
|
|
||||||
{
|
|
||||||
a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" );
|
|
||||||
_a125 = a_electric_cherry_perk_machines;
|
|
||||||
_k125 = getFirstArrayKey( _a125 );
|
|
||||||
while ( isDefined( _k125 ) )
|
|
||||||
{
|
|
||||||
perk_machine = _a125[ _k125 ];
|
|
||||||
if ( isDefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" )
|
|
||||||
{
|
|
||||||
perk_machine perk_fx( undefined, 1 );
|
|
||||||
perk_machine thread perk_fx( "electriccherry" );
|
|
||||||
}
|
|
||||||
_k125 = getNextArrayKey( _a125, _k125 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_laststand()
|
|
||||||
{
|
|
||||||
visionsetlaststand( "zombie_last_stand", 1 );
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
playfx( level._effect[ "electric_cherry_explode" ], self.origin );
|
|
||||||
self playsound( "zmb_cherry_explode" );
|
|
||||||
self notify( "electric_cherry_start" );
|
|
||||||
wait 0,05;
|
|
||||||
a_zombies = get_round_enemy_array();
|
|
||||||
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 );
|
|
||||||
i = 0;
|
|
||||||
while ( i < a_zombies.size )
|
|
||||||
{
|
|
||||||
if ( isalive( self ) )
|
|
||||||
{
|
|
||||||
if ( a_zombies[ i ].health <= 1000 )
|
|
||||||
{
|
|
||||||
a_zombies[ i ] thread electric_cherry_death_fx();
|
|
||||||
if ( isDefined( self.cherry_kills ) )
|
|
||||||
{
|
|
||||||
self.cherry_kills++;
|
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 40 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
a_zombies[ i ] thread electric_cherry_stun();
|
|
||||||
a_zombies[ i ] thread electric_cherry_shock_fx();
|
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
self notify( "electric_cherry_end" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_death_fx()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
tag = "J_SpineUpper";
|
|
||||||
fx = "tesla_shock";
|
|
||||||
if ( self.isdog )
|
|
||||||
{
|
|
||||||
tag = "J_Spine1";
|
|
||||||
}
|
|
||||||
self playsound( "zmb_elec_jib_zombie" );
|
|
||||||
network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ fx ], self, tag );
|
|
||||||
if ( isDefined( self.tesla_head_gib_func ) && !self.head_gibbed )
|
|
||||||
{
|
|
||||||
[[ self.tesla_head_gib_func ]]();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_shock_fx()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
tag = "J_SpineUpper";
|
|
||||||
fx = "tesla_shock_secondary";
|
|
||||||
if ( self.isdog )
|
|
||||||
{
|
|
||||||
tag = "J_Spine1";
|
|
||||||
}
|
|
||||||
self playsound( "zmb_elec_jib_zombie" );
|
|
||||||
network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag );
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_stun()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self notify( "stun_zombie" );
|
|
||||||
self endon( "stun_zombie" );
|
|
||||||
if ( self.health <= 0 )
|
|
||||||
{
|
|
||||||
/#
|
|
||||||
iprintln( "trying to stun a dead zombie" );
|
|
||||||
#/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( self.ai_state != "find_flesh" )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.forcemovementscriptstate = 1;
|
|
||||||
self.ignoreall = 1;
|
|
||||||
i = 0;
|
|
||||||
while ( i < 2 )
|
|
||||||
{
|
|
||||||
self animscripted( self.origin, self.angles, "zm_afterlife_stun" );
|
|
||||||
self maps/mp/animscripts/shared::donotetracks( "stunned" );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
self.forcemovementscriptstate = 0;
|
|
||||||
self.ignoreall = 0;
|
|
||||||
self setgoalpos( self.origin );
|
|
||||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_reload_attack()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "stop_electric_cherry_reload_attack" );
|
|
||||||
self.wait_on_reload = [];
|
|
||||||
self.consecutive_electric_cherry_attacks = 0;
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
self waittill( "reload_start" );
|
|
||||||
str_current_weapon = self getcurrentweapon();
|
|
||||||
while ( isinarray( self.wait_on_reload, str_current_weapon ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
self.wait_on_reload[ self.wait_on_reload.size ] = str_current_weapon;
|
|
||||||
self.consecutive_electric_cherry_attacks++;
|
|
||||||
n_clip_current = self getweaponammoclip( str_current_weapon );
|
|
||||||
n_clip_max = weaponclipsize( str_current_weapon );
|
|
||||||
n_fraction = n_clip_current / n_clip_max;
|
|
||||||
perk_radius = linear_map( n_fraction, 1, 0, 32, 128 );
|
|
||||||
perk_dmg = linear_map( n_fraction, 1, 0, 1, 1045 );
|
|
||||||
self thread check_for_reload_complete( str_current_weapon );
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
switch( self.consecutive_electric_cherry_attacks )
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
n_zombie_limit = undefined;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
n_zombie_limit = 8;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
n_zombie_limit = 4;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
n_zombie_limit = 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
n_zombie_limit = 0;
|
|
||||||
}
|
|
||||||
self thread electric_cherry_cooldown_timer( str_current_weapon );
|
|
||||||
if ( isDefined( n_zombie_limit ) && n_zombie_limit == 0 )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
self thread electric_cherry_reload_fx( n_fraction );
|
|
||||||
self notify( "electric_cherry_start" );
|
|
||||||
self playsound( "zmb_cherry_explode" );
|
|
||||||
a_zombies = get_round_enemy_array();
|
|
||||||
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius );
|
|
||||||
n_zombies_hit = 0;
|
|
||||||
i = 0;
|
|
||||||
while ( i < a_zombies.size )
|
|
||||||
{
|
|
||||||
if ( isalive( self ) )
|
|
||||||
{
|
|
||||||
if ( isDefined( n_zombie_limit ) )
|
|
||||||
{
|
|
||||||
if ( n_zombies_hit < n_zombie_limit )
|
|
||||||
{
|
|
||||||
n_zombies_hit++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else }
|
|
||||||
else if ( a_zombies[ i ].health <= perk_dmg )
|
|
||||||
{
|
|
||||||
a_zombies[ i ] thread electric_cherry_death_fx();
|
|
||||||
if ( isDefined( self.cherry_kills ) )
|
|
||||||
{
|
|
||||||
self.cherry_kills++;
|
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 40 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( !isDefined( a_zombies[ i ].is_brutus ) )
|
|
||||||
{
|
|
||||||
a_zombies[ i ] thread electric_cherry_stun();
|
|
||||||
}
|
|
||||||
a_zombies[ i ] thread electric_cherry_shock_fx();
|
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
self notify( "electric_cherry_end" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_cooldown_timer( str_current_weapon )
|
|
||||||
{
|
|
||||||
self notify( "electric_cherry_cooldown_started" );
|
|
||||||
self endon( "electric_cherry_cooldown_started" );
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
n_reload_time = weaponreloadtime( str_current_weapon );
|
|
||||||
if ( self hasperk( "specialty_fastreload" ) )
|
|
||||||
{
|
|
||||||
n_reload_time *= getDvarFloat( "perk_weapReloadMultiplier" );
|
|
||||||
}
|
|
||||||
n_cooldown_time = n_reload_time + 3;
|
|
||||||
wait n_cooldown_time;
|
|
||||||
self.consecutive_electric_cherry_attacks = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
check_for_reload_complete( weapon )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "player_lost_weapon_" + weapon );
|
|
||||||
self thread weapon_replaced_monitor( weapon );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
self waittill( "reload" );
|
|
||||||
str_current_weapon = self getcurrentweapon();
|
|
||||||
if ( str_current_weapon == weapon )
|
|
||||||
{
|
|
||||||
arrayremovevalue( self.wait_on_reload, weapon );
|
|
||||||
self notify( "weapon_reload_complete_" + weapon );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
weapon_replaced_monitor( weapon )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "weapon_reload_complete_" + weapon );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
self waittill( "weapon_change" );
|
|
||||||
primaryweapons = self getweaponslistprimaries();
|
|
||||||
if ( !isinarray( primaryweapons, weapon ) )
|
|
||||||
{
|
|
||||||
self notify( "player_lost_weapon_" + weapon );
|
|
||||||
arrayremovevalue( self.wait_on_reload, weapon );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_reload_fx( n_fraction )
|
|
||||||
{
|
|
||||||
if ( n_fraction >= 0,67 )
|
|
||||||
{
|
|
||||||
self setclientfield( "electric_cherry_reload_fx", 1 );
|
|
||||||
}
|
|
||||||
else if ( n_fraction >= 0,33 && n_fraction < 0,67 )
|
|
||||||
{
|
|
||||||
self setclientfield( "electric_cherry_reload_fx", 2 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self setclientfield( "electric_cherry_reload_fx", 3 );
|
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
self setclientfield( "electric_cherry_reload_fx", 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
electric_cherry_perk_lost()
|
|
||||||
{
|
|
||||||
self notify( "stop_electric_cherry_reload_attack" );
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,278 +1,302 @@
|
|||||||
#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._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||||
{
|
level.ballistic_knife_autorecover = 1;
|
||||||
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
|
||||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
||||||
}
|
{
|
||||||
|
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
||||||
|
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn( watcher, player )
|
on_spawn( watcher, player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
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 );
|
|
||||||
isfriendly = 0;
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
if ( isDefined( endpos ) )
|
|
||||||
{
|
isfriendly = 0;
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
|
||||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
if ( isdefined( endpos ) )
|
||||||
retrievable_model setowner( player );
|
{
|
||||||
retrievable_model.owner = player;
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model.angles = angles;
|
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model setowner( player );
|
||||||
if ( isDefined( prey ) )
|
retrievable_model.owner = player;
|
||||||
{
|
retrievable_model.angles = angles;
|
||||||
if ( isplayer( prey ) && player.team == prey.team )
|
retrievable_model.name = watcher.weapon;
|
||||||
{
|
|
||||||
isfriendly = 1;
|
if ( isdefined( prey ) )
|
||||||
}
|
{
|
||||||
else
|
if ( isplayer( prey ) && player.team == prey.team )
|
||||||
{
|
isfriendly = 1;
|
||||||
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 thread force_drop_knives_to_ground_on_death( player, prey );
|
||||||
retrievable_model linkto( prey, bone );
|
}
|
||||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
else if ( isfriendly )
|
||||||
}
|
{
|
||||||
else
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
{
|
normal = ( 0, 0, 1 );
|
||||||
if ( isfriendly )
|
}
|
||||||
{
|
}
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
|
||||||
normal = ( 0, 0, 1 );
|
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
||||||
}
|
|
||||||
}
|
if ( isfriendly )
|
||||||
}
|
retrievable_model waittill( "stationary" );
|
||||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
|
||||||
if ( isfriendly )
|
retrievable_model thread drop_knives_to_ground( player );
|
||||||
{
|
|
||||||
retrievable_model waittill( "stationary" );
|
if ( isfriendly )
|
||||||
}
|
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||||
retrievable_model thread drop_knives_to_ground( player );
|
else
|
||||||
if ( isfriendly )
|
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
{
|
|
||||||
player notify( "ballistic_knife_stationary" );
|
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_to_show_glowing_model( prey )
|
wait_to_show_glowing_model( prey )
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait 2;
|
wait 2;
|
||||||
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn_retrieve_trigger( watcher, player )
|
on_spawn_retrieve_trigger( watcher, player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
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 );
|
|
||||||
if ( !isDefined( retrievable_model ) )
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
{
|
|
||||||
return;
|
if ( !isdefined( retrievable_model ) )
|
||||||
}
|
return;
|
||||||
trigger_pos = [];
|
|
||||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
trigger_pos = [];
|
||||||
{
|
|
||||||
trigger_pos[ 0 ] = prey.origin[ 0 ];
|
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||||
trigger_pos[ 1 ] = prey.origin[ 1 ];
|
{
|
||||||
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
|
trigger_pos[0] = prey.origin[0];
|
||||||
}
|
trigger_pos[1] = prey.origin[1];
|
||||||
else
|
trigger_pos[2] = prey.origin[2] + 10;
|
||||||
{
|
}
|
||||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
else
|
||||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
{
|
||||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
|
||||||
}
|
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
|
||||||
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
|
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
|
||||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
}
|
||||||
pickup_trigger.owner = player;
|
|
||||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
if ( is_true( level.ballistic_knife_autorecover ) )
|
||||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
{
|
||||||
if ( isDefined( hint_string ) )
|
trigger_pos[2] -= 50.0;
|
||||||
{
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||||
pickup_trigger sethintstring( hint_string );
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
||||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
pickup_trigger setteamfortrigger( player.team );
|
|
||||||
player clientclaimtrigger( pickup_trigger );
|
pickup_trigger.owner = player;
|
||||||
pickup_trigger enablelinkto();
|
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||||
if ( isDefined( prey ) )
|
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||||
{
|
|
||||||
pickup_trigger linkto( prey );
|
if ( isdefined( hint_string ) )
|
||||||
}
|
pickup_trigger sethintstring( hint_string );
|
||||||
else
|
else
|
||||||
{
|
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||||
pickup_trigger linkto( retrievable_model );
|
|
||||||
}
|
pickup_trigger setteamfortrigger( player.team );
|
||||||
if ( isDefined( level.knife_planted ) )
|
player clientclaimtrigger( pickup_trigger );
|
||||||
{
|
pickup_trigger enablelinkto();
|
||||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
|
||||||
}
|
if ( isdefined( prey ) )
|
||||||
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
pickup_trigger linkto( prey );
|
||||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
else
|
||||||
|
pickup_trigger linkto( retrievable_model );
|
||||||
|
|
||||||
|
if ( isdefined( level.knife_planted ) )
|
||||||
|
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
||||||
|
|
||||||
|
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
|
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_print( endpos )
|
debug_print( endpos )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
print3d( endpos, "pickup_trigger" );
|
{
|
||||||
wait 0,05;
|
print3d( endpos, "pickup_trigger" );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
while ( 1 )
|
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||||
{
|
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||||
trigger waittill( "trigger", player );
|
|
||||||
while ( !isalive( player ) )
|
while ( true )
|
||||||
{
|
{
|
||||||
continue;
|
trigger waittill( "trigger", player );
|
||||||
}
|
|
||||||
while ( !player isonground() )
|
if ( !isalive( player ) )
|
||||||
{
|
continue;
|
||||||
continue;
|
|
||||||
}
|
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
}
|
continue;
|
||||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
|
||||||
{
|
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
|
ammo_stock = player getweaponammostock( weapon );
|
||||||
{
|
ammo_clip = player getweaponammoclip( weapon );
|
||||||
if ( isDefined( playersoundonuse ) )
|
current_weapon = player getcurrentweapon();
|
||||||
{
|
total_ammo = ammo_stock + ammo_clip;
|
||||||
player playlocalsound( playersoundonuse );
|
hasreloaded = 1;
|
||||||
}
|
|
||||||
if ( isDefined( npcsoundonuse ) )
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||||
{
|
hasreloaded = 0;
|
||||||
player playsound( npcsoundonuse );
|
|
||||||
}
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
player thread [[ callback ]]( weapon, model, trigger );
|
continue;
|
||||||
return;
|
|
||||||
}
|
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||||
else
|
{
|
||||||
{
|
if ( isdefined( playersoundonuse ) )
|
||||||
}
|
player playlocalsound( playersoundonuse );
|
||||||
}
|
|
||||||
|
if ( isdefined( npcsoundonuse ) )
|
||||||
|
player playsound( npcsoundonuse );
|
||||||
|
|
||||||
|
player thread [[ callback ]]( weapon, model, trigger );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_up( weapon, model, trigger )
|
pick_up( weapon, model, trigger )
|
||||||
{
|
{
|
||||||
current_weapon = self getcurrentweapon();
|
if ( self hasweapon( weapon ) )
|
||||||
if ( current_weapon != weapon )
|
{
|
||||||
{
|
current_weapon = self getcurrentweapon();
|
||||||
clip_ammo = self getweaponammoclip( weapon );
|
|
||||||
if ( !clip_ammo )
|
if ( current_weapon != weapon )
|
||||||
{
|
{
|
||||||
self setweaponammoclip( weapon, 1 );
|
clip_ammo = self getweaponammoclip( weapon );
|
||||||
}
|
|
||||||
else
|
if ( !clip_ammo )
|
||||||
{
|
self setweaponammoclip( weapon, 1 );
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
else
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
{
|
||||||
}
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
}
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
else
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
{
|
||||||
}
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
}
|
||||||
model destroy_ent();
|
}
|
||||||
trigger destroy_ent();
|
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
||||||
|
model destroy_ent();
|
||||||
|
trigger destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_ent()
|
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();
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_shutdown( trigger, model )
|
watch_shutdown( trigger, model )
|
||||||
{
|
{
|
||||||
self waittill_any( "death", "disconnect", "zmb_lost_knife" );
|
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
|
||||||
trigger destroy_ent();
|
trigger destroy_ent();
|
||||||
model destroy_ent();
|
model destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
drop_knives_to_ground( player )
|
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 );
|
{
|
||||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
level waittill( "drop_objects_to_ground", origin, radius );
|
||||||
{
|
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||||
self thread update_retrieve_trigger( player );
|
{
|
||||||
}
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
}
|
self thread update_retrieve_trigger( player );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
force_drop_knives_to_ground_on_death( player, prey )
|
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" );
|
|
||||||
self unlink();
|
prey waittill( "death" );
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
|
||||||
self thread update_retrieve_trigger( player );
|
self unlink();
|
||||||
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
update_retrieve_trigger( player )
|
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 );
|
{
|
||||||
return;
|
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||||
}
|
return;
|
||||||
self waittill( "stationary" );
|
}
|
||||||
trigger = self.retrievabletrigger;
|
|
||||||
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
|
self waittill( "stationary" );
|
||||||
trigger linkto( self );
|
|
||||||
|
trigger = self.retrievabletrigger;
|
||||||
|
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||||
|
trigger linkto( self );
|
||||||
}
|
}
|
||||||
|
@ -1,323 +1,328 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/zm_shared;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
|
#include maps\mp\animscripts\zm_shared;
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "blundergat_zm" ) )
|
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "blundergat_zm" ) )
|
||||||
{
|
return;
|
||||||
return;
|
else
|
||||||
}
|
{
|
||||||
else
|
precacheitem( "blundersplat_bullet_zm" );
|
||||||
{
|
precacheitem( "blundersplat_explosive_dart_zm" );
|
||||||
precacheitem( "blundersplat_bullet_zm" );
|
}
|
||||||
precacheitem( "blundersplat_explosive_dart_zm" );
|
|
||||||
}
|
level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" );
|
||||||
level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" );
|
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit );
|
||||||
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit );
|
level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
|
||||||
level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
|
level._effect["dart_light"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
|
||||||
level._effect[ "dart_light" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
|
onplayerconnect_callback( ::blundersplat_on_player_connect );
|
||||||
onplayerconnect_callback( ::blundersplat_on_player_connect );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
blundersplat_on_player_connect() //checked matches cerberus output
|
blundersplat_on_player_connect()
|
||||||
{
|
{
|
||||||
self thread wait_for_blundersplat_fired();
|
self thread wait_for_blundersplat_fired();
|
||||||
self thread wait_for_blundersplat_upgraded_fired();
|
self thread wait_for_blundersplat_upgraded_fired();
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output
|
zombie_wait_for_blundersplat_hit()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
{
|
||||||
if ( weaponname == "blundersplat_bullet_zm" )
|
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||||
{
|
|
||||||
if ( !isDefined( self.titus_tagged ) )
|
if ( weaponname == "blundersplat_bullet_zm" )
|
||||||
{
|
{
|
||||||
a_grenades = getentarray( "grenade", "classname" );
|
if ( !isdefined( self.titus_tagged ) )
|
||||||
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 )
|
{
|
||||||
{
|
a_grenades = getentarray( "grenade", "classname" );
|
||||||
continue;
|
|
||||||
}
|
if ( !isdefined( a_grenades ) || a_grenades.size <= 0 )
|
||||||
self.titus_tagged = 1;
|
continue;
|
||||||
foreach ( e_grenade in a_grenades )
|
|
||||||
{
|
self.titus_tagged = 1;
|
||||||
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
|
||||||
{
|
foreach ( e_grenade in a_grenades )
|
||||||
if ( e_grenade islinkedto( self ) )
|
{
|
||||||
{
|
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||||
while ( 1 )
|
{
|
||||||
{
|
if ( e_grenade islinkedto( self ) )
|
||||||
if ( !isDefined( e_grenade.fuse_time ) )
|
{
|
||||||
{
|
while ( true )
|
||||||
wait_network_frame();
|
{
|
||||||
}
|
if ( !isdefined( e_grenade.fuse_time ) )
|
||||||
else
|
wait_network_frame();
|
||||||
{
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
n_fuse_timer = e_grenade.fuse_time;
|
n_fuse_timer = e_grenade.fuse_time;
|
||||||
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self thread _titus_target_animate_and_die( n_fuse_timer, inflictor );
|
|
||||||
self thread _titus_target_check_for_grenade_hits();
|
self thread _titus_target_animate_and_die( n_fuse_timer, inflictor );
|
||||||
}
|
self thread _titus_target_check_for_grenade_hits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_blundersplat_fired() //checked matches cerberus output
|
wait_for_blundersplat_fired()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "spawned_player" );
|
|
||||||
for ( ;; )
|
self waittill( "spawned_player" );
|
||||||
{
|
|
||||||
self waittill( "weapon_fired", str_weapon );
|
for (;;)
|
||||||
if ( str_weapon == "blundersplat_zm" )
|
{
|
||||||
{
|
self waittill( "weapon_fired", str_weapon );
|
||||||
wait_network_frame();
|
|
||||||
_titus_locate_target( 1 );
|
if ( str_weapon == "blundersplat_zm" )
|
||||||
wait_network_frame();
|
{
|
||||||
_titus_locate_target( 1 );
|
wait_network_frame();
|
||||||
wait_network_frame();
|
_titus_locate_target( 1 );
|
||||||
_titus_locate_target( 1 );
|
wait_network_frame();
|
||||||
}
|
_titus_locate_target( 1 );
|
||||||
wait 0.5;
|
wait_network_frame();
|
||||||
}
|
_titus_locate_target( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_blundersplat_upgraded_fired() //checked matches cerberus output
|
wait_for_blundersplat_upgraded_fired()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "spawned_player" );
|
|
||||||
for ( ;; )
|
self waittill( "spawned_player" );
|
||||||
{
|
|
||||||
self waittill( "weapon_fired", str_weapon );
|
for (;;)
|
||||||
if ( str_weapon == "blundersplat_upgraded_zm" )
|
{
|
||||||
{
|
self waittill( "weapon_fired", str_weapon );
|
||||||
wait_network_frame();
|
|
||||||
_titus_locate_target( 0 );
|
if ( str_weapon == "blundersplat_upgraded_zm" )
|
||||||
wait_network_frame();
|
{
|
||||||
_titus_locate_target( 0 );
|
wait_network_frame();
|
||||||
wait_network_frame();
|
_titus_locate_target( 0 );
|
||||||
_titus_locate_target( 0 );
|
wait_network_frame();
|
||||||
}
|
_titus_locate_target( 0 );
|
||||||
}
|
wait_network_frame();
|
||||||
|
_titus_locate_target( 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_locate_target( is_not_upgraded ) //checked changed to match cerberus output
|
_titus_locate_target( is_not_upgraded )
|
||||||
{
|
{
|
||||||
if ( !isDefined( is_not_upgraded ) )
|
if ( !isdefined( is_not_upgraded ) )
|
||||||
{
|
is_not_upgraded = 1;
|
||||||
is_not_upgraded = 1;
|
|
||||||
}
|
fire_angles = self getplayerangles();
|
||||||
fire_angles = self getplayerangles();
|
fire_origin = self getplayercamerapos();
|
||||||
fire_origin = self getplayercamerapos();
|
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
|
||||||
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
|
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
|
||||||
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
|
|
||||||
if ( is_not_upgraded )
|
if ( is_not_upgraded )
|
||||||
{
|
n_fuse_timer = randomfloatrange( 1.0, 2.5 );
|
||||||
n_fuse_timer = randomfloatrange( 1, 2.5 );
|
else
|
||||||
}
|
n_fuse_timer = randomfloatrange( 3.0, 4.0 );
|
||||||
else
|
|
||||||
{
|
foreach ( target in a_targets )
|
||||||
n_fuse_timer = randomfloatrange( 3, 4 );
|
{
|
||||||
}
|
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
|
||||||
foreach ( target in a_targets )
|
{
|
||||||
{
|
if ( isai( target ) )
|
||||||
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
|
{
|
||||||
{
|
if ( !isdefined( target.titusmarked ) )
|
||||||
if ( isai( target ) )
|
{
|
||||||
{
|
a_tags = [];
|
||||||
if ( !isDefined( target.titusmarked ) )
|
a_tags[0] = "j_hip_le";
|
||||||
{
|
a_tags[1] = "j_hip_ri";
|
||||||
a_tags = [];
|
a_tags[2] = "j_spine4";
|
||||||
a_tags[ 0 ] = "j_hip_le";
|
a_tags[3] = "j_elbow_le";
|
||||||
a_tags[ 1 ] = "j_hip_ri";
|
a_tags[4] = "j_elbow_ri";
|
||||||
a_tags[ 2 ] = "j_spine4";
|
a_tags[5] = "j_clavicle_le";
|
||||||
a_tags[ 3 ] = "j_elbow_le";
|
a_tags[6] = "j_clavicle_ri";
|
||||||
a_tags[ 4 ] = "j_elbow_ri";
|
str_tag = a_tags[randomint( a_tags.size )];
|
||||||
a_tags[ 5 ] = "j_clavicle_le";
|
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
|
||||||
a_tags[ 6 ] = "j_clavicle_ri";
|
|
||||||
str_tag = a_tags[ randomint( a_tags.size ) ];
|
if ( b_trace_pass )
|
||||||
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
|
{
|
||||||
if ( b_trace_pass )
|
target thread _titus_marked();
|
||||||
{
|
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self );
|
||||||
target thread _titus_marked();
|
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
|
||||||
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self );
|
return;
|
||||||
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
|
}
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
vec = anglestoforward( fire_angles );
|
||||||
vec = anglesToForward( fire_angles );
|
trace_end = fire_origin + vec * 20000;
|
||||||
trace_end = fire_origin + ( vec * 20000 );
|
trace = bullettrace( fire_origin, trace_end, 1, self );
|
||||||
trace = bullettrace( fire_origin, trace_end, 1, self );
|
offsetpos = trace["position"] + _titus_get_spread( 80 );
|
||||||
offsetpos = trace[ "position" ] + _titus_get_spread( 80 );
|
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
|
||||||
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
|
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
|
||||||
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_get_spread( n_spread ) //checked matches cerberus output
|
_titus_get_spread( n_spread )
|
||||||
{
|
{
|
||||||
n_x = randomintrange( n_spread * -1, n_spread );
|
n_x = randomintrange( n_spread * -1, n_spread );
|
||||||
n_y = randomintrange( n_spread * -1, n_spread );
|
n_y = randomintrange( n_spread * -1, n_spread );
|
||||||
n_z = randomintrange( n_spread * -1, n_spread );
|
n_z = randomintrange( n_spread * -1, n_spread );
|
||||||
return ( n_x, n_y, n_z );
|
return ( n_x, n_y, n_z );
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_marked() //checked matches cerberus output
|
_titus_marked()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self.titusmarked = 1;
|
self.titusmarked = 1;
|
||||||
wait 1;
|
wait 1;
|
||||||
self.titusmarked = undefined;
|
self.titusmarked = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_target_animate_and_die( n_fuse_timer, inflictor ) //checked matches cerberus output
|
_titus_target_animate_and_die( n_fuse_timer, inflictor )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "titus_target_timeout" );
|
self endon( "titus_target_timeout" );
|
||||||
self thread _titus_target_timeout( n_fuse_timer );
|
self thread _titus_target_timeout( n_fuse_timer );
|
||||||
self thread _titus_check_for_target_death( inflictor );
|
self thread _titus_check_for_target_death( inflictor );
|
||||||
self thread _blundersplat_target_acid_stun_anim();
|
self thread _blundersplat_target_acid_stun_anim();
|
||||||
wait n_fuse_timer;
|
wait( n_fuse_timer );
|
||||||
self notify( "killed_by_a_blundersplat" );
|
self notify( "killed_by_a_blundersplat", inflictor );
|
||||||
self dodamage( self.health + 1000, self.origin );
|
self dodamage( self.health + 1000, self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_target_check_for_grenade_hits() //checked changed to match cerberus output
|
_titus_target_check_for_grenade_hits()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "titus_target_timeout" );
|
self endon( "titus_target_timeout" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
{
|
||||||
if ( weaponname == "blundersplat_bullet_zm" )
|
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||||
{
|
|
||||||
a_grenades = getentarray( "grenade", "classname" );
|
if ( weaponname == "blundersplat_bullet_zm" )
|
||||||
foreach ( e_grenade in a_grenades )
|
{
|
||||||
{
|
a_grenades = getentarray( "grenade", "classname" );
|
||||||
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
|
||||||
{
|
foreach ( e_grenade in a_grenades )
|
||||||
if ( e_grenade islinkedto( self ) )
|
{
|
||||||
{
|
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||||
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
{
|
||||||
}
|
if ( e_grenade islinkedto( self ) )
|
||||||
}
|
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_target_timeout( n_fuse_timer ) //checked matches cerberus output
|
_titus_target_timeout( n_fuse_timer )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait n_fuse_timer;
|
wait( n_fuse_timer );
|
||||||
self notify( "titus_target_timeout" );
|
self notify( "titus_target_timeout" );
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_check_for_target_death( inflictor ) //checked changed to match cerberus output
|
_titus_check_for_target_death( inflictor )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
self notify( "killed_by_a_blundersplat", inflictor );
|
|
||||||
self notify( "titus_target_killed" );
|
self notify( "killed_by_a_blundersplat", inflictor );
|
||||||
|
self notify( "titus_target_killed" );
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_grenade_detonate_on_target_death( target ) //checked matches cerberus output
|
_titus_grenade_detonate_on_target_death( target )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
target endon( "titus_target_timeout" );
|
target endon( "titus_target_timeout" );
|
||||||
target waittill( "titus_target_killed" );
|
|
||||||
self.fuse_reset = 1;
|
target waittill( "titus_target_killed" );
|
||||||
self resetmissiledetonationtime( 0.05 );
|
|
||||||
|
self.fuse_reset = 1;
|
||||||
|
self resetmissiledetonationtime( 0.05 );
|
||||||
}
|
}
|
||||||
|
|
||||||
_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ) //checked changed to match cerberus output
|
_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded )
|
||||||
{
|
{
|
||||||
if ( !isDefined( is_not_upgraded ) )
|
if ( !isdefined( is_not_upgraded ) )
|
||||||
{
|
is_not_upgraded = 1;
|
||||||
is_not_upgraded = 1;
|
|
||||||
}
|
if ( !isdefined( n_fuse_timer ) )
|
||||||
if ( !isDefined( n_fuse_timer ) )
|
n_fuse_timer = randomfloatrange( 1, 1.5 );
|
||||||
{
|
|
||||||
n_fuse_timer = randomfloatrange( 1, 1,5 );
|
self waittill( "death" );
|
||||||
}
|
|
||||||
self waittill( "death" );
|
a_grenades = getentarray( "grenade", "classname" );
|
||||||
a_grenades = getentarray( "grenade", "classname" );
|
|
||||||
foreach ( e_grenade in a_grenades )
|
foreach ( e_grenade in a_grenades )
|
||||||
{
|
{
|
||||||
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isDefined( e_grenade.fuse_reset ) )
|
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined( e_grenade.fuse_reset ) )
|
||||||
{
|
{
|
||||||
e_grenade.fuse_reset = 1;
|
e_grenade.fuse_reset = 1;
|
||||||
e_grenade.fuse_time = n_fuse_timer;
|
e_grenade.fuse_time = n_fuse_timer;
|
||||||
e_grenade resetmissiledetonationtime( n_fuse_timer );
|
e_grenade resetmissiledetonationtime( n_fuse_timer );
|
||||||
if ( is_not_upgraded )
|
|
||||||
{
|
if ( is_not_upgraded )
|
||||||
e_grenade create_zombie_point_of_interest( 250, 5, 10000 );
|
e_grenade create_zombie_point_of_interest( 250, 5, 10000 );
|
||||||
}
|
else
|
||||||
else
|
e_grenade create_zombie_point_of_interest( 500, 10, 10000 );
|
||||||
{
|
|
||||||
e_grenade create_zombie_point_of_interest( 500, 10, 10000 );
|
return;
|
||||||
}
|
}
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gib_on_blundergat_damage( refs, point, weaponname ) //checked changed to match cerberus output
|
gib_on_blundergat_damage( refs, point, weaponname )
|
||||||
{
|
{
|
||||||
new_gib_ref = [];
|
new_gib_ref = [];
|
||||||
if ( isDefined( level.no_gib_in_wolf_area ) )
|
|
||||||
{
|
if ( isdefined( level.no_gib_in_wolf_area ) )
|
||||||
if ( [[ level.no_gib_in_wolf_area ]]() )
|
{
|
||||||
{
|
if ( [[ level.no_gib_in_wolf_area ]]() )
|
||||||
return new_gib_ref;
|
return new_gib_ref;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( self.health <= 0 )
|
if ( self.health <= 0 )
|
||||||
{
|
return refs;
|
||||||
return refs;
|
else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
|
||||||
}
|
{
|
||||||
else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
|
new_gib_ref = self maps\mp\zombies\_zm_spawner::derive_damage_refs( point );
|
||||||
{
|
return new_gib_ref;
|
||||||
new_gib_ref = self maps/mp/zombies/_zm_spawner::derive_damage_refs( point );
|
}
|
||||||
return new_gib_ref;
|
|
||||||
}
|
return refs;
|
||||||
return refs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_blundersplat_target_acid_stun_anim() //checked matches cerberus output
|
_blundersplat_target_acid_stun_anim()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
ground_ent = self getgroundent();
|
|
||||||
if ( isDefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
|
|
||||||
{
|
|
||||||
self linkto( ground_ent );
|
|
||||||
}
|
|
||||||
if ( is_true( self.has_legs ) )
|
|
||||||
{
|
|
||||||
self animscripted( self.origin, self.angles, "zm_blundersplat_stun" );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" );
|
|
||||||
}
|
|
||||||
self maps/mp/animscripts/zm_shared::donotetracks( "blundersplat_stunned_anim" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
ground_ent = self getgroundent();
|
||||||
|
|
||||||
|
if ( isdefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
|
||||||
|
self linkto( ground_ent );
|
||||||
|
|
||||||
|
if ( is_true( self.has_legs ) )
|
||||||
|
self animscripted( self.origin, self.angles, "zm_blundersplat_stun" );
|
||||||
|
else
|
||||||
|
self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" );
|
||||||
|
|
||||||
|
self maps\mp\animscripts\zm_shared::donotetracks( "blundersplat_stunned_anim" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,492 +1,466 @@
|
|||||||
#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_utility;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
|
|
||||||
init()
|
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;
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
while ( i < trigs.size )
|
{
|
||||||
{
|
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 );
|
||||||
}
|
level thread give_claymores_after_rounds();
|
||||||
array_thread( trigs, ::buy_claymores );
|
level.claymores_on_damage = ::satchel_damage;
|
||||||
level thread give_claymores_after_rounds();
|
level.pickup_claymores = ::pickup_claymores;
|
||||||
level.claymores_on_damage = ::satchel_damage;
|
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
|
||||||
level.pickup_claymores = ::pickup_claymores;
|
level.claymore_detectiondot = cos( 70 );
|
||||||
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
|
level.claymore_detectionmindist = 20;
|
||||||
level.claymore_detectiondot = cos( 70 );
|
level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
|
||||||
level.claymore_detectionmindist = 20;
|
|
||||||
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buy_claymores()
|
buy_claymores()
|
||||||
{
|
{
|
||||||
self.zombie_cost = 1000;
|
self.zombie_cost = 1000;
|
||||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
self setcursorhint( "HINT_NOICON" );
|
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;
|
continue;
|
||||||
}
|
|
||||||
while ( who has_powerup_weapon() )
|
if ( who has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
continue;
|
||||||
if ( is_player_valid( who ) )
|
}
|
||||||
{
|
|
||||||
if ( who.score >= self.zombie_cost )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
if ( who.score >= self.zombie_cost )
|
||||||
{
|
{
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||||
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
|
{
|
||||||
who thread claymore_setup();
|
play_sound_at_pos( "purchase", self.origin );
|
||||||
who thread show_claymore_hint( "claymore_purchased" );
|
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
|
||||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
who thread claymore_setup();
|
||||||
if ( isDefined( self.stub ) )
|
who thread show_claymore_hint( "claymore_purchased" );
|
||||||
{
|
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
|
||||||
}
|
if ( isdefined( self.stub ) )
|
||||||
if ( self.claymores_triggered == 0 )
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
{
|
|
||||||
model = getent( self.target, "targetname" );
|
if ( self.claymores_triggered == 0 )
|
||||||
if ( isDefined( model ) )
|
{
|
||||||
{
|
model = getent( self.target, "targetname" );
|
||||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
|
||||||
}
|
if ( isdefined( model ) )
|
||||||
else
|
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
|
||||||
{
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
if ( isDefined( self.clientfieldname ) )
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
{
|
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
self.claymores_triggered = 1;
|
||||||
}
|
|
||||||
}
|
if ( isdefined( self.stub ) )
|
||||||
self.claymores_triggered = 1;
|
self.stub.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 = getentarray( "claymore_purchase", "targetname" );
|
trigs[i] setinvisibletoplayer( who );
|
||||||
i = 0;
|
}
|
||||||
while ( i < trigs.size )
|
else
|
||||||
{
|
who thread show_claymore_hint( "already_purchased" );
|
||||||
trigs[ i ] setinvisibletoplayer( who );
|
}
|
||||||
i++;
|
else
|
||||||
}
|
{
|
||||||
}
|
who play_sound_on_ent( "no_purchase" );
|
||||||
else who thread show_claymore_hint( "already_purchased" );
|
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_unitrigger_update_prompt( player )
|
claymore_unitrigger_update_prompt( player )
|
||||||
{
|
{
|
||||||
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
return 0;
|
self sethintstring( "" );
|
||||||
}
|
self setcursorhint( "HINT_NOICON" );
|
||||||
return 1;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
|
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||||
|
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;
|
{
|
||||||
while ( j < players.size )
|
for ( j = 0; j < players.size; j++ )
|
||||||
{
|
{
|
||||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
while ( i < trigs.size )
|
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||||
{
|
}
|
||||||
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
|
}
|
||||||
i++;
|
|
||||||
}
|
wait 1;
|
||||||
}
|
players = get_players();
|
||||||
j++;
|
}
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
players = get_players();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_watch()
|
claymore_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
self notify( "claymore_watch" );
|
||||||
{
|
self endon( "claymore_watch" );
|
||||||
self waittill( "grenade_fire", claymore, weapname );
|
|
||||||
if ( weapname == "claymore_zm" )
|
while ( true )
|
||||||
{
|
{
|
||||||
claymore.owner = self;
|
self waittill( "grenade_fire", claymore, weapname );
|
||||||
claymore.team = self.team;
|
|
||||||
self notify( "zmb_enable_claymore_prompt" );
|
if ( weapname == "claymore_zm" )
|
||||||
if ( claymore claymore_safe_to_plant() )
|
{
|
||||||
{
|
claymore.owner = self;
|
||||||
if ( isDefined( level.claymore_planted ) )
|
claymore.team = self.team;
|
||||||
{
|
self notify( "zmb_enable_claymore_prompt" );
|
||||||
self thread [[ level.claymore_planted ]]( claymore );
|
|
||||||
}
|
if ( claymore claymore_safe_to_plant() )
|
||||||
claymore thread satchel_damage();
|
{
|
||||||
claymore thread claymore_detonation();
|
if ( isdefined( level.claymore_planted ) )
|
||||||
claymore thread play_claymore_effects();
|
self thread [[ level.claymore_planted ]]( claymore );
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
claymore thread claymore_detonation();
|
||||||
break;
|
claymore thread play_claymore_effects();
|
||||||
}
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
|
||||||
else
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
|
||||||
{
|
}
|
||||||
claymore thread claymore_wait_and_detonate();
|
else
|
||||||
}
|
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" );
|
self setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
self setactionslot( 4, "weapon", "claymore_zm" );
|
self setweaponammostock( "claymore_zm", 2 );
|
||||||
self setweaponammostock( "claymore_zm", 2 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 giveweapon( "claymore_zm" );
|
player thread claymore_watch();
|
||||||
player set_player_placeable_mine( "claymore_zm" );
|
player giveweapon( "claymore_zm" );
|
||||||
player setactionslot( 4, "weapon", "claymore_zm" );
|
player set_player_placeable_mine( "claymore_zm" );
|
||||||
player setweaponammoclip( "claymore_zm", 0 );
|
player setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
player notify( "zmb_enable_claymore_prompt" );
|
player setweaponammoclip( "claymore_zm", 0 );
|
||||||
}
|
player notify( "zmb_enable_claymore_prompt" );
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
{
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
{
|
|
||||||
self destroy_ent();
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
{
|
||||||
return;
|
self destroy_ent();
|
||||||
}
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
}
|
return;
|
||||||
self pick_up();
|
}
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
}
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
self pick_up();
|
||||||
{
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
|
|
||||||
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
|
||||||
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener( trigger, player )
|
pickup_claymores_trigger_listener( trigger, player )
|
||||||
{
|
{
|
||||||
self thread pickup_claymores_trigger_listener_enable( trigger, player );
|
self thread pickup_claymores_trigger_listener_enable( trigger, player );
|
||||||
self thread pickup_claymores_trigger_listener_disable( trigger, player );
|
self thread pickup_claymores_trigger_listener_disable( trigger, player );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener_enable( trigger, player )
|
pickup_claymores_trigger_listener_enable( trigger, player )
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
while ( 1 )
|
self endon( "death" );
|
||||||
{
|
|
||||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
while ( true )
|
||||||
if ( !isDefined( trigger ) )
|
{
|
||||||
{
|
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( trigger ) )
|
||||||
trigger trigger_on();
|
return;
|
||||||
trigger linkto( self );
|
|
||||||
}
|
trigger trigger_on();
|
||||||
|
trigger linkto( self );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener_disable( trigger, player )
|
pickup_claymores_trigger_listener_disable( trigger, player )
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
while ( 1 )
|
self endon( "death" );
|
||||||
{
|
|
||||||
player waittill( "zmb_disable_claymore_prompt" );
|
while ( true )
|
||||||
if ( !isDefined( trigger ) )
|
{
|
||||||
{
|
player waittill( "zmb_disable_claymore_prompt" );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( trigger ) )
|
||||||
trigger unlink();
|
return;
|
||||||
trigger trigger_off();
|
|
||||||
}
|
trigger unlink();
|
||||||
|
trigger trigger_off();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_detonation()
|
claymore_detonation()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self waittill_not_moving();
|
self waittill_not_moving();
|
||||||
detonateradius = 96;
|
detonateradius = 96;
|
||||||
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
|
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
|
||||||
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 );
|
{
|
||||||
if ( isDefined( self.owner ) && ent == self.owner )
|
damagearea waittill( "trigger", ent );
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( self.owner ) && ent == self.owner )
|
||||||
}
|
continue;
|
||||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
|
||||||
{
|
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||||
{
|
continue;
|
||||||
continue;
|
|
||||||
}
|
if ( !ent shouldaffectweaponobject( self ) )
|
||||||
while ( !ent shouldaffectweaponobject( self ) )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||||
}
|
{
|
||||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
self playsound( "wpn_claymore_alert" );
|
||||||
{
|
wait 0.4;
|
||||||
self playsound( "wpn_claymore_alert" );
|
|
||||||
wait 0,4;
|
if ( isdefined( self.owner ) )
|
||||||
if ( isDefined( self.owner ) )
|
self detonate( self.owner );
|
||||||
{
|
else
|
||||||
self detonate( self.owner );
|
self detonate( undefined );
|
||||||
}
|
|
||||||
else
|
return;
|
||||||
{
|
}
|
||||||
self detonate( undefined );
|
}
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
||||||
{
|
{
|
||||||
self setcandamage( 1 );
|
self endon( "death" );
|
||||||
self.health = 100000;
|
self setcandamage( 1 );
|
||||||
self.maxhealth = self.health;
|
self.health = 100000;
|
||||||
attacker = undefined;
|
self.maxhealth = self.health;
|
||||||
while ( 1 )
|
attacker = undefined;
|
||||||
{
|
|
||||||
self waittill( "damage", amount, attacker );
|
while ( true )
|
||||||
if ( !isDefined( self ) )
|
{
|
||||||
{
|
self waittill( "damage", amount, attacker );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( self ) )
|
||||||
self.health = self.maxhealth;
|
return;
|
||||||
while ( !isplayer( attacker ) )
|
|
||||||
{
|
self.health = self.maxhealth;
|
||||||
continue;
|
|
||||||
}
|
if ( !isplayer( attacker ) )
|
||||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||||
}
|
continue;
|
||||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
|
||||||
{
|
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
}
|
break;
|
||||||
if ( level.satchelexplodethisframe )
|
}
|
||||||
{
|
|
||||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
if ( level.satchelexplodethisframe )
|
||||||
}
|
wait( 0.1 + randomfloat( 0.4 ) );
|
||||||
else wait 0,05;
|
else
|
||||||
if ( !isDefined( self ) )
|
wait 0.05;
|
||||||
{
|
|
||||||
return;
|
if ( !isdefined( self ) )
|
||||||
}
|
return;
|
||||||
level.satchelexplodethisframe = 1;
|
|
||||||
thread reset_satchel_explode_this_frame();
|
level.satchelexplodethisframe = 1;
|
||||||
self detonate( attacker );
|
thread reset_satchel_explode_this_frame();
|
||||||
|
self detonate( attacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_satchel_explode_this_frame()
|
reset_satchel_explode_this_frame()
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level.satchelexplodethisframe = 0;
|
level.satchelexplodethisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
play_claymore_effects()
|
play_claymore_effects()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self waittill_not_moving();
|
self waittill_not_moving();
|
||||||
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
|
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
|
||||||
}
|
}
|
||||||
|
|
||||||
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" ) )
|
|
||||||
{
|
|
||||||
players = get_players();
|
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
|
|
||||||
{
|
|
||||||
players[ i ] giveweapon( "claymore_zm" );
|
|
||||||
players[ i ] set_player_placeable_mine( "claymore_zm" );
|
|
||||||
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
|
|
||||||
players[ i ] setweaponammoclip( "claymore_zm", 2 );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
|
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||||
{
|
{
|
||||||
self.x = x;
|
players = get_players();
|
||||||
self.y = y;
|
|
||||||
self.alignx = alignx;
|
|
||||||
self.aligny = aligny;
|
|
||||||
self.fontscale = fontscale;
|
|
||||||
self.alpha = alpha;
|
|
||||||
self.sort = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_client_hintelem()
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
self endon( "disconnect" );
|
{
|
||||||
if ( !isDefined( self.hintelem ) )
|
players[i] giveweapon( "claymore_zm" );
|
||||||
{
|
players[i] set_player_placeable_mine( "claymore_zm" );
|
||||||
self.hintelem = newclienthudelem( self );
|
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
}
|
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||||
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
show_claymore_hint( string )
|
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 );
|
||||||
}
|
|
||||||
self setup_client_hintelem();
|
|
||||||
self.hintelem settext( text );
|
|
||||||
wait 3,5;
|
|
||||||
self.hintelem settext( "" );
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
|||||||
#include common_scripts/utility;
|
|
||||||
#include maps/mp/_utility;
|
|
||||||
|
|
||||||
init()
|
|
||||||
{
|
|
||||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
|
|
||||||
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
|
|
||||||
}
|
|
||||||
|
|
||||||
watch_bolt_detonation( owner )
|
|
||||||
{
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,193 +1,198 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
level thread achievement_highrise_sidequest();
|
level thread achievement_highrise_sidequest();
|
||||||
level thread achievement_mad_without_power();
|
level thread achievement_mad_without_power();
|
||||||
level.achievement_sound_func = ::achievement_sound_func;
|
level.achievement_sound_func = ::achievement_sound_func;
|
||||||
onplayerconnect_callback( ::onplayerconnect );
|
onplayerconnect_callback( ::onplayerconnect );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_sound_func( achievement_name_lower )
|
achievement_sound_func( achievement_name_lower )
|
||||||
{
|
{
|
||||||
self thread do_player_general_vox( "general", "achievement" );
|
self thread do_player_general_vox( "general", "achievement" );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_player_achievement_stats()
|
init_player_achievement_stats()
|
||||||
{
|
{
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
|
||||||
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
|
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect()
|
||||||
{
|
{
|
||||||
self thread achievement_vertigoner();
|
self thread achievement_vertigoner();
|
||||||
self thread achievement_slippery_when_undead();
|
self thread achievement_slippery_when_undead();
|
||||||
self thread achievement_facing_the_dragon();
|
self thread achievement_facing_the_dragon();
|
||||||
self thread achievement_im_my_own_best_friend();
|
self thread achievement_im_my_own_best_friend();
|
||||||
self thread achievement_shafted();
|
self thread achievement_shafted();
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_highrise_sidequest()
|
achievement_highrise_sidequest()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level waittill( "highrise_sidequest_achieved" );
|
|
||||||
|
level waittill( "highrise_sidequest_achieved" );
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
|
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
|
||||||
#/
|
#/
|
||||||
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
|
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_vertigoner()
|
achievement_vertigoner()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.num_zombies_flung = 0;
|
self.num_zombies_flung = 0;
|
||||||
max_zombies_flung = 10;
|
max_zombies_flung = 10;
|
||||||
while ( self.num_zombies_flung < max_zombies_flung )
|
|
||||||
{
|
while ( self.num_zombies_flung < max_zombies_flung )
|
||||||
self waittill( "zombie_flung" );
|
{
|
||||||
wait 0,1;
|
self waittill( "zombie_flung" );
|
||||||
}
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_slippery_when_undead()
|
achievement_slippery_when_undead()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.num_sliquifier_kills = 0;
|
self.num_sliquifier_kills = 0;
|
||||||
max_kills_with_one_shot = 5;
|
max_kills_with_one_shot = 5;
|
||||||
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
|
|
||||||
{
|
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
|
||||||
self waittill( "sliquifier_kill" );
|
{
|
||||||
wait 0,01;
|
self waittill( "sliquifier_kill" );
|
||||||
}
|
|
||||||
|
wait 0.01;
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_facing_the_dragon()
|
achievement_facing_the_dragon()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
v_achievement_location = ( 2209, 693, 3200 );
|
v_achievement_location = ( 2209, 693, 3200 );
|
||||||
v_dragon_position = ( 971, 43, 3800 );
|
v_dragon_position = ( 971, 43, 3800 );
|
||||||
is_touching_distance = 350;
|
is_touching_distance = 350;
|
||||||
round_number_max = 2;
|
round_number_max = 2;
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
if ( level.round_number >= round_number_max )
|
{
|
||||||
{
|
if ( level.round_number >= round_number_max )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
dist = distance( self.origin, v_achievement_location );
|
dist = distance( self.origin, v_achievement_location );
|
||||||
if ( dist <= is_touching_distance )
|
|
||||||
{
|
if ( dist <= is_touching_distance )
|
||||||
v_dir = vectornormalize( v_dragon_position - self.origin );
|
{
|
||||||
v_forward = self getweaponforwarddir();
|
v_dir = vectornormalize( v_dragon_position - self.origin );
|
||||||
dp = vectordot( v_dir, v_forward );
|
v_forward = self getweaponforwarddir();
|
||||||
if ( dp > 0,95 )
|
dp = vectordot( v_dir, v_forward );
|
||||||
{
|
|
||||||
break;
|
if ( dp > 0.95 )
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
wait 0.01;
|
||||||
wait 0,01;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_im_my_own_best_friend()
|
achievement_im_my_own_best_friend()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self waittill( "whos_who_self_revive" );
|
|
||||||
|
self waittill( "whos_who_self_revive" );
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
|
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_mad_without_power()
|
achievement_mad_without_power()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
round_number_max = 10;
|
round_number_max = 10;
|
||||||
while ( level.round_number < round_number_max )
|
|
||||||
{
|
while ( level.round_number < round_number_max )
|
||||||
level waittill( "start_of_round" );
|
{
|
||||||
if ( flag( "power_on" ) )
|
level waittill( "start_of_round" );
|
||||||
{
|
|
||||||
return;
|
if ( flag( "power_on" ) )
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
achievement_shafted()
|
achievement_shafted()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level.perk_bought_func = ::player_buys_perk_machine;
|
level.perk_bought_func = ::player_buys_perk_machine;
|
||||||
max_unique_perk_machines = 6;
|
max_unique_perk_machines = 6;
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill_any( "player_buys_perk", "pap_used" );
|
{
|
||||||
if ( isDefined( self.pap_used ) && self.pap_used == 1 )
|
self waittill_any( "player_buys_perk", "pap_used" );
|
||||||
{
|
|
||||||
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
|
if ( isdefined( self.pap_used ) && self.pap_used == 1 )
|
||||||
{
|
{
|
||||||
break;
|
if ( isdefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
|
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
|
||||||
}
|
}
|
||||||
|
|
||||||
player_buys_perk_machine( perk )
|
player_buys_perk_machine( perk )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.perk_machines_bought ) )
|
if ( !isdefined( self.perk_machines_bought ) )
|
||||||
{
|
self.perk_machines_bought = [];
|
||||||
self.perk_machines_bought = [];
|
|
||||||
}
|
found = 0;
|
||||||
found = 0;
|
|
||||||
i = 0;
|
for ( i = 0; i < self.perk_machines_bought.size; i++ )
|
||||||
while ( i < self.perk_machines_bought.size )
|
{
|
||||||
{
|
if ( perk == self.perk_machines_bought[i] )
|
||||||
if ( perk == self.perk_machines_bought[ i ] )
|
{
|
||||||
{
|
found = 1;
|
||||||
found = 1;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( !found )
|
||||||
i++;
|
{
|
||||||
}
|
self.perk_machines_bought[self.perk_machines_bought.size] = perk;
|
||||||
}
|
self notify( "player_buys_perk" );
|
||||||
if ( !found )
|
}
|
||||||
{
|
|
||||||
self.perk_machines_bought[ self.perk_machines_bought.size ] = perk;
|
|
||||||
self notify( "player_buys_perk" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,75 +1,74 @@
|
|||||||
#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 maps\mp\_ambientpackage;
|
||||||
#include common_scripts/utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_ambientpackage;
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
level thread sndmusicegg();
|
level thread sndmusicegg();
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmusicegg()
|
sndmusicegg()
|
||||||
{
|
{
|
||||||
origins = [];
|
origins = [];
|
||||||
origins[ 0 ] = ( 2724, 300, 1347 );
|
origins[0] = ( 2724, 300, 1347 );
|
||||||
origins[ 1 ] = ( 2639, 1831, 1359 );
|
origins[1] = ( 2639, 1831, 1359 );
|
||||||
origins[ 2 ] = ( 1230, 1846, 3249 );
|
origins[2] = ( 1230, 1846, 3249 );
|
||||||
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( bear_origin )
|
sndmusicegg_wait( bear_origin )
|
||||||
{
|
{
|
||||||
temp_ent = spawn( "script_origin", bear_origin );
|
temp_ent = spawn( "script_origin", bear_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 stoploopsound( 1 );
|
temp_ent waittill( "main_music_egg_hit", player );
|
||||||
player playsound( "zmb_meteor_activate" );
|
|
||||||
level.meteor_counter += 1;
|
temp_ent stoploopsound( 1 );
|
||||||
if ( level.meteor_counter == 3 )
|
player playsound( "zmb_meteor_activate" );
|
||||||
{
|
level.meteor_counter += 1;
|
||||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
|
|
||||||
}
|
if ( level.meteor_counter == 3 )
|
||||||
else
|
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
|
||||||
{
|
else
|
||||||
wait 1,5;
|
{
|
||||||
temp_ent delete();
|
wait 1.5;
|
||||||
}
|
temp_ent delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 )
|
||||||
{
|
{
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
wait 1;
|
wait 1;
|
||||||
ent playsound( alias );
|
ent playsound( alias );
|
||||||
level thread sndeggmusicwait( time );
|
level thread sndeggmusicwait( time );
|
||||||
level waittill_either( "end_game", "sndSongDone" );
|
level waittill_either( "end_game", "sndSongDone" );
|
||||||
ent stopsounds();
|
ent stopsounds();
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
ent delete();
|
ent delete();
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sndeggmusicwait( time )
|
sndeggmusicwait( time )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
wait time;
|
wait( time );
|
||||||
level notify( "sndSongDone" );
|
level notify( "sndSongDone" );
|
||||||
}
|
}
|
||||||
|
@ -1,353 +1,347 @@
|
|||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_highrise_elevators;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zm_transit_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_transit_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
|
#include maps\mp\zm_highrise_elevators;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
|
||||||
init_buildables()
|
init_buildables()
|
||||||
{
|
{
|
||||||
level.buildable_piece_count = 13;
|
level.buildable_piece_count = 13;
|
||||||
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
|
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
|
||||||
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
|
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
|
||||||
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
||||||
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
|
||||||
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
|
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
|
||||||
}
|
}
|
||||||
|
|
||||||
include_buildables()
|
include_buildables()
|
||||||
{
|
{
|
||||||
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 );
|
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 );
|
||||||
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
|
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
|
||||||
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
|
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
|
||||||
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 );
|
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 );
|
||||||
springpad = spawnstruct();
|
springpad = spawnstruct();
|
||||||
springpad.name = "springpad_zm";
|
springpad.name = "springpad_zm";
|
||||||
springpad add_buildable_piece( springpad_door );
|
springpad add_buildable_piece( springpad_door );
|
||||||
springpad add_buildable_piece( springpad_flag );
|
springpad add_buildable_piece( springpad_flag );
|
||||||
springpad add_buildable_piece( springpad_motor );
|
springpad add_buildable_piece( springpad_motor );
|
||||||
springpad add_buildable_piece( springpad_whistle );
|
springpad add_buildable_piece( springpad_whistle );
|
||||||
springpad.triggerthink = ::springpadbuildable;
|
springpad.triggerthink = ::springpadbuildable;
|
||||||
include_buildable( springpad );
|
include_buildable( springpad );
|
||||||
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
|
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
|
||||||
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
|
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
|
||||||
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
|
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
|
||||||
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
|
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
|
||||||
slipgun = spawnstruct();
|
slipgun = spawnstruct();
|
||||||
slipgun.name = "slipgun_zm";
|
slipgun.name = "slipgun_zm";
|
||||||
slipgun add_buildable_piece( slipgun_canister );
|
slipgun add_buildable_piece( slipgun_canister );
|
||||||
slipgun add_buildable_piece( slipgun_cooker );
|
slipgun add_buildable_piece( slipgun_cooker );
|
||||||
slipgun add_buildable_piece( slipgun_foot );
|
slipgun add_buildable_piece( slipgun_foot );
|
||||||
slipgun add_buildable_piece( slipgun_throttle );
|
slipgun add_buildable_piece( slipgun_throttle );
|
||||||
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
|
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
|
||||||
slipgun.triggerthink = ::slipgunbuildable;
|
slipgun.triggerthink = ::slipgunbuildable;
|
||||||
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
|
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
|
||||||
include_buildable( slipgun );
|
include_buildable( slipgun );
|
||||||
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2,4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
|
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2.4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
|
||||||
key_chain.onspawn = ::onspawn_keys;
|
key_chain.onspawn = ::onspawn_keys;
|
||||||
key_chain manage_multiple_pieces( 4 );
|
key_chain manage_multiple_pieces( 4 );
|
||||||
key = spawnstruct();
|
key = spawnstruct();
|
||||||
key.name = "keys_zm";
|
key.name = "keys_zm";
|
||||||
key add_buildable_piece( key_chain );
|
key add_buildable_piece( key_chain );
|
||||||
key.triggerthink = ::keysbuildable;
|
key.triggerthink = ::keysbuildable;
|
||||||
key.onuseplantobject = ::onuseplantobject_escapepodkey;
|
key.onuseplantobject = ::onuseplantobject_escapepodkey;
|
||||||
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
|
key.buildablepieces[0].onspawn = ::onspawn_keys;
|
||||||
include_buildable( key );
|
include_buildable( key );
|
||||||
ekey = spawnstruct();
|
ekey = spawnstruct();
|
||||||
ekey.name = "ekeys_zm";
|
ekey.name = "ekeys_zm";
|
||||||
ekey add_buildable_piece( key_chain );
|
ekey add_buildable_piece( key_chain );
|
||||||
ekey.triggerthink = ::ekeysbuildable;
|
ekey.triggerthink = ::ekeysbuildable;
|
||||||
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
|
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
|
||||||
ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
|
ekey.buildablepieces[0].onspawn = ::onspawn_keys;
|
||||||
include_buildable( ekey );
|
include_buildable( ekey );
|
||||||
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
|
|
||||||
{
|
if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
|
||||||
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 );
|
{
|
||||||
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 128, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
|
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 );
|
||||||
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 );
|
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 32, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
|
||||||
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 );
|
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 );
|
||||||
sqcommon = spawnstruct();
|
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 );
|
||||||
sqcommon.name = "sq_common";
|
sqcommon = spawnstruct();
|
||||||
sqcommon add_buildable_piece( sq_common_electricbox );
|
sqcommon.name = "sq_common";
|
||||||
sqcommon add_buildable_piece( sq_common_meteor );
|
sqcommon add_buildable_piece( sq_common_electricbox );
|
||||||
sqcommon add_buildable_piece( sq_common_scaffolding );
|
sqcommon add_buildable_piece( sq_common_meteor );
|
||||||
sqcommon add_buildable_piece( sq_common_transceiver );
|
sqcommon add_buildable_piece( sq_common_scaffolding );
|
||||||
sqcommon.triggerthink = ::sqcommonbuildable;
|
sqcommon add_buildable_piece( sq_common_transceiver );
|
||||||
include_buildable( sqcommon );
|
sqcommon.triggerthink = ::sqcommonbuildable;
|
||||||
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
|
include_buildable( sqcommon );
|
||||||
}
|
maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
springpadbuildable()
|
springpadbuildable()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
|
maps\mp\zombies\_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
slipgunbuildable()
|
slipgunbuildable()
|
||||||
{
|
{
|
||||||
level thread wait_for_slipgun();
|
level thread wait_for_slipgun();
|
||||||
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
|
|
||||||
{
|
if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
|
||||||
persist = 2;
|
persist = 2;
|
||||||
}
|
else
|
||||||
else
|
persist = 1;
|
||||||
{
|
|
||||||
persist = 1;
|
maps\mp\zombies\_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
|
||||||
}
|
|
||||||
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
keysbuildable()
|
keysbuildable()
|
||||||
{
|
{
|
||||||
pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
|
pod_key = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
|
||||||
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
|
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
ekeysbuildable()
|
ekeysbuildable()
|
||||||
{
|
{
|
||||||
elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
|
elevator_keys = maps\mp\zombies\_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
|
||||||
_a143 = elevator_keys;
|
|
||||||
_k143 = getFirstArrayKey( _a143 );
|
foreach ( stub in elevator_keys )
|
||||||
while ( isDefined( _k143 ) )
|
{
|
||||||
{
|
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
||||||
stub = _a143[ _k143 ];
|
stub.buildablezone.stat_name = "keys_zm";
|
||||||
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
}
|
||||||
stub.buildablezone.stat_name = "keys_zm";
|
|
||||||
_k143 = getNextArrayKey( _a143, _k143 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ondrop_common( player )
|
ondrop_common( player )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
println( "ZM >> Common part callback onDrop()" );
|
println( "ZM >> Common part callback onDrop()" );
|
||||||
#/
|
#/
|
||||||
self droponelevator( player );
|
self droponelevator( player );
|
||||||
self.piece_owner = undefined;
|
self.piece_owner = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
onpickup_common( player )
|
onpickup_common( player )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
println( "ZM >> Common part callback onPickup()" );
|
println( "ZM >> Common part callback onPickup()" );
|
||||||
#/
|
#/
|
||||||
player playsound( "zmb_buildable_pickup" );
|
player playsound( "zmb_buildable_pickup" );
|
||||||
self pickupfromelevator();
|
self pickupfromelevator();
|
||||||
self.piece_owner = player;
|
self.piece_owner = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
sqcommonbuildable()
|
sqcommonbuildable()
|
||||||
{
|
{
|
||||||
level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
level.sq_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onbuyweapon_slipgun( player )
|
onbuyweapon_slipgun( player )
|
||||||
{
|
{
|
||||||
player givestartammo( self.stub.weaponname );
|
player givestartammo( self.stub.weaponname );
|
||||||
player switchtoweapon( self.stub.weaponname );
|
player switchtoweapon( self.stub.weaponname );
|
||||||
level notify( "slipgun_bought" );
|
level notify( "slipgun_bought", player );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_slipgun()
|
wait_for_slipgun()
|
||||||
{
|
{
|
||||||
level.zombie_include_weapons[ "slipgun_zm" ] = 0;
|
level.zombie_include_weapons["slipgun_zm"] = 0;
|
||||||
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
|
|
||||||
{
|
if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
|
||||||
level waittill( "slipgun_bought", player );
|
{
|
||||||
level.zombie_include_weapons[ "slipgun_zm" ] = 1;
|
level waittill( "slipgun_bought", player );
|
||||||
level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1;
|
|
||||||
}
|
level.zombie_include_weapons["slipgun_zm"] = 1;
|
||||||
|
level.zombie_weapons["slipgun_zm"].is_in_box = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
keyscreateglint()
|
keyscreateglint()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.model.glint_fx ) )
|
if ( !isdefined( self.model.glint_fx ) )
|
||||||
{
|
playfxontag( level._effect["elevator_glint"], self.model, "tag_origin" );
|
||||||
playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onspawn_keys()
|
onspawn_keys()
|
||||||
{
|
{
|
||||||
self keyscreateglint();
|
self keyscreateglint();
|
||||||
}
|
}
|
||||||
|
|
||||||
ondrop_keys( player )
|
ondrop_keys( player )
|
||||||
{
|
{
|
||||||
self keyscreateglint();
|
self keyscreateglint();
|
||||||
}
|
}
|
||||||
|
|
||||||
onpickup_keys( player )
|
onpickup_keys( player )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
escape_pod_key_prompt( player )
|
escape_pod_key_prompt( player )
|
||||||
{
|
{
|
||||||
if ( !flag( "escape_pod_needs_reset" ) )
|
if ( !flag( "escape_pod_needs_reset" ) )
|
||||||
{
|
{
|
||||||
self.stub.hint_string = "";
|
self.stub.hint_string = "";
|
||||||
self sethintstring( self.stub.hint_string );
|
self sethintstring( self.stub.hint_string );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return self buildabletrigger_update_prompt( player );
|
|
||||||
|
return self buildabletrigger_update_prompt( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
onuseplantobject_escapepodkey( player )
|
onuseplantobject_escapepodkey( player )
|
||||||
{
|
{
|
||||||
level notify( "reset_escape_pod" );
|
level notify( "reset_escape_pod" );
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_elevator_prompt( player, trig )
|
watch_elevator_prompt( player, trig )
|
||||||
{
|
{
|
||||||
player notify( "watch_elevator_prompt" );
|
player notify( "watch_elevator_prompt" );
|
||||||
player endon( "watch_elevator_prompt" );
|
player endon( "watch_elevator_prompt" );
|
||||||
trig endon( "kill_trigger" );
|
trig endon( "kill_trigger" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
trig.stub.elevator waittill( "floor_changed" );
|
{
|
||||||
if ( isDefined( self.stub.elevator ) )
|
trig.stub.elevator waittill( "floor_changed" );
|
||||||
{
|
|
||||||
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
if ( isdefined( self.stub.elevator ) )
|
||||||
{
|
{
|
||||||
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player );
|
if ( trig.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
||||||
return;
|
{
|
||||||
}
|
thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player );
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
elevator_key_prompt( player )
|
elevator_key_prompt( player )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.stub.elevator ) )
|
if ( !isdefined( self.stub.elevator ) )
|
||||||
{
|
{
|
||||||
elevatorname = self.stub.script_noteworthy;
|
elevatorname = self.stub.script_noteworthy;
|
||||||
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
|
|
||||||
{
|
if ( isdefined( elevatorname ) && isdefined( self.stub.script_parameters ) )
|
||||||
elevator = level.elevators[ elevatorname ];
|
{
|
||||||
floor = int( self.stub.script_parameters );
|
elevator = level.elevators[elevatorname];
|
||||||
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
|
floor = int( self.stub.script_parameters );
|
||||||
self.stub.elevator = elevator;
|
flevel = elevator maps\mp\zm_highrise_elevators::elevator_level_for_floor( floor );
|
||||||
self.stub.floor = flevel;
|
self.stub.elevator = elevator;
|
||||||
}
|
self.stub.floor = flevel;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
if ( !isDefined( self.stub.elevator ) )
|
if ( !isdefined( self.stub.elevator ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.stub.script_noteworthy ) )
|
if ( isdefined( self.stub.script_noteworthy ) )
|
||||||
{
|
error( "Cannot locate elevator " + self.stub.script_noteworthy );
|
||||||
error( "Cannot locate elevator " + self.stub.script_noteworthy );
|
else
|
||||||
}
|
error( "Cannot locate elevator " );
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
error( "Cannot locate elevator " );
|
{
|
||||||
}
|
color = vectorscale( ( 0, 0, 1 ), 0.7 );
|
||||||
}
|
stop = self.stub.floor;
|
||||||
else
|
floor = self.stub.elevator.floors["" + stop].script_location;
|
||||||
{
|
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
|
||||||
color = vectorScale( ( 0, 0, 1 ), 0,7 );
|
|
||||||
stop = self.stub.floor;
|
if ( getdvarint( _hash_B67910B4 ) )
|
||||||
floor = self.stub.elevator.floors[ "" + stop ].script_location;
|
print3d( self.stub.origin, text, color, 1, 0.5, 300 );
|
||||||
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
|
}
|
||||||
if ( getDvarInt( #"B67910B4" ) )
|
|
||||||
{
|
|
||||||
print3d( self.stub.origin, text, color, 1, 0,5, 300 );
|
|
||||||
#/
|
#/
|
||||||
}
|
if ( isdefined( self.stub.elevator ) )
|
||||||
}
|
{
|
||||||
if ( isDefined( self.stub.elevator ) )
|
if ( self.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
|
||||||
{
|
{
|
||||||
if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
|
self.stub.hint_string = "";
|
||||||
{
|
self sethintstring( self.stub.hint_string );
|
||||||
self.stub.hint_string = "";
|
return 0;
|
||||||
self sethintstring( self.stub.hint_string );
|
}
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
}
|
if ( !flag( "power_on" ) )
|
||||||
if ( !flag( "power_on" ) )
|
{
|
||||||
{
|
self.stub.hint_string = "";
|
||||||
self.stub.hint_string = "";
|
self sethintstring( self.stub.hint_string );
|
||||||
self sethintstring( self.stub.hint_string );
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
can_use = self buildabletrigger_update_prompt( player );
|
can_use = self buildabletrigger_update_prompt( player );
|
||||||
if ( can_use )
|
|
||||||
{
|
if ( can_use )
|
||||||
thread watch_elevator_prompt( player, self );
|
thread watch_elevator_prompt( player, self );
|
||||||
}
|
|
||||||
return can_use;
|
return can_use;
|
||||||
}
|
}
|
||||||
|
|
||||||
onuseplantobject_elevatorkey( player )
|
onuseplantobject_elevatorkey( player )
|
||||||
{
|
{
|
||||||
elevatorname = self.script_noteworthy;
|
elevatorname = self.script_noteworthy;
|
||||||
if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) )
|
|
||||||
{
|
if ( isdefined( elevatorname ) && isdefined( self.script_parameters ) )
|
||||||
floor = int( self.script_parameters );
|
{
|
||||||
elevator = level.elevators[ elevatorname ];
|
floor = int( self.script_parameters );
|
||||||
if ( isDefined( elevator ) )
|
elevator = level.elevators[elevatorname];
|
||||||
{
|
|
||||||
elevator.body.force_starting_floor = floor;
|
if ( isdefined( elevator ) )
|
||||||
elevator.body notify( "forcego" );
|
{
|
||||||
}
|
elevator.body.force_starting_floor = floor;
|
||||||
}
|
elevator.body notify( "forcego" );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
droponelevator( player )
|
droponelevator( player )
|
||||||
{
|
{
|
||||||
if ( isDefined( player ) && isDefined( player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) && player maps/mp/zm_highrise_elevators::object_is_on_elevator() )
|
if ( isdefined( player ) && ( isdefined( player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) && player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) )
|
||||||
{
|
{
|
||||||
self.model linkto( player.elevator_parent );
|
self.model linkto( player.elevator_parent );
|
||||||
self.linked_to_elevator = 1;
|
self.linked_to_elevator = 1;
|
||||||
self.unitrigger.link_parent = player.elevator_parent;
|
self.unitrigger.link_parent = player.elevator_parent;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
self.unitrigger.link_parent = undefined;
|
||||||
self.unitrigger.link_parent = undefined;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pickupfromelevator()
|
pickupfromelevator()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator )
|
if ( isdefined( self.linked_to_elevator ) && self.linked_to_elevator )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.model ) )
|
if ( isdefined( self.model ) )
|
||||||
{
|
self.model unlink();
|
||||||
self.model unlink();
|
|
||||||
}
|
self.linked_to_elevator = undefined;
|
||||||
self.linked_to_elevator = undefined;
|
}
|
||||||
}
|
|
||||||
if ( isDefined( self.unitrigger ) )
|
if ( isdefined( self.unitrigger ) )
|
||||||
{
|
self.unitrigger.link_parent = undefined;
|
||||||
self.unitrigger.link_parent = undefined;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onuseplantobject_slipgun( player )
|
onuseplantobject_slipgun( player )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
|
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
|
||||||
#/
|
#/
|
||||||
buildable = self.buildablezone;
|
buildable = self.buildablezone;
|
||||||
first_part = "TAG_COOKER";
|
first_part = "TAG_COOKER";
|
||||||
second_part = "TAG_BASE";
|
second_part = "TAG_BASE";
|
||||||
i = 0;
|
|
||||||
while ( i < buildable.pieces.size )
|
for ( i = 0; i < buildable.pieces.size; i++ )
|
||||||
{
|
{
|
||||||
if ( buildable.pieces[ i ].part_name == first_part )
|
if ( buildable.pieces[i].part_name == first_part )
|
||||||
{
|
{
|
||||||
if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && player.current_buildable_piece.part_name == first_part )
|
if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || player player_get_buildable_piece().part_name == first_part )
|
||||||
{
|
{
|
||||||
buildable.stub.model showpart( second_part );
|
buildable.stub.model showpart( second_part );
|
||||||
i++;
|
continue;
|
||||||
continue;
|
}
|
||||||
}
|
|
||||||
else
|
buildable.stub.model hidepart( second_part );
|
||||||
{
|
}
|
||||||
buildable.stub.model hidepart( second_part );
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,415 +1,390 @@
|
|||||||
#include maps/mp/zombies/_zm_ai_basic;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
// 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_spawner;
|
||||||
|
#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 = 1000;
|
level.zombie_tracking_dist = 1000;
|
||||||
}
|
|
||||||
if ( !isDefined( level.zombie_tracking_high ) )
|
if ( !isdefined( level.zombie_tracking_high ) )
|
||||||
{
|
level.zombie_tracking_high = 500;
|
||||||
level.zombie_tracking_high = 500;
|
|
||||||
}
|
if ( !isdefined( level.zombie_tracking_wait ) )
|
||||||
if ( !isDefined( level.zombie_tracking_wait ) )
|
level.zombie_tracking_wait = 10;
|
||||||
{
|
|
||||||
level.zombie_tracking_wait = 10;
|
building_trigs = getentarray( "zombie_fell_off", "targetname" );
|
||||||
}
|
|
||||||
building_trigs = getentarray( "zombie_fell_off", "targetname" );
|
if ( isdefined( building_trigs ) )
|
||||||
if ( isDefined( building_trigs ) )
|
array_thread( building_trigs, ::zombies_off_building );
|
||||||
{
|
|
||||||
array_thread( building_trigs, ::zombies_off_building );
|
level.distance_tracker_aggressive_distance = 500;
|
||||||
}
|
level.distance_tracker_aggressive_height = 200;
|
||||||
level.distance_tracker_aggressive_distance = 500;
|
|
||||||
level.distance_tracker_aggressive_height = 200;
|
while ( true )
|
||||||
for ( ;; )
|
{
|
||||||
{
|
zombies = get_round_enemy_array();
|
||||||
while ( 1 )
|
|
||||||
{
|
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||||
zombies = get_round_enemy_array();
|
{
|
||||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
wait( level.zombie_tracking_wait );
|
||||||
{
|
continue;
|
||||||
wait level.zombie_tracking_wait;
|
}
|
||||||
}
|
else
|
||||||
}
|
{
|
||||||
else i = 0;
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
while ( i < zombies.size )
|
{
|
||||||
{
|
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
|
||||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
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 ( !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;
|
|
||||||
}
|
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();
|
|
||||||
i = 0;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
{
|
||||||
{
|
if ( players[i].sessionstate == "spectator" )
|
||||||
if ( players[ i ].sessionstate == "spectator" )
|
continue;
|
||||||
{
|
|
||||||
i++;
|
if ( isdefined( level.only_track_targeted_players ) )
|
||||||
continue;
|
{
|
||||||
}
|
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||||
else if ( isDefined( level.only_track_targeted_players ) )
|
continue;
|
||||||
{
|
}
|
||||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
|
|
||||||
{
|
can_be_seen = self player_can_see_me( players[i] );
|
||||||
i++;
|
|
||||||
continue;
|
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||||
}
|
self.inview++;
|
||||||
}
|
|
||||||
else
|
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||||
{
|
self.player_close++;
|
||||||
can_be_seen = self player_can_see_me( players[ i ] );
|
}
|
||||||
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
|
|
||||||
{
|
wait 0.1;
|
||||||
self.inview++;
|
|
||||||
}
|
if ( self.inview == 0 && self.player_close == 0 )
|
||||||
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
|
{
|
||||||
{
|
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||||
self.player_close++;
|
return;
|
||||||
}
|
|
||||||
}
|
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||||
i++;
|
return;
|
||||||
}
|
|
||||||
wait 0,1;
|
zombies = getaiarray( "axis" );
|
||||||
if ( self.inview == 0 && self.player_close == 0 )
|
|
||||||
{
|
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
|
||||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
{
|
||||||
{
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
return;
|
{
|
||||||
}
|
level.zombie_total++;
|
||||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
|
||||||
{
|
if ( self.health < level.zombie_health )
|
||||||
return;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
}
|
}
|
||||||
zombies = getaiarray( "axis" );
|
}
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
|
|
||||||
{
|
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
self notify( "zombie_delete" );
|
||||||
{
|
self delete();
|
||||||
level.zombie_total++;
|
recalc_zombie_array();
|
||||||
if ( self.health < level.zombie_health )
|
}
|
||||||
{
|
|
||||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
|
||||||
self notify( "zombie_delete" );
|
|
||||||
self delete();
|
|
||||||
recalc_zombie_array();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
{
|
else
|
||||||
anglefromcenter = 180;
|
anglefromcenter = acos( forwarddotbanzai );
|
||||||
}
|
|
||||||
else
|
playerfov = getdvarfloat( "cg_fov" );
|
||||||
{
|
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||||
anglefromcenter = acos( forwarddotbanzai );
|
|
||||||
}
|
if ( banzaivsplayerfovbuffer <= 0 )
|
||||||
playerfov = getDvarFloat( "cg_fov" );
|
banzaivsplayerfovbuffer = 0.2;
|
||||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
|
||||||
if ( banzaivsplayerfovbuffer <= 0 )
|
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||||
{
|
return playercanseeme;
|
||||||
banzaivsplayerfovbuffer = 0,2;
|
|
||||||
}
|
|
||||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
|
||||||
return playercanseeme;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 ( self maymovetopoint( players[ i ].origin, 1 ) )
|
if ( 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 ( is_player_in_inverted_elevator_shaft() )
|
if ( is_player_in_inverted_elevator_shaft() )
|
||||||
{
|
{
|
||||||
n_delete_distance = level.distance_tracker_aggressive_distance;
|
n_delete_distance = level.distance_tracker_aggressive_distance;
|
||||||
n_delete_height = level.distance_tracker_aggressive_height;
|
n_delete_height = level.distance_tracker_aggressive_height;
|
||||||
}
|
}
|
||||||
if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area )
|
|
||||||
{
|
if ( !isdefined( found_player ) && ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) )
|
||||||
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
|
{
|
||||||
self.zombie_path_bad = 1;
|
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
|
||||||
self escaped_zombies_cleanup();
|
self.zombie_path_bad = 1;
|
||||||
}
|
self escaped_zombies_cleanup();
|
||||||
wait 0,1;
|
}
|
||||||
}
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is_player_in_inverted_elevator_shaft()
|
is_player_in_inverted_elevator_shaft()
|
||||||
{
|
{
|
||||||
b_player_is_in_elevator_shaft = 0;
|
b_player_is_in_elevator_shaft = 0;
|
||||||
a_occupied_zones = get_occupied_zones();
|
a_occupied_zones = get_occupied_zones();
|
||||||
i = 0;
|
|
||||||
while ( i < a_occupied_zones.size )
|
for ( i = 0; i < a_occupied_zones.size; i++ )
|
||||||
{
|
{
|
||||||
if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) )
|
if ( issubstr( a_occupied_zones[i], "orange_elevator_shaft" ) )
|
||||||
{
|
b_player_is_in_elevator_shaft = 1;
|
||||||
b_player_is_in_elevator_shaft = 1;
|
}
|
||||||
}
|
|
||||||
i++;
|
return b_player_is_in_elevator_shaft;
|
||||||
}
|
|
||||||
return b_player_is_in_elevator_shaft;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_occupied_zones()
|
get_occupied_zones()
|
||||||
{
|
{
|
||||||
a_occupied_zones = [];
|
a_occupied_zones = [];
|
||||||
i = 0;
|
|
||||||
while ( i < level.active_zone_names.size )
|
for ( i = 0; i < level.active_zone_names.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.zones[ level.active_zone_names[ i ] ].is_occupied )
|
if ( level.zones[level.active_zone_names[i]].is_occupied )
|
||||||
{
|
a_occupied_zones[a_occupied_zones.size] = level.active_zone_names[i];
|
||||||
a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ];
|
}
|
||||||
}
|
|
||||||
i++;
|
return a_occupied_zones;
|
||||||
}
|
|
||||||
return a_occupied_zones;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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_dog_locations = get_dog_locations_in_zones( a_zones );
|
a_zones = get_adjacencies_to_zone( str_zone );
|
||||||
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
||||||
}
|
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
||||||
return s_farthest;
|
}
|
||||||
|
|
||||||
|
return s_farthest;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_current_zone()
|
get_current_zone()
|
||||||
{
|
{
|
||||||
str_zone = undefined;
|
str_zone = undefined;
|
||||||
a_zones = getarraykeys( level.zones );
|
a_zones = getarraykeys( level.zones );
|
||||||
_a310 = a_zones;
|
|
||||||
_k310 = getFirstArrayKey( _a310 );
|
foreach ( zone in a_zones )
|
||||||
while ( isDefined( _k310 ) )
|
{
|
||||||
{
|
for ( i = 0; i < level.zones[zone].volumes.size; i++ )
|
||||||
zone = _a310[ _k310 ];
|
{
|
||||||
i = 0;
|
if ( self istouching( level.zones[zone].volumes[i] ) )
|
||||||
while ( i < level.zones[ zone ].volumes.size )
|
str_zone = zone;
|
||||||
{
|
}
|
||||||
if ( self istouching( level.zones[ zone ].volumes[ i ] ) )
|
}
|
||||||
{
|
|
||||||
str_zone = zone;
|
return str_zone;
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
_k310 = getNextArrayKey( _a310, _k310 );
|
|
||||||
}
|
|
||||||
return str_zone;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_adjacencies_to_zone( str_zone )
|
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 = [];
|
||||||
_a345 = a_zones;
|
|
||||||
_k345 = getFirstArrayKey( _a345 );
|
foreach ( zone in a_zones )
|
||||||
while ( isDefined( _k345 ) )
|
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
||||||
{
|
|
||||||
zone = _a345[ _k345 ];
|
return a_dog_locations;
|
||||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
|
|
||||||
_k345 = getNextArrayKey( _a345, _k345 );
|
|
||||||
}
|
|
||||||
return a_dog_locations;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_farthest_dog_location( a_dog_locations )
|
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_farthest_index = i;
|
n_distance_farthest = n_distance_sq;
|
||||||
}
|
n_farthest_index = i;
|
||||||
i++;
|
}
|
||||||
}
|
}
|
||||||
return a_dog_locations[ n_farthest_index ];
|
|
||||||
|
return a_dog_locations[n_farthest_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
escaped_zombies_cleanup()
|
escaped_zombies_cleanup()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
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 thread check_player_available();
|
self setgoalpos( s_escape.origin );
|
||||||
self waittill_any( "goal", "reaquire_player" );
|
self thread check_player_available();
|
||||||
}
|
self waittill_any( "goal", "reaquire_player" );
|
||||||
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
}
|
||||||
wait 0,1;
|
|
||||||
if ( !self.zombie_path_bad )
|
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
||||||
{
|
wait 0.1;
|
||||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
|
||||||
}
|
if ( !self.zombie_path_bad )
|
||||||
|
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
|
||||||
}
|
}
|
||||||
|
|
||||||
check_player_available()
|
check_player_available()
|
||||||
{
|
{
|
||||||
self notify( "_check_player_available" );
|
self notify( "_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" );
|
||||||
self endon( "reaquire_player" );
|
self endon( "reaquire_player" );
|
||||||
while ( self.zombie_path_bad )
|
|
||||||
{
|
while ( self.zombie_path_bad )
|
||||||
if ( self can_zombie_see_any_player() )
|
{
|
||||||
{
|
if ( self can_zombie_see_any_player() )
|
||||||
self notify( "reaquire_player" );
|
self notify( "reaquire_player" );
|
||||||
}
|
|
||||||
wait randomfloatrange( 0,2, 0,5 );
|
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 ( 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 ( self maymovetopoint( a_players[ i ].origin, 1 ) )
|
if ( self maymovetopoint( a_players[i].origin, 1 ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
}
|
||||||
}
|
|
||||||
i++;
|
return false;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zombies_off_building()
|
zombies_off_building()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
|
|
||||||
{
|
if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
|
||||||
zombies = getaiarray( "axis" );
|
{
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth )
|
zombies = getaiarray( "axis" );
|
||||||
{
|
|
||||||
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper )
|
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && who.health >= who.maxhealth )
|
||||||
{
|
{
|
||||||
level.zombie_total++;
|
if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
|
||||||
if ( who.health < level.zombie_health )
|
{
|
||||||
{
|
level.zombie_total++;
|
||||||
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health;
|
|
||||||
}
|
if ( who.health < level.zombie_health )
|
||||||
}
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
|
||||||
}
|
}
|
||||||
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
}
|
||||||
who notify( "zombie_delete" );
|
|
||||||
who dodamage( who.health + 666, who.origin, who );
|
who maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
recalc_zombie_array();
|
who notify( "zombie_delete" );
|
||||||
}
|
who dodamage( who.health + 666, who.origin, who );
|
||||||
wait 0,1;
|
recalc_zombie_array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,189 +1,204 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#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_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
|
||||||
main_start() //checked matches cerberus output
|
main_start()
|
||||||
{
|
{
|
||||||
level thread spawned_collision_ffotd();
|
level thread spawned_collision_ffotd();
|
||||||
level thread eject_player_trigger_init();
|
level thread eject_player_trigger_init();
|
||||||
level thread change_bad_spawner();
|
level thread change_bad_spawner();
|
||||||
}
|
}
|
||||||
|
|
||||||
main_end() //checked matches cerberus output
|
main_end()
|
||||||
{
|
{
|
||||||
level thread eject_player_trigger();
|
level thread eject_player_trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned_collision_ffotd() //checked changed to match cerberus output
|
spawned_collision_ffotd()
|
||||||
{
|
{
|
||||||
precachemodel( "collision_wall_32x32x10_standard" );
|
precachemodel( "collision_wall_32x32x10_standard" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
if ( !is_true( level.optimise_for_splitscreen ) )
|
|
||||||
{
|
if ( !is_true( level.optimise_for_splitscreen ) )
|
||||||
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
|
{
|
||||||
collision1 setmodel( "collision_wall_32x32x10_standard" );
|
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
|
||||||
collision1.angles = vectorScale( ( 0, 1, 0 ), 330 );
|
collision1 setmodel( "collision_wall_32x32x10_standard" );
|
||||||
collision1 ghost();
|
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
|
collision1 ghost();
|
||||||
collision2 setmodel( "collision_wall_32x32x10_standard" );
|
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
|
||||||
collision2.angles = vectorScale( ( 0, 1, 0 ), 330 );
|
collision2 setmodel( "collision_wall_32x32x10_standard" );
|
||||||
collision2 ghost();
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
collision2 ghost();
|
||||||
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
||||||
collision3.angles = ( 0, 0, 0 );
|
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision3 ghost();
|
collision3.angles = ( 0, 0, 0 );
|
||||||
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
|
collision3 ghost();
|
||||||
collision3b setmodel( "collision_wall_256x256x10_standard" );
|
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
|
||||||
collision3b.angles = ( 0, 0, 0 );
|
collision3b setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision3b ghost();
|
collision3b.angles = ( 0, 0, 0 );
|
||||||
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
|
collision3b ghost();
|
||||||
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
|
||||||
collision3.angles = ( 0, 0, 0 );
|
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision3 ghost();
|
collision3.angles = ( 0, 0, 0 );
|
||||||
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
collision3 ghost();
|
||||||
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
||||||
collision4.angles = vectorScale( ( 0, 1, 0 ), 270 );
|
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision4 ghost();
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
|
collision4 ghost();
|
||||||
collision5 setmodel( "collision_wall_256x256x10_standard" );
|
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
|
||||||
collision5.angles = vectorScale( ( 1, 0, 0 ), 347.6 );
|
collision5 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision5 ghost();
|
collision5.angles = vectorscale( ( 1, 0, 0 ), 347.6 );
|
||||||
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
collision5 ghost();
|
||||||
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
||||||
collision6b.angles = ( 0, 270, 12 );
|
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision6b ghost();
|
collision6b.angles = ( 0, 270, 12 );
|
||||||
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
|
collision6b ghost();
|
||||||
collision6c setmodel( "collision_wall_256x256x10_standard" );
|
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
|
||||||
collision6c.angles = ( 0, 270, 12 );
|
collision6c setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision6c ghost();
|
collision6c.angles = ( 0, 270, 12 );
|
||||||
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
|
collision6c ghost();
|
||||||
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
|
||||||
collision7.angles = ( 0, 9.79996, -90 );
|
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision7 ghost();
|
collision7.angles = ( 0, 9.79996, -90 );
|
||||||
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
|
collision7 ghost();
|
||||||
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
|
||||||
collision7.angles = ( 0, 270, 12 );
|
collision7 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision7 ghost();
|
collision7.angles = ( 0, 270, 12 );
|
||||||
}
|
collision7 ghost();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eject_player_trigger_init() //checked matches cerberus output
|
eject_player_trigger_init()
|
||||||
{
|
{
|
||||||
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 );
|
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 );
|
||||||
trig1.angles = ( 0, 0, 0 );
|
trig1.angles = ( 0, 0, 0 );
|
||||||
trig1.targetname = "eject_player_pos";
|
trig1.targetname = "eject_player_pos";
|
||||||
trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) );
|
trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) );
|
||||||
trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 );
|
trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 );
|
||||||
trig2.angles = ( 0, 0, 0 );
|
trig2.angles = ( 0, 0, 0 );
|
||||||
trig2.targetname = "eject_player_pos";
|
trig2.targetname = "eject_player_pos";
|
||||||
trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) );
|
trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) );
|
||||||
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 );
|
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 );
|
||||||
trig3.angles = ( 0, 0, 0 );
|
trig3.angles = ( 0, 0, 0 );
|
||||||
trig3.targetname = "eject_player_pos";
|
trig3.targetname = "eject_player_pos";
|
||||||
trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) );
|
trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
eject_player_trigger() //checked matches cerberus output
|
eject_player_trigger()
|
||||||
{
|
{
|
||||||
trigs = getentarray( "eject_player_pos", "targetname" );
|
trigs = getentarray( "eject_player_pos", "targetname" );
|
||||||
array_thread( trigs, ::player_eject_watcher );
|
array_thread( trigs, ::player_eject_watcher );
|
||||||
}
|
}
|
||||||
|
|
||||||
player_eject_watcher() //checked matches cerberus output
|
player_eject_watcher()
|
||||||
{
|
{
|
||||||
time = 0;
|
time = 0;
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "trigger", who );
|
{
|
||||||
if ( is_player_valid( who ) )
|
self waittill( "trigger", who );
|
||||||
{
|
|
||||||
while ( who istouching( self ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
time++;
|
while ( who istouching( self ) )
|
||||||
if ( time >= 6 )
|
{
|
||||||
{
|
time++;
|
||||||
if ( isDefined( self.point ) )
|
|
||||||
{
|
if ( time >= 6 )
|
||||||
if ( !positionwouldtelefrag( self.point.origin ) )
|
{
|
||||||
{
|
if ( isdefined( self.point ) )
|
||||||
who setorigin( self.point.origin );
|
{
|
||||||
who playlocalsound( level.zmb_laugh_alias );
|
if ( !positionwouldtelefrag( self.point.origin ) )
|
||||||
who playrumbleonentity( "damage_light" );
|
{
|
||||||
earthquake( 0.5, 0.5, who.origin, 100 );
|
who setorigin( self.point.origin );
|
||||||
who thread ejected_overrun( self );
|
who playlocalsound( level.zmb_laugh_alias );
|
||||||
}
|
who playrumbleonentity( "damage_light" );
|
||||||
}
|
earthquake( 0.5, 0.5, who.origin, 100 );
|
||||||
}
|
who thread ejected_overrun( self );
|
||||||
wait 1;
|
}
|
||||||
}
|
}
|
||||||
time = 0;
|
}
|
||||||
}
|
|
||||||
wait 0.1;
|
wait 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ejected_overrun( trig ) //checked changed to match cerberus output
|
ejected_overrun( trig )
|
||||||
{
|
{
|
||||||
if ( !isDefined( trig.ejected ) )
|
if ( !isdefined( trig.ejected ) )
|
||||||
{
|
trig.ejected = 1;
|
||||||
trig.ejected = 1;
|
else
|
||||||
}
|
{
|
||||||
else
|
trig.ejected++;
|
||||||
{
|
|
||||||
trig.ejected++;
|
if ( trig.ejected >= 3 )
|
||||||
if ( trig.ejected >= 3 )
|
{
|
||||||
{
|
primaries = self getweaponslistprimaries();
|
||||||
primaries = self getweaponslistprimaries();
|
|
||||||
foreach ( weapon in primaries )
|
foreach ( weapon in primaries )
|
||||||
{
|
self takeweapon( weapon );
|
||||||
self takeweapon( weapon );
|
|
||||||
}
|
lethal = self get_player_lethal_grenade();
|
||||||
lethal = self get_player_lethal_grenade();
|
|
||||||
if ( isDefined( lethal ) && lethal != "" )
|
if ( isdefined( lethal ) && lethal != "" )
|
||||||
{
|
{
|
||||||
self takeweapon( lethal );
|
self takeweapon( lethal );
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal );
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( lethal );
|
||||||
}
|
}
|
||||||
tactical = self get_player_tactical_grenade();
|
|
||||||
if ( isDefined( tactical ) && tactical != "" )
|
tactical = self get_player_tactical_grenade();
|
||||||
{
|
|
||||||
self takeweapon( tactical );
|
if ( isdefined( tactical ) && tactical != "" )
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
|
{
|
||||||
}
|
self takeweapon( tactical );
|
||||||
mine = self get_player_placeable_mine();
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical );
|
||||||
if ( isDefined( mine ) )
|
}
|
||||||
{
|
|
||||||
self takeweapon( mine );
|
mine = self get_player_placeable_mine();
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
|
|
||||||
}
|
if ( isdefined( mine ) )
|
||||||
melee_weapon = self get_player_melee_weapon();
|
{
|
||||||
if ( isDefined( melee_weapon ) )
|
self takeweapon( mine );
|
||||||
{
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine );
|
||||||
self takeweapon( melee_weapon );
|
}
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
|
|
||||||
}
|
melee_weapon = self get_player_melee_weapon();
|
||||||
self giveweapon( "knife_zm" );
|
|
||||||
self.current_melee_weapon = "knife_zm";
|
if ( isdefined( melee_weapon ) )
|
||||||
self give_start_weapon( 1 );
|
{
|
||||||
self.currentweapon = "m1911_zm";
|
self takeweapon( melee_weapon );
|
||||||
}
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( melee_weapon );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self giveweapon( "knife_zm" );
|
||||||
|
self.current_melee_weapon = "knife_zm";
|
||||||
|
self give_start_weapon( 1 );
|
||||||
|
self.currentweapon = "m1911_zm";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
change_bad_spawner() //checked changed to match cerberus output
|
change_bad_spawner()
|
||||||
{
|
{
|
||||||
flag_wait( "always_on" );
|
flag_wait( "always_on" );
|
||||||
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
|
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
|
||||||
foreach ( struct in spawner_array )
|
|
||||||
{
|
|
||||||
if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
|
|
||||||
{
|
|
||||||
struct.script_noteworthy = "riser_location";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
foreach ( struct in spawner_array )
|
||||||
|
{
|
||||||
|
if ( isdefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
|
||||||
|
{
|
||||||
|
struct.script_noteworthy = "riser_location";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,114 +1,117 @@
|
|||||||
#include maps/mp/_utility;
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#using_animtree( "fxanim_props" );
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\createfx\zm_highrise_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_highrise_fx::main();
|
maps\mp\createfx\zm_highrise_fx::main();
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_scripted_fx()
|
precache_scripted_fx()
|
||||||
{
|
{
|
||||||
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
|
level._effect["switch_sparks"] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
|
||||||
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
|
level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
|
||||||
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
|
level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
|
||||||
level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
|
level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
|
||||||
level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
|
level._effect["pandora_box_inverted"] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
|
||||||
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
|
level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
|
||||||
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
|
level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" );
|
||||||
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
|
level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
|
||||||
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
|
level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" );
|
||||||
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
|
level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
|
||||||
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
|
level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" );
|
||||||
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[ "elevator_tell" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
|
level._effect["elevator_tell"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
|
||||||
level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
|
level._effect["elevator_sparks"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
|
||||||
level._effect[ "elevator_impact" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
|
level._effect["elevator_impact"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
|
||||||
level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
|
level._effect["elevator_glint"] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
|
||||||
level._effect[ "elevator_light" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
|
level._effect["elevator_light"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
|
||||||
level._effect[ "perk_elevator_idle" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
|
level._effect["perk_elevator_idle"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
|
||||||
level._effect[ "perk_elevator_departing" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
|
level._effect["perk_elevator_departing"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
|
||||||
level._effect[ "perk_elevator_indicator_up" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
|
level._effect["perk_elevator_indicator_up"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
|
||||||
level._effect[ "perk_elevator_indicator_down" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
|
level._effect["perk_elevator_indicator_down"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
|
||||||
level._effect[ "sidequest_dragon_spark_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
|
level._effect["sidequest_dragon_spark_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
|
||||||
level._effect[ "sidequest_dragon_fireball_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
|
level._effect["sidequest_dragon_fireball_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
|
||||||
level._effect[ "sidequest_dragon_spark_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
|
level._effect["sidequest_dragon_spark_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
|
||||||
level._effect[ "sidequest_dragon_fireball_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
|
level._effect["sidequest_dragon_fireball_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
|
||||||
level._effect[ "sidequest_flash" ] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
|
level._effect["sidequest_flash"] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
|
||||||
level._effect[ "sidequest_tower_bolts" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
|
level._effect["sidequest_tower_bolts"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
|
||||||
}
|
}
|
||||||
|
|
||||||
precache_createfx_fx()
|
precache_createfx_fx()
|
||||||
{
|
{
|
||||||
level._effect[ "fx_highrise_cloud_lg_single" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
|
level._effect["fx_highrise_cloud_lg_single"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
|
||||||
level._effect[ "fx_highrise_cloud_lg_flat" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
|
level._effect["fx_highrise_cloud_lg_flat"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
|
||||||
level._effect[ "fx_highrise_cloud_lg_left" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
|
level._effect["fx_highrise_cloud_lg_left"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
|
||||||
level._effect[ "fx_highrise_cloud_lg_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
|
level._effect["fx_highrise_cloud_lg_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
|
||||||
level._effect[ "fx_highrise_cloud_sm_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
|
level._effect["fx_highrise_cloud_sm_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
|
||||||
level._effect[ "fx_highrise_cloud_sm_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
|
level._effect["fx_highrise_cloud_sm_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
|
||||||
level._effect[ "fx_highrise_cloud_bend_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
|
level._effect["fx_highrise_cloud_bend_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
|
||||||
level._effect[ "fx_highrise_cloud_bend_01" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
|
level._effect["fx_highrise_cloud_bend_01"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
|
||||||
level._effect[ "fx_highrise_meteor_lg_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
|
level._effect["fx_highrise_meteor_lg_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
|
||||||
level._effect[ "fx_highrise_meteor_lg_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
|
level._effect["fx_highrise_meteor_lg_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
|
||||||
level._effect[ "fx_highrise_meteor_lg_top2" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
|
level._effect["fx_highrise_meteor_lg_top2"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
|
||||||
level._effect[ "fx_highrise_meteor_sm_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
|
level._effect["fx_highrise_meteor_sm_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
|
||||||
level._effect[ "fx_highrise_meteor_sm_horizon" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
|
level._effect["fx_highrise_meteor_sm_horizon"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
|
||||||
level._effect[ "fx_lf_zmb_highrise_sun" ] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
|
level._effect["fx_lf_zmb_highrise_sun"] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
|
||||||
level._effect[ "fx_zmb_flies" ] = loadfx( "maps/zombie/fx_zmb_flies" );
|
level._effect["fx_zmb_flies"] = loadfx( "maps/zombie/fx_zmb_flies" );
|
||||||
level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
|
level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
|
||||||
level._effect[ "fx_highrise_ash_rising_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
|
level._effect["fx_highrise_ash_rising_md"] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
|
||||||
level._effect[ "fx_highrise_bld_crumble_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
|
level._effect["fx_highrise_bld_crumble_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
|
||||||
level._effect[ "fx_highrise_ceiling_dust_md_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
|
level._effect["fx_highrise_ceiling_dust_md_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
|
||||||
level._effect[ "fx_highrise_ceiling_dust_sm_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
|
level._effect["fx_highrise_ceiling_dust_sm_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
|
||||||
level._effect[ "fx_highrise_ceiling_dust_edge_100" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
|
level._effect["fx_highrise_ceiling_dust_edge_100"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
|
||||||
level._effect[ "fx_highrise_edge_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
|
level._effect["fx_highrise_edge_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
|
||||||
level._effect[ "fx_highrise_point_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
|
level._effect["fx_highrise_point_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
|
||||||
level._effect[ "fx_highrise_wire_spark" ] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
|
level._effect["fx_highrise_wire_spark"] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
|
||||||
level._effect[ "fx_highrise_water_drip_fast" ] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
|
level._effect["fx_highrise_water_drip_fast"] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
|
||||||
level._effect[ "fx_highrise_haze_int_med" ] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
|
level._effect["fx_highrise_haze_int_med"] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
|
||||||
level._effect[ "fx_highrise_fire_distant" ] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
|
level._effect["fx_highrise_fire_distant"] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
|
||||||
level._effect[ "fx_highrise_smk_plume_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
|
level._effect["fx_highrise_smk_plume_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
|
||||||
level._effect[ "fx_highrise_smk_plume_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
|
level._effect["fx_highrise_smk_plume_md"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
|
||||||
level._effect[ "fx_highrise_smk_plume_xlg" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
|
level._effect["fx_highrise_smk_plume_xlg"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
|
||||||
level._effect[ "fx_highrise_moon" ] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
|
level._effect["fx_highrise_moon"] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
|
||||||
level._effect[ "fx_highrise_god_ray_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
|
level._effect["fx_highrise_god_ray_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
|
||||||
level._effect[ "fx_highrise_god_ray_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
|
level._effect["fx_highrise_god_ray_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
|
||||||
level._effect[ "fx_highrise_god_ray_cool_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
|
level._effect["fx_highrise_god_ray_cool_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
|
||||||
level._effect[ "fx_highrise_god_ray_cool_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
|
level._effect["fx_highrise_god_ray_cool_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
|
||||||
level._effect[ "fx_highrise_light_bulb" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
|
level._effect["fx_highrise_light_bulb"] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
|
||||||
level._effect[ "fx_highrise_light_build_lamp" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
|
level._effect["fx_highrise_light_build_lamp"] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
|
||||||
level._effect[ "fx_highrise_light_fluorescent" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
|
level._effect["fx_highrise_light_fluorescent"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
|
||||||
level._effect[ "fx_highrise_light_fluorescent_wall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
|
level._effect["fx_highrise_light_fluorescent_wall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
|
||||||
level._effect[ "fx_highrise_light_fluorescent_wal2" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
|
level._effect["fx_highrise_light_fluorescent_wal2"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
|
||||||
level._effect[ "fx_highrise_light_recessed" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
|
level._effect["fx_highrise_light_recessed"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
|
||||||
level._effect[ "fx_highrise_light_recessed_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
|
level._effect["fx_highrise_light_recessed_md"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
|
||||||
level._effect[ "fx_highrise_light_recessed_tall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
|
level._effect["fx_highrise_light_recessed_tall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
|
||||||
level._effect[ "fx_highrise_light_recessed_tiny" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
|
level._effect["fx_highrise_light_recessed_tiny"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
|
||||||
level._effect[ "fx_highrise_light_mall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
|
level._effect["fx_highrise_light_mall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
|
||||||
level._effect[ "fx_highrise_light_lantern_red" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
|
level._effect["fx_highrise_light_lantern_red"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
|
||||||
level._effect[ "fx_highrise_light_lantern_yel" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
|
level._effect["fx_highrise_light_lantern_yel"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
|
||||||
level._effect[ "fx_highrise_light_sconce_glow" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
|
level._effect["fx_highrise_light_sconce_glow"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
|
||||||
level._effect[ "fx_highrise_light_sconce_beam" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
|
level._effect["fx_highrise_light_sconce_beam"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
|
||||||
level._effect[ "fx_highrise_dragon_breath_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
|
level._effect["fx_highrise_dragon_breath_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
|
||||||
level._effect[ "fx_highrise_dragon_tower_absorb_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
|
level._effect["fx_highrise_dragon_tower_absorb_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
|
||||||
level._effect[ "fx_highrise_dragon_tower_glow_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
|
level._effect["fx_highrise_dragon_tower_glow_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
|
||||||
level._effect[ "fx_highrise_sidequest_complete" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
|
level._effect["fx_highrise_sidequest_complete"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
|
||||||
level._effect[ "fx_highrise_dragon_breath_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
|
level._effect["fx_highrise_dragon_breath_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
|
||||||
level._effect[ "fx_highrise_dragon_tower_absorb_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
|
level._effect["fx_highrise_dragon_tower_absorb_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
|
||||||
level._effect[ "fx_highrise_dragon_tower_glow_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
|
level._effect["fx_highrise_dragon_tower_glow_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
|
||||||
level._effect[ "fx_highrise_sidequest_complete_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
|
level._effect["fx_highrise_sidequest_complete_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("fxanim_props");
|
||||||
|
|
||||||
precache_fxanim_props()
|
precache_fxanim_props()
|
||||||
{
|
{
|
||||||
level.scr_anim[ "fxanim_props" ][ "wirespark_med_lrg" ] = %fxanim_gp_wirespark_med_lrg_anim;
|
level.scr_anim["fxanim_props"]["wirespark_med_lrg"] = %fxanim_gp_wirespark_med_lrg_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "wirespark_long_lrg" ] = %fxanim_gp_wirespark_long_lrg_anim;
|
level.scr_anim["fxanim_props"]["wirespark_long_lrg"] = %fxanim_gp_wirespark_long_lrg_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim;
|
level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dragon_a" ] = %fxanim_zom_highrise_dragon_a_anim;
|
level.scr_anim["fxanim_props"]["dragon_a"] = %fxanim_zom_highrise_dragon_a_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dragon_b" ] = %fxanim_zom_highrise_dragon_b_anim;
|
level.scr_anim["fxanim_props"]["dragon_b"] = %fxanim_zom_highrise_dragon_b_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_anim;
|
level.scr_anim["fxanim_props"]["dragon"] = %fxanim_zom_highrise_dragon_idle_anim;
|
||||||
level.scr_anim[ "fxanim_props" ][ "rock_slide" ] = %fxanim_zom_highrise_rock_slide_anim;
|
level.scr_anim["fxanim_props"]["rock_slide"] = %fxanim_zom_highrise_rock_slide_anim;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_highrise_classic;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_highrise;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_highrise;
|
||||||
|
#include maps\mp\zm_highrise_classic;
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
add_map_gamemode( "zclassic", maps/mp/zm_highrise::zclassic_preinit, undefined, undefined );
|
add_map_gamemode( "zclassic", maps\mp\zm_highrise::zclassic_preinit, undefined, undefined );
|
||||||
add_map_location_gamemode( "zclassic", "rooftop", maps/mp/zm_highrise_classic::precache, maps/mp/zm_highrise_classic::main );
|
add_map_location_gamemode( "zclassic", "rooftop", maps\mp\zm_highrise_classic::precache, maps\mp\zm_highrise_classic::main );
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,247 +1,249 @@
|
|||||||
#include maps/mp/zm_highrise_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_highrise_sq;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
flag_init( "sq_atd_elevator0" );
|
flag_init( "sq_atd_elevator0" );
|
||||||
flag_init( "sq_atd_elevator1" );
|
flag_init( "sq_atd_elevator1" );
|
||||||
flag_init( "sq_atd_elevator2" );
|
flag_init( "sq_atd_elevator2" );
|
||||||
flag_init( "sq_atd_elevator3" );
|
flag_init( "sq_atd_elevator3" );
|
||||||
flag_init( "sq_atd_elevator_activated" );
|
flag_init( "sq_atd_elevator_activated" );
|
||||||
flag_init( "sq_atd_drg_puzzle_1st_error" );
|
flag_init( "sq_atd_drg_puzzle_1st_error" );
|
||||||
flag_init( "sq_atd_drg_puzzle_complete" );
|
flag_init( "sq_atd_drg_puzzle_complete" );
|
||||||
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
||||||
sq_atd_dragon_icon_setup();
|
sq_atd_dragon_icon_setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
level._cur_stage_name = "atd";
|
level._cur_stage_name = "atd";
|
||||||
clientnotify( "atd" );
|
clientnotify( "atd" );
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic()
|
stage_logic()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "ATD Started" );
|
iprintlnbold( "ATD Started" );
|
||||||
#/
|
#/
|
||||||
sq_atd_elevators();
|
sq_atd_elevators();
|
||||||
sq_atd_drg_puzzle();
|
sq_atd_drg_puzzle();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_1( success )
|
exit_stage_1( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_atd_dragon_icon_setup()
|
sq_atd_dragon_icon_setup()
|
||||||
{
|
{
|
||||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||||
_a51 = a_dragon_icons;
|
|
||||||
_k51 = getFirstArrayKey( _a51 );
|
foreach ( m_icon in a_dragon_icons )
|
||||||
while ( isDefined( _k51 ) )
|
{
|
||||||
{
|
m_icon notsolid();
|
||||||
m_icon = _a51[ _k51 ];
|
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
|
||||||
m_icon notsolid();
|
m_icon.origin = m_icon.m_elevator.origin + vectorscale( ( 0, 0, 1 ), 134.0 );
|
||||||
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
|
m_icon.angles = m_icon.m_elevator.angles;
|
||||||
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 );
|
m_icon linkto( m_icon.m_elevator );
|
||||||
m_icon.angles = m_icon.m_elevator.angles;
|
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
|
||||||
m_icon linkto( m_icon.m_elevator );
|
|
||||||
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
|
if ( isdefined( m_icon.m_lit_icon ) )
|
||||||
if ( isDefined( m_icon.m_lit_icon ) )
|
{
|
||||||
{
|
m_icon.m_lit_icon notsolid();
|
||||||
m_icon.m_lit_icon notsolid();
|
m_icon.m_lit_icon.origin = m_icon.origin - vectorscale( ( 0, 0, 1 ), 2.0 );
|
||||||
m_icon.m_lit_icon.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 );
|
m_icon.m_lit_icon.angles = m_icon.angles;
|
||||||
m_icon.m_lit_icon.angles = m_icon.angles;
|
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
}
|
||||||
}
|
}
|
||||||
_k51 = getNextArrayKey( _a51, _k51 );
|
|
||||||
}
|
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
|
||||||
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
|
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
|
||||||
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
|
|
||||||
i = 0;
|
for ( i = 0; i < a_atd2_icons.size; i++ )
|
||||||
while ( i < a_atd2_icons.size )
|
{
|
||||||
{
|
a_atd2_lit_icons[i].origin = a_atd2_icons[i].origin - vectorscale( ( 0, 0, 1 ), 5.0 );
|
||||||
a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 );
|
a_atd2_lit_icons[i].angles = a_atd2_icons[i].angles;
|
||||||
a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles;
|
a_atd2_icons[i].lit_icon = a_atd2_lit_icons[i];
|
||||||
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ];
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_atd_elevators()
|
sq_atd_elevators()
|
||||||
{
|
{
|
||||||
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
|
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
|
||||||
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
|
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
|
||||||
i = 0;
|
|
||||||
while ( i < a_elevators.size )
|
for ( i = 0; i < a_elevators.size; i++ )
|
||||||
{
|
{
|
||||||
trig_elevator = getent( a_elevators[ i ], "targetname" );
|
trig_elevator = getent( a_elevators[i], "targetname" );
|
||||||
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] );
|
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[i] );
|
||||||
i++;
|
}
|
||||||
}
|
|
||||||
while ( flag( "sq_atd_elevator0" ) && flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) && !flag( "sq_atd_elevator3" ) )
|
while ( !flag( "sq_atd_elevator0" ) || !flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) || !flag( "sq_atd_elevator3" ) )
|
||||||
{
|
{
|
||||||
flag_wait_any_array( a_elevator_flags );
|
flag_wait_any_array( a_elevator_flags );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Standing on Elevators Complete" );
|
iprintlnbold( "Standing on Elevators Complete" );
|
||||||
#/
|
#/
|
||||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||||
_a105 = a_dragon_icons;
|
|
||||||
_k105 = getFirstArrayKey( _a105 );
|
foreach ( m_icon in a_dragon_icons )
|
||||||
while ( isDefined( _k105 ) )
|
{
|
||||||
{
|
v_off_pos = m_icon.m_lit_icon.origin;
|
||||||
m_icon = _a105[ _k105 ];
|
m_icon.m_lit_icon unlink();
|
||||||
v_off_pos = m_icon.m_lit_icon.origin;
|
m_icon unlink();
|
||||||
m_icon.m_lit_icon unlink();
|
m_icon.m_lit_icon.origin = m_icon.origin;
|
||||||
m_icon unlink();
|
m_icon.origin = v_off_pos;
|
||||||
m_icon.m_lit_icon.origin = m_icon.origin;
|
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||||
m_icon.origin = v_off_pos;
|
m_icon linkto( m_icon.m_elevator );
|
||||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
m_icon playsound( "zmb_sq_symbol_light" );
|
||||||
m_icon linkto( m_icon.m_elevator );
|
}
|
||||||
m_icon playsound( "zmb_sq_symbol_light" );
|
|
||||||
_k105 = getNextArrayKey( _a105, _k105 );
|
flag_set( "sq_atd_elevator_activated" );
|
||||||
}
|
vo_richtofen_atd_elevators();
|
||||||
flag_set( "sq_atd_elevator_activated" );
|
level thread vo_maxis_atd_elevators();
|
||||||
vo_richtofen_atd_elevators();
|
|
||||||
level thread vo_maxis_atd_elevators();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_atd_watch_elevator( str_flag )
|
sq_atd_watch_elevator( str_flag )
|
||||||
{
|
{
|
||||||
level endon( "sq_atd_elevator_activated" );
|
level endon( "sq_atd_elevator_activated" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "trigger", e_who );
|
{
|
||||||
while ( !isplayer( e_who ) )
|
self waittill( "trigger", e_who );
|
||||||
{
|
|
||||||
wait 0,05;
|
if ( !isplayer( e_who ) )
|
||||||
}
|
{
|
||||||
flag_set( str_flag );
|
wait 0.05;
|
||||||
while ( isalive( e_who ) && e_who istouching( self ) )
|
continue;
|
||||||
{
|
}
|
||||||
wait 0,05;
|
|
||||||
}
|
flag_set( str_flag );
|
||||||
flag_clear( str_flag );
|
|
||||||
}
|
while ( isalive( e_who ) && e_who istouching( self ) )
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
flag_clear( str_flag );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_atd_drg_puzzle()
|
sq_atd_drg_puzzle()
|
||||||
{
|
{
|
||||||
level.sq_atd_cur_drg = 0;
|
level.sq_atd_cur_drg = 0;
|
||||||
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
|
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
|
||||||
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
|
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
|
||||||
i = 0;
|
|
||||||
while ( i < a_puzzle_trigs.size )
|
for ( i = 0; i < a_puzzle_trigs.size; i++ )
|
||||||
{
|
a_puzzle_trigs[i] thread drg_puzzle_trig_think( i );
|
||||||
a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i );
|
|
||||||
i++;
|
while ( level.sq_atd_cur_drg < 4 )
|
||||||
}
|
wait 1;
|
||||||
while ( level.sq_atd_cur_drg < 4 )
|
|
||||||
{
|
flag_set( "sq_atd_drg_puzzle_complete" );
|
||||||
wait 1;
|
level thread vo_maxis_atd_order_complete();
|
||||||
}
|
|
||||||
flag_set( "sq_atd_drg_puzzle_complete" );
|
|
||||||
level thread vo_maxis_atd_order_complete();
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Dragon Puzzle COMPLETE" );
|
iprintlnbold( "Dragon Puzzle COMPLETE" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
drg_puzzle_trig_think( n_order_id )
|
drg_puzzle_trig_think( n_order_id )
|
||||||
{
|
{
|
||||||
self.drg_active = 0;
|
self.drg_active = 0;
|
||||||
m_unlit = getent( self.target, "targetname" );
|
m_unlit = getent( self.target, "targetname" );
|
||||||
m_lit = m_unlit.lit_icon;
|
m_lit = m_unlit.lit_icon;
|
||||||
v_top = m_unlit.origin;
|
v_top = m_unlit.origin;
|
||||||
v_hidden = m_lit.origin;
|
v_hidden = m_lit.origin;
|
||||||
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
|
|
||||||
{
|
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
|
||||||
while ( self.drg_active )
|
{
|
||||||
{
|
if ( self.drg_active )
|
||||||
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
|
{
|
||||||
while ( flag( "sq_atd_drg_puzzle_complete" ) )
|
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
|
||||||
{
|
|
||||||
continue;
|
if ( flag( "sq_atd_drg_puzzle_complete" ) )
|
||||||
}
|
continue;
|
||||||
}
|
}
|
||||||
self waittill( "trigger", e_who );
|
|
||||||
if ( level.sq_atd_cur_drg == n_order_id )
|
self waittill( "trigger", e_who );
|
||||||
{
|
|
||||||
m_lit.origin = v_top;
|
if ( level.sq_atd_cur_drg == n_order_id )
|
||||||
m_unlit.origin = v_hidden;
|
{
|
||||||
m_lit playsound( "zmb_sq_symbol_light" );
|
m_lit.origin = v_top;
|
||||||
self.drg_active = 1;
|
m_unlit.origin = v_hidden;
|
||||||
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
|
m_lit playsound( "zmb_sq_symbol_light" );
|
||||||
level.sq_atd_cur_drg++;
|
self.drg_active = 1;
|
||||||
|
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
|
||||||
|
level.sq_atd_cur_drg++;
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Dragon " + n_order_id + " Correct" );
|
iprintlnbold( "Dragon " + n_order_id + " Correct" );
|
||||||
#/
|
#/
|
||||||
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
|
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
|
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
|
||||||
{
|
level thread vo_maxis_atd_order_error();
|
||||||
level thread vo_maxis_atd_order_error();
|
|
||||||
}
|
level.sq_atd_cur_drg = 0;
|
||||||
level.sq_atd_cur_drg = 0;
|
level notify( "drg_puzzle_reset" );
|
||||||
level notify( "drg_puzzle_reset" );
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "INCORRECT DRAGON" );
|
iprintlnbold( "INCORRECT DRAGON" );
|
||||||
#/
|
#/
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
}
|
||||||
while ( e_who istouching( self ) )
|
|
||||||
{
|
while ( e_who istouching( self ) )
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
|
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
|
||||||
{
|
{
|
||||||
level endon( "sq_atd_drg_puzzle_complete" );
|
level endon( "sq_atd_drg_puzzle_complete" );
|
||||||
level waittill( "drg_puzzle_reset" );
|
|
||||||
m_unlit.origin = v_top;
|
level waittill( "drg_puzzle_reset" );
|
||||||
m_lit.origin = v_hidden;
|
|
||||||
m_unlit playsound( "zmb_sq_symbol_fade" );
|
m_unlit.origin = v_top;
|
||||||
self.drg_active = 0;
|
m_lit.origin = v_hidden;
|
||||||
|
m_unlit playsound( "zmb_sq_symbol_fade" );
|
||||||
|
self.drg_active = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_atd_elevators()
|
vo_richtofen_atd_elevators()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_atd_elevators()
|
vo_maxis_atd_elevators()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_atd_order( n_which )
|
vo_richtofen_atd_order( n_which )
|
||||||
{
|
{
|
||||||
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
|
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
|
||||||
maps/mp/zm_highrise_sq::richtofensay( str_vox );
|
maps\mp\zm_highrise_sq::richtofensay( str_vox );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_atd_order_error()
|
vo_richtofen_atd_order_error()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_atd_order_error()
|
vo_maxis_atd_order_error()
|
||||||
{
|
{
|
||||||
flag_set( "sq_atd_drg_puzzle_1st_error" );
|
flag_set( "sq_atd_drg_puzzle_1st_error" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_atd_order_complete()
|
vo_maxis_atd_order_complete()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
|
||||||
}
|
}
|
||||||
|
@ -1,570 +1,559 @@
|
|||||||
#include maps/mp/zombies/_zm_unitrigger;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_highrise_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_highrise_sq;
|
||||||
#using_animtree( "fxanim_props" );
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
|
||||||
init_1()
|
init_1()
|
||||||
{
|
{
|
||||||
flag_init( "pts_1_springpads_placed" );
|
flag_init( "pts_1_springpads_placed" );
|
||||||
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_2()
|
init_2()
|
||||||
{
|
{
|
||||||
flag_init( "pts_2_springpads_placed" );
|
flag_init( "pts_2_springpads_placed" );
|
||||||
flag_init( "pts_2_generator_1_started" );
|
flag_init( "pts_2_generator_1_started" );
|
||||||
flag_init( "pts_2_generator_2_started" );
|
flag_init( "pts_2_generator_2_started" );
|
||||||
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage_1()
|
init_stage_1()
|
||||||
{
|
{
|
||||||
clientnotify( "pts_1" );
|
clientnotify( "pts_1" );
|
||||||
level.n_launched_zombies = 0;
|
level.n_launched_zombies = 0;
|
||||||
wait 15;
|
wait 15;
|
||||||
level thread richtofen_pts_instructions();
|
level thread richtofen_pts_instructions();
|
||||||
level thread richtofen_pts_placed();
|
level thread richtofen_pts_placed();
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage_2()
|
init_stage_2()
|
||||||
{
|
{
|
||||||
clientnotify( "pts_2" );
|
clientnotify( "pts_2" );
|
||||||
level.sq_ball_putdown_trigs = [];
|
level.sq_ball_putdown_trigs = [];
|
||||||
level thread maxis_pts_instructions();
|
level thread maxis_pts_instructions();
|
||||||
level thread maxis_pts_placed();
|
level thread maxis_pts_placed();
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic_1()
|
stage_logic_1()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "PTS1 Started" );
|
iprintlnbold( "PTS1 Started" );
|
||||||
#/
|
#/
|
||||||
watch_player_springpads( 0 );
|
watch_player_springpads( 0 );
|
||||||
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
|
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 );
|
||||||
wait_for_zombies_launched();
|
wait_for_zombies_launched();
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||||
stage_completed( "sq_1", "pts_1" );
|
stage_completed( "sq_1", "pts_1" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_zombies_launched()
|
wait_for_zombies_launched()
|
||||||
{
|
{
|
||||||
level thread richtofen_zombies_launched();
|
level thread richtofen_zombies_launched();
|
||||||
t_tower = getent( "pts_tower_trig", "targetname" );
|
t_tower = getent( "pts_tower_trig", "targetname" );
|
||||||
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
|
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||||
while ( level.n_launched_zombies < 16 )
|
|
||||||
{
|
while ( level.n_launched_zombies < 16 )
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_zombie_flings()
|
watch_zombie_flings()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
self endon( "equip_springpad_zm_pickup" );
|
self endon( "equip_springpad_zm_pickup" );
|
||||||
while ( level.n_launched_zombies < 16 )
|
|
||||||
{
|
while ( level.n_launched_zombies < 16 )
|
||||||
self waittill( "fling" );
|
{
|
||||||
level.n_launched_zombies++;
|
self waittill( "fling" );
|
||||||
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
|
|
||||||
{
|
level.n_launched_zombies++;
|
||||||
level notify( "pts1_say_next_line" );
|
|
||||||
}
|
if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 )
|
||||||
wait 0,1;
|
level notify( "pts1_say_next_line" );
|
||||||
}
|
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic_2()
|
stage_logic_2()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "PTS2 Started" );
|
iprintlnbold( "PTS2 Started" );
|
||||||
#/
|
#/
|
||||||
watch_player_springpads( 1 );
|
watch_player_springpads( 1 );
|
||||||
level thread wait_for_balls_launched();
|
level thread wait_for_balls_launched();
|
||||||
flag_wait( "pts_2_generator_1_started" );
|
flag_wait( "pts_2_generator_1_started" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||||
flag_wait( "pts_2_generator_2_started" );
|
flag_wait( "pts_2_generator_2_started" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||||
level thread maxis_balls_placed();
|
level thread maxis_balls_placed();
|
||||||
stage_completed( "sq_2", "pts_2" );
|
stage_completed( "sq_2", "pts_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_balls_launched()
|
wait_for_balls_launched()
|
||||||
{
|
{
|
||||||
level.current_generator = 1;
|
level.current_generator = 1;
|
||||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||||
_a138 = a_lion_spots;
|
|
||||||
_k138 = getFirstArrayKey( _a138 );
|
foreach ( s_lion_spot in a_lion_spots )
|
||||||
while ( isDefined( _k138 ) )
|
{
|
||||||
{
|
s_lion_spot.a_place_ball_trigs = [];
|
||||||
s_lion_spot = _a138[ _k138 ];
|
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
|
||||||
s_lion_spot.a_place_ball_trigs = [];
|
}
|
||||||
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
|
|
||||||
_k138 = getNextArrayKey( _a138, _k138 );
|
a_players = getplayers();
|
||||||
}
|
|
||||||
a_players = getplayers();
|
foreach ( player in a_players )
|
||||||
_a145 = a_players;
|
{
|
||||||
_k145 = getFirstArrayKey( _a145 );
|
player.a_place_ball_trigs = [];
|
||||||
while ( isDefined( _k145 ) )
|
|
||||||
{
|
if ( isdefined( player.zm_sq_has_ball ) )
|
||||||
player = _a145[ _k145 ];
|
player thread player_has_ball();
|
||||||
player.a_place_ball_trigs = [];
|
}
|
||||||
if ( isDefined( player.zm_sq_has_ball ) )
|
|
||||||
{
|
while ( true )
|
||||||
player thread player_has_ball();
|
{
|
||||||
}
|
level waittill( "zm_ball_picked_up", player );
|
||||||
_k145 = getNextArrayKey( _a145, _k145 );
|
|
||||||
}
|
player thread player_has_ball();
|
||||||
while ( 1 )
|
}
|
||||||
{
|
|
||||||
level waittill( "zm_ball_picked_up", player );
|
|
||||||
player thread player_has_ball();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player_has_ball()
|
player_has_ball()
|
||||||
{
|
{
|
||||||
self thread player_set_down_ball_watcher();
|
self thread player_set_down_ball_watcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
player_set_down_ball_watcher()
|
player_set_down_ball_watcher()
|
||||||
{
|
{
|
||||||
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
|
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
|
||||||
pts_putdown_trigs_remove_for_player( self );
|
pts_putdown_trigs_remove_for_player( self );
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||||
{
|
{
|
||||||
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
||||||
t_pickup setcursorhint( "HINT_NOICON" );
|
t_pickup setcursorhint( "HINT_NOICON" );
|
||||||
t_pickup sethintstring( str_hint_string );
|
t_pickup sethintstring( str_hint_string );
|
||||||
t_pickup.targetname = "ball_place_trig";
|
t_pickup.targetname = "ball_place_trig";
|
||||||
t_pickup triggerignoreteam();
|
t_pickup triggerignoreteam();
|
||||||
t_pickup usetriggerrequirelookat();
|
t_pickup usetriggerrequirelookat();
|
||||||
return t_pickup;
|
return t_pickup;
|
||||||
}
|
}
|
||||||
|
|
||||||
place_ball_think( t_place_ball, s_lion_spot )
|
place_ball_think( t_place_ball, s_lion_spot )
|
||||||
{
|
{
|
||||||
t_place_ball endon( "delete" );
|
t_place_ball endon( "delete" );
|
||||||
t_place_ball waittill( "trigger" );
|
|
||||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
t_place_ball waittill( "trigger" );
|
||||||
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
|
||||||
self.zm_sq_has_ball = undefined;
|
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||||
s_lion_spot.which_ball = self.which_ball;
|
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
||||||
self notify( "zm_sq_ball_used" );
|
self.zm_sq_has_ball = undefined;
|
||||||
s_lion_spot.zm_pts_animating = 1;
|
s_lion_spot.which_ball = self.which_ball;
|
||||||
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
|
self notify( "zm_sq_ball_used" );
|
||||||
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
|
s_lion_spot.zm_pts_animating = 1;
|
||||||
s_lion_spot.which_generator = level.current_generator;
|
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
|
||||||
level.current_generator++;
|
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
|
||||||
|
s_lion_spot.which_generator = level.current_generator;
|
||||||
|
level.current_generator++;
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Ball Animating" );
|
iprintlnbold( "Ball Animating" );
|
||||||
#/
|
#/
|
||||||
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
|
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
|
||||||
self.t_putdown_ball delete();
|
self.t_putdown_ball delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_all_springpads()
|
delete_all_springpads()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_1( success )
|
exit_stage_1( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_2( success )
|
exit_stage_2( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_player_springpads( is_generator )
|
watch_player_springpads( is_generator )
|
||||||
{
|
{
|
||||||
level thread springpad_count_watcher( is_generator );
|
level thread springpad_count_watcher( is_generator );
|
||||||
a_players = get_players();
|
a_players = get_players();
|
||||||
_a240 = a_players;
|
|
||||||
_k240 = getFirstArrayKey( _a240 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k240 ) )
|
player thread pts_watch_springpad_use( is_generator );
|
||||||
{
|
|
||||||
player = _a240[ _k240 ];
|
|
||||||
player thread pts_watch_springpad_use( is_generator );
|
|
||||||
_k240 = getNextArrayKey( _a240, _k240 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_watch_springpad_use( is_generator )
|
pts_watch_springpad_use( is_generator )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( !flag( "sq_branch_complete" ) )
|
|
||||||
{
|
while ( !flag( "sq_branch_complete" ) )
|
||||||
self waittill( "equipment_placed", weapon, weapname );
|
{
|
||||||
if ( weapname == level.springpad_name )
|
self waittill( "equipment_placed", weapon, weapname );
|
||||||
{
|
|
||||||
self is_springpad_in_place( weapon, is_generator );
|
if ( weapname == level.springpad_name )
|
||||||
}
|
self is_springpad_in_place( weapon, is_generator );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_count_watcher( is_generator )
|
springpad_count_watcher( is_generator )
|
||||||
{
|
{
|
||||||
level endon( "sq_pts_springad_count4" );
|
level endon( "sq_pts_springad_count4" );
|
||||||
str_which_spots = "pts_ghoul";
|
str_which_spots = "pts_ghoul";
|
||||||
if ( is_generator )
|
|
||||||
{
|
if ( is_generator )
|
||||||
str_which_spots = "pts_lion";
|
str_which_spots = "pts_lion";
|
||||||
}
|
|
||||||
a_spots = getstructarray( str_which_spots, "targetname" );
|
a_spots = getstructarray( str_which_spots, "targetname" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
level waittill( "sq_pts_springpad_in_place" );
|
{
|
||||||
n_count = 0;
|
level waittill( "sq_pts_springpad_in_place" );
|
||||||
_a279 = a_spots;
|
|
||||||
_k279 = getFirstArrayKey( _a279 );
|
n_count = 0;
|
||||||
while ( isDefined( _k279 ) )
|
|
||||||
{
|
foreach ( s_spot in a_spots )
|
||||||
s_spot = _a279[ _k279 ];
|
{
|
||||||
if ( isDefined( s_spot.springpad ) )
|
if ( isdefined( s_spot.springpad ) )
|
||||||
{
|
n_count++;
|
||||||
n_count++;
|
}
|
||||||
}
|
|
||||||
_k279 = getNextArrayKey( _a279, _k279 );
|
level notify( "sq_pts_springad_count" + n_count );
|
||||||
}
|
}
|
||||||
level notify( "sq_pts_springad_count" + n_count );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is_springpad_in_place( m_springpad, is_generator )
|
is_springpad_in_place( m_springpad, is_generator )
|
||||||
{
|
{
|
||||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||||
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
|
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
|
||||||
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
|
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
|
||||||
_a298 = a_spots;
|
|
||||||
_k298 = getFirstArrayKey( _a298 );
|
foreach ( s_spot in a_spots )
|
||||||
while ( isDefined( _k298 ) )
|
{
|
||||||
{
|
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
|
||||||
s_spot = _a298[ _k298 ];
|
|
||||||
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
|
if ( n_dist < 1024 )
|
||||||
if ( n_dist < 1024 )
|
{
|
||||||
{
|
v_spot_forward = vectornormalize( anglestoforward( s_spot.angles ) );
|
||||||
v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) );
|
v_pad_forward = vectornormalize( anglestoforward( m_springpad.angles ) );
|
||||||
v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) );
|
n_dot = vectordot( v_spot_forward, v_pad_forward );
|
||||||
n_dot = vectordot( v_spot_forward, v_pad_forward );
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
||||||
#/
|
#/
|
||||||
if ( n_dot > 0,98 )
|
if ( n_dot > 0.98 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
||||||
#/
|
#/
|
||||||
level notify( "sq_pts_springpad_in_place" );
|
level notify( "sq_pts_springpad_in_place" );
|
||||||
s_spot.springpad = m_springpad;
|
s_spot.springpad = m_springpad;
|
||||||
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
|
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
|
||||||
if ( is_generator )
|
|
||||||
{
|
if ( is_generator )
|
||||||
wait 0,1;
|
{
|
||||||
level thread pts_should_springpad_create_trigs( s_spot );
|
wait 0.1;
|
||||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
level thread pts_should_springpad_create_trigs( s_spot );
|
||||||
}
|
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
m_springpad.fling_scaler = 2;
|
{
|
||||||
m_springpad thread watch_zombie_flings();
|
m_springpad.fling_scaler = 2;
|
||||||
}
|
m_springpad thread watch_zombie_flings();
|
||||||
if ( isDefined( s_spot.script_float ) )
|
}
|
||||||
{
|
|
||||||
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
if ( isdefined( s_spot.script_float ) )
|
||||||
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
{
|
||||||
v_override_dir = vectorScale( v_override_dir, 1024 );
|
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||||
m_springpad.direction_vec_override = v_override_dir;
|
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
||||||
m_springpad.fling_scaler = s_spot.script_float;
|
v_override_dir = vectorscale( v_override_dir, 1024 );
|
||||||
}
|
m_springpad.direction_vec_override = v_override_dir;
|
||||||
return;
|
m_springpad.fling_scaler = s_spot.script_float;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
break;
|
||||||
{
|
}
|
||||||
_k298 = getNextArrayKey( _a298, _k298 );
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
||||||
{
|
{
|
||||||
str_anim1 = undefined;
|
str_anim1 = undefined;
|
||||||
n_anim_length1 = undefined;
|
n_anim_length1 = undefined;
|
||||||
str_anim2 = undefined;
|
str_anim2 = undefined;
|
||||||
n_anim_length2 = undefined;
|
n_anim_length2 = undefined;
|
||||||
switch( str_spot_name )
|
|
||||||
{
|
switch ( str_spot_name )
|
||||||
case "lion_pair_1":
|
{
|
||||||
str_anim1 = "dc";
|
case "lion_pair_1":
|
||||||
str_anim2 = "cd";
|
str_anim1 = "dc";
|
||||||
break;
|
str_anim2 = "cd";
|
||||||
case "lion_pair_2":
|
break;
|
||||||
str_anim1 = "ab";
|
case "lion_pair_2":
|
||||||
str_anim2 = "ba";
|
str_anim1 = "ab";
|
||||||
break;
|
str_anim2 = "ba";
|
||||||
case "lion_pair_3":
|
break;
|
||||||
str_anim1 = "cd";
|
case "lion_pair_3":
|
||||||
str_anim2 = "dc";
|
str_anim1 = "cd";
|
||||||
break;
|
str_anim2 = "dc";
|
||||||
case "lion_pair_4":
|
break;
|
||||||
str_anim1 = "ba";
|
case "lion_pair_4":
|
||||||
str_anim2 = "ab";
|
str_anim1 = "ba";
|
||||||
break;
|
str_anim2 = "ab";
|
||||||
}
|
break;
|
||||||
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
}
|
||||||
m_anim.angles = ( 0, 0, 0 );
|
|
||||||
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
||||||
m_anim useanimtree( -1 );
|
m_anim.angles = ( 0, 0, 0 );
|
||||||
m_anim.targetname = "trample_gen_" + str_spot_name;
|
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
||||||
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
|
m_anim useanimtree( -1 );
|
||||||
|
m_anim.targetname = "trample_gen_" + str_spot_name;
|
||||||
|
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
|
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
|
||||||
{
|
{
|
||||||
m_anim endon( "delete" );
|
m_anim endon( "delete" );
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
m_buddy_springpad endon( "delete" );
|
m_buddy_springpad endon( "delete" );
|
||||||
n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
|
n_anim_length1 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
||||||
n_anim_length2 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
|
n_anim_length2 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
|
||||||
while ( isDefined( m_anim ) )
|
|
||||||
{
|
while ( isdefined( m_anim ) )
|
||||||
self notify( "fling" );
|
{
|
||||||
if ( isDefined( m_anim ) )
|
self notify( "fling", 1 );
|
||||||
{
|
|
||||||
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
|
if ( isdefined( m_anim ) )
|
||||||
}
|
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
||||||
wait n_anim_length1;
|
|
||||||
m_buddy_springpad notify( "fling" );
|
wait( n_anim_length1 );
|
||||||
if ( isDefined( m_anim ) )
|
m_buddy_springpad notify( "fling", 1 );
|
||||||
{
|
|
||||||
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
|
if ( isdefined( m_anim ) )
|
||||||
}
|
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
|
||||||
wait n_anim_length2;
|
|
||||||
}
|
wait( n_anim_length2 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_springpad_removed_watcher( m_springpad, s_spot )
|
pts_springpad_removed_watcher( m_springpad, s_spot )
|
||||||
{
|
{
|
||||||
self pts_springpad_waittill_removed( m_springpad );
|
self pts_springpad_waittill_removed( m_springpad );
|
||||||
s_spot.springpad = undefined;
|
s_spot.springpad = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_springpad_waittill_removed( m_springpad )
|
pts_springpad_waittill_removed( m_springpad )
|
||||||
{
|
{
|
||||||
m_springpad endon( "delete" );
|
m_springpad endon( "delete" );
|
||||||
m_springpad endon( "death" );
|
m_springpad endon( "death" );
|
||||||
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_all_springpads_placed( str_type, str_flag )
|
wait_for_all_springpads_placed( str_type, str_flag )
|
||||||
{
|
{
|
||||||
a_spots = getstructarray( str_type, "targetname" );
|
a_spots = getstructarray( str_type, "targetname" );
|
||||||
while ( !flag( str_flag ) )
|
|
||||||
{
|
while ( !flag( str_flag ) )
|
||||||
is_clear = 0;
|
{
|
||||||
_a442 = a_spots;
|
is_clear = 0;
|
||||||
_k442 = getFirstArrayKey( _a442 );
|
|
||||||
while ( isDefined( _k442 ) )
|
foreach ( s_spot in a_spots )
|
||||||
{
|
{
|
||||||
s_spot = _a442[ _k442 ];
|
if ( !isdefined( s_spot.springpad ) )
|
||||||
if ( !isDefined( s_spot.springpad ) )
|
is_clear = 1;
|
||||||
{
|
}
|
||||||
is_clear = 1;
|
|
||||||
}
|
if ( !is_clear )
|
||||||
_k442 = getNextArrayKey( _a442, _k442 );
|
flag_set( str_flag );
|
||||||
}
|
|
||||||
if ( !is_clear )
|
wait 1;
|
||||||
{
|
}
|
||||||
flag_set( str_flag );
|
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_should_player_create_trigs( player )
|
pts_should_player_create_trigs( player )
|
||||||
{
|
{
|
||||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||||
_a467 = a_lion_spots;
|
|
||||||
_k467 = getFirstArrayKey( _a467 );
|
foreach ( s_lion_spot in a_lion_spots )
|
||||||
while ( isDefined( _k467 ) )
|
{
|
||||||
{
|
if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||||
s_lion_spot = _a467[ _k467 ];
|
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||||
if ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
|
}
|
||||||
{
|
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
|
||||||
}
|
|
||||||
_k467 = getNextArrayKey( _a467, _k467 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_should_springpad_create_trigs( s_lion_spot )
|
pts_should_springpad_create_trigs( s_lion_spot )
|
||||||
{
|
{
|
||||||
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
|
if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||||
{
|
{
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a481 = a_players;
|
|
||||||
_k481 = getFirstArrayKey( _a481 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k481 ) )
|
{
|
||||||
{
|
if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
||||||
player = _a481[ _k481 ];
|
{
|
||||||
if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
||||||
{
|
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
}
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
|
}
|
||||||
}
|
}
|
||||||
_k481 = getNextArrayKey( _a481, _k481 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
|
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
|
||||||
{
|
{
|
||||||
if ( isDefined( s_lion_spot.which_ball ) || isDefined( s_lion_spot.springpad_buddy ) && isDefined( s_lion_spot.springpad_buddy.which_ball ) )
|
if ( isdefined( s_lion_spot.which_ball ) || isdefined( s_lion_spot.springpad_buddy ) && isdefined( s_lion_spot.springpad_buddy.which_ball ) )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
||||||
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
player clientclaimtrigger( t_place_ball );
|
||||||
player clientclaimtrigger( t_place_ball );
|
t_place_ball.owner = player;
|
||||||
t_place_ball.owner = player;
|
player thread place_ball_think( t_place_ball, s_lion_spot );
|
||||||
player thread place_ball_think( t_place_ball, s_lion_spot );
|
|
||||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||||
{
|
s_lion_spot.pts_putdown_trigs = [];
|
||||||
s_lion_spot.pts_putdown_trigs = [];
|
|
||||||
}
|
s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball;
|
||||||
s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball;
|
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
|
||||||
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
|
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
|
||||||
{
|
{
|
||||||
player pts_springpad_waittill_removed( s_lion_spot.springpad );
|
player pts_springpad_waittill_removed( s_lion_spot.springpad );
|
||||||
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
pts_putdown_trigs_remove_for_spot( s_lion_spot );
|
||||||
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
|
||||||
level thread pts_reset_ball( s_lion_spot );
|
level thread pts_reset_ball( s_lion_spot );
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_reset_ball( s_lion_spot )
|
pts_reset_ball( s_lion_spot )
|
||||||
{
|
{
|
||||||
if ( isDefined( s_lion_spot.which_ball ) )
|
if ( isdefined( s_lion_spot.which_ball ) )
|
||||||
{
|
{
|
||||||
s_lion_spot.sq_pickup_reset = 1;
|
s_lion_spot.sq_pickup_reset = 1;
|
||||||
s_lion_spot.which_ball notify( "sq_pickup_reset" );
|
s_lion_spot.which_ball notify( "sq_pickup_reset" );
|
||||||
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
|
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
|
||||||
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
||||||
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
|
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
|
||||||
level.current_generator--;
|
level.current_generator--;
|
||||||
|
s_lion_spot.which_ball = undefined;
|
||||||
s_lion_spot.which_ball = undefined;
|
m_ball_anim delete();
|
||||||
m_ball_anim delete();
|
}
|
||||||
}
|
else if ( isdefined( s_lion_spot.springpad_buddy.which_ball ) )
|
||||||
else
|
{
|
||||||
{
|
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
|
||||||
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) )
|
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
|
||||||
{
|
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
|
||||||
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
|
playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
||||||
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
|
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
|
||||||
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
|
level.current_generator--;
|
||||||
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
|
s_lion_spot.springpad_buddy.which_ball = undefined;
|
||||||
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
|
m_ball_anim delete();
|
||||||
level.current_generator--;
|
}
|
||||||
|
|
||||||
s_lion_spot.springpad_buddy.which_ball = undefined;
|
|
||||||
m_ball_anim delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_putdown_trigs_remove_for_player( player )
|
pts_putdown_trigs_remove_for_player( player )
|
||||||
{
|
{
|
||||||
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
a_lion_spots = getstructarray( "pts_lion", "targetname" );
|
||||||
_a554 = a_lion_spots;
|
|
||||||
_k554 = getFirstArrayKey( _a554 );
|
foreach ( s_lion_spot in a_lion_spots )
|
||||||
while ( isDefined( _k554 ) )
|
{
|
||||||
{
|
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||||
s_lion_spot = _a554[ _k554 ];
|
{
|
||||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
continue;
|
||||||
{
|
continue;
|
||||||
}
|
}
|
||||||
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
|
|
||||||
{
|
if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) )
|
||||||
s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete();
|
{
|
||||||
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
|
s_lion_spot.pts_putdown_trigs[player.characterindex] delete();
|
||||||
}
|
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
|
||||||
_k554 = getNextArrayKey( _a554, _k554 );
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pts_putdown_trigs_remove_for_spot( s_lion_spot )
|
pts_putdown_trigs_remove_for_spot( s_lion_spot )
|
||||||
{
|
{
|
||||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
foreach ( t_putdown in s_lion_spot.pts_putdown_trigs )
|
||||||
_a575 = s_lion_spot.pts_putdown_trigs;
|
t_putdown delete();
|
||||||
_k575 = getFirstArrayKey( _a575 );
|
|
||||||
while ( isDefined( _k575 ) )
|
s_lion_spot.pts_putdown_trigs = [];
|
||||||
{
|
|
||||||
t_putdown = _a575[ _k575 ];
|
|
||||||
t_putdown delete();
|
|
||||||
_k575 = getNextArrayKey( _a575, _k575 );
|
|
||||||
}
|
|
||||||
s_lion_spot.pts_putdown_trigs = [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofen_pts_instructions()
|
richtofen_pts_instructions()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofen_pts_placed()
|
richtofen_pts_placed()
|
||||||
{
|
{
|
||||||
level waittill( "sq_pts_springad_count1" );
|
level waittill( "sq_pts_springad_count1" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
|
|
||||||
level waittill( "sq_pts_springad_count2" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
|
|
||||||
level waittill( "sq_pts_springad_count3" );
|
level waittill( "sq_pts_springad_count2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
|
|
||||||
level waittill( "sq_pts_springad_count4" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
|
|
||||||
|
level waittill( "sq_pts_springad_count3" );
|
||||||
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
|
||||||
|
|
||||||
|
level waittill( "sq_pts_springad_count4" );
|
||||||
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
|
||||||
}
|
}
|
||||||
|
|
||||||
richtofen_zombies_launched()
|
richtofen_zombies_launched()
|
||||||
{
|
{
|
||||||
level waittill( "pts1_say_next_line" );
|
level waittill( "pts1_say_next_line" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
|
|
||||||
wait 1;
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
|
||||||
level waittill( "pts1_say_next_line" );
|
wait 1;
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
|
|
||||||
wait 1;
|
level waittill( "pts1_say_next_line" );
|
||||||
level waittill( "pts1_say_next_line" );
|
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
|
||||||
|
wait 1;
|
||||||
|
|
||||||
|
level waittill( "pts1_say_next_line" );
|
||||||
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
maxis_pts_instructions()
|
maxis_pts_instructions()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
maxis_pts_placed()
|
maxis_pts_placed()
|
||||||
{
|
{
|
||||||
level waittill( "sq_pts_springad_count1" );
|
level waittill( "sq_pts_springad_count1" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
|
|
||||||
level waittill( "sq_pts_springad_count2" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
|
|
||||||
level waittill( "sq_pts_springad_count4" );
|
level waittill( "sq_pts_springad_count2" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
|
|
||||||
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
|
||||||
|
|
||||||
|
level waittill( "sq_pts_springad_count4" );
|
||||||
|
|
||||||
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
|
||||||
}
|
}
|
||||||
|
|
||||||
maxis_balls_placed()
|
maxis_balls_placed()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
|
||||||
}
|
}
|
||||||
|
@ -1,199 +1,206 @@
|
|||||||
#include maps/mp/zm_highrise_sq_pts;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_highrise_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_highrise_sq;
|
||||||
|
#include maps\mp\zm_highrise_sq_pts;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
flag_init( "sq_slb_first_ball_sniped" );
|
flag_init( "sq_slb_first_ball_sniped" );
|
||||||
flag_init( "sq_slb_richtofen_spoke" );
|
flag_init( "sq_slb_richtofen_spoke" );
|
||||||
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage()
|
init_stage()
|
||||||
{
|
{
|
||||||
level._cur_stage_name = "slb";
|
level._cur_stage_name = "slb";
|
||||||
clientnotify( "slb" );
|
clientnotify( "slb" );
|
||||||
level thread vo_maxis_slb_hint();
|
level thread vo_maxis_slb_hint();
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic()
|
stage_logic()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "SLB Started" );
|
iprintlnbold( "SLB Started" );
|
||||||
#/
|
#/
|
||||||
snipe_balls_wait();
|
snipe_balls_wait();
|
||||||
stage_completed( "sq", level._cur_stage_name );
|
stage_completed( "sq", level._cur_stage_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_1( success )
|
exit_stage_1( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
snipe_balls_wait()
|
snipe_balls_wait()
|
||||||
{
|
{
|
||||||
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
|
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
|
||||||
array_thread( a_balls, ::snipe_balls_watch_ball );
|
array_thread( a_balls, ::snipe_balls_watch_ball );
|
||||||
is_complete = 0;
|
is_complete = 0;
|
||||||
while ( !is_complete )
|
|
||||||
{
|
while ( !is_complete )
|
||||||
level waittill( "zm_ball_shot" );
|
{
|
||||||
wait 1;
|
level waittill( "zm_ball_shot" );
|
||||||
is_complete = 1;
|
|
||||||
_a50 = a_balls;
|
wait 1;
|
||||||
_k50 = getFirstArrayKey( _a50 );
|
is_complete = 1;
|
||||||
while ( isDefined( _k50 ) )
|
|
||||||
{
|
foreach ( m_ball in a_balls )
|
||||||
m_ball = _a50[ _k50 ];
|
{
|
||||||
if ( isDefined( m_ball ) )
|
if ( isdefined( m_ball ) )
|
||||||
{
|
is_complete = 0;
|
||||||
is_complete = 0;
|
}
|
||||||
}
|
}
|
||||||
_k50 = getNextArrayKey( _a50, _k50 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "All Balls Shot" );
|
iprintlnbold( "All Balls Shot" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
snipe_balls_watch_ball()
|
snipe_balls_watch_ball()
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
|
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
{
|
||||||
if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
|
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||||
{
|
|
||||||
level notify( "zm_ball_shot" );
|
if ( maps\mp\zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
|
||||||
playsoundatposition( "zmb_sq_ball_ding", self.origin );
|
{
|
||||||
playfx( level._effect[ "sidequest_flash" ], self.origin );
|
level notify( "zm_ball_shot" );
|
||||||
str_noteworthy = self.script_noteworthy;
|
playsoundatposition( "zmb_sq_ball_ding", self.origin );
|
||||||
self delete();
|
playfx( level._effect["sidequest_flash"], self.origin );
|
||||||
wait 0,5;
|
str_noteworthy = self.script_noteworthy;
|
||||||
clientnotify( str_noteworthy );
|
self delete();
|
||||||
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
|
wait 0.5;
|
||||||
if ( str_noteworthy == "m_drg_tail" )
|
clientnotify( str_noteworthy );
|
||||||
{
|
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
|
||||||
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
|
|
||||||
}
|
if ( str_noteworthy == "m_drg_tail" )
|
||||||
playfx( level._effect[ "sidequest_flash" ], m_ball.origin );
|
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
|
||||||
m_ball show();
|
|
||||||
m_ball thread lion_ball_enable_pickup();
|
playfx( level._effect["sidequest_flash"], m_ball.origin );
|
||||||
if ( !flag( "sq_slb_first_ball_sniped" ) )
|
m_ball show();
|
||||||
{
|
m_ball thread lion_ball_enable_pickup();
|
||||||
flag_set( "sq_slb_first_ball_sniped" );
|
|
||||||
level thread vo_atd_ball1_sniped();
|
if ( !flag( "sq_slb_first_ball_sniped" ) )
|
||||||
break;
|
{
|
||||||
}
|
flag_set( "sq_slb_first_ball_sniped" );
|
||||||
else
|
level thread vo_atd_ball1_sniped();
|
||||||
{
|
}
|
||||||
level thread vo_maxis_atd_ball2_sniped();
|
else
|
||||||
}
|
level thread vo_maxis_atd_ball2_sniped();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lion_ball_enable_pickup()
|
lion_ball_enable_pickup()
|
||||||
{
|
{
|
||||||
self endon( "sq_sliquified" );
|
self endon( "sq_sliquified" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self.can_pickup = 1;
|
{
|
||||||
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
|
self.can_pickup = 1;
|
||||||
while ( self.can_pickup )
|
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
|
||||||
{
|
|
||||||
self.t_pickup waittill( "trigger", player );
|
while ( self.can_pickup )
|
||||||
if ( !isDefined( player.zm_sq_has_ball ) )
|
{
|
||||||
{
|
self.t_pickup waittill( "trigger", player );
|
||||||
player.zm_sq_has_ball = 1;
|
|
||||||
player.which_ball = self;
|
if ( !isdefined( player.zm_sq_has_ball ) )
|
||||||
self.can_pickup = 0;
|
{
|
||||||
self.player = player;
|
player.zm_sq_has_ball = 1;
|
||||||
flag_set( "sq_ball_picked_up" );
|
player.which_ball = self;
|
||||||
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player );
|
self.can_pickup = 0;
|
||||||
level notify( "zm_ball_picked_up" );
|
self.player = player;
|
||||||
}
|
flag_set( "sq_ball_picked_up" );
|
||||||
}
|
level thread maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs( player );
|
||||||
self.t_pickup delete();
|
level notify( "zm_ball_picked_up", player );
|
||||||
self hide();
|
}
|
||||||
self setcandamage( 0 );
|
}
|
||||||
wait 1;
|
|
||||||
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
self.t_pickup delete();
|
||||||
self.player clientclaimtrigger( self.t_putdown );
|
self hide();
|
||||||
self.player.t_putdown_ball = self.t_putdown;
|
self setcandamage( 0 );
|
||||||
self ball_pickup_waittill_change();
|
wait 1;
|
||||||
play_spark = 0;
|
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
|
||||||
if ( !isDefined( self.t_putdown ) )
|
self.player clientclaimtrigger( self.t_putdown );
|
||||||
{
|
self.player.t_putdown_ball = self.t_putdown;
|
||||||
self waittill( "sq_pickup_reset" );
|
self ball_pickup_waittill_change();
|
||||||
play_spark = 1;
|
play_spark = 0;
|
||||||
}
|
|
||||||
else
|
if ( !isdefined( self.t_putdown ) )
|
||||||
{
|
{
|
||||||
self.t_putdown delete();
|
self waittill( "sq_pickup_reset" );
|
||||||
}
|
|
||||||
self.player notify( "zm_sq_ball_putdown" );
|
play_spark = 1;
|
||||||
if ( play_spark )
|
}
|
||||||
{
|
else
|
||||||
self.sq_pickup_reset = undefined;
|
self.t_putdown delete();
|
||||||
playfx( level._effect[ "sidequest_flash" ], self.origin );
|
|
||||||
}
|
self.player notify( "zm_sq_ball_putdown" );
|
||||||
self show();
|
|
||||||
self setcandamage( 1 );
|
if ( play_spark )
|
||||||
self.player.zm_sq_has_ball = undefined;
|
{
|
||||||
self.player = undefined;
|
self.sq_pickup_reset = undefined;
|
||||||
wait 1;
|
playfx( level._effect["sidequest_flash"], self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self show();
|
||||||
|
self setcandamage( 1 );
|
||||||
|
self.player.zm_sq_has_ball = undefined;
|
||||||
|
self.player = undefined;
|
||||||
|
wait 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ball_pickup_waittill_change()
|
ball_pickup_waittill_change()
|
||||||
{
|
{
|
||||||
self endon( "sq_pickup_reset" );
|
self endon( "sq_pickup_reset" );
|
||||||
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
|
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string )
|
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||||
{
|
{
|
||||||
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
|
||||||
t_pickup setcursorhint( "HINT_NOICON" );
|
t_pickup setcursorhint( "HINT_NOICON" );
|
||||||
t_pickup sethintstring( str_hint_string );
|
t_pickup sethintstring( str_hint_string );
|
||||||
t_pickup.targetname = "ball_pickup_trig";
|
t_pickup.targetname = "ball_pickup_trig";
|
||||||
t_pickup triggerignoreteam();
|
t_pickup triggerignoreteam();
|
||||||
t_pickup usetriggerrequirelookat();
|
t_pickup usetriggerrequirelookat();
|
||||||
return t_pickup;
|
return t_pickup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_atd_ball_sniped()
|
vo_richtofen_atd_ball_sniped()
|
||||||
{
|
{
|
||||||
if ( !flag( "sq_slb_richtofen_spoke" ) )
|
if ( !flag( "sq_slb_richtofen_spoke" ) )
|
||||||
{
|
{
|
||||||
flag_set( "sq_slb_richtofen_spoke" );
|
flag_set( "sq_slb_richtofen_spoke" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_slb_hint()
|
vo_maxis_slb_hint()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_atd_ball1_sniped()
|
vo_maxis_atd_ball1_sniped()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_atd_ball2_sniped()
|
vo_maxis_atd_ball2_sniped()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_atd_ball1_sniped()
|
vo_atd_ball1_sniped()
|
||||||
{
|
{
|
||||||
vo_richtofen_atd_ball_sniped();
|
vo_richtofen_atd_ball_sniped();
|
||||||
level thread vo_maxis_atd_ball1_sniped();
|
level thread vo_maxis_atd_ball1_sniped();
|
||||||
}
|
}
|
||||||
|
@ -1,328 +1,318 @@
|
|||||||
#include maps/mp/zm_highrise_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
// 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_spawner;
|
||||||
|
#include maps\mp\zm_highrise_sq;
|
||||||
|
|
||||||
init_1()
|
init_1()
|
||||||
{
|
{
|
||||||
flag_init( "ssp1_ball0_complete" );
|
flag_init( "ssp1_ball0_complete" );
|
||||||
flag_init( "ssp1_ball1_complete" );
|
flag_init( "ssp1_ball1_complete" );
|
||||||
flag_init( "ssp1_complete" );
|
flag_init( "ssp1_complete" );
|
||||||
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_2()
|
init_2()
|
||||||
{
|
{
|
||||||
flag_init( "ssp2_maxis_keep_going_said" );
|
flag_init( "ssp2_maxis_keep_going_said" );
|
||||||
flag_init( "ssp2_maxis_reincarnate_said" );
|
flag_init( "ssp2_maxis_reincarnate_said" );
|
||||||
flag_init( "ssp2_corpses_in_place" );
|
flag_init( "ssp2_corpses_in_place" );
|
||||||
flag_init( "ssp2_resurrection_done" );
|
flag_init( "ssp2_resurrection_done" );
|
||||||
flag_init( "ssp2_statue_complete" );
|
flag_init( "ssp2_statue_complete" );
|
||||||
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
|
maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
|
||||||
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage_1()
|
init_stage_1()
|
||||||
{
|
{
|
||||||
clientnotify( "ssp_1" );
|
clientnotify( "ssp_1" );
|
||||||
level thread vo_richtofen_instructions();
|
level thread vo_richtofen_instructions();
|
||||||
}
|
}
|
||||||
|
|
||||||
init_stage_2()
|
init_stage_2()
|
||||||
{
|
{
|
||||||
clientnotify( "ssp_2" );
|
clientnotify( "ssp_2" );
|
||||||
level thread vo_maxis_start_ssp();
|
level thread vo_maxis_start_ssp();
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic_1()
|
stage_logic_1()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "SSP1 Started" );
|
iprintlnbold( "SSP1 Started" );
|
||||||
#/
|
#/
|
||||||
ssp1_sliquify_balls();
|
ssp1_sliquify_balls();
|
||||||
stage_completed( "sq_1", "ssp_1" );
|
stage_completed( "sq_1", "ssp_1" );
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp1_sliquify_balls()
|
ssp1_sliquify_balls()
|
||||||
{
|
{
|
||||||
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
|
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
|
||||||
level thread vo_sliquify_fail_watch();
|
level thread vo_sliquify_fail_watch();
|
||||||
level thread ssp1_advance_dragon();
|
level thread ssp1_advance_dragon();
|
||||||
level thread vo_richtofen_sliquify_confirm();
|
level thread vo_richtofen_sliquify_confirm();
|
||||||
level thread vo_maxis_sliquify_fail();
|
level thread vo_maxis_sliquify_fail();
|
||||||
i = 0;
|
|
||||||
while ( i < a_balls.size )
|
for ( i = 0; i < a_balls.size; i++ )
|
||||||
{
|
a_balls[i] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
|
||||||
a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
|
|
||||||
i++;
|
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
|
||||||
}
|
{
|
||||||
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
|
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||||
{
|
wait 0.5;
|
||||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
}
|
||||||
wait 0,5;
|
|
||||||
}
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp1_watch_ball( str_complete_flag )
|
ssp1_watch_ball( str_complete_flag )
|
||||||
{
|
{
|
||||||
self watch_model_sliquification( 20, str_complete_flag );
|
self watch_model_sliquification( 20, str_complete_flag );
|
||||||
self thread ssp1_rotate_ball();
|
self thread ssp1_rotate_ball();
|
||||||
self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 );
|
self playloopsound( "zmb_sq_ball_rotate_loop", 0.25 );
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp1_rotate_ball()
|
ssp1_rotate_ball()
|
||||||
{
|
{
|
||||||
while ( isDefined( self ) )
|
while ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
self rotateyaw( 360, 1 );
|
self rotateyaw( 360, 1 );
|
||||||
wait 0,9;
|
wait 0.9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp1_advance_dragon()
|
ssp1_advance_dragon()
|
||||||
{
|
{
|
||||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_logic_2()
|
stage_logic_2()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "SSP2 Started" );
|
iprintlnbold( "SSP2 Started" );
|
||||||
#/
|
#/
|
||||||
level thread ssp2_advance_dragon();
|
level thread ssp2_advance_dragon();
|
||||||
corpse_room_watcher();
|
corpse_room_watcher();
|
||||||
stage_completed( "sq_2", "ssp_2" );
|
stage_completed( "sq_2", "ssp_2" );
|
||||||
}
|
}
|
||||||
|
|
||||||
corpse_room_watcher()
|
corpse_room_watcher()
|
||||||
{
|
{
|
||||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||||
n_count = 0;
|
n_count = 0;
|
||||||
while ( !flag( "ssp2_resurrection_done" ) )
|
|
||||||
{
|
while ( !flag( "ssp2_resurrection_done" ) )
|
||||||
level waittill( "ssp2_corpse_made", is_in_room );
|
{
|
||||||
if ( is_in_room )
|
level waittill( "ssp2_corpse_made", is_in_room );
|
||||||
{
|
|
||||||
n_count++;
|
if ( is_in_room )
|
||||||
}
|
n_count++;
|
||||||
else
|
else
|
||||||
{
|
n_count = 0;
|
||||||
n_count = 0;
|
|
||||||
}
|
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
|
||||||
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
|
{
|
||||||
{
|
flag_set( "ssp2_maxis_keep_going_said" );
|
||||||
flag_set( "ssp2_maxis_keep_going_said" );
|
level thread maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
|
||||||
level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
|
}
|
||||||
continue;
|
else if ( n_count >= 15 )
|
||||||
}
|
{
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( n_count >= 15 )
|
|
||||||
{
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Corpse Count Reached" );
|
iprintlnbold( "Corpse Count Reached" );
|
||||||
#/
|
#/
|
||||||
level thread vo_maxis_ssp_reincarnate();
|
level thread vo_maxis_ssp_reincarnate();
|
||||||
flag_set( "ssp2_corpses_in_place" );
|
flag_set( "ssp2_corpses_in_place" );
|
||||||
corpse_room_revive_watcher();
|
corpse_room_revive_watcher();
|
||||||
level notify( "end_revive_watcher" );
|
level notify( "end_revive_watcher" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp_2_zombie_death_check()
|
ssp_2_zombie_death_check()
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||||
if ( self istouching( t_corpse_room ) )
|
|
||||||
{
|
if ( self istouching( t_corpse_room ) )
|
||||||
level notify( "ssp2_corpse_made" );
|
level notify( "ssp2_corpse_made", 1 );
|
||||||
}
|
else
|
||||||
else
|
level notify( "ssp2_corpse_made", 0 );
|
||||||
{
|
|
||||||
level notify( "ssp2_corpse_made" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
corpse_room_cleanup_watcher()
|
corpse_room_cleanup_watcher()
|
||||||
{
|
{
|
||||||
level endon( "ssp2_resurrection_done" );
|
level endon( "ssp2_resurrection_done" );
|
||||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
wait 1;
|
{
|
||||||
a_corpses = getcorpsearray();
|
wait 1;
|
||||||
if ( a_corpses.size < 15 )
|
a_corpses = getcorpsearray();
|
||||||
{
|
|
||||||
level thread vo_maxis_ssp_fail();
|
if ( a_corpses.size < 15 )
|
||||||
level notify( "end_revive_watcher" );
|
{
|
||||||
return;
|
level thread vo_maxis_ssp_fail();
|
||||||
}
|
level notify( "end_revive_watcher" );
|
||||||
n_count = 0;
|
return;
|
||||||
_a206 = a_corpses;
|
}
|
||||||
_k206 = getFirstArrayKey( _a206 );
|
|
||||||
while ( isDefined( _k206 ) )
|
n_count = 0;
|
||||||
{
|
|
||||||
m_corpse = _a206[ _k206 ];
|
foreach ( m_corpse in a_corpses )
|
||||||
if ( m_corpse istouching( t_corpse_room ) )
|
{
|
||||||
{
|
if ( m_corpse istouching( t_corpse_room ) )
|
||||||
n_count++;
|
n_count++;
|
||||||
}
|
}
|
||||||
_k206 = getNextArrayKey( _a206, _k206 );
|
|
||||||
}
|
if ( n_count < 15 )
|
||||||
if ( n_count < 15 )
|
{
|
||||||
{
|
level thread vo_maxis_ssp_fail();
|
||||||
level thread vo_maxis_ssp_fail();
|
level notify( "end_revive_watcher" );
|
||||||
level notify( "end_revive_watcher" );
|
return;
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
corpse_room_revive_watcher()
|
corpse_room_revive_watcher()
|
||||||
{
|
{
|
||||||
level endon( "end_revive_watcher" );
|
level endon( "end_revive_watcher" );
|
||||||
weaponname = "none";
|
weaponname = "none";
|
||||||
str_type = "none";
|
str_type = "none";
|
||||||
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
|
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
|
||||||
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
|
|
||||||
{
|
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
|
||||||
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
|
{
|
||||||
if ( isplayer( inflictor ) )
|
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
|
||||||
{
|
|
||||||
weaponname = inflictor.currentweapon;
|
if ( isplayer( inflictor ) )
|
||||||
str_type = type;
|
{
|
||||||
}
|
weaponname = inflictor.currentweapon;
|
||||||
}
|
str_type = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Revive Complete" );
|
iprintlnbold( "Revive Complete" );
|
||||||
#/
|
#/
|
||||||
vo_maxis_ssp_complete();
|
vo_maxis_ssp_complete();
|
||||||
flag_set( "ssp2_resurrection_done" );
|
flag_set( "ssp2_resurrection_done" );
|
||||||
}
|
}
|
||||||
|
|
||||||
ssp2_advance_dragon()
|
ssp2_advance_dragon()
|
||||||
{
|
{
|
||||||
flag_wait( "ssp2_corpses_in_place" );
|
flag_wait( "ssp2_corpses_in_place" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 1 );
|
||||||
flag_wait( "ssp2_resurrection_done" );
|
flag_wait( "ssp2_resurrection_done" );
|
||||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_1( success )
|
exit_stage_1( success )
|
||||||
{
|
{
|
||||||
flag_set( "ssp1_complete" );
|
flag_set( "ssp1_complete" );
|
||||||
}
|
}
|
||||||
|
|
||||||
exit_stage_2( success )
|
exit_stage_2( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_model_sliquification( n_end_limit, str_complete_flag )
|
watch_model_sliquification( n_end_limit, str_complete_flag )
|
||||||
{
|
{
|
||||||
n_count = 0;
|
n_count = 0;
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
while ( !flag( str_complete_flag ) )
|
|
||||||
{
|
while ( !flag( str_complete_flag ) )
|
||||||
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
{
|
||||||
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||||
{
|
|
||||||
n_count++;
|
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
||||||
if ( n_count >= n_end_limit )
|
{
|
||||||
{
|
n_count++;
|
||||||
|
|
||||||
|
if ( n_count >= n_end_limit )
|
||||||
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
|
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
|
||||||
#/
|
#/
|
||||||
self notify( "sq_sliquified" );
|
self notify( "sq_sliquified" );
|
||||||
if ( isDefined( self.t_pickup ) )
|
|
||||||
{
|
if ( isdefined( self.t_pickup ) )
|
||||||
self.t_pickup delete();
|
self.t_pickup delete();
|
||||||
}
|
|
||||||
flag_set( str_complete_flag );
|
flag_set( str_complete_flag );
|
||||||
break;
|
}
|
||||||
}
|
else if ( n_count == 1 )
|
||||||
else if ( n_count == 1 )
|
level notify( "ssp1_ball_first_sliquified" );
|
||||||
{
|
else if ( n_count == 10 )
|
||||||
level notify( "ssp1_ball_first_sliquified" );
|
level notify( "ssp1_ball_sliquified_2" );
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( n_count == 10 )
|
|
||||||
{
|
|
||||||
level notify( "ssp1_ball_sliquified_2" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_instructions()
|
vo_richtofen_instructions()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
|
||||||
wait 10;
|
wait 10;
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_sliquify_fail_watch()
|
vo_sliquify_fail_watch()
|
||||||
{
|
{
|
||||||
flag_wait( "sq_ball_picked_up" );
|
flag_wait( "sq_ball_picked_up" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_richtofen_sliquify_confirm()
|
vo_richtofen_sliquify_confirm()
|
||||||
{
|
{
|
||||||
level waittill( "ssp1_ball_first_sliquified" );
|
level waittill( "ssp1_ball_first_sliquified" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
|
|
||||||
level waittill( "ssp1_ball_sliquified_2" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
|
|
||||||
flag_wait( "ssp1_complete" );
|
level waittill( "ssp1_ball_sliquified_2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
|
|
||||||
wait 10;
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
|
flag_wait( "ssp1_complete" );
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
|
||||||
|
wait 10;
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_sliquify_fail()
|
vo_maxis_sliquify_fail()
|
||||||
{
|
{
|
||||||
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_start_ssp()
|
vo_maxis_start_ssp()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_ssp_reincarnate()
|
vo_maxis_ssp_reincarnate()
|
||||||
{
|
{
|
||||||
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
|
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
|
||||||
{
|
{
|
||||||
flag_set( "ssp2_maxis_reincarnate_said" );
|
flag_set( "ssp2_maxis_reincarnate_said" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
flag_clear( "ssp2_maxis_reincarnate_said" );
|
||||||
flag_clear( "ssp2_maxis_reincarnate_said" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_ssp_fail()
|
vo_maxis_ssp_fail()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_maxis_ssp_complete()
|
vo_maxis_ssp_complete()
|
||||||
{
|
{
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
|
||||||
}
|
}
|
||||||
|
@ -1,280 +1,274 @@
|
|||||||
#include maps/mp/zombies/_zm_ffotd;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#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_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_ffotd;
|
||||||
|
|
||||||
main_start()
|
main_start()
|
||||||
{
|
{
|
||||||
level thread spawned_collision_fix();
|
level thread spawned_collision_fix();
|
||||||
level thread kill_trigger_spawn();
|
level thread kill_trigger_spawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
main_end()
|
main_end()
|
||||||
{
|
{
|
||||||
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
|
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
|
||||||
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
|
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
|
||||||
level thread pathfinding_override_fix();
|
level thread pathfinding_override_fix();
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned_collision_fix()
|
spawned_collision_fix()
|
||||||
{
|
{
|
||||||
precachemodel( "collision_geo_512x512x512_standard" );
|
precachemodel( "collision_geo_512x512x512_standard" );
|
||||||
precachemodel( "collision_geo_32x32x128_standard" );
|
precachemodel( "collision_geo_32x32x128_standard" );
|
||||||
precachemodel( "collision_geo_64x64x256_standard" );
|
precachemodel( "collision_geo_64x64x256_standard" );
|
||||||
precachemodel( "collision_wall_128x128x10_standard" );
|
precachemodel( "collision_wall_128x128x10_standard" );
|
||||||
precachemodel( "collision_wall_256x256x10_standard" );
|
precachemodel( "collision_wall_256x256x10_standard" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
if ( !is_true( level.optimise_for_splitscreen ) )
|
|
||||||
{
|
if ( !is_true( level.optimise_for_splitscreen ) )
|
||||||
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
|
{
|
||||||
collision1 setmodel( "collision_geo_512x512x512_standard" );
|
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
|
||||||
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision1 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision1 ghost();
|
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
|
collision1 ghost();
|
||||||
collision2 setmodel( "collision_geo_512x512x512_standard" );
|
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
|
||||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision2 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision2 ghost();
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
|
collision2 ghost();
|
||||||
collision3 setmodel( "collision_geo_512x512x512_standard" );
|
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
|
||||||
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision3 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision3 ghost();
|
collision3.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
|
collision3 ghost();
|
||||||
collision4 setmodel( "collision_geo_512x512x512_standard" );
|
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
|
||||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision4 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision4 ghost();
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
|
collision4 ghost();
|
||||||
collision5 setmodel( "collision_geo_512x512x512_standard" );
|
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
|
||||||
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision5 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision5 ghost();
|
collision5.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
|
collision5 ghost();
|
||||||
collision6 setmodel( "collision_geo_512x512x512_standard" );
|
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
|
||||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision6 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision6 ghost();
|
collision6.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
|
collision6 ghost();
|
||||||
collision7 setmodel( "collision_geo_512x512x512_standard" );
|
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
|
||||||
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision7 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision7 ghost();
|
collision7.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
|
collision7 ghost();
|
||||||
collision8 setmodel( "collision_geo_512x512x512_standard" );
|
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
|
||||||
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision8 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision8 ghost();
|
collision8.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
|
collision8 ghost();
|
||||||
collision9 setmodel( "collision_geo_512x512x512_standard" );
|
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
|
||||||
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision9 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision9 ghost();
|
collision9.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
|
collision9 ghost();
|
||||||
collision10 setmodel( "collision_geo_512x512x512_standard" );
|
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
|
||||||
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision10 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision10 ghost();
|
collision10.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
|
collision10 ghost();
|
||||||
collision11 setmodel( "collision_geo_512x512x512_standard" );
|
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
|
||||||
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision11 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision11 ghost();
|
collision11.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
|
collision11 ghost();
|
||||||
collision12 setmodel( "collision_geo_512x512x512_standard" );
|
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
|
||||||
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision12 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision12 ghost();
|
collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
collision12 ghost();
|
||||||
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
||||||
collisione1.angles = ( 0, 0, 0 );
|
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione1 ghost();
|
collisione1.angles = ( 0, 0, 0 );
|
||||||
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
|
collisione1 ghost();
|
||||||
collisione2 setmodel( "collision_wall_256x256x10_standard" );
|
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
|
||||||
collisione2.angles = ( 0, 0, 0 );
|
collisione2 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione2 ghost();
|
collisione2.angles = ( 0, 0, 0 );
|
||||||
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
collisione2 ghost();
|
||||||
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
||||||
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione3 ghost();
|
collisione3.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
|
collisione3 ghost();
|
||||||
collisione4 setmodel( "collision_wall_256x256x10_standard" );
|
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
|
||||||
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione4 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione4 ghost();
|
collisione4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
|
collisione4 ghost();
|
||||||
collisione5 setmodel( "collision_wall_256x256x10_standard" );
|
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
|
||||||
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione5 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione5 ghost();
|
collisione5.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
|
collisione5 ghost();
|
||||||
collisione6 setmodel( "collision_wall_256x256x10_standard" );
|
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
|
||||||
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione6 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione6 ghost();
|
collisione6.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
|
collisione6 ghost();
|
||||||
collision13 setmodel( "collision_wall_128x128x10_standard" );
|
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
|
||||||
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collision13 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision13 ghost();
|
collision13.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
|
collision13 ghost();
|
||||||
collision14 setmodel( "collision_geo_512x512x512_standard" );
|
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
|
||||||
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 );
|
collision14 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision14 ghost();
|
collision14.angles = vectorscale( ( 0, 0, -1 ), 6.20013 );
|
||||||
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
|
collision14 ghost();
|
||||||
collision15 setmodel( "collision_wall_128x128x10_standard" );
|
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
|
||||||
collision15.angles = ( 0, 240,4, -3,00014 );
|
collision15 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision15 ghost();
|
collision15.angles = ( 0, 240.4, -3.00014 );
|
||||||
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
|
collision15 ghost();
|
||||||
collision16 setmodel( "collision_wall_128x128x10_standard" );
|
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
|
||||||
collision16.angles = ( 0, 60, -2,60003 );
|
collision16 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision16 ghost();
|
collision16.angles = ( 0, 60, -2.60003 );
|
||||||
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
|
collision16 ghost();
|
||||||
collision17 setmodel( "collision_wall_128x128x10_standard" );
|
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
|
||||||
collision17.angles = ( 0, 60, -2,60003 );
|
collision17 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision17 ghost();
|
collision17.angles = ( 0, 60, -2.60003 );
|
||||||
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
|
collision17 ghost();
|
||||||
collision18 setmodel( "collision_geo_64x64x256_standard" );
|
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
|
||||||
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 );
|
collision18 setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision18 ghost();
|
collision18.angles = vectorscale( ( 1, 0, 0 ), 350.0 );
|
||||||
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
|
collision18 ghost();
|
||||||
collision19 setmodel( "collision_geo_32x32x128_standard" );
|
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
|
||||||
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision19 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision19 ghost();
|
collision19.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
|
collision19 ghost();
|
||||||
collision20 setmodel( "collision_wall_128x128x10_standard" );
|
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
|
||||||
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision20 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision20 ghost();
|
collision20.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
|
collision20 ghost();
|
||||||
collision21 setmodel( "collision_geo_32x32x128_standard" );
|
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
|
||||||
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 );
|
collision21 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision21 ghost();
|
collision21.angles = vectorscale( ( 0, 1, 0 ), 8.6 );
|
||||||
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
|
collision21 ghost();
|
||||||
collision22 setmodel( "collision_geo_32x32x128_standard" );
|
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
|
||||||
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 );
|
collision22 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision22 ghost();
|
collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 );
|
||||||
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
collision22 ghost();
|
||||||
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
||||||
collision23.angles = ( 0, 0, 0 );
|
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision23 ghost();
|
collision23.angles = ( 0, 0, 0 );
|
||||||
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
|
collision23 ghost();
|
||||||
collision24 setmodel( "collision_geo_32x32x128_standard" );
|
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
|
||||||
collision24.angles = ( 0, 0, 0 );
|
collision24 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision24 ghost();
|
collision24.angles = ( 0, 0, 0 );
|
||||||
}
|
collision24 ghost();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
|
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
|
||||||
{
|
{
|
||||||
if ( !isDefined( one_way ) )
|
if ( !isdefined( one_way ) )
|
||||||
{
|
one_way = 0;
|
||||||
one_way = 0;
|
|
||||||
}
|
zone_init( zone_name_a );
|
||||||
zone_init( zone_name_a );
|
zone_init( zone_name_b );
|
||||||
zone_init( zone_name_b );
|
enable_zone( zone_name_a );
|
||||||
enable_zone( zone_name_a );
|
enable_zone( zone_name_b );
|
||||||
enable_zone( zone_name_b );
|
|
||||||
if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) )
|
if ( !isdefined( level.zones[zone_name_a].adjacent_zones[zone_name_b] ) )
|
||||||
{
|
level.zones[zone_name_a].adjacent_zones[zone_name_b] = spawnstruct();
|
||||||
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct();
|
|
||||||
}
|
level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1;
|
||||||
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1;
|
|
||||||
if ( !one_way )
|
if ( !one_way )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) )
|
if ( !isdefined( level.zones[zone_name_b].adjacent_zones[zone_name_a] ) )
|
||||||
{
|
level.zones[zone_name_b].adjacent_zones[zone_name_a] = spawnstruct();
|
||||||
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct();
|
|
||||||
}
|
level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1;
|
||||||
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_trigger_spawn()
|
kill_trigger_spawn()
|
||||||
{
|
{
|
||||||
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
|
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
|
||||||
trig.angles = vectorScale( ( 0, 0, 0 ), 150 );
|
trig.angles = vectorscale( ( 0, 1, 0 ), 150.0 );
|
||||||
trig.targetname = "instant_death";
|
trig.targetname = "instant_death";
|
||||||
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
|
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
|
||||||
trig2.angles = ( 0, 0, 0 );
|
trig2.angles = ( 0, 0, 0 );
|
||||||
trig2.targetname = "instant_death";
|
trig2.targetname = "instant_death";
|
||||||
}
|
}
|
||||||
|
|
||||||
pathfinding_override_fix()
|
pathfinding_override_fix()
|
||||||
{
|
{
|
||||||
zombie_trigger_origin = ( 2303, 746, 1296 );
|
zombie_trigger_origin = ( 2303, 746, 1296 );
|
||||||
zombie_trigger_radius = 30;
|
zombie_trigger_radius = 30;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 2357, 778, 1304 );
|
player_trigger_origin = ( 2357, 778, 1304 );
|
||||||
player_trigger_radius = 40;
|
player_trigger_radius = 40;
|
||||||
zombie_goto_point = ( 2361, 738, 1304 );
|
zombie_goto_point = ( 2361, 738, 1304 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3767, 1867, 2790 );
|
zombie_trigger_origin = ( 3767, 1867, 2790 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3684, 1772, 2758 );
|
player_trigger_origin = ( 3684, 1772, 2758 );
|
||||||
player_trigger_radius = 70;
|
player_trigger_radius = 70;
|
||||||
zombie_goto_point = ( 3659, 1872, 2790 );
|
zombie_goto_point = ( 3659, 1872, 2790 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3245, 1251, 1347,79 );
|
zombie_trigger_origin = ( 3245, 1251, 1347.79 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3246, 1126, 1347,79 );
|
player_trigger_origin = ( 3246, 1126, 1347.79 );
|
||||||
player_trigger_radius = 64;
|
player_trigger_radius = 64;
|
||||||
zombie_goto_point = ( 3031, 1234, 1278,12 );
|
zombie_goto_point = ( 3031, 1234, 1278.12 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3246, 1113, 1347,79 );
|
zombie_trigger_origin = ( 3246, 1113, 1347.79 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3245, 1230, 1347,79 );
|
player_trigger_origin = ( 3245, 1230, 1347.79 );
|
||||||
player_trigger_radius = 44;
|
player_trigger_radius = 44;
|
||||||
zombie_goto_point = ( 3023, 1154, 1278,12 );
|
zombie_goto_point = ( 3023, 1154, 1278.12 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3389, 1182, 1364,79 );
|
zombie_trigger_origin = ( 3389, 1182, 1364.79 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3246, 1126, 1347,79 );
|
player_trigger_origin = ( 3246, 1126, 1347.79 );
|
||||||
player_trigger_radius = 64;
|
player_trigger_radius = 64;
|
||||||
zombie_goto_point = ( 3381, 1093, 1364,79 );
|
zombie_goto_point = ( 3381, 1093, 1364.79 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3148, 1712, 1299,07 );
|
zombie_trigger_origin = ( 3148, 1712, 1299.07 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3149, 1604, 1302,2 );
|
player_trigger_origin = ( 3149, 1604, 1302.2 );
|
||||||
player_trigger_radius = 44;
|
player_trigger_radius = 44;
|
||||||
zombie_goto_point = ( 3259, 1644, 1321,5 );
|
zombie_goto_point = ( 3259, 1644, 1321.5 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3149, 1584, 1302,2 );
|
zombie_trigger_origin = ( 3149, 1584, 1302.2 );
|
||||||
zombie_trigger_radius = 64;
|
zombie_trigger_radius = 64;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3148, 1692, 1299,07 );
|
player_trigger_origin = ( 3148, 1692, 1299.07 );
|
||||||
player_trigger_radius = 44;
|
player_trigger_radius = 44;
|
||||||
zombie_goto_point = ( 3291, 1684, 1321,5 );
|
zombie_goto_point = ( 3291, 1684, 1321.5 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
zombie_trigger_origin = ( 3818, 1860, 2789,23 );
|
zombie_trigger_origin = ( 3818, 1860, 2789.23 );
|
||||||
zombie_trigger_radius = 100;
|
zombie_trigger_radius = 100;
|
||||||
zombie_trigger_height = 128;
|
zombie_trigger_height = 128;
|
||||||
player_trigger_origin = ( 3601, 1961, 2744,95 );
|
player_trigger_origin = ( 3601, 1961, 2744.95 );
|
||||||
player_trigger_radius = 50;
|
player_trigger_radius = 50;
|
||||||
zombie_goto_point = ( 3626, 1918, 2750,26 );
|
zombie_goto_point = ( 3626, 1918, 2750.26 );
|
||||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||||
all_nodes = getallnodes();
|
all_nodes = getallnodes();
|
||||||
_a331 = all_nodes;
|
|
||||||
_k331 = getFirstArrayKey( _a331 );
|
foreach ( node in all_nodes )
|
||||||
while ( isDefined( _k331 ) )
|
{
|
||||||
{
|
if ( node.origin[0] == 3598.2 )
|
||||||
node = _a331[ _k331 ];
|
{
|
||||||
if ( node.origin[ 0 ] == 3598,2 )
|
deletepathnode( node );
|
||||||
{
|
break;
|
||||||
deletepathnode( node );
|
}
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_k331 = getNextArrayKey( _a331, _k331 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
highrise_link_nodes( a, b )
|
highrise_link_nodes( a, b )
|
||||||
{
|
{
|
||||||
if ( nodesarelinked( a, b ) )
|
if ( nodesarelinked( a, b ) )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
link_nodes( a, b );
|
||||||
link_nodes( a, b );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
highrise_unlink_nodes( a, b )
|
highrise_unlink_nodes( a, b )
|
||||||
{
|
{
|
||||||
if ( !nodesarelinked( a, b ) )
|
if ( !nodesarelinked( a, b ) )
|
||||||
{
|
return;
|
||||||
return;
|
|
||||||
}
|
unlink_nodes( a, b );
|
||||||
unlink_nodes( a, b );
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,304 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
|
||||||
|
|
||||||
|
if ( !isdefined( level.ta_vaultfee ) )
|
||||||
|
level.ta_vaultfee = 100;
|
||||||
|
|
||||||
|
if ( !isdefined( level.ta_tellerfee ) )
|
||||||
|
level.ta_tellerfee = 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.banking_map ) )
|
||||||
|
level.banking_map = level.script;
|
||||||
|
|
||||||
|
level thread bank_teller_init();
|
||||||
|
level thread bank_deposit_box();
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_teller_init()
|
||||||
|
{
|
||||||
|
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
|
||||||
|
|
||||||
|
if ( isdefined( level.bank_teller_dmg_trig ) )
|
||||||
|
{
|
||||||
|
level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" );
|
||||||
|
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
|
||||||
|
level thread bank_teller_logic();
|
||||||
|
level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 );
|
||||||
|
level.bank_teller_transfer_trig trigger_off();
|
||||||
|
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_teller_logic()
|
||||||
|
{
|
||||||
|
level endon( "end_game" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah );
|
||||||
|
|
||||||
|
if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
|
||||||
|
{
|
||||||
|
bank_teller_give_money();
|
||||||
|
level.bank_teller_transfer_trig trigger_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_teller_give_money()
|
||||||
|
{
|
||||||
|
level endon( "end_game" );
|
||||||
|
level endon( "stop_bank_teller" );
|
||||||
|
level.bank_teller_transfer_trig trigger_on();
|
||||||
|
bank_transfer = undefined;
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
level.bank_teller_transfer_trig waittill( "trigger", player );
|
||||||
|
|
||||||
|
if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( !isdefined( bank_transfer ) )
|
||||||
|
{
|
||||||
|
bank_transfer = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) );
|
||||||
|
bank_transfer thread stop_bank_teller();
|
||||||
|
bank_transfer.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_transfer.value += 1000;
|
||||||
|
bank_transfer notify( "powerup_reset" );
|
||||||
|
bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout();
|
||||||
|
player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
|
||||||
|
level notify( "bank_teller_used" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_bank_teller()
|
||||||
|
{
|
||||||
|
level endon( "end_game" );
|
||||||
|
|
||||||
|
self waittill( "death" );
|
||||||
|
|
||||||
|
level notify( "stop_bank_teller" );
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_bank_teller()
|
||||||
|
{
|
||||||
|
wait 1;
|
||||||
|
level notify( "stop_bank_teller" );
|
||||||
|
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
|
||||||
|
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
|
||||||
|
bank_teller_dmg_trig delete();
|
||||||
|
bank_teller_transfer_trig delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
onplayerconnect_bank_deposit_box()
|
||||||
|
{
|
||||||
|
online_game = sessionmodeisonlinegame();
|
||||||
|
|
||||||
|
if ( !online_game )
|
||||||
|
self.account_value = 0;
|
||||||
|
else
|
||||||
|
self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map );
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_deposit_box()
|
||||||
|
{
|
||||||
|
level.bank_deposit_max_amount = 250000;
|
||||||
|
level.bank_deposit_ddl_increment_amount = 1000;
|
||||||
|
level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount;
|
||||||
|
level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 );
|
||||||
|
deposit_triggers = getstructarray( "bank_deposit", "targetname" );
|
||||||
|
array_thread( deposit_triggers, ::bank_deposit_unitrigger );
|
||||||
|
withdraw_triggers = getstructarray( "bank_withdraw", "targetname" );
|
||||||
|
array_thread( withdraw_triggers, ::bank_withdraw_unitrigger );
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_deposit_unitrigger()
|
||||||
|
{
|
||||||
|
bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 );
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_withdraw_unitrigger()
|
||||||
|
{
|
||||||
|
bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 );
|
||||||
|
}
|
||||||
|
|
||||||
|
bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius )
|
||||||
|
{
|
||||||
|
unitrigger_stub = spawnstruct();
|
||||||
|
unitrigger_stub.origin = self.origin;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_angles ) )
|
||||||
|
unitrigger_stub.angles = self.script_angles;
|
||||||
|
else
|
||||||
|
unitrigger_stub.angles = self.angles;
|
||||||
|
|
||||||
|
unitrigger_stub.script_angles = unitrigger_stub.angles;
|
||||||
|
|
||||||
|
if ( isdefined( override_length ) )
|
||||||
|
unitrigger_stub.script_length = override_length;
|
||||||
|
else if ( isdefined( self.script_length ) )
|
||||||
|
unitrigger_stub.script_length = self.script_length;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_length = 32;
|
||||||
|
|
||||||
|
if ( isdefined( override_width ) )
|
||||||
|
unitrigger_stub.script_width = override_width;
|
||||||
|
else if ( isdefined( self.script_width ) )
|
||||||
|
unitrigger_stub.script_width = self.script_width;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_width = 32;
|
||||||
|
|
||||||
|
if ( isdefined( override_height ) )
|
||||||
|
unitrigger_stub.script_height = override_height;
|
||||||
|
else if ( isdefined( self.script_height ) )
|
||||||
|
unitrigger_stub.script_height = self.script_height;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_height = 64;
|
||||||
|
|
||||||
|
if ( isdefined( override_radius ) )
|
||||||
|
unitrigger_stub.script_radius = override_radius;
|
||||||
|
else if ( isdefined( self.radius ) )
|
||||||
|
unitrigger_stub.radius = self.radius;
|
||||||
|
else
|
||||||
|
unitrigger_stub.radius = 32;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_unitrigger_type ) )
|
||||||
|
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
||||||
|
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
||||||
|
unitrigger_stub.targetname = name;
|
||||||
|
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
||||||
|
unitrigger_stub.prompt_and_visibility_func = prompt_fn;
|
||||||
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger_deposit_update_prompt( player )
|
||||||
|
{
|
||||||
|
if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max )
|
||||||
|
{
|
||||||
|
player show_balance();
|
||||||
|
self sethintstring( "" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger_deposit_think()
|
||||||
|
{
|
||||||
|
self endon( "kill_trigger" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
|
if ( !is_player_valid( player ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
|
||||||
|
{
|
||||||
|
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
|
||||||
|
player.score -= level.bank_deposit_ddl_increment_amount;
|
||||||
|
player.account_value += level.bank_account_increment;
|
||||||
|
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
||||||
|
|
||||||
|
if ( isdefined( level.custom_bank_deposit_vo ) )
|
||||||
|
player thread [[ level.custom_bank_deposit_vo ]]();
|
||||||
|
|
||||||
|
if ( player.account_value >= level.bank_account_max )
|
||||||
|
self sethintstring( "" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
||||||
|
|
||||||
|
player show_balance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger_withdraw_update_prompt( player )
|
||||||
|
{
|
||||||
|
if ( player.account_value <= 0 )
|
||||||
|
{
|
||||||
|
self sethintstring( "" );
|
||||||
|
player show_balance();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger_withdraw_think()
|
||||||
|
{
|
||||||
|
self endon( "kill_trigger" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
|
if ( !is_player_valid( player ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( player.account_value >= level.bank_account_increment )
|
||||||
|
{
|
||||||
|
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
|
||||||
|
player.score += level.bank_deposit_ddl_increment_amount;
|
||||||
|
level notify( "bank_withdrawal" );
|
||||||
|
player.account_value -= level.bank_account_increment;
|
||||||
|
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
|
||||||
|
|
||||||
|
if ( isdefined( level.custom_bank_withdrawl_vo ) )
|
||||||
|
player thread [[ level.custom_bank_withdrawl_vo ]]();
|
||||||
|
else
|
||||||
|
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
|
||||||
|
|
||||||
|
player thread player_withdraw_fee();
|
||||||
|
|
||||||
|
if ( player.account_value < level.bank_account_increment )
|
||||||
|
self sethintstring( "" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
|
||||||
|
|
||||||
|
player show_balance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player_withdraw_fee()
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
wait_network_frame();
|
||||||
|
self.score -= level.ta_vaultfee;
|
||||||
|
}
|
||||||
|
|
||||||
|
show_balance()
|
||||||
|
{
|
||||||
|
/#
|
||||||
|
iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value );
|
||||||
|
#/
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,278 +1,302 @@
|
|||||||
#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._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||||
{
|
level.ballistic_knife_autorecover = 1;
|
||||||
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
|
||||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
||||||
}
|
{
|
||||||
|
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
||||||
|
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn( watcher, player )
|
on_spawn( watcher, player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
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 );
|
|
||||||
isfriendly = 0;
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
if ( isDefined( endpos ) )
|
|
||||||
{
|
isfriendly = 0;
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
|
||||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
if ( isdefined( endpos ) )
|
||||||
retrievable_model setowner( player );
|
{
|
||||||
retrievable_model.owner = player;
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model.angles = angles;
|
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model setowner( player );
|
||||||
if ( isDefined( prey ) )
|
retrievable_model.owner = player;
|
||||||
{
|
retrievable_model.angles = angles;
|
||||||
if ( isplayer( prey ) && player.team == prey.team )
|
retrievable_model.name = watcher.weapon;
|
||||||
{
|
|
||||||
isfriendly = 1;
|
if ( isdefined( prey ) )
|
||||||
}
|
{
|
||||||
else
|
if ( isplayer( prey ) && player.team == prey.team )
|
||||||
{
|
isfriendly = 1;
|
||||||
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 thread force_drop_knives_to_ground_on_death( player, prey );
|
||||||
retrievable_model linkto( prey, bone );
|
}
|
||||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
else if ( isfriendly )
|
||||||
}
|
{
|
||||||
else
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
{
|
normal = ( 0, 0, 1 );
|
||||||
if ( isfriendly )
|
}
|
||||||
{
|
}
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
|
||||||
normal = ( 0, 0, 1 );
|
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
||||||
}
|
|
||||||
}
|
if ( isfriendly )
|
||||||
}
|
retrievable_model waittill( "stationary" );
|
||||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
|
||||||
if ( isfriendly )
|
retrievable_model thread drop_knives_to_ground( player );
|
||||||
{
|
|
||||||
retrievable_model waittill( "stationary" );
|
if ( isfriendly )
|
||||||
}
|
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||||
retrievable_model thread drop_knives_to_ground( player );
|
else
|
||||||
if ( isfriendly )
|
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
{
|
|
||||||
player notify( "ballistic_knife_stationary" );
|
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_to_show_glowing_model( prey )
|
wait_to_show_glowing_model( prey )
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait 2;
|
wait 2;
|
||||||
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn_retrieve_trigger( watcher, player )
|
on_spawn_retrieve_trigger( watcher, player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
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 );
|
|
||||||
if ( !isDefined( retrievable_model ) )
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
{
|
|
||||||
return;
|
if ( !isdefined( retrievable_model ) )
|
||||||
}
|
return;
|
||||||
trigger_pos = [];
|
|
||||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
trigger_pos = [];
|
||||||
{
|
|
||||||
trigger_pos[ 0 ] = prey.origin[ 0 ];
|
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||||
trigger_pos[ 1 ] = prey.origin[ 1 ];
|
{
|
||||||
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
|
trigger_pos[0] = prey.origin[0];
|
||||||
}
|
trigger_pos[1] = prey.origin[1];
|
||||||
else
|
trigger_pos[2] = prey.origin[2] + 10;
|
||||||
{
|
}
|
||||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
else
|
||||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
{
|
||||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
|
||||||
}
|
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
|
||||||
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
|
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
|
||||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
}
|
||||||
pickup_trigger.owner = player;
|
|
||||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
if ( is_true( level.ballistic_knife_autorecover ) )
|
||||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
{
|
||||||
if ( isDefined( hint_string ) )
|
trigger_pos[2] -= 50.0;
|
||||||
{
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||||
pickup_trigger sethintstring( hint_string );
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
||||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
pickup_trigger setteamfortrigger( player.team );
|
|
||||||
player clientclaimtrigger( pickup_trigger );
|
pickup_trigger.owner = player;
|
||||||
pickup_trigger enablelinkto();
|
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||||
if ( isDefined( prey ) )
|
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||||
{
|
|
||||||
pickup_trigger linkto( prey );
|
if ( isdefined( hint_string ) )
|
||||||
}
|
pickup_trigger sethintstring( hint_string );
|
||||||
else
|
else
|
||||||
{
|
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||||
pickup_trigger linkto( retrievable_model );
|
|
||||||
}
|
pickup_trigger setteamfortrigger( player.team );
|
||||||
if ( isDefined( level.knife_planted ) )
|
player clientclaimtrigger( pickup_trigger );
|
||||||
{
|
pickup_trigger enablelinkto();
|
||||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
|
||||||
}
|
if ( isdefined( prey ) )
|
||||||
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
pickup_trigger linkto( prey );
|
||||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
else
|
||||||
|
pickup_trigger linkto( retrievable_model );
|
||||||
|
|
||||||
|
if ( isdefined( level.knife_planted ) )
|
||||||
|
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
||||||
|
|
||||||
|
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
|
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_print( endpos )
|
debug_print( endpos )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
print3d( endpos, "pickup_trigger" );
|
{
|
||||||
wait 0,05;
|
print3d( endpos, "pickup_trigger" );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
while ( 1 )
|
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||||
{
|
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||||
trigger waittill( "trigger", player );
|
|
||||||
while ( !isalive( player ) )
|
while ( true )
|
||||||
{
|
{
|
||||||
continue;
|
trigger waittill( "trigger", player );
|
||||||
}
|
|
||||||
while ( !player isonground() )
|
if ( !isalive( player ) )
|
||||||
{
|
continue;
|
||||||
continue;
|
|
||||||
}
|
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
}
|
continue;
|
||||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
|
||||||
{
|
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
|
ammo_stock = player getweaponammostock( weapon );
|
||||||
{
|
ammo_clip = player getweaponammoclip( weapon );
|
||||||
if ( isDefined( playersoundonuse ) )
|
current_weapon = player getcurrentweapon();
|
||||||
{
|
total_ammo = ammo_stock + ammo_clip;
|
||||||
player playlocalsound( playersoundonuse );
|
hasreloaded = 1;
|
||||||
}
|
|
||||||
if ( isDefined( npcsoundonuse ) )
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||||
{
|
hasreloaded = 0;
|
||||||
player playsound( npcsoundonuse );
|
|
||||||
}
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
player thread [[ callback ]]( weapon, model, trigger );
|
continue;
|
||||||
return;
|
|
||||||
}
|
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||||
else
|
{
|
||||||
{
|
if ( isdefined( playersoundonuse ) )
|
||||||
}
|
player playlocalsound( playersoundonuse );
|
||||||
}
|
|
||||||
|
if ( isdefined( npcsoundonuse ) )
|
||||||
|
player playsound( npcsoundonuse );
|
||||||
|
|
||||||
|
player thread [[ callback ]]( weapon, model, trigger );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_up( weapon, model, trigger )
|
pick_up( weapon, model, trigger )
|
||||||
{
|
{
|
||||||
current_weapon = self getcurrentweapon();
|
if ( self hasweapon( weapon ) )
|
||||||
if ( current_weapon != weapon )
|
{
|
||||||
{
|
current_weapon = self getcurrentweapon();
|
||||||
clip_ammo = self getweaponammoclip( weapon );
|
|
||||||
if ( !clip_ammo )
|
if ( current_weapon != weapon )
|
||||||
{
|
{
|
||||||
self setweaponammoclip( weapon, 1 );
|
clip_ammo = self getweaponammoclip( weapon );
|
||||||
}
|
|
||||||
else
|
if ( !clip_ammo )
|
||||||
{
|
self setweaponammoclip( weapon, 1 );
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
else
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
{
|
||||||
}
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
}
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
else
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
{
|
||||||
}
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
}
|
||||||
model destroy_ent();
|
}
|
||||||
trigger destroy_ent();
|
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
||||||
|
model destroy_ent();
|
||||||
|
trigger destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_ent()
|
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();
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_shutdown( trigger, model )
|
watch_shutdown( trigger, model )
|
||||||
{
|
{
|
||||||
self waittill_any( "death", "disconnect", "zmb_lost_knife" );
|
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
|
||||||
trigger destroy_ent();
|
trigger destroy_ent();
|
||||||
model destroy_ent();
|
model destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
drop_knives_to_ground( player )
|
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 );
|
{
|
||||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
level waittill( "drop_objects_to_ground", origin, radius );
|
||||||
{
|
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||||
self thread update_retrieve_trigger( player );
|
{
|
||||||
}
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
}
|
self thread update_retrieve_trigger( player );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
force_drop_knives_to_ground_on_death( player, prey )
|
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" );
|
|
||||||
self unlink();
|
prey waittill( "death" );
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
|
||||||
self thread update_retrieve_trigger( player );
|
self unlink();
|
||||||
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
update_retrieve_trigger( player )
|
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 );
|
{
|
||||||
return;
|
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||||
}
|
return;
|
||||||
self waittill( "stationary" );
|
}
|
||||||
trigger = self.retrievabletrigger;
|
|
||||||
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
|
self waittill( "stationary" );
|
||||||
trigger linkto( self );
|
|
||||||
|
trigger = self.retrievabletrigger;
|
||||||
|
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||||
|
trigger linkto( self );
|
||||||
}
|
}
|
||||||
|
@ -1,53 +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
|
||||||
}
|
cost = 3000;
|
||||||
else
|
|
||||||
{
|
|
||||||
cost = 3000;
|
|
||||||
}
|
|
||||||
maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish );
|
|
||||||
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" );
|
|
||||||
}
|
|
||||||
|
|
||||||
spectator_respawn()
|
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_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie );
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
|
||||||
}
|
|
||||||
|
|
||||||
has_bowie()
|
|
||||||
{
|
|
||||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( !is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) && is_true( self._tazer_zm_equipped ) )
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
give_bowie()
|
|
||||||
{
|
|
||||||
self._bowie_zm_equipped = 1;
|
|
||||||
self._sickle_zm_equipped = undefined;
|
|
||||||
self._tazer_zm_equipped = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
take_bowie()
|
|
||||||
{
|
|
||||||
self._bowie_zm_equipped = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
bowie_flourish()
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
@ -1,492 +1,466 @@
|
|||||||
#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_utility;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
|
|
||||||
init()
|
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;
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
while ( i < trigs.size )
|
{
|
||||||
{
|
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 );
|
||||||
}
|
level thread give_claymores_after_rounds();
|
||||||
array_thread( trigs, ::buy_claymores );
|
level.claymores_on_damage = ::satchel_damage;
|
||||||
level thread give_claymores_after_rounds();
|
level.pickup_claymores = ::pickup_claymores;
|
||||||
level.claymores_on_damage = ::satchel_damage;
|
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
|
||||||
level.pickup_claymores = ::pickup_claymores;
|
level.claymore_detectiondot = cos( 70 );
|
||||||
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
|
level.claymore_detectionmindist = 20;
|
||||||
level.claymore_detectiondot = cos( 70 );
|
level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
|
||||||
level.claymore_detectionmindist = 20;
|
|
||||||
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buy_claymores()
|
buy_claymores()
|
||||||
{
|
{
|
||||||
self.zombie_cost = 1000;
|
self.zombie_cost = 1000;
|
||||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
self setcursorhint( "HINT_NOICON" );
|
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;
|
continue;
|
||||||
}
|
|
||||||
while ( who has_powerup_weapon() )
|
if ( who has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
continue;
|
||||||
if ( is_player_valid( who ) )
|
}
|
||||||
{
|
|
||||||
if ( who.score >= self.zombie_cost )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
if ( who.score >= self.zombie_cost )
|
||||||
{
|
{
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||||
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
|
{
|
||||||
who thread claymore_setup();
|
play_sound_at_pos( "purchase", self.origin );
|
||||||
who thread show_claymore_hint( "claymore_purchased" );
|
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
|
||||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
who thread claymore_setup();
|
||||||
if ( isDefined( self.stub ) )
|
who thread show_claymore_hint( "claymore_purchased" );
|
||||||
{
|
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
|
||||||
}
|
if ( isdefined( self.stub ) )
|
||||||
if ( self.claymores_triggered == 0 )
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
{
|
|
||||||
model = getent( self.target, "targetname" );
|
if ( self.claymores_triggered == 0 )
|
||||||
if ( isDefined( model ) )
|
{
|
||||||
{
|
model = getent( self.target, "targetname" );
|
||||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
|
||||||
}
|
if ( isdefined( model ) )
|
||||||
else
|
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
|
||||||
{
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
if ( isDefined( self.clientfieldname ) )
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
{
|
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
self.claymores_triggered = 1;
|
||||||
}
|
|
||||||
}
|
if ( isdefined( self.stub ) )
|
||||||
self.claymores_triggered = 1;
|
self.stub.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 = getentarray( "claymore_purchase", "targetname" );
|
trigs[i] setinvisibletoplayer( who );
|
||||||
i = 0;
|
}
|
||||||
while ( i < trigs.size )
|
else
|
||||||
{
|
who thread show_claymore_hint( "already_purchased" );
|
||||||
trigs[ i ] setinvisibletoplayer( who );
|
}
|
||||||
i++;
|
else
|
||||||
}
|
{
|
||||||
}
|
who play_sound_on_ent( "no_purchase" );
|
||||||
else who thread show_claymore_hint( "already_purchased" );
|
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_unitrigger_update_prompt( player )
|
claymore_unitrigger_update_prompt( player )
|
||||||
{
|
{
|
||||||
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
return 0;
|
self sethintstring( "" );
|
||||||
}
|
self setcursorhint( "HINT_NOICON" );
|
||||||
return 1;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||||
|
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||||
|
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;
|
{
|
||||||
while ( j < players.size )
|
for ( j = 0; j < players.size; j++ )
|
||||||
{
|
{
|
||||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
while ( i < trigs.size )
|
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||||
{
|
}
|
||||||
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
|
}
|
||||||
i++;
|
|
||||||
}
|
wait 1;
|
||||||
}
|
players = get_players();
|
||||||
j++;
|
}
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
players = get_players();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_watch()
|
claymore_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
self notify( "claymore_watch" );
|
||||||
{
|
self endon( "claymore_watch" );
|
||||||
self waittill( "grenade_fire", claymore, weapname );
|
|
||||||
if ( weapname == "claymore_zm" )
|
while ( true )
|
||||||
{
|
{
|
||||||
claymore.owner = self;
|
self waittill( "grenade_fire", claymore, weapname );
|
||||||
claymore.team = self.team;
|
|
||||||
self notify( "zmb_enable_claymore_prompt" );
|
if ( weapname == "claymore_zm" )
|
||||||
if ( claymore claymore_safe_to_plant() )
|
{
|
||||||
{
|
claymore.owner = self;
|
||||||
if ( isDefined( level.claymore_planted ) )
|
claymore.team = self.team;
|
||||||
{
|
self notify( "zmb_enable_claymore_prompt" );
|
||||||
self thread [[ level.claymore_planted ]]( claymore );
|
|
||||||
}
|
if ( claymore claymore_safe_to_plant() )
|
||||||
claymore thread satchel_damage();
|
{
|
||||||
claymore thread claymore_detonation();
|
if ( isdefined( level.claymore_planted ) )
|
||||||
claymore thread play_claymore_effects();
|
self thread [[ level.claymore_planted ]]( claymore );
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
claymore thread claymore_detonation();
|
||||||
break;
|
claymore thread play_claymore_effects();
|
||||||
}
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
|
||||||
else
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
|
||||||
{
|
}
|
||||||
claymore thread claymore_wait_and_detonate();
|
else
|
||||||
}
|
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" );
|
self setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
self setactionslot( 4, "weapon", "claymore_zm" );
|
self setweaponammostock( "claymore_zm", 2 );
|
||||||
self setweaponammostock( "claymore_zm", 2 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 giveweapon( "claymore_zm" );
|
player thread claymore_watch();
|
||||||
player set_player_placeable_mine( "claymore_zm" );
|
player giveweapon( "claymore_zm" );
|
||||||
player setactionslot( 4, "weapon", "claymore_zm" );
|
player set_player_placeable_mine( "claymore_zm" );
|
||||||
player setweaponammoclip( "claymore_zm", 0 );
|
player setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
player notify( "zmb_enable_claymore_prompt" );
|
player setweaponammoclip( "claymore_zm", 0 );
|
||||||
}
|
player notify( "zmb_enable_claymore_prompt" );
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
{
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
{
|
|
||||||
self destroy_ent();
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
{
|
||||||
return;
|
self destroy_ent();
|
||||||
}
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
}
|
return;
|
||||||
self pick_up();
|
}
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
}
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
self pick_up();
|
||||||
{
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
|
|
||||||
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
|
||||||
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener( trigger, player )
|
pickup_claymores_trigger_listener( trigger, player )
|
||||||
{
|
{
|
||||||
self thread pickup_claymores_trigger_listener_enable( trigger, player );
|
self thread pickup_claymores_trigger_listener_enable( trigger, player );
|
||||||
self thread pickup_claymores_trigger_listener_disable( trigger, player );
|
self thread pickup_claymores_trigger_listener_disable( trigger, player );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener_enable( trigger, player )
|
pickup_claymores_trigger_listener_enable( trigger, player )
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
while ( 1 )
|
self endon( "death" );
|
||||||
{
|
|
||||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
while ( true )
|
||||||
if ( !isDefined( trigger ) )
|
{
|
||||||
{
|
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( trigger ) )
|
||||||
trigger trigger_on();
|
return;
|
||||||
trigger linkto( self );
|
|
||||||
}
|
trigger trigger_on();
|
||||||
|
trigger linkto( self );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener_disable( trigger, player )
|
pickup_claymores_trigger_listener_disable( trigger, player )
|
||||||
{
|
{
|
||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
while ( 1 )
|
self endon( "death" );
|
||||||
{
|
|
||||||
player waittill( "zmb_disable_claymore_prompt" );
|
while ( true )
|
||||||
if ( !isDefined( trigger ) )
|
{
|
||||||
{
|
player waittill( "zmb_disable_claymore_prompt" );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( trigger ) )
|
||||||
trigger unlink();
|
return;
|
||||||
trigger trigger_off();
|
|
||||||
}
|
trigger unlink();
|
||||||
|
trigger trigger_off();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_detonation()
|
claymore_detonation()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self waittill_not_moving();
|
self waittill_not_moving();
|
||||||
detonateradius = 96;
|
detonateradius = 96;
|
||||||
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
|
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
|
||||||
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 );
|
{
|
||||||
if ( isDefined( self.owner ) && ent == self.owner )
|
damagearea waittill( "trigger", ent );
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( self.owner ) && ent == self.owner )
|
||||||
}
|
continue;
|
||||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
|
||||||
{
|
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||||
{
|
continue;
|
||||||
continue;
|
|
||||||
}
|
if ( !ent shouldaffectweaponobject( self ) )
|
||||||
while ( !ent shouldaffectweaponobject( self ) )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||||
}
|
{
|
||||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
self playsound( "wpn_claymore_alert" );
|
||||||
{
|
wait 0.4;
|
||||||
self playsound( "wpn_claymore_alert" );
|
|
||||||
wait 0,4;
|
if ( isdefined( self.owner ) )
|
||||||
if ( isDefined( self.owner ) )
|
self detonate( self.owner );
|
||||||
{
|
else
|
||||||
self detonate( self.owner );
|
self detonate( undefined );
|
||||||
}
|
|
||||||
else
|
return;
|
||||||
{
|
}
|
||||||
self detonate( undefined );
|
}
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
||||||
{
|
{
|
||||||
self setcandamage( 1 );
|
self endon( "death" );
|
||||||
self.health = 100000;
|
self setcandamage( 1 );
|
||||||
self.maxhealth = self.health;
|
self.health = 100000;
|
||||||
attacker = undefined;
|
self.maxhealth = self.health;
|
||||||
while ( 1 )
|
attacker = undefined;
|
||||||
{
|
|
||||||
self waittill( "damage", amount, attacker );
|
while ( true )
|
||||||
if ( !isDefined( self ) )
|
{
|
||||||
{
|
self waittill( "damage", amount, attacker );
|
||||||
return;
|
|
||||||
}
|
if ( !isdefined( self ) )
|
||||||
self.health = self.maxhealth;
|
return;
|
||||||
while ( !isplayer( attacker ) )
|
|
||||||
{
|
self.health = self.maxhealth;
|
||||||
continue;
|
|
||||||
}
|
if ( !isplayer( attacker ) )
|
||||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||||
}
|
continue;
|
||||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
|
||||||
{
|
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
}
|
break;
|
||||||
if ( level.satchelexplodethisframe )
|
}
|
||||||
{
|
|
||||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
if ( level.satchelexplodethisframe )
|
||||||
}
|
wait( 0.1 + randomfloat( 0.4 ) );
|
||||||
else wait 0,05;
|
else
|
||||||
if ( !isDefined( self ) )
|
wait 0.05;
|
||||||
{
|
|
||||||
return;
|
if ( !isdefined( self ) )
|
||||||
}
|
return;
|
||||||
level.satchelexplodethisframe = 1;
|
|
||||||
thread reset_satchel_explode_this_frame();
|
level.satchelexplodethisframe = 1;
|
||||||
self detonate( attacker );
|
thread reset_satchel_explode_this_frame();
|
||||||
|
self detonate( attacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_satchel_explode_this_frame()
|
reset_satchel_explode_this_frame()
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level.satchelexplodethisframe = 0;
|
level.satchelexplodethisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
play_claymore_effects()
|
play_claymore_effects()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self waittill_not_moving();
|
self waittill_not_moving();
|
||||||
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
|
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
|
||||||
}
|
}
|
||||||
|
|
||||||
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" ) )
|
|
||||||
{
|
|
||||||
players = get_players();
|
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
|
|
||||||
{
|
|
||||||
players[ i ] giveweapon( "claymore_zm" );
|
|
||||||
players[ i ] set_player_placeable_mine( "claymore_zm" );
|
|
||||||
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
|
|
||||||
players[ i ] setweaponammoclip( "claymore_zm", 2 );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
|
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||||
{
|
{
|
||||||
self.x = x;
|
players = get_players();
|
||||||
self.y = y;
|
|
||||||
self.alignx = alignx;
|
|
||||||
self.aligny = aligny;
|
|
||||||
self.fontscale = fontscale;
|
|
||||||
self.alpha = alpha;
|
|
||||||
self.sort = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_client_hintelem()
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
self endon( "disconnect" );
|
{
|
||||||
if ( !isDefined( self.hintelem ) )
|
players[i] giveweapon( "claymore_zm" );
|
||||||
{
|
players[i] set_player_placeable_mine( "claymore_zm" );
|
||||||
self.hintelem = newclienthudelem( self );
|
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
}
|
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||||
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
show_claymore_hint( string )
|
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 );
|
||||||
}
|
|
||||||
self setup_client_hintelem();
|
|
||||||
self.hintelem settext( text );
|
|
||||||
wait 3,5;
|
|
||||||
self.hintelem settext( "" );
|
|
||||||
}
|
}
|
||||||
|
@ -1,565 +0,0 @@
|
|||||||
#include maps/mp/zombies/_zm_clone;
|
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
|
||||||
#include maps/mp/zombies/_zm_utility;
|
|
||||||
#include maps/mp/_utility;
|
|
||||||
#include common_scripts/utility;
|
|
||||||
|
|
||||||
#using_animtree( "zombie_cymbal_monkey" );
|
|
||||||
|
|
||||||
init()
|
|
||||||
{
|
|
||||||
if ( !cymbal_monkey_exists() )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/#
|
|
||||||
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
|
|
||||||
#/
|
|
||||||
level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" );
|
|
||||||
level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" );
|
|
||||||
level.cymbal_monkeys = [];
|
|
||||||
scriptmodelsuseanimtree( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
player_give_cymbal_monkey()
|
|
||||||
{
|
|
||||||
self giveweapon( "cymbal_monkey_zm" );
|
|
||||||
self set_player_tactical_grenade( "cymbal_monkey_zm" );
|
|
||||||
self thread player_handle_cymbal_monkey();
|
|
||||||
}
|
|
||||||
|
|
||||||
player_handle_cymbal_monkey()
|
|
||||||
{
|
|
||||||
self notify( "starting_monkey_watch" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "starting_monkey_watch" );
|
|
||||||
attract_dist_diff = level.monkey_attract_dist_diff;
|
|
||||||
if ( !isDefined( attract_dist_diff ) )
|
|
||||||
{
|
|
||||||
attract_dist_diff = 45;
|
|
||||||
}
|
|
||||||
num_attractors = level.num_monkey_attractors;
|
|
||||||
if ( !isDefined( num_attractors ) )
|
|
||||||
{
|
|
||||||
num_attractors = 96;
|
|
||||||
}
|
|
||||||
max_attract_dist = level.monkey_attract_dist;
|
|
||||||
if ( !isDefined( max_attract_dist ) )
|
|
||||||
{
|
|
||||||
max_attract_dist = 1536;
|
|
||||||
}
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
grenade = get_thrown_monkey();
|
|
||||||
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
watch_for_dud( model, actor )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self waittill( "grenade_dud" );
|
|
||||||
model.dud = 1;
|
|
||||||
self playsound( "zmb_vox_monkey_scream" );
|
|
||||||
self.monk_scream_vox = 1;
|
|
||||||
wait 3;
|
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
|
||||||
model delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( actor ) )
|
|
||||||
{
|
|
||||||
actor delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( self.damagearea ) )
|
|
||||||
{
|
|
||||||
self.damagearea delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
self delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
watch_for_emp( model, actor )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
level waittill( "emp_detonate", origin, radius );
|
|
||||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.stun_fx = 1;
|
|
||||||
if ( isDefined( level._equipment_emp_destroy_fx ) )
|
|
||||||
{
|
|
||||||
playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, -1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
|
|
||||||
}
|
|
||||||
wait 0,15;
|
|
||||||
self.attract_to_origin = 0;
|
|
||||||
self deactivate_zombie_point_of_interest();
|
|
||||||
model clearanim( %o_monkey_bomb, 0 );
|
|
||||||
wait 1;
|
|
||||||
self detonate();
|
|
||||||
wait 1;
|
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
|
||||||
model delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( actor ) )
|
|
||||||
{
|
|
||||||
actor delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( self.damagearea ) )
|
|
||||||
{
|
|
||||||
self.damagearea delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
self delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clone_player_angles( owner )
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
owner endon( "death" );
|
|
||||||
while ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
self.angles = owner.angles;
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
show_briefly( showtime )
|
|
||||||
{
|
|
||||||
self endon( "show_owner" );
|
|
||||||
if ( isDefined( self.show_for_time ) )
|
|
||||||
{
|
|
||||||
self.show_for_time = showtime;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.show_for_time = showtime;
|
|
||||||
self setvisibletoall();
|
|
||||||
while ( self.show_for_time > 0 )
|
|
||||||
{
|
|
||||||
self.show_for_time -= 0,05;
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
self setvisibletoallexceptteam( level.zombie_team );
|
|
||||||
self.show_for_time = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
show_owner_on_attack( owner )
|
|
||||||
{
|
|
||||||
owner endon( "hide_owner" );
|
|
||||||
owner endon( "show_owner" );
|
|
||||||
self endon( "explode" );
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "grenade_dud" );
|
|
||||||
owner.show_for_time = undefined;
|
|
||||||
for ( ;; )
|
|
||||||
{
|
|
||||||
owner waittill( "weapon_fired" );
|
|
||||||
owner thread show_briefly( 0,5 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hide_owner( owner )
|
|
||||||
{
|
|
||||||
owner notify( "hide_owner" );
|
|
||||||
owner endon( "hide_owner" );
|
|
||||||
owner setperk( "specialty_immunemms" );
|
|
||||||
owner.no_burning_sfx = 1;
|
|
||||||
owner notify( "stop_flame_sounds" );
|
|
||||||
owner setvisibletoallexceptteam( level.zombie_team );
|
|
||||||
owner.hide_owner = 1;
|
|
||||||
if ( isDefined( level._effect[ "human_disappears" ] ) )
|
|
||||||
{
|
|
||||||
playfx( level._effect[ "human_disappears" ], owner.origin );
|
|
||||||
}
|
|
||||||
self thread show_owner_on_attack( owner );
|
|
||||||
evt = self waittill_any_return( "explode", "death", "grenade_dud" );
|
|
||||||
/#
|
|
||||||
println( "ZMCLONE: Player visible again because of " + evt );
|
|
||||||
#/
|
|
||||||
owner notify( "show_owner" );
|
|
||||||
owner unsetperk( "specialty_immunemms" );
|
|
||||||
if ( isDefined( level._effect[ "human_disappears" ] ) )
|
|
||||||
{
|
|
||||||
playfx( level._effect[ "human_disappears" ], owner.origin );
|
|
||||||
}
|
|
||||||
owner.no_burning_sfx = undefined;
|
|
||||||
owner setvisibletoall();
|
|
||||||
owner.hide_owner = undefined;
|
|
||||||
owner show();
|
|
||||||
}
|
|
||||||
|
|
||||||
proximity_detonate( owner )
|
|
||||||
{
|
|
||||||
wait 1,5;
|
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
detonateradius = 96;
|
|
||||||
explosionradius = detonateradius * 2;
|
|
||||||
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1,5 );
|
|
||||||
damagearea setexcludeteamfortrigger( owner.team );
|
|
||||||
damagearea enablelinkto();
|
|
||||||
damagearea linkto( self );
|
|
||||||
self.damagearea = damagearea;
|
|
||||||
while ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
damagearea waittill( "trigger", ent );
|
|
||||||
if ( isDefined( owner ) && ent == owner )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( isDefined( ent.team ) && ent.team == owner.team )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
self playsound( "wpn_claymore_alert" );
|
|
||||||
dist = distance( self.origin, ent.origin );
|
|
||||||
radiusdamage( self.origin + vectorScale( ( 0, 0, -1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" );
|
|
||||||
if ( isDefined( owner ) )
|
|
||||||
{
|
|
||||||
self detonate( owner );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self detonate( undefined );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ( isDefined( damagearea ) )
|
|
||||||
{
|
|
||||||
damagearea delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
|
|
||||||
{
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "starting_monkey_watch" );
|
|
||||||
if ( isDefined( grenade ) )
|
|
||||||
{
|
|
||||||
grenade endon( "death" );
|
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
|
||||||
{
|
|
||||||
if ( isDefined( grenade.damagearea ) )
|
|
||||||
{
|
|
||||||
grenade.damagearea delete();
|
|
||||||
}
|
|
||||||
grenade delete();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
grenade hide();
|
|
||||||
model = spawn( "script_model", grenade.origin );
|
|
||||||
model setmodel( "weapon_zombie_monkey_bomb" );
|
|
||||||
model useanimtree( -1 );
|
|
||||||
model linkto( grenade );
|
|
||||||
model.angles = grenade.angles;
|
|
||||||
model thread monkey_cleanup( grenade );
|
|
||||||
clone = undefined;
|
|
||||||
if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view )
|
|
||||||
{
|
|
||||||
model setvisibletoallexceptteam( level.zombie_team );
|
|
||||||
clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, -1 ), 999 ), level.cymbal_monkey_clone_weapon, undefined );
|
|
||||||
model.simulacrum = clone;
|
|
||||||
clone maps/mp/zombies/_zm_clone::clone_animate( "idle" );
|
|
||||||
clone thread clone_player_angles( self );
|
|
||||||
clone notsolid();
|
|
||||||
clone ghost();
|
|
||||||
}
|
|
||||||
grenade thread watch_for_dud( model, clone );
|
|
||||||
grenade thread watch_for_emp( model, clone );
|
|
||||||
info = spawnstruct();
|
|
||||||
info.sound_attractors = [];
|
|
||||||
grenade thread monitor_zombie_groans( info );
|
|
||||||
grenade waittill( "stationary" );
|
|
||||||
if ( isDefined( level.grenade_planted ) )
|
|
||||||
{
|
|
||||||
self thread [[ level.grenade_planted ]]( grenade, model );
|
|
||||||
}
|
|
||||||
if ( isDefined( grenade ) )
|
|
||||||
{
|
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
|
||||||
model setanim( %o_monkey_bomb );
|
|
||||||
if ( isDefined( grenade.backlinked ) && !grenade.backlinked )
|
|
||||||
{
|
|
||||||
model unlink();
|
|
||||||
model.origin = grenade.origin;
|
|
||||||
model.angles = grenade.angles;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( clone ) )
|
|
||||||
{
|
|
||||||
clone forceteleport( grenade.origin, grenade.angles );
|
|
||||||
clone thread hide_owner( self );
|
|
||||||
grenade thread proximity_detonate( self );
|
|
||||||
clone show();
|
|
||||||
clone setinvisibletoall();
|
|
||||||
clone setvisibletoteam( level.zombie_team );
|
|
||||||
}
|
|
||||||
grenade resetmissiledetonationtime();
|
|
||||||
playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" );
|
|
||||||
valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined );
|
|
||||||
if ( isDefined( level.check_valid_poi ) )
|
|
||||||
{
|
|
||||||
valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi );
|
|
||||||
}
|
|
||||||
if ( valid_poi )
|
|
||||||
{
|
|
||||||
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
|
|
||||||
grenade.attract_to_origin = 1;
|
|
||||||
grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff );
|
|
||||||
grenade thread wait_for_attractor_positions_complete();
|
|
||||||
grenade thread do_monkey_sound( model, info );
|
|
||||||
level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grenade.script_noteworthy = undefined;
|
|
||||||
level thread grenade_stolen_by_sam( grenade, model, clone );
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grenade.script_noteworthy = undefined;
|
|
||||||
level thread grenade_stolen_by_sam( grenade, model, clone );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor )
|
|
||||||
{
|
|
||||||
if ( !isDefined( ent_model ) )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
direction = ent_model.origin;
|
|
||||||
direction = ( direction[ 1 ], direction[ 0 ], 0 );
|
|
||||||
if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 )
|
|
||||||
{
|
|
||||||
direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( direction[ 0 ] < 0 )
|
|
||||||
{
|
|
||||||
direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
players = get_players();
|
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
|
||||||
{
|
|
||||||
if ( isalive( players[ i ] ) )
|
|
||||||
{
|
|
||||||
players[ i ] playlocalsound( level.zmb_laugh_alias );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" );
|
|
||||||
ent_model movez( 60, 1, 0,25, 0,25 );
|
|
||||||
ent_model vibrate( direction, 1,5, 2,5, 1 );
|
|
||||||
ent_model waittill( "movedone" );
|
|
||||||
if ( isDefined( self.damagearea ) )
|
|
||||||
{
|
|
||||||
self.damagearea delete();
|
|
||||||
}
|
|
||||||
ent_model delete();
|
|
||||||
if ( isDefined( ent_actor ) )
|
|
||||||
{
|
|
||||||
ent_actor delete();
|
|
||||||
}
|
|
||||||
if ( isDefined( ent_grenade ) )
|
|
||||||
{
|
|
||||||
if ( isDefined( ent_grenade.damagearea ) )
|
|
||||||
{
|
|
||||||
ent_grenade.damagearea delete();
|
|
||||||
}
|
|
||||||
ent_grenade delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wait_for_attractor_positions_complete()
|
|
||||||
{
|
|
||||||
self waittill( "attractor_positions_generated" );
|
|
||||||
self.attract_to_origin = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
monkey_cleanup( parent )
|
|
||||||
{
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
if ( !isDefined( parent ) )
|
|
||||||
{
|
|
||||||
if ( isDefined( self ) && isDefined( self.dud ) && self.dud )
|
|
||||||
{
|
|
||||||
wait 6;
|
|
||||||
}
|
|
||||||
if ( isDefined( self.simulacrum ) )
|
|
||||||
{
|
|
||||||
self.simulacrum delete();
|
|
||||||
}
|
|
||||||
self_delete();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_monkey_sound( model, info )
|
|
||||||
{
|
|
||||||
self.monk_scream_vox = 0;
|
|
||||||
if ( isDefined( level.grenade_safe_to_bounce ) )
|
|
||||||
{
|
|
||||||
if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) )
|
|
||||||
{
|
|
||||||
self playsound( "zmb_vox_monkey_scream" );
|
|
||||||
self.monk_scream_vox = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !self.monk_scream_vox && level.music_override == 0 )
|
|
||||||
{
|
|
||||||
if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view )
|
|
||||||
{
|
|
||||||
self playsoundtoteam( "zmb_monkey_song", "allies" );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self playsound( "zmb_monkey_song" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !self.monk_scream_vox )
|
|
||||||
{
|
|
||||||
self thread play_delayed_explode_vox();
|
|
||||||
}
|
|
||||||
self waittill( "explode", position );
|
|
||||||
level notify( "grenade_exploded" );
|
|
||||||
monkey_index = -1;
|
|
||||||
i = 0;
|
|
||||||
while ( i < level.cymbal_monkeys.size )
|
|
||||||
{
|
|
||||||
if ( !isDefined( level.cymbal_monkeys[ i ] ) )
|
|
||||||
{
|
|
||||||
monkey_index = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( monkey_index >= 0 )
|
|
||||||
{
|
|
||||||
arrayremoveindex( level.cymbal_monkeys, monkey_index );
|
|
||||||
}
|
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
|
||||||
model clearanim( %o_monkey_bomb, 0,2 );
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < info.sound_attractors.size )
|
|
||||||
{
|
|
||||||
if ( isDefined( info.sound_attractors[ i ] ) )
|
|
||||||
{
|
|
||||||
info.sound_attractors[ i ] notify( "monkey_blown_up" );
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
play_delayed_explode_vox()
|
|
||||||
{
|
|
||||||
wait 6,5;
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
self playsound( "zmb_vox_monkey_explode" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get_thrown_monkey()
|
|
||||||
{
|
|
||||||
self endon( "disconnect" );
|
|
||||||
self endon( "starting_monkey_watch" );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
self waittill( "grenade_fire", grenade, weapname );
|
|
||||||
if ( weapname == "cymbal_monkey_zm" )
|
|
||||||
{
|
|
||||||
grenade.use_grenade_special_long_bookmark = 1;
|
|
||||||
grenade.grenade_multiattack_bookmark_count = 1;
|
|
||||||
return grenade;
|
|
||||||
}
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
monitor_zombie_groans( info )
|
|
||||||
{
|
|
||||||
self endon( "explode" );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while ( !isDefined( self.attractor_array ) )
|
|
||||||
{
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < self.attractor_array.size )
|
|
||||||
{
|
|
||||||
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) )
|
|
||||||
{
|
|
||||||
if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) )
|
|
||||||
{
|
|
||||||
if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 )
|
|
||||||
{
|
|
||||||
info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ];
|
|
||||||
self.attractor_array[ i ] thread play_zombie_groans();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
play_zombie_groans()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "monkey_blown_up" );
|
|
||||||
while ( 1 )
|
|
||||||
{
|
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
|
||||||
self playsound( "zmb_vox_zombie_groan" );
|
|
||||||
wait randomfloatrange( 2, 3 );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cymbal_monkey_exists()
|
|
||||||
{
|
|
||||||
return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] );
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,150 +1,123 @@
|
|||||||
#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 ) )
|
|
||||||
{
|
|
||||||
cost = level.tazer_cost;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cost = 6000;
|
|
||||||
}
|
|
||||||
level.use_tazer_impact_fx = 0;
|
|
||||||
maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx );
|
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
|
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
|
||||||
maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
|
|
||||||
level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
|
||||||
level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
|
||||||
if ( level.script != "zm_transit" )
|
|
||||||
{
|
|
||||||
level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
|
||||||
level.use_tazer_impact_fx = 1;
|
|
||||||
}
|
|
||||||
level.tazer_flourish_delay = 0,5;
|
|
||||||
}
|
|
||||||
|
|
||||||
spectator_respawn()
|
if ( isdefined( level.tazer_cost ) )
|
||||||
{
|
cost = level.tazer_cost;
|
||||||
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer );
|
else
|
||||||
|
cost = 6000;
|
||||||
|
|
||||||
|
level.use_tazer_impact_fx = 0;
|
||||||
|
maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
|
||||||
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
|
||||||
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
||||||
|
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
|
||||||
|
level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
||||||
|
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
||||||
|
|
||||||
|
if ( level.script != "zm_transit" )
|
||||||
|
{
|
||||||
|
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
||||||
|
level.use_tazer_impact_fx = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.tazer_flourish_delay = 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_bodily_functions()
|
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 ( 1 )
|
{
|
||||||
{
|
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;
|
if ( type != "MOD_MELEE" )
|
||||||
}
|
continue;
|
||||||
while ( type != "MOD_MELEE" )
|
|
||||||
{
|
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
ch = randomint( 100 );
|
||||||
{
|
|
||||||
continue;
|
if ( ch < 4 )
|
||||||
}
|
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
|
||||||
ch = randomint( 100 );
|
|
||||||
if ( ch < 4 )
|
if ( level.use_tazer_impact_fx )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" );
|
tags = [];
|
||||||
}
|
tags[0] = "J_Head";
|
||||||
if ( level.use_tazer_impact_fx )
|
tags[1] = "J_Neck";
|
||||||
{
|
playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
|
||||||
tags = [];
|
}
|
||||||
tags[ 0 ] = "J_Head";
|
}
|
||||||
tags[ 1 ] = "J_Neck";
|
|
||||||
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect()
|
||||||
{
|
{
|
||||||
self thread onplayerspawned();
|
self thread onplayerspawned();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerspawned()
|
onplayerspawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
for ( ;; )
|
|
||||||
{
|
for (;;)
|
||||||
self waittill( "spawned_player" );
|
{
|
||||||
self thread watchtazerknucklemelee();
|
self waittill( "spawned_player" );
|
||||||
}
|
|
||||||
|
self thread watchtazerknucklemelee();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watchtazerknucklemelee()
|
watchtazerknucklemelee()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
for ( ;; )
|
|
||||||
{
|
for (;;)
|
||||||
self waittill( "weapon_melee", weapon );
|
{
|
||||||
if ( weapon == "tazer_knuckles_zm" )
|
self waittill( "weapon_melee", weapon );
|
||||||
{
|
|
||||||
self tazerknuckle_melee();
|
if ( weapon == "tazer_knuckles_zm" )
|
||||||
}
|
self tazerknuckle_melee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tazerknuckle_melee()
|
tazerknuckle_melee()
|
||||||
{
|
{
|
||||||
}
|
|
||||||
|
|
||||||
has_tazer()
|
|
||||||
{
|
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( isDefined( self._sickle_zm_equipped ) && !self._sickle_zm_equipped && isDefined( self._bowie_zm_equipped ) || self._bowie_zm_equipped && isDefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped )
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
give_tazer()
|
|
||||||
{
|
|
||||||
self._tazer_zm_equipped = 1;
|
|
||||||
self._bowie_zm_equipped = undefined;
|
|
||||||
self._sickle_zm_equipped = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
take_tazer()
|
|
||||||
{
|
|
||||||
self._tazer_zm_equipped = undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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" );
|
{
|
||||||
wait level.tazer_flourish_delay;
|
self endon( "weapon_change" );
|
||||||
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
|
wait( level.tazer_flourish_delay );
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
|
||||||
wait_network_frame();
|
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
wait_network_frame();
|
||||||
}
|
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,327 @@
|
|||||||
|
// T6 GSC SOURCE
|
||||||
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\_utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.weapon_locker_map ) )
|
||||||
|
level.weapon_locker_map = level.script;
|
||||||
|
|
||||||
|
level.weapon_locker_online = sessionmodeisonlinegame();
|
||||||
|
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
|
||||||
|
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_has_stored_weapondata()
|
||||||
|
{
|
||||||
|
if ( level.weapon_locker_online )
|
||||||
|
return self has_stored_weapondata( level.weapon_locker_map );
|
||||||
|
else
|
||||||
|
return isdefined( self.stored_weapon_data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_get_stored_weapondata()
|
||||||
|
{
|
||||||
|
if ( level.weapon_locker_online )
|
||||||
|
return self get_stored_weapondata( level.weapon_locker_map );
|
||||||
|
else
|
||||||
|
return self.stored_weapon_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_clear_stored_weapondata()
|
||||||
|
{
|
||||||
|
if ( level.weapon_locker_online )
|
||||||
|
self clear_stored_weapondata( level.weapon_locker_map );
|
||||||
|
else
|
||||||
|
self.stored_weapon_data = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_set_stored_weapondata( weapondata )
|
||||||
|
{
|
||||||
|
if ( level.weapon_locker_online )
|
||||||
|
self set_stored_weapondata( weapondata, level.weapon_locker_map );
|
||||||
|
else
|
||||||
|
self.stored_weapon_data = weapondata;
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerwatch()
|
||||||
|
{
|
||||||
|
unitrigger_stub = spawnstruct();
|
||||||
|
unitrigger_stub.origin = self.origin;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_angles ) )
|
||||||
|
unitrigger_stub.angles = self.script_angles;
|
||||||
|
else
|
||||||
|
unitrigger_stub.angles = self.angles;
|
||||||
|
|
||||||
|
unitrigger_stub.script_angles = unitrigger_stub.angles;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_length ) )
|
||||||
|
unitrigger_stub.script_length = self.script_length;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_length = 16;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_width ) )
|
||||||
|
unitrigger_stub.script_width = self.script_width;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_width = 32;
|
||||||
|
|
||||||
|
if ( isdefined( self.script_height ) )
|
||||||
|
unitrigger_stub.script_height = self.script_height;
|
||||||
|
else
|
||||||
|
unitrigger_stub.script_height = 64;
|
||||||
|
|
||||||
|
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
|
||||||
|
unitrigger_stub.targetname = "weapon_locker";
|
||||||
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
||||||
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
||||||
|
unitrigger_stub.clientfieldname = "weapon_locker";
|
||||||
|
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
||||||
|
unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt;
|
||||||
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink );
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerisvalidweapon( weaponname )
|
||||||
|
{
|
||||||
|
weaponname = get_base_weapon_name( weaponname, 1 );
|
||||||
|
|
||||||
|
if ( !is_weapon_included( weaponname ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
|
||||||
|
{
|
||||||
|
retrievingweapon = player wl_has_stored_weapondata();
|
||||||
|
|
||||||
|
if ( !retrievingweapon )
|
||||||
|
{
|
||||||
|
weaponname = player get_nonalternate_weapon( weaponname );
|
||||||
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
|
else
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
weapondata = player wl_get_stored_weapondata();
|
||||||
|
|
||||||
|
if ( isdefined( level.remap_weapon_locker_weapons ) )
|
||||||
|
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
|
||||||
|
|
||||||
|
weapontogive = weapondata["name"];
|
||||||
|
primaries = player getweaponslistprimaries();
|
||||||
|
maxweapons = get_player_weapon_limit( player );
|
||||||
|
weaponname = player get_nonalternate_weapon( weaponname );
|
||||||
|
|
||||||
|
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
|
||||||
|
{
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
|
||||||
|
{
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerthinkupdateprompt( player )
|
||||||
|
{
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerthink()
|
||||||
|
{
|
||||||
|
self.parent_player thread triggerweaponslockerweaponchangethink( self );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
|
retrievingweapon = player wl_has_stored_weapondata();
|
||||||
|
|
||||||
|
if ( !retrievingweapon )
|
||||||
|
{
|
||||||
|
curweapon = player getcurrentweapon();
|
||||||
|
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
|
||||||
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
|
||||||
|
player wl_set_stored_weapondata( weapondata );
|
||||||
|
/#
|
||||||
|
assert( curweapon == weapondata["name"], "weapon data does not match" );
|
||||||
|
#/
|
||||||
|
player takeweapon( curweapon );
|
||||||
|
primaries = player getweaponslistprimaries();
|
||||||
|
|
||||||
|
if ( isdefined( primaries[0] ) )
|
||||||
|
player switchtoweapon( primaries[0] );
|
||||||
|
else
|
||||||
|
player maps\mp\zombies\_zm_weapons::give_fallback_weapon();
|
||||||
|
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
player playsoundtoplayer( "evt_fridge_locker_close", player );
|
||||||
|
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
curweapon = player getcurrentweapon();
|
||||||
|
primaries = player getweaponslistprimaries();
|
||||||
|
weapondata = player wl_get_stored_weapondata();
|
||||||
|
|
||||||
|
if ( isdefined( level.remap_weapon_locker_weapons ) )
|
||||||
|
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
|
||||||
|
|
||||||
|
weapontogive = weapondata["name"];
|
||||||
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( weapontogive ) )
|
||||||
|
{
|
||||||
|
player playlocalsound( level.zmb_laugh_alias );
|
||||||
|
player wl_clear_stored_weapondata();
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 );
|
||||||
|
weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 );
|
||||||
|
|
||||||
|
if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
|
||||||
|
{
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
|
wait 3;
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
maxweapons = get_player_weapon_limit( player );
|
||||||
|
|
||||||
|
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon )
|
||||||
|
{
|
||||||
|
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
|
||||||
|
|
||||||
|
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
|
||||||
|
{
|
||||||
|
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
|
||||||
|
wait 3;
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
|
||||||
|
player takeweapon( curweapondata["name"] );
|
||||||
|
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
|
||||||
|
player wl_clear_stored_weapondata();
|
||||||
|
player wl_set_stored_weapondata( curweapondata );
|
||||||
|
player switchtoweapon( weapondata["name"] );
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
|
||||||
|
player wl_clear_stored_weapondata();
|
||||||
|
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
|
||||||
|
player switchtoweapon( weapondata["name"] );
|
||||||
|
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
|
||||||
|
}
|
||||||
|
|
||||||
|
level notify( "weapon_locker_grab" );
|
||||||
|
player playsoundtoplayer( "evt_fridge_locker_open", player );
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggerweaponslockerweaponchangethink( trigger )
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
self endon( "death" );
|
||||||
|
trigger endon( "kill_trigger" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
self waittill( "weapon_change", newweapon );
|
||||||
|
|
||||||
|
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_weapon_locker_mapping( fromweapon, toweapon )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.remap_weapon_locker_weapons ) )
|
||||||
|
level.remap_weapon_locker_weapons = [];
|
||||||
|
|
||||||
|
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
|
||||||
|
}
|
||||||
|
|
||||||
|
remap_weapon( weapondata, maptable )
|
||||||
|
{
|
||||||
|
name = get_base_name( weapondata["name"] );
|
||||||
|
att = get_attachment_name( weapondata["name"] );
|
||||||
|
|
||||||
|
if ( isdefined( maptable[name] ) )
|
||||||
|
{
|
||||||
|
weapondata["name"] = maptable[name];
|
||||||
|
name = weapondata["name"];
|
||||||
|
|
||||||
|
if ( is_weapon_upgraded( name ) )
|
||||||
|
{
|
||||||
|
if ( isdefined( att ) && weapon_supports_attachments( name ) )
|
||||||
|
{
|
||||||
|
base = get_base_weapon_name( name, 1 );
|
||||||
|
|
||||||
|
if ( !weapon_supports_this_attachment( base, att ) )
|
||||||
|
att = random_attachment( base );
|
||||||
|
|
||||||
|
weapondata["name"] = weapondata["name"] + "+" + att;
|
||||||
|
}
|
||||||
|
else if ( weapon_supports_default_attachment( name ) )
|
||||||
|
{
|
||||||
|
att = default_attachment( name );
|
||||||
|
weapondata["name"] = weapondata["name"] + "+" + att;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return weapondata;
|
||||||
|
|
||||||
|
name = weapondata["name"];
|
||||||
|
dw_name = weapondualwieldweaponname( name );
|
||||||
|
alt_name = weaponaltweaponname( name );
|
||||||
|
|
||||||
|
if ( name != "none" )
|
||||||
|
{
|
||||||
|
weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
|
||||||
|
weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( dw_name != "none" )
|
||||||
|
weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
|
||||||
|
|
||||||
|
if ( alt_name != "none" )
|
||||||
|
{
|
||||||
|
weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
|
||||||
|
weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
weapondata["dw_name"] = dw_name;
|
||||||
|
weapondata["alt_name"] = alt_name;
|
||||||
|
return weapondata;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user