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,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -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
|
else
|
||||||
{
|
|
||||||
dosimpletraverse( "jump_down_72" );
|
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
|
else
|
||||||
{
|
|
||||||
dosimpletraverse( "jump_down_96" );
|
dosimpletraverse( "jump_down_96" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,31 +1,34 @@
|
|||||||
#include maps/mp/zombies/_zm_equipment;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio_announcer;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/_demo;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_weap_cymbal_monkey;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/zombies/_zm_magicbox;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
#include maps/mp/zombies/_zm_game_module;
|
#include maps\mp\gametypes_zm\zmeat;
|
||||||
#include maps/mp/zombies/_zm;
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
#include maps/mp/zombies/_zm_game_module_meat_utility;
|
#include maps\mp\zombies\_zm_game_module_meat_utility;
|
||||||
#include maps/mp/zombies/_zm_powerups;
|
#include maps\mp\zombies\_zm;
|
||||||
#include maps/mp/gametypes_zm/zmeat;
|
#include maps\mp\zombies\_zm_game_module;
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include maps\mp\zombies\_zm_magicbox;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_weap_cymbal_monkey;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\_demo;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_audio_announcer;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
|
|
||||||
main()
|
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.custom_spectate_permissions = ::setspectatepermissionsgrief;
|
level.custom_spectate_permissions = ::setspectatepermissionsgrief;
|
||||||
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::grief_custom_stat_update;
|
level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update;
|
||||||
level._game_module_player_damage_callback = ::maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback;
|
level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback;
|
||||||
level.custom_end_screen = ::custom_end_screen;
|
level.custom_end_screen = ::custom_end_screen;
|
||||||
level.gamemode_map_postinit["zgrief"] = ::postinit_func;
|
level.gamemode_map_postinit["zgrief"] = ::postinit_func;
|
||||||
level._supress_survived_screen = 1;
|
level._supress_survived_screen = 1;
|
||||||
@ -38,13 +41,13 @@ main()
|
|||||||
level.game_module_onplayerconnect = ::grief_onplayerconnect;
|
level.game_module_onplayerconnect = ::grief_onplayerconnect;
|
||||||
level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic;
|
level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic;
|
||||||
level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect;
|
level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect;
|
||||||
maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zgrief" );
|
maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" );
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_onplayerconnect()
|
grief_onplayerconnect()
|
||||||
{
|
{
|
||||||
self thread move_team_icons();
|
self thread move_team_icons();
|
||||||
self thread maps/mp/gametypes_zm/zmeat::create_item_meat_watcher();
|
self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher();
|
||||||
self thread zgrief_player_bled_out_msg();
|
self thread zgrief_player_bled_out_msg();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,8 +67,8 @@ setspectatepermissionsgrief()
|
|||||||
custom_end_screen()
|
custom_end_screen()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
players[i].game_over_hud = newclienthudelem( players[i] );
|
players[i].game_over_hud = newclienthudelem( players[i] );
|
||||||
players[i].game_over_hud.alignx = "center";
|
players[i].game_over_hud.alignx = "center";
|
||||||
@ -81,11 +84,13 @@ custom_end_screen()
|
|||||||
players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" );
|
players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" );
|
||||||
players[i].game_over_hud fadeovertime( 1 );
|
players[i].game_over_hud fadeovertime( 1 );
|
||||||
players[i].game_over_hud.alpha = 1;
|
players[i].game_over_hud.alpha = 1;
|
||||||
|
|
||||||
if ( players[i] issplitscreen() )
|
if ( players[i] issplitscreen() )
|
||||||
{
|
{
|
||||||
players[i].game_over_hud.fontscale = 2;
|
players[i].game_over_hud.fontscale = 2;
|
||||||
players[i].game_over_hud.y += 40;
|
players[i].game_over_hud.y += 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
players[i].survived_hud = newclienthudelem( players[i] );
|
players[i].survived_hud = newclienthudelem( players[i] );
|
||||||
players[i].survived_hud.alignx = "center";
|
players[i].survived_hud.alignx = "center";
|
||||||
players[i].survived_hud.aligny = "middle";
|
players[i].survived_hud.aligny = "middle";
|
||||||
@ -97,37 +102,31 @@ custom_end_screen()
|
|||||||
players[i].survived_hud.alpha = 0;
|
players[i].survived_hud.alpha = 0;
|
||||||
players[i].survived_hud.color = ( 1, 1, 1 );
|
players[i].survived_hud.color = ( 1, 1, 1 );
|
||||||
players[i].survived_hud.hidewheninmenu = 1;
|
players[i].survived_hud.hidewheninmenu = 1;
|
||||||
|
|
||||||
if ( players[i] issplitscreen() )
|
if ( players[i] issplitscreen() )
|
||||||
{
|
{
|
||||||
players[ i ].survived_hud.fontscale = 1,5;
|
players[i].survived_hud.fontscale = 1.5;
|
||||||
players[i].survived_hud.y += 40;
|
players[i].survived_hud.y += 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
winner_text = &"ZOMBIE_GRIEF_WIN";
|
winner_text = &"ZOMBIE_GRIEF_WIN";
|
||||||
loser_text = &"ZOMBIE_GRIEF_LOSE";
|
loser_text = &"ZOMBIE_GRIEF_LOSE";
|
||||||
|
|
||||||
if ( level.round_number < 2 )
|
if ( level.round_number < 2 )
|
||||||
{
|
{
|
||||||
winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE";
|
winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE";
|
||||||
loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE";
|
loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE";
|
||||||
}
|
}
|
||||||
if ( isDefined( level.host_ended_game ) && level.host_ended_game )
|
|
||||||
{
|
if ( isdefined( level.host_ended_game ) && level.host_ended_game )
|
||||||
players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" );
|
players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" );
|
||||||
}
|
else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( level.gamemodulewinningteam ) && players[ i ]._encounters_team == level.gamemodulewinningteam )
|
|
||||||
{
|
|
||||||
players[i].survived_hud settext( winner_text, level.round_number );
|
players[i].survived_hud settext( winner_text, level.round_number );
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
players[i].survived_hud settext( loser_text, level.round_number );
|
players[i].survived_hud settext( loser_text, level.round_number );
|
||||||
}
|
|
||||||
}
|
|
||||||
players[i].survived_hud fadeovertime( 1 );
|
players[i].survived_hud fadeovertime( 1 );
|
||||||
players[i].survived_hud.alpha = 1;
|
players[i].survived_hud.alpha = 1;
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +147,7 @@ postinit_func()
|
|||||||
level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" );
|
level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" );
|
||||||
level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" );
|
level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" );
|
||||||
include_powerup( "meat_stink" );
|
include_powerup( "meat_stink" );
|
||||||
maps/mp/zombies/_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 );
|
maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 );
|
||||||
setmatchtalkflag( "DeadChatWithDead", 1 );
|
setmatchtalkflag( "DeadChatWithDead", 1 );
|
||||||
setmatchtalkflag( "DeadChatWithTeam", 1 );
|
setmatchtalkflag( "DeadChatWithTeam", 1 );
|
||||||
setmatchtalkflag( "DeadHearTeamLiving", 1 );
|
setmatchtalkflag( "DeadHearTeamLiving", 1 );
|
||||||
@ -159,29 +158,25 @@ postinit_func()
|
|||||||
func_should_drop_meat()
|
func_should_drop_meat()
|
||||||
{
|
{
|
||||||
if ( minigun_no_drop() )
|
if ( minigun_no_drop() )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
minigun_no_drop()
|
minigun_no_drop()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( players[i].ignoreme == 1 )
|
if ( players[i].ignoreme == 1 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
if ( isdefined( level.meat_on_ground ) && level.meat_on_ground )
|
||||||
if ( isDefined( level.meat_on_ground ) && level.meat_on_ground )
|
return true;
|
||||||
{
|
|
||||||
return 1;
|
return false;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_game_end_check_func()
|
grief_game_end_check_func()
|
||||||
@ -191,21 +186,19 @@ grief_game_end_check_func()
|
|||||||
|
|
||||||
player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
|
player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
|
||||||
{
|
{
|
||||||
if ( isDefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie )
|
if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
|
game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
|
||||||
{
|
{
|
||||||
penalty = 10;
|
penalty = 10;
|
||||||
if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" )
|
|
||||||
{
|
if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" )
|
||||||
self applyknockback( idamage, vdir );
|
self applyknockback( idamage, vdir );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
onprecachegametype()
|
onprecachegametype()
|
||||||
{
|
{
|
||||||
@ -219,9 +212,9 @@ onprecachegametype()
|
|||||||
precacheshader( "waypoint_revive_cdc_zm" );
|
precacheshader( "waypoint_revive_cdc_zm" );
|
||||||
precacheshader( "waypoint_revive_cia_zm" );
|
precacheshader( "waypoint_revive_cia_zm" );
|
||||||
level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" );
|
level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" );
|
||||||
level thread maps/mp/zombies/_zm_game_module_meat_utility::init_item_meat( "zgrief" );
|
level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" );
|
||||||
level thread maps/mp/gametypes_zm/_zm_gametype::init();
|
level thread maps\mp\gametypes_zm\_zm_gametype::init();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zgrief" );
|
maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" );
|
||||||
}
|
}
|
||||||
|
|
||||||
onstartgametype()
|
onstartgametype()
|
||||||
@ -229,34 +222,30 @@ onstartgametype()
|
|||||||
level.no_end_game_check = 1;
|
level.no_end_game_check = 1;
|
||||||
level._game_module_game_end_check = ::grief_game_end_check_func;
|
level._game_module_game_end_check = ::grief_game_end_check_func;
|
||||||
level.round_end_custom_logic = ::grief_round_end_custom_logic;
|
level.round_end_custom_logic = ::grief_round_end_custom_logic;
|
||||||
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( "zgrief", ::zgrief_main );
|
maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main );
|
||||||
}
|
}
|
||||||
|
|
||||||
zgrief_main()
|
zgrief_main()
|
||||||
{
|
{
|
||||||
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();
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
level thread maps/mp/zombies/_zm_game_module::wait_for_team_death_and_round_end();
|
level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end();
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a302 = players;
|
|
||||||
_k302 = getFirstArrayKey( _a302 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k302 ) )
|
|
||||||
{
|
|
||||||
player = _a302[ _k302 ];
|
|
||||||
player.is_hotjoin = 0;
|
player.is_hotjoin = 0;
|
||||||
_k302 = getNextArrayKey( _a302, _k302 );
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
playsoundatposition( "vox_zmba_grief_intro_0", ( 1, 1, 1 ) );
|
playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
move_team_icons()
|
move_team_icons()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_start_chest()
|
kill_start_chest()
|
||||||
@ -264,7 +253,7 @@ kill_start_chest()
|
|||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
wait 2;
|
wait 2;
|
||||||
start_chest = getstruct( "start_chest", "script_noteworthy" );
|
start_chest = getstruct( "start_chest", "script_noteworthy" );
|
||||||
start_chest maps/mp/zombies/_zm_magicbox::hide_chest();
|
start_chest maps\mp\zombies\_zm_magicbox::hide_chest();
|
||||||
}
|
}
|
||||||
|
|
||||||
meat_stink_powerup_grab( powerup, who )
|
meat_stink_powerup_grab( powerup, who )
|
||||||
@ -281,21 +270,16 @@ meat_stink( who )
|
|||||||
{
|
{
|
||||||
weapons = who getweaponslist();
|
weapons = who getweaponslist();
|
||||||
has_meat = 0;
|
has_meat = 0;
|
||||||
_a353 = weapons;
|
|
||||||
_k353 = getFirstArrayKey( _a353 );
|
foreach ( weapon in weapons )
|
||||||
while ( isDefined( _k353 ) )
|
|
||||||
{
|
{
|
||||||
weapon = _a353[ _k353 ];
|
|
||||||
if ( weapon == "item_meat_zm" )
|
if ( weapon == "item_meat_zm" )
|
||||||
{
|
|
||||||
has_meat = 1;
|
has_meat = 1;
|
||||||
}
|
}
|
||||||
_k353 = getNextArrayKey( _a353, _k353 );
|
|
||||||
}
|
|
||||||
if ( has_meat )
|
if ( has_meat )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
who.pre_meat_weapon = who getcurrentweapon();
|
who.pre_meat_weapon = who getcurrentweapon();
|
||||||
level notify( "meat_grabbed" );
|
level notify( "meat_grabbed" );
|
||||||
who notify( "meat_grabbed" );
|
who notify( "meat_grabbed" );
|
||||||
@ -312,29 +296,30 @@ meat_stink_on_ground( position_to_play )
|
|||||||
attractor_point = spawn( "script_model", position_to_play );
|
attractor_point = spawn( "script_model", position_to_play );
|
||||||
attractor_point setmodel( "tag_origin" );
|
attractor_point setmodel( "tag_origin" );
|
||||||
attractor_point playsound( "zmb_land_meat" );
|
attractor_point playsound( "zmb_land_meat" );
|
||||||
wait 0,2;
|
wait 0.2;
|
||||||
playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" );
|
playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" );
|
||||||
attractor_point playloopsound( "zmb_meat_flies" );
|
attractor_point playloopsound( "zmb_meat_flies" );
|
||||||
attractor_point create_zombie_point_of_interest( 1536, 32, 10000 );
|
attractor_point create_zombie_point_of_interest( 1536, 32, 10000 );
|
||||||
attractor_point.attract_to_origin = 1;
|
attractor_point.attract_to_origin = 1;
|
||||||
attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 );
|
attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 );
|
||||||
attractor_point thread maps/mp/zombies/_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete();
|
attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete();
|
||||||
attractor_point delay_thread( 15, ::self_delete );
|
attractor_point delay_thread( 15, ::self_delete );
|
||||||
wait 16;
|
wait 16.0;
|
||||||
level.meat_on_ground = undefined;
|
level.meat_on_ground = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
meat_bounce_override( pos, normal, ent )
|
meat_bounce_override( pos, normal, ent )
|
||||||
{
|
{
|
||||||
if ( isDefined( ent ) && isplayer( ent ) )
|
if ( isdefined( ent ) && isplayer( ent ) )
|
||||||
{
|
{
|
||||||
if ( !ent maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
{
|
||||||
level thread meat_stink_player( ent );
|
level thread meat_stink_player( ent );
|
||||||
if ( isDefined( self.owner ) )
|
|
||||||
|
if ( isdefined( self.owner ) )
|
||||||
{
|
{
|
||||||
maps/mp/_demo::bookmark( "zm_player_meat_stink", getTime(), ent, self.owner, 0, self );
|
maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self );
|
||||||
self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" );
|
self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -342,52 +327,51 @@ meat_bounce_override( pos, normal, ent )
|
|||||||
{
|
{
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
closest_player = undefined;
|
closest_player = undefined;
|
||||||
closest_player_dist = 10000;
|
closest_player_dist = 10000.0;
|
||||||
player_index = 0;
|
|
||||||
while ( player_index < players.size )
|
for ( player_index = 0; player_index < players.size; player_index++ )
|
||||||
{
|
{
|
||||||
player_to_check = players[player_index];
|
player_to_check = players[player_index];
|
||||||
|
|
||||||
if ( self.owner == player_to_check )
|
if ( self.owner == player_to_check )
|
||||||
{
|
|
||||||
player_index++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else if ( player_to_check maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
|
||||||
player_index++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
distsq = distancesquared( pos, player_to_check.origin );
|
distsq = distancesquared( pos, player_to_check.origin );
|
||||||
|
|
||||||
if ( distsq < closest_player_dist )
|
if ( distsq < closest_player_dist )
|
||||||
{
|
{
|
||||||
closest_player = player_to_check;
|
closest_player = player_to_check;
|
||||||
closest_player_dist = distsq;
|
closest_player_dist = distsq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player_index++;
|
|
||||||
}
|
if ( isdefined( closest_player ) )
|
||||||
if ( isDefined( closest_player ) )
|
|
||||||
{
|
{
|
||||||
level thread meat_stink_player( closest_player );
|
level thread meat_stink_player( closest_player );
|
||||||
if ( isDefined( self.owner ) )
|
|
||||||
|
if ( isdefined( self.owner ) )
|
||||||
{
|
{
|
||||||
maps/mp/_demo::bookmark( "zm_player_meat_stink", getTime(), closest_player, self.owner, 0, self );
|
maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self );
|
||||||
self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" );
|
self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
valid_poi = check_point_in_enabled_zone( pos, undefined, undefined );
|
valid_poi = check_point_in_enabled_zone( pos, undefined, undefined );
|
||||||
|
|
||||||
if ( valid_poi )
|
if ( valid_poi )
|
||||||
{
|
{
|
||||||
self hide();
|
self hide();
|
||||||
level thread meat_stink_on_ground( self.origin );
|
level thread meat_stink_on_ground( self.origin );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
playfx( level._effect["meat_impact"], self.origin );
|
playfx( level._effect["meat_impact"], self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,88 +381,84 @@ meat_stink_player( who )
|
|||||||
level endon( "new_meat_stink_player" );
|
level endon( "new_meat_stink_player" );
|
||||||
who.ignoreme = 0;
|
who.ignoreme = 0;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a486 = players;
|
|
||||||
_k486 = getFirstArrayKey( _a486 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k486 ) )
|
|
||||||
{
|
{
|
||||||
player = _a486[ _k486 ];
|
|
||||||
player thread meat_stink_player_cleanup();
|
player thread meat_stink_player_cleanup();
|
||||||
|
|
||||||
if ( player != who )
|
if ( player != who )
|
||||||
{
|
|
||||||
player.ignoreme = 1;
|
player.ignoreme = 1;
|
||||||
}
|
}
|
||||||
_k486 = getNextArrayKey( _a486, _k486 );
|
|
||||||
}
|
|
||||||
who thread meat_stink_player_create();
|
who thread meat_stink_player_create();
|
||||||
who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" );
|
who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" );
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a501 = players;
|
|
||||||
_k501 = getFirstArrayKey( _a501 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k501 ) )
|
|
||||||
{
|
{
|
||||||
player = _a501[ _k501 ];
|
|
||||||
player thread meat_stink_player_cleanup();
|
player thread meat_stink_player_cleanup();
|
||||||
player.ignoreme = 0;
|
player.ignoreme = 0;
|
||||||
_k501 = getNextArrayKey( _a501, _k501 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
meat_stink_player_create()
|
meat_stink_player_create()
|
||||||
{
|
{
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_received" );
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
tagname = "J_SpineLower";
|
tagname = "J_SpineLower";
|
||||||
self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) );
|
self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) );
|
||||||
self.meat_stink_3p setmodel( "tag_origin" );
|
self.meat_stink_3p setmodel( "tag_origin" );
|
||||||
self.meat_stink_3p linkto( self, tagname );
|
self.meat_stink_3p linkto( self, tagname );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" );
|
playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" );
|
||||||
self setclientfieldtoplayer( "meat_stink", 1 );
|
self setclientfieldtoplayer( "meat_stink", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
meat_stink_player_cleanup()
|
meat_stink_player_cleanup()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.meat_stink_3p ) )
|
if ( isdefined( self.meat_stink_3p ) )
|
||||||
{
|
{
|
||||||
self.meat_stink_3p unlink();
|
self.meat_stink_3p unlink();
|
||||||
self.meat_stink_3p delete();
|
self.meat_stink_3p delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
self setclientfieldtoplayer( "meat_stink", 0 );
|
self setclientfieldtoplayer( "meat_stink", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
door_close_zombie_think()
|
door_close_zombie_think()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
while ( isalive( self ) )
|
while ( isalive( self ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.enemy ) && isplayer( self.enemy ) )
|
if ( isdefined( self.enemy ) && isplayer( self.enemy ) )
|
||||||
{
|
{
|
||||||
insamezone = 0;
|
insamezone = 0;
|
||||||
keys = getarraykeys( level.zones );
|
keys = getarraykeys( level.zones );
|
||||||
i = 0;
|
|
||||||
while ( i < keys.size )
|
for ( i = 0; i < keys.size; i++ )
|
||||||
{
|
|
||||||
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) && self.enemy maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) )
|
|
||||||
{
|
{
|
||||||
|
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) )
|
||||||
insamezone = 1;
|
insamezone = 1;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
if ( insamezone )
|
||||||
while ( insamezone )
|
|
||||||
{
|
{
|
||||||
wait 3;
|
wait 3;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
nearestzombienode = getnearestnode( self.origin );
|
nearestzombienode = getnearestnode( self.origin );
|
||||||
nearestplayernode = getnearestnode( self.enemy.origin );
|
nearestplayernode = getnearestnode( self.enemy.origin );
|
||||||
if ( isDefined( nearestzombienode ) && isDefined( nearestplayernode ) )
|
|
||||||
|
if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) )
|
||||||
{
|
{
|
||||||
if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) )
|
if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) )
|
||||||
{
|
|
||||||
self silentlyremovezombie();
|
self silentlyremovezombie();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -497,9 +477,11 @@ zgrief_player_bled_out_msg()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "bled_out" );
|
self waittill( "bled_out" );
|
||||||
|
|
||||||
level thread update_players_on_bleedout_or_disconnect( self );
|
level thread update_players_on_bleedout_or_disconnect( self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -507,79 +489,84 @@ zgrief_player_bled_out_msg()
|
|||||||
show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game )
|
show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
|
while ( isdefined( level.hostmigrationtimer ) )
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
zgrief_hudmsg = newclienthudelem( self );
|
zgrief_hudmsg = newclienthudelem( self );
|
||||||
zgrief_hudmsg.alignx = "center";
|
zgrief_hudmsg.alignx = "center";
|
||||||
zgrief_hudmsg.aligny = "middle";
|
zgrief_hudmsg.aligny = "middle";
|
||||||
zgrief_hudmsg.horzalign = "center";
|
zgrief_hudmsg.horzalign = "center";
|
||||||
zgrief_hudmsg.vertalign = "middle";
|
zgrief_hudmsg.vertalign = "middle";
|
||||||
zgrief_hudmsg.y -= 130;
|
zgrief_hudmsg.y -= 130;
|
||||||
|
|
||||||
if ( self issplitscreen() )
|
if ( self issplitscreen() )
|
||||||
{
|
|
||||||
zgrief_hudmsg.y += 70;
|
zgrief_hudmsg.y += 70;
|
||||||
}
|
|
||||||
if ( isDefined( offset ) )
|
if ( isdefined( offset ) )
|
||||||
{
|
|
||||||
zgrief_hudmsg.y += offset;
|
zgrief_hudmsg.y += offset;
|
||||||
}
|
|
||||||
zgrief_hudmsg.foreground = 1;
|
zgrief_hudmsg.foreground = 1;
|
||||||
zgrief_hudmsg.fontscale = 5;
|
zgrief_hudmsg.fontscale = 5;
|
||||||
zgrief_hudmsg.alpha = 0;
|
zgrief_hudmsg.alpha = 0;
|
||||||
zgrief_hudmsg.color = ( 1, 1, 1 );
|
zgrief_hudmsg.color = ( 1, 1, 1 );
|
||||||
zgrief_hudmsg.hidewheninmenu = 1;
|
zgrief_hudmsg.hidewheninmenu = 1;
|
||||||
zgrief_hudmsg.font = "default";
|
zgrief_hudmsg.font = "default";
|
||||||
if ( isDefined( cleanup_end_game ) && cleanup_end_game )
|
|
||||||
|
if ( isdefined( cleanup_end_game ) && cleanup_end_game )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
zgrief_hudmsg thread show_grief_hud_msg_cleanup();
|
zgrief_hudmsg thread show_grief_hud_msg_cleanup();
|
||||||
}
|
}
|
||||||
if ( isDefined( msg_parm ) )
|
|
||||||
{
|
if ( isdefined( msg_parm ) )
|
||||||
zgrief_hudmsg settext( msg, msg_parm );
|
zgrief_hudmsg settext( msg, msg_parm );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
zgrief_hudmsg settext( msg );
|
zgrief_hudmsg settext( msg );
|
||||||
}
|
|
||||||
zgrief_hudmsg changefontscaleovertime( 0,25 );
|
zgrief_hudmsg changefontscaleovertime( 0.25 );
|
||||||
zgrief_hudmsg fadeovertime( 0,25 );
|
zgrief_hudmsg fadeovertime( 0.25 );
|
||||||
zgrief_hudmsg.alpha = 1;
|
zgrief_hudmsg.alpha = 1;
|
||||||
zgrief_hudmsg.fontscale = 2;
|
zgrief_hudmsg.fontscale = 2;
|
||||||
wait 3,25;
|
wait 3.25;
|
||||||
zgrief_hudmsg changefontscaleovertime( 1 );
|
zgrief_hudmsg changefontscaleovertime( 1 );
|
||||||
zgrief_hudmsg fadeovertime( 1 );
|
zgrief_hudmsg fadeovertime( 1 );
|
||||||
zgrief_hudmsg.alpha = 0;
|
zgrief_hudmsg.alpha = 0;
|
||||||
zgrief_hudmsg.fontscale = 5;
|
zgrief_hudmsg.fontscale = 5;
|
||||||
wait 1;
|
wait 1;
|
||||||
zgrief_hudmsg notify( "death" );
|
zgrief_hudmsg notify( "death" );
|
||||||
if ( isDefined( zgrief_hudmsg ) )
|
|
||||||
{
|
if ( isdefined( zgrief_hudmsg ) )
|
||||||
zgrief_hudmsg destroy();
|
zgrief_hudmsg destroy();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
show_grief_hud_msg_cleanup()
|
show_grief_hud_msg_cleanup()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
level waittill( "end_game" );
|
level waittill( "end_game" );
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
if ( isdefined( self ) )
|
||||||
self destroy();
|
self destroy();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
grief_reset_message()
|
grief_reset_message()
|
||||||
{
|
{
|
||||||
msg = &"ZOMBIE_GRIEF_RESET";
|
msg = &"ZOMBIE_GRIEF_RESET";
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a681 = players;
|
|
||||||
_k681 = getFirstArrayKey( _a681 );
|
if ( isdefined( level.hostmigrationtimer ) )
|
||||||
while ( isDefined( _k681 ) )
|
|
||||||
{
|
{
|
||||||
player = _a681[ _k681 ];
|
while ( isdefined( level.hostmigrationtimer ) )
|
||||||
player thread show_grief_hud_msg( msg );
|
wait 0.05;
|
||||||
_k681 = getNextArrayKey( _a681, _k681 );
|
|
||||||
|
wait 4;
|
||||||
}
|
}
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "grief_restarted" );
|
|
||||||
|
foreach ( player in players )
|
||||||
|
player thread show_grief_hud_msg( msg );
|
||||||
|
|
||||||
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" );
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
|
grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
|
||||||
@ -589,140 +576,145 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap
|
|||||||
self.grief_savedweapon_weaponsammo_clip = [];
|
self.grief_savedweapon_weaponsammo_clip = [];
|
||||||
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
||||||
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
||||||
if ( isDefined( self.grief_savedweapon_grenades ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_grenades ) )
|
||||||
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
||||||
}
|
|
||||||
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
||||||
if ( isDefined( self.grief_savedweapon_tactical ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_tactical ) )
|
||||||
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
|
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
|
||||||
}
|
|
||||||
i = 0;
|
for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ )
|
||||||
while ( i < self.grief_savedweapon_weapons.size )
|
|
||||||
{
|
{
|
||||||
self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( 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] );
|
self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
|
|
||||||
{
|
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||||
self.grief_hasriotshield = 1;
|
self.grief_hasriotshield = 1;
|
||||||
}
|
|
||||||
if ( self hasweapon( "claymore_zm" ) )
|
if ( self hasweapon( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
self.grief_savedweapon_claymore = 1;
|
self.grief_savedweapon_claymore = 1;
|
||||||
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
|
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( isdefined( self.current_equipment ) )
|
||||||
|
self.grief_savedweapon_equipment = self.current_equipment;
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_laststand_weapons_return()
|
grief_laststand_weapons_return()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief )
|
if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ( !isdefined( self.grief_savedweapon_weapons ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
primary_weapons_returned = 0;
|
||||||
|
|
||||||
|
foreach ( index, weapon in self.grief_savedweapon_weapons )
|
||||||
{
|
{
|
||||||
return 0;
|
if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( isweaponprimary( weapon ) )
|
||||||
|
{
|
||||||
|
if ( primary_weapons_returned >= 2 )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
primary_weapons_returned++;
|
||||||
}
|
}
|
||||||
if ( !isDefined( self.grief_savedweapon_weapons ) )
|
|
||||||
{
|
if ( "item_meat_zm" == weapon )
|
||||||
return 0;
|
continue;
|
||||||
}
|
|
||||||
_a742 = self.grief_savedweapon_weapons;
|
self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) );
|
||||||
index = getFirstArrayKey( _a742 );
|
|
||||||
while ( isDefined( index ) )
|
if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) )
|
||||||
{
|
|
||||||
weapon = _a742[ index ];
|
|
||||||
if ( isDefined( self.grief_savedweapon_grenades ) || weapon == self.grief_savedweapon_grenades && isDefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) );
|
|
||||||
if ( isDefined( self.grief_savedweapon_weaponsammo_clip[ index ] ) )
|
|
||||||
{
|
|
||||||
self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] );
|
self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] );
|
||||||
}
|
|
||||||
if ( isDefined( self.grief_savedweapon_weaponsammo_stock[ index ] ) )
|
if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) )
|
||||||
{
|
|
||||||
self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] );
|
self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
index = getNextArrayKey( _a742, index );
|
if ( isdefined( self.grief_savedweapon_grenades ) )
|
||||||
}
|
|
||||||
if ( isDefined( self.grief_savedweapon_grenades ) )
|
|
||||||
{
|
{
|
||||||
self giveweapon( self.grief_savedweapon_grenades );
|
self giveweapon( self.grief_savedweapon_grenades );
|
||||||
if ( isDefined( self.grief_savedweapon_grenades_clip ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_grenades_clip ) )
|
||||||
self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip );
|
self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( isDefined( self.grief_savedweapon_tactical ) )
|
if ( isdefined( self.grief_savedweapon_tactical ) )
|
||||||
{
|
{
|
||||||
self giveweapon( self.grief_savedweapon_tactical );
|
self giveweapon( self.grief_savedweapon_tactical );
|
||||||
if ( isDefined( self.grief_savedweapon_tactical_clip ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_tactical_clip ) )
|
||||||
self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip );
|
self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( isdefined( self.current_equipment ) )
|
||||||
|
self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment );
|
||||||
|
|
||||||
|
if ( isdefined( self.grief_savedweapon_equipment ) )
|
||||||
|
{
|
||||||
|
self.do_not_display_equipment_pickup_hint = 1;
|
||||||
|
self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment );
|
||||||
|
self.do_not_display_equipment_pickup_hint = undefined;
|
||||||
}
|
}
|
||||||
if ( isDefined( self.grief_hasriotshield ) && self.grief_hasriotshield )
|
|
||||||
{
|
if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield )
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" );
|
|
||||||
if ( isDefined( self.player_shield_reset_health ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.player_shield_reset_health ) )
|
||||||
self [[ self.player_shield_reset_health ]]();
|
self [[ self.player_shield_reset_health ]]();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( isDefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore )
|
if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore )
|
||||||
{
|
{
|
||||||
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 setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip );
|
self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip );
|
||||||
}
|
}
|
||||||
|
|
||||||
primaries = self getweaponslistprimaries();
|
primaries = self getweaponslistprimaries();
|
||||||
_a806 = primaries;
|
|
||||||
_k806 = getFirstArrayKey( _a806 );
|
foreach ( weapon in primaries )
|
||||||
while ( isDefined( _k806 ) )
|
|
||||||
{
|
{
|
||||||
weapon = _a806[ _k806 ];
|
if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon )
|
||||||
if ( isDefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon )
|
|
||||||
{
|
{
|
||||||
self switchtoweapon( weapon );
|
self switchtoweapon( weapon );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
_k806 = getNextArrayKey( _a806, _k806 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( primaries.size > 0 )
|
if ( primaries.size > 0 )
|
||||||
{
|
{
|
||||||
self switchtoweapon( primaries[0] );
|
self switchtoweapon( primaries[0] );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" );
|
assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" );
|
||||||
#/
|
#/
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_store_player_scores()
|
grief_store_player_scores()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a830 = players;
|
|
||||||
_k830 = getFirstArrayKey( _a830 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k830 ) )
|
|
||||||
{
|
|
||||||
player = _a830[ _k830 ];
|
|
||||||
player._pre_round_score = player.score;
|
player._pre_round_score = player.score;
|
||||||
_k830 = getNextArrayKey( _a830, _k830 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_restore_player_score()
|
grief_restore_player_score()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self._pre_round_score ) )
|
if ( !isdefined( self._pre_round_score ) )
|
||||||
{
|
|
||||||
self._pre_round_score = self.score;
|
self._pre_round_score = self.score;
|
||||||
}
|
|
||||||
if ( isDefined( self._pre_round_score ) )
|
if ( isdefined( self._pre_round_score ) )
|
||||||
{
|
{
|
||||||
self.score = self._pre_round_score;
|
self.score = self._pre_round_score;
|
||||||
self.pers["score"] = self._pre_round_score;
|
self.pers["score"] = self._pre_round_score;
|
||||||
@ -731,12 +723,13 @@ grief_restore_player_score()
|
|||||||
|
|
||||||
game_mode_spawn_player_logic()
|
game_mode_spawn_player_logic()
|
||||||
{
|
{
|
||||||
if ( flag( "start_zombie_round_logic" ) && !isDefined( self.is_hotjoin ) )
|
if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) )
|
||||||
{
|
{
|
||||||
self.is_hotjoin = 1;
|
self.is_hotjoin = 1;
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_players_on_bleedout_or_disconnect( excluded_player )
|
update_players_on_bleedout_or_disconnect( excluded_player )
|
||||||
@ -744,71 +737,79 @@ update_players_on_bleedout_or_disconnect( excluded_player )
|
|||||||
other_team = undefined;
|
other_team = undefined;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
players_remaining = 0;
|
players_remaining = 0;
|
||||||
_a867 = players;
|
|
||||||
_k867 = getFirstArrayKey( _a867 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k867 ) )
|
|
||||||
{
|
{
|
||||||
player = _a867[ _k867 ];
|
|
||||||
if ( player == excluded_player )
|
if ( player == excluded_player )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else if ( player.team == excluded_player.team )
|
if ( player.team == excluded_player.team )
|
||||||
{
|
{
|
||||||
if ( is_player_valid( player ) )
|
if ( is_player_valid( player ) )
|
||||||
{
|
|
||||||
players_remaining++;
|
players_remaining++;
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
_k867 = getNextArrayKey( _a867, _k867 );
|
|
||||||
}
|
foreach ( player in players )
|
||||||
_a884 = players;
|
|
||||||
_k884 = getFirstArrayKey( _a884 );
|
|
||||||
while ( isDefined( _k884 ) )
|
|
||||||
{
|
{
|
||||||
player = _a884[ _k884 ];
|
|
||||||
if ( player == excluded_player )
|
if ( player == excluded_player )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else if ( player.team != excluded_player.team )
|
if ( player.team != excluded_player.team )
|
||||||
{
|
{
|
||||||
other_team = player.team;
|
other_team = player.team;
|
||||||
|
|
||||||
if ( players_remaining < 1 )
|
if ( players_remaining < 1 )
|
||||||
{
|
{
|
||||||
player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 );
|
player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 );
|
||||||
player delay_thread( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 );
|
player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 );
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining );
|
player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k884 = getNextArrayKey( _a884, _k884 );
|
|
||||||
}
|
|
||||||
if ( players_remaining == 1 )
|
if ( players_remaining == 1 )
|
||||||
{
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team );
|
|
||||||
}
|
if ( !isdefined( other_team ) )
|
||||||
if ( !isDefined( other_team ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( players_remaining < 1 )
|
if ( players_remaining < 1 )
|
||||||
{
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "4_player_down", other_team );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 )
|
||||||
|
{
|
||||||
|
self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 );
|
||||||
|
}
|
||||||
|
|
||||||
|
_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 )
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "disconnect" );
|
||||||
|
wait( timer );
|
||||||
|
|
||||||
|
if ( isdefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
|
while ( isdefined( level.hostmigrationtimer ) )
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
wait( timer );
|
||||||
|
}
|
||||||
|
|
||||||
|
single_thread( self, func, param1, param2, param3, param4, param5, param6 );
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_round_end_custom_logic()
|
grief_round_end_custom_logic()
|
||||||
{
|
{
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
if ( isDefined( level.gamemodulewinningteam ) )
|
|
||||||
{
|
if ( isdefined( level.gamemodulewinningteam ) )
|
||||||
level notify( "end_round_think" );
|
level notify( "end_round_think" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,45 +1,46 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_ai_dogs;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_zm_gametype;
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_ai_dogs;
|
||||||
|
#include maps\mp\zombies\_zm;
|
||||||
|
|
||||||
main() //checked matches cerberus output
|
main()
|
||||||
{
|
{
|
||||||
maps/mp/gametypes_zm/_zm_gametype::main();
|
maps\mp\gametypes_zm\_zm_gametype::main();
|
||||||
level.onprecachegametype = ::onprecachegametype;
|
level.onprecachegametype = ::onprecachegametype;
|
||||||
level.onstartgametype = ::onstartgametype;
|
level.onstartgametype = ::onstartgametype;
|
||||||
level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func;
|
level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func;
|
||||||
level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update;
|
level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update;
|
||||||
maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" );
|
maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" );
|
||||||
}
|
}
|
||||||
|
|
||||||
onprecachegametype() //checked matches cerberus output
|
onprecachegametype()
|
||||||
{
|
{
|
||||||
level.playersuicideallowed = 1;
|
level.playersuicideallowed = 1;
|
||||||
level.canplayersuicide = ::canplayersuicide;
|
level.canplayersuicide = ::canplayersuicide;
|
||||||
level.suicide_weapon = "death_self_zm";
|
level.suicide_weapon = "death_self_zm";
|
||||||
precacheitem( "death_self_zm" );
|
precacheitem( "death_self_zm" );
|
||||||
maps/mp/zombies/_zm_ai_dogs::init();
|
maps\mp\zombies\_zm_ai_dogs::init();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" );
|
maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" );
|
||||||
}
|
}
|
||||||
|
|
||||||
onstartgametype() //checked matches cerberus output
|
onstartgametype()
|
||||||
{
|
{
|
||||||
maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype();
|
maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype();
|
||||||
maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
|
maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
|
||||||
}
|
}
|
||||||
|
|
||||||
zstandard_main() //checked matches cerberus output
|
zstandard_main()
|
||||||
{
|
{
|
||||||
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
|
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
|
||||||
|
|
||||||
if ( level.dog_rounds_allowed )
|
if ( level.dog_rounds_allowed )
|
||||||
{
|
maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds();
|
||||||
maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds();
|
|
||||||
}
|
level thread maps\mp\zombies\_zm::round_start();
|
||||||
level thread maps/mp/zombies/_zm::round_start();
|
level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies();
|
||||||
level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies();
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
#include maps/mp/zombies/_zm_sidequests;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/_ambientpackage;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_ambientpackage;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -15,36 +17,31 @@ main()
|
|||||||
thread sndlastlifesetup();
|
thread sndlastlifesetup();
|
||||||
thread sndsetupendgamemusicstates();
|
thread sndsetupendgamemusicstates();
|
||||||
thread sndspectatorsetup();
|
thread sndspectatorsetup();
|
||||||
|
|
||||||
if ( is_classic() )
|
if ( is_classic() )
|
||||||
{
|
|
||||||
thread sndmusicegg();
|
thread sndmusicegg();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sndspectatorsetup()
|
sndspectatorsetup()
|
||||||
{
|
{
|
||||||
flag_wait( "initial_players_connected" );
|
flag_wait( "initial_players_connected" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a31 = players;
|
|
||||||
_k31 = getFirstArrayKey( _a31 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k31 ) )
|
|
||||||
{
|
|
||||||
player = _a31[ _k31 ];
|
|
||||||
player thread sndspectatorafterliferevert();
|
player thread sndspectatorafterliferevert();
|
||||||
_k31 = getNextArrayKey( _a31, _k31 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndspectatorafterliferevert()
|
sndspectatorafterliferevert()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_spectator" );
|
self waittill( "spawned_spectator" );
|
||||||
|
|
||||||
while ( self.sessionstate == "spectator" )
|
while ( self.sessionstate == "spectator" )
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
self clientnotify( "sndSR" );
|
self clientnotify( "sndSR" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,31 +49,30 @@ sndspectatorafterliferevert()
|
|||||||
sndsetupendgamemusicstates()
|
sndsetupendgamemusicstates()
|
||||||
{
|
{
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" );
|
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" );
|
||||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" );
|
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" );
|
||||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" );
|
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sndperksacolajingle( perksacola )
|
sndperksacolajingle( perksacola )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.jingle_is_playing ) )
|
if ( !isdefined( self.jingle_is_playing ) )
|
||||||
{
|
|
||||||
self.jingle_is_playing = 0;
|
self.jingle_is_playing = 0;
|
||||||
}
|
|
||||||
if ( !isDefined( self.script_sound ) )
|
if ( !isdefined( self.script_sound ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !isDefined( self.sndent ) )
|
if ( !isdefined( self.sndent ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( self.jingle_is_playing == 0 && level.music_override == 0 )
|
if ( self.jingle_is_playing == 0 && level.music_override == 0 )
|
||||||
{
|
{
|
||||||
self.jingle_is_playing = 1;
|
self.jingle_is_playing = 1;
|
||||||
self.sndent stoploopsound( 1 );
|
self.sndent stoploopsound( 1 );
|
||||||
self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" );
|
self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" );
|
||||||
|
|
||||||
self.sndent waittill( "sndJingleDone" );
|
self.sndent waittill( "sndJingleDone" );
|
||||||
|
|
||||||
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
||||||
self.jingle_is_playing = 0;
|
self.jingle_is_playing = 0;
|
||||||
}
|
}
|
||||||
@ -87,38 +83,35 @@ sndperksacolaloop()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self.sndent = spawn( "script_origin", self.origin );
|
self.sndent = spawn( "script_origin", self.origin );
|
||||||
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
wait randomfloatrange( 31, 45 );
|
wait( randomfloatrange( 31, 45 ) );
|
||||||
|
|
||||||
if ( randomint( 100 ) < 15 )
|
if ( randomint( 100 ) < 15 )
|
||||||
{
|
|
||||||
self thread sndperksacolajingle();
|
self thread sndperksacolajingle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sndeventstingertriggers()
|
sndeventstingertriggers()
|
||||||
{
|
{
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
triggers = getentarray( "sndMusicEventStinger", "targetname" );
|
triggers = getentarray( "sndMusicEventStinger", "targetname" );
|
||||||
_a105 = triggers;
|
|
||||||
_k105 = getFirstArrayKey( _a105 );
|
foreach ( trigger in triggers )
|
||||||
while ( isDefined( _k105 ) )
|
|
||||||
{
|
|
||||||
trigger = _a105[ _k105 ];
|
|
||||||
trigger thread sndeventstingertriggerthink();
|
trigger thread sndeventstingertriggerthink();
|
||||||
_k105 = getNextArrayKey( _a105, _k105 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndeventstingertriggerthink()
|
sndeventstingertriggerthink()
|
||||||
{
|
{
|
||||||
struct = getstruct( self.target, "targetname" );
|
struct = getstruct( self.target, "targetname" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger" );
|
self waittill( "trigger" );
|
||||||
|
|
||||||
playsoundatposition( struct.script_sound, struct.origin );
|
playsoundatposition( struct.script_sound, struct.origin );
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trigger_stinger" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trigger_stinger" );
|
||||||
wait 5;
|
wait 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,12 +121,14 @@ sndeventtension()
|
|||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
wait 30;
|
wait 30;
|
||||||
struct = spawnstruct();
|
struct = spawnstruct();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
tension = sndgettensionlevel( struct );
|
tension = sndgettensionlevel( struct );
|
||||||
waittime = tension.waittime;
|
waittime = tension.waittime;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( tension.tension_level );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( tension.tension_level );
|
||||||
level thread waitfornexttension( waittime );
|
level thread waitfornexttension( waittime );
|
||||||
|
|
||||||
level waittill( "sndNextTensionEvent" );
|
level waittill( "sndNextTensionEvent" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,34 +137,26 @@ sndgettensionlevel( struct )
|
|||||||
{
|
{
|
||||||
tension_level = 0;
|
tension_level = 0;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a148 = players;
|
|
||||||
_k148 = getFirstArrayKey( _a148 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k148 ) )
|
|
||||||
{
|
{
|
||||||
player = _a148[ _k148 ];
|
|
||||||
if ( is_true( player.laststand ) )
|
if ( is_true( player.laststand ) )
|
||||||
{
|
|
||||||
tension_level++;
|
tension_level++;
|
||||||
}
|
}
|
||||||
_k148 = getNextArrayKey( _a148, _k148 );
|
|
||||||
}
|
|
||||||
num_zombs = get_current_zombie_count();
|
num_zombs = get_current_zombie_count();
|
||||||
|
|
||||||
if ( num_zombs >= 12 )
|
if ( num_zombs >= 12 )
|
||||||
{
|
|
||||||
tension_level++;
|
tension_level++;
|
||||||
}
|
|
||||||
enemies = getaispeciesarray( "axis", "all" );
|
enemies = getaispeciesarray( "axis", "all" );
|
||||||
_a161 = enemies;
|
|
||||||
_k161 = getFirstArrayKey( _a161 );
|
foreach ( enemy in enemies )
|
||||||
while ( isDefined( _k161 ) )
|
|
||||||
{
|
{
|
||||||
enemy = _a161[ _k161 ];
|
|
||||||
if ( enemy.animname == "brutus_zombie" )
|
if ( enemy.animname == "brutus_zombie" )
|
||||||
{
|
|
||||||
tension_level++;
|
tension_level++;
|
||||||
}
|
}
|
||||||
_k161 = getNextArrayKey( _a161, _k161 );
|
|
||||||
}
|
|
||||||
if ( tension_level > 2 )
|
if ( tension_level > 2 )
|
||||||
{
|
{
|
||||||
struct.tension_level = "tension_high";
|
struct.tension_level = "tension_high";
|
||||||
@ -180,36 +167,32 @@ sndgettensionlevel( struct )
|
|||||||
struct.tension_level = "tension_low";
|
struct.tension_level = "tension_low";
|
||||||
struct.waittime = 140;
|
struct.waittime = 140;
|
||||||
}
|
}
|
||||||
|
|
||||||
return struct;
|
return struct;
|
||||||
}
|
}
|
||||||
|
|
||||||
waitfornexttension( time )
|
waitfornexttension( time )
|
||||||
{
|
{
|
||||||
level endon( "sndNextTensionEvent" );
|
level endon( "sndNextTensionEvent" );
|
||||||
wait time;
|
wait( time );
|
||||||
level notify( "sndNextTensionEvent" );
|
level notify( "sndNextTensionEvent" );
|
||||||
}
|
}
|
||||||
|
|
||||||
sndboardmonitor()
|
sndboardmonitor()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "last_board_torn", barrier_origin );
|
level waittill( "last_board_torn", barrier_origin );
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a194 = players;
|
|
||||||
_k194 = getFirstArrayKey( _a194 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k194 ) )
|
|
||||||
{
|
{
|
||||||
player = _a194[ _k194 ];
|
|
||||||
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
||||||
{
|
{
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k194 = getNextArrayKey( _a194, _k194 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -226,39 +209,35 @@ locationstingerwait( zone_name, type )
|
|||||||
numcut = 0;
|
numcut = 0;
|
||||||
level.sndlastzone = undefined;
|
level.sndlastzone = undefined;
|
||||||
level thread sndlocationbetweenroundswait();
|
level thread sndlocationbetweenroundswait();
|
||||||
for ( ;; )
|
|
||||||
{
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level waittill( "newzoneActive", activezone );
|
level waittill( "newzoneActive", activezone );
|
||||||
while ( !sndlocationshouldplay( array, activezone ) )
|
|
||||||
{
|
if ( !sndlocationshouldplay( array, activezone ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( is_true( level.sndroundwait ) )
|
if ( is_true( level.sndroundwait ) )
|
||||||
{
|
continue;
|
||||||
}
|
else if ( is_true( level.sndstinger.isplaying ) )
|
||||||
}
|
|
||||||
else while ( is_true( level.sndstinger.isplaying ) )
|
|
||||||
{
|
{
|
||||||
level thread sndlocationqueue( activezone );
|
level thread sndlocationqueue( activezone );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone );
|
|
||||||
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone );
|
||||||
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
||||||
level.sndlastzone = activezone;
|
level.sndlastzone = activezone;
|
||||||
|
|
||||||
if ( numcut >= sndnorepeats )
|
if ( numcut >= sndnorepeats )
|
||||||
{
|
|
||||||
numcut = 0;
|
numcut = 0;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
numcut++;
|
numcut++;
|
||||||
}
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,137 +258,106 @@ sndlocationsarray()
|
|||||||
sndlocationshouldplay( array, activezone )
|
sndlocationshouldplay( array, activezone )
|
||||||
{
|
{
|
||||||
shouldplay = 0;
|
shouldplay = 0;
|
||||||
_a280 = array;
|
|
||||||
_k280 = getFirstArrayKey( _a280 );
|
foreach ( place in array )
|
||||||
while ( isDefined( _k280 ) )
|
|
||||||
{
|
{
|
||||||
place = _a280[ _k280 ];
|
|
||||||
if ( place == activezone )
|
if ( place == activezone )
|
||||||
{
|
|
||||||
shouldplay = 1;
|
shouldplay = 1;
|
||||||
}
|
}
|
||||||
_k280 = getNextArrayKey( _a280, _k280 );
|
|
||||||
}
|
|
||||||
if ( shouldplay == 0 )
|
if ( shouldplay == 0 )
|
||||||
{
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
|
||||||
playersinlocal = 0;
|
playersinlocal = 0;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a291 = players;
|
|
||||||
_k291 = getFirstArrayKey( _a291 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k291 ) )
|
|
||||||
{
|
{
|
||||||
player = _a291[ _k291 ];
|
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
|
||||||
{
|
{
|
||||||
if ( !is_true( player.afterlife ) )
|
if ( !is_true( player.afterlife ) )
|
||||||
{
|
|
||||||
playersinlocal++;
|
playersinlocal++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k291 = getNextArrayKey( _a291, _k291 );
|
|
||||||
}
|
|
||||||
if ( playersinlocal >= 1 )
|
if ( playersinlocal >= 1 )
|
||||||
{
|
|
||||||
shouldplay = 1;
|
shouldplay = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
shouldplay = 0;
|
shouldplay = 0;
|
||||||
}
|
|
||||||
return shouldplay;
|
return shouldplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
||||||
{
|
{
|
||||||
if ( numcut >= max_num_removed )
|
if ( numcut >= max_num_removed )
|
||||||
{
|
|
||||||
current_array = sndlocationsarray();
|
current_array = sndlocationsarray();
|
||||||
}
|
|
||||||
_a314 = current_array;
|
foreach ( place in current_array )
|
||||||
_k314 = getFirstArrayKey( _a314 );
|
|
||||||
while ( isDefined( _k314 ) )
|
|
||||||
{
|
{
|
||||||
place = _a314[ _k314 ];
|
|
||||||
if ( place == activezone )
|
if ( place == activezone )
|
||||||
{
|
{
|
||||||
arrayremovevalue( current_array, place );
|
arrayremovevalue( current_array, place );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k314 = getNextArrayKey( _a314, _k314 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_array;
|
return current_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationbetweenrounds()
|
sndlocationbetweenrounds()
|
||||||
{
|
{
|
||||||
level endon( "newzoneActive" );
|
level endon( "newzoneActive" );
|
||||||
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names();
|
activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
|
||||||
_a331 = activezones;
|
|
||||||
_k331 = getFirstArrayKey( _a331 );
|
foreach ( zone in activezones )
|
||||||
while ( isDefined( _k331 ) )
|
|
||||||
{
|
|
||||||
zone = _a331[ _k331 ];
|
|
||||||
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||||
|
continue;
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a337 = players;
|
|
||||||
_k337 = getFirstArrayKey( _a337 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k337 ) )
|
|
||||||
{
|
{
|
||||||
player = _a337[ _k337 ];
|
|
||||||
if ( is_true( player.afterlife ) )
|
if ( is_true( player.afterlife ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) )
|
||||||
{
|
{
|
||||||
}
|
wait 0.1;
|
||||||
else
|
level notify( "newzoneActive", zone );
|
||||||
{
|
|
||||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
level notify( "newzoneActive" );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k337 = getNextArrayKey( _a337, _k337 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_k331 = getNextArrayKey( _a331, _k331 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationbetweenroundswait()
|
sndlocationbetweenroundswait()
|
||||||
{
|
{
|
||||||
flag_wait( "afterlife_start_over" );
|
flag_wait( "afterlife_start_over" );
|
||||||
|
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level thread sndlocationbetweenrounds();
|
level thread sndlocationbetweenrounds();
|
||||||
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
while ( is_true( level.sndroundwait ) )
|
while ( is_true( level.sndroundwait ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlocationqueue( zone )
|
sndlocationqueue( zone )
|
||||||
{
|
{
|
||||||
level endon( "newzoneActive" );
|
level endon( "newzoneActive" );
|
||||||
|
|
||||||
while ( is_true( level.sndstinger.isplaying ) )
|
while ( is_true( level.sndstinger.isplaying ) )
|
||||||
{
|
wait 0.5;
|
||||||
wait 0,5;
|
|
||||||
}
|
level notify( "newzoneActive", zone );
|
||||||
level notify( "newzoneActive" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndstingersetup()
|
sndstingersetup()
|
||||||
@ -421,22 +369,22 @@ sndstingersetup()
|
|||||||
level.sndstinger.isplaying = 0;
|
level.sndstinger.isplaying = 0;
|
||||||
level.sndstinger.states = [];
|
level.sndstinger.states = [];
|
||||||
level.sndroundwait = 1;
|
level.sndroundwait = 1;
|
||||||
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" );
|
createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" );
|
||||||
createstingerstate( "gondola", "mus_event_tension_strings_01", 0,1, "reject" );
|
createstingerstate( "gondola", "mus_event_tension_strings_01", 0.1, "reject" );
|
||||||
createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" );
|
createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" );
|
||||||
createstingerstate( "trigger_stinger", "mus_event_group_02", 0,1, "ignore" );
|
createstingerstate( "trigger_stinger", "mus_event_group_02", 0.1, "ignore" );
|
||||||
createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1,5, "queue" );
|
createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1.5, "queue" );
|
||||||
createstingerstate( "brutus_death", "mus_event_brutus_death", 0,1, "ignore" );
|
createstingerstate( "brutus_death", "mus_event_brutus_death", 0.1, "ignore" );
|
||||||
createstingerstate( "tension_low", "mus_event_tension_piano_01", 0,75, "reject" );
|
createstingerstate( "tension_low", "mus_event_tension_piano_01", 0.75, "reject" );
|
||||||
createstingerstate( "tension_high", "mus_event_tension_piano_02", 0,75, "reject" );
|
createstingerstate( "tension_high", "mus_event_tension_piano_02", 0.75, "reject" );
|
||||||
createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0,75, "queue" );
|
createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0.75, "queue" );
|
||||||
createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0,75, "queue" );
|
createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0.75, "queue" );
|
||||||
createstingerstate( "zone_studio", "mus_event_location_powerroom", 0,75, "queue" );
|
createstingerstate( "zone_studio", "mus_event_location_powerroom", 0.75, "queue" );
|
||||||
createstingerstate( "zone_roof", "mus_event_location_roof", 0,75, "queue" );
|
createstingerstate( "zone_roof", "mus_event_location_roof", 0.75, "queue" );
|
||||||
createstingerstate( "cellblock_shower", "mus_event_location_shower", 0,75, "queue" );
|
createstingerstate( "cellblock_shower", "mus_event_location_shower", 0.75, "queue" );
|
||||||
createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0,75, "queue" );
|
createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0.75, "queue" );
|
||||||
createstingerstate( "zone_dock", "mus_event_location_dock", 0,75, "queue" );
|
createstingerstate( "zone_dock", "mus_event_location_dock", 0.75, "queue" );
|
||||||
createstingerstate( "zone_warden_office", "mus_event_location_warden", 0,75, "queue" );
|
createstingerstate( "zone_warden_office", "mus_event_location_warden", 0.75, "queue" );
|
||||||
createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" );
|
createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" );
|
||||||
createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" );
|
createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" );
|
||||||
createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" );
|
createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" );
|
||||||
@ -454,10 +402,10 @@ sndstingersetup()
|
|||||||
createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" );
|
createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" );
|
||||||
createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" );
|
createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" );
|
||||||
createstingerstate( "trap", "mus_event_trap", 0, "reject" );
|
createstingerstate( "trap", "mus_event_trap", 0, "reject" );
|
||||||
createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0,5, "ignore" );
|
createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0.5, "ignore" );
|
||||||
createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0,5, "ignore" );
|
createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0.5, "ignore" );
|
||||||
createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0,5, "ignore" );
|
createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0.5, "ignore" );
|
||||||
createstingerstate( "quest_generic", "mus_event_quest_generic", 0,5, "reject" );
|
createstingerstate( "quest_generic", "mus_event_quest_generic", 0.5, "reject" );
|
||||||
createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" );
|
createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" );
|
||||||
createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" );
|
createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" );
|
||||||
createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" );
|
createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" );
|
||||||
@ -471,7 +419,8 @@ sndstingersetup()
|
|||||||
createstingerstate( state, alias, prewait, interrupt )
|
createstingerstate( state, alias, prewait, interrupt )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
|
if ( !isdefined( s.states[state] ) )
|
||||||
{
|
{
|
||||||
s.states[state] = spawnstruct();
|
s.states[state] = spawnstruct();
|
||||||
s.states[state].alias = alias;
|
s.states[state].alias = alias;
|
||||||
@ -483,64 +432,55 @@ createstingerstate( state, alias, prewait, interrupt )
|
|||||||
sndplaystinger( state, player )
|
sndplaystinger( state, player )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
{
|
if ( !isdefined( s.states[state] ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
interrupt = s.states[state].interrupt == "ignore";
|
interrupt = s.states[state].interrupt == "ignore";
|
||||||
|
|
||||||
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
||||||
{
|
{
|
||||||
if ( interrupt )
|
if ( interrupt )
|
||||||
{
|
{
|
||||||
wait s.states[ state ].prewait;
|
wait( s.states[state].prewait );
|
||||||
playstinger( state, player, 1 );
|
playstinger( state, player, 1 );
|
||||||
}
|
}
|
||||||
else if ( !level.sndroundwait )
|
else if ( !level.sndroundwait )
|
||||||
{
|
{
|
||||||
s.isplaying = 1;
|
s.isplaying = 1;
|
||||||
wait s.states[ state ].prewait;
|
wait( s.states[state].prewait );
|
||||||
playstinger( state, player, 0 );
|
playstinger( state, player, 0 );
|
||||||
level notify( "sndStingerDone" );
|
level notify( "sndStingerDone" );
|
||||||
s.isplaying = 0;
|
s.isplaying = 0;
|
||||||
}
|
}
|
||||||
else
|
else if ( s.states[state].interrupt == "queue" )
|
||||||
{
|
|
||||||
if ( s.states[ state ].interrupt == "queue" )
|
|
||||||
{
|
|
||||||
level thread sndqueuestinger( state, player );
|
level thread sndqueuestinger( state, player );
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( s.states[state].interrupt == "queue" )
|
if ( s.states[state].interrupt == "queue" )
|
||||||
{
|
|
||||||
level thread sndqueuestinger( state, player );
|
level thread sndqueuestinger( state, player );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
playstinger( state, player, ignore )
|
playstinger( state, player, ignore )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
if ( !isDefined( s.states[ state ] ) )
|
|
||||||
{
|
if ( !isdefined( s.states[state] ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( is_true( ignore ) )
|
if ( is_true( ignore ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( player ) )
|
if ( isdefined( player ) )
|
||||||
{
|
|
||||||
player playsoundtoplayer( s.states[state].alias, player );
|
player playsoundtoplayer( s.states[state].alias, player );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
s.ent playsound( s.states[state].alias );
|
s.ent playsound( s.states[state].alias );
|
||||||
}
|
}
|
||||||
}
|
else if ( isdefined( player ) )
|
||||||
else if ( isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
player playsoundtoplayer( s.states[state].alias, player );
|
player playsoundtoplayer( s.states[state].alias, player );
|
||||||
wait 8;
|
wait 8;
|
||||||
@ -548,6 +488,7 @@ playstinger( state, player, ignore )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
||||||
|
|
||||||
s.ent waittill( "sndStingerDone" );
|
s.ent waittill( "sndStingerDone" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -555,24 +496,21 @@ playstinger( state, player, ignore )
|
|||||||
sndqueuestinger( state, player )
|
sndqueuestinger( state, player )
|
||||||
{
|
{
|
||||||
s = level.sndstinger;
|
s = level.sndstinger;
|
||||||
|
|
||||||
if ( is_true( s.queue ) )
|
if ( is_true( s.queue ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s.queue = 1;
|
s.queue = 1;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
||||||
{
|
wait 0.5;
|
||||||
wait 0,5;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level thread sndplaystinger( state, player );
|
level thread sndplaystinger( state, player );
|
||||||
s.queue = 0;
|
s.queue = 0;
|
||||||
}
|
}
|
||||||
@ -583,9 +521,11 @@ sndstingerroundwait()
|
|||||||
flag_wait( "afterlife_start_over" );
|
flag_wait( "afterlife_start_over" );
|
||||||
wait 28;
|
wait 28;
|
||||||
level.sndroundwait = 0;
|
level.sndroundwait = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
level notify( "sndStopBrutusLoop" );
|
level notify( "sndStopBrutusLoop" );
|
||||||
level thread sndstingerroundwait_start();
|
level thread sndstingerroundwait_start();
|
||||||
}
|
}
|
||||||
@ -594,14 +534,16 @@ sndstingerroundwait()
|
|||||||
sndstingerroundwait_start()
|
sndstingerroundwait_start()
|
||||||
{
|
{
|
||||||
level.sndroundwait = 1;
|
level.sndroundwait = 1;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level thread sndstingerroundwait_end();
|
level thread sndstingerroundwait_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
sndstingerroundwait_end()
|
sndstingerroundwait_end()
|
||||||
{
|
{
|
||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
|
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
wait 28;
|
wait 28;
|
||||||
level.sndroundwait = 0;
|
level.sndroundwait = 0;
|
||||||
}
|
}
|
||||||
@ -609,31 +551,30 @@ sndstingerroundwait_end()
|
|||||||
sndlastlifesetup()
|
sndlastlifesetup()
|
||||||
{
|
{
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
|
|
||||||
if ( flag( "solo_game" ) )
|
if ( flag( "solo_game" ) )
|
||||||
{
|
|
||||||
level thread sndlastlife_solo();
|
level thread sndlastlife_solo();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread sndlastlife_multi();
|
level thread sndlastlife_multi();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
sndlastlife_solo()
|
sndlastlife_solo()
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
player = getplayers()[0];
|
player = getplayers()[0];
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill( "sndLifeGone" );
|
player waittill( "sndLifeGone" );
|
||||||
|
|
||||||
if ( player.lives == 0 )
|
if ( player.lives == 0 )
|
||||||
{
|
{
|
||||||
while ( is_true( player.afterlife ) )
|
while ( is_true( player.afterlife ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
level notify( "sndStopBrutusLoop" );
|
level notify( "sndStopBrutusLoop" );
|
||||||
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -644,24 +585,26 @@ sndlastlife_multi()
|
|||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
level thread sndlastlife_multi_reset();
|
level thread sndlastlife_multi_reset();
|
||||||
sndplayersdead = 0;
|
sndplayersdead = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "bleed_out" );
|
level waittill( "bleed_out" );
|
||||||
|
|
||||||
sndplayersdead++;
|
sndplayersdead++;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
if ( ( players.size - sndplayersdead ) <= 1 )
|
|
||||||
|
if ( players.size - sndplayersdead <= 1 )
|
||||||
{
|
{
|
||||||
last_alive = sndlastlife_multi_getlastplayer();
|
last_alive = sndlastlife_multi_getlastplayer();
|
||||||
|
|
||||||
while ( last_alive.lives > 0 )
|
while ( last_alive.lives > 0 )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
while ( is_true( last_alive.afterlife ) )
|
while ( is_true( last_alive.afterlife ) )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
level notify( "sndStopBrutusLoop" );
|
level notify( "sndStopBrutusLoop" );
|
||||||
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -670,27 +613,22 @@ sndlastlife_multi()
|
|||||||
sndlastlife_multi_getlastplayer()
|
sndlastlife_multi_getlastplayer()
|
||||||
{
|
{
|
||||||
level endon( "end_of_round" );
|
level endon( "end_of_round" );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a645 = players;
|
|
||||||
_k645 = getFirstArrayKey( _a645 );
|
foreach ( dude in players )
|
||||||
while ( isDefined( _k645 ) )
|
|
||||||
{
|
{
|
||||||
dude = _a645[ _k645 ];
|
|
||||||
if ( dude.sessionstate == "spectator" )
|
if ( dude.sessionstate == "spectator" )
|
||||||
{
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return dude;
|
return dude;
|
||||||
}
|
}
|
||||||
_k645 = getNextArrayKey( _a645, _k645 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndlastlife_multi_reset()
|
sndlastlife_multi_reset()
|
||||||
{
|
{
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
level thread sndlastlife_multi();
|
level thread sndlastlife_multi();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -702,23 +640,23 @@ sndmusicegg()
|
|||||||
origins[2] = ( -1157, 5217, -72 );
|
origins[2] = ( -1157, 5217, -72 );
|
||||||
level.meteor_counter = 0;
|
level.meteor_counter = 0;
|
||||||
level.music_override = 0;
|
level.music_override = 0;
|
||||||
i = 0;
|
|
||||||
while ( i < origins.size )
|
for ( i = 0; i < origins.size; i++ )
|
||||||
{
|
|
||||||
level thread sndmusicegg_wait( origins[i] );
|
level thread sndmusicegg_wait( origins[i] );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmusicegg_wait( bottle_origin )
|
sndmusicegg_wait( bottle_origin )
|
||||||
{
|
{
|
||||||
temp_ent = spawn( "script_origin", bottle_origin );
|
temp_ent = spawn( "script_origin", bottle_origin );
|
||||||
temp_ent playloopsound( "zmb_meteor_loop" );
|
temp_ent playloopsound( "zmb_meteor_loop" );
|
||||||
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
|
||||||
|
|
||||||
temp_ent waittill( "main_music_egg_hit", player );
|
temp_ent waittill( "main_music_egg_hit", player );
|
||||||
|
|
||||||
temp_ent stoploopsound( 1 );
|
temp_ent stoploopsound( 1 );
|
||||||
player playsound( "zmb_meteor_activate" );
|
player playsound( "zmb_meteor_activate" );
|
||||||
level.meteor_counter += 1;
|
level.meteor_counter += 1;
|
||||||
|
|
||||||
if ( level.meteor_counter == 3 )
|
if ( level.meteor_counter == 3 )
|
||||||
{
|
{
|
||||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 170 );
|
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 170 );
|
||||||
@ -726,7 +664,7 @@ sndmusicegg_wait( bottle_origin )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wait 1,5;
|
wait 1.5;
|
||||||
temp_ent delete();
|
temp_ent delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -734,10 +672,9 @@ sndmusicegg_wait( bottle_origin )
|
|||||||
sndmusicegg_override()
|
sndmusicegg_override()
|
||||||
{
|
{
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmuseggplay( ent, alias, time )
|
sndmuseggplay( ent, alias, time )
|
||||||
@ -748,7 +685,7 @@ sndmuseggplay( ent, alias, time )
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@ -756,6 +693,6 @@ sndmuseggplay( ent, alias, time )
|
|||||||
sndeggmusicwait( time )
|
sndeggmusicwait( time )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
wait time;
|
wait( time );
|
||||||
level notify( "sndSongDone" );
|
level notify( "sndSongDone" );
|
||||||
}
|
}
|
||||||
|
@ -1,69 +1,71 @@
|
|||||||
//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 connectpaths();
|
||||||
clip delete();
|
clip delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
level thread give_afterlife();
|
level thread give_afterlife();
|
||||||
level thread maps/mp/zm_alcatraz_sq::start_alcatraz_sidequest();
|
level thread maps\mp\zm_alcatraz_sq::start_alcatraz_sidequest();
|
||||||
onplayerconnect_callback( ::player_quest_vfx );
|
onplayerconnect_callback( ::player_quest_vfx );
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
level notify( "Pack_A_Punch_on" );
|
level notify( "Pack_A_Punch_on" );
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
level thread maps/mp/zm_prison::delete_perk_machine_clip();
|
level thread maps\mp\zm_prison::delete_perk_machine_clip();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_tower_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs();
|
||||||
level thread maps/mp/zm_alcatraz_travel::init_alcatraz_zipline();
|
level thread maps\mp\zm_alcatraz_travel::init_alcatraz_zipline();
|
||||||
level thread power_on_perk_machines();
|
level thread power_on_perk_machines();
|
||||||
level thread afterlife_powerups();
|
level thread afterlife_powerups();
|
||||||
level thread afterlife_intro_door();
|
level thread afterlife_intro_door();
|
||||||
@ -72,24 +74,25 @@ main() //checked changed to match cerberus output
|
|||||||
level thread blundergat_upgrade_station();
|
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 );
|
player thread fake_kill_player( n_start_pos );
|
||||||
n_start_pos++;
|
n_start_pos++;
|
||||||
@ -97,26 +100,28 @@ give_afterlife() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 waittill( "player_fake_corpse_created" );
|
||||||
|
|
||||||
self thread afterlife_tutorial();
|
self thread afterlife_tutorial();
|
||||||
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
|
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
|
||||||
trace_start = e_corpse_location.origin;
|
trace_start = e_corpse_location.origin;
|
||||||
trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, -1 ), 100 );
|
trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 );
|
||||||
corpse_trace = physicstrace( trace_start, trace_end, vectorScale( ( -1, -1, 0 ), 10 ), vectorScale( ( 1, 1, 0 ), 10 ), self.e_afterlife_corpse );
|
corpse_trace = physicstrace( trace_start, trace_end, vectorscale( ( -1, -1, 0 ), 10.0 ), vectorscale( ( 1, 1, 0 ), 10.0 ), self.e_afterlife_corpse );
|
||||||
self.e_afterlife_corpse.origin = corpse_trace["position"];
|
self.e_afterlife_corpse.origin = corpse_trace["position"];
|
||||||
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
|
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
|
||||||
vec_to_target = vectorToAngles( vec_to_target );
|
vec_to_target = vectortoangles( vec_to_target );
|
||||||
vec_to_target = ( 0, vec_to_target[1], 0 );
|
vec_to_target = ( 0, vec_to_target[1], 0 );
|
||||||
self setplayerangles( vec_to_target );
|
self setplayerangles( vec_to_target );
|
||||||
self notify( "al_all_setup" );
|
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" );
|
||||||
@ -127,7 +132,8 @@ afterlife_tutorial() //checked matches cerberus output
|
|||||||
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 create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
|
||||||
self thread afterlife_tutorial_jump_watch();
|
self thread afterlife_tutorial_jump_watch();
|
||||||
@ -136,105 +142,109 @@ afterlife_tutorial() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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" );
|
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
|
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" );
|
m_door = getent( "powerup_door", "targetname" );
|
||||||
if ( !isDefined( m_door.opened ) )
|
|
||||||
{
|
if ( !isdefined( m_door.opened ) )
|
||||||
return 0;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
|
|
||||||
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
|
|
||||||
{
|
|
||||||
m_door = getent( "powerup_cell_door_1", "targetname" );
|
|
||||||
if ( !isDefined( m_door.opened ) )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cell_powerup = getstruct( "powerup_cell_2", "targetname" );
|
|
||||||
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
|
|
||||||
{
|
|
||||||
m_door = getent( "powerup_cell_door_2", "targetname" );
|
|
||||||
if ( !isDefined( m_door.opened ) )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
afterlife_intro_door() //checked matches cerberus output
|
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
|
||||||
|
|
||||||
|
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
|
||||||
|
{
|
||||||
|
m_door = getent( "powerup_cell_door_1", "targetname" );
|
||||||
|
|
||||||
|
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.0 ) )
|
||||||
|
{
|
||||||
|
m_door = getent( "powerup_cell_door_2", "targetname" );
|
||||||
|
|
||||||
|
if ( !isdefined( m_door.opened ) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
afterlife_intro_door()
|
||||||
{
|
{
|
||||||
m_door = getent( "powerup_door", "targetname" );
|
m_door = getent( "powerup_door", "targetname" );
|
||||||
|
|
||||||
level waittill( "intro_powerup_activate" );
|
level waittill( "intro_powerup_activate" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
|
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
|
||||||
m_door.opened = 1;
|
m_door.opened = 1;
|
||||||
m_door movex( 34, 2, 1 );
|
m_door movex( 34, 2, 1 );
|
||||||
m_door playsound( "zmb_jail_door" );
|
m_door playsound( "zmb_jail_door" );
|
||||||
|
|
||||||
level waittill( "intro_powerup_restored" );
|
level waittill( "intro_powerup_restored" );
|
||||||
|
|
||||||
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
s_powerup_loc = getstruct( "powerup_start", "targetname" );
|
||||||
spawn_infinite_powerup_drop( s_powerup_loc.origin );
|
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" );
|
level waittill( "cell_1_powerup_activate" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
|
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
|
||||||
m_door.opened = 1;
|
m_door.opened = 1;
|
||||||
@ -242,10 +252,12 @@ afterlife_cell_door_1() //checked matches cerberus output
|
|||||||
m_door playsound( "zmb_jail_door" );
|
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" );
|
level waittill( "cell_2_powerup_activate" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
|
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
|
||||||
m_door.opened = 1;
|
m_door.opened = 1;
|
||||||
@ -253,52 +265,50 @@ afterlife_cell_door_2() //checked matches cerberus output
|
|||||||
m_door playsound( "zmb_jail_door" );
|
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" );
|
e_shockbox notify( "damage", 1, level );
|
||||||
wait 1;
|
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" ) )
|
if ( !flag( "generator_challenge_completed" ) )
|
||||||
{
|
|
||||||
exploder( 2000 );
|
exploder( 2000 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
#include maps/mp/zm_alcatraz_travel;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zm_alcatraz_sq_vo;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_craftables;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_craftables;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
#include maps\mp\zm_alcatraz_sq_vo;
|
||||||
|
#include maps\mp\zm_alcatraz_travel;
|
||||||
|
|
||||||
init_craftables()
|
init_craftables()
|
||||||
{
|
{
|
||||||
@ -16,10 +18,10 @@ init_craftables()
|
|||||||
register_clientfields();
|
register_clientfields();
|
||||||
add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 );
|
add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 );
|
||||||
add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" );
|
add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" );
|
||||||
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorScale( ( 0, 0, 0 ), 90 ), ( 0, 0, level.riotshield_placement_zoffset ) );
|
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) );
|
||||||
add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 );
|
add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 );
|
||||||
add_zombie_craftable_vox_category( "packasplat", "build_bsm" );
|
add_zombie_craftable_vox_category( "packasplat", "build_bsm" );
|
||||||
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorScale( ( 0, 0, 0 ), 90 ) );
|
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorscale( ( 0, -1, 0 ), 90.0 ) );
|
||||||
level.craftable_piece_swap_allowed = 0;
|
level.craftable_piece_swap_allowed = 0;
|
||||||
add_zombie_craftable( "quest_key1" );
|
add_zombie_craftable( "quest_key1" );
|
||||||
add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane );
|
add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane );
|
||||||
@ -33,7 +35,7 @@ include_key_craftable( craftable_name, model_name )
|
|||||||
part = spawnstruct();
|
part = spawnstruct();
|
||||||
part.name = craftable_name;
|
part.name = craftable_name;
|
||||||
part add_craftable_piece( part_key );
|
part add_craftable_piece( part_key );
|
||||||
part.triggerthink = ::maps/mp/zombies/_zm_craftables::setup_craftable_pieces;
|
part.triggerthink = maps\mp\zombies\_zm_craftables::setup_craftable_pieces;
|
||||||
include_craftable( part );
|
include_craftable( part );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +72,7 @@ include_craftables()
|
|||||||
plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 );
|
plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 );
|
||||||
plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 );
|
plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 );
|
||||||
plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 );
|
plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 );
|
||||||
|
|
||||||
if ( level.is_forever_solo_game )
|
if ( level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
plane_cloth.is_shared = 1;
|
plane_cloth.is_shared = 1;
|
||||||
@ -83,6 +86,7 @@ include_craftables()
|
|||||||
plane_steering.client_field_state = undefined;
|
plane_steering.client_field_state = undefined;
|
||||||
plane_rigging.client_field_state = undefined;
|
plane_rigging.client_field_state = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
plane_cloth.pickup_alias = "sidequest_sheets";
|
plane_cloth.pickup_alias = "sidequest_sheets";
|
||||||
plane_fueltanks.pickup_alias = "sidequest_oxygen";
|
plane_fueltanks.pickup_alias = "sidequest_oxygen";
|
||||||
plane_engine.pickup_alias = "sidequest_engine";
|
plane_engine.pickup_alias = "sidequest_engine";
|
||||||
@ -104,6 +108,7 @@ include_craftables()
|
|||||||
refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 );
|
refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 );
|
||||||
refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 );
|
refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 );
|
||||||
refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 );
|
refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 );
|
||||||
|
|
||||||
if ( level.is_forever_solo_game )
|
if ( level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
refuelable_plane_gas1.is_shared = 1;
|
refuelable_plane_gas1.is_shared = 1;
|
||||||
@ -117,6 +122,7 @@ include_craftables()
|
|||||||
refuelable_plane_gas4.client_field_state = undefined;
|
refuelable_plane_gas4.client_field_state = undefined;
|
||||||
refuelable_plane_gas5.client_field_state = undefined;
|
refuelable_plane_gas5.client_field_state = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
refuelable_plane = spawnstruct();
|
refuelable_plane = spawnstruct();
|
||||||
refuelable_plane.name = craftable_name;
|
refuelable_plane.name = craftable_name;
|
||||||
refuelable_plane add_craftable_piece( refuelable_plane_gas1 );
|
refuelable_plane add_craftable_piece( refuelable_plane_gas1 );
|
||||||
@ -156,24 +162,21 @@ register_clientfields()
|
|||||||
|
|
||||||
riotshieldcraftable()
|
riotshieldcraftable()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 );
|
maps\mp\zombies\_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
packasplatcraftable()
|
packasplatcraftable()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 );
|
maps\mp\zombies\_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
planecraftable()
|
planecraftable()
|
||||||
{
|
{
|
||||||
level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 );
|
level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 );
|
||||||
level setclientfield( "quest_plane_craft_complete", 0 );
|
level setclientfield( "quest_plane_craft_complete", 0 );
|
||||||
i = 1;
|
|
||||||
while ( i <= 5 )
|
for ( i = 1; i <= 5; i++ )
|
||||||
{
|
|
||||||
level setclientfield( "quest_state" + i, 2 );
|
level setclientfield( "quest_state" + i, 2 );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
planefuelable()
|
planefuelable()
|
||||||
@ -186,12 +189,10 @@ planefuelable_think()
|
|||||||
flag_wait( "spawn_fuel_tanks" );
|
flag_wait( "spawn_fuel_tanks" );
|
||||||
t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" );
|
t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" );
|
||||||
t_plane_fuelable trigger_on();
|
t_plane_fuelable trigger_on();
|
||||||
i = 1;
|
|
||||||
while ( i <= 5 )
|
for ( i = 1; i <= 5; i++ )
|
||||||
{
|
|
||||||
level setclientfield( "quest_state" + i, 5 );
|
level setclientfield( "quest_state" + i, 5 );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 );
|
alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,7 +220,9 @@ ondisconnect_common( player )
|
|||||||
level endon( "crafted_" + self.piecename );
|
level endon( "crafted_" + self.piecename );
|
||||||
level endon( "dropped_" + self.piecename );
|
level endon( "dropped_" + self.piecename );
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
|
|
||||||
player waittill( "disconnect" );
|
player waittill( "disconnect" );
|
||||||
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "cloth":
|
case "cloth":
|
||||||
@ -243,59 +246,51 @@ ondisconnect_common( player )
|
|||||||
in_game_checklist_plane_piece_dropped( "rigging" );
|
in_game_checklist_plane_piece_dropped( "rigging" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 2 );
|
level setclientfield( field_name, 2 );
|
||||||
level setclientfield( "piece_player" + player_num, 0 );
|
level setclientfield( "piece_player" + player_num, 0 );
|
||||||
m_plane_piece = get_craftable_piece_model( "plane", self.piecename );
|
m_plane_piece = get_craftable_piece_model( "plane", self.piecename );
|
||||||
if ( isDefined( m_plane_piece ) )
|
|
||||||
{
|
if ( isdefined( m_plane_piece ) )
|
||||||
playfxontag( level._effect["quest_item_glow"], m_plane_piece, "tag_origin" );
|
playfxontag( level._effect["quest_item_glow"], m_plane_piece, "tag_origin" );
|
||||||
}
|
|
||||||
m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename );
|
m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename );
|
||||||
if ( isDefined( m_fuel_can ) )
|
|
||||||
{
|
if ( isdefined( m_fuel_can ) )
|
||||||
playfxontag( level._effect["quest_item_glow"], m_fuel_can, "tag_origin" );
|
playfxontag( level._effect["quest_item_glow"], m_fuel_can, "tag_origin" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
prison_open_craftablestub_update_prompt( player, b_set_hint_string_now, trigger )
|
prison_open_craftablestub_update_prompt( player, b_set_hint_string_now, trigger )
|
||||||
{
|
{
|
||||||
valid = maps/mp/zombies/_zm_craftables::open_craftablestub_update_prompt( player );
|
valid = maps\mp\zombies\_zm_craftables::open_craftablestub_update_prompt( player );
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
onpickup_key( player )
|
onpickup_key( player )
|
||||||
{
|
{
|
||||||
flag_set( "key_found" );
|
flag_set( "key_found" );
|
||||||
|
|
||||||
if ( level.is_master_key_west )
|
if ( level.is_master_key_west )
|
||||||
{
|
|
||||||
level clientnotify( "fxanim_west_pulley_up_start" );
|
level clientnotify( "fxanim_west_pulley_up_start" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level clientnotify( "fxanim_east_pulley_up_start" );
|
level clientnotify( "fxanim_east_pulley_up_start" );
|
||||||
}
|
|
||||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||||
_a429 = a_m_checklist;
|
|
||||||
_k429 = getFirstArrayKey( _a429 );
|
foreach ( m_checklist in a_m_checklist )
|
||||||
while ( isDefined( _k429 ) )
|
|
||||||
{
|
{
|
||||||
m_checklist = _a429[ _k429 ];
|
|
||||||
m_checklist showpart( "j_check_key" );
|
m_checklist showpart( "j_check_key" );
|
||||||
m_checklist showpart( "j_strike_key" );
|
m_checklist showpart( "j_strike_key" );
|
||||||
_k429 = getNextArrayKey( _a429, _k429 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" );
|
a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" );
|
||||||
_a437 = a_door_structs;
|
|
||||||
_k437 = getFirstArrayKey( _a437 );
|
foreach ( struct in a_door_structs )
|
||||||
while ( isDefined( _k437 ) )
|
|
||||||
{
|
{
|
||||||
struct = _a437[ _k437 ];
|
if ( isdefined( struct.unitrigger_stub ) )
|
||||||
if ( isDefined( struct.unitrigger_stub ) )
|
struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers();
|
||||||
{
|
|
||||||
struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers();
|
|
||||||
}
|
|
||||||
_k437 = getNextArrayKey( _a437, _k437 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player playsound( "evt_key_pickup" );
|
player playsound( "evt_key_pickup" );
|
||||||
player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 );
|
player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 );
|
||||||
level setclientfield( "piece_key_warden", 1 );
|
level setclientfield( "piece_key_warden", 1 );
|
||||||
@ -316,6 +311,7 @@ ondrop_plane( player )
|
|||||||
self droponmover( player );
|
self droponmover( player );
|
||||||
self.piece_owner = undefined;
|
self.piece_owner = undefined;
|
||||||
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
||||||
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "cloth":
|
case "cloth":
|
||||||
@ -339,7 +335,9 @@ ondrop_plane( player )
|
|||||||
in_game_checklist_plane_piece_dropped( "rigging" );
|
in_game_checklist_plane_piece_dropped( "rigging" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 2 );
|
level setclientfield( field_name, 2 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
@ -352,26 +350,29 @@ onpickup_plane( player )
|
|||||||
/#
|
/#
|
||||||
println( "ZM >> Common part callback onPickup()" );
|
println( "ZM >> Common part callback onPickup()" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( level.plane_pieces_picked_up ) )
|
if ( !isdefined( level.plane_pieces_picked_up ) )
|
||||||
{
|
{
|
||||||
level.plane_pieces_picked_up = 0;
|
level.plane_pieces_picked_up = 0;
|
||||||
level.sndplanepieces = 1;
|
level.sndplanepieces = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.plane_pieces_picked_up += 1;
|
level.plane_pieces_picked_up += 1;
|
||||||
|
|
||||||
if ( level.plane_pieces_picked_up == 5 )
|
if ( level.plane_pieces_picked_up == 5 )
|
||||||
{
|
|
||||||
level thread roof_nag_vo();
|
level thread roof_nag_vo();
|
||||||
}
|
|
||||||
if ( level.sndplanepieces == level.plane_pieces_picked_up )
|
if ( level.sndplanepieces == level.plane_pieces_picked_up )
|
||||||
{
|
{
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces );
|
||||||
level.sndplanepieces++;
|
level.sndplanepieces++;
|
||||||
}
|
}
|
||||||
|
|
||||||
player playsound( "zmb_craftable_pickup" );
|
player playsound( "zmb_craftable_pickup" );
|
||||||
vo_alias_call = undefined;
|
vo_alias_call = undefined;
|
||||||
vo_alias_response = undefined;
|
vo_alias_response = undefined;
|
||||||
self pickupfrommover();
|
self pickupfrommover();
|
||||||
self.piece_owner = player;
|
self.piece_owner = player;
|
||||||
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "cloth":
|
case "cloth":
|
||||||
@ -396,17 +397,20 @@ onpickup_plane( player )
|
|||||||
in_game_checklist_plane_piece_picked_up( "rigging" );
|
in_game_checklist_plane_piece_picked_up( "rigging" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 3 );
|
level setclientfield( field_name, 3 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_alias_call = self check_if_newly_found();
|
vo_alias_call = self check_if_newly_found();
|
||||||
if ( isDefined( vo_alias_call ) )
|
|
||||||
{
|
if ( isdefined( vo_alias_call ) )
|
||||||
level thread play_plane_piece_call_and_response_vo( player, vo_alias_call );
|
level thread play_plane_piece_call_and_response_vo( player, vo_alias_call );
|
||||||
}
|
|
||||||
self thread ondisconnect_common( player );
|
self thread ondisconnect_common( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,12 +436,13 @@ check_if_newly_found()
|
|||||||
vo_alias_call = "sidequest_rigging";
|
vo_alias_call = "sidequest_rigging";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.n_plane_pieces_found++;
|
level.n_plane_pieces_found++;
|
||||||
flag_set( self.piecename + "_found" );
|
flag_set( self.piecename + "_found" );
|
||||||
|
|
||||||
if ( self.piecename == "cloth" )
|
if ( self.piecename == "cloth" )
|
||||||
{
|
|
||||||
level clientnotify( "fxanim_dryer_hide_start" );
|
level clientnotify( "fxanim_dryer_hide_start" );
|
||||||
}
|
|
||||||
return vo_alias_call;
|
return vo_alias_call;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -448,32 +453,34 @@ play_plane_piece_call_and_response_vo( player, vo_alias_call )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
n_response_range = 1500;
|
n_response_range = 1500;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
if ( !flag( "story_vo_playing" ) )
|
if ( !flag( "story_vo_playing" ) )
|
||||||
{
|
{
|
||||||
flag_set( "story_vo_playing" );
|
flag_set( "story_vo_playing" );
|
||||||
player do_player_general_vox( "quest", vo_alias_call, undefined, 100 );
|
player do_player_general_vox( "quest", vo_alias_call, undefined, 100 );
|
||||||
wait 5;
|
wait 5;
|
||||||
|
|
||||||
if ( players.size > 1 )
|
if ( players.size > 1 )
|
||||||
{
|
{
|
||||||
arrayremovevalue( players, player );
|
arrayremovevalue( players, player );
|
||||||
closest_other_player = getclosest( player.origin, players );
|
closest_other_player = getclosest( player.origin, players );
|
||||||
if ( isDefined( closest_other_player ) )
|
|
||||||
|
if ( isdefined( closest_other_player ) )
|
||||||
{
|
{
|
||||||
n_dist = distance( player.origin, closest_other_player.origin );
|
n_dist = distance( player.origin, closest_other_player.origin );
|
||||||
if ( isDefined( closest_other_player ) && n_dist < n_response_range )
|
|
||||||
|
if ( isdefined( closest_other_player ) && n_dist < n_response_range )
|
||||||
{
|
{
|
||||||
if ( level.n_plane_pieces_found < 5 )
|
if ( level.n_plane_pieces_found < 5 )
|
||||||
{
|
|
||||||
vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog";
|
vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog";
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
vo_alias_response = "sidequest_all_parts";
|
vo_alias_response = "sidequest_all_parts";
|
||||||
}
|
|
||||||
closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 );
|
closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -485,37 +492,25 @@ roof_nag_vo()
|
|||||||
zone_roof = getent( "zone_roof", "targetname" );
|
zone_roof = getent( "zone_roof", "targetname" );
|
||||||
zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" );
|
zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" );
|
||||||
n_roof_nag_wait = 60;
|
n_roof_nag_wait = 60;
|
||||||
n_roof_nag_max_times = 3;
|
|
||||||
while ( !flag( "plane_built" ) && n_roof_nag_max_times > 0 )
|
for ( n_roof_nag_max_times = 3; !flag( "plane_built" ) && n_roof_nag_max_times > 0; n_roof_nag_max_times-- )
|
||||||
{
|
{
|
||||||
wait n_roof_nag_wait;
|
wait( n_roof_nag_wait );
|
||||||
b_is_a_player_on_the_roof = 0;
|
b_is_a_player_on_the_roof = 0;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a696 = players;
|
|
||||||
_k696 = getFirstArrayKey( _a696 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k696 ) )
|
|
||||||
{
|
{
|
||||||
player = _a696[ _k696 ];
|
|
||||||
if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) )
|
if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) )
|
||||||
{
|
|
||||||
b_is_a_player_on_the_roof = 1;
|
b_is_a_player_on_the_roof = 1;
|
||||||
}
|
}
|
||||||
_k696 = getNextArrayKey( _a696, _k696 );
|
|
||||||
}
|
|
||||||
if ( !b_is_a_player_on_the_roof )
|
|
||||||
{
|
|
||||||
if ( level.plane_pieces_picked_up == 5 )
|
|
||||||
{
|
|
||||||
player = players[ randomintrange( 0, players.size ) ];
|
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
|
||||||
player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 );
|
|
||||||
n_roof_nag_wait *= 1,5;
|
|
||||||
n_roof_nag_max_times--;
|
|
||||||
|
|
||||||
}
|
asm_cond( !b_is_a_player_on_the_roof, loc_2E53 );
|
||||||
}
|
asm_cond( level.plane_pieces_picked_up == 5, loc_2E53 );
|
||||||
}
|
player = players[randomintrange( 0, players.size )];
|
||||||
|
asm_cond( isdefined( player ), loc_2E53 );
|
||||||
|
player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 );
|
||||||
|
n_roof_nag_wait *= 1.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,40 +533,37 @@ oncrafted_plane( player )
|
|||||||
plane_craftable hidepart( "tag_engine_ground" );
|
plane_craftable hidepart( "tag_engine_ground" );
|
||||||
plane_craftable hidepart( "tag_clothes_ground" );
|
plane_craftable hidepart( "tag_clothes_ground" );
|
||||||
plane_craftable hidepart( "tag_fuel_hose" );
|
plane_craftable hidepart( "tag_fuel_hose" );
|
||||||
if ( !isDefined( level.sndplanecrafted ) )
|
|
||||||
{
|
if ( !isdefined( level.sndplanecrafted ) )
|
||||||
level.sndplanecrafted = 0;
|
level.sndplanecrafted = 0;
|
||||||
}
|
|
||||||
level.sndplanecrafted++;
|
level.sndplanecrafted++;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted );
|
||||||
|
|
||||||
if ( is_part_crafted( "plane", "rigging" ) )
|
if ( is_part_crafted( "plane", "rigging" ) )
|
||||||
{
|
{
|
||||||
plane_craftable showpart( "tag_support_upper" );
|
plane_craftable showpart( "tag_support_upper" );
|
||||||
|
|
||||||
if ( is_part_crafted( "plane", "cloth" ) )
|
if ( is_part_crafted( "plane", "cloth" ) )
|
||||||
{
|
|
||||||
plane_craftable showpart( "tag_wing_skins_up" );
|
plane_craftable showpart( "tag_wing_skins_up" );
|
||||||
}
|
|
||||||
if ( is_part_crafted( "plane", "engine" ) )
|
if ( is_part_crafted( "plane", "engine" ) )
|
||||||
{
|
|
||||||
plane_craftable showpart( "tag_engines_up" );
|
plane_craftable showpart( "tag_engines_up" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
plane_craftable showpart( "tag_wings_down" );
|
plane_craftable showpart( "tag_wings_down" );
|
||||||
|
|
||||||
if ( is_part_crafted( "plane", "cloth" ) )
|
if ( is_part_crafted( "plane", "cloth" ) )
|
||||||
{
|
|
||||||
m_plane_hideable_clothes_pile show();
|
m_plane_hideable_clothes_pile show();
|
||||||
}
|
|
||||||
if ( is_part_crafted( "plane", "engine" ) )
|
if ( is_part_crafted( "plane", "engine" ) )
|
||||||
{
|
|
||||||
m_plane_hideable_engine show();
|
m_plane_hideable_engine show();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) )
|
if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) )
|
||||||
{
|
|
||||||
plane_craftable showpart( "tag_fuel_hose" );
|
plane_craftable showpart( "tag_fuel_hose" );
|
||||||
}
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "cloth":
|
case "cloth":
|
||||||
@ -595,7 +587,9 @@ oncrafted_plane( player )
|
|||||||
in_game_checklist_plane_piece_crafted( "rigging" );
|
in_game_checklist_plane_piece_crafted( "rigging" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 4 );
|
level setclientfield( field_name, 4 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
@ -608,11 +602,10 @@ ondrop_fuel( player )
|
|||||||
level notify( "dropped_" + self.piecename );
|
level notify( "dropped_" + self.piecename );
|
||||||
self.piece_owner = undefined;
|
self.piece_owner = undefined;
|
||||||
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
||||||
if ( isDefined( level.sndfuelpieces ) )
|
|
||||||
{
|
if ( isdefined( level.sndfuelpieces ) )
|
||||||
level.sndfuelpieces--;
|
level.sndfuelpieces--;
|
||||||
|
|
||||||
}
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "fuel1":
|
case "fuel1":
|
||||||
@ -631,7 +624,9 @@ ondrop_fuel( player )
|
|||||||
field_name = "quest_state5";
|
field_name = "quest_state5";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 5 );
|
level setclientfield( field_name, 5 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
@ -642,18 +637,18 @@ ondrop_fuel( player )
|
|||||||
onpickup_fuel( player )
|
onpickup_fuel( player )
|
||||||
{
|
{
|
||||||
player playsound( "zmb_craftable_pickup" );
|
player playsound( "zmb_craftable_pickup" );
|
||||||
if ( !isDefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 )
|
|
||||||
{
|
if ( !isdefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 )
|
||||||
level.sndfuelpieces = 0;
|
level.sndfuelpieces = 0;
|
||||||
}
|
|
||||||
level.sndfuelpieces++;
|
level.sndfuelpieces++;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces );
|
||||||
self pickupfrommover();
|
self pickupfrommover();
|
||||||
self.piece_owner = player;
|
self.piece_owner = player;
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
if ( isdefined( player ) )
|
||||||
player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 );
|
player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 );
|
||||||
}
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "fuel1":
|
case "fuel1":
|
||||||
@ -672,12 +667,15 @@ onpickup_fuel( player )
|
|||||||
field_name = "quest_state5";
|
field_name = "quest_state5";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 6 );
|
level setclientfield( field_name, 6 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread ondisconnect_common( player );
|
self thread ondisconnect_common( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -685,6 +683,7 @@ oncrafted_fuel( player )
|
|||||||
{
|
{
|
||||||
level notify( "crafted_" + self.piecename );
|
level notify( "crafted_" + self.piecename );
|
||||||
level.n_plane_fuel_count++;
|
level.n_plane_fuel_count++;
|
||||||
|
|
||||||
switch ( self.piecename )
|
switch ( self.piecename )
|
||||||
{
|
{
|
||||||
case "fuel1":
|
case "fuel1":
|
||||||
@ -703,7 +702,9 @@ oncrafted_fuel( player )
|
|||||||
field_name = "quest_state5";
|
field_name = "quest_state5";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( field_name, 7 );
|
level setclientfield( field_name, 7 );
|
||||||
|
|
||||||
if ( !level.is_forever_solo_game )
|
if ( !level.is_forever_solo_game )
|
||||||
{
|
{
|
||||||
player_num = player getentitynumber() + 1;
|
player_num = player getentitynumber() + 1;
|
||||||
@ -714,7 +715,7 @@ oncrafted_fuel( player )
|
|||||||
onfullycrafted_plane( player )
|
onfullycrafted_plane( player )
|
||||||
{
|
{
|
||||||
flag_set( "plane_built" );
|
flag_set( "plane_built" );
|
||||||
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo();
|
||||||
level notify( "roof_nag_vo" );
|
level notify( "roof_nag_vo" );
|
||||||
level setclientfield( "quest_plane_craft_complete", 1 );
|
level setclientfield( "quest_plane_craft_complete", 1 );
|
||||||
return 0;
|
return 0;
|
||||||
@ -733,7 +734,7 @@ onfullycrafted_packasplat( player )
|
|||||||
onfullycrafted_refueled( player )
|
onfullycrafted_refueled( player )
|
||||||
{
|
{
|
||||||
flag_set( "plane_built" );
|
flag_set( "plane_built" );
|
||||||
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo();
|
||||||
level notify( "roof_nag_vo" );
|
level notify( "roof_nag_vo" );
|
||||||
thread onfullycrafted_refueled_think( player );
|
thread onfullycrafted_refueled_think( player );
|
||||||
return 0;
|
return 0;
|
||||||
@ -742,31 +743,26 @@ onfullycrafted_refueled( player )
|
|||||||
onfullycrafted_refueled_think( player )
|
onfullycrafted_refueled_think( player )
|
||||||
{
|
{
|
||||||
flag_wait( "spawn_fuel_tanks" );
|
flag_wait( "spawn_fuel_tanks" );
|
||||||
i = 1;
|
|
||||||
while ( i <= 5 )
|
for ( i = 1; i <= 5; i++ )
|
||||||
{
|
|
||||||
level setclientfield( "quest_state" + i, 5 );
|
level setclientfield( "quest_state" + i, 5 );
|
||||||
i++;
|
|
||||||
}
|
maps\mp\zombies\_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 );
|
||||||
maps/mp/zombies/_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sqcommoncraftable()
|
sqcommoncraftable()
|
||||||
{
|
{
|
||||||
level.sq_craftable = maps/mp/zombies/_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
level.sq_craftable = maps\mp\zombies\_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onbuyweapon_riotshield( player )
|
onbuyweapon_riotshield( player )
|
||||||
{
|
{
|
||||||
if ( isDefined( player.player_shield_reset_health ) )
|
if ( isdefined( player.player_shield_reset_health ) )
|
||||||
{
|
|
||||||
player [[ player.player_shield_reset_health ]]();
|
player [[ player.player_shield_reset_health ]]();
|
||||||
}
|
|
||||||
if ( isDefined( player.player_shield_reset_location ) )
|
if ( isdefined( player.player_shield_reset_location ) )
|
||||||
{
|
|
||||||
player [[ player.player_shield_reset_location ]]();
|
player [[ player.player_shield_reset_location ]]();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
onbuyweapon_plane( player )
|
onbuyweapon_plane( player )
|
||||||
{
|
{
|
||||||
@ -776,38 +772,29 @@ onbuyweapon_plane( player )
|
|||||||
|
|
||||||
droponmover( player )
|
droponmover( player )
|
||||||
{
|
{
|
||||||
while ( isDefined( player ) && player maps/mp/zm_alcatraz_travel::is_player_on_gondola() )
|
if ( isdefined( player ) && player maps\mp\zm_alcatraz_travel::is_player_on_gondola() )
|
||||||
{
|
{
|
||||||
str_location = undefined;
|
str_location = undefined;
|
||||||
if ( isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isDefined( level.e_gondola.destination ) )
|
|
||||||
{
|
if ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isdefined( level.e_gondola.destination ) )
|
||||||
str_location = level.e_gondola.destination;
|
str_location = level.e_gondola.destination;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
str_location = level.e_gondola.location;
|
str_location = level.e_gondola.location;
|
||||||
}
|
|
||||||
if ( !isDefined( str_location ) )
|
if ( !isdefined( str_location ) )
|
||||||
{
|
|
||||||
str_location = "roof";
|
str_location = "roof";
|
||||||
}
|
|
||||||
a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" );
|
a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" );
|
||||||
_a1104 = a_s_part_teleport;
|
|
||||||
_k1104 = getFirstArrayKey( _a1104 );
|
foreach ( struct in a_s_part_teleport )
|
||||||
while ( isDefined( _k1104 ) )
|
|
||||||
{
|
{
|
||||||
struct = _a1104[ _k1104 ];
|
if ( !( isdefined( struct.occupied ) && struct.occupied ) )
|
||||||
if ( isDefined( struct.occupied ) && !struct.occupied )
|
|
||||||
{
|
{
|
||||||
self.model.origin = struct.origin;
|
self.model.origin = struct.origin;
|
||||||
self.model.angles = struct.angles;
|
self.model.angles = struct.angles;
|
||||||
struct.occupied = 1;
|
struct.occupied = 1;
|
||||||
self.unitrigger.struct_teleport = struct;
|
self.unitrigger.struct_teleport = struct;
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_k1104 = getNextArrayKey( _a1104, _k1104 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,9 +802,9 @@ droponmover( player )
|
|||||||
|
|
||||||
pickupfrommover()
|
pickupfrommover()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.unitrigger ) )
|
if ( isdefined( self.unitrigger ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.unitrigger.struct_teleport ) )
|
if ( isdefined( self.unitrigger.struct_teleport ) )
|
||||||
{
|
{
|
||||||
self.unitrigger.struct_teleport.occupied = 0;
|
self.unitrigger.struct_teleport.occupied = 0;
|
||||||
self.unitrigger.struct_teleport = undefined;
|
self.unitrigger.struct_teleport = undefined;
|
||||||
@ -835,61 +822,39 @@ in_game_checklist_setup()
|
|||||||
a_str_partnames[3] = "contval";
|
a_str_partnames[3] = "contval";
|
||||||
a_str_partnames[4] = "rigging";
|
a_str_partnames[4] = "rigging";
|
||||||
a_str_partnames[5] = "key";
|
a_str_partnames[5] = "key";
|
||||||
_a1143 = a_m_checklist;
|
|
||||||
_k1143 = getFirstArrayKey( _a1143 );
|
foreach ( m_checklist in a_m_checklist )
|
||||||
while ( isDefined( _k1143 ) )
|
|
||||||
{
|
{
|
||||||
m_checklist = _a1143[ _k1143 ];
|
foreach ( str_partname in a_str_partnames )
|
||||||
_a1145 = a_str_partnames;
|
|
||||||
_k1145 = getFirstArrayKey( _a1145 );
|
|
||||||
while ( isDefined( _k1145 ) )
|
|
||||||
{
|
{
|
||||||
str_partname = _a1145[ _k1145 ];
|
|
||||||
m_checklist hidepart( "j_check_" + str_partname );
|
m_checklist hidepart( "j_check_" + str_partname );
|
||||||
m_checklist hidepart( "j_strike_" + str_partname );
|
m_checklist hidepart( "j_strike_" + str_partname );
|
||||||
_k1145 = getNextArrayKey( _a1145, _k1145 );
|
|
||||||
}
|
}
|
||||||
_k1143 = getNextArrayKey( _a1143, _k1143 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
in_game_checklist_plane_piece_picked_up( str_partname )
|
in_game_checklist_plane_piece_picked_up( str_partname )
|
||||||
{
|
{
|
||||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||||
_a1157 = a_m_checklist;
|
|
||||||
_k1157 = getFirstArrayKey( _a1157 );
|
foreach ( m_checklist in a_m_checklist )
|
||||||
while ( isDefined( _k1157 ) )
|
|
||||||
{
|
|
||||||
m_checklist = _a1157[ _k1157 ];
|
|
||||||
m_checklist showpart( "j_check_" + str_partname );
|
m_checklist showpart( "j_check_" + str_partname );
|
||||||
_k1157 = getNextArrayKey( _a1157, _k1157 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
in_game_checklist_plane_piece_dropped( str_partname )
|
in_game_checklist_plane_piece_dropped( str_partname )
|
||||||
{
|
{
|
||||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||||
_a1167 = a_m_checklist;
|
|
||||||
_k1167 = getFirstArrayKey( _a1167 );
|
foreach ( m_checklist in a_m_checklist )
|
||||||
while ( isDefined( _k1167 ) )
|
|
||||||
{
|
|
||||||
m_checklist = _a1167[ _k1167 ];
|
|
||||||
m_checklist hidepart( "j_check_" + str_partname );
|
m_checklist hidepart( "j_check_" + str_partname );
|
||||||
_k1167 = getNextArrayKey( _a1167, _k1167 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
in_game_checklist_plane_piece_crafted( str_partname )
|
in_game_checklist_plane_piece_crafted( str_partname )
|
||||||
{
|
{
|
||||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||||
_a1177 = a_m_checklist;
|
|
||||||
_k1177 = getFirstArrayKey( _a1177 );
|
foreach ( m_checklist in a_m_checklist )
|
||||||
while ( isDefined( _k1177 ) )
|
|
||||||
{
|
|
||||||
m_checklist = _a1177[ _k1177 ];
|
|
||||||
m_checklist showpart( "j_strike_" + str_partname );
|
m_checklist showpart( "j_strike_" + str_partname );
|
||||||
_k1177 = getNextArrayKey( _a1177, _k1177 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||||
@ -900,33 +865,32 @@ alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, tri
|
|||||||
alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||||
{
|
{
|
||||||
trig = getent( trigger_targetname, "targetname" );
|
trig = getent( trigger_targetname, "targetname" );
|
||||||
if ( !isDefined( trig ) )
|
|
||||||
{
|
if ( !isdefined( trig ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trig.script_length = 386;
|
trig.script_length = 386;
|
||||||
return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent );
|
return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent );
|
||||||
}
|
}
|
||||||
|
|
||||||
alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||||
{
|
{
|
||||||
if ( !isDefined( trig ) )
|
if ( !isdefined( trig ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
unitrigger_stub = spawnstruct();
|
unitrigger_stub = spawnstruct();
|
||||||
unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname];
|
unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname];
|
||||||
angles = trig.script_angles;
|
angles = trig.script_angles;
|
||||||
if ( !isDefined( angles ) )
|
|
||||||
{
|
if ( !isdefined( angles ) )
|
||||||
angles = ( 0, 0, 0 );
|
angles = ( 0, 0, 0 );
|
||||||
}
|
|
||||||
unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 );
|
unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6;
|
||||||
unitrigger_stub.angles = trig.angles;
|
unitrigger_stub.angles = trig.angles;
|
||||||
if ( isDefined( trig.script_angles ) )
|
|
||||||
{
|
if ( isdefined( trig.script_angles ) )
|
||||||
unitrigger_stub.angles = trig.script_angles;
|
unitrigger_stub.angles = trig.script_angles;
|
||||||
}
|
|
||||||
unitrigger_stub.equipname = equipname;
|
unitrigger_stub.equipname = equipname;
|
||||||
unitrigger_stub.weaponname = weaponname;
|
unitrigger_stub.weaponname = weaponname;
|
||||||
unitrigger_stub.trigger_hintstring = trigger_hintstring;
|
unitrigger_stub.trigger_hintstring = trigger_hintstring;
|
||||||
@ -938,69 +902,63 @@ alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigg
|
|||||||
unitrigger_stub.onenduse = ::onenduseuts;
|
unitrigger_stub.onenduse = ::onenduseuts;
|
||||||
unitrigger_stub.onuse = ::onuseplantobjectuts;
|
unitrigger_stub.onuse = ::onuseplantobjectuts;
|
||||||
unitrigger_stub.oncantuse = ::oncantuseuts;
|
unitrigger_stub.oncantuse = ::oncantuseuts;
|
||||||
if ( isDefined( trig.script_length ) )
|
|
||||||
{
|
if ( isdefined( trig.script_length ) )
|
||||||
unitrigger_stub.script_length = trig.script_length;
|
unitrigger_stub.script_length = trig.script_length;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_length = 32;
|
unitrigger_stub.script_length = 32;
|
||||||
}
|
|
||||||
if ( isDefined( trig.script_width ) )
|
if ( isdefined( trig.script_width ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = trig.script_width;
|
unitrigger_stub.script_width = trig.script_width;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_width = 100;
|
unitrigger_stub.script_width = 100;
|
||||||
}
|
|
||||||
if ( isDefined( trig.script_height ) )
|
if ( isdefined( trig.script_height ) )
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = trig.script_height;
|
unitrigger_stub.script_height = trig.script_height;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
unitrigger_stub.script_height = 64;
|
unitrigger_stub.script_height = 64;
|
||||||
}
|
|
||||||
unitrigger_stub.target = trig.target;
|
unitrigger_stub.target = trig.target;
|
||||||
unitrigger_stub.targetname = trig.targetname;
|
unitrigger_stub.targetname = trig.targetname;
|
||||||
unitrigger_stub.script_noteworthy = trig.script_noteworthy;
|
unitrigger_stub.script_noteworthy = trig.script_noteworthy;
|
||||||
unitrigger_stub.script_parameters = trig.script_parameters;
|
unitrigger_stub.script_parameters = trig.script_parameters;
|
||||||
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
||||||
if ( isDefined( level.zombie_craftablestubs[ equipname ].hint ) )
|
|
||||||
{
|
if ( isdefined( level.zombie_craftablestubs[equipname].hint ) )
|
||||||
unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].hint;
|
unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].hint;
|
||||||
}
|
|
||||||
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
||||||
unitrigger_stub.require_look_at = 0;
|
unitrigger_stub.require_look_at = 0;
|
||||||
unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
||||||
if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) )
|
|
||||||
{
|
if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) )
|
||||||
unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt;
|
unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt;
|
||||||
}
|
|
||||||
unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt;
|
unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt;
|
||||||
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think );
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think );
|
||||||
unitrigger_stub.piece_trigger = trig;
|
unitrigger_stub.piece_trigger = trig;
|
||||||
trig.trigger_stub = unitrigger_stub;
|
trig.trigger_stub = unitrigger_stub;
|
||||||
unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade;
|
unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade;
|
||||||
if ( isDefined( unitrigger_stub.target ) )
|
|
||||||
|
if ( isdefined( unitrigger_stub.target ) )
|
||||||
{
|
{
|
||||||
unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" );
|
unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" );
|
||||||
if ( isDefined( unitrigger_stub.model ) )
|
|
||||||
{
|
if ( isdefined( unitrigger_stub.model ) )
|
||||||
if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) )
|
||||||
unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade );
|
unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade );
|
||||||
}
|
|
||||||
unitrigger_stub.model ghost();
|
unitrigger_stub.model ghost();
|
||||||
unitrigger_stub.model notsolid();
|
unitrigger_stub.model notsolid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin );
|
unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin );
|
||||||
|
|
||||||
if ( delete_trigger )
|
if ( delete_trigger )
|
||||||
{
|
|
||||||
trig delete();
|
trig delete();
|
||||||
}
|
|
||||||
level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub;
|
level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub;
|
||||||
return unitrigger_stub;
|
return unitrigger_stub;
|
||||||
}
|
}
|
||||||
|
@ -1,135 +1,120 @@
|
|||||||
#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;
|
||||||
}
|
|
||||||
for ( ;; )
|
while ( true )
|
||||||
{
|
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
zombies = get_round_enemy_array();
|
zombies = get_round_enemy_array();
|
||||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
|
||||||
|
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||||
{
|
{
|
||||||
wait level.zombie_tracking_wait;
|
wait( level.zombie_tracking_wait );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else i = 0;
|
|
||||||
while ( i < zombies.size )
|
|
||||||
{
|
{
|
||||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
{
|
{
|
||||||
|
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 = 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;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( players[i].sessionstate == "spectator" )
|
if ( players[i].sessionstate == "spectator" )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( isdefined( level.only_track_targeted_players ) )
|
||||||
{
|
{
|
||||||
i++;
|
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( isDefined( level.only_track_targeted_players ) )
|
|
||||||
{
|
|
||||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
can_be_seen = self player_can_see_me( players[i] );
|
can_be_seen = self player_can_see_me( players[i] );
|
||||||
|
|
||||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||||
{
|
|
||||||
self.inview++;
|
self.inview++;
|
||||||
}
|
|
||||||
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||||
{
|
|
||||||
self.player_close++;
|
self.player_close++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
wait 0.1;
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
if ( self.inview == 0 && self.player_close == 0 )
|
if ( self.inview == 0 && self.player_close == 0 )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
zombies = getaiarray( "axis" );
|
zombies = getaiarray( "axis" );
|
||||||
if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth )
|
|
||||||
|
if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
{
|
{
|
||||||
level.zombie_total++;
|
level.zombie_total++;
|
||||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
|
||||||
{
|
{
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
|
||||||
{
|
{
|
||||||
level.zombie_total++;
|
level.zombie_total++;
|
||||||
|
|
||||||
if ( self.health < level.zombie_health )
|
if ( self.health < level.zombie_health )
|
||||||
{
|
|
||||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
|
||||||
self notify( "zombie_delete" );
|
self notify( "zombie_delete" );
|
||||||
self delete();
|
self delete();
|
||||||
recalc_zombie_array();
|
recalc_zombie_array();
|
||||||
@ -139,31 +124,27 @@ delete_zombie_noone_looking( how_close, how_high )
|
|||||||
player_can_see_me( player )
|
player_can_see_me( player )
|
||||||
{
|
{
|
||||||
playerangles = player getplayerangles();
|
playerangles = player getplayerangles();
|
||||||
playerforwardvec = anglesToForward( playerangles );
|
playerforwardvec = anglestoforward( playerangles );
|
||||||
playerunitforwardvec = vectornormalize( playerforwardvec );
|
playerunitforwardvec = vectornormalize( playerforwardvec );
|
||||||
banzaipos = self.origin;
|
banzaipos = self.origin;
|
||||||
playerpos = player getorigin();
|
playerpos = player getorigin();
|
||||||
playertobanzaivec = banzaipos - playerpos;
|
playertobanzaivec = banzaipos - playerpos;
|
||||||
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
||||||
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
||||||
|
|
||||||
if ( forwarddotbanzai >= 1 )
|
if ( forwarddotbanzai >= 1 )
|
||||||
{
|
|
||||||
anglefromcenter = 0;
|
anglefromcenter = 0;
|
||||||
}
|
|
||||||
else if ( forwarddotbanzai <= -1 )
|
else if ( forwarddotbanzai <= -1 )
|
||||||
{
|
|
||||||
anglefromcenter = 180;
|
anglefromcenter = 180;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
anglefromcenter = acos( forwarddotbanzai );
|
anglefromcenter = acos( forwarddotbanzai );
|
||||||
}
|
|
||||||
playerfov = getDvarFloat( "cg_fov" );
|
playerfov = getdvarfloat( "cg_fov" );
|
||||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||||
|
|
||||||
if ( banzaivsplayerfovbuffer <= 0 )
|
if ( banzaivsplayerfovbuffer <= 0 )
|
||||||
{
|
banzaivsplayerfovbuffer = 0.2;
|
||||||
banzaivsplayerfovbuffer = 0,2;
|
|
||||||
}
|
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
|
||||||
return playercanseeme;
|
return playercanseeme;
|
||||||
}
|
}
|
||||||
|
@ -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,40 +1,41 @@
|
|||||||
//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;
|
||||||
@ -42,19 +43,19 @@ encounter_init() //checked matches cerberus output
|
|||||||
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];
|
||||||
@ -62,29 +63,30 @@ alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdea
|
|||||||
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_weapons = self getweaponslist();
|
||||||
self.grief_savedweapon_weaponsammo_stock = [];
|
self.grief_savedweapon_weaponsammo_stock = [];
|
||||||
self.grief_savedweapon_weaponsammo_clip = [];
|
self.grief_savedweapon_weaponsammo_clip = [];
|
||||||
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
self.grief_savedweapon_currentweapon = self getcurrentweapon();
|
||||||
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
|
||||||
if ( isDefined( self.grief_savedweapon_grenades ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_grenades ) )
|
||||||
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
|
||||||
}
|
|
||||||
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
|
||||||
if ( isDefined( self.grief_savedweapon_tactical ) )
|
|
||||||
{
|
if ( isdefined( self.grief_savedweapon_tactical ) )
|
||||||
self.grief_savedweapon_tactical_clip = self getweaponammoclip( 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_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_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] );
|
||||||
}
|
}
|
||||||
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
|
|
||||||
{
|
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||||
self.grief_hasriotshield = 1;
|
self.grief_hasriotshield = 1;
|
||||||
}
|
|
||||||
if ( self hasweapon( "claymore_zm" ) )
|
if ( self hasweapon( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
self.grief_savedweapon_claymore = 1;
|
self.grief_savedweapon_claymore = 1;
|
||||||
@ -92,7 +94,7 @@ alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdea
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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" );
|
||||||
@ -100,30 +102,31 @@ precache_team_characters() //checked matches cerberus output
|
|||||||
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;
|
self.characterindex = 1;
|
||||||
|
|
||||||
if ( self.team == "axis" )
|
if ( self.team == "axis" )
|
||||||
{
|
|
||||||
self.characterindex = 0;
|
self.characterindex = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
switch ( self.characterindex )
|
switch ( self.characterindex )
|
||||||
{
|
{
|
||||||
case 0:
|
case "2":
|
||||||
case 2:
|
case "0":
|
||||||
self setmodel( "c_zom_player_grief_inmate_fb" );
|
self setmodel( "c_zom_player_grief_inmate_fb" );
|
||||||
self.voice = "american";
|
self.voice = "american";
|
||||||
self.skeleton = "base";
|
self.skeleton = "base";
|
||||||
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
|
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
|
||||||
self.characterindex = 0;
|
self.characterindex = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case "3":
|
||||||
case 3:
|
case "1":
|
||||||
self setmodel( "c_zom_player_grief_guard_fb" );
|
self setmodel( "c_zom_player_grief_guard_fb" );
|
||||||
self.voice = "american";
|
self.voice = "american";
|
||||||
self.skeleton = "base";
|
self.skeleton = "base";
|
||||||
@ -131,18 +134,19 @@ give_team_characters() //checked matches cerberus output
|
|||||||
self.characterindex = 1;
|
self.characterindex = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self setmovespeedscale( 1 );
|
self setmovespeedscale( 1 );
|
||||||
self setsprintduration( 4 );
|
self setsprintduration( 4 );
|
||||||
self setsprintcooldown( 0 );
|
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" );
|
||||||
@ -150,61 +154,61 @@ grief_treasure_chest_init() //checked matches cerberus output
|
|||||||
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( triggers[ i ].script_flag ) )
|
if ( isdefined( trigger.script_flag ) )
|
||||||
{
|
{
|
||||||
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" )
|
if ( trigger.script_flag == "activate_cellblock_citadel" || trigger.script_flag == "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" || trigger.script_flag == "activate_infirmary" )
|
||||||
{
|
{
|
||||||
triggers[ i ] delete();
|
trigger delete();
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
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" )
|
|
||||||
|
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" )
|
||||||
{
|
{
|
||||||
i++;
|
continue;
|
||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trigger delete();
|
||||||
}
|
}
|
||||||
triggers[ i ] 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";
|
||||||
@ -217,32 +221,33 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
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 ) )
|
||||||
{
|
{
|
||||||
|
if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
str_model = barrier.model;
|
|
||||||
b_delete_barrier = 1;
|
b_delete_barrier = 1;
|
||||||
|
|
||||||
if ( isdefined( barrier.script_string ) )
|
if ( isdefined( barrier.script_string ) )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < a_str_zones.size; i++ )
|
for ( i = 0; i < a_str_zones.size; i++ )
|
||||||
{
|
{
|
||||||
if ( str_model == a_str_zones[ i ] )
|
if ( barrier.script_string == a_str_zones[i] )
|
||||||
{
|
{
|
||||||
b_delete_barrier = 0;
|
b_delete_barrier = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( b_delete_barrier == 1 )
|
|
||||||
{
|
if ( b_delete_barrier == 1 )
|
||||||
barrier delete();
|
barrier delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
|
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
|
||||||
t_temp delete();
|
t_temp delete();
|
||||||
t_temp = getent( "tower_trap_range_trigger", "targetname" );
|
t_temp = getent( "tower_trap_range_trigger", "targetname" );
|
||||||
@ -252,77 +257,81 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
e_brush = getent( "tower_shockbox_door", "targetname" );
|
e_brush = getent( "tower_shockbox_door", "targetname" );
|
||||||
e_brush delete();
|
e_brush delete();
|
||||||
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
|
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
|
||||||
|
|
||||||
foreach ( trigger in a_t_travel_triggers )
|
foreach ( trigger in a_t_travel_triggers )
|
||||||
{
|
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
|
||||||
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
|
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
|
||||||
|
|
||||||
foreach ( light in a_e_gondola_lights )
|
foreach ( light in a_e_gondola_lights )
|
||||||
{
|
|
||||||
light delete();
|
light delete();
|
||||||
}
|
|
||||||
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
|
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
|
||||||
|
|
||||||
foreach ( model in a_e_gondola_landing_gates )
|
foreach ( model in a_e_gondola_landing_gates )
|
||||||
{
|
|
||||||
model delete();
|
model delete();
|
||||||
}
|
|
||||||
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
|
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
|
||||||
|
|
||||||
foreach ( model in a_e_gondola_landing_doors )
|
foreach ( model in a_e_gondola_landing_doors )
|
||||||
{
|
|
||||||
model delete();
|
model delete();
|
||||||
}
|
|
||||||
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
|
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
|
||||||
|
|
||||||
foreach ( model in a_e_gondola_gates )
|
foreach ( model in a_e_gondola_gates )
|
||||||
{
|
|
||||||
model delete();
|
model delete();
|
||||||
}
|
|
||||||
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
|
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
|
||||||
|
|
||||||
foreach ( model in a_e_gondola_doors )
|
foreach ( model in a_e_gondola_doors )
|
||||||
{
|
|
||||||
model delete();
|
model delete();
|
||||||
}
|
|
||||||
m_gondola = getent( "zipline_gondola", "targetname" );
|
m_gondola = getent( "zipline_gondola", "targetname" );
|
||||||
m_gondola delete();
|
m_gondola delete();
|
||||||
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
|
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
|
||||||
t_ride_trigger delete();
|
t_ride_trigger delete();
|
||||||
a_classic_clips = getentarray( "classic_clips", "targetname" );
|
a_classic_clips = getentarray( "classic_clips", "targetname" );
|
||||||
|
|
||||||
foreach ( clip in a_classic_clips )
|
foreach ( clip in a_classic_clips )
|
||||||
{
|
{
|
||||||
clip connectpaths();
|
clip connectpaths();
|
||||||
clip delete();
|
clip delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
|
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
|
||||||
|
|
||||||
foreach ( m_prop in a_afterlife_props )
|
foreach ( m_prop in a_afterlife_props )
|
||||||
{
|
|
||||||
m_prop delete();
|
m_prop delete();
|
||||||
}
|
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
spork_portal delete();
|
spork_portal delete();
|
||||||
a_audio = getentarray( "at_headphones", "script_noteworthy" );
|
a_audio = getentarray( "at_headphones", "script_noteworthy" );
|
||||||
|
|
||||||
foreach ( model in a_audio )
|
foreach ( model in a_audio )
|
||||||
{
|
|
||||||
model delete();
|
model delete();
|
||||||
}
|
|
||||||
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
|
||||||
m_spoon_pickup delete();
|
m_spoon_pickup delete();
|
||||||
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
|
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
|
||||||
t_sq_bg delete();
|
t_sq_bg delete();
|
||||||
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
|
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
|
||||||
|
|
||||||
foreach ( trigger in t_crafting_table )
|
foreach ( trigger in t_crafting_table )
|
||||||
{
|
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
|
||||||
t_warden_fence = getent( "warden_fence_damage", "targetname" );
|
t_warden_fence = getent( "warden_fence_damage", "targetname" );
|
||||||
t_warden_fence delete();
|
t_warden_fence delete();
|
||||||
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
|
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
|
||||||
m_plane_about_to_crash delete();
|
m_plane_about_to_crash delete();
|
||||||
m_plane_craftable = getent( "plane_craftable", "targetname" );
|
m_plane_craftable = getent( "plane_craftable", "targetname" );
|
||||||
m_plane_craftable delete();
|
m_plane_craftable delete();
|
||||||
|
|
||||||
for ( i = 1; i <= 5; i++ )
|
for ( i = 1; i <= 5; i++ )
|
||||||
{
|
{
|
||||||
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
|
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
|
||||||
m_key_lock delete();
|
m_key_lock delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_shower_door = getent( "shower_key_door", "targetname" );
|
m_shower_door = getent( "shower_key_door", "targetname" );
|
||||||
m_shower_door delete();
|
m_shower_door delete();
|
||||||
m_nixie_door = getent( "nixie_door_left", "targetname" );
|
m_nixie_door = getent( "nixie_door_left", "targetname" );
|
||||||
@ -331,11 +340,13 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
m_nixie_door delete();
|
m_nixie_door delete();
|
||||||
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
|
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
|
||||||
m_nixie_brush delete();
|
m_nixie_brush delete();
|
||||||
|
|
||||||
for ( i = 1; i <= 3; i++ )
|
for ( i = 1; i <= 3; i++ )
|
||||||
{
|
{
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
m_nixie_tube delete();
|
m_nixie_tube delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||||
t_elevator_door delete();
|
t_elevator_door delete();
|
||||||
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
|
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
|
||||||
@ -354,18 +365,21 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
m_infirmary_case delete();
|
m_infirmary_case delete();
|
||||||
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
|
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
|
||||||
fake_plane_part delete();
|
fake_plane_part delete();
|
||||||
|
|
||||||
for ( i = 1; i <= 3; i++ )
|
for ( i = 1; i <= 3; i++ )
|
||||||
{
|
{
|
||||||
m_generator = getent( "generator_panel_" + i, "targetname" );
|
m_generator = getent( "generator_panel_" + i, "targetname" );
|
||||||
m_generator delete();
|
m_generator delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
a_m_generator_core = getentarray( "generator_core", "targetname" );
|
a_m_generator_core = getentarray( "generator_core", "targetname" );
|
||||||
|
|
||||||
foreach ( generator in a_m_generator_core )
|
foreach ( generator in a_m_generator_core )
|
||||||
{
|
|
||||||
generator delete();
|
generator delete();
|
||||||
}
|
|
||||||
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
|
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
|
||||||
e_playerclip delete();
|
e_playerclip delete();
|
||||||
|
|
||||||
for ( i = 1; i <= 4; i++ )
|
for ( i = 1; i <= 4; i++ )
|
||||||
{
|
{
|
||||||
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
|
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
|
||||||
@ -373,17 +387,20 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
m_chair = getent( "electric_chair_" + i, "targetname" );
|
m_chair = getent( "electric_chair_" + i, "targetname" );
|
||||||
m_chair delete();
|
m_chair delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
|
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
|
||||||
|
|
||||||
foreach ( model in a_afterlife_interact )
|
foreach ( model in a_afterlife_interact )
|
||||||
{
|
{
|
||||||
model turn_afterlife_interact_on();
|
model turn_afterlife_interact_on();
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_wait( "initial_blackscreen_passed" );
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors();
|
maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors();
|
||||||
flag_wait( "start_zombie_round_logic" );
|
flag_wait( "start_zombie_round_logic" );
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
|
||||||
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
|
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
|
||||||
wait 1;
|
wait 1;
|
||||||
level notify( "sleight_on" );
|
level notify( "sleight_on" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -401,41 +418,40 @@ main() //checked partially changed to match cerberus output changed at own discr
|
|||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
level notify( "Pack_A_Punch_on" );
|
level notify( "Pack_A_Punch_on" );
|
||||||
wait_network_frame();
|
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 playsoundtoplayer( "zmb_easteregg_face", self );
|
||||||
@ -444,29 +460,32 @@ magicbox_face_spawn() //checked matches cerberus output
|
|||||||
self.wth_elem.vertalign = "fullscreen";
|
self.wth_elem.vertalign = "fullscreen";
|
||||||
self.wth_elem.sort = 1000;
|
self.wth_elem.sort = 1000;
|
||||||
self.wth_elem.foreground = 0;
|
self.wth_elem.foreground = 0;
|
||||||
self.wth_elem.alpha = 1;
|
self.wth_elem.alpha = 1.0;
|
||||||
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
||||||
self.wth_elem.hidewheninmenu = 1;
|
self.wth_elem.hidewheninmenu = 1;
|
||||||
wait 0.25;
|
wait 0.25;
|
||||||
self.wth_elem destroy();
|
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 ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.shockbox_anim ) )
|
if ( !isdefined( level.shockbox_anim ) )
|
||||||
{
|
{
|
||||||
level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim;
|
level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim;
|
||||||
level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim;
|
level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
|
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
|
||||||
{
|
{
|
||||||
self useanimtree( -1 );
|
self useanimtree( -1 );
|
||||||
@ -475,8 +494,5 @@ turn_afterlife_interact_on()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,17 @@
|
|||||||
#include maps/mp/zm_alcatraz_sq;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/_hud;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include maps\_utility;
|
||||||
#include maps/mp/zombies/_zm_craftables;
|
#include maps\_vehicle;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_afterlife;
|
||||||
#include maps/mp/zombies/_zm_afterlife;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/_vehicle;
|
#include maps\mp\zombies\_zm_craftables;
|
||||||
#include maps/_utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
|
#include maps\mp\gametypes_zm\_hud;
|
||||||
|
#include maps\mp\zm_alcatraz_sq;
|
||||||
|
|
||||||
setup_nixie_tubes_puzzle()
|
setup_nixie_tubes_puzzle()
|
||||||
{
|
{
|
||||||
@ -22,64 +24,61 @@ setup_nixie_tubes_puzzle()
|
|||||||
m_rigging linkto( m_citadel_elevator );
|
m_rigging linkto( m_citadel_elevator );
|
||||||
level thread nixie_tube_notifier();
|
level thread nixie_tube_notifier();
|
||||||
level thread nixie_tube_elevator_door();
|
level thread nixie_tube_elevator_door();
|
||||||
|
|
||||||
while ( !flag( "nixie_puzzle_completed" ) )
|
while ( !flag( "nixie_puzzle_completed" ) )
|
||||||
{
|
{
|
||||||
generate_unrestricted_nixie_tube_solution();
|
generate_unrestricted_nixie_tube_solution();
|
||||||
n_code = nixie_tube_add_code( level.a_nixie_tube_solution[1], level.a_nixie_tube_solution[2], level.a_nixie_tube_solution[3] );
|
n_code = nixie_tube_add_code( level.a_nixie_tube_solution[1], level.a_nixie_tube_solution[2], level.a_nixie_tube_solution[3] );
|
||||||
i = 1;
|
|
||||||
while ( i < 4 )
|
for ( i = 1; i < 4; i++ )
|
||||||
{
|
{
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
m_nixie_tube thread nixie_tube_thread( i );
|
m_nixie_tube thread nixie_tube_thread( i );
|
||||||
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
||||||
j = 0;
|
|
||||||
while ( j < 10 )
|
for ( j = 0; j < 10; j++ )
|
||||||
{
|
|
||||||
m_nixie_clue hidepart( "J_" + j );
|
m_nixie_clue hidepart( "J_" + j );
|
||||||
j++;
|
|
||||||
}
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a76 = players;
|
|
||||||
_k76 = getFirstArrayKey( _a76 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k76 ) )
|
|
||||||
{
|
|
||||||
player = _a76[ _k76 ];
|
|
||||||
if ( isDefined( player ) && isDefined( player.afterlife ) && player.afterlife )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && ( isdefined( player.afterlife ) && player.afterlife ) )
|
||||||
m_nixie_clue setvisibletoplayer( player );
|
m_nixie_clue setvisibletoplayer( player );
|
||||||
}
|
}
|
||||||
_k76 = getNextArrayKey( _a76, _k76 );
|
|
||||||
}
|
|
||||||
m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[i] );
|
m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[i] );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level waittill( "nixie_" + n_code );
|
level waittill( "nixie_" + n_code );
|
||||||
|
|
||||||
flag_set( "nixie_puzzle_solved" );
|
flag_set( "nixie_puzzle_solved" );
|
||||||
nixie_tube_remove_code( n_code );
|
nixie_tube_remove_code( n_code );
|
||||||
i = 1;
|
|
||||||
while ( i < 4 )
|
for ( i = 1; i < 4; i++ )
|
||||||
{
|
{
|
||||||
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
||||||
m_nixie_clue setinvisibletoall();
|
m_nixie_clue setinvisibletoall();
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_2 = getent( "nixie_tube_2", "targetname" );
|
nixie_tube_2 = getent( "nixie_tube_2", "targetname" );
|
||||||
nixie_tube_2 playsound( "zmb_quest_nixie_success" );
|
nixie_tube_2 playsound( "zmb_quest_nixie_success" );
|
||||||
level thread nixie_tube_elevator_drops();
|
level thread nixie_tube_elevator_drops();
|
||||||
nixie_tube_win_effects_all_tubes( 0, 6, 0 );
|
nixie_tube_win_effects_all_tubes( 0, 6, 0 );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
n_countdown = 60;
|
n_countdown = 60;
|
||||||
level thread sndnixietubecountdown( n_countdown );
|
level thread sndnixietubecountdown( n_countdown );
|
||||||
i = 1;
|
|
||||||
while ( i < 4 )
|
for ( i = 1; i < 4; i++ )
|
||||||
{
|
{
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
level notify( "nixie_tube_trigger_" + i );
|
level notify( "nixie_tube_trigger_" + i );
|
||||||
m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown );
|
m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "nixie_countdown_started" );
|
flag_set( "nixie_countdown_started" );
|
||||||
flag_wait( "nixie_countdown_expired" );
|
flag_wait( "nixie_countdown_expired" );
|
||||||
|
|
||||||
if ( !flag( "nixie_puzzle_completed" ) )
|
if ( !flag( "nixie_puzzle_completed" ) )
|
||||||
{
|
{
|
||||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||||
@ -90,6 +89,7 @@ setup_nixie_tubes_puzzle()
|
|||||||
nixie_tube_elevator_rises();
|
nixie_tube_elevator_rises();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_nixie_tube = getent( "nixie_tube_2", "targetname" );
|
m_nixie_tube = getent( "nixie_tube_2", "targetname" );
|
||||||
m_nixie_tube playsound( "zmb_quest_nixie_success" );
|
m_nixie_tube playsound( "zmb_quest_nixie_success" );
|
||||||
/#
|
/#
|
||||||
@ -100,13 +100,12 @@ setup_nixie_tubes_puzzle()
|
|||||||
stop_exploder( 3400 );
|
stop_exploder( 3400 );
|
||||||
stop_exploder( 3500 );
|
stop_exploder( 3500 );
|
||||||
stop_exploder( 3600 );
|
stop_exploder( 3600 );
|
||||||
i = 1;
|
|
||||||
while ( i < 4 )
|
for ( i = 1; i < 4; i++ )
|
||||||
{
|
{
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
m_nixie_tube thread afterlife_interact_object_think();
|
m_nixie_tube thread afterlife_interact_object_think();
|
||||||
m_nixie_tube thread nixie_tube_thread( i );
|
m_nixie_tube thread nixie_tube_thread( i );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,101 +119,86 @@ generate_unrestricted_nixie_tube_solution()
|
|||||||
a_restricted_solutions[4] = 101;
|
a_restricted_solutions[4] = 101;
|
||||||
a_restricted_solutions[5] = 872;
|
a_restricted_solutions[5] = 872;
|
||||||
a_numbers = [];
|
a_numbers = [];
|
||||||
i = 0;
|
|
||||||
while ( i < 10 )
|
for ( i = 0; i < 10; i++ )
|
||||||
{
|
|
||||||
a_numbers[i] = i;
|
a_numbers[i] = i;
|
||||||
i++;
|
|
||||||
}
|
for ( i = 1; i < 4; i++ )
|
||||||
i = 1;
|
|
||||||
while ( i < 4 )
|
|
||||||
{
|
{
|
||||||
n_index = randomint( a_numbers.size );
|
n_index = randomint( a_numbers.size );
|
||||||
level.a_nixie_tube_solution[i] = a_numbers[n_index];
|
level.a_nixie_tube_solution[i] = a_numbers[n_index];
|
||||||
arrayremoveindex( a_numbers, n_index );
|
arrayremoveindex( a_numbers, n_index );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
i = 0;
|
|
||||||
while ( i < a_restricted_solutions.size )
|
for ( i = 0; i < a_restricted_solutions.size; i++ )
|
||||||
{
|
{
|
||||||
b_is_restricted_solution = 1;
|
b_is_restricted_solution = 1;
|
||||||
restricted_solution = [];
|
restricted_solution = [];
|
||||||
j = 1;
|
|
||||||
while ( j < 4 )
|
for ( j = 1; j < 4; j++ )
|
||||||
{
|
{
|
||||||
restricted_solution[j] = get_split_number( j, a_restricted_solutions[i] );
|
restricted_solution[j] = get_split_number( j, a_restricted_solutions[i] );
|
||||||
|
|
||||||
if ( restricted_solution[j] != level.a_nixie_tube_solution[j] )
|
if ( restricted_solution[j] != level.a_nixie_tube_solution[j] )
|
||||||
{
|
|
||||||
b_is_restricted_solution = 0;
|
b_is_restricted_solution = 0;
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
|
||||||
if ( b_is_restricted_solution )
|
if ( b_is_restricted_solution )
|
||||||
{
|
{
|
||||||
n_index = randomint( a_numbers.size );
|
n_index = randomint( a_numbers.size );
|
||||||
level.a_nixie_tube_solution[3] = a_numbers[n_index];
|
level.a_nixie_tube_solution[3] = a_numbers[n_index];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_notifier()
|
nixie_tube_notifier()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.a_important_codes ) )
|
if ( !isdefined( level.a_important_codes ) )
|
||||||
{
|
{
|
||||||
level.a_important_codes = [];
|
level.a_important_codes = [];
|
||||||
level.a_important_codes[level.a_important_codes.size] = 115;
|
level.a_important_codes[level.a_important_codes.size] = 115;
|
||||||
level.a_important_codes[level.a_important_codes.size] = 935;
|
level.a_important_codes[level.a_important_codes.size] = 935;
|
||||||
}
|
}
|
||||||
|
|
||||||
level thread nixie_115();
|
level thread nixie_115();
|
||||||
level thread nixie_935();
|
level thread nixie_935();
|
||||||
while ( !isDefined( level.a_nixie_tube_code ) || !isDefined( level.a_nixie_tube_code[ 3 ] ) )
|
|
||||||
{
|
while ( !isdefined( level.a_nixie_tube_code ) || !isdefined( level.a_nixie_tube_code[3] ) )
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
codes_to_check = array_copy( level.a_important_codes );
|
codes_to_check = array_copy( level.a_important_codes );
|
||||||
non_array_value = ( level.a_nixie_tube_code[ 1 ] * 100 ) + ( level.a_nixie_tube_code[ 2 ] * 10 ) + level.a_nixie_tube_code[ 3 ];
|
non_array_value = level.a_nixie_tube_code[1] * 100 + level.a_nixie_tube_code[2] * 10 + level.a_nixie_tube_code[3];
|
||||||
_a240 = codes_to_check;
|
|
||||||
_k240 = getFirstArrayKey( _a240 );
|
foreach ( code in codes_to_check )
|
||||||
while ( isDefined( _k240 ) )
|
|
||||||
{
|
{
|
||||||
code = _a240[ _k240 ];
|
|
||||||
if ( code == non_array_value )
|
if ( code == non_array_value )
|
||||||
{
|
|
||||||
level notify( "nixie_" + code );
|
level notify( "nixie_" + code );
|
||||||
}
|
}
|
||||||
_k240 = getNextArrayKey( _a240, _k240 );
|
|
||||||
}
|
|
||||||
wait 2;
|
wait 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_add_code( a, b, c )
|
nixie_tube_add_code( a, b, c )
|
||||||
{
|
{
|
||||||
if ( isDefined( b ) )
|
if ( isdefined( b ) )
|
||||||
{
|
non_array_value = a * 100 + b * 10 + c;
|
||||||
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
non_array_value = a;
|
non_array_value = a;
|
||||||
}
|
|
||||||
level.a_important_codes[level.a_important_codes.size] = non_array_value;
|
level.a_important_codes[level.a_important_codes.size] = non_array_value;
|
||||||
return non_array_value;
|
return non_array_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_remove_code( a, b, c )
|
nixie_tube_remove_code( a, b, c )
|
||||||
{
|
{
|
||||||
if ( isDefined( b ) )
|
if ( isdefined( b ) )
|
||||||
{
|
non_array_value = a * 100 + b * 10 + c;
|
||||||
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
non_array_value = a;
|
non_array_value = a;
|
||||||
}
|
|
||||||
arrayremovevalue( level.a_important_codes, non_array_value );
|
arrayremovevalue( level.a_important_codes, non_array_value );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,189 +206,177 @@ sndnixietubecountdown( num )
|
|||||||
{
|
{
|
||||||
level endon( "sndEndNixieCount" );
|
level endon( "sndEndNixieCount" );
|
||||||
ent = getent( "nixie_tube_2", "targetname" );
|
ent = getent( "nixie_tube_2", "targetname" );
|
||||||
i = num;
|
|
||||||
while ( i > 0 )
|
for ( i = num; i > 0; i-- )
|
||||||
{
|
{
|
||||||
if ( i <= 10 )
|
if ( i <= 10 )
|
||||||
{
|
|
||||||
ent playsound( "zmb_quest_nixie_count_final" );
|
ent playsound( "zmb_quest_nixie_count_final" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
ent playsound( "zmb_quest_nixie_count" );
|
ent playsound( "zmb_quest_nixie_count" );
|
||||||
}
|
|
||||||
wait 1;
|
|
||||||
i--;
|
|
||||||
|
|
||||||
|
wait 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ent playsound( "zmb_quest_nixie_fail" );
|
ent playsound( "zmb_quest_nixie_fail" );
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_thread( n_tube_index, b_force_reset )
|
nixie_tube_thread( n_tube_index, b_force_reset )
|
||||||
{
|
{
|
||||||
if ( !isDefined( b_force_reset ) )
|
if ( !isdefined( b_force_reset ) )
|
||||||
{
|
|
||||||
b_force_reset = 1;
|
b_force_reset = 1;
|
||||||
}
|
|
||||||
level endon( "kill_nixie_input" );
|
level endon( "kill_nixie_input" );
|
||||||
|
|
||||||
if ( b_force_reset )
|
if ( b_force_reset )
|
||||||
{
|
|
||||||
level.a_nixie_tube_code[n_tube_index] = 0;
|
level.a_nixie_tube_code[n_tube_index] = 0;
|
||||||
}
|
|
||||||
self thread afterlife_interact_object_think();
|
self thread afterlife_interact_object_think();
|
||||||
i = 0;
|
|
||||||
while ( i < 10 )
|
for ( i = 0; i < 10; i++ )
|
||||||
{
|
{
|
||||||
self hidepart( "J_off" );
|
self hidepart( "J_off" );
|
||||||
self hidepart( "J_" + i );
|
self hidepart( "J_" + i );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
|
|
||||||
while ( !flag( "nixie_puzzle_solved" ) )
|
while ( !flag( "nixie_puzzle_solved" ) )
|
||||||
{
|
{
|
||||||
level waittill( "nixie_tube_trigger_" + n_tube_index );
|
level waittill( "nixie_tube_trigger_" + n_tube_index );
|
||||||
while ( flag( "nixie_puzzle_solved" ) )
|
|
||||||
{
|
if ( flag( "nixie_puzzle_solved" ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
i = 0;
|
for ( i = 0; i < 10; i++ )
|
||||||
while ( i < 10 )
|
|
||||||
{
|
|
||||||
self hidepart( "J_" + i );
|
self hidepart( "J_" + i );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
level.a_nixie_tube_code[n_tube_index]++;
|
level.a_nixie_tube_code[n_tube_index]++;
|
||||||
self playsound( "zmb_quest_nixie_count" );
|
self playsound( "zmb_quest_nixie_count" );
|
||||||
|
|
||||||
if ( level.a_nixie_tube_code[n_tube_index] > 9 )
|
if ( level.a_nixie_tube_code[n_tube_index] > 9 )
|
||||||
{
|
|
||||||
level.a_nixie_tube_code[n_tube_index] = 0;
|
level.a_nixie_tube_code[n_tube_index] = 0;
|
||||||
}
|
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
self notify( "afterlife_interact_reset" );
|
self notify( "afterlife_interact_reset" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_win_effects( n_tube_index, n_blink_rate )
|
nixie_tube_win_effects( n_tube_index, n_blink_rate )
|
||||||
{
|
{
|
||||||
if ( !isDefined( n_blink_rate ) )
|
if ( !isdefined( n_blink_rate ) )
|
||||||
{
|
n_blink_rate = 0.25;
|
||||||
n_blink_rate = 0,25;
|
|
||||||
}
|
|
||||||
while ( !flag( "nixie_countdown_started" ) )
|
while ( !flag( "nixie_countdown_started" ) )
|
||||||
{
|
{
|
||||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait n_blink_rate;
|
wait( n_blink_rate );
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait n_blink_rate;
|
wait( n_blink_rate );
|
||||||
}
|
}
|
||||||
|
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 )
|
nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 )
|
||||||
{
|
{
|
||||||
if ( !isDefined( goal_num_1 ) )
|
if ( !isdefined( goal_num_1 ) )
|
||||||
{
|
|
||||||
goal_num_1 = 0;
|
goal_num_1 = 0;
|
||||||
}
|
|
||||||
if ( !isDefined( goal_num_2 ) )
|
if ( !isdefined( goal_num_2 ) )
|
||||||
{
|
|
||||||
goal_num_2 = 0;
|
goal_num_2 = 0;
|
||||||
}
|
|
||||||
if ( !isDefined( goal_num_3 ) )
|
if ( !isdefined( goal_num_3 ) )
|
||||||
{
|
|
||||||
goal_num_3 = 0;
|
goal_num_3 = 0;
|
||||||
}
|
|
||||||
a_nixie_tube = [];
|
a_nixie_tube = [];
|
||||||
a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" );
|
a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" );
|
||||||
a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" );
|
a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" );
|
||||||
a_nixie_tube[3] = getent( "nixie_tube_3", "targetname" );
|
a_nixie_tube[3] = getent( "nixie_tube_3", "targetname" );
|
||||||
n_off_tube = 1;
|
n_off_tube = 1;
|
||||||
start_time = 0;
|
|
||||||
while ( start_time < 3 )
|
for ( start_time = 0; start_time < 3; start_time += 0.15 )
|
||||||
{
|
{
|
||||||
i = 1;
|
for ( i = 1; i < 3 + 1; i++ )
|
||||||
while ( i < ( 3 + 1 ) )
|
|
||||||
{
|
{
|
||||||
if ( i == n_off_tube )
|
if ( i == n_off_tube )
|
||||||
{
|
{
|
||||||
a_nixie_tube[i] hidepart( "J_" + level.a_nixie_tube_code[i] );
|
a_nixie_tube[i] hidepart( "J_" + level.a_nixie_tube_code[i] );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
a_nixie_tube[i] showpart( "J_" + level.a_nixie_tube_code[i] );
|
a_nixie_tube[i] showpart( "J_" + level.a_nixie_tube_code[i] );
|
||||||
if ( i == 1 || n_off_tube == 2 && i == 3 && n_off_tube == 1 )
|
|
||||||
{
|
if ( i == 1 && n_off_tube == 2 || i == 3 && n_off_tube == 1 )
|
||||||
a_nixie_tube[i] playsound( "zmb_quest_nixie_count" );
|
a_nixie_tube[i] playsound( "zmb_quest_nixie_count" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
n_off_tube++;
|
n_off_tube++;
|
||||||
|
|
||||||
if ( n_off_tube > 3 )
|
if ( n_off_tube > 3 )
|
||||||
{
|
|
||||||
n_off_tube = 1;
|
n_off_tube = 1;
|
||||||
}
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
start_time += 0,15;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_nixie_tube[1] showpart( "J_" + level.a_nixie_tube_code[1] );
|
a_nixie_tube[1] showpart( "J_" + level.a_nixie_tube_code[1] );
|
||||||
a_nixie_tube[2] showpart( "J_" + level.a_nixie_tube_code[2] );
|
a_nixie_tube[2] showpart( "J_" + level.a_nixie_tube_code[2] );
|
||||||
a_nixie_tube[3] showpart( "J_" + level.a_nixie_tube_code[3] );
|
a_nixie_tube[3] showpart( "J_" + level.a_nixie_tube_code[3] );
|
||||||
while ( level.a_nixie_tube_code[ 1 ] != goal_num_1 || level.a_nixie_tube_code[ 2 ] != goal_num_2 && level.a_nixie_tube_code[ 3 ] != goal_num_3 )
|
|
||||||
|
while ( level.a_nixie_tube_code[1] != goal_num_1 || level.a_nixie_tube_code[2] != goal_num_2 || level.a_nixie_tube_code[3] != goal_num_3 )
|
||||||
{
|
{
|
||||||
n_current_tube = 1;
|
n_current_tube = 1;
|
||||||
n_goal = goal_num_1;
|
n_goal = goal_num_1;
|
||||||
|
|
||||||
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_1 )
|
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_1 )
|
||||||
{
|
{
|
||||||
n_current_tube = 2;
|
n_current_tube = 2;
|
||||||
n_goal = goal_num_2;
|
n_goal = goal_num_2;
|
||||||
|
|
||||||
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_2 )
|
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_2 )
|
||||||
{
|
{
|
||||||
n_current_tube = 3;
|
n_current_tube = 3;
|
||||||
n_goal = goal_num_3;
|
n_goal = goal_num_3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j = 0;
|
|
||||||
while ( j < 10 )
|
for ( j = 0; j < 10; j++ )
|
||||||
{
|
{
|
||||||
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||||
level.a_nixie_tube_code[n_current_tube]--;
|
level.a_nixie_tube_code[n_current_tube]--;
|
||||||
|
|
||||||
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
||||||
{
|
|
||||||
level.a_nixie_tube_code[n_current_tube] = 9;
|
level.a_nixie_tube_code[n_current_tube] = 9;
|
||||||
}
|
|
||||||
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||||
if ( ( j % 3 ) == 0 )
|
|
||||||
{
|
if ( j % 3 == 0 )
|
||||||
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
j = 0;
|
j = 0;
|
||||||
|
|
||||||
while ( level.a_nixie_tube_code[n_current_tube] != n_goal )
|
while ( level.a_nixie_tube_code[n_current_tube] != n_goal )
|
||||||
{
|
{
|
||||||
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||||
level.a_nixie_tube_code[n_current_tube]--;
|
level.a_nixie_tube_code[n_current_tube]--;
|
||||||
|
|
||||||
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
||||||
{
|
|
||||||
level.a_nixie_tube_code[n_current_tube] = 9;
|
level.a_nixie_tube_code[n_current_tube] = 9;
|
||||||
}
|
|
||||||
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||||
if ( ( j % 3 ) == 0 )
|
|
||||||
{
|
if ( j % 3 == 0 )
|
||||||
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
||||||
}
|
|
||||||
j++;
|
j++;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a_nixie_tube[2] playsound( "zmb_quest_nixie_count_final" );
|
a_nixie_tube[2] playsound( "zmb_quest_nixie_count_final" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
@ -417,33 +389,30 @@ nixie_tube_thread_play_countdown( n_tube_index, n_countdown )
|
|||||||
/#
|
/#
|
||||||
iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[n_tube_index] );
|
iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[n_tube_index] );
|
||||||
#/
|
#/
|
||||||
i = 0;
|
for ( i = 0; i < 10; i++ )
|
||||||
while ( i < 10 )
|
|
||||||
{
|
|
||||||
self hidepart( "J_" + i );
|
self hidepart( "J_" + i );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
|
|
||||||
while ( n_countdown )
|
while ( n_countdown )
|
||||||
{
|
{
|
||||||
n_countdown--;
|
n_countdown--;
|
||||||
|
|
||||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown );
|
level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown );
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait n_tick_duration;
|
wait( n_tick_duration );
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "nixie_countdown_expired" );
|
flag_set( "nixie_countdown_expired" );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
flag_clear( "nixie_countdown_expired" );
|
flag_clear( "nixie_countdown_expired" );
|
||||||
}
|
}
|
||||||
|
|
||||||
get_split_number( n_tube_index, n_countdown )
|
get_split_number( n_tube_index, n_countdown )
|
||||||
{
|
{
|
||||||
if ( n_tube_index == 1 )
|
if ( n_tube_index == 1 )
|
||||||
{
|
return ( n_countdown - n_countdown % 100 ) / 100;
|
||||||
return ( n_countdown - ( n_countdown % 100 ) ) / 100;
|
|
||||||
}
|
|
||||||
if ( n_tube_index == 2 )
|
if ( n_tube_index == 2 )
|
||||||
{
|
{
|
||||||
n_temp = n_countdown % 100;
|
n_temp = n_countdown % 100;
|
||||||
@ -451,34 +420,31 @@ get_split_number( n_tube_index, n_countdown )
|
|||||||
n_temp /= 10;
|
n_temp /= 10;
|
||||||
return n_temp;
|
return n_temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( n_tube_index == 3 )
|
if ( n_tube_index == 3 )
|
||||||
{
|
|
||||||
return n_countdown % 10;
|
return n_countdown % 10;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
nixie_tube_elevator_drops()
|
nixie_tube_elevator_drops()
|
||||||
{
|
{
|
||||||
n_elevator_drop_duration = 3;
|
n_elevator_drop_duration = 3;
|
||||||
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 );
|
maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 );
|
||||||
exploder( 3400 );
|
exploder( 3400 );
|
||||||
exploder( 3500 );
|
exploder( 3500 );
|
||||||
exploder( 3600 );
|
exploder( 3600 );
|
||||||
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
||||||
a_m_script_models = [];
|
a_m_script_models = [];
|
||||||
a_m_script_models = getentarray( "script_model", "classname" );
|
a_m_script_models = getentarray( "script_model", "classname" );
|
||||||
i = 0;
|
|
||||||
while ( i < a_m_script_models.size )
|
for ( i = 0; i < a_m_script_models.size; i++ )
|
||||||
{
|
{
|
||||||
if ( a_m_script_models[i].model == "veh_t6_dlc_zombie_part_rigging" )
|
if ( a_m_script_models[i].model == "veh_t6_dlc_zombie_part_rigging" )
|
||||||
{
|
|
||||||
playfxontag( level._effect["elevator_fall"], a_m_script_models[i], "tag_origin" );
|
playfxontag( level._effect["elevator_fall"], a_m_script_models[i], "tag_origin" );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
||||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), n_elevator_drop_duration, 1, 1 );
|
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, -1 ), 768.0 ), n_elevator_drop_duration, 1, 1 );
|
||||||
wait n_elevator_drop_duration;
|
wait( n_elevator_drop_duration );
|
||||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||||
t_elevator_door trigger_on();
|
t_elevator_door trigger_on();
|
||||||
}
|
}
|
||||||
@ -486,52 +452,57 @@ nixie_tube_elevator_drops()
|
|||||||
nixie_tube_elevator_rises()
|
nixie_tube_elevator_rises()
|
||||||
{
|
{
|
||||||
elevator_rise_duration = 3;
|
elevator_rise_duration = 3;
|
||||||
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 );
|
maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 );
|
||||||
stop_exploder( 3400 );
|
stop_exploder( 3400 );
|
||||||
stop_exploder( 3500 );
|
stop_exploder( 3500 );
|
||||||
stop_exploder( 3600 );
|
stop_exploder( 3600 );
|
||||||
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
||||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), elevator_rise_duration, 1, 1 );
|
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, 1 ), 768.0 ), elevator_rise_duration, 1, 1 );
|
||||||
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
||||||
wait elevator_rise_duration;
|
wait( elevator_rise_duration );
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_elevator_door()
|
nixie_tube_elevator_door()
|
||||||
{
|
{
|
||||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||||
t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" );
|
t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" );
|
||||||
|
|
||||||
t_elevator_door waittill( "trigger", e_triggerer );
|
t_elevator_door waittill( "trigger", e_triggerer );
|
||||||
|
|
||||||
m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" );
|
m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" );
|
||||||
m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" );
|
m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" );
|
||||||
m_elevator_bottom_gate_l rotateyaw( -90, 0,5 );
|
m_elevator_bottom_gate_l rotateyaw( -90, 0.5 );
|
||||||
m_elevator_bottom_gate_r rotateyaw( 90, 0,5 );
|
m_elevator_bottom_gate_r rotateyaw( 90, 0.5 );
|
||||||
elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" );
|
elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" );
|
||||||
elevator_door_playerclip delete();
|
elevator_door_playerclip delete();
|
||||||
flag_set( "nixie_puzzle_completed" );
|
flag_set( "nixie_puzzle_completed" );
|
||||||
level notify( "sndEndNixieCount" );
|
level notify( "sndEndNixieCount" );
|
||||||
level notify( "end_nixie_countdown" );
|
level notify( "end_nixie_countdown" );
|
||||||
flag_set( "nixie_countdown_expired" );
|
flag_set( "nixie_countdown_expired" );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
flag_clear( "nixie_countdown_expired" );
|
flag_clear( "nixie_countdown_expired" );
|
||||||
t_elevator_door delete();
|
t_elevator_door delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_tube_win_effects_ee( n_tube_index )
|
nixie_tube_win_effects_ee( n_tube_index )
|
||||||
{
|
{
|
||||||
n_blink_rate = 0,25;
|
n_blink_rate = 0.25;
|
||||||
|
|
||||||
while ( !flag( "nixie_ee_flashing" ) )
|
while ( !flag( "nixie_ee_flashing" ) )
|
||||||
{
|
{
|
||||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait n_blink_rate;
|
wait( n_blink_rate );
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
wait n_blink_rate;
|
wait( n_blink_rate );
|
||||||
}
|
}
|
||||||
|
|
||||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_115()
|
nixie_115()
|
||||||
{
|
{
|
||||||
level waittill( "nixie_" + 115 );
|
level waittill( "nixie_" + 115 );
|
||||||
|
|
||||||
level notify( "kill_nixie_input" );
|
level notify( "kill_nixie_input" );
|
||||||
flag_set( "nixie_puzzle_solved" );
|
flag_set( "nixie_puzzle_solved" );
|
||||||
flag_clear( "nixie_ee_flashing" );
|
flag_clear( "nixie_ee_flashing" );
|
||||||
@ -547,12 +518,14 @@ nixie_115_audio()
|
|||||||
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
||||||
n_random_line = randomint( 3 );
|
n_random_line = randomint( 3 );
|
||||||
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
||||||
|
|
||||||
m_nixie_tube waittill( "scary_voice" );
|
m_nixie_tube waittill( "scary_voice" );
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_935()
|
nixie_935()
|
||||||
{
|
{
|
||||||
level waittill( "nixie_" + 935 );
|
level waittill( "nixie_" + 935 );
|
||||||
|
|
||||||
level notify( "kill_nixie_input" );
|
level notify( "kill_nixie_input" );
|
||||||
flag_set( "nixie_puzzle_solved" );
|
flag_set( "nixie_puzzle_solved" );
|
||||||
flag_clear( "nixie_ee_flashing" );
|
flag_clear( "nixie_ee_flashing" );
|
||||||
@ -565,7 +538,7 @@ nixie_935()
|
|||||||
|
|
||||||
nixie_935_audio()
|
nixie_935_audio()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.music_override ) && !level.music_override )
|
if ( !( isdefined( level.music_override ) && level.music_override ) )
|
||||||
{
|
{
|
||||||
level.music_override = 1;
|
level.music_override = 1;
|
||||||
playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) );
|
playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) );
|
||||||
@ -577,18 +550,17 @@ nixie_935_audio()
|
|||||||
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
||||||
n_random_line = randomint( 3 );
|
n_random_line = randomint( 3 );
|
||||||
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
||||||
|
|
||||||
m_nixie_tube waittill( "scary_voice" );
|
m_nixie_tube waittill( "scary_voice" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nixie_reset_control( b_reset_control )
|
nixie_reset_control( b_reset_control )
|
||||||
{
|
{
|
||||||
i = 1;
|
for ( i = 1; i < 4; i++ )
|
||||||
while ( i < 4 )
|
|
||||||
{
|
{
|
||||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||||
m_nixie_tube thread afterlife_interact_object_think();
|
m_nixie_tube thread afterlife_interact_object_think();
|
||||||
m_nixie_tube thread nixie_tube_thread( i, b_reset_control );
|
m_nixie_tube thread nixie_tube_thread( i, b_reset_control );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
#include maps/mp/gametypes_zm/_hud;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/_hud_util;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zm_alcatraz_utility;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_sidequests;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_craftables;
|
#include maps\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\_vehicle;
|
||||||
#include maps/mp/zombies/_zm_afterlife;
|
#include maps\mp\zombies\_zm_afterlife;
|
||||||
#include maps/_vehicle;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/_utility;
|
#include maps\mp\zombies\_zm_craftables;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_sidequests;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zm_alcatraz_utility;
|
||||||
|
#include maps\mp\gametypes_zm\_hud_util;
|
||||||
|
#include maps\mp\gametypes_zm\_hud;
|
||||||
|
|
||||||
vo_see_map_trigger()
|
vo_see_map_trigger()
|
||||||
{
|
{
|
||||||
@ -16,10 +18,13 @@ vo_see_map_trigger()
|
|||||||
e_triggerer = undefined;
|
e_triggerer = undefined;
|
||||||
t_map_vo_trigger = getent( "map_vo_trigger", "targetname" );
|
t_map_vo_trigger = getent( "map_vo_trigger", "targetname" );
|
||||||
b_has_line_played = 0;
|
b_has_line_played = 0;
|
||||||
|
|
||||||
while ( !b_has_line_played )
|
while ( !b_has_line_played )
|
||||||
{
|
{
|
||||||
t_map_vo_trigger waittill( "trigger", e_triggerer );
|
t_map_vo_trigger waittill( "trigger", e_triggerer );
|
||||||
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
if ( !e_triggerer.dontspeak && !flag( "story_vo_playing" ) )
|
if ( !e_triggerer.dontspeak && !flag( "story_vo_playing" ) )
|
||||||
{
|
{
|
||||||
flag_set( "story_vo_playing" );
|
flag_set( "story_vo_playing" );
|
||||||
@ -27,10 +32,10 @@ vo_see_map_trigger()
|
|||||||
wait 5;
|
wait 5;
|
||||||
arrayremovevalue( players, e_triggerer );
|
arrayremovevalue( players, e_triggerer );
|
||||||
closest_other_player = getclosest( e_triggerer.origin, players );
|
closest_other_player = getclosest( e_triggerer.origin, players );
|
||||||
if ( isDefined( closest_other_player ) )
|
|
||||||
{
|
if ( isdefined( closest_other_player ) )
|
||||||
closest_other_player do_player_general_vox( "quest", "response_map", undefined, 100 );
|
closest_other_player do_player_general_vox( "quest", "response_map", undefined, 100 );
|
||||||
}
|
|
||||||
b_has_line_played = 1;
|
b_has_line_played = 1;
|
||||||
wait 5;
|
wait 5;
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
@ -46,31 +51,30 @@ opening_vo()
|
|||||||
players = getplayers();
|
players = getplayers();
|
||||||
vo_play_four_part_conversation( level.four_part_convos["start_1_oh_shit_" + randomintrange( 1, 3 )] );
|
vo_play_four_part_conversation( level.four_part_convos["start_1_oh_shit_" + randomintrange( 1, 3 )] );
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( players.size == 1 )
|
if ( players.size == 1 )
|
||||||
{
|
|
||||||
players[0] vo_play_soliloquy( level.soliloquy_convos["solo_intro_" + players[0].character_name] );
|
players[0] vo_play_soliloquy( level.soliloquy_convos["solo_intro_" + players[0].character_name] );
|
||||||
}
|
else if ( is_player_character_present( "Arlington" ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( is_player_character_present( "Arlington" ) )
|
|
||||||
{
|
|
||||||
vo_play_four_part_conversation( level.four_part_convos["intro_plr_3"] );
|
vo_play_four_part_conversation( level.four_part_convos["intro_plr_3"] );
|
||||||
}
|
|
||||||
}
|
|
||||||
level thread vo_see_map_trigger();
|
level thread vo_see_map_trigger();
|
||||||
wait 10;
|
wait 10;
|
||||||
vo_play_four_part_conversation( level.four_part_convos["during_1_oh_shit"] );
|
vo_play_four_part_conversation( level.four_part_convos["during_1_oh_shit"] );
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
wait 5;
|
wait 5;
|
||||||
vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit_" + randomintrange( 1, 3 )] );
|
vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit_" + randomintrange( 1, 3 )] );
|
||||||
wait 4;
|
wait 4;
|
||||||
vo_play_four_part_conversation( level.four_part_convos["start_3_oh_shit"] );
|
vo_play_four_part_conversation( level.four_part_convos["start_3_oh_shit"] );
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
wait 3;
|
wait 3;
|
||||||
if ( ( get_players_touching( "zone_library" ) + get_players_touching( "zone_start" ) ) == 4 )
|
|
||||||
{
|
if ( get_players_touching( "zone_library" ) + get_players_touching( "zone_start" ) == 4 )
|
||||||
vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit"] );
|
vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit"] );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,42 +309,40 @@ vo_bridge_soliloquy()
|
|||||||
if ( level.n_quest_iteration_count < 3 )
|
if ( level.n_quest_iteration_count < 3 )
|
||||||
{
|
{
|
||||||
convo = level.soliloquy_convos["purgatory_" + self.character_name + "_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 3 )];
|
convo = level.soliloquy_convos["purgatory_" + self.character_name + "_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 3 )];
|
||||||
if ( isDefined( convo ) )
|
|
||||||
{
|
if ( isdefined( convo ) )
|
||||||
self vo_play_soliloquy( convo );
|
self vo_play_soliloquy( convo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
vo_bridge_four_part_convo()
|
vo_bridge_four_part_convo()
|
||||||
{
|
{
|
||||||
if ( level.n_quest_iteration_count < 3 )
|
if ( level.n_quest_iteration_count < 3 )
|
||||||
{
|
{
|
||||||
convo = level.four_part_convos["bridge_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 5 )];
|
convo = level.four_part_convos["bridge_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 5 )];
|
||||||
if ( isDefined( convo ) )
|
|
||||||
{
|
if ( isdefined( convo ) )
|
||||||
vo_play_four_part_conversation( convo );
|
vo_play_four_part_conversation( convo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
vo_play_soliloquy( convo )
|
vo_play_soliloquy( convo )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
if ( !isDefined( convo ) )
|
|
||||||
{
|
if ( !isdefined( convo ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !flag( "story_vo_playing" ) )
|
if ( !flag( "story_vo_playing" ) )
|
||||||
{
|
{
|
||||||
flag_set( "story_vo_playing" );
|
flag_set( "story_vo_playing" );
|
||||||
self thread vo_play_soliloquy_disconnect_listener();
|
self thread vo_play_soliloquy_disconnect_listener();
|
||||||
self.dontspeak = 1;
|
self.dontspeak = 1;
|
||||||
self setclientfieldtoplayer( "isspeaking", 1 );
|
self setclientfieldtoplayer( "isspeaking", 1 );
|
||||||
i = 0;
|
|
||||||
while ( i < convo.size )
|
for ( i = 0; i < convo.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.afterlife ) && self.afterlife )
|
if ( isdefined( self.afterlife ) && self.afterlife )
|
||||||
{
|
{
|
||||||
self.dontspeak = 0;
|
self.dontspeak = 0;
|
||||||
self setclientfieldtoplayer( "isspeaking", 0 );
|
self setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
@ -351,11 +353,13 @@ vo_play_soliloquy( convo )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
self playsoundwithnotify( convo[i], "sound_done" + convo[i] );
|
self playsoundwithnotify( convo[i], "sound_done" + convo[i] );
|
||||||
|
|
||||||
self waittill( "sound_done" + convo[i] );
|
self waittill( "sound_done" + convo[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.dontspeak = 0;
|
self.dontspeak = 0;
|
||||||
self setclientfieldtoplayer( "isspeaking", 0 );
|
self setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
@ -366,17 +370,19 @@ vo_play_soliloquy( convo )
|
|||||||
vo_play_soliloquy_disconnect_listener()
|
vo_play_soliloquy_disconnect_listener()
|
||||||
{
|
{
|
||||||
self endon( "soliloquy_vo_done" );
|
self endon( "soliloquy_vo_done" );
|
||||||
|
|
||||||
self waittill( "disconnect" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vo_play_four_part_conversation( convo )
|
vo_play_four_part_conversation( convo )
|
||||||
{
|
{
|
||||||
if ( !isDefined( convo ) )
|
if ( !isdefined( convo ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
if ( players.size == 4 && !flag( "story_vo_playing" ) )
|
if ( players.size == 4 && !flag( "story_vo_playing" ) )
|
||||||
{
|
{
|
||||||
flag_set( "story_vo_playing" );
|
flag_set( "story_vo_playing" );
|
||||||
@ -388,133 +394,109 @@ vo_play_four_part_conversation( convo )
|
|||||||
e_sal = undefined;
|
e_sal = undefined;
|
||||||
e_billy = undefined;
|
e_billy = undefined;
|
||||||
e_finn = undefined;
|
e_finn = undefined;
|
||||||
_a513 = players;
|
|
||||||
_k513 = getFirstArrayKey( _a513 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k513 ) )
|
|
||||||
{
|
{
|
||||||
player = _a513[ _k513 ];
|
if ( isdefined( player ) )
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
switch ( player.character_name )
|
switch ( player.character_name )
|
||||||
{
|
{
|
||||||
case "Arlington":
|
case "Arlington":
|
||||||
e_arlington = player;
|
e_arlington = player;
|
||||||
break;
|
continue;
|
||||||
break;
|
|
||||||
case "Sal":
|
case "Sal":
|
||||||
e_sal = player;
|
e_sal = player;
|
||||||
break;
|
continue;
|
||||||
break;
|
|
||||||
case "Billy":
|
case "Billy":
|
||||||
e_billy = player;
|
e_billy = player;
|
||||||
break;
|
continue;
|
||||||
break;
|
|
||||||
case "Finn":
|
case "Finn":
|
||||||
e_finn = player;
|
e_finn = player;
|
||||||
break;
|
continue;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k513 = getNextArrayKey( _a513, _k513 );
|
|
||||||
}
|
}
|
||||||
if ( isDefined( e_arlington ) && isDefined( e_sal ) || !isDefined( e_billy ) && !isDefined( e_finn ) )
|
|
||||||
{
|
if ( !isdefined( e_arlington ) || !isdefined( e_sal ) || !isdefined( e_billy ) || !isdefined( e_finn ) )
|
||||||
return;
|
return;
|
||||||
}
|
else
|
||||||
else _a542 = players;
|
|
||||||
_k542 = getFirstArrayKey( _a542 );
|
|
||||||
while ( isDefined( _k542 ) )
|
|
||||||
{
|
{
|
||||||
player = _a542[ _k542 ];
|
foreach ( player in players )
|
||||||
if ( isDefined( player ) )
|
{
|
||||||
|
if ( isdefined( player ) )
|
||||||
{
|
{
|
||||||
player.dontspeak = 1;
|
player.dontspeak = 1;
|
||||||
player setclientfieldtoplayer( "isspeaking", 1 );
|
player setclientfieldtoplayer( "isspeaking", 1 );
|
||||||
}
|
}
|
||||||
_k542 = getNextArrayKey( _a542, _k542 );
|
|
||||||
}
|
}
|
||||||
i = 0;
|
}
|
||||||
while ( i < convo.size )
|
|
||||||
|
for ( i = 0; i < convo.size; i++ )
|
||||||
{
|
{
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
if ( players.size != 4 )
|
if ( players.size != 4 )
|
||||||
{
|
{
|
||||||
_a557 = players;
|
foreach ( player in players )
|
||||||
_k557 = getFirstArrayKey( _a557 );
|
|
||||||
while ( isDefined( _k557 ) )
|
|
||||||
{
|
{
|
||||||
player = _a557[ _k557 ];
|
if ( isdefined( player ) )
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
player.dontspeak = 0;
|
player.dontspeak = 0;
|
||||||
player setclientfieldtoplayer( "isspeaking", 0 );
|
player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
_k557 = getNextArrayKey( _a557, _k557 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( issubstr( convo[i], "plr_0" ) )
|
if ( issubstr( convo[i], "plr_0" ) )
|
||||||
{
|
|
||||||
speaking_player = e_finn;
|
speaking_player = e_finn;
|
||||||
}
|
|
||||||
else if ( issubstr( convo[i], "plr_1" ) )
|
else if ( issubstr( convo[i], "plr_1" ) )
|
||||||
{
|
|
||||||
speaking_player = e_sal;
|
speaking_player = e_sal;
|
||||||
}
|
|
||||||
else if ( issubstr( convo[i], "plr_2" ) )
|
else if ( issubstr( convo[i], "plr_2" ) )
|
||||||
{
|
|
||||||
speaking_player = e_billy;
|
speaking_player = e_billy;
|
||||||
}
|
else if ( issubstr( convo[i], "plr_3" ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( issubstr( convo[ i ], "plr_3" ) )
|
|
||||||
{
|
|
||||||
speaking_player = e_arlington;
|
speaking_player = e_arlington;
|
||||||
}
|
|
||||||
}
|
if ( isdefined( old_speaking_player ) )
|
||||||
if ( isDefined( old_speaking_player ) )
|
|
||||||
{
|
|
||||||
n_dist = distance( old_speaking_player.origin, speaking_player.origin );
|
n_dist = distance( old_speaking_player.origin, speaking_player.origin );
|
||||||
}
|
|
||||||
if ( speaking_player.afterlife || n_dist > n_max_reply_dist )
|
if ( speaking_player.afterlife || n_dist > n_max_reply_dist )
|
||||||
{
|
{
|
||||||
_a593 = players;
|
foreach ( player in players )
|
||||||
_k593 = getFirstArrayKey( _a593 );
|
|
||||||
while ( isDefined( _k593 ) )
|
|
||||||
{
|
{
|
||||||
player = _a593[ _k593 ];
|
if ( isdefined( player ) )
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
player.dontspeak = 0;
|
player.dontspeak = 0;
|
||||||
player setclientfieldtoplayer( "isspeaking", 0 );
|
player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
_k593 = getNextArrayKey( _a593, _k593 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
speaking_player playsoundwithnotify( convo[i], "sound_done" + convo[i] );
|
speaking_player playsoundwithnotify( convo[i], "sound_done" + convo[i] );
|
||||||
|
|
||||||
speaking_player waittill( "sound_done" + convo[i] );
|
speaking_player waittill( "sound_done" + convo[i] );
|
||||||
|
|
||||||
old_speaking_player = speaking_player;
|
old_speaking_player = speaking_player;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
_a613 = players;
|
|
||||||
_k613 = getFirstArrayKey( _a613 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k613 ) )
|
|
||||||
{
|
{
|
||||||
player = _a613[ _k613 ];
|
if ( isdefined( player ) )
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
player.dontspeak = 0;
|
player.dontspeak = 0;
|
||||||
player setclientfieldtoplayer( "isspeaking", 0 );
|
player setclientfieldtoplayer( "isspeaking", 0 );
|
||||||
}
|
}
|
||||||
_k613 = getNextArrayKey( _a613, _k613 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_clear( "story_vo_playing" );
|
flag_clear( "story_vo_playing" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -526,113 +508,91 @@ electric_chair_vo()
|
|||||||
e_nml_zone = getent( "zone_golden_gate_bridge", "targetname" );
|
e_nml_zone = getent( "zone_golden_gate_bridge", "targetname" );
|
||||||
n_players_on_bridge_count = get_players_touching( "zone_golden_gate_bridge" );
|
n_players_on_bridge_count = get_players_touching( "zone_golden_gate_bridge" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
if ( players.size == 4 && n_players_on_bridge_count == 4 )
|
if ( players.size == 4 && n_players_on_bridge_count == 4 )
|
||||||
{
|
{
|
||||||
if ( count_zombies_in_zone( "zone_golden_gate_bridge" ) > 0 )
|
if ( count_zombies_in_zone( "zone_golden_gate_bridge" ) > 0 )
|
||||||
{
|
|
||||||
vo_play_four_part_conversation( level.four_part_convos["chair_combat_" + randomintrange( 1, 3 )] );
|
vo_play_four_part_conversation( level.four_part_convos["chair_combat_" + randomintrange( 1, 3 )] );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
vo_play_four_part_conversation( level.four_part_convos["chair" + randomintrange( 1, 3 )] );
|
vo_play_four_part_conversation( level.four_part_convos["chair" + randomintrange( 1, 3 )] );
|
||||||
}
|
}
|
||||||
return;
|
else if ( isdefined( players[0] ) && players[0] istouching( e_nml_zone ) )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( players[ 0 ] ) && players[ 0 ] istouching( e_nml_zone ) )
|
|
||||||
{
|
{
|
||||||
character_name = players[0].character_name;
|
character_name = players[0].character_name;
|
||||||
players[0] vo_play_soliloquy( level.soliloquy_convos["electric_chair_" + character_name] );
|
players[0] vo_play_soliloquy( level.soliloquy_convos["electric_chair_" + character_name] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
escape_flight_vo()
|
escape_flight_vo()
|
||||||
{
|
{
|
||||||
e_roof_zone = getent( "zone_roof", "targetname" );
|
e_roof_zone = getent( "zone_roof", "targetname" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
player = players[randomintrange( 0, players.size )];
|
player = players[randomintrange( 0, players.size )];
|
||||||
if ( isDefined( player ) && player istouching( e_roof_zone ) )
|
|
||||||
{
|
if ( isdefined( player ) && player istouching( e_roof_zone ) )
|
||||||
player thread do_player_general_vox( "quest", "build_plane", undefined, 100 );
|
player thread do_player_general_vox( "quest", "build_plane", undefined, 100 );
|
||||||
}
|
|
||||||
flag_wait( "plane_boarded" );
|
flag_wait( "plane_boarded" );
|
||||||
|
|
||||||
if ( level.final_flight_activated )
|
if ( level.final_flight_activated )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
while ( level.characters_in_nml.size == 0 )
|
while ( level.characters_in_nml.size == 0 )
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
while ( level.characters_in_nml.size > 0 )
|
|
||||||
|
if ( level.characters_in_nml.size > 0 )
|
||||||
{
|
{
|
||||||
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a687 = players;
|
|
||||||
_k687 = getFirstArrayKey( _a687 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k687 ) )
|
|
||||||
{
|
|
||||||
player = _a687[ _k687 ];
|
|
||||||
if ( isDefined( player ) && player.character_name == character_name )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && player.character_name == character_name )
|
||||||
player thread do_player_general_vox( "quest", "plane_takeoff" );
|
player thread do_player_general_vox( "quest", "plane_takeoff" );
|
||||||
}
|
}
|
||||||
_k687 = getNextArrayKey( _a687, _k687 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_wait( "plane_departed" );
|
flag_wait( "plane_departed" );
|
||||||
wait 2;
|
wait 2;
|
||||||
while ( level.characters_in_nml.size > 0 )
|
|
||||||
|
if ( level.characters_in_nml.size > 0 )
|
||||||
{
|
{
|
||||||
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a703 = players;
|
|
||||||
_k703 = getFirstArrayKey( _a703 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k703 ) )
|
|
||||||
{
|
|
||||||
player = _a703[ _k703 ];
|
|
||||||
if ( isDefined( player ) && player.character_name == character_name )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && player.character_name == character_name )
|
||||||
player playsound( "vox_plr_" + player.characterindex + "_plane_flight_0" );
|
player playsound( "vox_plr_" + player.characterindex + "_plane_flight_0" );
|
||||||
}
|
}
|
||||||
_k703 = getNextArrayKey( _a703, _k703 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_wait( "plane_approach_bridge" );
|
flag_wait( "plane_approach_bridge" );
|
||||||
wait 3,5;
|
wait 3.5;
|
||||||
while ( level.characters_in_nml.size > 0 )
|
|
||||||
|
if ( level.characters_in_nml.size > 0 )
|
||||||
{
|
{
|
||||||
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )];
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a719 = players;
|
|
||||||
_k719 = getFirstArrayKey( _a719 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k719 ) )
|
|
||||||
{
|
|
||||||
player = _a719[ _k719 ];
|
|
||||||
if ( isDefined( player ) && player.character_name == character_name )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && player.character_name == character_name )
|
||||||
player playsound( "vox_plr_" + player.characterindex + "_plane_crash_0" );
|
player playsound( "vox_plr_" + player.characterindex + "_plane_crash_0" );
|
||||||
}
|
}
|
||||||
_k719 = getNextArrayKey( _a719, _k719 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_wait( "plane_zapped" );
|
flag_wait( "plane_zapped" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a732 = players;
|
|
||||||
_k732 = getFirstArrayKey( _a732 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k732 ) )
|
|
||||||
{
|
|
||||||
player = _a732[ _k732 ];
|
|
||||||
if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
|
||||||
player thread player_scream_thread();
|
player thread player_scream_thread();
|
||||||
}
|
}
|
||||||
_k732 = getNextArrayKey( _a732, _k732 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
player_scream_thread()
|
player_scream_thread()
|
||||||
@ -640,17 +600,13 @@ player_scream_thread()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a749 = players;
|
|
||||||
_k749 = getFirstArrayKey( _a749 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k749 ) )
|
|
||||||
{
|
|
||||||
player = _a749[ _k749 ];
|
|
||||||
if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && isinarray( level.characters_in_nml, player.character_name ) )
|
||||||
player playsoundtoplayer( "vox_plr_" + player.characterindex + "_free_fall_0", self );
|
player playsoundtoplayer( "vox_plr_" + player.characterindex + "_free_fall_0", self );
|
||||||
}
|
}
|
||||||
_k749 = getNextArrayKey( _a749, _k749 );
|
|
||||||
}
|
|
||||||
level flag_wait( "plane_crashed" );
|
level flag_wait( "plane_crashed" );
|
||||||
self stopsounds();
|
self stopsounds();
|
||||||
self.dontspeak = 0;
|
self.dontspeak = 0;
|
||||||
@ -660,9 +616,11 @@ player_scream_thread()
|
|||||||
sndhitelectrifiedpulley( str_master_key_location )
|
sndhitelectrifiedpulley( str_master_key_location )
|
||||||
{
|
{
|
||||||
self endon( "master_key_pulley_" + str_master_key_location );
|
self endon( "master_key_pulley_" + str_master_key_location );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", e_triggerer );
|
self waittill( "trigger", e_triggerer );
|
||||||
|
|
||||||
self playsound( "fly_elec_sparks_key" );
|
self playsound( "fly_elec_sparks_key" );
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
@ -670,23 +628,18 @@ sndhitelectrifiedpulley( str_master_key_location )
|
|||||||
|
|
||||||
is_player_character_present( character_name )
|
is_player_character_present( character_name )
|
||||||
{
|
{
|
||||||
if ( !isDefined( character_name ) )
|
if ( !isdefined( character_name ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
_a785 = players;
|
|
||||||
_k785 = getFirstArrayKey( _a785 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k785 ) )
|
|
||||||
{
|
{
|
||||||
player = _a785[ _k785 ];
|
if ( isdefined( player.character_name ) && player.character_name == character_name )
|
||||||
if ( isDefined( player.character_name ) && player.character_name == character_name )
|
return true;
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
_k785 = getNextArrayKey( _a785, _k785 );
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_players_touching( scr_touched_name )
|
get_players_touching( scr_touched_name )
|
||||||
@ -694,40 +647,34 @@ get_players_touching( scr_touched_name )
|
|||||||
n_touching_count = 0;
|
n_touching_count = 0;
|
||||||
e_touched = getent( scr_touched_name, "targetname" );
|
e_touched = getent( scr_touched_name, "targetname" );
|
||||||
/#
|
/#
|
||||||
assert( isDefined( e_touched ) );
|
assert( isdefined( e_touched ) );
|
||||||
#/
|
#/
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a803 = a_players;
|
|
||||||
_k803 = getFirstArrayKey( _a803 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k803 ) )
|
|
||||||
{
|
|
||||||
player = _a803[ _k803 ];
|
|
||||||
if ( isDefined( player ) && player istouching( e_touched ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( player ) && player istouching( e_touched ) )
|
||||||
n_touching_count++;
|
n_touching_count++;
|
||||||
}
|
}
|
||||||
_k803 = getNextArrayKey( _a803, _k803 );
|
|
||||||
}
|
|
||||||
return n_touching_count;
|
return n_touching_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
count_zombies_in_zone( volume )
|
count_zombies_in_zone( volume )
|
||||||
{
|
{
|
||||||
e_zone = getent( volume, "targetname" );
|
e_zone = getent( volume, "targetname" );
|
||||||
if ( !isDefined( e_zone ) )
|
|
||||||
{
|
if ( !isdefined( e_zone ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
n_zombie_count = 0;
|
n_zombie_count = 0;
|
||||||
zombies = getaispeciesarray( "axis", "all" );
|
zombies = getaispeciesarray( "axis", "all" );
|
||||||
i = 0;
|
|
||||||
while ( i < zombies.size )
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
{
|
{
|
||||||
if ( zombies[i] istouching( e_zone ) )
|
if ( zombies[i] istouching( e_zone ) )
|
||||||
{
|
|
||||||
n_zombie_count++;
|
n_zombie_count++;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return n_zombie_count;
|
return n_zombie_count;
|
||||||
}
|
}
|
||||||
|
@ -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" );
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,30 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_ai_brutus;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/animscripts/zm_death;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include maps\mp\zombies\_zm_score;
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\animscripts\zm_death;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
#include maps\mp\zombies\_zm_ai_brutus;
|
||||||
|
|
||||||
//#using_animtree( "fxanim_props" ); //uncomment when the compiler supports anim trees
|
init_fan_trap_trigs()
|
||||||
|
|
||||||
init_fan_trap_trigs() //checked matches cerberus output
|
|
||||||
{
|
{
|
||||||
trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" );
|
trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" );
|
||||||
array_thread( trap_trigs, ::fan_trap_think );
|
array_thread( trap_trigs, ::fan_trap_think );
|
||||||
init_fan_fxanim( "wardens_office" );
|
init_fan_fxanim( "wardens_office" );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_fan_trap_animtree() //checked matches cerberus output
|
init_fan_trap_animtree()
|
||||||
{
|
{
|
||||||
scriptmodelsuseanimtree( -1 );
|
scriptmodelsuseanimtree( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_fan_fxanim( str_loc ) //checked matches cerberus output
|
#using_animtree("fxanim_props");
|
||||||
|
|
||||||
|
init_fan_fxanim( str_loc )
|
||||||
{
|
{
|
||||||
e_fan = getent( "fxanim_fan_" + str_loc, "targetname" );
|
e_fan = getent( "fxanim_fan_" + str_loc, "targetname" );
|
||||||
level.fan_trap_fxanims = [];
|
level.fan_trap_fxanims = [];
|
||||||
@ -32,7 +33,7 @@ init_fan_fxanim( str_loc ) //checked matches cerberus output
|
|||||||
level.fan_trap_fxanims["fan_trap_end"] = %fxanim_zom_al_trap_fan_end_anim;
|
level.fan_trap_fxanims["fan_trap_end"] = %fxanim_zom_al_trap_fan_end_anim;
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_trap_think() //checked changed to match cerberus output
|
fan_trap_think()
|
||||||
{
|
{
|
||||||
triggers = getentarray( self.targetname, "targetname" );
|
triggers = getentarray( self.targetname, "targetname" );
|
||||||
self.cost = 1000;
|
self.cost = 1000;
|
||||||
@ -49,17 +50,17 @@ fan_trap_think() //checked changed to match cerberus output
|
|||||||
flag_wait( "activate_warden_office" );
|
flag_wait( "activate_warden_office" );
|
||||||
zapper_light_green( light_name );
|
zapper_light_green( light_name );
|
||||||
self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost );
|
self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
|
|
||||||
if ( who in_revive_trigger() )
|
if ( who in_revive_trigger() )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !isDefined( self.is_available ) )
|
if ( !isdefined( self.is_available ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.cost )
|
if ( who.score >= self.cost )
|
||||||
@ -69,26 +70,29 @@ fan_trap_think() //checked changed to match cerberus output
|
|||||||
if ( !self.has_been_used )
|
if ( !self.has_been_used )
|
||||||
{
|
{
|
||||||
self.has_been_used = 1;
|
self.has_been_used = 1;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
|
||||||
who do_player_general_vox( "general", "discover_trap" );
|
who do_player_general_vox( "general", "discover_trap" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
who do_player_general_vox( "general", "start_trap" );
|
who do_player_general_vox( "general", "start_trap" );
|
||||||
}
|
|
||||||
self.zombie_dmg_trig.in_use = 1;
|
self.zombie_dmg_trig.in_use = 1;
|
||||||
self.zombie_dmg_trig.active = 1;
|
self.zombie_dmg_trig.active = 1;
|
||||||
self playsound( "zmb_trap_activate" );
|
self playsound( "zmb_trap_activate" );
|
||||||
self thread fan_trap_move_switch( self );
|
self thread fan_trap_move_switch( self );
|
||||||
|
|
||||||
self waittill( "switch_activated" );
|
self waittill( "switch_activated" );
|
||||||
|
|
||||||
who minus_to_player_score( self.cost );
|
who minus_to_player_score( self.cost );
|
||||||
level.trapped_track["fan"] = 1;
|
level.trapped_track["fan"] = 1;
|
||||||
level notify( "trap_activated" );
|
level notify( "trap_activated" );
|
||||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
|
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
|
||||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
||||||
self.zombie_dmg_trig setvisibletoall();
|
self.zombie_dmg_trig setvisibletoall();
|
||||||
self thread activate_fan_trap();
|
self thread activate_fan_trap();
|
||||||
|
|
||||||
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
||||||
|
|
||||||
clientnotify( self.script_string + "off" );
|
clientnotify( self.script_string + "off" );
|
||||||
self.zombie_dmg_trig notify( "fan_trap_finished" );
|
self.zombie_dmg_trig notify( "fan_trap_finished" );
|
||||||
self.zombie_dmg_trig.active = 0;
|
self.zombie_dmg_trig.active = 0;
|
||||||
@ -105,7 +109,7 @@ fan_trap_think() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
activate_fan_trap() //checked changed to match cerberus output
|
activate_fan_trap()
|
||||||
{
|
{
|
||||||
self.zombie_dmg_trig thread fan_trap_damage( self );
|
self.zombie_dmg_trig thread fan_trap_damage( self );
|
||||||
e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" );
|
e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" );
|
||||||
@ -116,13 +120,16 @@ activate_fan_trap() //checked changed to match cerberus output
|
|||||||
n_idle_time = getanimlength( level.fan_trap_fxanims["fan_trap_idle"] );
|
n_idle_time = getanimlength( level.fan_trap_fxanims["fan_trap_idle"] );
|
||||||
n_end_time = getanimlength( level.fan_trap_fxanims["fan_trap_end"] );
|
n_end_time = getanimlength( level.fan_trap_fxanims["fan_trap_end"] );
|
||||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_start"], 1, 0.1, 1 );
|
e_fan setanim( level.fan_trap_fxanims["fan_trap_start"], 1, 0.1, 1 );
|
||||||
wait n_start_time;
|
wait( n_start_time );
|
||||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_idle"], 1, 0.1, 1 );
|
e_fan setanim( level.fan_trap_fxanims["fan_trap_idle"], 1, 0.1, 1 );
|
||||||
self thread fan_trap_timeout();
|
self thread fan_trap_timeout();
|
||||||
self thread fan_trap_rumble_think();
|
self thread fan_trap_rumble_think();
|
||||||
|
|
||||||
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
||||||
|
|
||||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_end"], 1, 0.1, 1 );
|
e_fan setanim( level.fan_trap_fxanims["fan_trap_end"], 1, 0.1, 1 );
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
|
|
||||||
foreach ( player in a_players )
|
foreach ( player in a_players )
|
||||||
{
|
{
|
||||||
if ( is_true( player.fan_trap_rumble ) )
|
if ( is_true( player.fan_trap_rumble ) )
|
||||||
@ -131,45 +138,45 @@ activate_fan_trap() //checked changed to match cerberus output
|
|||||||
player.fan_trap_rumble = 0;
|
player.fan_trap_rumble = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e_fan stoploopsound( 0.75 );
|
e_fan stoploopsound( 0.75 );
|
||||||
e_fan playsound( "zmb_trap_fan_end" );
|
e_fan playsound( "zmb_trap_fan_end" );
|
||||||
wait n_end_time;
|
wait( n_end_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_trap_timeout() //checked does not match cerberus output did not change
|
fan_trap_timeout()
|
||||||
{
|
{
|
||||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||||
n_duration = 0;
|
|
||||||
while ( n_duration < 25 )
|
for ( n_duration = 0; n_duration < 25; n_duration += 0.05 )
|
||||||
{
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
n_duration += 0.05;
|
|
||||||
}
|
|
||||||
self.zombie_dmg_trig notify( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig notify( "trap_finished_" + self.script_string );
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_trap_rumble_think() //checked matches cerberus output
|
fan_trap_rumble_think()
|
||||||
{
|
{
|
||||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self.rumble_trig waittill( "trigger", ent );
|
self.rumble_trig waittill( "trigger", ent );
|
||||||
|
|
||||||
if ( isplayer( ent ) )
|
if ( isplayer( ent ) )
|
||||||
{
|
{
|
||||||
if ( !is_true( ent.fan_trap_rumble ) )
|
if ( !is_true( ent.fan_trap_rumble ) )
|
||||||
{
|
|
||||||
self thread fan_trap_rumble( ent );
|
self thread fan_trap_rumble( ent );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fan_trap_rumble( player ) //checked changed to match cerberus output
|
fan_trap_rumble( player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( player istouching( self.rumble_trig ) )
|
if ( player istouching( self.rumble_trig ) )
|
||||||
{
|
{
|
||||||
@ -186,29 +193,31 @@ fan_trap_rumble( player ) //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_trap_damage( parent ) //checked partially changed to match cerberus output
|
fan_trap_damage( parent )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.custom_fan_trap_damage_func ) )
|
if ( isdefined( level.custom_fan_trap_damage_func ) )
|
||||||
{
|
{
|
||||||
self thread [[ level.custom_fan_trap_damage_func ]]( parent );
|
self thread [[ level.custom_fan_trap_damage_func ]]( parent );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self endon( "fan_trap_finished" );
|
self endon( "fan_trap_finished" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", ent );
|
self waittill( "trigger", ent );
|
||||||
|
|
||||||
if ( isplayer( ent ) )
|
if ( isplayer( ent ) )
|
||||||
{
|
|
||||||
ent thread player_fan_trap_damage();
|
ent thread player_fan_trap_damage();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( is_true( ent.is_brutus ) )
|
if ( is_true( ent.is_brutus ) )
|
||||||
{
|
{
|
||||||
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
|
ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( !isDefined( ent.marked_for_death ) )
|
|
||||||
|
if ( !isdefined( ent.marked_for_death ) )
|
||||||
{
|
{
|
||||||
ent.marked_for_death = 1;
|
ent.marked_for_death = 1;
|
||||||
ent thread zombie_fan_trap_death();
|
ent thread zombie_fan_trap_death();
|
||||||
@ -217,7 +226,7 @@ fan_trap_damage( parent ) //checked partially changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fan_trap_move_switch( parent ) //checked matches cerberus output
|
fan_trap_move_switch( parent )
|
||||||
{
|
{
|
||||||
light_name = "";
|
light_name = "";
|
||||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||||
@ -225,54 +234,57 @@ fan_trap_move_switch( parent ) //checked matches cerberus output
|
|||||||
zapper_light_red( light_name );
|
zapper_light_red( light_name );
|
||||||
tswitch rotatepitch( -180, 0.5 );
|
tswitch rotatepitch( -180, 0.5 );
|
||||||
tswitch playsound( "amb_sparks_l_b" );
|
tswitch playsound( "amb_sparks_l_b" );
|
||||||
|
|
||||||
tswitch waittill( "rotatedone" );
|
tswitch waittill( "rotatedone" );
|
||||||
|
|
||||||
self notify( "switch_activated" );
|
self notify( "switch_activated" );
|
||||||
|
|
||||||
self waittill( "available" );
|
self waittill( "available" );
|
||||||
|
|
||||||
tswitch rotatepitch( 180, 0.5 );
|
tswitch rotatepitch( 180, 0.5 );
|
||||||
zapper_light_green( light_name );
|
zapper_light_green( light_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
player_fan_trap_damage() //checked matches cerberus output
|
player_fan_trap_damage()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 )
|
|
||||||
{
|
if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 )
|
||||||
radiusdamage( self.origin, 10, self.health + 100, self.health + 100 );
|
radiusdamage( self.origin, 10, self.health + 100, self.health + 100 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self dodamage( 50, self.origin );
|
self dodamage( 50, self.origin );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
zombie_fan_trap_death() //checked matches cerberus output
|
zombie_fan_trap_death()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
if ( !isDefined( self.is_brutus ) )
|
|
||||||
|
if ( !isdefined( self.is_brutus ) )
|
||||||
{
|
{
|
||||||
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) );
|
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) );
|
||||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||||
}
|
}
|
||||||
|
|
||||||
self setclientfield( "fan_trap_blood_fx", 1 );
|
self setclientfield( "fan_trap_blood_fx", 1 );
|
||||||
self thread stop_fan_trap_blood_fx();
|
self thread stop_fan_trap_blood_fx();
|
||||||
self dodamage( self.health + 1000, self.origin );
|
self dodamage( self.health + 1000, self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_fan_trap_blood_fx() //checked matches cerberus output
|
stop_fan_trap_blood_fx()
|
||||||
{
|
{
|
||||||
wait 2;
|
wait 2.0;
|
||||||
self setclientfield( "fan_trap_blood_fx", 0 );
|
self setclientfield( "fan_trap_blood_fx", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_acid_trap_trigs() //checked matches cerberus output
|
init_acid_trap_trigs()
|
||||||
{
|
{
|
||||||
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
||||||
array_thread( trap_trigs, ::acid_trap_think );
|
array_thread( trap_trigs, ::acid_trap_think );
|
||||||
level thread acid_trap_host_migration_listener();
|
level thread acid_trap_host_migration_listener();
|
||||||
}
|
}
|
||||||
|
|
||||||
acid_trap_think() //checked changed to match cerberus output
|
acid_trap_think()
|
||||||
{
|
{
|
||||||
triggers = getentarray( self.targetname, "targetname" );
|
triggers = getentarray( self.targetname, "targetname" );
|
||||||
self.is_available = 1;
|
self.is_available = 1;
|
||||||
@ -287,17 +299,17 @@ acid_trap_think() //checked changed to match cerberus output
|
|||||||
flag_wait_any( "activate_cafeteria", "activate_infirmary" );
|
flag_wait_any( "activate_cafeteria", "activate_infirmary" );
|
||||||
zapper_light_green( light_name );
|
zapper_light_green( light_name );
|
||||||
self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost );
|
self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
|
|
||||||
if ( who in_revive_trigger() )
|
if ( who in_revive_trigger() )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !isDefined( self.is_available ) )
|
if ( !isdefined( self.is_available ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.cost )
|
if ( who.score >= self.cost )
|
||||||
@ -307,38 +319,39 @@ acid_trap_think() //checked changed to match cerberus output
|
|||||||
if ( !self.has_been_used )
|
if ( !self.has_been_used )
|
||||||
{
|
{
|
||||||
self.has_been_used = 1;
|
self.has_been_used = 1;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
|
||||||
who do_player_general_vox( "general", "discover_trap" );
|
who do_player_general_vox( "general", "discover_trap" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
who do_player_general_vox( "general", "start_trap" );
|
who do_player_general_vox( "general", "start_trap" );
|
||||||
}
|
|
||||||
self.zombie_dmg_trig.in_use = 1;
|
self.zombie_dmg_trig.in_use = 1;
|
||||||
self.zombie_dmg_trig.active = 1;
|
self.zombie_dmg_trig.active = 1;
|
||||||
self playsound( "zmb_trap_activate" );
|
self playsound( "zmb_trap_activate" );
|
||||||
self thread acid_trap_move_switch( self );
|
self thread acid_trap_move_switch( self );
|
||||||
|
|
||||||
self waittill( "switch_activated" );
|
self waittill( "switch_activated" );
|
||||||
|
|
||||||
who minus_to_player_score( self.cost );
|
who minus_to_player_score( self.cost );
|
||||||
level.trapped_track["acid"] = 1;
|
level.trapped_track["acid"] = 1;
|
||||||
level notify( "trap_activated" );
|
level notify( "trap_activated" );
|
||||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
|
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
|
||||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
||||||
self thread activate_acid_trap();
|
self thread activate_acid_trap();
|
||||||
|
|
||||||
self.zombie_dmg_trig waittill( "acid_trap_fx_done" );
|
self.zombie_dmg_trig waittill( "acid_trap_fx_done" );
|
||||||
|
|
||||||
clientnotify( self.script_string + "off" );
|
clientnotify( self.script_string + "off" );
|
||||||
if ( isDefined( self.fx_org ) )
|
|
||||||
{
|
if ( isdefined( self.fx_org ) )
|
||||||
self.fx_org delete();
|
self.fx_org delete();
|
||||||
}
|
|
||||||
if ( isDefined( self.zapper_fx_org ) )
|
if ( isdefined( self.zapper_fx_org ) )
|
||||||
{
|
|
||||||
self.zapper_fx_org delete();
|
self.zapper_fx_org delete();
|
||||||
}
|
|
||||||
if ( isDefined( self.zapper_fx_switch_org ) )
|
if ( isdefined( self.zapper_fx_switch_org ) )
|
||||||
{
|
|
||||||
self.zapper_fx_switch_org delete();
|
self.zapper_fx_switch_org delete();
|
||||||
}
|
|
||||||
self.zombie_dmg_trig notify( "acid_trap_finished" );
|
self.zombie_dmg_trig notify( "acid_trap_finished" );
|
||||||
self.zombie_dmg_trig.active = 0;
|
self.zombie_dmg_trig.active = 0;
|
||||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
|
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
|
||||||
@ -353,7 +366,7 @@ acid_trap_think() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
acid_trap_move_switch( parent ) //checked matches cerberus output
|
acid_trap_move_switch( parent )
|
||||||
{
|
{
|
||||||
light_name = "";
|
light_name = "";
|
||||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||||
@ -361,48 +374,56 @@ acid_trap_move_switch( parent ) //checked matches cerberus output
|
|||||||
zapper_light_red( light_name );
|
zapper_light_red( light_name );
|
||||||
tswitch rotatepitch( -180, 0.5 );
|
tswitch rotatepitch( -180, 0.5 );
|
||||||
tswitch playsound( "amb_sparks_l_b" );
|
tswitch playsound( "amb_sparks_l_b" );
|
||||||
|
|
||||||
tswitch waittill( "rotatedone" );
|
tswitch waittill( "rotatedone" );
|
||||||
|
|
||||||
self notify( "switch_activated" );
|
self notify( "switch_activated" );
|
||||||
|
|
||||||
self waittill( "available" );
|
self waittill( "available" );
|
||||||
|
|
||||||
tswitch rotatepitch( 180, 0.5 );
|
tswitch rotatepitch( 180, 0.5 );
|
||||||
zapper_light_green( light_name );
|
zapper_light_green( light_name );
|
||||||
}
|
}
|
||||||
|
|
||||||
activate_acid_trap() //checked changed to match cerberus output
|
activate_acid_trap()
|
||||||
{
|
{
|
||||||
clientnotify( self.target );
|
clientnotify( self.target );
|
||||||
fire_points = getstructarray( self.target, "targetname" );
|
fire_points = getstructarray( self.target, "targetname" );
|
||||||
|
|
||||||
for ( i = 0; i < fire_points.size; i++ )
|
for ( i = 0; i < fire_points.size; i++ )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
fire_points[i] thread acid_trap_fx( self );
|
fire_points[i] thread acid_trap_fx( self );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.zombie_dmg_trig thread acid_trap_damage();
|
self.zombie_dmg_trig thread acid_trap_damage();
|
||||||
}
|
}
|
||||||
|
|
||||||
acid_trap_damage() //checked partially changed to match cerberus output
|
acid_trap_damage()
|
||||||
{
|
{
|
||||||
if ( isDefined( level.custom_acid_trap_damage_func ) )
|
if ( isdefined( level.custom_acid_trap_damage_func ) )
|
||||||
{
|
{
|
||||||
self thread [[ level.custom_acid_trap_damage_func ]]();
|
self thread [[ level.custom_acid_trap_damage_func ]]();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self endon( "acid_trap_finished" );
|
self endon( "acid_trap_finished" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", ent );
|
self waittill( "trigger", ent );
|
||||||
|
|
||||||
if ( isplayer( ent ) )
|
if ( isplayer( ent ) )
|
||||||
{
|
|
||||||
ent thread player_acid_damage( self );
|
ent thread player_acid_damage( self );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( is_true( ent.is_brutus ) )
|
if ( is_true( ent.is_brutus ) )
|
||||||
{
|
{
|
||||||
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
|
ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( !isDefined( ent.marked_for_death ) )
|
|
||||||
|
if ( !isdefined( ent.marked_for_death ) )
|
||||||
{
|
{
|
||||||
ent.marked_for_death = 1;
|
ent.marked_for_death = 1;
|
||||||
ent thread zombie_acid_damage();
|
ent thread zombie_acid_damage();
|
||||||
@ -411,34 +432,38 @@ acid_trap_damage() //checked partially changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie_acid_damage() //checked matches cerberus output
|
zombie_acid_damage()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self setclientfield( "acid_trap_death_fx", 1 );
|
self setclientfield( "acid_trap_death_fx", 1 );
|
||||||
wait randomfloatrange( 0.25, 2 );
|
wait( randomfloatrange( 0.25, 2.0 ) );
|
||||||
if ( !isDefined( self.is_brutus ) )
|
|
||||||
|
if ( !isdefined( self.is_brutus ) )
|
||||||
{
|
{
|
||||||
self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) );
|
self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) );
|
||||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||||
}
|
}
|
||||||
|
|
||||||
self dodamage( self.health + 1000, self.origin );
|
self dodamage( self.health + 1000, self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_acid_death_fx() //checked matches cerberus output
|
stop_acid_death_fx()
|
||||||
{
|
{
|
||||||
wait 3;
|
wait 3.0;
|
||||||
self setclientfield( "acid_trap_death_fx", 0 );
|
self setclientfield( "acid_trap_death_fx", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
player_acid_damage( t_damage ) //checked changed to match cerberus output
|
player_acid_damage( t_damage )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
t_damage endon( "acid_trap_finished" );
|
t_damage endon( "acid_trap_finished" );
|
||||||
if ( !isDefined( self.is_in_acid ) && !self player_is_in_laststand() )
|
|
||||||
|
if ( !isdefined( self.is_in_acid ) && !self player_is_in_laststand() )
|
||||||
{
|
{
|
||||||
self.is_in_acid = 1;
|
self.is_in_acid = 1;
|
||||||
self thread player_acid_damage_cooldown();
|
self thread player_acid_damage_cooldown();
|
||||||
|
|
||||||
while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife )
|
while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife )
|
||||||
{
|
{
|
||||||
self dodamage( self.maxhealth / 2, self.origin );
|
self dodamage( self.maxhealth / 2, self.origin );
|
||||||
@ -447,34 +472,36 @@ player_acid_damage( t_damage ) //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player_acid_damage_cooldown() //checked matches cerberus output
|
player_acid_damage_cooldown()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
wait 1;
|
wait 1;
|
||||||
if ( isDefined( self ) )
|
|
||||||
{
|
if ( isdefined( self ) )
|
||||||
self.is_in_acid = undefined;
|
self.is_in_acid = undefined;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
acid_trap_fx( notify_ent ) //checked matches cerberus output
|
acid_trap_fx( notify_ent )
|
||||||
{
|
{
|
||||||
wait 25;
|
wait 25;
|
||||||
notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" );
|
notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" );
|
||||||
}
|
}
|
||||||
|
|
||||||
acid_trap_host_migration_listener() //checked changed to match cerberus output
|
acid_trap_host_migration_listener()
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
level notify( "acid_trap_hostmigration" );
|
level notify( "acid_trap_hostmigration" );
|
||||||
level endon( "acid_trap_hostmigration" );
|
level endon( "acid_trap_hostmigration" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "host_migration_end" );
|
level waittill( "host_migration_end" );
|
||||||
|
|
||||||
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
||||||
|
|
||||||
foreach ( trigger in trap_trigs )
|
foreach ( trigger in trap_trigs )
|
||||||
{
|
{
|
||||||
if ( isDefined( trigger.zombie_dmg_trig ) && isDefined( trigger.zombie_dmg_trig.active ) )
|
if ( isdefined( trigger.zombie_dmg_trig ) && isdefined( trigger.zombie_dmg_trig.active ) )
|
||||||
{
|
{
|
||||||
if ( trigger.zombie_dmg_trig.active == 1 )
|
if ( trigger.zombie_dmg_trig.active == 1 )
|
||||||
{
|
{
|
||||||
@ -486,16 +513,15 @@ acid_trap_host_migration_listener() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init_tower_trap_trigs() //checked changed to match cerberus output
|
init_tower_trap_trigs()
|
||||||
{
|
{
|
||||||
trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" );
|
trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" );
|
||||||
|
|
||||||
foreach ( trigger in trap_trigs )
|
foreach ( trigger in trap_trigs )
|
||||||
{
|
|
||||||
trigger thread tower_trap_trigger_think();
|
trigger thread tower_trap_trigger_think();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tower_trap_trigger_think() //checked changed to match cerberus output
|
tower_trap_trigger_think()
|
||||||
{
|
{
|
||||||
self.range_trigger = getent( self.target, "targetname" );
|
self.range_trigger = getent( self.target, "targetname" );
|
||||||
self.upgrade_trigger = getent( self.script_string, "script_noteworthy" );
|
self.upgrade_trigger = getent( self.script_string, "script_noteworthy" );
|
||||||
@ -506,18 +532,19 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
|||||||
self.in_use = 0;
|
self.in_use = 0;
|
||||||
self.has_been_used = 0;
|
self.has_been_used = 0;
|
||||||
self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) );
|
self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost );
|
self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost );
|
||||||
|
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
|
|
||||||
if ( who in_revive_trigger() )
|
if ( who in_revive_trigger() )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !isDefined( self.is_available ) )
|
if ( !isdefined( self.is_available ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.cost )
|
if ( who.score >= self.cost )
|
||||||
@ -530,19 +557,20 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
|||||||
who do_player_general_vox( "general", "discover_trap" );
|
who do_player_general_vox( "general", "discover_trap" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
who do_player_general_vox( "general", "start_trap" );
|
who do_player_general_vox( "general", "start_trap" );
|
||||||
}
|
|
||||||
self.in_use = 1;
|
self.in_use = 1;
|
||||||
self.active = 1;
|
self.active = 1;
|
||||||
play_sound_at_pos( "purchase", who.origin );
|
play_sound_at_pos( "purchase", who.origin );
|
||||||
self thread tower_trap_move_switch( self );
|
self thread tower_trap_move_switch( self );
|
||||||
self playsound( "zmb_trap_activate" );
|
self playsound( "zmb_trap_activate" );
|
||||||
|
|
||||||
self waittill( "switch_activated" );
|
self waittill( "switch_activated" );
|
||||||
|
|
||||||
who minus_to_player_score( self.cost );
|
who minus_to_player_score( self.cost );
|
||||||
level.trapped_track["tower"] = 1;
|
level.trapped_track["tower"] = 1;
|
||||||
level notify( "trap_activated" );
|
level notify( "trap_activated" );
|
||||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
|
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
|
||||||
self hint_string( &"ZOMBIE_TRAP_ACTIVE" );
|
self hint_string( &"ZOMBIE_TRAP_ACTIVE" );
|
||||||
self.sndtowerent playsound( "zmb_trap_tower_start" );
|
self.sndtowerent playsound( "zmb_trap_tower_start" );
|
||||||
self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 );
|
self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 );
|
||||||
@ -551,7 +579,9 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
|||||||
self thread tower_upgrade_trigger_think();
|
self thread tower_upgrade_trigger_think();
|
||||||
level thread open_tower_trap_upgrade_panel();
|
level thread open_tower_trap_upgrade_panel();
|
||||||
level thread tower_trap_upgrade_panel_closes_early();
|
level thread tower_trap_upgrade_panel_closes_early();
|
||||||
|
|
||||||
self waittill( "tower_trap_off" );
|
self waittill( "tower_trap_off" );
|
||||||
|
|
||||||
self.sndtowerent stoploopsound( 1 );
|
self.sndtowerent stoploopsound( 1 );
|
||||||
self.sndtowerent playsound( "zmb_trap_tower_end" );
|
self.sndtowerent playsound( "zmb_trap_tower_end" );
|
||||||
self.upgrade_trigger notify( "afterlife_interact_reset" );
|
self.upgrade_trigger notify( "afterlife_interact_reset" );
|
||||||
@ -570,43 +600,49 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tower_upgrade_trigger_think() //checked matches cerberus output
|
tower_upgrade_trigger_think()
|
||||||
{
|
{
|
||||||
self endon( "tower_trap_off" );
|
self endon( "tower_trap_off" );
|
||||||
self.upgrade_trigger.cost = 1000;
|
self.upgrade_trigger.cost = 1000;
|
||||||
self.upgrade_trigger.in_use = 0;
|
self.upgrade_trigger.in_use = 0;
|
||||||
self.upgrade_trigger.is_available = 1;
|
self.upgrade_trigger.is_available = 1;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( self.upgrade_trigger.script_string );
|
level waittill( self.upgrade_trigger.script_string );
|
||||||
|
|
||||||
level.trapped_track["tower_upgrade"] = 1;
|
level.trapped_track["tower_upgrade"] = 1;
|
||||||
level notify( "tower_trap_upgraded" );
|
level notify( "tower_trap_upgraded" );
|
||||||
level notify( "close_tower_trap_upgrade_panel" );
|
level notify( "close_tower_trap_upgrade_panel" );
|
||||||
self upgrade_tower_trap_weapon();
|
self upgrade_tower_trap_weapon();
|
||||||
self notify( "tower_trap_reset_timer" );
|
self notify( "tower_trap_reset_timer" );
|
||||||
self thread tower_trap_timer();
|
self thread tower_trap_timer();
|
||||||
|
|
||||||
self waittill( "tower_trap_off" );
|
self waittill( "tower_trap_off" );
|
||||||
|
|
||||||
wait 25;
|
wait 25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open_tower_trap_upgrade_panel() //checked matches cerberus output
|
open_tower_trap_upgrade_panel()
|
||||||
{
|
{
|
||||||
e_door = getent( "tower_shockbox_door", "targetname" );
|
e_door = getent( "tower_shockbox_door", "targetname" );
|
||||||
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
|
e_door moveto( e_door.origin + vectorscale( ( 0, -1, 0 ), 40.0 ), 1.0 );
|
||||||
|
|
||||||
level waittill( "close_tower_trap_upgrade_panel" );
|
level waittill( "close_tower_trap_upgrade_panel" );
|
||||||
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
|
|
||||||
|
e_door moveto( e_door.origin + vectorscale( ( 0, 1, 0 ), 40.0 ), 1.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
tower_trap_upgrade_panel_closes_early() //checked matches cerberus output
|
tower_trap_upgrade_panel_closes_early()
|
||||||
{
|
{
|
||||||
level endon( "tower_trap_upgraded" );
|
level endon( "tower_trap_upgraded" );
|
||||||
n_waittime = 24;
|
n_waittime = 24;
|
||||||
wait n_waittime;
|
wait( n_waittime );
|
||||||
level notify( "close_tower_trap_upgrade_panel" );
|
level notify( "close_tower_trap_upgrade_panel" );
|
||||||
}
|
}
|
||||||
|
|
||||||
tower_trap_move_switch( parent ) //checked matches cerberus output
|
tower_trap_move_switch( parent )
|
||||||
{
|
{
|
||||||
light_name = "";
|
light_name = "";
|
||||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||||
@ -614,36 +650,41 @@ tower_trap_move_switch( parent ) //checked matches cerberus output
|
|||||||
zapper_light_red( light_name );
|
zapper_light_red( light_name );
|
||||||
tswitch rotatepitch( -180, 0.5 );
|
tswitch rotatepitch( -180, 0.5 );
|
||||||
tswitch playsound( "amb_sparks_l_b" );
|
tswitch playsound( "amb_sparks_l_b" );
|
||||||
|
|
||||||
tswitch waittill( "rotatedone" );
|
tswitch waittill( "rotatedone" );
|
||||||
|
|
||||||
self notify( "switch_activated" );
|
self notify( "switch_activated" );
|
||||||
|
|
||||||
self waittill( "available" );
|
self waittill( "available" );
|
||||||
|
|
||||||
tswitch rotatepitch( 180, 0.5 );
|
tswitch rotatepitch( 180, 0.5 );
|
||||||
if ( isDefined( parent.script_noteworthy ) )
|
|
||||||
{
|
if ( isdefined( parent.script_noteworthy ) )
|
||||||
zapper_light_green( light_name );
|
zapper_light_green( light_name );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
activate_tower_trap() //checked changed to match cerberus output
|
activate_tower_trap()
|
||||||
{
|
{
|
||||||
self endon( "tower_trap_off" );
|
self endon( "tower_trap_off" );
|
||||||
self.weapon_name = "tower_trap_zm";
|
self.weapon_name = "tower_trap_zm";
|
||||||
self.tag_to_target = "J_Head";
|
self.tag_to_target = "J_Head";
|
||||||
self.trap_reload_time = 0.75;
|
self.trap_reload_time = 0.75;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
zombies = getaiarray( level.zombie_team );
|
zombies = getaiarray( level.zombie_team );
|
||||||
zombies_sorted = [];
|
zombies_sorted = [];
|
||||||
|
|
||||||
foreach ( zombie in zombies )
|
foreach ( zombie in zombies )
|
||||||
{
|
{
|
||||||
if ( zombie istouching( self.range_trigger ) )
|
if ( zombie istouching( self.range_trigger ) )
|
||||||
{
|
|
||||||
zombies_sorted[zombies_sorted.size] = zombie;
|
zombies_sorted[zombies_sorted.size] = zombie;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( zombies_sorted.size <= 0 )
|
if ( zombies_sorted.size <= 0 )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -653,119 +694,103 @@ activate_tower_trap() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
upgrade_tower_trap_weapon() //checked matches cerberus output
|
upgrade_tower_trap_weapon()
|
||||||
{
|
{
|
||||||
self.weapon_name = "tower_trap_upgraded_zm";
|
self.weapon_name = "tower_trap_upgraded_zm";
|
||||||
self.tag_to_target = "J_SpineLower";
|
self.tag_to_target = "J_SpineLower";
|
||||||
self.trap_reload_time = 1.5;
|
self.trap_reload_time = 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
tower_trap_timer() //checked matches cerberus output
|
tower_trap_timer()
|
||||||
{
|
{
|
||||||
self endon( "tower_trap_reset_timer" );
|
self endon( "tower_trap_reset_timer" );
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
self thread debug_tower_trap_timer();
|
self thread debug_tower_trap_timer();
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
wait 25;
|
wait 25;
|
||||||
self notify( "tower_trap_off" );
|
self notify( "tower_trap_off" );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_tower_trap_timer() //checked changed to match cerberus output
|
debug_tower_trap_timer()
|
||||||
{
|
{
|
||||||
self endon( "tower_trap_reset_timer" );
|
self endon( "tower_trap_reset_timer" );
|
||||||
|
|
||||||
for ( i = 1; i <= 25; i++ )
|
for ( i = 1; i <= 25; i++ )
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
iprintln( "Tower Trap Timer = " + i );
|
iprintln( "Tower Trap Timer = " + i );
|
||||||
#/
|
#/
|
||||||
*/
|
wait 1.0;
|
||||||
wait 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tower_trap_fires( a_zombies ) //checked changed to match cerberus output
|
tower_trap_fires( a_zombies )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.custom_tower_trap_fires_func ) )
|
if ( isdefined( level.custom_tower_trap_fires_func ) )
|
||||||
{
|
{
|
||||||
self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies );
|
self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self endon( "tower_trap_off" );
|
self endon( "tower_trap_off" );
|
||||||
e_org = getstruct( self.range_trigger.target, "targetname" );
|
e_org = getstruct( self.range_trigger.target, "targetname" );
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
while ( isalive( a_zombies[ n_index ] ) )
|
for ( n_index = randomintrange( 0, a_zombies.size ); isalive( a_zombies[n_index] ); n_index = randomintrange( 0, a_zombies.size ) )
|
||||||
{
|
{
|
||||||
e_target = a_zombies[n_index];
|
e_target = a_zombies[n_index];
|
||||||
v_zombietarget = e_target gettagorigin( self.tag_to_target );
|
v_zombietarget = e_target gettagorigin( self.tag_to_target );
|
||||||
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
|
|
||||||
{
|
|
||||||
magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
|
|
||||||
wait self.trap_reload_time;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
arrayremovevalue( a_zombies, e_target, 0 );
|
arrayremovevalue( a_zombies, e_target, 0 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
if ( a_zombies.size <= 0 )
|
asm_cond( a_zombies.size <= 0, loc_2676 );
|
||||||
{
|
asm_jump( loc_268A );
|
||||||
break;
|
|
||||||
}
|
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hint_string( string, cost ) //checked matches cerberus output
|
hint_string( string, cost )
|
||||||
{
|
|
||||||
if ( isDefined( cost ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( cost ) )
|
||||||
self sethintstring( string, cost );
|
self sethintstring( string, cost );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self sethintstring( string );
|
self sethintstring( string );
|
||||||
}
|
|
||||||
self setcursorhint( "HINT_NOICON" );
|
self setcursorhint( "HINT_NOICON" );
|
||||||
}
|
}
|
||||||
|
|
||||||
zapper_light_red( lightname ) //checked changed to match cerberus output
|
zapper_light_red( lightname )
|
||||||
{
|
{
|
||||||
zapper_lights = getentarray( lightname, "targetname" );
|
zapper_lights = getentarray( lightname, "targetname" );
|
||||||
|
|
||||||
for ( i = 0; i < zapper_lights.size; i++ )
|
for ( i = 0; i < zapper_lights.size; i++ )
|
||||||
{
|
|
||||||
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control_red" );
|
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control_red" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
zapper_light_green( lightname ) //checked changed to match cerberus output
|
zapper_light_green( lightname )
|
||||||
{
|
{
|
||||||
zapper_lights = getentarray( lightname, "targetname" );
|
zapper_lights = getentarray( lightname, "targetname" );
|
||||||
|
|
||||||
for ( i = 0; i < zapper_lights.size; i++ )
|
for ( i = 0; i < zapper_lights.size; i++ )
|
||||||
{
|
|
||||||
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control" );
|
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
get_trap_light_name() //checked matches cerberus output
|
get_trap_light_name()
|
||||||
{
|
{
|
||||||
tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" );
|
tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" );
|
||||||
|
|
||||||
switch ( tswitch.script_linkname )
|
switch ( tswitch.script_linkname )
|
||||||
{
|
{
|
||||||
case "1":
|
|
||||||
case "2":
|
case "2":
|
||||||
|
case "1":
|
||||||
light_name = "trap_control_wardens_office";
|
light_name = "trap_control_wardens_office";
|
||||||
break;
|
break;
|
||||||
case "3":
|
|
||||||
case "4":
|
|
||||||
case "5":
|
case "5":
|
||||||
|
case "4":
|
||||||
|
case "3":
|
||||||
light_name = "trap_control_cafeteria";
|
light_name = "trap_control_cafeteria";
|
||||||
break;
|
break;
|
||||||
case "99":
|
case "99":
|
||||||
light_name = "trap_control_docks";
|
light_name = "trap_control_docks";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return light_name;
|
return light_name;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,18 +1,17 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_powerups;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_zonemgr;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/animscripts/shared;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\animscripts\shared;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_audio;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_zonemgr;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
|
|
||||||
//#using_animtree( "fxanim_props" ); //leave commented for now for compiling
|
init()
|
||||||
|
|
||||||
init() //checked changed to match cerberus output
|
|
||||||
{
|
{
|
||||||
flag_init( "soul_catchers_charged" );
|
flag_init( "soul_catchers_charged" );
|
||||||
level.soul_catchers = [];
|
level.soul_catchers = [];
|
||||||
@ -20,44 +19,47 @@ init() //checked changed to match cerberus output
|
|||||||
level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area;
|
level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area;
|
||||||
level.soul_catcher_clip["rune_2"] = getent( "wolf_clip_docks", "targetname" );
|
level.soul_catcher_clip["rune_2"] = getent( "wolf_clip_docks", "targetname" );
|
||||||
level.soul_catcher_clip["rune_3"] = getent( "wolf_clip_infirmary", "targetname" );
|
level.soul_catcher_clip["rune_3"] = getent( "wolf_clip_infirmary", "targetname" );
|
||||||
|
|
||||||
foreach ( e_clip in level.soul_catcher_clip )
|
foreach ( e_clip in level.soul_catcher_clip )
|
||||||
{
|
|
||||||
e_clip setinvisibletoall();
|
e_clip setinvisibletoall();
|
||||||
}
|
|
||||||
level thread create_anim_references_on_server();
|
level thread create_anim_references_on_server();
|
||||||
registerclientfield( "actor", "make_client_clone", 9000, 4, "int" );
|
registerclientfield( "actor", "make_client_clone", 9000, 4, "int" );
|
||||||
onplayerconnect_callback( ::toggle_redeemer_trigger );
|
onplayerconnect_callback( ::toggle_redeemer_trigger );
|
||||||
onplayerconnect_callback( ::hellhole_projectile_watch );
|
onplayerconnect_callback( ::hellhole_projectile_watch );
|
||||||
onplayerconnect_callback( ::hellhole_tomahawk_watch );
|
onplayerconnect_callback( ::hellhole_tomahawk_watch );
|
||||||
level.a_wolf_structs = getstructarray( "wolf_position", "targetname" );
|
level.a_wolf_structs = getstructarray( "wolf_position", "targetname" );
|
||||||
|
|
||||||
for ( i = 0; i < level.a_wolf_structs.size; i++ )
|
for ( i = 0; i < level.a_wolf_structs.size; i++ )
|
||||||
{
|
{
|
||||||
registerclientfield( "world", level.a_wolf_structs[i].script_parameters, 9000, 3, "int" );
|
registerclientfield( "world", level.a_wolf_structs[i].script_parameters, 9000, 3, "int" );
|
||||||
level.soul_catchers[i] = level.a_wolf_structs[i];
|
level.soul_catchers[i] = level.a_wolf_structs[i];
|
||||||
level.soul_catchers_vol[i] = getent( level.a_wolf_structs[i].target, "targetname" );
|
level.soul_catchers_vol[i] = getent( level.a_wolf_structs[i].target, "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||||
{
|
{
|
||||||
level.soul_catchers[i].souls_received = 0;
|
level.soul_catchers[i].souls_received = 0;
|
||||||
level.soul_catchers[i].is_eating = 0;
|
level.soul_catchers[i].is_eating = 0;
|
||||||
level.soul_catchers[i] thread soul_catcher_check();
|
level.soul_catchers[i] thread soul_catcher_check();
|
||||||
|
|
||||||
if ( is_classic() )
|
if ( is_classic() )
|
||||||
{
|
|
||||||
level.soul_catchers[i] thread soul_catcher_state_manager();
|
level.soul_catchers[i] thread soul_catcher_state_manager();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level.soul_catchers[i] thread grief_soul_catcher_state_manager();
|
level.soul_catchers[i] thread grief_soul_catcher_state_manager();
|
||||||
}
|
|
||||||
level.soul_catchers[i] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) );
|
level.soul_catchers[i] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) );
|
||||||
level.soul_catchers_vol[i] = getent( level.soul_catchers[i].target, "targetname" );
|
level.soul_catchers_vol[i] = getent( level.soul_catchers[i].target, "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level.soul_catchers_charged = 0;
|
level.soul_catchers_charged = 0;
|
||||||
level thread soul_catchers_charged();
|
level thread soul_catchers_charged();
|
||||||
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func );
|
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func );
|
||||||
}
|
}
|
||||||
|
|
||||||
create_anim_references_on_server() //checked matches cerberus output
|
#using_animtree("fxanim_props");
|
||||||
|
|
||||||
|
create_anim_references_on_server()
|
||||||
{
|
{
|
||||||
root = %root;
|
root = %root;
|
||||||
wolfhead_intro_anim = %o_zombie_dreamcatcher_intro;
|
wolfhead_intro_anim = %o_zombie_dreamcatcher_intro;
|
||||||
@ -82,9 +84,10 @@ create_anim_references_on_server() //checked matches cerberus output
|
|||||||
wolfhead_body_anims["front"] = %ai_zombie_dreamcatcher_wallconsume_align_f;
|
wolfhead_body_anims["front"] = %ai_zombie_dreamcatcher_wallconsume_align_f;
|
||||||
}
|
}
|
||||||
|
|
||||||
soul_catcher_state_manager() //checked changed to match cerberus output
|
soul_catcher_state_manager()
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1.0;
|
||||||
|
|
||||||
if ( self.script_noteworthy == "rune_3" )
|
if ( self.script_noteworthy == "rune_3" )
|
||||||
{
|
{
|
||||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||||
@ -95,8 +98,11 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
|||||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||||
trigger hide();
|
trigger hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( self.script_parameters, 0 );
|
level setclientfield( self.script_parameters, 0 );
|
||||||
|
|
||||||
self waittill( "first_zombie_killed_in_zone" );
|
self waittill( "first_zombie_killed_in_zone" );
|
||||||
|
|
||||||
if ( self.script_noteworthy == "rune_3" )
|
if ( self.script_noteworthy == "rune_3" )
|
||||||
{
|
{
|
||||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||||
@ -107,25 +113,27 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
|||||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||||
trigger show();
|
trigger show();
|
||||||
}
|
}
|
||||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
|
||||||
{
|
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||||
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
||||||
}
|
|
||||||
level setclientfield( self.script_parameters, 1 );
|
level setclientfield( self.script_parameters, 1 );
|
||||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||||
wait anim_length;
|
wait( anim_length );
|
||||||
|
|
||||||
while ( !self.is_charged )
|
while ( !self.is_charged )
|
||||||
{
|
{
|
||||||
level setclientfield( self.script_parameters, 2 );
|
level setclientfield( self.script_parameters, 2 );
|
||||||
self waittill_either( "fully_charged", "finished_eating" );
|
self waittill_either( "fully_charged", "finished_eating" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( self.script_parameters, 6 );
|
level setclientfield( self.script_parameters, 6 );
|
||||||
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
||||||
wait anim_length;
|
wait( anim_length );
|
||||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
|
||||||
{
|
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||||
level.soul_catcher_clip[self.script_noteworthy] delete();
|
level.soul_catcher_clip[self.script_noteworthy] delete();
|
||||||
}
|
|
||||||
if ( self.script_noteworthy == "rune_3" )
|
if ( self.script_noteworthy == "rune_3" )
|
||||||
{
|
{
|
||||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||||
@ -136,35 +144,40 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
|||||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( self.script_parameters, 7 );
|
level setclientfield( self.script_parameters, 7 );
|
||||||
}
|
}
|
||||||
|
|
||||||
grief_soul_catcher_state_manager() //checked matches cerberus output
|
grief_soul_catcher_state_manager()
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level setclientfield( self.script_parameters, 0 );
|
level setclientfield( self.script_parameters, 0 );
|
||||||
|
|
||||||
self waittill( "first_zombie_killed_in_zone" );
|
self waittill( "first_zombie_killed_in_zone" );
|
||||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
|
||||||
{
|
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||||
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
||||||
}
|
|
||||||
level setclientfield( self.script_parameters, 1 );
|
level setclientfield( self.script_parameters, 1 );
|
||||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||||
wait anim_length;
|
wait( anim_length );
|
||||||
|
|
||||||
while ( !self.is_charged )
|
while ( !self.is_charged )
|
||||||
{
|
{
|
||||||
level setclientfield( self.script_parameters, 2 );
|
level setclientfield( self.script_parameters, 2 );
|
||||||
self waittill_either( "fully_charged", "finished_eating" );
|
self waittill_either( "fully_charged", "finished_eating" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level setclientfield( self.script_parameters, 6 );
|
level setclientfield( self.script_parameters, 6 );
|
||||||
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
||||||
wait anim_length;
|
wait( anim_length );
|
||||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
|
||||||
{
|
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||||
level.soul_catcher_clip[self.script_noteworthy] delete();
|
level.soul_catcher_clip[self.script_noteworthy] delete();
|
||||||
}
|
|
||||||
self.souls_received = 0;
|
self.souls_received = 0;
|
||||||
level thread wolf_spit_out_powerup();
|
level thread wolf_spit_out_powerup();
|
||||||
wait 20;
|
wait 20;
|
||||||
@ -172,13 +185,13 @@ grief_soul_catcher_state_manager() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wolf_spit_out_powerup() //checked changed to match cerberus output
|
wolf_spit_out_powerup()
|
||||||
{
|
|
||||||
if ( isDefined( level.enable_magic ) && !level.enable_magic )
|
|
||||||
{
|
{
|
||||||
|
if ( !( isdefined( level.enable_magic ) && level.enable_magic ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" );
|
power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" );
|
||||||
|
|
||||||
if ( randomint( 100 ) < 20 )
|
if ( randomint( 100 ) < 20 )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < level.zombie_powerup_array.size; i++ )
|
for ( i = 0; i < level.zombie_powerup_array.size; i++ )
|
||||||
@ -191,35 +204,39 @@ wolf_spit_out_powerup() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while ( 1 )
|
else
|
||||||
|
{
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
level.zombie_powerup_index = randomint( level.zombie_powerup_array.size );
|
level.zombie_powerup_index = randomint( level.zombie_powerup_array.size );
|
||||||
|
|
||||||
if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" )
|
if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[ level.zombie_powerup_index ] );
|
|
||||||
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
|
|
||||||
if ( isDefined( power_ups[ 0 ] ) )
|
|
||||||
{
|
|
||||||
power_ups[ 0 ] movez( 120, 4 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie_spawn_func() //checked matches cerberus output
|
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[level.zombie_powerup_index] );
|
||||||
|
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
|
||||||
|
|
||||||
|
if ( isdefined( power_ups[0] ) )
|
||||||
|
power_ups[0] movez( 120, 4 );
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_spawn_func()
|
||||||
{
|
{
|
||||||
self.actor_killed_override = ::zombie_killed_override;
|
self.actor_killed_override = ::zombie_killed_override;
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output
|
zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime )
|
||||||
{
|
{
|
||||||
if ( !is_true( self.has_legs ) )
|
if ( !is_true( self.has_legs ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isplayer( attacker ) )
|
if ( isplayer( attacker ) )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||||
@ -236,166 +253,155 @@ zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_for_zombie_in_wolf_area() //checked changed to match cerberus output
|
check_for_zombie_in_wolf_area()
|
||||||
{
|
{
|
||||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||||
{
|
{
|
||||||
if ( self istouching( level.soul_catchers_vol[i] ) )
|
if ( self istouching( level.soul_catchers_vol[i] ) )
|
||||||
{
|
{
|
||||||
if ( !level.soul_catchers[i].is_charged && !level.soul_catchers[i].is_eating )
|
if ( !level.soul_catchers[i].is_charged && !level.soul_catchers[i].is_eating )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
zombie_soul_catcher_death() //checked matches cerberus output
|
return false;
|
||||||
{
|
}
|
||||||
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
|
|
||||||
if ( isDefined( self._race_team ) )
|
zombie_soul_catcher_death()
|
||||||
{
|
{
|
||||||
|
self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript();
|
||||||
|
|
||||||
|
if ( isdefined( self._race_team ) )
|
||||||
team = self._race_team;
|
team = self._race_team;
|
||||||
}
|
|
||||||
level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team );
|
level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team );
|
||||||
|
|
||||||
if ( self.my_soul_catcher.is_eating )
|
if ( self.my_soul_catcher.is_eating )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( self.my_soul_catcher.souls_received >= 6 )
|
if ( self.my_soul_catcher.souls_received >= 6 )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
self.my_soul_catcher.is_eating = 1;
|
self.my_soul_catcher.is_eating = 1;
|
||||||
|
|
||||||
if ( self.my_soul_catcher.souls_received == 0 )
|
if ( self.my_soul_catcher.souls_received == 0 )
|
||||||
{
|
{
|
||||||
self.my_soul_catcher notify( "first_zombie_killed_in_zone" );
|
self.my_soul_catcher notify( "first_zombie_killed_in_zone" );
|
||||||
self thread notify_wolf_intro_anim_complete();
|
self thread notify_wolf_intro_anim_complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
client_notify_value = self get_correct_model_array();
|
client_notify_value = self get_correct_model_array();
|
||||||
self setclientfield( "make_client_clone", client_notify_value );
|
self setclientfield( "make_client_clone", client_notify_value );
|
||||||
self setanimstatefromasd( "zm_portal_death" );
|
self setanimstatefromasd( "zm_portal_death" );
|
||||||
self maps/mp/animscripts/shared::donotetracks( "portal_death" );
|
self maps\mp\animscripts\shared::donotetracks( "portal_death" );
|
||||||
|
|
||||||
if ( self.my_soul_catcher.souls_received == 0 )
|
if ( self.my_soul_catcher.souls_received == 0 )
|
||||||
{
|
|
||||||
self waittill( "wolf_intro_anim_complete" );
|
self waittill( "wolf_intro_anim_complete" );
|
||||||
}
|
|
||||||
n_eating_anim = self which_eating_anim();
|
n_eating_anim = self which_eating_anim();
|
||||||
self ghost();
|
self ghost();
|
||||||
level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim );
|
level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim );
|
||||||
|
|
||||||
if ( n_eating_anim == 3 )
|
if ( n_eating_anim == 3 )
|
||||||
{
|
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f );
|
||||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f );
|
|
||||||
}
|
|
||||||
else if ( n_eating_anim == 4 )
|
else if ( n_eating_anim == 4 )
|
||||||
{
|
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r );
|
||||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l );
|
||||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l );
|
|
||||||
}
|
|
||||||
wait( total_wait_time - 0.5 );
|
wait( total_wait_time - 0.5 );
|
||||||
self.my_soul_catcher.souls_received++;
|
self.my_soul_catcher.souls_received++;
|
||||||
wait 0.5;
|
wait 0.5;
|
||||||
self.my_soul_catcher notify( "finished_eating" );
|
self.my_soul_catcher notify( "finished_eating" );
|
||||||
self.my_soul_catcher.is_eating = 0;
|
self.my_soul_catcher.is_eating = 0;
|
||||||
self delete();
|
self delete();
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_correct_model_array() //checked matches cerberus output
|
get_correct_model_array()
|
||||||
{
|
{
|
||||||
mod = 0;
|
mod = 0;
|
||||||
if ( self.model == "c_zom_guard_body" && isDefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" )
|
|
||||||
{
|
if ( self.model == "c_zom_guard_body" && isdefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" )
|
||||||
mod = 4;
|
mod = 4;
|
||||||
}
|
|
||||||
if ( self.headmodel == "c_zom_zombie_barbwire_head" )
|
if ( self.headmodel == "c_zom_zombie_barbwire_head" )
|
||||||
{
|
|
||||||
return 1 + mod;
|
return 1 + mod;
|
||||||
}
|
|
||||||
if ( self.headmodel == "c_zom_zombie_hellcatraz_head" )
|
if ( self.headmodel == "c_zom_zombie_hellcatraz_head" )
|
||||||
{
|
|
||||||
return 2 + mod;
|
return 2 + mod;
|
||||||
}
|
|
||||||
if ( self.headmodel == "c_zom_zombie_mask_head" )
|
if ( self.headmodel == "c_zom_zombie_mask_head" )
|
||||||
{
|
|
||||||
return 3 + mod;
|
return 3 + mod;
|
||||||
}
|
|
||||||
if ( self.headmodel == "c_zom_zombie_slackjaw_head" )
|
if ( self.headmodel == "c_zom_zombie_slackjaw_head" )
|
||||||
{
|
|
||||||
return 4 + mod;
|
return 4 + mod;
|
||||||
}
|
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
notify_wolf_intro_anim_complete() //checked matches cerberus output
|
notify_wolf_intro_anim_complete()
|
||||||
{
|
{
|
||||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||||
wait anim_length;
|
wait( anim_length );
|
||||||
self notify( "wolf_intro_anim_complete" );
|
self notify( "wolf_intro_anim_complete" );
|
||||||
}
|
}
|
||||||
|
|
||||||
which_eating_anim() //checked matches cerberus output
|
which_eating_anim()
|
||||||
{
|
{
|
||||||
soul_catcher = self.my_soul_catcher;
|
soul_catcher = self.my_soul_catcher;
|
||||||
forward_dot = vectordot( anglesToForward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) );
|
forward_dot = vectordot( anglestoforward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) );
|
||||||
|
|
||||||
if ( forward_dot > 0.85 )
|
if ( forward_dot > 0.85 )
|
||||||
{
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
right_dot = vectordot( anglesToRight( soul_catcher.angles ), self.origin - soul_catcher.origin );
|
right_dot = vectordot( anglestoright( soul_catcher.angles ), self.origin - soul_catcher.origin );
|
||||||
|
|
||||||
if ( right_dot > 0 )
|
if ( right_dot > 0 )
|
||||||
{
|
|
||||||
return 4;
|
return 4;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
soul_catcher_check() //checked changed to match cerberus output
|
soul_catcher_check()
|
||||||
{
|
{
|
||||||
self.is_charged = 0;
|
self.is_charged = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( self.souls_received >= 6 )
|
if ( self.souls_received >= 6 )
|
||||||
{
|
{
|
||||||
level.soul_catchers_charged++;
|
level.soul_catchers_charged++;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged );
|
||||||
self.is_charged = 1;
|
self.is_charged = 1;
|
||||||
self notify( "fully_charged" );
|
self notify( "fully_charged" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.soul_catchers_charged == 1 )
|
if ( level.soul_catchers_charged == 1 )
|
||||||
{
|
|
||||||
self thread first_wolf_complete_vo();
|
self thread first_wolf_complete_vo();
|
||||||
}
|
|
||||||
else if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
else if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
||||||
{
|
|
||||||
self thread final_wolf_complete_vo();
|
self thread final_wolf_complete_vo();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wolf_head_removal( wolf_head_model_string ) //checked matches cerberus output
|
wolf_head_removal( wolf_head_model_string )
|
||||||
{
|
{
|
||||||
wolf_head_model = getent( wolf_head_model_string, "targetname" );
|
wolf_head_model = getent( wolf_head_model_string, "targetname" );
|
||||||
wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" );
|
wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" );
|
||||||
|
|
||||||
self waittill( "fully_charged" );
|
self waittill( "fully_charged" );
|
||||||
|
|
||||||
wolf_head_model setmodel( "p6_zm_al_dream_catcher" );
|
wolf_head_model setmodel( "p6_zm_al_dream_catcher" );
|
||||||
}
|
}
|
||||||
|
|
||||||
soul_catchers_charged() //checked changed to match cerberus output
|
soul_catchers_charged()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
||||||
{
|
{
|
||||||
@ -403,22 +409,23 @@ soul_catchers_charged() //checked changed to match cerberus output
|
|||||||
level notify( "soul_catchers_charged" );
|
level notify( "soul_catchers_charged" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
first_wolf_encounter_vo() //checked changed to match cerberus output
|
first_wolf_encounter_vo()
|
||||||
{
|
{
|
||||||
if ( !is_classic() )
|
if ( !is_classic() )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
wait 2;
|
wait 2.0;
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
a_closest = get_array_of_closest( self.origin, a_players );
|
a_closest = get_array_of_closest( self.origin, a_players );
|
||||||
|
|
||||||
for ( i = 0; i < a_closest.size; i++ )
|
for ( i = 0; i < a_closest.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||||
{
|
{
|
||||||
a_closest[i] thread do_player_general_vox( "general", "wolf_encounter" );
|
a_closest[i] thread do_player_general_vox( "general", "wolf_encounter" );
|
||||||
level.wolf_encounter_vo_played = 1;
|
level.wolf_encounter_vo_played = 1;
|
||||||
@ -427,18 +434,18 @@ first_wolf_encounter_vo() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
first_wolf_complete_vo() //checked changed to match cerberus output
|
first_wolf_complete_vo()
|
||||||
{
|
{
|
||||||
if ( !is_classic() )
|
if ( !is_classic() )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
wait 3.5;
|
wait 3.5;
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
a_closest = get_array_of_closest( self.origin, a_players );
|
a_closest = get_array_of_closest( self.origin, a_players );
|
||||||
|
|
||||||
for ( i = 0; i < a_closest.size; i++ )
|
for ( i = 0; i < a_closest.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||||
{
|
{
|
||||||
a_closest[i] thread do_player_general_vox( "general", "wolf_complete" );
|
a_closest[i] thread do_player_general_vox( "general", "wolf_complete" );
|
||||||
break;
|
break;
|
||||||
@ -446,18 +453,18 @@ first_wolf_complete_vo() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final_wolf_complete_vo() //checked changed to match cerberus output
|
final_wolf_complete_vo()
|
||||||
{
|
{
|
||||||
if ( !is_classic() )
|
if ( !is_classic() )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
wait 3.5;
|
wait 3.5;
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
a_closest = get_array_of_closest( self.origin, a_players );
|
a_closest = get_array_of_closest( self.origin, a_players );
|
||||||
|
|
||||||
for ( i = 0; i < a_closest.size; i++ )
|
for ( i = 0; i < a_closest.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||||
{
|
{
|
||||||
a_closest[i] thread do_player_general_vox( "general", "wolf_final" );
|
a_closest[i] thread do_player_general_vox( "general", "wolf_final" );
|
||||||
break;
|
break;
|
||||||
@ -465,100 +472,108 @@ final_wolf_complete_vo() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_upgrade_quest() //checked changed to match cerberus output
|
tomahawk_upgrade_quest()
|
||||||
{
|
|
||||||
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( self.tomahawk_upgrade_kills = 0; self.tomahawk_upgrade_kills < 15; self.tomahawk_upgrade_kills++ )
|
for ( self.tomahawk_upgrade_kills = 0; self.tomahawk_upgrade_kills < 15; self.tomahawk_upgrade_kills++ )
|
||||||
{
|
|
||||||
self waittill( "got_a_tomahawk_kill" );
|
self waittill( "got_a_tomahawk_kill" );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1.0;
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org waittill( "easteregg_scream_complete" );
|
e_org waittill( "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org delete();
|
e_org delete();
|
||||||
|
|
||||||
while ( level.round_number < 10 )
|
while ( level.round_number < 10 )
|
||||||
{
|
|
||||||
wait 0.5;
|
wait 0.5;
|
||||||
}
|
|
||||||
self ent_flag_init( "gg_round_done" );
|
self ent_flag_init( "gg_round_done" );
|
||||||
|
|
||||||
while ( !self ent_flag( "gg_round_done" ) )
|
while ( !self ent_flag( "gg_round_done" ) )
|
||||||
{
|
{
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
|
|
||||||
self.killed_with_only_tomahawk = 1;
|
self.killed_with_only_tomahawk = 1;
|
||||||
self.killed_something_thq = 0;
|
self.killed_something_thq = 0;
|
||||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
|
||||||
{
|
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
if ( !self.killed_with_only_tomahawk || !self.killed_something_thq )
|
if ( !self.killed_with_only_tomahawk || !self.killed_something_thq )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
self ent_flag_set( "gg_round_done" );
|
self ent_flag_set( "gg_round_done" );
|
||||||
}
|
}
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
|
||||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||||
|
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org waittill( "easteregg_scream_complete" );
|
e_org waittill( "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org delete();
|
e_org delete();
|
||||||
self notify( "hellhole_time" );
|
self notify( "hellhole_time" );
|
||||||
|
|
||||||
self waittill( "tomahawk_in_hellhole" );
|
self waittill( "tomahawk_in_hellhole" );
|
||||||
if ( isDefined( self.retriever_trigger ) )
|
|
||||||
{
|
if ( isdefined( self.retriever_trigger ) )
|
||||||
self.retriever_trigger setinvisibletoplayer( self );
|
self.retriever_trigger setinvisibletoplayer( self );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trigger = getent( "retriever_pickup_trigger", "script_noteworthy" );
|
trigger = getent( "retriever_pickup_trigger", "script_noteworthy" );
|
||||||
self.retriever_trigger = trigger;
|
self.retriever_trigger = trigger;
|
||||||
self.retriever_trigger setinvisibletoplayer( self );
|
self.retriever_trigger setinvisibletoplayer( self );
|
||||||
}
|
}
|
||||||
|
|
||||||
self takeweapon( "bouncing_tomahawk_zm" );
|
self takeweapon( "bouncing_tomahawk_zm" );
|
||||||
self set_player_tactical_grenade( "none" );
|
self set_player_tactical_grenade( "none" );
|
||||||
self notify( "tomahawk_upgraded_swap" );
|
self notify( "tomahawk_upgraded_swap" );
|
||||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org waittill( "easteregg_scream_complete" );
|
e_org waittill( "easteregg_scream_complete" );
|
||||||
|
|
||||||
e_org delete();
|
e_org delete();
|
||||||
|
|
||||||
level waittill( "end_of_round" );
|
level waittill( "end_of_round" );
|
||||||
|
|
||||||
tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" );
|
tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" );
|
||||||
tomahawk_pick setclientfield( "play_tomahawk_fx", 2 );
|
tomahawk_pick setclientfield( "play_tomahawk_fx", 2 );
|
||||||
self.current_tomahawk_weapon = "upgraded_tomahawk_zm";
|
self.current_tomahawk_weapon = "upgraded_tomahawk_zm";
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle_redeemer_trigger() //checked changed to match cerberus output
|
toggle_redeemer_trigger()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
flag_wait( "tomahawk_pickup_complete" );
|
flag_wait( "tomahawk_pickup_complete" );
|
||||||
upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" );
|
upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" );
|
||||||
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
||||||
tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" );
|
tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
if ( isDefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.afterlife ) && self.afterlife )
|
if ( isdefined( self.afterlife ) && self.afterlife )
|
||||||
{
|
{
|
||||||
upgraded_tomahawk_trigger setvisibletoplayer( self );
|
upgraded_tomahawk_trigger setvisibletoplayer( self );
|
||||||
tomahawk_model setvisibletoplayer( self );
|
tomahawk_model setvisibletoplayer( self );
|
||||||
@ -568,59 +583,61 @@ toggle_redeemer_trigger() //checked changed to match cerberus output
|
|||||||
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
||||||
tomahawk_model setinvisibletoplayer( self );
|
tomahawk_model setinvisibletoplayer( self );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hellhole_projectile_watch() //checked matches cerberus output
|
hellhole_projectile_watch()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", grenade, weapname );
|
self waittill( "grenade_fire", grenade, weapname );
|
||||||
|
|
||||||
if ( weapname == "frag_grenade_zm" )
|
if ( weapname == "frag_grenade_zm" )
|
||||||
{
|
|
||||||
self thread hellhole_grenades( grenade );
|
self thread hellhole_grenades( grenade );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
hellhole_tomahawk_watch() //checked matches cerberus output
|
hellhole_tomahawk_watch()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "hellhole_time" );
|
self waittill( "hellhole_time" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", grenade, weapname );
|
self waittill( "grenade_fire", grenade, weapname );
|
||||||
|
|
||||||
if ( weapname == "bouncing_tomahawk_zm" )
|
if ( weapname == "bouncing_tomahawk_zm" )
|
||||||
{
|
|
||||||
self thread hellhole_tomahawk( grenade );
|
self thread hellhole_tomahawk( grenade );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
hellhole_grenades( grenade ) //checked matches cerberus output
|
hellhole_grenades( grenade )
|
||||||
{
|
{
|
||||||
grenade endon( "death" );
|
grenade endon( "death" );
|
||||||
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
||||||
|
|
||||||
while ( !grenade istouching( trig_hellhole ) )
|
while ( !grenade istouching( trig_hellhole ) )
|
||||||
{
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 20 );
|
self maps\mp\zombies\_zm_score::add_to_player_score( 20 );
|
||||||
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
||||||
playsoundatposition( "wpn_grenade_poof", grenade.origin );
|
playsoundatposition( "wpn_grenade_poof", grenade.origin );
|
||||||
grenade delete();
|
grenade delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
hellhole_tomahawk( grenade ) //checked matches cerberus output
|
hellhole_tomahawk( grenade )
|
||||||
{
|
{
|
||||||
grenade endon( "death" );
|
grenade endon( "death" );
|
||||||
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
||||||
|
|
||||||
while ( !grenade istouching( trig_hellhole ) )
|
while ( !grenade istouching( trig_hellhole ) )
|
||||||
{
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
|
||||||
self notify( "tomahawk_in_hellhole" );
|
self notify( "tomahawk_in_hellhole" );
|
||||||
grenade notify( "in_hellhole" );
|
grenade notify( "in_hellhole" );
|
||||||
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
||||||
@ -628,15 +645,10 @@ hellhole_tomahawk( grenade ) //checked matches cerberus output
|
|||||||
grenade delete();
|
grenade delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output
|
spawn_infinite_powerup_drop( v_origin, str_type )
|
||||||
{
|
{
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,10 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -31,16 +33,16 @@ achievement_sound_func( achievement_name_lower )
|
|||||||
|
|
||||||
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()
|
||||||
@ -56,26 +58,23 @@ achievement_full_lockdown()
|
|||||||
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" );
|
level waittill( "brutus_locked_object" );
|
||||||
|
|
||||||
b_unlock = 1;
|
b_unlock = 1;
|
||||||
_a92 = level.lockdown_track;
|
|
||||||
_k92 = getFirstArrayKey( _a92 );
|
foreach ( b_check in level.lockdown_track )
|
||||||
while ( isDefined( _k92 ) )
|
|
||||||
{
|
{
|
||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,37 +86,35 @@ achievement_trapped_in_time()
|
|||||||
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" );
|
level waittill_either( "trap_activated", "tower_trap_upgraded" );
|
||||||
|
|
||||||
if ( level.round_number >= 10 )
|
if ( level.round_number >= 10 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
b_unlock = 1;
|
b_unlock = 1;
|
||||||
_a131 = level.trapped_track;
|
|
||||||
_k131 = getFirstArrayKey( _a131 );
|
foreach ( b_check in level.trapped_track )
|
||||||
while ( isDefined( _k131 ) )
|
|
||||||
{
|
{
|
||||||
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 waittill( "pop_goes_the_weasel_achieved" );
|
||||||
|
|
||||||
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
|
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +122,9 @@ 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 waittill( "player_at_bridge" );
|
||||||
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
|
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +132,9 @@ achievement_feed_the_beast()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_obtained_tomahawk" );
|
self waittill( "player_obtained_tomahawk" );
|
||||||
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
|
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,12 +142,10 @@ 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" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +153,9 @@ achievement_acid_drip()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_obtained_acidgat" );
|
self waittill( "player_obtained_acidgat" );
|
||||||
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
|
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,19 +163,19 @@ 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 waittill( "electric_cherry_start" );
|
||||||
|
|
||||||
self.cherry_kills = 0;
|
self.cherry_kills = 0;
|
||||||
|
|
||||||
self waittill( "electric_cherry_end" );
|
self waittill( "electric_cherry_end" );
|
||||||
|
|
||||||
if ( self.cherry_kills >= 10 )
|
if ( self.cherry_kills >= 10 )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
|
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +183,9 @@ achievement_paranormal_progress()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "player_opened_afterlife_door" );
|
self waittill( "player_opened_afterlife_door" );
|
||||||
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
|
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,20 +193,19 @@ 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" );
|
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.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" ) )
|
|
||||||
{
|
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
|
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -12,38 +14,33 @@ main_start()
|
|||||||
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_dead_zone_rad2[ 0 ] = 65536;
|
|
||||||
level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 );
|
|
||||||
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;
|
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
|
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
|
||||||
@ -51,16 +48,13 @@ main_end()
|
|||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return self maps\mp\zm_prison::equipment_safe_to_drop( weapon );
|
||||||
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned_collision_ffotd()
|
spawned_collision_ffotd()
|
||||||
@ -72,7 +66,14 @@ spawned_collision_ffotd()
|
|||||||
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" );
|
||||||
|
precachemodel( "collision_geo_128x128x10_standard" );
|
||||||
|
precachemodel( "collision_geo_64x64x64_standard" );
|
||||||
|
precachemodel( "collision_geo_32x32x128_standard" );
|
||||||
|
precachemodel( "p6_zm_al_surgery_cart" );
|
||||||
|
precachemodel( "p6_zm_al_laundry_bag" );
|
||||||
|
precachemodel( "ch_furniture_teachers_chair1" );
|
||||||
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", ( 1999, 9643, 1472 ) );
|
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
|
||||||
@ -81,15 +82,15 @@ spawned_collision_ffotd()
|
|||||||
collision1 ghost();
|
collision1 ghost();
|
||||||
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
|
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
|
||||||
collision2 setmodel( "collision_wall_256x256x10_standard" );
|
collision2 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 );
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 );
|
||||||
collision2 ghost();
|
collision2 ghost();
|
||||||
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) );
|
collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) );
|
||||||
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision3.angles = ( 0, 270, 38,6 );
|
collision3.angles = ( 0, 270, 38.6 );
|
||||||
collision3 ghost();
|
collision3 ghost();
|
||||||
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) );
|
collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) );
|
||||||
collision4 setmodel( "collision_geo_256x256x256_standard" );
|
collision4 setmodel( "collision_geo_256x256x256_standard" );
|
||||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 );
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 );
|
||||||
collision4 ghost();
|
collision4 ghost();
|
||||||
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
|
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
|
||||||
collision5a setmodel( "collision_geo_64x64x256_standard" );
|
collision5a setmodel( "collision_geo_64x64x256_standard" );
|
||||||
@ -101,7 +102,7 @@ spawned_collision_ffotd()
|
|||||||
collision5b ghost();
|
collision5b ghost();
|
||||||
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
|
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
|
||||||
collision6 setmodel( "collision_wall_128x128x10_standard" );
|
collision6 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 );
|
collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 );
|
||||||
collision6 ghost();
|
collision6 ghost();
|
||||||
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
|
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
|
||||||
collision7 setmodel( "collision_geo_64x64x256_standard" );
|
collision7 setmodel( "collision_geo_64x64x256_standard" );
|
||||||
@ -115,34 +116,63 @@ spawned_collision_ffotd()
|
|||||||
collision9 setmodel( "collision_ai_64x64x10" );
|
collision9 setmodel( "collision_ai_64x64x10" );
|
||||||
collision9.angles = ( 270, 180, -180 );
|
collision9.angles = ( 270, 180, -180 );
|
||||||
collision9 ghost();
|
collision9 ghost();
|
||||||
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) );
|
collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) );
|
||||||
collision10 setmodel( "collision_geo_128x128x128_standard" );
|
collision10 setmodel( "collision_geo_128x128x128_standard" );
|
||||||
collision10.angles = ( 354,9, 11, 0 );
|
collision10.angles = ( 354.9, 11, 0 );
|
||||||
collision10 ghost();
|
collision10 ghost();
|
||||||
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
|
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
|
||||||
collision11 setmodel( "collision_wall_128x128x10_standard" );
|
collision11 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision11.angles = vectorScale( ( 0, 0, 0 ), 292 );
|
collision11.angles = vectorscale( ( 0, 1, 0 ), 292.0 );
|
||||||
collision11 ghost();
|
collision11 ghost();
|
||||||
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
|
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
|
||||||
collision12 setmodel( "collision_wall_512x512x10_standard" );
|
collision12 setmodel( "collision_wall_512x512x10_standard" );
|
||||||
collision12.angles = ( 0, 0, 0 );
|
collision12.angles = ( 0, 0, 0 );
|
||||||
collision12 ghost();
|
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" );
|
||||||
|
level endon( "end_game" );
|
||||||
self freezecontrols( 1 );
|
self freezecontrols( 1 );
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
|
|
||||||
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
|
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
|
||||||
{
|
|
||||||
self freezecontrols( 0 );
|
self freezecontrols( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
#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()
|
||||||
@ -125,6 +126,8 @@ precache_createfx_fx()
|
|||||||
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;
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
//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( "t6_wpn_zmb_spoon_world" );
|
||||||
precachemodel( "c_zom_inmate_g_rarmspawn" );
|
precachemodel( "c_zom_inmate_g_rarmspawn" );
|
||||||
level thread wait_for_initial_conditions();
|
level thread wait_for_initial_conditions();
|
||||||
@ -34,7 +34,7 @@ init() //checked matches cerberus output
|
|||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
@ -44,59 +44,50 @@ spoon_easy_cleanup() //checked matches cerberus output
|
|||||||
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.attacker );
|
||||||
self notify( "killed_by_a_blundersplat" );
|
|
||||||
}
|
}
|
||||||
}
|
else if ( self.damageweapon == "bouncing_tomahawk_zm" )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( self.damageweapon == "bouncing_tomahawk_zm" )
|
|
||||||
{
|
{
|
||||||
if ( isplayer( self.attacker ) )
|
if ( isplayer( self.attacker ) )
|
||||||
{
|
|
||||||
self.attacker notify( "got_a_tomahawk_kill" );
|
self.attacker notify( "got_a_tomahawk_kill" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
if ( isdefined( self.attacker.killed_with_only_tomahawk ) )
|
||||||
if ( isDefined( self.attacker.killed_with_only_tomahawk ) )
|
|
||||||
{
|
{
|
||||||
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
|
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
|
||||||
{
|
|
||||||
self.attacker.killed_with_only_tomahawk = 0;
|
self.attacker.killed_with_only_tomahawk = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( isDefined( self.attacker.killed_something_thq ) )
|
if ( isdefined( self.attacker.killed_something_thq ) )
|
||||||
{
|
|
||||||
self.attacker.killed_something_thq = 1;
|
self.attacker.killed_something_thq = 1;
|
||||||
}
|
|
||||||
return 0;
|
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 );
|
self waittill( "killed_by_a_blundersplat", player );
|
||||||
|
|
||||||
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
|
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
|
||||||
{
|
|
||||||
return;
|
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 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -106,36 +97,39 @@ zombie_spoon_func() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 );
|
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" )
|
|
||||||
|
if ( weaponname == "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
|
||||||
{
|
{
|
||||||
b_poster_knocked_down = 1;
|
b_poster_knocked_down = 1;
|
||||||
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
|
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
|
||||||
m_poster delete();
|
m_poster delete();
|
||||||
if ( isDefined( attacker ) && isplayer( attacker ) )
|
|
||||||
{
|
if ( isdefined( attacker ) && isplayer( attacker ) )
|
||||||
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
|
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1.0;
|
||||||
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spork_door = getent( "spork_door", "targetname" );
|
spork_door = getent( "spork_door", "targetname" );
|
||||||
spork_door.targetname = "afterlife_door";
|
spork_door.targetname = "afterlife_door";
|
||||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||||
@ -145,10 +139,13 @@ wait_for_initial_conditions() //checked changed to match cerberus output
|
|||||||
m_spoon.health = 50000;
|
m_spoon.health = 50000;
|
||||||
m_spoon setcandamage( 1 );
|
m_spoon setcandamage( 1 );
|
||||||
b_spoon_shocked = 0;
|
b_spoon_shocked = 0;
|
||||||
|
|
||||||
while ( !b_spoon_shocked )
|
while ( !b_spoon_shocked )
|
||||||
{
|
{
|
||||||
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
|
||||||
|
|
||||||
m_spoon.health += damage;
|
m_spoon.health += damage;
|
||||||
|
|
||||||
if ( weaponname == "lightning_hands_zm" )
|
if ( weaponname == "lightning_hands_zm" )
|
||||||
{
|
{
|
||||||
b_spoon_shocked = 1;
|
b_spoon_shocked = 1;
|
||||||
@ -156,64 +153,66 @@ wait_for_initial_conditions() //checked changed to match cerberus output
|
|||||||
attacker playsound( "zmb_easteregg_laugh" );
|
attacker playsound( "zmb_easteregg_laugh" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_spoon_pickup show();
|
m_spoon_pickup show();
|
||||||
m_spoon_pickup.health = 10000;
|
m_spoon_pickup.health = 10000;
|
||||||
m_spoon_pickup setcandamage( 1 );
|
m_spoon_pickup setcandamage( 1 );
|
||||||
level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_spoon;
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ) //checked changed to match cerberus output
|
return false;
|
||||||
{
|
|
||||||
while ( isDefined( m_tomahawk ) )
|
|
||||||
{
|
|
||||||
wait 0.05;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon )
|
||||||
|
{
|
||||||
|
while ( isdefined( m_tomahawk ) )
|
||||||
|
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 );
|
||||||
@ -223,26 +222,23 @@ bucket_init() //checked matches cerberus output
|
|||||||
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 );
|
||||||
@ -254,12 +250,12 @@ dip_the_spoon() //checked matches cerberus output
|
|||||||
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 );
|
||||||
@ -269,37 +265,30 @@ thrust_the_spork() //checked matches cerberus output
|
|||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
player = _a377[ _k377 ];
|
|
||||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||||
{
|
{
|
||||||
flag_set( "soul_catchers_charged" );
|
flag_set( "soul_catchers_charged" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k377 = getNextArrayKey( _a377, _k377 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 1.0;
|
||||||
}
|
}
|
||||||
wait 1;
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
@ -1,18 +1,21 @@
|
|||||||
#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" );
|
precachemodel( "p6_zm_al_skull_afterlife" );
|
||||||
flag_init( "warden_blundergat_obtained" );
|
flag_init( "warden_blundergat_obtained" );
|
||||||
level thread wait_for_initial_conditions();
|
level thread wait_for_initial_conditions();
|
||||||
@ -33,13 +36,12 @@ wait_for_initial_conditions()
|
|||||||
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 = [];
|
level.sq_bg_macguffins = [];
|
||||||
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
|
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
|
||||||
_a46 = a_s_mcguffin;
|
|
||||||
_k46 = getFirstArrayKey( _a46 );
|
foreach ( struct in a_s_mcguffin )
|
||||||
while ( isDefined( _k46 ) )
|
|
||||||
{
|
{
|
||||||
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 );
|
||||||
@ -48,31 +50,35 @@ wait_for_initial_conditions()
|
|||||||
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" );
|
|
||||||
|
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||||
t_reward_pickup thread give_sq_bg_reward();
|
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 );
|
self waittill( "damage", amount, attacker );
|
||||||
|
|
||||||
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
|
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
|
||||||
{
|
{
|
||||||
playfx( level._effect["ee_skull_shot"], self.origin );
|
playfx( level._effect["ee_skull_shot"], self.origin );
|
||||||
self playsound( "zmb_powerpanel_activate" );
|
self playsound( "zmb_powerpanel_activate" );
|
||||||
self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
|
self thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
|
||||||
self thread wait_and_hide_sq_bg_macguffin();
|
self thread wait_and_hide_sq_bg_macguffin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,75 +89,76 @@ 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;
|
||||||
|
|
||||||
|
foreach ( macguffin in level.sq_bg_macguffins )
|
||||||
{
|
{
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_a119 = level.sq_bg_macguffins;
|
|
||||||
_k119 = getFirstArrayKey( _a119 );
|
|
||||||
while ( isDefined( _k119 ) )
|
|
||||||
{
|
|
||||||
macguffin = _a119[ _k119 ];
|
|
||||||
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
|
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
|
||||||
{
|
{
|
||||||
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;
|
||||||
macguffin notify( "caught_by_tomahawk" );
|
macguffin notify( "caught_by_tomahawk" );
|
||||||
macguffin.origin = grenade.origin;
|
macguffin.origin = grenade.origin;
|
||||||
macguffin linkto( m_tomahawk );
|
macguffin linkto( m_tomahawk );
|
||||||
macguffin thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
|
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 maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
|
||||||
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
|
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
_k119 = getNextArrayKey( _a119, _k119 );
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 );
|
level waittill( "sq_bg_macguffin_collected", player );
|
||||||
|
|
||||||
n_macguffins_collected++;
|
n_macguffins_collected++;
|
||||||
|
|
||||||
if ( n_macguffins_collected >= n_macguffins_total )
|
if ( n_macguffins_collected >= n_macguffins_total )
|
||||||
{
|
{
|
||||||
level notify( "all_macguffins_acquired" );
|
level notify( "all_macguffins_acquired" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else play_sq_bg_collected_vo( player );
|
else
|
||||||
|
play_sq_bg_collected_vo( player );
|
||||||
}
|
}
|
||||||
wait 1;
|
|
||||||
|
wait 1.0;
|
||||||
player playsound( "zmb_easteregg_laugh" );
|
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" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,20 +166,22 @@ 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 );
|
t_near waittill( "trigger", ent );
|
||||||
|
|
||||||
if ( isplayer( ent ) )
|
if ( isplayer( ent ) )
|
||||||
{
|
{
|
||||||
t_near thread sq_bg_spawn_rumble();
|
t_near thread sq_bg_spawn_rumble();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
|
|
||||||
if ( a_players.size == 1 )
|
if ( a_players.size == 1 )
|
||||||
{
|
{
|
||||||
if ( a_players[0] hasweapon( "blundergat_zm" ) )
|
if ( a_players[0] hasweapon( "blundergat_zm" ) )
|
||||||
@ -191,69 +200,67 @@ give_sq_bg_reward()
|
|||||||
str_reward_weapon = "blundergat_zm";
|
str_reward_weapon = "blundergat_zm";
|
||||||
str_loc = &"ZM_PRISON_SQ_BG";
|
str_loc = &"ZM_PRISON_SQ_BG";
|
||||||
}
|
}
|
||||||
|
|
||||||
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
|
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
|
||||||
m_reward_model moveto( m_reward_model.origin + vectorScale( ( 0, 0, 1 ), 14 ), 5 );
|
m_reward_model moveto( m_reward_model.origin + vectorscale( ( 0, 0, 1 ), 14.0 ), 5 );
|
||||||
level setclientfield( "sq_bg_reward_portal", 1 );
|
level setclientfield( "sq_bg_reward_portal", 1 );
|
||||||
self sethintstring( str_loc );
|
self sethintstring( str_loc );
|
||||||
for ( ;; )
|
|
||||||
{
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
current_weapon = player getcurrentweapon();
|
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() )
|
|
||||||
|
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 ) )
|
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
|
||||||
else self delete();
|
{
|
||||||
|
self delete();
|
||||||
level setclientfield( "sq_bg_reward_portal", 0 );
|
level setclientfield( "sq_bg_reward_portal", 0 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
m_reward_model delete();
|
m_reward_model delete();
|
||||||
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
|
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 ) )
|
|
||||||
{
|
{
|
||||||
player = _a285[ _k285 ];
|
|
||||||
if ( player istouching( self ) )
|
if ( player istouching( self ) )
|
||||||
{
|
|
||||||
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
|
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 );
|
self takeweapon( current_weapon );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
primaries = self getweaponslistprimaries();
|
primaries = self getweaponslistprimaries();
|
||||||
if ( isDefined( primaries ) && primaries.size >= 2 )
|
|
||||||
{
|
if ( isdefined( primaries ) && primaries.size >= 2 )
|
||||||
self takeweapon( current_weapon );
|
self takeweapon( current_weapon );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self giveweapon( reward_weapon );
|
self giveweapon( reward_weapon );
|
||||||
self switchtoweapon( reward_weapon );
|
self switchtoweapon( reward_weapon );
|
||||||
flag_set( "warden_blundergat_obtained" );
|
flag_set( "warden_blundergat_obtained" );
|
||||||
@ -263,25 +270,20 @@ take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_ove
|
|||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
player = _a327[ _k327 ];
|
|
||||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||||
{
|
{
|
||||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k327 = getNextArrayKey( _a327, _k327 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 1.0;
|
||||||
}
|
}
|
||||||
wait 1;
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
#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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,44 +22,43 @@ 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" );
|
self waittill( "al_all_setup" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
v_original_origin = ( self.origin[0], self.origin[1], 0 );
|
v_original_origin = ( self.origin[0], self.origin[1], 0 );
|
||||||
v_original_angles = self.angles;
|
v_original_angles = self.angles;
|
||||||
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
|
v_forward_point = self.origin + anglestoforward( self.angles ) * 10;
|
||||||
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
|
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
|
||||||
|
|
||||||
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
|
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
|
||||||
{
|
{
|
||||||
v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
|
v_new_forward_point = self.origin + anglestoforward( self.angles ) * 10;
|
||||||
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
|
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
|
||||||
move_length = length( ( self.origin[0], self.origin[1], 0 ) - v_original_origin );
|
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 )
|
|
||||||
{
|
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.sq_fc_still_valid = 0;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
level notify( "someone_touched_controls" );
|
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()
|
||||||
@ -78,9 +77,11 @@ player_intermission_prison()
|
|||||||
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" );
|
points = getentarray( "info_intermission", "classname" );
|
||||||
|
|
||||||
if ( points.size < 1 )
|
if ( points.size < 1 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -89,55 +90,58 @@ player_intermission_prison()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.game_over_bg = newclienthudelem( self );
|
self.game_over_bg = newclienthudelem( self );
|
||||||
self.game_over_bg.horzalign = "fullscreen";
|
self.game_over_bg.horzalign = "fullscreen";
|
||||||
self.game_over_bg.vertalign = "fullscreen";
|
self.game_over_bg.vertalign = "fullscreen";
|
||||||
self.game_over_bg setshader( "black", 640, 480 );
|
self.game_over_bg setshader( "black", 640, 480 );
|
||||||
self.game_over_bg.alpha = 1;
|
self.game_over_bg.alpha = 1;
|
||||||
visionsetnaked( "cheat_bw", 0,05 );
|
visionsetnaked( "cheat_bw", 0.05 );
|
||||||
org = undefined;
|
org = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
points = array_randomize( points );
|
points = array_randomize( points );
|
||||||
i = 0;
|
|
||||||
while ( i < points.size )
|
for ( i = 0; i < points.size; i++ )
|
||||||
{
|
{
|
||||||
point = points[i];
|
point = points[i];
|
||||||
if ( !isDefined( org ) )
|
|
||||||
{
|
if ( !isdefined( org ) )
|
||||||
self spawn( point.origin, point.angles );
|
self spawn( point.origin, point.angles );
|
||||||
}
|
|
||||||
if ( isDefined( points[ i ].target ) )
|
if ( isdefined( points[i].target ) )
|
||||||
{
|
{
|
||||||
if ( !isDefined( org ) )
|
if ( !isdefined( org ) )
|
||||||
{
|
{
|
||||||
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) );
|
org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) );
|
||||||
org setmodel( "tag_origin" );
|
org setmodel( "tag_origin" );
|
||||||
}
|
}
|
||||||
|
|
||||||
org.origin = points[i].origin;
|
org.origin = points[i].origin;
|
||||||
org.angles = points[i].angles;
|
org.angles = points[i].angles;
|
||||||
j = 0;
|
|
||||||
while ( j < get_players().size )
|
for ( j = 0; j < get_players().size; j++ )
|
||||||
{
|
{
|
||||||
player = get_players()[j];
|
player = get_players()[j];
|
||||||
player camerasetposition( org );
|
player camerasetposition( org );
|
||||||
player camerasetlookat();
|
player camerasetlookat();
|
||||||
player cameraactivate( 1 );
|
player cameraactivate( 1 );
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
speed = 20;
|
speed = 20;
|
||||||
if ( isDefined( points[ i ].speed ) )
|
|
||||||
{
|
if ( isdefined( points[i].speed ) )
|
||||||
speed = points[i].speed;
|
speed = points[i].speed;
|
||||||
}
|
|
||||||
target_point = getstruct( points[i].target, "targetname" );
|
target_point = getstruct( points[i].target, "targetname" );
|
||||||
dist = distance( points[i].origin, target_point.origin );
|
dist = distance( points[i].origin, target_point.origin );
|
||||||
time = dist / speed;
|
time = dist / speed;
|
||||||
q_time = time * 0,25;
|
q_time = time * 0.25;
|
||||||
|
|
||||||
if ( q_time > 1 )
|
if ( q_time > 1 )
|
||||||
{
|
|
||||||
q_time = 1;
|
q_time = 1;
|
||||||
}
|
|
||||||
self.game_over_bg fadeovertime( q_time );
|
self.game_over_bg fadeovertime( q_time );
|
||||||
self.game_over_bg.alpha = 0;
|
self.game_over_bg.alpha = 0;
|
||||||
org moveto( target_point.origin, time, q_time, q_time );
|
org moveto( target_point.origin, time, q_time, q_time );
|
||||||
@ -145,18 +149,14 @@ player_intermission_prison()
|
|||||||
wait( time - q_time );
|
wait( time - q_time );
|
||||||
self.game_over_bg fadeovertime( q_time );
|
self.game_over_bg fadeovertime( q_time );
|
||||||
self.game_over_bg.alpha = 1;
|
self.game_over_bg.alpha = 1;
|
||||||
wait q_time;
|
wait( q_time );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
self.game_over_bg fadeovertime( 1 );
|
self.game_over_bg fadeovertime( 1 );
|
||||||
self.game_over_bg.alpha = 0;
|
self.game_over_bg.alpha = 0;
|
||||||
wait 5;
|
wait 5;
|
||||||
self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 );
|
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,15 +1,16 @@
|
|||||||
#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();
|
||||||
}
|
}
|
||||||
@ -18,15 +19,18 @@ 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;
|
n_time = 0;
|
||||||
|
|
||||||
while ( self adsbuttonpressed() && n_time < 25 )
|
while ( self adsbuttonpressed() && n_time < 25 )
|
||||||
{
|
{
|
||||||
n_time++;
|
n_time++;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
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 ) )
|
|
||||||
|
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 do_player_general_vox( "general", "scare_react", undefined, 100 );
|
self do_player_general_vox( "general", "scare_react", undefined, 100 );
|
||||||
self playsoundtoplayer( "zmb_easteregg_face", self );
|
self playsoundtoplayer( "zmb_easteregg_face", self );
|
||||||
@ -38,44 +42,43 @@ track_player_eyes()
|
|||||||
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
|
||||||
self.wth_elem.hidewheninmenu = 1;
|
self.wth_elem.hidewheninmenu = 1;
|
||||||
j_time = 0;
|
j_time = 0;
|
||||||
|
|
||||||
while ( self adsbuttonpressed() && j_time < 5 )
|
while ( self adsbuttonpressed() && j_time < 5 )
|
||||||
{
|
{
|
||||||
j_time++;
|
j_time++;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.wth_elem destroy();
|
self.wth_elem destroy();
|
||||||
b_saw_the_wth = 1;
|
b_saw_the_wth = 1;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
|
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 ) )
|
|
||||||
{
|
{
|
||||||
str_sniper = _a77[ _k77 ];
|
|
||||||
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
|
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
_k77 = getNextArrayKey( _a77, _k77 );
|
|
||||||
}
|
return false;
|
||||||
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;
|
||||||
@ -86,23 +89,24 @@ play_scary_lightning()
|
|||||||
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;
|
||||||
|
|
||||||
|
@ -1,51 +1,42 @@
|
|||||||
#include maps/mp/zombies/_zm_powerups;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/gametypes_zm/zmeat;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_audio_announcer;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_game_module_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_game_module_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_audio_announcer;
|
||||||
|
#include maps\mp\gametypes_zm\zmeat;
|
||||||
|
#include maps\mp\zombies\_zm_powerups;
|
||||||
|
|
||||||
award_grenades_for_team( team )
|
award_grenades_for_team( team )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lethal_grenade = players[i] get_player_lethal_grenade();
|
lethal_grenade = players[i] get_player_lethal_grenade();
|
||||||
players[i] giveweapon( lethal_grenade );
|
players[i] giveweapon( lethal_grenade );
|
||||||
players[i] setweaponammoclip( lethal_grenade, 4 );
|
players[i] setweaponammoclip( lethal_grenade, 4 );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_players_on_meat_team( team )
|
get_players_on_meat_team( team )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
players_on_team = [];
|
players_on_team = [];
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
players_on_team[players_on_team.size] = players[i];
|
players_on_team[players_on_team.size] = players[i];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return players_on_team;
|
return players_on_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,56 +44,44 @@ get_alive_players_on_meat_team( team )
|
|||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
players_on_team = [];
|
players_on_team = [];
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
|
||||||
if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
players_on_team[players_on_team.size] = players[i];
|
players_on_team[players_on_team.size] = players[i];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return players_on_team;
|
return players_on_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
init_minigun_ring()
|
init_minigun_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._minigun_ring ) )
|
if ( isdefined( level._minigun_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._minigun_ring.angles = ring_pos.angles;
|
level._minigun_ring.angles = ring_pos.angles;
|
||||||
level._minigun_ring setmodel( ring_pos.script_parameters );
|
level._minigun_ring setmodel( ring_pos.script_parameters );
|
||||||
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
|
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
|
||||||
if ( isDefined( level._minigun_ring_clip ) )
|
|
||||||
{
|
if ( isdefined( level._minigun_ring_clip ) )
|
||||||
level._minigun_ring_clip linkto( level._minigun_ring );
|
level._minigun_ring_clip linkto( level._minigun_ring );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
||||||
}
|
|
||||||
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
|
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
|
||||||
if ( isDefined( level._minigun_ring_trig ) )
|
|
||||||
|
if ( isdefined( level._minigun_ring_trig ) )
|
||||||
{
|
{
|
||||||
level._minigun_ring_trig enablelinkto();
|
level._minigun_ring_trig enablelinkto();
|
||||||
level._minigun_ring_trig linkto( level._minigun_ring );
|
level._minigun_ring_trig linkto( level._minigun_ring );
|
||||||
@ -113,41 +92,38 @@ init_minigun_ring()
|
|||||||
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
||||||
}
|
|
||||||
level._minigun_ring thread move_ring( ring_pos );
|
level._minigun_ring thread move_ring( ring_pos );
|
||||||
level._minigun_ring thread rotate_ring( 1 );
|
level._minigun_ring thread rotate_ring( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_ammo_ring()
|
init_ammo_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._ammo_ring ) )
|
if ( isdefined( level._ammo_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
name = level._meat_location + "_meat_ammo";
|
name = level._meat_location + "_meat_ammo";
|
||||||
ring_pos = getstruct( name, "script_noteworthy" );
|
ring_pos = getstruct( name, "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._ammo_ring.angles = ring_pos.angles;
|
level._ammo_ring.angles = ring_pos.angles;
|
||||||
level._ammo_ring setmodel( ring_pos.script_parameters );
|
level._ammo_ring setmodel( ring_pos.script_parameters );
|
||||||
name = level._meat_location + "_meat_ammo_clip";
|
name = level._meat_location + "_meat_ammo_clip";
|
||||||
level._ammo_ring_clip = getent( name, "script_noteworthy" );
|
level._ammo_ring_clip = getent( name, "script_noteworthy" );
|
||||||
if ( isDefined( level._ammo_ring_clip ) )
|
|
||||||
{
|
if ( isdefined( level._ammo_ring_clip ) )
|
||||||
level._ammo_ring_clip linkto( level._ammo_ring );
|
level._ammo_ring_clip linkto( level._ammo_ring );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
||||||
}
|
|
||||||
name = level._meat_location + "_meat_ammo_trig";
|
name = level._meat_location + "_meat_ammo_trig";
|
||||||
level._ammo_ring_trig = getent( name, "targetname" );
|
level._ammo_ring_trig = getent( name, "targetname" );
|
||||||
if ( isDefined( level._ammo_ring_clip ) )
|
|
||||||
|
if ( isdefined( level._ammo_ring_clip ) )
|
||||||
{
|
{
|
||||||
level._ammo_ring_trig enablelinkto();
|
level._ammo_ring_trig enablelinkto();
|
||||||
level._ammo_ring_trig linkto( level._ammo_ring );
|
level._ammo_ring_trig linkto( level._ammo_ring );
|
||||||
@ -158,63 +134,66 @@ init_ammo_ring()
|
|||||||
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
||||||
}
|
|
||||||
level._ammo_ring thread move_ring( ring_pos );
|
level._ammo_ring thread move_ring( ring_pos );
|
||||||
level._ammo_ring thread rotate_ring( 1 );
|
level._ammo_ring thread rotate_ring( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
init_splitter_ring()
|
init_splitter_ring()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._splitter_ring ) )
|
if ( isdefined( level._splitter_ring ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
||||||
if ( !isDefined( ring_pos ) )
|
|
||||||
{
|
if ( !isdefined( ring_pos ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
||||||
level._splitter_ring.angles = ring_pos.angles;
|
level._splitter_ring.angles = ring_pos.angles;
|
||||||
level._splitter_ring setmodel( ring_pos.script_parameters );
|
level._splitter_ring setmodel( ring_pos.script_parameters );
|
||||||
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
|
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
|
||||||
level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" );
|
level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" );
|
||||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
|
||||||
|
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||||
{
|
{
|
||||||
level._splitter_ring_trig1 enablelinkto();
|
level._splitter_ring_trig1 enablelinkto();
|
||||||
level._splitter_ring_trig2 enablelinkto();
|
level._splitter_ring_trig2 enablelinkto();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
||||||
}
|
|
||||||
level._splitter_ring notsolid();
|
level._splitter_ring notsolid();
|
||||||
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
||||||
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
||||||
level._meat_icon linkto( level._splitter_ring );
|
level._meat_icon linkto( level._splitter_ring );
|
||||||
level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
|
level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
|
||||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
|
||||||
|
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||||
{
|
{
|
||||||
level._splitter_ring_trig1 linkto( level._splitter_ring );
|
level._splitter_ring_trig1 linkto( level._splitter_ring );
|
||||||
level._splitter_ring_trig2 linkto( level._splitter_ring );
|
level._splitter_ring_trig2 linkto( level._splitter_ring );
|
||||||
level thread ring_toss( level._splitter_ring_trig1, "splitter" );
|
level thread ring_toss( level._splitter_ring_trig1, "splitter" );
|
||||||
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
||||||
}
|
}
|
||||||
|
|
||||||
level._splitter_ring thread move_ring( ring_pos );
|
level._splitter_ring thread move_ring( ring_pos );
|
||||||
}
|
}
|
||||||
|
|
||||||
ring_toss( trig, type )
|
ring_toss( trig, type )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
while ( isDefined( level._ring_triggered ) && level._ring_triggered )
|
if ( isdefined( level._ring_triggered ) && level._ring_triggered )
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving )
|
|
||||||
|
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) )
|
||||||
{
|
{
|
||||||
if ( level.item_meat istouching( trig ) )
|
if ( level.item_meat istouching( trig ) )
|
||||||
{
|
{
|
||||||
@ -223,7 +202,8 @@ ring_toss( trig, type )
|
|||||||
level thread ring_cooldown();
|
level thread ring_cooldown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,27 +233,25 @@ meat_splitter( trig )
|
|||||||
{
|
{
|
||||||
level endon( "meat_grabbed" );
|
level endon( "meat_grabbed" );
|
||||||
level endon( "meat_kicked" );
|
level endon( "meat_kicked" );
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
|
||||||
{
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
exit_trig = getent( trig.target, "targetname" );
|
exit_trig = getent( trig.target, "targetname" );
|
||||||
exit_struct = getstruct( trig.target, "targetname" );
|
exit_struct = getstruct( trig.target, "targetname" );
|
||||||
while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
|
||||||
{
|
while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
playfx( level._effect["fw_burst"], exit_trig.origin );
|
playfx( level._effect["fw_burst"], exit_trig.origin );
|
||||||
flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) );
|
flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) );
|
||||||
velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) );
|
velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) );
|
||||||
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
||||||
velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) );
|
velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) );
|
||||||
velocity3 = ( velocity[0], velocity[1], 100 );
|
velocity3 = ( velocity[0], velocity[1], 100 );
|
||||||
@ -284,12 +262,12 @@ meat_splitter( trig )
|
|||||||
player._spawning_meat = 1;
|
player._spawning_meat = 1;
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
thread split_meat( player, org, velocity1, velocity2, velocity );
|
thread split_meat( player, org, velocity1, velocity2, velocity );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
while ( isDefined( level.splitting_meat ) && level.splitting_meat )
|
|
||||||
{
|
while ( isdefined( level.splitting_meat ) && level.splitting_meat )
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
}
|
|
||||||
player._spawning_meat = 0;
|
player._spawning_meat = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,78 +282,69 @@ split_meat( player, org, vel1, vel2, vel3 )
|
|||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
||||||
real_meat = random( level._fake_meats );
|
real_meat = random( level._fake_meats );
|
||||||
_a330 = level._fake_meats;
|
|
||||||
_k330 = getFirstArrayKey( _a330 );
|
foreach ( meat in level._fake_meats )
|
||||||
while ( isDefined( _k330 ) )
|
|
||||||
{
|
{
|
||||||
meat = _a330[ _k330 ];
|
|
||||||
if ( real_meat != meat )
|
if ( real_meat != meat )
|
||||||
{
|
{
|
||||||
meat._fake_meat = 1;
|
meat._fake_meat = 1;
|
||||||
meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup();
|
meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
meat._fake_meat = 0;
|
meat._fake_meat = 0;
|
||||||
level.item_meat = meat;
|
level.item_meat = meat;
|
||||||
}
|
}
|
||||||
_k330 = getNextArrayKey( _a330, _k330 );
|
|
||||||
}
|
|
||||||
level.splitting_meat = 0;
|
level.splitting_meat = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
minigun_prize( trig )
|
minigun_prize( trig )
|
||||||
{
|
{
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level thread minigun_toss_cooldown();
|
level thread minigun_toss_cooldown();
|
||||||
|
|
||||||
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" );
|
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" );
|
||||||
level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
ammo_prize( trig )
|
ammo_prize( trig )
|
||||||
{
|
{
|
||||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
if ( !isdefined( level.item_meat ) )
|
||||||
if ( !isDefined( level.item_meat ) )
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
playfx( level._effect["poltergeist"], trig.origin );
|
playfx( level._effect["poltergeist"], trig.origin );
|
||||||
level thread ammo_toss_cooldown();
|
level thread ammo_toss_cooldown();
|
||||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" );
|
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" );
|
||||||
level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
minigun_toss_cooldown()
|
minigun_toss_cooldown()
|
||||||
{
|
{
|
||||||
level._minigun_toss_cooldown = 1;
|
level._minigun_toss_cooldown = 1;
|
||||||
if ( isDefined( level._minigun_icon ) )
|
|
||||||
{
|
if ( isdefined( level._minigun_icon ) )
|
||||||
level._minigun_icon delete();
|
level._minigun_icon delete();
|
||||||
}
|
|
||||||
waittill_any_or_timeout( 120, "meat_end" );
|
waittill_any_or_timeout( 120, "meat_end" );
|
||||||
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
||||||
level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin );
|
level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin );
|
||||||
@ -388,10 +357,10 @@ minigun_toss_cooldown()
|
|||||||
ammo_toss_cooldown()
|
ammo_toss_cooldown()
|
||||||
{
|
{
|
||||||
level._ammo_toss_cooldown = 1;
|
level._ammo_toss_cooldown = 1;
|
||||||
if ( isDefined( level._ammo_icon ) )
|
|
||||||
{
|
if ( isdefined( level._ammo_icon ) )
|
||||||
level._ammo_icon delete();
|
level._ammo_icon delete();
|
||||||
}
|
|
||||||
waittill_any_or_timeout( 60, "meat_end" );
|
waittill_any_or_timeout( 60, "meat_end" );
|
||||||
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
||||||
level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin );
|
level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin );
|
||||||
@ -405,119 +374,120 @@ wait_for_team_death( team )
|
|||||||
{
|
{
|
||||||
level endon( "meat_end" );
|
level endon( "meat_end" );
|
||||||
encounters_team = undefined;
|
encounters_team = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
while ( isDefined( level._checking_for_save ) && level._checking_for_save )
|
|
||||||
{
|
while ( isdefined( level._checking_for_save ) && level._checking_for_save )
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
|
||||||
alive_team_players = get_alive_players_on_meat_team( team );
|
alive_team_players = get_alive_players_on_meat_team( team );
|
||||||
while ( alive_team_players.size > 0 )
|
|
||||||
|
if ( alive_team_players.size > 0 )
|
||||||
{
|
{
|
||||||
encounters_team = alive_team_players[0]._encounters_team;
|
encounters_team = alive_team_players[0]._encounters_team;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ( !isDefined( encounters_team ) )
|
|
||||||
{
|
if ( !isdefined( encounters_team ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
winning_team = "A";
|
winning_team = "A";
|
||||||
|
|
||||||
if ( encounters_team == "A" )
|
if ( encounters_team == "A" )
|
||||||
{
|
|
||||||
winning_team = "B";
|
winning_team = "B";
|
||||||
}
|
|
||||||
level notify( "meat_end" );
|
level notify( "meat_end", winning_team );
|
||||||
}
|
}
|
||||||
|
|
||||||
check_should_save_player( team )
|
check_should_save_player( team )
|
||||||
{
|
{
|
||||||
if ( !isDefined( level._meat_on_team ) )
|
if ( !isdefined( level._meat_on_team ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
level._checking_for_save = 1;
|
level._checking_for_save = 1;
|
||||||
players = get_players_on_meat_team( team );
|
players = get_players_on_meat_team( team );
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
player = players[i];
|
player = players[i];
|
||||||
if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
|
||||||
|
if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||||
{
|
{
|
||||||
while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||||
{
|
{
|
||||||
if ( level._meat_on_team != player._meat_team )
|
if ( level._meat_on_team != player._meat_team )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( !isdefined( player ) )
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !isDefined( player ) )
|
|
||||||
{
|
{
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player )
|
|
||||||
|
if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) )
|
||||||
{
|
{
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
|
||||||
|
if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||||
{
|
{
|
||||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
{
|
||||||
level thread revive_saved_player( player );
|
level thread revive_saved_player( player );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_save_player()
|
watch_save_player()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level._meat_on_team ) )
|
if ( !isdefined( level._meat_on_team ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||||
if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
return false;
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
level._checking_for_save = 1;
|
level._checking_for_save = 1;
|
||||||
while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
|
||||||
|
while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) )
|
||||||
{
|
{
|
||||||
if ( level._meat_on_team != self._meat_team )
|
if ( level._meat_on_team != self._meat_team )
|
||||||
{
|
break;
|
||||||
|
|
||||||
|
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team )
|
||||||
|
break;
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team )
|
|
||||||
|
if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
||||||
{
|
{
|
||||||
}
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
else
|
|
||||||
{
|
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
|
||||||
{
|
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
|
||||||
{
|
{
|
||||||
level thread revive_saved_player( self );
|
level thread revive_saved_player( self );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
revive_saved_player( player )
|
revive_saved_player( player )
|
||||||
@ -525,11 +495,11 @@ revive_saved_player( player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
||||||
player playsound( level.zmb_laugh_alias );
|
player playsound( level.zmb_laugh_alias );
|
||||||
wait 0,25;
|
wait 0.25;
|
||||||
playfx( level._effect["poltergeist"], player.origin );
|
playfx( level._effect["poltergeist"], player.origin );
|
||||||
playsoundatposition( "zmb_bolt", player.origin );
|
playsoundatposition( "zmb_bolt", player.origin );
|
||||||
earthquake( 0,5, 0,75, player.origin, 1000 );
|
earthquake( 0.5, 0.75, player.origin, 1000 );
|
||||||
player thread maps/mp/zombies/_zm_laststand::auto_revive( player );
|
player thread maps\mp\zombies\_zm_laststand::auto_revive( player );
|
||||||
player._saved_by_throw++;
|
player._saved_by_throw++;
|
||||||
level._checking_for_save = 0;
|
level._checking_for_save = 0;
|
||||||
}
|
}
|
||||||
@ -544,9 +514,9 @@ item_meat_spawn( origin )
|
|||||||
org = origin;
|
org = origin;
|
||||||
player = get_players()[0];
|
player = get_players()[0];
|
||||||
player._spawning_meat = 1;
|
player._spawning_meat = 1;
|
||||||
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) );
|
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) );
|
||||||
playsoundatposition( "zmb_spawn_powerup", org );
|
playsoundatposition( "zmb_spawn_powerup", org );
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
player._spawning_meat = undefined;
|
player._spawning_meat = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,6 +532,7 @@ init_item_meat( gametype )
|
|||||||
set_gamemode_var_once( "item_meat_name", "item_head_zm" );
|
set_gamemode_var_once( "item_meat_name", "item_head_zm" );
|
||||||
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
||||||
}
|
}
|
||||||
|
|
||||||
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
||||||
set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) );
|
set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) );
|
||||||
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
|
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
|
||||||
@ -576,40 +547,45 @@ meat_intro( launch_spot )
|
|||||||
level thread multi_launch( launch_spot );
|
level thread multi_launch( launch_spot );
|
||||||
launch_meat( launch_spot );
|
launch_meat( launch_spot );
|
||||||
drop_meat( level._meat_start_point );
|
drop_meat( level._meat_start_point );
|
||||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
launch_meat( launch_spot )
|
launch_meat( launch_spot )
|
||||||
{
|
{
|
||||||
level waittill( "launch_meat" );
|
level waittill( "launch_meat" );
|
||||||
|
|
||||||
spots = getstructarray( launch_spot, "targetname" );
|
spots = getstructarray( launch_spot, "targetname" );
|
||||||
if ( isDefined( spots ) && spots.size > 0 )
|
|
||||||
|
if ( isdefined( spots ) && spots.size > 0 )
|
||||||
{
|
{
|
||||||
spot = random( spots );
|
spot = random( spots );
|
||||||
meat = spawn( "script_model", spot.origin );
|
meat = spawn( "script_model", spot.origin );
|
||||||
meat setmodel( "tag_origin" );
|
meat setmodel( "tag_origin" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
||||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||||
dest = spot;
|
dest = spot;
|
||||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
|
||||||
|
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||||
{
|
{
|
||||||
new_dest = getstruct( dest.target, "targetname" );
|
new_dest = getstruct( dest.target, "targetname" );
|
||||||
dest = new_dest;
|
dest = new_dest;
|
||||||
dist = distance( new_dest.origin, meat.origin );
|
dist = distance( new_dest.origin, meat.origin );
|
||||||
time = dist / 700;
|
time = dist / 700;
|
||||||
meat moveto( new_dest.origin, time );
|
meat moveto( new_dest.origin, time );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin );
|
playfx( level._effect["fw_burst"], meat.origin );
|
||||||
wait randomfloatrange( 0,2, 0,5 );
|
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
||||||
wait randomfloatrange( 0,5, 0,75 );
|
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
||||||
wait randomfloatrange( 0,5, 0,75 );
|
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_burst"], meat.origin );
|
playfx( level._effect["fw_burst"], meat.origin );
|
||||||
meat delete();
|
meat delete();
|
||||||
@ -619,41 +595,42 @@ launch_meat( launch_spot )
|
|||||||
multi_launch( launch_spot )
|
multi_launch( launch_spot )
|
||||||
{
|
{
|
||||||
spots = getstructarray( launch_spot, "targetname" );
|
spots = getstructarray( launch_spot, "targetname" );
|
||||||
if ( isDefined( spots ) && spots.size > 0 )
|
|
||||||
|
if ( isdefined( spots ) && spots.size > 0 )
|
||||||
{
|
{
|
||||||
x = 0;
|
for ( x = 0; x < 3; x++ )
|
||||||
while ( x < 3 )
|
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < spots.size; i++ )
|
||||||
while ( i < spots.size )
|
|
||||||
{
|
{
|
||||||
delay = randomfloatrange( 0,1, 0,25 );
|
delay = randomfloatrange( 0.1, 0.25 );
|
||||||
level thread fake_launch( spots[i], delay );
|
level thread fake_launch( spots[i], delay );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
wait randomfloatrange( 0,25, 0,75 );
|
|
||||||
|
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||||
|
|
||||||
if ( x > 1 )
|
if ( x > 1 )
|
||||||
|
level notify( "launch_meat" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
|
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||||
level notify( "launch_meat" );
|
level notify( "launch_meat" );
|
||||||
}
|
}
|
||||||
x++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else wait randomfloatrange( 0,25, 0,75 );
|
|
||||||
level notify( "launch_meat" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fake_launch( launch_spot, delay )
|
fake_launch( launch_spot, delay )
|
||||||
{
|
{
|
||||||
wait delay;
|
wait( delay );
|
||||||
wait randomfloatrange( 0,1, 4 );
|
wait( randomfloatrange( 0.1, 4 ) );
|
||||||
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
||||||
meat setmodel( "tag_origin" );
|
meat setmodel( "tag_origin" );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
|
playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
|
||||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||||
dest = launch_spot;
|
dest = launch_spot;
|
||||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
|
||||||
|
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||||
{
|
{
|
||||||
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
||||||
new_dest = getstruct( dest.target, "targetname" );
|
new_dest = getstruct( dest.target, "targetname" );
|
||||||
@ -661,8 +638,10 @@ fake_launch( launch_spot, delay )
|
|||||||
dist = distance( new_dest.origin + random_offset, meat.origin );
|
dist = distance( new_dest.origin + random_offset, meat.origin );
|
||||||
time = dist / 700;
|
time = dist / 700;
|
||||||
meat moveto( new_dest.origin + random_offset, time );
|
meat moveto( new_dest.origin + random_offset, time );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
}
|
}
|
||||||
|
|
||||||
meat playsound( "zmb_souls_end" );
|
meat playsound( "zmb_souls_end" );
|
||||||
playfx( level._effect["fw_pre_burst"], meat.origin );
|
playfx( level._effect["fw_pre_burst"], meat.origin );
|
||||||
meat delete();
|
meat delete();
|
||||||
@ -670,7 +649,7 @@ fake_launch( launch_spot, delay )
|
|||||||
|
|
||||||
drop_meat( drop_spot )
|
drop_meat( drop_spot )
|
||||||
{
|
{
|
||||||
meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) );
|
meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) );
|
||||||
meat setmodel( "tag_origin" );
|
meat setmodel( "tag_origin" );
|
||||||
dist = distance( meat.origin, drop_spot );
|
dist = distance( meat.origin, drop_spot );
|
||||||
time = dist / 400;
|
time = dist / 400;
|
||||||
@ -678,7 +657,9 @@ drop_meat( drop_spot )
|
|||||||
meat moveto( drop_spot, time );
|
meat moveto( drop_spot, time );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
||||||
|
|
||||||
meat waittill( "movedone" );
|
meat waittill( "movedone" );
|
||||||
|
|
||||||
playfx( level._effect["fw_impact"], drop_spot );
|
playfx( level._effect["fw_impact"], drop_spot );
|
||||||
level notify( "reset_meat" );
|
level notify( "reset_meat" );
|
||||||
meat delete();
|
meat delete();
|
||||||
|
@ -1,41 +1,44 @@
|
|||||||
//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 moveto( position.origin, randomintrange( 30, 45 ) );
|
||||||
|
|
||||||
self waittill( "movedone" );
|
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,9 +1,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -30,20 +32,24 @@ init()
|
|||||||
|
|
||||||
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 waittill( "movedone" );
|
||||||
m_lock movez( -100, 0,5, 0,5 );
|
|
||||||
|
m_lock movez( -100, 0.5, 0.5 );
|
||||||
|
|
||||||
m_lock waittill( "movedone" );
|
m_lock waittill( "movedone" );
|
||||||
|
|
||||||
m_lock delete();
|
m_lock delete();
|
||||||
self notify( "box_moving" );
|
self notify( "box_moving" );
|
||||||
level notify( "weapon_fly_away_end" );
|
level notify( "weapon_fly_away_end" );
|
||||||
@ -51,33 +57,23 @@ custom_joker_movement()
|
|||||||
|
|
||||||
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 )
|
||||||
}
|
|
||||||
_a92 = level.chests;
|
|
||||||
_k92 = getFirstArrayKey( _a92 );
|
|
||||||
while ( isDefined( _k92 ) )
|
|
||||||
{
|
|
||||||
chest = _a92[ _k92 ];
|
|
||||||
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
|
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 );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
self notify( "zbarrier_state_change" );
|
self notify( "zbarrier_state_change" );
|
||||||
|
|
||||||
switch ( state )
|
switch ( state )
|
||||||
{
|
{
|
||||||
case "away":
|
case "away":
|
||||||
@ -93,7 +89,7 @@ set_magic_box_zbarrier_state( state )
|
|||||||
case "initial":
|
case "initial":
|
||||||
self showzbarrierpiece( 1 );
|
self showzbarrierpiece( 1 );
|
||||||
self thread magic_box_initial();
|
self thread magic_box_initial();
|
||||||
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think );
|
thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
|
||||||
self.state = "close";
|
self.state = "close";
|
||||||
break;
|
break;
|
||||||
case "open":
|
case "open":
|
||||||
@ -113,10 +109,9 @@ set_magic_box_zbarrier_state( state )
|
|||||||
self.owner.is_locked = 0;
|
self.owner.is_locked = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ( isDefined( level.custom_magicbox_state_handler ) )
|
if ( isdefined( level.custom_magicbox_state_handler ) )
|
||||||
{
|
|
||||||
self [[ level.custom_magicbox_state_handler ]]( state );
|
self [[ level.custom_magicbox_state_handler ]]( state );
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,10 +128,10 @@ 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";
|
||||||
}
|
}
|
||||||
@ -147,10 +142,10 @@ magic_box_leaves()
|
|||||||
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 );
|
||||||
}
|
}
|
||||||
@ -160,10 +155,10 @@ 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" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,10 +166,10 @@ 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 );
|
||||||
}
|
}
|
||||||
@ -191,27 +186,24 @@ magic_box_do_weapon_rise()
|
|||||||
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++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,61 +1,126 @@
|
|||||||
#include maps/mp/zombies/_zm_audio;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_score;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
|
#include maps\mp\zombies\_zm_pers_upgrades_functions;
|
||||||
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
{
|
{
|
||||||
precacheitem( weapon_name );
|
precacheitem( weapon_name );
|
||||||
precacheitem( flourish_weapon_name );
|
precacheitem( flourish_weapon_name );
|
||||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon );
|
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < melee_weapon_triggers.size )
|
for ( i = 0; i < melee_weapon_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||||
if ( isDefined( knife_model ) )
|
|
||||||
{
|
if ( isdefined( knife_model ) )
|
||||||
knife_model hide();
|
knife_model hide();
|
||||||
}
|
|
||||||
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||||
|
|
||||||
|
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||||
|
{
|
||||||
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
cursor_hint = "HINT_WEAPON";
|
||||||
|
cursor_hint_weapon = weapon_name;
|
||||||
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
|
}
|
||||||
|
else
|
||||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
melee_weapon_triggers[ i ] usetriggerrequirelookat();
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
else
|
||||||
i = 0;
|
|
||||||
while ( i < melee_weapon_structs.size )
|
|
||||||
{
|
{
|
||||||
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn );
|
weapon_display = get_weapon_display_name( weapon_name );
|
||||||
i++;
|
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||||
}
|
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
||||||
register_melee_weapon_for_level( weapon_name );
|
|
||||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
{
|
{
|
||||||
level.ballistic_weapon_name = [];
|
cursor_hint = "HINT_WEAPON";
|
||||||
|
cursor_hint_weapon = weapon_name;
|
||||||
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
}
|
}
|
||||||
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name;
|
else
|
||||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
{
|
|
||||||
level.ballistic_upgraded_weapon_name = [];
|
|
||||||
}
|
|
||||||
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||||
|
}
|
||||||
|
|
||||||
|
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < melee_weapon_structs.size; i++ )
|
||||||
|
prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||||
|
|
||||||
|
register_melee_weapon_for_level( weapon_name );
|
||||||
|
|
||||||
|
if ( !isdefined( level.ballistic_weapon_name ) )
|
||||||
|
level.ballistic_weapon_name = [];
|
||||||
|
|
||||||
|
level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
|
||||||
|
|
||||||
|
if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
|
||||||
|
level.ballistic_upgraded_weapon_name = [];
|
||||||
|
|
||||||
|
level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
|
||||||
|
/#
|
||||||
|
if ( !isdefined( level.zombie_weapons[weapon_name] ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( stub ) )
|
if ( isdefined( level.devgui_add_weapon ) )
|
||||||
|
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
|
{
|
||||||
|
if ( isdefined( stub ) )
|
||||||
|
{
|
||||||
|
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||||
{
|
{
|
||||||
stub.hint_string = hint_string;
|
stub.hint_string = hint_string;
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_WEAPON";
|
||||||
|
stub.cursor_hint_weapon = weapon_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_NOICON";
|
||||||
|
stub.cursor_hint_weapon = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||||
|
stub.hint_parm2 = cost;
|
||||||
|
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_WEAPON";
|
||||||
|
stub.cursor_hint_weapon = weapon_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_NOICON";
|
||||||
|
stub.cursor_hint_weapon = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stub.cost = cost;
|
stub.cost = cost;
|
||||||
stub.weapon_name = weapon_name;
|
stub.weapon_name = weapon_name;
|
||||||
stub.has_weapon = has_weapon;
|
|
||||||
stub.give_weapon = give_weapon;
|
|
||||||
stub.take_weapon = take_weapon;
|
|
||||||
stub.vo_dialog_id = vo_dialog_id;
|
stub.vo_dialog_id = vo_dialog_id;
|
||||||
stub.flourish_weapon_name = flourish_weapon_name;
|
stub.flourish_weapon_name = flourish_weapon_name;
|
||||||
stub.ballistic_weapon_name = ballistic_weapon_name;
|
stub.ballistic_weapon_name = ballistic_weapon_name;
|
||||||
@ -68,48 +133,38 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
|||||||
add_stub( stub, weapon_name )
|
add_stub( stub, weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
melee_weapon = undefined;
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
|
||||||
{
|
|
||||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( isdefined( stub ) && isdefined( melee_weapon ) )
|
||||||
|
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_melee_weapon_by_name( weapon_name )
|
give_melee_weapon_by_name( weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
melee_weapon = undefined;
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( melee_weapon ) )
|
|
||||||
{
|
|
||||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
if ( isdefined( melee_weapon ) )
|
||||||
|
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||||
|
}
|
||||||
|
|
||||||
|
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
{
|
{
|
||||||
melee_weapon = spawnstruct();
|
melee_weapon = spawnstruct();
|
||||||
melee_weapon.weapon_name = weapon_name;
|
melee_weapon.weapon_name = weapon_name;
|
||||||
@ -120,373 +175,343 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
|
|||||||
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
||||||
melee_weapon.hint_string = hint_string;
|
melee_weapon.hint_string = hint_string;
|
||||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||||
melee_weapon.has_weapon = has_weapon;
|
|
||||||
melee_weapon.give_weapon = give_weapon;
|
|
||||||
melee_weapon.take_weapon = take_weapon;
|
|
||||||
melee_weapon.flourish_fn = flourish_fn;
|
melee_weapon.flourish_fn = flourish_fn;
|
||||||
if ( !isDefined( level._melee_weapons ) )
|
|
||||||
{
|
if ( !isdefined( level._melee_weapons ) )
|
||||||
level._melee_weapons = [];
|
level._melee_weapons = [];
|
||||||
}
|
|
||||||
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
player_can_see_weapon_prompt( weapon_name )
|
||||||
|
{
|
||||||
|
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
spectator_respawn_all()
|
spectator_respawn_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||||
{
|
|
||||||
self [[ level._melee_weapons[ i ].take_weapon ]]();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spectator_respawn( wallbuy_targetname, take_weapon, has_weapon )
|
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < melee_triggers.size )
|
for ( i = 0; i < melee_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
melee_triggers[i] setvisibletoall();
|
melee_triggers[i] setvisibletoall();
|
||||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
{
|
{
|
||||||
j = 0;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ j ] [[ has_weapon ]]() )
|
|
||||||
{
|
{
|
||||||
|
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide_all()
|
trigger_hide_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide( wallbuy_targetname )
|
trigger_hide( wallbuy_targetname )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < melee_triggers.size )
|
for ( i = 0; i < melee_triggers.size; i++ )
|
||||||
{
|
|
||||||
melee_triggers[i] setinvisibletoplayer( self );
|
melee_triggers[i] setinvisibletoplayer( self );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_any_ballistic_knife()
|
has_any_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_upgraded_ballistic_knife()
|
has_upgraded_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
give_ballistic_knife( weapon_string, upgraded )
|
give_ballistic_knife( weapon_string, upgraded )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_weapon();
|
current_melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( current_melee_weapon ) )
|
|
||||||
{
|
if ( isdefined( current_melee_weapon ) )
|
||||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
|
||||||
{
|
{
|
||||||
|
if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
|
||||||
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
||||||
}
|
|
||||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
|
||||||
{
|
|
||||||
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return weapon_string;
|
return weapon_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
change_melee_weapon( weapon_name, current_weapon )
|
change_melee_weapon( weapon_name, current_weapon )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_weapon();
|
current_melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( current_melee_weapon ) )
|
|
||||||
|
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||||
{
|
{
|
||||||
self takeweapon( current_melee_weapon );
|
self takeweapon( current_melee_weapon );
|
||||||
unacquire_weapon_toggle( current_melee_weapon );
|
unacquire_weapon_toggle( current_melee_weapon );
|
||||||
}
|
}
|
||||||
|
|
||||||
self set_player_melee_weapon( weapon_name );
|
self set_player_melee_weapon( weapon_name );
|
||||||
had_ballistic = 0;
|
had_ballistic = 0;
|
||||||
had_ballistic_upgraded = 0;
|
had_ballistic_upgraded = 0;
|
||||||
ballistic_was_primary = 0;
|
ballistic_was_primary = 0;
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
i = 0;
|
|
||||||
while ( i < primaryweapons.size )
|
for ( i = 0; i < primaryweapons.size; i++ )
|
||||||
{
|
{
|
||||||
primary_weapon = primaryweapons[i];
|
primary_weapon = primaryweapons[i];
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||||
{
|
{
|
||||||
had_ballistic = 1;
|
had_ballistic = 1;
|
||||||
|
|
||||||
if ( primary_weapon == current_weapon )
|
if ( primary_weapon == current_weapon )
|
||||||
{
|
|
||||||
ballistic_was_primary = 1;
|
ballistic_was_primary = 1;
|
||||||
}
|
|
||||||
self notify( "zmb_lost_knife" );
|
self notify( "zmb_lost_knife" );
|
||||||
self takeweapon( primary_weapon );
|
self takeweapon( primary_weapon );
|
||||||
unacquire_weapon_toggle( primary_weapon );
|
unacquire_weapon_toggle( primary_weapon );
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||||
{
|
|
||||||
had_ballistic_upgraded = 1;
|
had_ballistic_upgraded = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if ( had_ballistic )
|
if ( had_ballistic )
|
||||||
{
|
{
|
||||||
if ( had_ballistic_upgraded )
|
if ( had_ballistic_upgraded )
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
current_weapon = new_ballistic;
|
||||||
}
|
|
||||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
current_weapon = new_ballistic;
|
||||||
}
|
|
||||||
self giveweapon( new_ballistic, 0 );
|
self giveweapon( new_ballistic, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_weapon;
|
return current_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||||
{
|
{
|
||||||
self.first_time_triggered = 0;
|
self.first_time_triggered = 0;
|
||||||
while ( isDefined( self.stub ) )
|
|
||||||
|
if ( isdefined( self.stub ) )
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
if ( isDefined( self.stub.first_time_triggered ) )
|
|
||||||
{
|
if ( isdefined( self.stub.first_time_triggered ) )
|
||||||
self.first_time_triggered = self.stub.first_time_triggered;
|
self.first_time_triggered = self.stub.first_time_triggered;
|
||||||
}
|
|
||||||
weapon_name = self.stub.weapon_name;
|
weapon_name = self.stub.weapon_name;
|
||||||
cost = self.stub.cost;
|
cost = self.stub.cost;
|
||||||
has_weapon = self.stub.has_weapon;
|
|
||||||
give_weapon = self.stub.give_weapon;
|
|
||||||
flourish_fn = self.stub.flourish_fn;
|
flourish_fn = self.stub.flourish_fn;
|
||||||
vo_dialog_id = self.stub.vo_dialog_id;
|
vo_dialog_id = self.stub.vo_dialog_id;
|
||||||
flourish_weapon_name = self.stub.flourish_weapon_name;
|
flourish_weapon_name = self.stub.flourish_weapon_name;
|
||||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ i ] [[ has_weapon ]]() )
|
|
||||||
{
|
{
|
||||||
|
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
self setinvisibletoplayer( players[i] );
|
self setinvisibletoplayer( players[i] );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( !is_player_valid( player ) )
|
if ( !is_player_valid( player ) )
|
||||||
{
|
{
|
||||||
player thread ignore_triggers( 0,5 );
|
player thread ignore_triggers( 0.5 );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player in_revive_trigger() )
|
|
||||||
|
if ( player in_revive_trigger() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player isthrowinggrenade() )
|
|
||||||
|
if ( player isthrowinggrenade() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player.is_drinking > 0 )
|
|
||||||
|
if ( player.is_drinking > 0 )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
|
||||||
|
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( player isswitchingweapons() )
|
if ( player isswitchingweapons() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
else current_weapon = player getcurrentweapon();
|
|
||||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
current_weapon = player getcurrentweapon();
|
||||||
|
|
||||||
|
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
|
||||||
{
|
{
|
||||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
wait 0.1;
|
||||||
{
|
continue;
|
||||||
wait 0,1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
player_has_weapon = player hasweapon( weapon_name );
|
||||||
player_has_weapon = player [[ has_weapon ]]();
|
|
||||||
if ( !player_has_weapon )
|
if ( !player_has_weapon )
|
||||||
{
|
{
|
||||||
|
cost = self.stub.cost;
|
||||||
|
|
||||||
|
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||||
|
cost = int( cost / 2 );
|
||||||
|
|
||||||
if ( player.score >= cost )
|
if ( player.score >= cost )
|
||||||
{
|
{
|
||||||
if ( self.first_time_triggered == 0 )
|
if ( self.first_time_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread melee_weapon_show( player );
|
model thread melee_weapon_show( player );
|
||||||
}
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( self.clientfieldname ) )
|
|
||||||
{
|
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
}
|
|
||||||
}
|
|
||||||
self.first_time_triggered = 1;
|
self.first_time_triggered = 1;
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.stub.first_time_triggered = 1;
|
self.stub.first_time_triggered = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
|
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
||||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self );
|
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
play_sound_on_ent( "no_purchase" );
|
play_sound_on_ent( "no_purchase" );
|
||||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
{
|
|
||||||
self setinvisibletoplayer( player );
|
self setinvisibletoplayer( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
melee_weapon_show( player )
|
melee_weapon_show( player )
|
||||||
{
|
{
|
||||||
player_angles = vectorToAngle( player.origin - self.origin );
|
player_angles = vectortoangles( player.origin - self.origin );
|
||||||
player_yaw = player_angles[1];
|
player_yaw = player_angles[1];
|
||||||
weapon_yaw = self.angles[1];
|
weapon_yaw = self.angles[1];
|
||||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
yaw_diff = angleclamp180( player_yaw - weapon_yaw );
|
||||||
|
|
||||||
if ( yaw_diff > 0 )
|
if ( yaw_diff > 0 )
|
||||||
{
|
|
||||||
yaw = weapon_yaw - 90;
|
yaw = weapon_yaw - 90;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
yaw = weapon_yaw + 90;
|
yaw = weapon_yaw + 90;
|
||||||
}
|
|
||||||
self.og_origin = self.origin;
|
self.og_origin = self.origin;
|
||||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
self show();
|
self show();
|
||||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||||
time = 1;
|
time = 1;
|
||||||
self moveto( self.og_origin, time );
|
self moveto( self.og_origin, time );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger )
|
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||||
{
|
|
||||||
if ( isDefined( flourish_fn ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( flourish_fn ) )
|
||||||
self thread [[ flourish_fn ]]();
|
self thread [[ flourish_fn ]]();
|
||||||
}
|
|
||||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
|
||||||
{
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self [[ give_weapon ]]();
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
{
|
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( trigger ) )
|
||||||
trigger setinvisibletoplayer( self );
|
trigger setinvisibletoplayer( self );
|
||||||
}
|
|
||||||
self trigger_hide_all();
|
self trigger_hide_all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -512,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
|||||||
#/
|
#/
|
||||||
self enable_player_move_states();
|
self enable_player_move_states();
|
||||||
weapon = flourish_weapon_name;
|
weapon = flourish_weapon_name;
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
|
||||||
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||||
{
|
{
|
||||||
self takeweapon( weapon );
|
self takeweapon( weapon );
|
||||||
self.lastactiveweapon = "none";
|
self.lastactiveweapon = "none";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self takeweapon( weapon );
|
self takeweapon( weapon );
|
||||||
self giveweapon( weapon_name );
|
self giveweapon( weapon_name );
|
||||||
gun = change_melee_weapon( weapon_name, gun );
|
gun = change_melee_weapon( weapon_name, gun );
|
||||||
|
|
||||||
if ( self hasweapon( "knife_zm" ) )
|
if ( self hasweapon( "knife_zm" ) )
|
||||||
{
|
|
||||||
self takeweapon( "knife_zm" );
|
self takeweapon( "knife_zm" );
|
||||||
}
|
|
||||||
if ( self is_multiple_drinking() )
|
if ( self is_multiple_drinking() )
|
||||||
{
|
{
|
||||||
self decrement_is_drinking();
|
self decrement_is_drinking();
|
||||||
@ -537,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||||
{
|
|
||||||
self switchtoweapon( gun );
|
self switchtoweapon( gun );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
|
||||||
{
|
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||||
self switchtoweapon( primaryweapons[0] );
|
self switchtoweapon( primaryweapons[0] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self waittill( "weapon_change_complete" );
|
self waittill( "weapon_change_complete" );
|
||||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
|
||||||
{
|
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
|
||||||
self decrement_is_drinking();
|
self decrement_is_drinking();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,37 +1,39 @@
|
|||||||
//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" );
|
precacheitem( "zombie_perk_bottle_nuke" );
|
||||||
precacheshader( "specialty_divetonuke_zombies" );
|
precacheshader( "specialty_divetonuke_zombies" );
|
||||||
precachemodel( "zombie_vending_nuke" );
|
precachemodel( "zombie_vending_nuke" );
|
||||||
@ -44,17 +46,17 @@ divetonuke_precache() //checked matches cerberus output
|
|||||||
level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on";
|
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";
|
||||||
@ -62,55 +64,59 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio
|
|||||||
use_trigger.target = "vending_divetonuke";
|
use_trigger.target = "vending_divetonuke";
|
||||||
perk_machine.script_string = "divetonuke_perk";
|
perk_machine.script_string = "divetonuke_perk";
|
||||||
perk_machine.targetname = "vending_divetonuke";
|
perk_machine.targetname = "vending_divetonuke";
|
||||||
if ( isDefined( bump_trigger ) )
|
|
||||||
{
|
if ( isdefined( bump_trigger ) )
|
||||||
bump_trigger.script_string = "divetonuke_perk";
|
bump_trigger.script_string = "divetonuke_perk";
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
divetonuke_perk_machine_think() //checked changed to match cerberus output
|
divetonuke_perk_machine_think()
|
||||||
{
|
{
|
||||||
init_divetonuke();
|
init_divetonuke();
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
machine = getentarray( "vending_divetonuke", "targetname" );
|
machine = getentarray( "vending_divetonuke", "targetname" );
|
||||||
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
machine_triggers = getentarray( "vending_divetonuke", "target" );
|
||||||
|
|
||||||
for ( i = 0; i < machine.size; i++ )
|
for ( i = 0; i < machine.size; i++ )
|
||||||
{
|
|
||||||
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
|
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
|
||||||
}
|
|
||||||
array_thread( machine_triggers, ::set_power_on, 0 );
|
array_thread( machine_triggers, ::set_power_on, 0 );
|
||||||
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
level thread do_initial_power_off_callback( machine, "divetonuke" );
|
||||||
|
|
||||||
level waittill( "divetonuke_on" );
|
level waittill( "divetonuke_on" );
|
||||||
|
|
||||||
for ( i = 0; i < machine.size; i++ )
|
for ( i = 0; i < machine.size; i++ )
|
||||||
{
|
{
|
||||||
machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
|
machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
|
||||||
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 );
|
machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
|
||||||
machine[i] playsound( "zmb_perks_power_on" );
|
machine[i] playsound( "zmb_perks_power_on" );
|
||||||
machine[i] thread perk_fx( "divetonuke_light" );
|
machine[i] thread perk_fx( "divetonuke_light" );
|
||||||
machine[i] thread play_loop_on_machine();
|
machine[i] thread play_loop_on_machine();
|
||||||
}
|
}
|
||||||
|
|
||||||
level notify( "specialty_flakjacket_power_on" );
|
level notify( "specialty_flakjacket_power_on" );
|
||||||
array_thread( machine_triggers, ::set_power_on, 1 );
|
array_thread( machine_triggers, ::set_power_on, 1 );
|
||||||
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) )
|
|
||||||
{
|
if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) )
|
||||||
array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
|
array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
|
||||||
}
|
|
||||||
level waittill( "divetonuke_off" );
|
level waittill( "divetonuke_off" );
|
||||||
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) )
|
|
||||||
{
|
if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) )
|
||||||
array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
|
array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
|
||||||
}
|
|
||||||
array_thread( machine, ::turn_perk_off );
|
array_thread( machine, ::turn_perk_off );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 perk_fx( undefined, 1 );
|
||||||
perk thread perk_fx( "divetonuke_light" );
|
perk thread perk_fx( "divetonuke_light" );
|
||||||
@ -123,19 +129,17 @@ 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 );
|
playfx( level._effect["divetonuke_groundhit"], origin );
|
||||||
attacker playsound( "zmb_phdflop_explo" );
|
attacker playsound( "zmb_phdflop_explo" );
|
||||||
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
||||||
wait 1;
|
wait 1;
|
||||||
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
|
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
|
||||||
@ -143,27 +147,26 @@ divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, dam
|
|||||||
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;
|
for ( i = 0; i < a_zombies.size; i++ )
|
||||||
while ( i < a_zombies.size )
|
|
||||||
{
|
{
|
||||||
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 - ( dist / radius ) );
|
damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - 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" );
|
|
||||||
}
|
|
@ -1,13 +1,14 @@
|
|||||||
//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_equipment;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_buildables;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_weap_riotshield_prison;
|
#include common_scripts\utility;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_weap_riotshield_prison;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
level.riotshield_name = "alcatraz_shield_zm";
|
level.riotshield_name = "alcatraz_shield_zm";
|
||||||
level.deployedshieldmodel = [];
|
level.deployedshieldmodel = [];
|
||||||
@ -37,148 +38,135 @@ init() //checked matches cerberus output
|
|||||||
level.riotshield_placement_zoffset = 26;
|
level.riotshield_placement_zoffset = 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
attachriotshield( model, tag ) //checked matches cerberus output
|
attachriotshield( model, tag )
|
||||||
{
|
|
||||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||||
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||||
}
|
|
||||||
self.prev_shield_model = model;
|
self.prev_shield_model = model;
|
||||||
self.prev_shield_tag = tag;
|
self.prev_shield_tag = tag;
|
||||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
|
||||||
{
|
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||||
self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
removeriotshield() //checked matches cerberus output
|
removeriotshield()
|
||||||
{
|
|
||||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||||
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||||
}
|
|
||||||
self.prev_shield_model = undefined;
|
self.prev_shield_model = undefined;
|
||||||
self.prev_shield_tag = undefined;
|
self.prev_shield_tag = undefined;
|
||||||
|
|
||||||
if ( self getcurrentweapon() != level.riotshield_name )
|
if ( self getcurrentweapon() != level.riotshield_name )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self setheldweaponmodel( 0 );
|
self setheldweaponmodel( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
setriotshieldviewmodel( modelnum ) //checked matches cerberus output
|
setriotshieldviewmodel( modelnum )
|
||||||
{
|
{
|
||||||
self.prev_shield_viewmodel = modelnum;
|
self.prev_shield_viewmodel = modelnum;
|
||||||
|
|
||||||
if ( self getcurrentweapon() != level.riotshield_name )
|
if ( self getcurrentweapon() != level.riotshield_name )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.prev_shield_viewmodel ) )
|
if ( isdefined( self.prev_shield_viewmodel ) )
|
||||||
{
|
|
||||||
self setheldweaponmodel( self.prev_shield_viewmodel );
|
self setheldweaponmodel( self.prev_shield_viewmodel );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self setheldweaponmodel( 0 );
|
self setheldweaponmodel( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
specialriotshieldviewmodel() //checked matches cerberus output
|
specialriotshieldviewmodel()
|
||||||
{
|
{
|
||||||
if ( self getcurrentweapon() != level.riotshield_name )
|
if ( self getcurrentweapon() != level.riotshield_name )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self setheldweaponmodel( 3 );
|
self setheldweaponmodel( 3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
restoreriotshieldviewmodel() //checked matches cerberus output
|
restoreriotshieldviewmodel()
|
||||||
{
|
{
|
||||||
if ( self getcurrentweapon() != level.riotshield_name )
|
if ( self getcurrentweapon() != level.riotshield_name )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.prev_shield_viewmodel ) )
|
if ( isdefined( self.prev_shield_viewmodel ) )
|
||||||
{
|
|
||||||
self setheldweaponmodel( self.prev_shield_viewmodel );
|
self setheldweaponmodel( self.prev_shield_viewmodel );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self setheldweaponmodel( 0 );
|
self setheldweaponmodel( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
updateriotshieldmodel() //checked changed to match cerberus output
|
updateriotshieldmodel()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.shield_damage_level ) )
|
if ( !isdefined( self.shield_damage_level ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.player_shield_reset_health ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.player_shield_reset_health ) )
|
||||||
self [[ self.player_shield_reset_health ]]();
|
self [[ self.player_shield_reset_health ]]();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
update = 0;
|
update = 0;
|
||||||
if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
|
||||||
|
if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||||
{
|
{
|
||||||
self.prev_shield_damage_level = self.shield_damage_level;
|
self.prev_shield_damage_level = self.shield_damage_level;
|
||||||
update = 1;
|
update = 1;
|
||||||
}
|
}
|
||||||
if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement )
|
|
||||||
|
if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement )
|
||||||
{
|
{
|
||||||
self.prev_shield_placement = self.shield_placement;
|
self.prev_shield_placement = self.shield_placement;
|
||||||
update = 1;
|
update = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( update )
|
if ( update )
|
||||||
{
|
{
|
||||||
if ( self.prev_shield_placement == 0 )
|
if ( self.prev_shield_placement == 0 )
|
||||||
{
|
|
||||||
self attachriotshield();
|
self attachriotshield();
|
||||||
}
|
|
||||||
else if ( self.prev_shield_placement == 1 )
|
else if ( self.prev_shield_placement == 1 )
|
||||||
{
|
{
|
||||||
self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" );
|
self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" );
|
||||||
self setriotshieldviewmodel( self.prev_shield_damage_level );
|
self setriotshieldviewmodel( self.prev_shield_damage_level );
|
||||||
}
|
}
|
||||||
else if ( self.prev_shield_placement == 2 )
|
else if ( self.prev_shield_placement == 2 )
|
||||||
{
|
|
||||||
self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" );
|
self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" );
|
||||||
}
|
|
||||||
else if ( self.prev_shield_placement == 3 )
|
else if ( self.prev_shield_placement == 3 )
|
||||||
{
|
{
|
||||||
self attachriotshield();
|
self attachriotshield();
|
||||||
if ( isDefined( self.shield_ent ) )
|
|
||||||
{
|
if ( isdefined( self.shield_ent ) )
|
||||||
self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
updatestandaloneriotshieldmodel() //checked matches cerberus output
|
updatestandaloneriotshieldmodel()
|
||||||
{
|
{
|
||||||
update = 0;
|
update = 0;
|
||||||
if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
|
||||||
|
if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||||
{
|
{
|
||||||
self.prev_shield_damage_level = self.shield_damage_level;
|
self.prev_shield_damage_level = self.shield_damage_level;
|
||||||
update = 1;
|
update = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( update )
|
if ( update )
|
||||||
{
|
|
||||||
self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
watchshieldlaststand() //checked matches cerberus output used is_true() instead
|
watchshieldlaststand()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self notify( "watchShieldLastStand" );
|
self notify( "watchShieldLastStand" );
|
||||||
self endon( "watchShieldLastStand" );
|
self endon( "watchShieldLastStand" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "weapons_taken_for_last_stand" );
|
self waittill( "weapons_taken_for_last_stand" );
|
||||||
|
|
||||||
self.riotshield_hidden = 0;
|
self.riotshield_hidden = 0;
|
||||||
if ( is_true( self.hasriotshield ) )
|
|
||||||
|
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||||
{
|
{
|
||||||
if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 )
|
if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 )
|
||||||
{
|
{
|
||||||
@ -187,39 +175,32 @@ watchshieldlaststand() //checked matches cerberus output used is_true() instead
|
|||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
str_notify = self waittill_any_return( "player_revived", "bled_out" );
|
str_notify = self waittill_any_return( "player_revived", "bled_out" );
|
||||||
|
|
||||||
if ( str_notify == "player_revived" )
|
if ( str_notify == "player_revived" )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 )
|
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 )
|
||||||
{
|
{
|
||||||
self.shield_placement = self.riotshield_hidden;
|
self.shield_placement = self.riotshield_hidden;
|
||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
self maps\mp\zombies\_zm_weap_riotshield_prison::player_take_riotshield();
|
||||||
self maps/mp/zombies/_zm_weap_riotshield_prison::player_take_riotshield();
|
|
||||||
}
|
|
||||||
self.riotshield_hidden = undefined;
|
self.riotshield_hidden = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trackriotshield()
|
||||||
|
|
||||||
trackriotshield() //checked changed to match cerberus output
|
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.hasriotshield = self hasweapon( level.riotshield_name );
|
self.hasriotshield = self hasweapon( level.riotshield_name );
|
||||||
if ( self getcurrentweapon() == level.riotshield_name )
|
self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name;
|
||||||
{
|
|
||||||
self.hasriotshieldequipped = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
self.hasriotshieldequipped = 0;
|
|
||||||
}
|
|
||||||
self.shield_placement = 0;
|
self.shield_placement = 0;
|
||||||
|
|
||||||
if ( self.hasriotshield )
|
if ( self.hasriotshield )
|
||||||
{
|
{
|
||||||
if ( self.hasriotshieldequipped )
|
if ( self.hasriotshieldequipped )
|
||||||
@ -233,66 +214,66 @@ trackriotshield() //checked changed to match cerberus output
|
|||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_change", newweapon );
|
self waittill( "weapon_change", newweapon );
|
||||||
|
|
||||||
if ( newweapon == level.riotshield_name )
|
if ( newweapon == level.riotshield_name )
|
||||||
{
|
{
|
||||||
if ( self.hasriotshieldequipped )
|
if ( self.hasriotshieldequipped )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( self.riotshieldentity ) )
|
if ( isdefined( self.riotshieldentity ) )
|
||||||
{
|
|
||||||
self notify( "destroy_riotshield" );
|
self notify( "destroy_riotshield" );
|
||||||
}
|
|
||||||
self.shield_placement = 1;
|
self.shield_placement = 1;
|
||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
|
|
||||||
if ( self.hasriotshield )
|
if ( self.hasriotshield )
|
||||||
{
|
{
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
self.hasriotshield = 1;
|
self.hasriotshield = 1;
|
||||||
self.hasriotshieldequipped = 1;
|
self.hasriotshieldequipped = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self ismantling() && newweapon == "none" )
|
if ( self ismantling() && newweapon == "none" )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( self.hasriotshieldequipped )
|
if ( self.hasriotshieldequipped )
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( self.hasriotshield );
|
assert( self.hasriotshield );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
self.hasriotshield = self hasweapon( level.riotshield_name );
|
self.hasriotshield = self hasweapon( level.riotshield_name );
|
||||||
if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden )
|
|
||||||
|
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ( self.hasriotshield )
|
else if ( self.hasriotshield )
|
||||||
{
|
|
||||||
self.shield_placement = 2;
|
self.shield_placement = 2;
|
||||||
break;
|
else if ( isdefined( self.shield_ent ) )
|
||||||
}
|
|
||||||
else if ( isDefined( self.shield_ent ) )
|
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( self.shield_placement == 3 );
|
assert( self.shield_placement == 3 );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.shield_placement = 0;
|
self.shield_placement = 0;
|
||||||
}
|
|
||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
self.hasriotshieldequipped = 0;
|
self.hasriotshieldequipped = 0;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self.hasriotshield )
|
if ( self.hasriotshield )
|
||||||
{
|
{
|
||||||
if ( !self hasweapon( level.riotshield_name ) )
|
if ( !self hasweapon( level.riotshield_name ) )
|
||||||
@ -301,8 +282,10 @@ trackriotshield() //checked changed to match cerberus output
|
|||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
self.hasriotshield = 0;
|
self.hasriotshield = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self hasweapon( level.riotshield_name ) )
|
if ( self hasweapon( level.riotshield_name ) )
|
||||||
{
|
{
|
||||||
self.shield_placement = 2;
|
self.shield_placement = 2;
|
||||||
@ -312,27 +295,31 @@ trackriotshield() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trackequipmentchange() //checked changed to match cerberus output
|
trackequipmentchange()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "equipment_dropped", equipname );
|
self waittill( "equipment_dropped", equipname );
|
||||||
|
|
||||||
self notify( "weapon_change", self getcurrentweapon() );
|
self notify( "weapon_change", self getcurrentweapon() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateriotshieldplacement() //checked matches cerberus output
|
updateriotshieldplacement()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "deploy_riotshield" );
|
self endon( "deploy_riotshield" );
|
||||||
self endon( "start_riotshield_deploy" );
|
self endon( "start_riotshield_deploy" );
|
||||||
self endon( "weapon_change" );
|
self endon( "weapon_change" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
placement = self canplaceriotshield( "raise_riotshield" );
|
placement = self canplaceriotshield( "raise_riotshield" );
|
||||||
|
|
||||||
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) )
|
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) )
|
||||||
{
|
{
|
||||||
self restoreriotshieldviewmodel();
|
self restoreriotshieldviewmodel();
|
||||||
@ -343,18 +330,19 @@ updateriotshieldplacement() //checked matches cerberus output
|
|||||||
self specialriotshieldviewmodel();
|
self specialriotshieldviewmodel();
|
||||||
self setplacementhint( 0 );
|
self setplacementhint( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
startriotshielddeploy() //checked matches cerberus output
|
startriotshielddeploy()
|
||||||
{
|
{
|
||||||
self notify( "start_riotshield_deploy" );
|
self notify( "start_riotshield_deploy" );
|
||||||
self thread updateriotshieldplacement();
|
self thread updateriotshieldplacement();
|
||||||
self thread watchriotshielddeploy();
|
self thread watchriotshielddeploy();
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnriotshieldcover( origin, angles ) //checked matches cerberus output
|
spawnriotshieldcover( origin, angles )
|
||||||
{
|
{
|
||||||
shield_ent = spawn( "script_model", origin, 1 );
|
shield_ent = spawn( "script_model", origin, 1 );
|
||||||
shield_ent.angles = angles;
|
shield_ent.angles = angles;
|
||||||
@ -365,27 +353,29 @@ spawnriotshieldcover( origin, angles ) //checked matches cerberus output
|
|||||||
self.shield_placement = 3;
|
self.shield_placement = 3;
|
||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
shield_ent setscriptmoverflag( 0 );
|
shield_ent setscriptmoverflag( 0 );
|
||||||
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 );
|
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 );
|
||||||
maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent );
|
maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent );
|
||||||
return shield_ent;
|
return shield_ent;
|
||||||
}
|
}
|
||||||
|
|
||||||
watchriotshielddeploy() //checked matches cerberus output
|
watchriotshielddeploy()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "start_riotshield_deploy" );
|
self endon( "start_riotshield_deploy" );
|
||||||
|
|
||||||
self waittill( "deploy_riotshield", deploy_attempt );
|
self waittill( "deploy_riotshield", deploy_attempt );
|
||||||
|
|
||||||
self restoreriotshieldviewmodel();
|
self restoreriotshieldviewmodel();
|
||||||
self setplacementhint( 1 );
|
self setplacementhint( 1 );
|
||||||
placement_hint = 0;
|
placement_hint = 0;
|
||||||
|
|
||||||
if ( deploy_attempt )
|
if ( deploy_attempt )
|
||||||
{
|
{
|
||||||
placement = self canplaceriotshield( "deploy_riotshield" );
|
placement = self canplaceriotshield( "deploy_riotshield" );
|
||||||
|
|
||||||
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) )
|
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) )
|
||||||
{
|
|
||||||
self doriotshielddeploy( placement["origin"], placement["angles"] );
|
self doriotshielddeploy( placement["origin"], placement["angles"] );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
placement_hint = 1;
|
placement_hint = 1;
|
||||||
@ -394,61 +384,57 @@ watchriotshielddeploy() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
placement_hint = 1;
|
placement_hint = 1;
|
||||||
}
|
|
||||||
if ( placement_hint )
|
if ( placement_hint )
|
||||||
{
|
|
||||||
self setriotshieldfailhint();
|
self setriotshieldfailhint();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
check_plant_position( origin, angles ) //checked matches cerberus output
|
check_plant_position( origin, angles )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.equipment_safe_to_drop ) )
|
if ( isdefined( level.equipment_safe_to_drop ) )
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
test_ent = spawn( "script_model", origin );
|
test_ent = spawn( "script_model", origin );
|
||||||
test_ent setmodel( level.deployedshieldmodel[0] );
|
test_ent setmodel( level.deployedshieldmodel[0] );
|
||||||
test_ent.angles = angles;
|
test_ent.angles = angles;
|
||||||
|
|
||||||
if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) )
|
if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) )
|
||||||
{
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
|
||||||
test_ent delete();
|
test_ent delete();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
doriotshielddeploy( origin, angles )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "start_riotshield_deploy" );
|
self endon( "start_riotshield_deploy" );
|
||||||
self notify( "deployed_riotshield" );
|
self notify( "deployed_riotshield" );
|
||||||
self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name );
|
self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name );
|
||||||
if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
|
|
||||||
{
|
if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name );
|
self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name );
|
||||||
}
|
|
||||||
zoffset = level.riotshield_placement_zoffset;
|
zoffset = level.riotshield_placement_zoffset;
|
||||||
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
|
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
|
||||||
item_ent = deployriotshield( self, shield_ent );
|
item_ent = deployriotshield( self, shield_ent );
|
||||||
primaries = self getweaponslistprimaries();
|
primaries = self getweaponslistprimaries();
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( isDefined( item_ent ) );
|
assert( isdefined( item_ent ) );
|
||||||
assert( !isDefined( self.riotshieldretrievetrigger ) );
|
assert( !isdefined( self.riotshieldretrievetrigger ) );
|
||||||
assert( !isDefined( self.riotshieldentity ) );
|
assert( !isdefined( self.riotshieldentity ) );
|
||||||
#/
|
#/
|
||||||
*/
|
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] );
|
||||||
self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] );
|
|
||||||
if ( isDefined( level.equipment_planted ) )
|
if ( isdefined( level.equipment_planted ) )
|
||||||
{
|
|
||||||
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
|
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
|
||||||
}
|
|
||||||
if ( isDefined( level.equipment_safe_to_drop ) )
|
if ( isdefined( level.equipment_safe_to_drop ) )
|
||||||
{
|
{
|
||||||
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
|
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
|
||||||
{
|
{
|
||||||
@ -458,6 +444,7 @@ doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.riotshieldretrievetrigger = item_ent;
|
self.riotshieldretrievetrigger = item_ent;
|
||||||
self.riotshieldentity = shield_ent;
|
self.riotshieldentity = shield_ent;
|
||||||
self thread watchdeployedriotshieldents();
|
self thread watchdeployedriotshieldents();
|
||||||
@ -469,196 +456,178 @@ doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
|||||||
return shield_ent;
|
return shield_ent;
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshielddistancetest( origin ) //checked matches cerberus output
|
riotshielddistancetest( origin )
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( isDefined( origin ) );
|
assert( isdefined( origin ) );
|
||||||
#/
|
#/
|
||||||
*/
|
min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" );
|
||||||
min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" );
|
|
||||||
min_dist_squared *= min_dist_squared;
|
min_dist_squared *= min_dist_squared;
|
||||||
i = 0;
|
|
||||||
while ( i < level.players.size )
|
for ( i = 0; i < level.players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.players[ i ].riotshieldentity ) )
|
if ( isdefined( level.players[i].riotshieldentity ) )
|
||||||
{
|
{
|
||||||
dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin );
|
dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin );
|
||||||
|
|
||||||
if ( min_dist_squared > dist_squared )
|
if ( min_dist_squared > dist_squared )
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
println( "Shield placement denied! Failed distance check to other riotshields." );
|
println( "Shield placement denied! Failed distance check to other riotshields." );
|
||||||
#/
|
#/
|
||||||
*/
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watchdeployedriotshieldents() //checked matches cerberus output
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
watchdeployedriotshieldents()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
assert( isDefined( self.riotshieldretrievetrigger ) );
|
assert( isdefined( self.riotshieldretrievetrigger ) );
|
||||||
assert( isDefined( self.riotshieldentity ) );
|
assert( isdefined( self.riotshieldentity ) );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
riotshieldretrievetrigger = self.riotshieldretrievetrigger;
|
riotshieldretrievetrigger = self.riotshieldretrievetrigger;
|
||||||
riotshieldentity = self.riotshieldentity;
|
riotshieldentity = self.riotshieldentity;
|
||||||
self waittill_any( "destroy_riotshield", "disconnect", "alcatraz_shield_zm_taken" );
|
self waittill_any( "destroy_riotshield", "disconnect", "alcatraz_shield_zm_taken" );
|
||||||
if ( isDefined( self ) )
|
|
||||||
|
if ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
self.shield_placement = 0;
|
self.shield_placement = 0;
|
||||||
self updateriotshieldmodel();
|
self updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
if ( isDefined( riotshieldretrievetrigger ) )
|
|
||||||
{
|
if ( isdefined( riotshieldretrievetrigger ) )
|
||||||
riotshieldretrievetrigger delete();
|
riotshieldretrievetrigger delete();
|
||||||
}
|
|
||||||
if ( isDefined( riotshieldentity ) )
|
if ( isdefined( riotshieldentity ) )
|
||||||
{
|
|
||||||
riotshieldentity delete();
|
riotshieldentity delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
watchdeployedriotshielddamage() //checked changed to match cerberus output
|
watchdeployedriotshielddamage()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
damagemax = getDvarInt( "riotshield_deployed_health" );
|
damagemax = getdvarint( "riotshield_deployed_health" );
|
||||||
self.damagetaken = 0;
|
self.damagetaken = 0;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self.maxhealth = 100000;
|
self.maxhealth = 100000;
|
||||||
self.health = self.maxhealth;
|
self.health = self.maxhealth;
|
||||||
|
|
||||||
self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||||
if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields )
|
|
||||||
{
|
if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
if ( isDefined( self.owner ) )
|
assert( isdefined( self.owner ) && isdefined( self.owner.team ) );
|
||||||
{
|
|
||||||
assert( isDefined( self.owner.team ) );
|
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner )
|
if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( level.riotshield_damage_callback ) )
|
if ( isdefined( level.riotshield_damage_callback ) )
|
||||||
{
|
|
||||||
self.owner [[ level.riotshield_damage_callback ]]( damage, 0 );
|
self.owner [[ level.riotshield_damage_callback ]]( damage, 0 );
|
||||||
continue;
|
else
|
||||||
}
|
|
||||||
else if ( type == "MOD_MELEE" )
|
|
||||||
{
|
{
|
||||||
damage *= getDvarFloat( "riotshield_melee_damage_scale" );
|
if ( type == "MOD_MELEE" )
|
||||||
}
|
damage *= getdvarfloat( "riotshield_melee_damage_scale" );
|
||||||
else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" )
|
else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" )
|
||||||
{
|
damage *= getdvarfloat( "riotshield_bullet_damage_scale" );
|
||||||
damage *= getDvarFloat( "riotshield_bullet_damage_scale" );
|
else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" )
|
||||||
}
|
damage *= getdvarfloat( "riotshield_explosive_damage_scale" );
|
||||||
if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" )
|
|
||||||
{
|
|
||||||
damage *= getDvarFloat( "riotshield_explosive_damage_scale" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if ( type == "MOD_IMPACT" )
|
else if ( type == "MOD_IMPACT" )
|
||||||
{
|
damage *= getdvarfloat( "riotshield_projectile_damage_scale" );
|
||||||
damage *= getDvarFloat( "riotshield_projectile_damage_scale" );
|
|
||||||
}
|
|
||||||
self.damagetaken += damage;
|
self.damagetaken += damage;
|
||||||
|
|
||||||
if ( self.damagetaken >= damagemax )
|
if ( self.damagetaken >= damagemax )
|
||||||
{
|
|
||||||
self damagethendestroyriotshield();
|
self damagethendestroyriotshield();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
damagethendestroyriotshield() //checked matches cerberus output
|
damagethendestroyriotshield()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self.owner.riotshieldretrievetrigger delete();
|
self.owner.riotshieldretrievetrigger delete();
|
||||||
self notsolid();
|
self notsolid();
|
||||||
self setclientflag( 14 );
|
self setclientflag( 14 );
|
||||||
wait getDvarFloat( "riotshield_destroyed_cleanup_time" );
|
wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) );
|
||||||
self.owner notify( "destroy_riotshield" );
|
self.owner notify( "destroy_riotshield" );
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteshieldondamage( shield_ent ) //checked matches cerberus output
|
deleteshieldondamage( shield_ent )
|
||||||
{
|
{
|
||||||
shield_ent waittill( "death" );
|
shield_ent waittill( "death" );
|
||||||
|
|
||||||
self notify( "destroy_riotshield" );
|
self notify( "destroy_riotshield" );
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteshieldmodelonweaponpickup( shield_trigger ) //checked matches cerberus output
|
deleteshieldmodelonweaponpickup( shield_trigger )
|
||||||
{
|
{
|
||||||
shield_trigger waittill( "trigger", player );
|
shield_trigger waittill( "trigger", player );
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name );
|
|
||||||
|
self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name );
|
||||||
self notify( "destroy_riotshield" );
|
self notify( "destroy_riotshield" );
|
||||||
|
|
||||||
if ( self != player )
|
if ( self != player )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.transferriotshield ) )
|
if ( isdefined( level.transferriotshield ) )
|
||||||
{
|
|
||||||
[[ level.transferriotshield ]]( self, player );
|
[[ level.transferriotshield ]]( self, player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
watchshieldtriggervisibility( trigger ) //checked partially changed to match cerberus output see compiler_limitations.md No. 2
|
watchshieldtriggervisibility( trigger )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
trigger endon( "death" );
|
trigger endon( "death" );
|
||||||
while ( isDefined( trigger ) )
|
|
||||||
|
while ( isdefined( trigger ) )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
|
||||||
foreach ( player in players )
|
foreach ( player in players )
|
||||||
{
|
{
|
||||||
pickup = 1;
|
pickup = 1;
|
||||||
if ( !isDefined( player ) )
|
|
||||||
{
|
if ( !isdefined( player ) )
|
||||||
}
|
continue;
|
||||||
else if ( is_true( player.afterlife ) )
|
|
||||||
|
if ( is_true( player.afterlife ) )
|
||||||
{
|
{
|
||||||
trigger setinvisibletoplayer( player );
|
trigger setinvisibletoplayer( player );
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( isdefined( level.cantransferriotshield ) )
|
||||||
if ( isDefined( level.cantransferriotshield ) )
|
|
||||||
{
|
|
||||||
pickup = [[ level.cantransferriotshield ]]( self, player );
|
pickup = [[ level.cantransferriotshield ]]( self, player );
|
||||||
}
|
|
||||||
if ( !isDefined( trigger ) )
|
if ( !isdefined( trigger ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( pickup )
|
if ( pickup )
|
||||||
{
|
|
||||||
trigger setvisibletoplayer( player );
|
trigger setvisibletoplayer( player );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
trigger setinvisibletoplayer( player );
|
trigger setinvisibletoplayer( player );
|
||||||
}
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteriotshieldonplayerdeath() //checked matches cerberus output
|
deleteriotshieldonplayerdeath()
|
||||||
{
|
{
|
||||||
self.riotshieldentity endon( "death" );
|
self.riotshieldentity endon( "death" );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
self notify( "destroy_riotshield" );
|
self notify( "destroy_riotshield" );
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
#include maps/mp/zombies/_zm_stats;
|
// T6 GSC SOURCE
|
||||||
#include common_scripts/utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||||
|
level.ballistic_knife_autorecover = 1;
|
||||||
|
|
||||||
|
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
||||||
{
|
{
|
||||||
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
||||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -17,9 +22,12 @@ on_spawn( watcher, player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
|
|
||||||
isfriendly = 0;
|
isfriendly = 0;
|
||||||
if ( isDefined( endpos ) )
|
|
||||||
|
if ( isdefined( endpos ) )
|
||||||
{
|
{
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -27,47 +35,38 @@ on_spawn( watcher, player )
|
|||||||
retrievable_model.owner = player;
|
retrievable_model.owner = player;
|
||||||
retrievable_model.angles = angles;
|
retrievable_model.angles = angles;
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model.name = watcher.weapon;
|
||||||
if ( isDefined( prey ) )
|
|
||||||
|
if ( isdefined( prey ) )
|
||||||
{
|
{
|
||||||
if ( isplayer( prey ) && player.team == prey.team )
|
if ( isplayer( prey ) && player.team == prey.team )
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
else if ( isai( prey ) && player.team == prey.team )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isai( prey ) && player.team == prey.team )
|
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !isfriendly )
|
if ( !isfriendly )
|
||||||
{
|
{
|
||||||
retrievable_model linkto( prey, bone );
|
retrievable_model linkto( prey, bone );
|
||||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
||||||
}
|
}
|
||||||
else
|
else if ( isfriendly )
|
||||||
{
|
|
||||||
if ( isfriendly )
|
|
||||||
{
|
{
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
normal = ( 0, 0, 1 );
|
normal = ( 0, 0, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
|
||||||
retrievable_model waittill( "stationary" );
|
retrievable_model waittill( "stationary" );
|
||||||
}
|
|
||||||
retrievable_model thread drop_knives_to_ground( player );
|
retrievable_model thread drop_knives_to_ground( player );
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,13 +85,15 @@ on_spawn_retrieve_trigger( watcher, player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
if ( !isDefined( retrievable_model ) )
|
|
||||||
{
|
if ( !isdefined( retrievable_model ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger_pos = [];
|
trigger_pos = [];
|
||||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
|
||||||
|
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||||
{
|
{
|
||||||
trigger_pos[0] = prey.origin[0];
|
trigger_pos[0] = prey.origin[0];
|
||||||
trigger_pos[1] = prey.origin[1];
|
trigger_pos[1] = prey.origin[1];
|
||||||
@ -100,38 +101,43 @@ on_spawn_retrieve_trigger( watcher, player )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
|
||||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
|
||||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( is_true( level.ballistic_knife_autorecover ) )
|
||||||
|
{
|
||||||
|
trigger_pos[2] -= 50.0;
|
||||||
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
||||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||||
|
}
|
||||||
|
|
||||||
pickup_trigger.owner = player;
|
pickup_trigger.owner = player;
|
||||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||||
if ( isDefined( hint_string ) )
|
|
||||||
{
|
if ( isdefined( hint_string ) )
|
||||||
pickup_trigger sethintstring( hint_string );
|
pickup_trigger sethintstring( hint_string );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||||
}
|
|
||||||
pickup_trigger setteamfortrigger( player.team );
|
pickup_trigger setteamfortrigger( player.team );
|
||||||
player clientclaimtrigger( pickup_trigger );
|
player clientclaimtrigger( pickup_trigger );
|
||||||
pickup_trigger enablelinkto();
|
pickup_trigger enablelinkto();
|
||||||
if ( isDefined( prey ) )
|
|
||||||
{
|
if ( isdefined( prey ) )
|
||||||
pickup_trigger linkto( prey );
|
pickup_trigger linkto( prey );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger linkto( retrievable_model );
|
pickup_trigger linkto( retrievable_model );
|
||||||
}
|
|
||||||
if ( isDefined( level.knife_planted ) )
|
if ( isdefined( level.knife_planted ) )
|
||||||
{
|
|
||||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
||||||
}
|
|
||||||
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||||
}
|
}
|
||||||
@ -140,12 +146,13 @@ debug_print( endpos )
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
print3d( endpos, "pickup_trigger" );
|
print3d( endpos, "pickup_trigger" );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||||
@ -153,54 +160,63 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
|
|||||||
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 );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
trigger waittill( "trigger", player );
|
trigger waittill( "trigger", player );
|
||||||
while ( !isalive( player ) )
|
|
||||||
{
|
if ( !isalive( player ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( !player isonground() )
|
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
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;
|
||||||
|
hasreloaded = 1;
|
||||||
|
|
||||||
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||||
|
hasreloaded = 0;
|
||||||
|
|
||||||
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||||
{
|
{
|
||||||
|
if ( isdefined( playersoundonuse ) )
|
||||||
player playlocalsound( playersoundonuse );
|
player playlocalsound( playersoundonuse );
|
||||||
}
|
|
||||||
if ( isDefined( npcsoundonuse ) )
|
if ( isdefined( npcsoundonuse ) )
|
||||||
{
|
|
||||||
player playsound( npcsoundonuse );
|
player playsound( npcsoundonuse );
|
||||||
}
|
|
||||||
player thread [[ callback ]]( weapon, model, trigger );
|
player thread [[ callback ]]( weapon, model, trigger );
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_up( weapon, model, trigger )
|
pick_up( weapon, model, trigger )
|
||||||
|
{
|
||||||
|
if ( self hasweapon( weapon ) )
|
||||||
{
|
{
|
||||||
current_weapon = self getcurrentweapon();
|
current_weapon = self getcurrentweapon();
|
||||||
|
|
||||||
if ( current_weapon != weapon )
|
if ( current_weapon != weapon )
|
||||||
{
|
{
|
||||||
clip_ammo = self getweaponammoclip( weapon );
|
clip_ammo = self getweaponammoclip( weapon );
|
||||||
|
|
||||||
if ( !clip_ammo )
|
if ( !clip_ammo )
|
||||||
{
|
|
||||||
self setweaponammoclip( weapon, 1 );
|
self setweaponammoclip( weapon, 1 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
@ -212,27 +228,28 @@ pick_up( weapon, model, trigger )
|
|||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
}
|
}
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
}
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
||||||
model destroy_ent();
|
model destroy_ent();
|
||||||
trigger destroy_ent();
|
trigger destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_ent()
|
destroy_ent()
|
||||||
{
|
{
|
||||||
if ( isDefined( self ) )
|
if ( isdefined( self ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.glowing_model ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.glowing_model ) )
|
||||||
self.glowing_model delete();
|
self.glowing_model delete();
|
||||||
}
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
}
|
}
|
||||||
@ -241,12 +258,14 @@ drop_knives_to_ground( player )
|
|||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
level waittill( "drop_objects_to_ground", origin, radius );
|
level waittill( "drop_objects_to_ground", origin, radius );
|
||||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
|
||||||
|
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||||
{
|
{
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
self thread update_retrieve_trigger( player );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -256,9 +275,11 @@ force_drop_knives_to_ground_on_death( player, prey )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
prey waittill( "death" );
|
prey waittill( "death" );
|
||||||
|
|
||||||
self unlink();
|
self unlink();
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
self thread update_retrieve_trigger( player );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,12 +287,15 @@ update_retrieve_trigger( player )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
|
||||||
|
if ( isdefined( level.custom_update_retrieve_trigger ) )
|
||||||
{
|
{
|
||||||
self [[ level.custom_update_retrieve_trigger ]]( player );
|
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self waittill( "stationary" );
|
self waittill( "stationary" );
|
||||||
|
|
||||||
trigger = self.retrievabletrigger;
|
trigger = self.retrievabletrigger;
|
||||||
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
//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_bullet_zm" );
|
||||||
precacheitem( "blundersplat_explosive_dart_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;
|
||||||
@ -25,50 +25,51 @@ init() //checked matches cerberus output
|
|||||||
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 );
|
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||||
|
|
||||||
if ( weaponname == "blundersplat_bullet_zm" )
|
if ( weaponname == "blundersplat_bullet_zm" )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.titus_tagged ) )
|
if ( !isdefined( self.titus_tagged ) )
|
||||||
{
|
{
|
||||||
a_grenades = getentarray( "grenade", "classname" );
|
a_grenades = getentarray( "grenade", "classname" );
|
||||||
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 )
|
|
||||||
{
|
if ( !isdefined( a_grenades ) || a_grenades.size <= 0 )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
self.titus_tagged = 1;
|
self.titus_tagged = 1;
|
||||||
|
|
||||||
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" )
|
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||||
{
|
{
|
||||||
if ( e_grenade islinkedto( self ) )
|
if ( e_grenade islinkedto( self ) )
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
|
||||||
if ( !isDefined( e_grenade.fuse_time ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( e_grenade.fuse_time ) )
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
|
||||||
else
|
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_animate_and_die( n_fuse_timer, inflictor );
|
||||||
self thread _titus_target_check_for_grenade_hits();
|
self thread _titus_target_check_for_grenade_hits();
|
||||||
}
|
}
|
||||||
@ -76,13 +77,16 @@ zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_blundersplat_fired() //checked matches cerberus output
|
wait_for_blundersplat_fired()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_fired", str_weapon );
|
self waittill( "weapon_fired", str_weapon );
|
||||||
|
|
||||||
if ( str_weapon == "blundersplat_zm" )
|
if ( str_weapon == "blundersplat_zm" )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -92,17 +96,21 @@ wait_for_blundersplat_fired() //checked matches cerberus output
|
|||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
_titus_locate_target( 1 );
|
_titus_locate_target( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.5;
|
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" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_fired", str_weapon );
|
self waittill( "weapon_fired", str_weapon );
|
||||||
|
|
||||||
if ( str_weapon == "blundersplat_upgraded_zm" )
|
if ( str_weapon == "blundersplat_upgraded_zm" )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -115,31 +123,28 @@ wait_for_blundersplat_upgraded_fired() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_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
|
else
|
||||||
{
|
n_fuse_timer = randomfloatrange( 3.0, 4.0 );
|
||||||
n_fuse_timer = randomfloatrange( 3, 4 );
|
|
||||||
}
|
|
||||||
foreach ( target in a_targets )
|
foreach ( target in a_targets )
|
||||||
{
|
{
|
||||||
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
|
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
|
||||||
{
|
{
|
||||||
if ( isai( target ) )
|
if ( isai( target ) )
|
||||||
{
|
{
|
||||||
if ( !isDefined( target.titusmarked ) )
|
if ( !isdefined( target.titusmarked ) )
|
||||||
{
|
{
|
||||||
a_tags = [];
|
a_tags = [];
|
||||||
a_tags[0] = "j_hip_le";
|
a_tags[0] = "j_hip_le";
|
||||||
@ -151,6 +156,7 @@ _titus_locate_target( is_not_upgraded ) //checked changed to match cerberus outp
|
|||||||
a_tags[6] = "j_clavicle_ri";
|
a_tags[6] = "j_clavicle_ri";
|
||||||
str_tag = a_tags[randomint( a_tags.size )];
|
str_tag = a_tags[randomint( a_tags.size )];
|
||||||
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
|
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
|
||||||
|
|
||||||
if ( b_trace_pass )
|
if ( b_trace_pass )
|
||||||
{
|
{
|
||||||
target thread _titus_marked();
|
target thread _titus_marked();
|
||||||
@ -162,15 +168,16 @@ _titus_locate_target( is_not_upgraded ) //checked changed to match cerberus outp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vec = anglesToForward( fire_angles );
|
|
||||||
trace_end = fire_origin + ( vec * 20000 );
|
vec = anglestoforward( fire_angles );
|
||||||
|
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 );
|
||||||
@ -178,7 +185,7 @@ _titus_get_spread( n_spread ) //checked matches cerberus output
|
|||||||
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;
|
||||||
@ -186,138 +193,136 @@ _titus_marked() //checked matches cerberus output
|
|||||||
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 );
|
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||||
|
|
||||||
if ( weaponname == "blundersplat_bullet_zm" )
|
if ( weaponname == "blundersplat_bullet_zm" )
|
||||||
{
|
{
|
||||||
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" )
|
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||||
{
|
{
|
||||||
if ( e_grenade islinkedto( self ) )
|
if ( e_grenade islinkedto( self ) )
|
||||||
{
|
|
||||||
e_grenade thread _titus_grenade_detonate_on_target_death( 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( "killed_by_a_blundersplat", inflictor );
|
||||||
self notify( "titus_target_killed" );
|
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" );
|
target waittill( "titus_target_killed" );
|
||||||
|
|
||||||
self.fuse_reset = 1;
|
self.fuse_reset = 1;
|
||||||
self resetmissiledetonationtime( 0.05 );
|
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 );
|
new_gib_ref = self maps\mp\zombies\_zm_spawner::derive_damage_refs( point );
|
||||||
return new_gib_ref;
|
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 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
ground_ent = self getgroundent();
|
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" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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,29 +1,30 @@
|
|||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_stats;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_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;
|
|
||||||
while ( i < trigs.size )
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
{
|
{
|
||||||
model = getent( trigs[i].target, "targetname" );
|
model = getent( trigs[i].target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model hide();
|
model hide();
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
array_thread( trigs, ::buy_claymores );
|
array_thread( trigs, ::buy_claymores );
|
||||||
level thread give_claymores_after_rounds();
|
level thread give_claymores_after_rounds();
|
||||||
level.claymores_on_damage = ::satchel_damage;
|
level.claymores_on_damage = ::satchel_damage;
|
||||||
@ -38,28 +39,30 @@ 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;
|
||||||
|
|
||||||
|
if ( who has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
while ( who has_powerup_weapon() )
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.zombie_cost )
|
if ( who.score >= self.zombie_cost )
|
||||||
@ -67,43 +70,41 @@ buy_claymores()
|
|||||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
play_sound_at_pos( "purchase", self.origin );
|
||||||
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
|
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
|
||||||
who thread claymore_setup();
|
who thread claymore_setup();
|
||||||
who thread show_claymore_hint( "claymore_purchased" );
|
who thread show_claymore_hint( "claymore_purchased" );
|
||||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
}
|
|
||||||
if ( self.claymores_triggered == 0 )
|
if ( self.claymores_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
|
||||||
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
|
|
||||||
|
self.claymores_triggered = 1;
|
||||||
|
|
||||||
|
if ( isdefined( self.stub ) )
|
||||||
|
self.stub.claymores_triggered = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
|
trigs[i] setinvisibletoplayer( who );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
who thread show_claymore_hint( "already_purchased" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( isDefined( self.clientfieldname ) )
|
who play_sound_on_ent( "no_purchase" );
|
||||||
{
|
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.claymores_triggered = 1;
|
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
|
||||||
self.stub.claymores_triggered = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
|
||||||
{
|
|
||||||
trigs[ i ] setinvisibletoplayer( who );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else who thread show_claymore_hint( "already_purchased" );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,31 +114,32 @@ 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 false;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
|
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;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
{
|
||||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
|
||||||
{
|
{
|
||||||
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
}
|
}
|
||||||
@ -146,60 +148,57 @@ set_claymore_visible()
|
|||||||
claymore_safe_to_plant()
|
claymore_safe_to_plant()
|
||||||
{
|
{
|
||||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||||
{
|
|
||||||
return self [[ level.claymore_safe_to_plant ]]();
|
return self [[ level.claymore_safe_to_plant ]]();
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_wait_and_detonate()
|
claymore_wait_and_detonate()
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_watch()
|
claymore_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
self notify( "claymore_watch" );
|
||||||
|
self endon( "claymore_watch" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", claymore, weapname );
|
self waittill( "grenade_fire", claymore, weapname );
|
||||||
|
|
||||||
if ( weapname == "claymore_zm" )
|
if ( weapname == "claymore_zm" )
|
||||||
{
|
{
|
||||||
claymore.owner = self;
|
claymore.owner = self;
|
||||||
claymore.team = self.team;
|
claymore.team = self.team;
|
||||||
self notify( "zmb_enable_claymore_prompt" );
|
self notify( "zmb_enable_claymore_prompt" );
|
||||||
|
|
||||||
if ( claymore claymore_safe_to_plant() )
|
if ( claymore claymore_safe_to_plant() )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.claymore_planted ) )
|
if ( isdefined( level.claymore_planted ) )
|
||||||
{
|
|
||||||
self thread [[ level.claymore_planted ]]( claymore );
|
self thread [[ level.claymore_planted ]]( claymore );
|
||||||
}
|
|
||||||
claymore thread satchel_damage();
|
|
||||||
claymore thread claymore_detonation();
|
claymore thread claymore_detonation();
|
||||||
claymore thread play_claymore_effects();
|
claymore thread play_claymore_effects();
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
claymore thread claymore_wait_and_detonate();
|
claymore thread claymore_wait_and_detonate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
claymore_setup()
|
claymore_setup()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.claymores ) )
|
if ( !isdefined( self.claymores ) )
|
||||||
{
|
|
||||||
self.claymores = [];
|
self.claymores = [];
|
||||||
}
|
|
||||||
self thread claymore_watch();
|
self thread claymore_watch();
|
||||||
self giveweapon( "claymore_zm" );
|
self giveweapon( "claymore_zm" );
|
||||||
self set_player_placeable_mine( "claymore_zm" );
|
self set_player_placeable_mine( "claymore_zm" );
|
||||||
@ -209,22 +208,22 @@ claymore_setup()
|
|||||||
|
|
||||||
adjust_trigger_origin( origin )
|
adjust_trigger_origin( origin )
|
||||||
{
|
{
|
||||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
|
||||||
return origin;
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn_retrieve_trigger( watcher, player )
|
on_spawn_retrieve_trigger( watcher, player )
|
||||||
{
|
{
|
||||||
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
||||||
if ( isDefined( self.pickuptrigger ) )
|
|
||||||
{
|
if ( isdefined( self.pickuptrigger ) )
|
||||||
self.pickuptrigger sethintlowpriority( 0 );
|
self.pickuptrigger sethintlowpriority( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pickup_claymores()
|
pickup_claymores()
|
||||||
{
|
{
|
||||||
player = self.owner;
|
player = self.owner;
|
||||||
|
|
||||||
if ( !player hasweapon( "claymore_zm" ) )
|
if ( !player hasweapon( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
player thread claymore_watch();
|
player thread claymore_watch();
|
||||||
@ -238,6 +237,7 @@ pickup_claymores()
|
|||||||
{
|
{
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
{
|
||||||
self destroy_ent();
|
self destroy_ent();
|
||||||
@ -245,15 +245,16 @@ pickup_claymores()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self pick_up();
|
self pick_up();
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
|
||||||
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener( trigger, player )
|
pickup_claymores_trigger_listener( trigger, player )
|
||||||
@ -265,13 +266,15 @@ pickup_claymores_trigger_listener( 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" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger trigger_on();
|
trigger trigger_on();
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
}
|
}
|
||||||
@ -280,13 +283,15 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
|||||||
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" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill( "zmb_disable_claymore_prompt" );
|
player waittill( "zmb_disable_claymore_prompt" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger unlink();
|
trigger unlink();
|
||||||
trigger trigger_off();
|
trigger trigger_off();
|
||||||
}
|
}
|
||||||
@ -294,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
|||||||
|
|
||||||
shouldaffectweaponobject( object )
|
shouldaffectweaponobject( object )
|
||||||
{
|
{
|
||||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||||
dirtopos = pos - object.origin;
|
dirtopos = pos - object.origin;
|
||||||
objectforward = anglesToForward( object.angles );
|
objectforward = anglestoforward( object.angles );
|
||||||
dist = vectordot( dirtopos, objectforward );
|
dist = vectordot( dirtopos, objectforward );
|
||||||
|
|
||||||
if ( dist < level.claymore_detectionmindist )
|
if ( dist < level.claymore_detectionmindist )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
dirtopos = vectornormalize( dirtopos );
|
dirtopos = vectornormalize( dirtopos );
|
||||||
dot = vectordot( dirtopos, objectforward );
|
dot = vectordot( dirtopos, objectforward );
|
||||||
return dot > level.claymore_detectiondot;
|
return dot > level.claymore_detectiondot;
|
||||||
@ -316,44 +321,40 @@ claymore_detonation()
|
|||||||
damagearea setexcludeteamfortrigger( self.team );
|
damagearea setexcludeteamfortrigger( self.team );
|
||||||
damagearea enablelinkto();
|
damagearea enablelinkto();
|
||||||
damagearea linkto( self );
|
damagearea linkto( self );
|
||||||
|
|
||||||
if ( is_true( self.isonbus ) )
|
if ( is_true( self.isonbus ) )
|
||||||
{
|
|
||||||
damagearea setmovingplatformenabled( 1 );
|
damagearea setmovingplatformenabled( 1 );
|
||||||
}
|
|
||||||
self.damagearea = damagearea;
|
self.damagearea = damagearea;
|
||||||
self thread delete_claymores_on_death( self.owner, damagearea );
|
self thread delete_claymores_on_death( self.owner, damagearea );
|
||||||
self.owner.claymores[self.owner.claymores.size] = self;
|
self.owner.claymores[self.owner.claymores.size] = self;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
damagearea waittill( "trigger", ent );
|
damagearea waittill( "trigger", ent );
|
||||||
if ( isDefined( self.owner ) && ent == self.owner )
|
|
||||||
{
|
if ( isdefined( self.owner ) && ent == self.owner )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( !ent shouldaffectweaponobject( self ) )
|
if ( !ent shouldaffectweaponobject( self ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||||
{
|
{
|
||||||
self playsound( "wpn_claymore_alert" );
|
self playsound( "wpn_claymore_alert" );
|
||||||
wait 0,4;
|
wait 0.4;
|
||||||
if ( isDefined( self.owner ) )
|
|
||||||
{
|
if ( isdefined( self.owner ) )
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self detonate( undefined );
|
self detonate( undefined );
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -362,53 +363,53 @@ claymore_detonation()
|
|||||||
delete_claymores_on_death( player, ent )
|
delete_claymores_on_death( player, ent )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
if ( isdefined( player ) )
|
||||||
arrayremovevalue( player.claymores, self );
|
arrayremovevalue( player.claymores, self );
|
||||||
}
|
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
if ( isDefined( ent ) )
|
|
||||||
{
|
if ( isdefined( ent ) )
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
satchel_damage()
|
satchel_damage()
|
||||||
{
|
{
|
||||||
|
self endon( "death" );
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self.health = 100000;
|
self.health = 100000;
|
||||||
self.maxhealth = self.health;
|
self.maxhealth = self.health;
|
||||||
attacker = undefined;
|
attacker = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker );
|
self waittill( "damage", amount, attacker );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.health = self.maxhealth;
|
self.health = self.maxhealth;
|
||||||
while ( !isplayer( attacker ) )
|
|
||||||
{
|
if ( !isplayer( attacker ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( level.satchelexplodethisframe )
|
if ( level.satchelexplodethisframe )
|
||||||
{
|
wait( 0.1 + randomfloat( 0.4 ) );
|
||||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
else
|
||||||
}
|
wait 0.05;
|
||||||
else wait 0,05;
|
|
||||||
if ( !isDefined( self ) )
|
if ( !isdefined( self ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.satchelexplodethisframe = 1;
|
level.satchelexplodethisframe = 1;
|
||||||
thread reset_satchel_explode_this_frame();
|
thread reset_satchel_explode_this_frame();
|
||||||
self detonate( attacker );
|
self detonate( attacker );
|
||||||
@ -416,7 +417,7 @@ satchel_damage()
|
|||||||
|
|
||||||
reset_satchel_explode_this_frame()
|
reset_satchel_explode_this_frame()
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level.satchelexplodethisframe = 0;
|
level.satchelexplodethisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -429,14 +430,15 @@ play_claymore_effects()
|
|||||||
|
|
||||||
give_claymores_after_rounds()
|
give_claymores_after_rounds()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
|
||||||
|
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
@ -445,48 +447,20 @@ give_claymores_after_rounds()
|
|||||||
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
players[i] setweaponammoclip( "claymore_zm", 2 );
|
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
|
|
||||||
{
|
|
||||||
self.x = x;
|
|
||||||
self.y = y;
|
|
||||||
self.alignx = alignx;
|
|
||||||
self.aligny = aligny;
|
|
||||||
self.fontscale = fontscale;
|
|
||||||
self.alpha = alpha;
|
|
||||||
self.sort = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_client_hintelem()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
if ( !isDefined( self.hintelem ) )
|
|
||||||
{
|
|
||||||
self.hintelem = newclienthudelem( self );
|
|
||||||
}
|
|
||||||
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";
|
||||||
}
|
|
||||||
self setup_client_hintelem();
|
show_equipment_hint_text( text );
|
||||||
self.hintelem settext( text );
|
|
||||||
wait 3,5;
|
|
||||||
self.hintelem settext( "" );
|
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,22 @@
|
|||||||
#include maps/mp/zombies/_zm_audio;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/animscripts/zm_death;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_stats;
|
#include maps\mp\zombies\_zm_riotshield_prison;
|
||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
#include maps/mp/zombies/_zm_equipment;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_stats;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
#include maps\mp\animscripts\zm_death;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
maps/mp/zombies/_zm_riotshield_prison::init();
|
maps\mp\zombies\_zm_riotshield_prison::init();
|
||||||
set_zombie_var( "riotshield_cylinder_radius", 360 );
|
set_zombie_var( "riotshield_cylinder_radius", 360 );
|
||||||
set_zombie_var( "riotshield_fling_range", 90 );
|
set_zombie_var( "riotshield_fling_range", 90 );
|
||||||
set_zombie_var( "riotshield_gib_range", 90 );
|
set_zombie_var( "riotshield_gib_range", 90 );
|
||||||
@ -32,9 +35,9 @@ init()
|
|||||||
level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
|
level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
|
||||||
level.transferriotshield = ::transferriotshield;
|
level.transferriotshield = ::transferriotshield;
|
||||||
level.cantransferriotshield = ::cantransferriotshield;
|
level.cantransferriotshield = ::cantransferriotshield;
|
||||||
maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
|
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
|
||||||
maps/mp/zombies/_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
|
maps\mp\zombies\_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
|
||||||
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
|
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
|
||||||
onplayerconnect_callback( ::onplayerconnect );
|
onplayerconnect_callback( ::onplayerconnect );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,9 +54,10 @@ onplayerconnect()
|
|||||||
dropshield()
|
dropshield()
|
||||||
{
|
{
|
||||||
self.shield_placement = 0;
|
self.shield_placement = 0;
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||||
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles );
|
item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles );
|
||||||
if ( isDefined( item ) )
|
|
||||||
|
if ( isdefined( item ) )
|
||||||
{
|
{
|
||||||
item.shielddamagetaken = self.shielddamagetaken;
|
item.shielddamagetaken = self.shielddamagetaken;
|
||||||
item.original_owner = self;
|
item.original_owner = self;
|
||||||
@ -65,6 +69,7 @@ dropshield()
|
|||||||
item.requires_pickup = 1;
|
item.requires_pickup = 1;
|
||||||
item thread watchtoofriendly( self );
|
item thread watchtoofriendly( self );
|
||||||
}
|
}
|
||||||
|
|
||||||
self takeweapon( level.riotshield_name );
|
self takeweapon( level.riotshield_name );
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@ -72,13 +77,13 @@ dropshield()
|
|||||||
watchtoofriendly( player )
|
watchtoofriendly( player )
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 )
|
|
||||||
|
if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 )
|
||||||
{
|
{
|
||||||
if ( isalive( player ) )
|
if ( isalive( player ) )
|
||||||
{
|
|
||||||
player playlocalsound( level.zmb_laugh_alias );
|
player playlocalsound( level.zmb_laugh_alias );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 );
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 );
|
||||||
self deployed_damage_shield( 2000 );
|
self deployed_damage_shield( 2000 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,49 +102,46 @@ placeshield( origin, angles )
|
|||||||
if ( self getcurrentweapon() != level.riotshield_name )
|
if ( self getcurrentweapon() != level.riotshield_name )
|
||||||
{
|
{
|
||||||
self switchtoweapon( level.riotshield_name );
|
self switchtoweapon( level.riotshield_name );
|
||||||
|
|
||||||
self waittill( "weapon_change" );
|
self waittill( "weapon_change" );
|
||||||
}
|
}
|
||||||
item = self maps/mp/zombies/_zm_riotshield_prison::doriotshielddeploy( origin, angles );
|
|
||||||
if ( isDefined( item ) )
|
item = self maps\mp\zombies\_zm_riotshield_prison::doriotshielddeploy( origin, angles );
|
||||||
|
|
||||||
|
if ( isdefined( item ) )
|
||||||
{
|
{
|
||||||
item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 );
|
item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 );
|
||||||
item.angles = self.angles;
|
item.angles = self.angles;
|
||||||
item.owner = self;
|
item.owner = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
cantransferriotshield( fromplayer, toplayer )
|
cantransferriotshield( fromplayer, toplayer )
|
||||||
{
|
{
|
||||||
if ( isDefined( toplayer.screecher_weapon ) )
|
if ( isdefined( toplayer.screecher_weapon ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 )
|
||||||
if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 )
|
return false;
|
||||||
{
|
|
||||||
return 0;
|
if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() )
|
||||||
}
|
return false;
|
||||||
if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( toplayer isthrowinggrenade() )
|
if ( toplayer isthrowinggrenade() )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( fromplayer == toplayer )
|
if ( fromplayer == toplayer )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 )
|
if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ( fromplayer.session_team != toplayer.session_team )
|
if ( fromplayer.session_team != toplayer.session_team )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
transferriotshield( fromplayer, toplayer )
|
transferriotshield( fromplayer, toplayer )
|
||||||
@ -150,7 +152,7 @@ transferriotshield( fromplayer, toplayer )
|
|||||||
toplayer.shielddamagetaken = damage;
|
toplayer.shielddamagetaken = damage;
|
||||||
toplayer.shield_placement = 3;
|
toplayer.shield_placement = 3;
|
||||||
toplayer.shield_damage_level = 0;
|
toplayer.shield_damage_level = 0;
|
||||||
toplayer maps/mp/zombies/_zm_equipment::equipment_give( "alcatraz_shield_zm" );
|
toplayer maps\mp\zombies\_zm_equipment::equipment_give( "alcatraz_shield_zm" );
|
||||||
toplayer switchtoweapon( "alcatraz_shield_zm" );
|
toplayer switchtoweapon( "alcatraz_shield_zm" );
|
||||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||||
toplayer player_set_shield_health( damage, damagemax );
|
toplayer player_set_shield_health( damage, damagemax );
|
||||||
@ -159,10 +161,12 @@ transferriotshield( fromplayer, toplayer )
|
|||||||
player_take_riotshield()
|
player_take_riotshield()
|
||||||
{
|
{
|
||||||
self notify( "destroy_riotshield" );
|
self notify( "destroy_riotshield" );
|
||||||
|
|
||||||
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
||||||
{
|
{
|
||||||
new_primary = "";
|
new_primary = "";
|
||||||
if ( isDefined( self.laststand ) && self.laststand )
|
|
||||||
|
if ( isdefined( self.laststand ) && self.laststand )
|
||||||
{
|
{
|
||||||
new_primary = self.laststandpistol;
|
new_primary = self.laststandpistol;
|
||||||
self giveweapon( new_primary );
|
self giveweapon( new_primary );
|
||||||
@ -170,31 +174,31 @@ player_take_riotshield()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
i = 0;
|
|
||||||
while ( i < primaryweapons.size )
|
for ( i = 0; i < primaryweapons.size; i++ )
|
||||||
{
|
{
|
||||||
if ( primaryweapons[i] != "alcatraz_shield_zm" )
|
if ( primaryweapons[i] != "alcatraz_shield_zm" )
|
||||||
{
|
{
|
||||||
new_primary = primaryweapons[i];
|
new_primary = primaryweapons[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( new_primary == "" )
|
if ( new_primary == "" )
|
||||||
{
|
{
|
||||||
self maps/mp/zombies/_zm_weapons::give_fallback_weapon();
|
self maps\mp\zombies\_zm_weapons::give_fallback_weapon();
|
||||||
new_primary = "zombie_fists_zm";
|
new_primary = "zombie_fists_zm";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self switchtoweaponimmediate( new_primary );
|
self switchtoweaponimmediate( new_primary );
|
||||||
self playsound( "wpn_riotshield_zm_destroy" );
|
self playsound( "wpn_riotshield_zm_destroy" );
|
||||||
|
|
||||||
self waittill( "weapon_change" );
|
self waittill( "weapon_change" );
|
||||||
}
|
}
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::removeriotshield();
|
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
self maps\mp\zombies\_zm_riotshield_prison::removeriotshield();
|
||||||
|
self maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||||
self.hasriotshield = 0;
|
self.hasriotshield = 0;
|
||||||
self.hasriotshieldequipped = 0;
|
self.hasriotshieldequipped = 0;
|
||||||
}
|
}
|
||||||
@ -202,9 +206,11 @@ player_take_riotshield()
|
|||||||
player_watch_laststand()
|
player_watch_laststand()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "entering_last_stand" );
|
self waittill( "entering_last_stand" );
|
||||||
|
|
||||||
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
||||||
{
|
{
|
||||||
new_primary = self.laststandpistol;
|
new_primary = self.laststandpistol;
|
||||||
@ -219,7 +225,7 @@ player_init_shield_health()
|
|||||||
retval = self.shielddamagetaken > 0;
|
retval = self.shielddamagetaken > 0;
|
||||||
self.shielddamagetaken = 0;
|
self.shielddamagetaken = 0;
|
||||||
self.shield_damage_level = 0;
|
self.shield_damage_level = 0;
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,75 +234,65 @@ player_init_shield_location()
|
|||||||
self.hasriotshield = 1;
|
self.hasriotshield = 1;
|
||||||
self.hasriotshieldequipped = 0;
|
self.hasriotshieldequipped = 0;
|
||||||
self.shield_placement = 2;
|
self.shield_placement = 2;
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
|
|
||||||
player_set_shield_health( damage, max_damage )
|
player_set_shield_health( damage, max_damage )
|
||||||
{
|
{
|
||||||
shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage );
|
shieldhealth = int( 100 * ( max_damage - damage ) / max_damage );
|
||||||
|
|
||||||
if ( shieldhealth >= 50 )
|
if ( shieldhealth >= 50 )
|
||||||
{
|
|
||||||
self.shield_damage_level = 0;
|
self.shield_damage_level = 0;
|
||||||
}
|
|
||||||
else if ( shieldhealth >= 25 )
|
else if ( shieldhealth >= 25 )
|
||||||
{
|
|
||||||
self.shield_damage_level = 2;
|
self.shield_damage_level = 2;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.shield_damage_level = 3;
|
self.shield_damage_level = 3;
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||||
}
|
}
|
||||||
|
|
||||||
deployed_set_shield_health( damage, max_damage )
|
deployed_set_shield_health( damage, max_damage )
|
||||||
{
|
{
|
||||||
shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage );
|
shieldhealth = int( 100 * ( max_damage - damage ) / max_damage );
|
||||||
|
|
||||||
if ( shieldhealth >= 50 )
|
if ( shieldhealth >= 50 )
|
||||||
{
|
|
||||||
self.shield_damage_level = 0;
|
self.shield_damage_level = 0;
|
||||||
}
|
|
||||||
else if ( shieldhealth >= 25 )
|
else if ( shieldhealth >= 25 )
|
||||||
{
|
|
||||||
self.shield_damage_level = 2;
|
self.shield_damage_level = 2;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.shield_damage_level = 3;
|
self.shield_damage_level = 3;
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_riotshield_prison::updatestandaloneriotshieldmodel();
|
self maps\mp\zombies\_zm_riotshield_prison::updatestandaloneriotshieldmodel();
|
||||||
}
|
}
|
||||||
|
|
||||||
player_damage_shield( idamage, bheld )
|
player_damage_shield( idamage, bheld )
|
||||||
{
|
{
|
||||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||||
if ( !isDefined( self.shielddamagetaken ) )
|
|
||||||
{
|
if ( !isdefined( self.shielddamagetaken ) )
|
||||||
self.shielddamagetaken = 0;
|
self.shielddamagetaken = 0;
|
||||||
}
|
|
||||||
self.shielddamagetaken += idamage;
|
self.shielddamagetaken += idamage;
|
||||||
|
|
||||||
if ( self.shielddamagetaken >= damagemax )
|
if ( self.shielddamagetaken >= damagemax )
|
||||||
{
|
{
|
||||||
if ( bheld || !isDefined( self.shield_ent ) )
|
if ( bheld || !isdefined( self.shield_ent ) )
|
||||||
{
|
{
|
||||||
self playrumbleonentity( "damage_heavy" );
|
self playrumbleonentity( "damage_heavy" );
|
||||||
earthquake( 1, 0,75, self.origin, 100 );
|
earthquake( 1.0, 0.75, self.origin, 100 );
|
||||||
}
|
}
|
||||||
else
|
else if ( isdefined( self.shield_ent ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.shield_ent ) )
|
|
||||||
{
|
{
|
||||||
if ( is_true( self.shield_ent.destroy_begun ) )
|
if ( is_true( self.shield_ent.destroy_begun ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.shield_ent.destroy_begun = 1;
|
self.shield_ent.destroy_begun = 1;
|
||||||
shield_origin = self.shield_ent.origin;
|
shield_origin = self.shield_ent.origin;
|
||||||
level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||||
wait 1;
|
wait 1;
|
||||||
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self thread player_take_riotshield();
|
self thread player_take_riotshield();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -304,8 +300,9 @@ player_damage_shield( idamage, bheld )
|
|||||||
if ( bheld )
|
if ( bheld )
|
||||||
{
|
{
|
||||||
self playrumbleonentity( "damage_light" );
|
self playrumbleonentity( "damage_light" );
|
||||||
earthquake( 0,5, 0,5, self.origin, 100 );
|
earthquake( 0.5, 0.5, self.origin, 100 );
|
||||||
}
|
}
|
||||||
|
|
||||||
self player_set_shield_health( self.shielddamagetaken, damagemax );
|
self player_set_shield_health( self.shielddamagetaken, damagemax );
|
||||||
self playsound( "fly_riotshield_zm_impact_zombies" );
|
self playsound( "fly_riotshield_zm_impact_zombies" );
|
||||||
}
|
}
|
||||||
@ -314,56 +311,55 @@ player_damage_shield( idamage, bheld )
|
|||||||
deployed_damage_shield( idamage )
|
deployed_damage_shield( idamage )
|
||||||
{
|
{
|
||||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||||
if ( !isDefined( self.shielddamagetaken ) )
|
|
||||||
{
|
if ( !isdefined( self.shielddamagetaken ) )
|
||||||
self.shielddamagetaken = 0;
|
self.shielddamagetaken = 0;
|
||||||
}
|
|
||||||
self.shielddamagetaken += idamage;
|
self.shielddamagetaken += idamage;
|
||||||
|
|
||||||
if ( self.shielddamagetaken >= damagemax )
|
if ( self.shielddamagetaken >= damagemax )
|
||||||
{
|
{
|
||||||
shield_origin = self.origin;
|
shield_origin = self.origin;
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub );
|
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
|
||||||
}
|
|
||||||
if ( isDefined( self.original_owner ) )
|
if ( isdefined( self.original_owner ) )
|
||||||
{
|
self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||||
self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
|
||||||
}
|
maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||||
maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
|
||||||
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
||||||
self_delete();
|
self_delete();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self deployed_set_shield_health( self.shielddamagetaken, damagemax );
|
self deployed_set_shield_health( self.shielddamagetaken, damagemax );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
riotshield_activation_watcher_thread()
|
riotshield_activation_watcher_thread()
|
||||||
{
|
{
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "alcatraz_shield_zm_taken" );
|
self endon( "alcatraz_shield_zm_taken" );
|
||||||
while ( 1 )
|
|
||||||
{
|
while ( true )
|
||||||
self waittill_either( "alcatraz_shield_zm_activate", "alcatraz_shield_zm_deactivate" );
|
self waittill_either( "alcatraz_shield_zm_activate", "alcatraz_shield_zm_deactivate" );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
watchriotshielduse()
|
watchriotshielduse()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self.shielddamagetaken = 0;
|
self.shielddamagetaken = 0;
|
||||||
self thread maps/mp/zombies/_zm_riotshield_prison::trackriotshield();
|
self thread maps\mp\zombies\_zm_riotshield_prison::trackriotshield();
|
||||||
self thread maps/mp/zombies/_zm_riotshield_prison::trackequipmentchange();
|
self thread maps\mp\zombies\_zm_riotshield_prison::trackequipmentchange();
|
||||||
self thread maps/mp/zombies/_zm_riotshield_prison::watchshieldlaststand();
|
self thread maps\mp\zombies\_zm_riotshield_prison::watchshieldlaststand();
|
||||||
self thread trackstuckzombies();
|
self thread trackstuckzombies();
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "raise_riotshield" );
|
self waittill( "raise_riotshield" );
|
||||||
self thread maps/mp/zombies/_zm_riotshield_prison::startriotshielddeploy();
|
|
||||||
|
self thread maps\mp\zombies\_zm_riotshield_prison::startriotshielddeploy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -372,43 +368,42 @@ watchriotshieldmelee()
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_melee", weapon );
|
self waittill( "weapon_melee", weapon );
|
||||||
|
|
||||||
if ( weapon == level.riotshield_name )
|
if ( weapon == level.riotshield_name )
|
||||||
{
|
|
||||||
self riotshield_melee();
|
self riotshield_melee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
is_riotshield_damage( mod, player, amount )
|
is_riotshield_damage( mod, player, amount )
|
||||||
{
|
{
|
||||||
if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 )
|
if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshield_damage( amount )
|
riotshield_damage( amount )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshield_fling_zombie( player, fling_vec, index )
|
riotshield_fling_zombie( player, fling_vec, index )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self ) || !isalive( self ) )
|
if ( !isdefined( self ) || !isalive( self ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield )
|
if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.riotshield_fling_func ) )
|
if ( isdefined( self.riotshield_fling_func ) )
|
||||||
{
|
{
|
||||||
self [[ self.riotshield_fling_func ]]( player );
|
self [[ self.riotshield_fling_func ]]( player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
damage = 2500;
|
damage = 2500;
|
||||||
self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" );
|
self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" );
|
||||||
|
|
||||||
if ( self.health < 1 )
|
if ( self.health < 1 )
|
||||||
{
|
{
|
||||||
self.riotshield_death = 1;
|
self.riotshield_death = 1;
|
||||||
@ -420,17 +415,17 @@ riotshield_fling_zombie( player, fling_vec, index )
|
|||||||
zombie_knockdown( player, gib )
|
zombie_knockdown( player, gib )
|
||||||
{
|
{
|
||||||
damage = level.zombie_vars["riotshield_knockdown_damage"];
|
damage = level.zombie_vars["riotshield_knockdown_damage"];
|
||||||
if ( isDefined( level.override_riotshield_damage_func ) )
|
|
||||||
{
|
if ( isdefined( level.override_riotshield_damage_func ) )
|
||||||
self [[ level.override_riotshield_damage_func ]]( player, gib );
|
self [[ level.override_riotshield_damage_func ]]( player, gib );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( gib )
|
if ( gib )
|
||||||
{
|
{
|
||||||
self.a.gib_ref = random( level.riotshield_gib_refs );
|
self.a.gib_ref = random( level.riotshield_gib_refs );
|
||||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||||
}
|
}
|
||||||
|
|
||||||
self dodamage( damage, player.origin, player );
|
self dodamage( damage, player.origin, player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -440,18 +435,15 @@ riotshield_knockdown_zombie( player, gib )
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
playsoundatposition( "vox_riotshield_forcehit", self.origin );
|
playsoundatposition( "vox_riotshield_forcehit", self.origin );
|
||||||
playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
|
playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
|
||||||
if ( !isDefined( self ) || !isalive( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) || !isalive( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.riotshield_knockdown_func ) )
|
if ( isdefined( self.riotshield_knockdown_func ) )
|
||||||
{
|
|
||||||
self [[ self.riotshield_knockdown_func ]]( player, gib );
|
self [[ self.riotshield_knockdown_func ]]( player, gib );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self zombie_knockdown( player, gib );
|
self zombie_knockdown( player, gib );
|
||||||
}
|
|
||||||
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player );
|
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player );
|
||||||
self playsound( "fly_riotshield_forcehit" );
|
self playsound( "fly_riotshield_forcehit" );
|
||||||
}
|
}
|
||||||
@ -460,94 +452,89 @@ riotshield_get_enemies_in_range()
|
|||||||
{
|
{
|
||||||
view_pos = self geteye();
|
view_pos = self geteye();
|
||||||
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] );
|
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] );
|
||||||
if ( !isDefined( zombies ) )
|
|
||||||
{
|
if ( !isdefined( zombies ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"];
|
knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"];
|
||||||
gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"];
|
gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"];
|
||||||
fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"];
|
fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"];
|
||||||
cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"];
|
cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"];
|
||||||
forward_view_angles = self getweaponforwarddir();
|
forward_view_angles = self getweaponforwarddir();
|
||||||
end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] );
|
end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] );
|
||||||
/#
|
/#
|
||||||
if ( getDvarInt( #"BF480CE9" ) == 2 )
|
if ( 2 == getdvarint( _hash_BF480CE9 ) )
|
||||||
{
|
{
|
||||||
near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 );
|
near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 );
|
||||||
circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
|
||||||
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
|
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
|
||||||
circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
}
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < zombies.size )
|
|
||||||
{
|
{
|
||||||
if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) )
|
if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) )
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
test_origin = zombies[i] getcentroid();
|
test_origin = zombies[i] getcentroid();
|
||||||
test_range_squared = distancesquared( view_pos, test_origin );
|
test_range_squared = distancesquared( view_pos, test_origin );
|
||||||
|
|
||||||
if ( test_range_squared > knockdown_range_squared )
|
if ( test_range_squared > knockdown_range_squared )
|
||||||
{
|
{
|
||||||
zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
normal = vectornormalize( test_origin - view_pos );
|
normal = vectornormalize( test_origin - view_pos );
|
||||||
dot = vectordot( forward_view_angles, normal );
|
dot = vectordot( forward_view_angles, normal );
|
||||||
if ( dot <= 0 )
|
|
||||||
|
if ( 0 > dot )
|
||||||
{
|
{
|
||||||
zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
|
||||||
|
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||||
|
|
||||||
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
||||||
{
|
{
|
||||||
zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
|
|
||||||
|
if ( 0 == zombies[i] damageconetrace( view_pos, self ) )
|
||||||
{
|
{
|
||||||
zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( test_range_squared < fling_range_squared )
|
|
||||||
|
if ( test_range_squared < fling_range_squared )
|
||||||
{
|
{
|
||||||
level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i];
|
level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i];
|
||||||
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
||||||
fling_vec = vectornormalize( test_origin - view_pos );
|
fling_vec = vectornormalize( test_origin - view_pos );
|
||||||
if ( test_range_squared >= 5000 )
|
|
||||||
{
|
if ( 5000 < test_range_squared )
|
||||||
fling_vec += vectornormalize( test_origin - radial_origin );
|
fling_vec += vectornormalize( test_origin - radial_origin );
|
||||||
}
|
|
||||||
fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) );
|
fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) );
|
||||||
fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) );
|
fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult );
|
||||||
level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec;
|
level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec;
|
||||||
zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) );
|
||||||
i++;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i];
|
level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i];
|
||||||
level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0;
|
level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0;
|
||||||
zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) );
|
zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) );
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshield_network_choke()
|
riotshield_network_choke()
|
||||||
{
|
{
|
||||||
level.riotshield_network_choke_count++;
|
level.riotshield_network_choke_count++;
|
||||||
if ( level.riotshield_network_choke_count % 10 )
|
|
||||||
|
if ( !( level.riotshield_network_choke_count % 10 ) )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -557,58 +544,58 @@ riotshield_network_choke()
|
|||||||
|
|
||||||
riotshield_melee()
|
riotshield_melee()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.riotshield_knockdown_enemies ) )
|
if ( !isdefined( level.riotshield_knockdown_enemies ) )
|
||||||
{
|
{
|
||||||
level.riotshield_knockdown_enemies = [];
|
level.riotshield_knockdown_enemies = [];
|
||||||
level.riotshield_knockdown_gib = [];
|
level.riotshield_knockdown_gib = [];
|
||||||
level.riotshield_fling_enemies = [];
|
level.riotshield_fling_enemies = [];
|
||||||
level.riotshield_fling_vecs = [];
|
level.riotshield_fling_vecs = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
self riotshield_get_enemies_in_range();
|
self riotshield_get_enemies_in_range();
|
||||||
shield_damage = 0;
|
shield_damage = 0;
|
||||||
level.riotshield_network_choke_count = 0;
|
level.riotshield_network_choke_count = 0;
|
||||||
i = 0;
|
|
||||||
while ( i < level.riotshield_fling_enemies.size )
|
for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
|
||||||
{
|
{
|
||||||
riotshield_network_choke();
|
riotshield_network_choke();
|
||||||
if ( isDefined( level.riotshield_fling_enemies[ i ] ) )
|
|
||||||
|
if ( isdefined( level.riotshield_fling_enemies[i] ) )
|
||||||
{
|
{
|
||||||
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
|
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
|
||||||
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
|
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
i = 0;
|
|
||||||
while ( i < level.riotshield_knockdown_enemies.size )
|
for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
|
||||||
{
|
{
|
||||||
riotshield_network_choke();
|
riotshield_network_choke();
|
||||||
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
|
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
|
||||||
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
|
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
level.riotshield_knockdown_enemies = [];
|
level.riotshield_knockdown_enemies = [];
|
||||||
level.riotshield_knockdown_gib = [];
|
level.riotshield_knockdown_gib = [];
|
||||||
level.riotshield_fling_enemies = [];
|
level.riotshield_fling_enemies = [];
|
||||||
level.riotshield_fling_vecs = [];
|
level.riotshield_fling_vecs = [];
|
||||||
|
|
||||||
if ( shield_damage )
|
if ( shield_damage )
|
||||||
{
|
|
||||||
self player_damage_shield( shield_damage, 0 );
|
self player_damage_shield( shield_damage, 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
trackstuckzombies()
|
trackstuckzombies()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "deployed_riotshield" );
|
self waittill( "deployed_riotshield" );
|
||||||
if ( isDefined( self.riotshieldentity ) )
|
|
||||||
{
|
if ( isdefined( self.riotshieldentity ) )
|
||||||
self thread watchstuckzombies();
|
self thread watchstuckzombies();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
attack_shield( shield )
|
attack_shield( shield )
|
||||||
{
|
{
|
||||||
@ -617,38 +604,36 @@ attack_shield( shield )
|
|||||||
shield.owner endon( "disconnect" );
|
shield.owner endon( "disconnect" );
|
||||||
shield.owner endon( "start_riotshield_deploy" );
|
shield.owner endon( "start_riotshield_deploy" );
|
||||||
shield.owner endon( "destroy_riotshield" );
|
shield.owner endon( "destroy_riotshield" );
|
||||||
if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
|
||||||
{
|
if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
self.old_origin = self.origin;
|
self.old_origin = self.origin;
|
||||||
if ( getDvar( "zombie_shield_attack_freq" ) == "" )
|
|
||||||
{
|
if ( getdvar( _hash_B253DFE7 ) == "" )
|
||||||
setdvar( "zombie_shield_attack_freq", "15" );
|
setdvar( "zombie_shield_attack_freq", "15" );
|
||||||
}
|
|
||||||
freq = getDvarInt( "zombie_shield_attack_freq" );
|
freq = getdvarint( _hash_B253DFE7 );
|
||||||
self.doing_shield_attack = 1;
|
self.doing_shield_attack = 1;
|
||||||
self.enemyoverride[0] = shield.origin;
|
self.enemyoverride[0] = shield.origin;
|
||||||
self.enemyoverride[1] = shield;
|
self.enemyoverride[1] = shield;
|
||||||
wait ( randomint( 100 ) / 100 );
|
wait( randomint( 100 ) / 100.0 );
|
||||||
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname );
|
self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname );
|
||||||
attackanim = "zm_riotshield_melee";
|
attackanim = "zm_riotshield_melee";
|
||||||
|
|
||||||
if ( !self.has_legs )
|
if ( !self.has_legs )
|
||||||
{
|
|
||||||
attackanim += "_crawl";
|
attackanim += "_crawl";
|
||||||
}
|
|
||||||
self orientmode( "face point", shield.origin );
|
self orientmode( "face point", shield.origin );
|
||||||
self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim );
|
self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim );
|
||||||
if ( isDefined( shield.owner.player_shield_apply_damage ) )
|
|
||||||
{
|
if ( isdefined( shield.owner.player_shield_apply_damage ) )
|
||||||
shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 );
|
shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
shield.owner player_damage_shield( 100, 0 );
|
shield.owner player_damage_shield( 100, 0 );
|
||||||
}
|
|
||||||
self thread attack_shield_stop( shield );
|
self thread attack_shield_stop( shield );
|
||||||
wait ( randomint( 100 ) / 100 );
|
wait( randomint( 100 ) / 100.0 );
|
||||||
self.doing_shield_attack = 0;
|
self.doing_shield_attack = 0;
|
||||||
self orientmode( "face default" );
|
self orientmode( "face default" );
|
||||||
}
|
}
|
||||||
@ -658,15 +643,18 @@ attack_shield_stop( shield )
|
|||||||
self notify( "attack_shield_stop" );
|
self notify( "attack_shield_stop" );
|
||||||
self endon( "attack_shield_stop" );
|
self endon( "attack_shield_stop" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
shield waittill( "death" );
|
shield waittill( "death" );
|
||||||
|
|
||||||
self stopanimscripted();
|
self stopanimscripted();
|
||||||
if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
|
||||||
|
if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||||
{
|
{
|
||||||
breachanim = "zm_riotshield_breakthrough";
|
breachanim = "zm_riotshield_breakthrough";
|
||||||
|
|
||||||
if ( !self.has_legs )
|
if ( !self.has_legs )
|
||||||
{
|
|
||||||
breachanim += "_crawl";
|
breachanim += "_crawl";
|
||||||
}
|
|
||||||
self animscripted( self.origin, flat_angle( self.angles ), breachanim );
|
self animscripted( self.origin, flat_angle( self.angles ), breachanim );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -674,19 +662,18 @@ attack_shield_stop( shield )
|
|||||||
window_notetracks( msg, player )
|
window_notetracks( msg, player )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( msg, notetrack );
|
self waittill( msg, notetrack );
|
||||||
|
|
||||||
if ( notetrack == "end" )
|
if ( notetrack == "end" )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( notetrack == "fire" )
|
if ( notetrack == "fire" )
|
||||||
{
|
|
||||||
player player_damage_shield( 100, 0 );
|
player player_damage_shield( 100, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
watchstuckzombies()
|
watchstuckzombies()
|
||||||
{
|
{
|
||||||
@ -696,31 +683,30 @@ watchstuckzombies()
|
|||||||
self endon( "destroy_riotshield" );
|
self endon( "destroy_riotshield" );
|
||||||
self endon( "deployed_riotshield" );
|
self endon( "deployed_riotshield" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies();
|
self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies();
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshield_active()
|
riotshield_active()
|
||||||
{
|
{
|
||||||
return self maps/mp/zombies/_zm_equipment::is_equipment_active( "alcatraz_shield_zm" );
|
return self maps\mp\zombies\_zm_equipment::is_equipment_active( "alcatraz_shield_zm" );
|
||||||
}
|
}
|
||||||
|
|
||||||
riotshield_debug_print( msg, color )
|
riotshield_debug_print( msg, color )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( !getDvarInt( #"BF480CE9" ) )
|
if ( !getdvarint( _hash_BF480CE9 ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !isDefined( color ) )
|
if ( !isdefined( color ) )
|
||||||
{
|
color = ( 1, 1, 1 );
|
||||||
color = ( 0, 0, 1 );
|
|
||||||
}
|
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 );
|
||||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 );
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
shield_zombie_attract_func( poi )
|
shield_zombie_attract_func( poi )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
shield_zombie_arrive_func( poi )
|
shield_zombie_arrive_func( poi )
|
||||||
@ -728,16 +714,17 @@ shield_zombie_arrive_func( poi )
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "zombie_acquire_enemy" );
|
self endon( "zombie_acquire_enemy" );
|
||||||
self endon( "path_timer_done" );
|
self endon( "path_timer_done" );
|
||||||
|
|
||||||
self waittill( "goal" );
|
self waittill( "goal" );
|
||||||
if ( isDefined( poi.owner ) )
|
|
||||||
|
if ( isdefined( poi.owner ) )
|
||||||
{
|
{
|
||||||
poi.owner player_damage_shield( 100, 0 );
|
poi.owner player_damage_shield( 100, 0 );
|
||||||
if ( isDefined( poi.owner.player_shield_apply_damage ) )
|
|
||||||
{
|
if ( isdefined( poi.owner.player_shield_apply_damage ) )
|
||||||
poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 );
|
poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
createriotshieldattractor()
|
createriotshieldattractor()
|
||||||
{
|
{
|
||||||
@ -751,9 +738,10 @@ riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount
|
|||||||
if ( self is_riotshield_damage( mod, player, amount ) )
|
if ( self is_riotshield_damage( mod, player, amount ) )
|
||||||
{
|
{
|
||||||
self riotshield_damage( amount );
|
self riotshield_damage( amount );
|
||||||
return 1;
|
return true;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
watchriotshieldattractor()
|
watchriotshieldattractor()
|
||||||
@ -770,9 +758,11 @@ trackriotshieldattractor()
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "deployed_riotshield" );
|
self waittill( "deployed_riotshield" );
|
||||||
|
|
||||||
self thread watchriotshieldattractor();
|
self thread watchriotshieldattractor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,25 @@
|
|||||||
//checked includes match cerberus output
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_stats;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_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_score;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
|
||||||
init() //checked matches cerberus output
|
init()
|
||||||
{
|
{
|
||||||
registerclientfield( "toplayer", "tomahawk_in_use", 9000, 2, "int" );
|
registerclientfield( "toplayer", "tomahawk_in_use", 9000, 2, "int" );
|
||||||
registerclientfield( "toplayer", "upgraded_tomahawk_in_use", 9000, 1, "int" );
|
registerclientfield( "toplayer", "upgraded_tomahawk_in_use", 9000, 1, "int" );
|
||||||
registerclientfield( "scriptmover", "play_tomahawk_fx", 9000, 2, "int" );
|
registerclientfield( "scriptmover", "play_tomahawk_fx", 9000, 2, "int" );
|
||||||
registerclientfield( "actor", "play_tomahawk_hit_sound", 9000, 1, "int" );
|
registerclientfield( "actor", "play_tomahawk_hit_sound", 9000, 1, "int" );
|
||||||
onplayerconnect_callback( ::tomahawk_on_player_connect );
|
onplayerconnect_callback( ::tomahawk_on_player_connect );
|
||||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 );
|
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 );
|
||||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 );
|
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 );
|
||||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 );
|
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 );
|
||||||
maps/mp/zombies/_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
maps\mp\zombies\_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||||
maps/mp/zombies/_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
maps\mp\zombies\_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||||
level thread tomahawk_pickup();
|
level thread tomahawk_pickup();
|
||||||
level.zombie_weapons_no_max_ammo = [];
|
level.zombie_weapons_no_max_ammo = [];
|
||||||
level.zombie_weapons_no_max_ammo["bouncing_tomahawk_zm"] = 1;
|
level.zombie_weapons_no_max_ammo["bouncing_tomahawk_zm"] = 1;
|
||||||
@ -26,7 +27,7 @@ init() //checked matches cerberus output
|
|||||||
level.a_tomahawk_pickup_funcs = [];
|
level.a_tomahawk_pickup_funcs = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_on_player_connect() //checked matches cerberus output
|
tomahawk_on_player_connect()
|
||||||
{
|
{
|
||||||
self.current_tomahawk_weapon = "bouncing_tomahawk_zm";
|
self.current_tomahawk_weapon = "bouncing_tomahawk_zm";
|
||||||
self.current_tactical_grenade = "bouncing_tomahawk_zm";
|
self.current_tactical_grenade = "bouncing_tomahawk_zm";
|
||||||
@ -34,142 +35,136 @@ tomahawk_on_player_connect() //checked matches cerberus output
|
|||||||
self thread watch_for_tomahawk_charge();
|
self thread watch_for_tomahawk_charge();
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_tomahawk_throw() //checked changed to match cerberus output
|
watch_for_tomahawk_throw()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", grenade, weapname );
|
self waittill( "grenade_fire", grenade, weapname );
|
||||||
|
|
||||||
if ( !issubstr( weapname, "tomahawk_zm" ) )
|
if ( !issubstr( weapname, "tomahawk_zm" ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
grenade.use_grenade_special_bookmark = 1;
|
grenade.use_grenade_special_bookmark = 1;
|
||||||
grenade.grenade_multiattack_bookmark_count = 1;
|
grenade.grenade_multiattack_bookmark_count = 1;
|
||||||
grenade.low_level_instant_kill_charge = 1;
|
grenade.low_level_instant_kill_charge = 1;
|
||||||
grenade.owner = self;
|
grenade.owner = self;
|
||||||
self notify( "throwing_tomahawk" );
|
self notify( "throwing_tomahawk" );
|
||||||
if ( isDefined( self.n_tomahawk_cooking_time ) )
|
|
||||||
{
|
if ( isdefined( self.n_tomahawk_cooking_time ) )
|
||||||
grenade.n_cookedtime = grenade.birthtime - self.n_tomahawk_cooking_time;
|
grenade.n_cookedtime = grenade.birthtime - self.n_tomahawk_cooking_time;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
grenade.n_cookedtime = 0;
|
grenade.n_cookedtime = 0;
|
||||||
}
|
|
||||||
self thread check_for_time_out( grenade );
|
self thread check_for_time_out( grenade );
|
||||||
self thread tomahawk_thrown( grenade );
|
self thread tomahawk_thrown( grenade );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_tomahawk_charge() //checked changed to match cerberus output
|
watch_for_tomahawk_charge()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_pullback", weaponname );
|
self waittill( "grenade_pullback", weaponname );
|
||||||
|
|
||||||
if ( !issubstr( weaponname, "tomahawk_zm" ) )
|
if ( !issubstr( weaponname, "tomahawk_zm" ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
self thread watch_for_grenade_cancel();
|
self thread watch_for_grenade_cancel();
|
||||||
self thread play_charge_fx();
|
self thread play_charge_fx();
|
||||||
self.n_tomahawk_cooking_time = getTime();
|
self.n_tomahawk_cooking_time = gettime();
|
||||||
self waittill_either( "grenade_fire", "grenade_throw_cancelled" );
|
self waittill_either( "grenade_fire", "grenade_throw_cancelled" );
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
self.n_tomahawk_cooking_time = undefined;
|
self.n_tomahawk_cooking_time = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_grenade_cancel() //checked matches cerberus output
|
watch_for_grenade_cancel()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "grenade_fire" );
|
self endon( "grenade_fire" );
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
weapon = "none";
|
weapon = "none";
|
||||||
|
|
||||||
while ( self isthrowinggrenade() && weapon == "none" )
|
while ( self isthrowinggrenade() && weapon == "none" )
|
||||||
{
|
|
||||||
self waittill( "weapon_change", weapon );
|
self waittill( "weapon_change", weapon );
|
||||||
}
|
|
||||||
self notify( "grenade_throw_cancelled" );
|
self notify( "grenade_throw_cancelled" );
|
||||||
}
|
}
|
||||||
|
|
||||||
play_charge_fx() //checked changed to match cerberus output
|
play_charge_fx()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "grenade_fire" );
|
self endon( "grenade_fire" );
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
time_to_pulse = 1000;
|
time_to_pulse = 1000;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
time = getTime() - self.n_tomahawk_cooking_time;
|
time = gettime() - self.n_tomahawk_cooking_time;
|
||||||
self.current_tactical_grenade = self get_player_tactical_grenade();
|
self.current_tactical_grenade = self get_player_tactical_grenade();
|
||||||
|
|
||||||
if ( time >= time_to_pulse )
|
if ( time >= time_to_pulse )
|
||||||
{
|
{
|
||||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_charge_up_ug"], self, "tag_origin" );
|
playfxontag( level._effect["tomahawk_charge_up_ug"], self, "tag_origin" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_charge_up"], self, "tag_origin" );
|
playfxontag( level._effect["tomahawk_charge_up"], self, "tag_origin" );
|
||||||
}
|
|
||||||
time_to_pulse += 1000;
|
time_to_pulse += 1000;
|
||||||
self playrumbleonentity( "reload_small" );
|
self playrumbleonentity( "reload_small" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( time_to_pulse > 2400 && self.current_tactical_grenade != "upgraded_tomahawk_zm" )
|
if ( time_to_pulse > 2400 && self.current_tactical_grenade != "upgraded_tomahawk_zm" )
|
||||||
{
|
break;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( time_to_pulse >= 3400 )
|
if ( time_to_pulse >= 3400 )
|
||||||
{
|
break;
|
||||||
return;
|
|
||||||
}
|
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get_grenade_charge_power( player ) //checked changed to match cerberus output
|
get_grenade_charge_power( player )
|
||||||
{
|
{
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
|
|
||||||
if ( self.n_cookedtime > 1000 && self.n_cookedtime < 2000 )
|
if ( self.n_cookedtime > 1000 && self.n_cookedtime < 2000 )
|
||||||
{
|
{
|
||||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
return 4.5;
|
return 4.5;
|
||||||
}
|
|
||||||
return 1.5;
|
return 1.5;
|
||||||
}
|
}
|
||||||
else if ( self.n_cookedtime > 2000 && self.n_cookedtime < 3000 )
|
else if ( self.n_cookedtime > 2000 && self.n_cookedtime < 3000 )
|
||||||
{
|
{
|
||||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
return 6;
|
return 6;
|
||||||
}
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
else if ( self.n_cookedtime >= 3000 && player.current_tomahawk_weapon != "upgraded_tomahawk_zm" )
|
else if ( self.n_cookedtime >= 3000 && player.current_tomahawk_weapon != "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
|
||||||
else if ( self.n_cookedtime >= 3000 )
|
else if ( self.n_cookedtime >= 3000 )
|
||||||
{
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
tomahawk_thrown( grenade )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
grenade endon( "in_hellhole" );
|
grenade endon( "in_hellhole" );
|
||||||
grenade_owner = undefined;
|
grenade_owner = undefined;
|
||||||
if ( isDefined( grenade.owner ) )
|
|
||||||
{
|
if ( isdefined( grenade.owner ) )
|
||||||
grenade_owner = grenade.owner;
|
grenade_owner = grenade.owner;
|
||||||
}
|
|
||||||
playfxontag( level._effect["tomahawk_charged_trail"], grenade, "tag_origin" );
|
playfxontag( level._effect["tomahawk_charged_trail"], grenade, "tag_origin" );
|
||||||
self setclientfieldtoplayer( "tomahawk_in_use", 2 );
|
self setclientfieldtoplayer( "tomahawk_in_use", 2 );
|
||||||
grenade waittill_either( "death", "time_out" );
|
grenade waittill_either( "death", "time_out" );
|
||||||
@ -178,50 +173,56 @@ tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
|||||||
n_grenade_charge_power = grenade get_grenade_charge_power( self );
|
n_grenade_charge_power = grenade get_grenade_charge_power( self );
|
||||||
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 200 );
|
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 200 );
|
||||||
a_powerups = get_array_of_closest( grenade_origin, level.active_powerups, undefined, undefined, 200 );
|
a_powerups = get_array_of_closest( grenade_origin, level.active_powerups, undefined, undefined, 200 );
|
||||||
if ( isDefined( level.a_tomahawk_pickup_funcs ) )
|
|
||||||
|
if ( isdefined( level.a_tomahawk_pickup_funcs ) )
|
||||||
{
|
{
|
||||||
foreach ( tomahawk_func in level.a_tomahawk_pickup_funcs )
|
foreach ( tomahawk_func in level.a_tomahawk_pickup_funcs )
|
||||||
{
|
{
|
||||||
if ( [[ tomahawk_func ]]( grenade, n_grenade_charge_power ) )
|
if ( [[ tomahawk_func ]]( grenade, n_grenade_charge_power ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( isDefined( a_powerups ) && a_powerups.size > 0 )
|
if ( isdefined( a_powerups ) && a_powerups.size > 0 )
|
||||||
{
|
{
|
||||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||||
|
|
||||||
foreach ( powerup in a_powerups )
|
foreach ( powerup in a_powerups )
|
||||||
{
|
{
|
||||||
powerup.origin = grenade_origin;
|
powerup.origin = grenade_origin;
|
||||||
powerup linkto( m_tomahawk );
|
powerup linkto( m_tomahawk );
|
||||||
m_tomahawk.a_has_powerup = a_powerups;
|
m_tomahawk.a_has_powerup = a_powerups;
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( !isDefined( a_zombies ) )
|
|
||||||
|
if ( !isdefined( a_zombies ) )
|
||||||
{
|
{
|
||||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
foreach ( ai_zombie in a_zombies )
|
else
|
||||||
{
|
{
|
||||||
|
foreach ( ai_zombie in a_zombies )
|
||||||
ai_zombie.hit_by_tomahawk = 0;
|
ai_zombie.hit_by_tomahawk = 0;
|
||||||
}
|
}
|
||||||
if ( isDefined( a_zombies[ 0 ] ) && isalive( a_zombies[ 0 ] ) )
|
|
||||||
|
if ( isdefined( a_zombies[0] ) && isalive( a_zombies[0] ) )
|
||||||
{
|
{
|
||||||
v_zombiepos = a_zombies[0].origin;
|
v_zombiepos = a_zombies[0].origin;
|
||||||
|
|
||||||
if ( distancesquared( grenade_origin, v_zombiepos ) <= 4900 )
|
if ( distancesquared( grenade_origin, v_zombiepos ) <= 4900 )
|
||||||
{
|
{
|
||||||
a_zombies[0] setclientfield( "play_tomahawk_hit_sound", 1 );
|
a_zombies[0] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[0], n_grenade_charge_power, grenade );
|
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[0], n_grenade_charge_power, grenade );
|
||||||
a_zombies[0] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
a_zombies[0] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||||
a_zombies[0].hit_by_tomahawk = 1;
|
a_zombies[0].hit_by_tomahawk = 1;
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||||
self thread tomahawk_ricochet_attack( grenade_origin, n_grenade_charge_power );
|
self thread tomahawk_ricochet_attack( grenade_origin, n_grenade_charge_power );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -235,15 +236,15 @@ tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
|||||||
{
|
{
|
||||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||||
if ( isDefined( grenade ) )
|
|
||||||
{
|
if ( isdefined( grenade ) )
|
||||||
grenade delete();
|
grenade delete();
|
||||||
}
|
|
||||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_for_time_out( grenade ) //checked matches cerberus output
|
check_for_time_out( grenade )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
grenade endon( "death" );
|
grenade endon( "death" );
|
||||||
@ -251,107 +252,111 @@ check_for_time_out( grenade ) //checked matches cerberus output
|
|||||||
grenade notify( "time_out" );
|
grenade notify( "time_out" );
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power ) //checked matches cerberus output
|
tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
a_zombies = getaispeciesarray( "axis", "all" );
|
a_zombies = getaispeciesarray( "axis", "all" );
|
||||||
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 300 );
|
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 300 );
|
||||||
a_zombies = array_reverse( a_zombies );
|
a_zombies = array_reverse( a_zombies );
|
||||||
if ( !isDefined( a_zombies ) )
|
|
||||||
|
if ( !isdefined( a_zombies ) )
|
||||||
{
|
{
|
||||||
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
||||||
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
||||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
||||||
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
||||||
self thread tomahawk_attack_zombies( m_tomahawk, a_zombies );
|
self thread tomahawk_attack_zombies( m_tomahawk, a_zombies );
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_attack_zombies( m_tomahawk, a_zombies ) //checked changed to match cerberus output
|
tomahawk_attack_zombies( m_tomahawk, a_zombies )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
if ( !isDefined( a_zombies ) )
|
|
||||||
|
if ( !isdefined( a_zombies ) )
|
||||||
{
|
{
|
||||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( a_zombies.size <= 4 )
|
if ( a_zombies.size <= 4 )
|
||||||
{
|
|
||||||
n_attack_limit = a_zombies.size;
|
n_attack_limit = a_zombies.size;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
n_attack_limit = 4;
|
n_attack_limit = 4;
|
||||||
}
|
|
||||||
for ( i = 0; i < n_attack_limit; i++ )
|
for ( i = 0; i < n_attack_limit; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) )
|
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
|
||||||
{
|
{
|
||||||
tag = "J_Head";
|
tag = "J_Head";
|
||||||
|
|
||||||
if ( a_zombies[i].isdog )
|
if ( a_zombies[i].isdog )
|
||||||
{
|
|
||||||
tag = "J_Spine1";
|
tag = "J_Spine1";
|
||||||
}
|
|
||||||
if ( isDefined( a_zombies[ i ].hit_by_tomahawk ) && !a_zombies[ i ].hit_by_tomahawk )
|
if ( isdefined( a_zombies[i].hit_by_tomahawk ) && !a_zombies[i].hit_by_tomahawk )
|
||||||
{
|
{
|
||||||
v_target = a_zombies[i] gettagorigin( tag );
|
v_target = a_zombies[i] gettagorigin( tag );
|
||||||
m_tomahawk moveto( v_target, 0.3 );
|
m_tomahawk moveto( v_target, 0.3 );
|
||||||
|
|
||||||
m_tomahawk waittill( "movedone" );
|
m_tomahawk waittill( "movedone" );
|
||||||
if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) )
|
|
||||||
|
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
|
||||||
{
|
{
|
||||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag );
|
playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag );
|
playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag );
|
||||||
}
|
|
||||||
playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" );
|
playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" );
|
||||||
a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 );
|
a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk );
|
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk );
|
||||||
a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||||
a_zombies[i].hit_by_tomahawk = 1;
|
a_zombies[i].hit_by_tomahawk = 1;
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.2;
|
wait 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread tomahawk_return_player( m_tomahawk, n_attack_limit );
|
self thread tomahawk_return_player( m_tomahawk, n_attack_limit );
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_return_player( m_tomahawk, num_zombie_hit ) //checked changed to match cerberus output
|
tomahawk_return_player( m_tomahawk, num_zombie_hit )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
n_dist = distance2dsquared( m_tomahawk.origin, self.origin );
|
n_dist = distance2dsquared( m_tomahawk.origin, self.origin );
|
||||||
if ( !isDefined( num_zombie_hit ) )
|
|
||||||
{
|
if ( !isdefined( num_zombie_hit ) )
|
||||||
num_zombie_hit = 5;
|
num_zombie_hit = 5;
|
||||||
}
|
|
||||||
while ( n_dist > 4096 )
|
while ( n_dist > 4096 )
|
||||||
{
|
{
|
||||||
m_tomahawk moveto( self geteye(), 0.25 );
|
m_tomahawk moveto( self geteye(), 0.25 );
|
||||||
|
|
||||||
if ( num_zombie_hit < 5 )
|
if ( num_zombie_hit < 5 )
|
||||||
{
|
{
|
||||||
self tomahawk_check_for_zombie( m_tomahawk );
|
self tomahawk_check_for_zombie( m_tomahawk );
|
||||||
num_zombie_hit++;
|
num_zombie_hit++;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
n_dist = distance2dsquared( m_tomahawk.origin, self geteye() );
|
n_dist = distance2dsquared( m_tomahawk.origin, self geteye() );
|
||||||
}
|
}
|
||||||
if ( isDefined( m_tomahawk.a_has_powerup ) )
|
|
||||||
|
if ( isdefined( m_tomahawk.a_has_powerup ) )
|
||||||
{
|
{
|
||||||
foreach ( powerup in m_tomahawk.a_has_powerup )
|
foreach ( powerup in m_tomahawk.a_has_powerup )
|
||||||
{
|
{
|
||||||
if ( isDefined( powerup ) )
|
if ( isdefined( powerup ) )
|
||||||
{
|
|
||||||
powerup.origin = self.origin;
|
powerup.origin = self.origin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
m_tomahawk delete();
|
m_tomahawk delete();
|
||||||
self playsoundtoplayer( "wpn_tomahawk_catch_plr", self );
|
self playsoundtoplayer( "wpn_tomahawk_catch_plr", self );
|
||||||
self playsound( "wpn_tomahawk_catch_npc" );
|
self playsound( "wpn_tomahawk_catch_npc" );
|
||||||
@ -359,93 +364,90 @@ tomahawk_return_player( m_tomahawk, num_zombie_hit ) //checked changed to match
|
|||||||
self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self );
|
self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self );
|
||||||
self givemaxammo( self.current_tomahawk_weapon );
|
self givemaxammo( self.current_tomahawk_weapon );
|
||||||
a_zombies = getaispeciesarray( "axis", "all" );
|
a_zombies = getaispeciesarray( "axis", "all" );
|
||||||
|
|
||||||
foreach ( ai_zombie in a_zombies )
|
foreach ( ai_zombie in a_zombies )
|
||||||
{
|
|
||||||
ai_zombie.hit_by_tomahawk = 0;
|
ai_zombie.hit_by_tomahawk = 0;
|
||||||
}
|
|
||||||
self setclientfieldtoplayer( "tomahawk_in_use", 3 );
|
self setclientfieldtoplayer( "tomahawk_in_use", 3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_check_for_zombie( grenade ) //checked matches cerberus output
|
tomahawk_check_for_zombie( grenade )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
grenade endon( "death" );
|
grenade endon( "death" );
|
||||||
a_zombies = getaispeciesarray( "axis", "all" );
|
a_zombies = getaispeciesarray( "axis", "all" );
|
||||||
a_zombies = get_array_of_closest( grenade.origin, a_zombies, undefined, undefined, 100 );
|
a_zombies = get_array_of_closest( grenade.origin, a_zombies, undefined, undefined, 100 );
|
||||||
if ( isDefined( a_zombies[ 0 ] ) && distance2dsquared( grenade.origin, a_zombies[ 0 ].origin ) <= 10000 )
|
|
||||||
{
|
if ( isdefined( a_zombies[0] ) && distance2dsquared( grenade.origin, a_zombies[0].origin ) <= 10000 )
|
||||||
if ( isDefined( a_zombies[ 0 ].hit_by_tomahawk ) && !a_zombies[ 0 ].hit_by_tomahawk )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( a_zombies[0].hit_by_tomahawk ) && !a_zombies[0].hit_by_tomahawk )
|
||||||
self tomahawk_hit_zombie( a_zombies[0], grenade );
|
self tomahawk_hit_zombie( a_zombies[0], grenade );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tomahawk_hit_zombie( ai_zombie, grenade ) //checked matches cerberus output
|
tomahawk_hit_zombie( ai_zombie, grenade )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
if ( isDefined( ai_zombie ) && isalive( ai_zombie ) )
|
|
||||||
|
if ( isdefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||||
{
|
{
|
||||||
tag = "J_Head";
|
tag = "J_Head";
|
||||||
|
|
||||||
if ( ai_zombie.isdog )
|
if ( ai_zombie.isdog )
|
||||||
{
|
|
||||||
tag = "J_Spine1";
|
tag = "J_Spine1";
|
||||||
}
|
|
||||||
v_target = ai_zombie gettagorigin( tag );
|
v_target = ai_zombie gettagorigin( tag );
|
||||||
grenade moveto( v_target, 0.3 );
|
grenade moveto( v_target, 0.3 );
|
||||||
|
|
||||||
grenade waittill( "movedone" );
|
grenade waittill( "movedone" );
|
||||||
if ( isDefined( ai_zombie ) && isalive( ai_zombie ) )
|
|
||||||
|
if ( isdefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||||
{
|
{
|
||||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_impact_ug"], ai_zombie, tag );
|
playfxontag( level._effect["tomahawk_impact_ug"], ai_zombie, tag );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_impact"], ai_zombie, tag );
|
playfxontag( level._effect["tomahawk_impact"], ai_zombie, tag );
|
||||||
}
|
|
||||||
ai_zombie setclientfield( "play_tomahawk_hit_sound", 1 );
|
ai_zombie setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||||
n_tomahawk_damage = calculate_tomahawk_damage( ai_zombie, grenade.n_grenade_charge_power, grenade );
|
n_tomahawk_damage = calculate_tomahawk_damage( ai_zombie, grenade.n_grenade_charge_power, grenade );
|
||||||
ai_zombie dodamage( n_tomahawk_damage, grenade.origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
ai_zombie dodamage( n_tomahawk_damage, grenade.origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||||
ai_zombie.hit_by_tomahawk = 1;
|
ai_zombie.hit_by_tomahawk = 1;
|
||||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_spawn( grenade_origin, charged ) //checked matches cerberus output
|
tomahawk_spawn( grenade_origin, charged )
|
||||||
{
|
{
|
||||||
m_tomahawk = spawn( "script_model", grenade_origin );
|
m_tomahawk = spawn( "script_model", grenade_origin );
|
||||||
m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" );
|
m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" );
|
||||||
m_tomahawk thread tomahawk_spin();
|
m_tomahawk thread tomahawk_spin();
|
||||||
m_tomahawk playloopsound( "wpn_tomahawk_flying_loop" );
|
m_tomahawk playloopsound( "wpn_tomahawk_flying_loop" );
|
||||||
|
|
||||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_trail_ug"], m_tomahawk, "tag_origin" );
|
playfxontag( level._effect["tomahawk_trail_ug"], m_tomahawk, "tag_origin" );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_trail"], m_tomahawk, "tag_origin" );
|
playfxontag( level._effect["tomahawk_trail"], m_tomahawk, "tag_origin" );
|
||||||
}
|
|
||||||
if ( isDefined( charged ) && charged > 1 )
|
if ( isdefined( charged ) && charged > 1 )
|
||||||
{
|
|
||||||
playfxontag( level._effect["tomahawk_charged_trail"], m_tomahawk, "tag_origin" );
|
playfxontag( level._effect["tomahawk_charged_trail"], m_tomahawk, "tag_origin" );
|
||||||
}
|
|
||||||
m_tomahawk.low_level_instant_kill_charge = 1;
|
m_tomahawk.low_level_instant_kill_charge = 1;
|
||||||
return m_tomahawk;
|
return m_tomahawk;
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_spin() //checked matches cerberus output
|
tomahawk_spin()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( isDefined( self ) )
|
|
||||||
|
while ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
self rotatepitch( 90, 0.2 );
|
self rotatepitch( 90, 0.2 );
|
||||||
wait 0.15;
|
wait 0.15;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_pickup() //checked matches cerberus output
|
tomahawk_pickup()
|
||||||
{
|
{
|
||||||
flag_wait( "soul_catchers_charged" );
|
flag_wait( "soul_catchers_charged" );
|
||||||
flag_init( "tomahawk_pickup_complete" );
|
flag_init( "tomahawk_pickup_complete" );
|
||||||
@ -472,102 +474,102 @@ tomahawk_pickup() //checked matches cerberus output
|
|||||||
trigger_upgraded.script_noteworthy = "redeemer_pickup_trigger";
|
trigger_upgraded.script_noteworthy = "redeemer_pickup_trigger";
|
||||||
trigger_upgraded sethintstring( &"ZM_PRISON_TOMAHAWK_UPGRADED_PICKUP" );
|
trigger_upgraded sethintstring( &"ZM_PRISON_TOMAHAWK_UPGRADED_PICKUP" );
|
||||||
trigger_upgraded setcursorhint( "HINT_NOICON" );
|
trigger_upgraded setcursorhint( "HINT_NOICON" );
|
||||||
/*
|
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "GO FIND THE TOMAHAWK" );
|
iprintlnbold( "GO FIND THE TOMAHAWK" );
|
||||||
#/
|
#/
|
||||||
*/
|
|
||||||
trigger thread tomahawk_pickup_trigger();
|
trigger thread tomahawk_pickup_trigger();
|
||||||
trigger_upgraded thread tomahawk_pickup_trigger();
|
trigger_upgraded thread tomahawk_pickup_trigger();
|
||||||
flag_set( "tomahawk_pickup_complete" );
|
flag_set( "tomahawk_pickup_complete" );
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_pickup_trigger() //checked changed to match cerberus output
|
tomahawk_pickup_trigger()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
if ( isDefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) )
|
|
||||||
{
|
if ( isdefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) )
|
||||||
player takeweapon( player.current_tactical_grenade );
|
player takeweapon( player.current_tactical_grenade );
|
||||||
}
|
|
||||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||||
{
|
{
|
||||||
if ( !is_true( player.afterlife ) )
|
if ( !is_true( player.afterlife ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player disable_player_move_states( 1 );
|
player disable_player_move_states( 1 );
|
||||||
gun = player getcurrentweapon();
|
gun = player getcurrentweapon();
|
||||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||||
player giveweapon( "zombie_tomahawk_flourish" );
|
player giveweapon( "zombie_tomahawk_flourish" );
|
||||||
player thread tomahawk_update_hud_on_last_stand();
|
player thread tomahawk_update_hud_on_last_stand();
|
||||||
player switchtoweapon( "zombie_tomahawk_flourish" );
|
player switchtoweapon( "zombie_tomahawk_flourish" );
|
||||||
player waittill_any( "player_downed", "weapon_change_complete" );
|
player waittill_any( "player_downed", "weapon_change_complete" );
|
||||||
|
|
||||||
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
||||||
{
|
{
|
||||||
player.redeemer_trigger = self;
|
player.redeemer_trigger = self;
|
||||||
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
player switchtoweapon( gun );
|
player switchtoweapon( gun );
|
||||||
player enable_player_move_states();
|
player enable_player_move_states();
|
||||||
player.loadout.hastomahawk = 1;
|
player.loadout.hastomahawk = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !player hasweapon( "bouncing_tomahawk_zm" ) && !player hasweapon( "upgraded_tomahawk_zm" ) )
|
if ( !player hasweapon( "bouncing_tomahawk_zm" ) && !player hasweapon( "upgraded_tomahawk_zm" ) )
|
||||||
{
|
{
|
||||||
player disable_player_move_states( 1 );
|
player disable_player_move_states( 1 );
|
||||||
|
|
||||||
if ( !is_true( player.afterlife ) )
|
if ( !is_true( player.afterlife ) )
|
||||||
{
|
{
|
||||||
player giveweapon( player.current_tomahawk_weapon );
|
player giveweapon( player.current_tomahawk_weapon );
|
||||||
player thread tomahawk_update_hud_on_last_stand();
|
player thread tomahawk_update_hud_on_last_stand();
|
||||||
player thread tomahawk_tutorial_hint();
|
player thread tomahawk_tutorial_hint();
|
||||||
player set_player_tactical_grenade( player.current_tomahawk_weapon );
|
player set_player_tactical_grenade( player.current_tomahawk_weapon );
|
||||||
|
|
||||||
if ( self.script_noteworthy == "retriever_pickup_trigger" )
|
if ( self.script_noteworthy == "retriever_pickup_trigger" )
|
||||||
{
|
|
||||||
player.retriever_trigger = self;
|
player.retriever_trigger = self;
|
||||||
}
|
|
||||||
player notify( "tomahawk_picked_up" );
|
player notify( "tomahawk_picked_up" );
|
||||||
player setclientfieldtoplayer( "tomahawk_in_use", 1 );
|
player setclientfieldtoplayer( "tomahawk_in_use", 1 );
|
||||||
gun = player getcurrentweapon();
|
gun = player getcurrentweapon();
|
||||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||||
player notify( "player_obtained_tomahawk" );
|
player notify( "player_obtained_tomahawk" );
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||||
player giveweapon( "zombie_tomahawk_flourish" );
|
player giveweapon( "zombie_tomahawk_flourish" );
|
||||||
player switchtoweapon( "zombie_tomahawk_flourish" );
|
player switchtoweapon( "zombie_tomahawk_flourish" );
|
||||||
player waittill_any( "player_downed", "weapon_change_complete" );
|
player waittill_any( "player_downed", "weapon_change_complete" );
|
||||||
|
|
||||||
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
||||||
{
|
|
||||||
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
||||||
}
|
|
||||||
player switchtoweapon( gun );
|
player switchtoweapon( gun );
|
||||||
}
|
}
|
||||||
|
|
||||||
player enable_player_move_states();
|
player enable_player_move_states();
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_pickup_spin() //checked matches cerberus output
|
tomahawk_pickup_spin()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self rotateyaw( 90, 1 );
|
self rotateyaw( 90, 1 );
|
||||||
wait 0.15;
|
wait 0.15;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) //checked changed to match cerberus output
|
calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk )
|
||||||
{
|
{
|
||||||
if ( n_tomahawk_power > 2 )
|
if ( n_tomahawk_power > 2 )
|
||||||
{
|
|
||||||
return n_target_zombie.health + 1;
|
return n_target_zombie.health + 1;
|
||||||
}
|
|
||||||
else if ( level.round_number >= 10 && level.round_number < 13 && tomahawk.low_level_instant_kill_charge <= 3 )
|
else if ( level.round_number >= 10 && level.round_number < 13 && tomahawk.low_level_instant_kill_charge <= 3 )
|
||||||
{
|
{
|
||||||
tomahawk.low_level_instant_kill_charge += 1;
|
tomahawk.low_level_instant_kill_charge += 1;
|
||||||
@ -579,12 +581,10 @@ calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) //check
|
|||||||
return n_target_zombie.health + 1;
|
return n_target_zombie.health + 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
return 1000 * n_tomahawk_power;
|
return 1000 * n_tomahawk_power;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
setting_tutorial_hud() //checked matches cerberus output
|
setting_tutorial_hud()
|
||||||
{
|
{
|
||||||
client_hint = newclienthudelem( self );
|
client_hint = newclienthudelem( self );
|
||||||
client_hint.alignx = "center";
|
client_hint.alignx = "center";
|
||||||
@ -600,7 +600,7 @@ setting_tutorial_hud() //checked matches cerberus output
|
|||||||
return client_hint;
|
return client_hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_tutorial_hint() //checked matches cerberus output
|
tomahawk_tutorial_hint()
|
||||||
{
|
{
|
||||||
hud = setting_tutorial_hud();
|
hud = setting_tutorial_hud();
|
||||||
hud settext( &"ZM_PRISON_TOMAHAWK_TUTORIAL" );
|
hud settext( &"ZM_PRISON_TOMAHAWK_TUTORIAL" );
|
||||||
@ -609,16 +609,19 @@ tomahawk_tutorial_hint() //checked matches cerberus output
|
|||||||
hud destroy();
|
hud destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
tomahawk_update_hud_on_last_stand() //checked matches cerberus output
|
tomahawk_update_hud_on_last_stand()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "bled_out" );
|
self endon( "bled_out" );
|
||||||
self endon( "tomahawk_upgraded_swap" );
|
self endon( "tomahawk_upgraded_swap" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill_either( "entering_last_stand", "fake_death" );
|
self waittill_either( "entering_last_stand", "fake_death" );
|
||||||
self setclientfieldtoplayer( "tomahawk_in_use", 0 );
|
self setclientfieldtoplayer( "tomahawk_in_use", 0 );
|
||||||
|
|
||||||
self waittill( "player_revived" );
|
self waittill( "player_revived" );
|
||||||
|
|
||||||
if ( isalive( self ) )
|
if ( isalive( self ) )
|
||||||
{
|
{
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
@ -629,4 +632,3 @@ tomahawk_update_hud_on_last_stand() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,7 +1,9 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -18,13 +20,13 @@ achievement_sound_func( achievement_name_lower )
|
|||||||
|
|
||||||
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()
|
||||||
@ -39,6 +41,7 @@ onplayerconnect()
|
|||||||
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" );
|
||||||
@ -52,12 +55,15 @@ achievement_vertigoner()
|
|||||||
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" );
|
self waittill( "zombie_flung" );
|
||||||
wait 0,1;
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
||||||
}
|
}
|
||||||
@ -68,12 +74,15 @@ achievement_slippery_when_undead()
|
|||||||
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" );
|
self waittill( "sliquifier_kill" );
|
||||||
wait 0,01;
|
|
||||||
|
wait 0.01;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
||||||
}
|
}
|
||||||
@ -86,29 +95,28 @@ achievement_facing_the_dragon()
|
|||||||
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_dir = vectornormalize( v_dragon_position - self.origin );
|
||||||
v_forward = self getweaponforwarddir();
|
v_forward = self getweaponforwarddir();
|
||||||
dp = vectordot( v_dir, v_forward );
|
dp = vectordot( v_dir, v_forward );
|
||||||
if ( dp > 0,95 )
|
|
||||||
{
|
if ( dp > 0.95 )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
wait 0.01;
|
||||||
{
|
|
||||||
wait 0,01;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
||||||
}
|
}
|
||||||
@ -117,8 +125,10 @@ 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" );
|
||||||
}
|
}
|
||||||
@ -127,15 +137,16 @@ 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" );
|
level waittill( "start_of_round" );
|
||||||
|
|
||||||
if ( flag( "power_on" ) )
|
if ( flag( "power_on" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
|
|
||||||
#/
|
#/
|
||||||
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
||||||
}
|
}
|
||||||
@ -146,45 +157,39 @@ achievement_shafted()
|
|||||||
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" );
|
self waittill_any( "player_buys_perk", "pap_used" );
|
||||||
if ( isDefined( self.pap_used ) && self.pap_used == 1 )
|
|
||||||
{
|
if ( isdefined( self.pap_used ) && self.pap_used == 1 )
|
||||||
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
|
||||||
break;
|
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;
|
|
||||||
while ( i < self.perk_machines_bought.size )
|
for ( i = 0; i < self.perk_machines_bought.size; i++ )
|
||||||
{
|
{
|
||||||
if ( perk == self.perk_machines_bought[i] )
|
if ( perk == self.perk_machines_bought[i] )
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !found )
|
if ( !found )
|
||||||
{
|
{
|
||||||
self.perk_machines_bought[self.perk_machines_bought.size] = perk;
|
self.perk_machines_bought[self.perk_machines_bought.size] = perk;
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -17,30 +19,28 @@ sndmusicegg()
|
|||||||
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 waittill( "main_music_egg_hit", player );
|
||||||
|
|
||||||
temp_ent stoploopsound( 1 );
|
temp_ent stoploopsound( 1 );
|
||||||
player playsound( "zmb_meteor_activate" );
|
player playsound( "zmb_meteor_activate" );
|
||||||
level.meteor_counter += 1;
|
level.meteor_counter += 1;
|
||||||
|
|
||||||
if ( level.meteor_counter == 3 )
|
if ( level.meteor_counter == 3 )
|
||||||
{
|
|
||||||
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
|
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wait 1,5;
|
wait 1.5;
|
||||||
temp_ent delete();
|
temp_ent delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -48,10 +48,9 @@ sndmusicegg_wait( bear_origin )
|
|||||||
sndmusicegg_override()
|
sndmusicegg_override()
|
||||||
{
|
{
|
||||||
if ( is_true( level.music_override ) )
|
if ( is_true( level.music_override ) )
|
||||||
{
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sndmuseggplay( ent, alias, time )
|
sndmuseggplay( ent, alias, time )
|
||||||
@ -62,7 +61,7 @@ sndmuseggplay( ent, alias, time )
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@ -70,6 +69,6 @@ sndmuseggplay( ent, alias, time )
|
|||||||
sndeggmusicwait( time )
|
sndeggmusicwait( time )
|
||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
wait time;
|
wait( time );
|
||||||
level notify( "sndSongDone" );
|
level notify( "sndSongDone" );
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -45,7 +47,7 @@ include_buildables()
|
|||||||
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();
|
||||||
@ -62,10 +64,11 @@ include_buildables()
|
|||||||
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_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_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_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_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_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_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 = spawnstruct();
|
sqcommon = spawnstruct();
|
||||||
@ -76,46 +79,41 @@ include_buildables()
|
|||||||
sqcommon add_buildable_piece( sq_common_transceiver );
|
sqcommon add_buildable_piece( sq_common_transceiver );
|
||||||
sqcommon.triggerthink = ::sqcommonbuildable;
|
sqcommon.triggerthink = ::sqcommonbuildable;
|
||||||
include_buildable( sqcommon );
|
include_buildable( sqcommon );
|
||||||
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
|
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 = _a143[ _k143 ];
|
|
||||||
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
||||||
stub.buildablezone.stat_name = "keys_zm";
|
stub.buildablezone.stat_name = "keys_zm";
|
||||||
_k143 = getNextArrayKey( _a143, _k143 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,22 +138,24 @@ onpickup_common( 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 waittill( "slipgun_bought", player );
|
||||||
|
|
||||||
level.zombie_include_weapons["slipgun_zm"] = 1;
|
level.zombie_include_weapons["slipgun_zm"] = 1;
|
||||||
level.zombie_weapons["slipgun_zm"].is_in_box = 1;
|
level.zombie_weapons["slipgun_zm"].is_in_box = 1;
|
||||||
}
|
}
|
||||||
@ -163,11 +163,9 @@ wait_for_slipgun()
|
|||||||
|
|
||||||
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()
|
||||||
{
|
{
|
||||||
@ -181,6 +179,7 @@ ondrop_keys( player )
|
|||||||
|
|
||||||
onpickup_keys( player )
|
onpickup_keys( player )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
escape_pod_key_prompt( player )
|
escape_pod_key_prompt( player )
|
||||||
@ -191,6 +190,7 @@ escape_pod_key_prompt( player )
|
|||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,14 +204,16 @@ 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" );
|
trig.stub.elevator waittill( "floor_changed" );
|
||||||
if ( isDefined( self.stub.elevator ) )
|
|
||||||
|
if ( isdefined( self.stub.elevator ) )
|
||||||
{
|
{
|
||||||
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
if ( trig.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
||||||
{
|
{
|
||||||
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player );
|
thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,73 +222,73 @@ watch_elevator_prompt( player, trig )
|
|||||||
|
|
||||||
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];
|
elevator = level.elevators[elevatorname];
|
||||||
floor = int( self.stub.script_parameters );
|
floor = int( self.stub.script_parameters );
|
||||||
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
|
flevel = elevator maps\mp\zm_highrise_elevators::elevator_level_for_floor( floor );
|
||||||
self.stub.elevator = elevator;
|
self.stub.elevator = elevator;
|
||||||
self.stub.floor = flevel;
|
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
|
else
|
||||||
{
|
|
||||||
error( "Cannot locate elevator " );
|
error( "Cannot locate elevator " );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
color = vectorScale( ( 0, 0, 1 ), 0,7 );
|
color = vectorscale( ( 0, 0, 1 ), 0.7 );
|
||||||
stop = self.stub.floor;
|
stop = self.stub.floor;
|
||||||
floor = self.stub.elevator.floors["" + stop].script_location;
|
floor = self.stub.elevator.floors["" + stop].script_location;
|
||||||
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
|
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
|
||||||
if ( getDvarInt( #"B67910B4" ) )
|
|
||||||
{
|
if ( getdvarint( _hash_B67910B4 ) )
|
||||||
print3d( self.stub.origin, text, color, 1, 0,5, 300 );
|
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.stub.hint_string = "";
|
||||||
self sethintstring( self.stub.hint_string );
|
self sethintstring( self.stub.hint_string );
|
||||||
return 0;
|
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 );
|
floor = int( self.script_parameters );
|
||||||
elevator = level.elevators[elevatorname];
|
elevator = level.elevators[elevatorname];
|
||||||
if ( isDefined( elevator ) )
|
|
||||||
|
if ( isdefined( elevator ) )
|
||||||
{
|
{
|
||||||
elevator.body.force_starting_floor = floor;
|
elevator.body.force_starting_floor = floor;
|
||||||
elevator.body notify( "forcego" );
|
elevator.body notify( "forcego" );
|
||||||
@ -296,33 +298,29 @@ onuseplantobject_elevatorkey( player )
|
|||||||
|
|
||||||
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 )
|
||||||
{
|
{
|
||||||
@ -332,22 +330,18 @@ onuseplantobject_slipgun( player )
|
|||||||
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,129 +1,119 @@
|
|||||||
#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_distance = 500;
|
||||||
level.distance_tracker_aggressive_height = 200;
|
level.distance_tracker_aggressive_height = 200;
|
||||||
for ( ;; )
|
|
||||||
{
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
zombies = get_round_enemy_array();
|
zombies = get_round_enemy_array();
|
||||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
|
||||||
|
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||||
{
|
{
|
||||||
wait level.zombie_tracking_wait;
|
wait( level.zombie_tracking_wait );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else i = 0;
|
|
||||||
while ( i < zombies.size )
|
|
||||||
{
|
{
|
||||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
for ( i = 0; i < zombies.size; i++ )
|
||||||
{
|
{
|
||||||
|
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;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( players[i].sessionstate == "spectator" )
|
if ( players[i].sessionstate == "spectator" )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( isdefined( level.only_track_targeted_players ) )
|
||||||
{
|
{
|
||||||
i++;
|
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( isDefined( level.only_track_targeted_players ) )
|
|
||||||
{
|
|
||||||
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
can_be_seen = self player_can_see_me( players[i] );
|
can_be_seen = self player_can_see_me( players[i] );
|
||||||
|
|
||||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||||
{
|
|
||||||
self.inview++;
|
self.inview++;
|
||||||
}
|
|
||||||
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||||
{
|
|
||||||
self.player_close++;
|
self.player_close++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
i++;
|
wait 0.1;
|
||||||
}
|
|
||||||
wait 0,1;
|
|
||||||
if ( self.inview == 0 && self.player_close == 0 )
|
if ( self.inview == 0 && self.player_close == 0 )
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
zombies = getaiarray( "axis" );
|
zombies = getaiarray( "axis" );
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
|
|
||||||
|
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
|
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||||
{
|
{
|
||||||
level.zombie_total++;
|
level.zombie_total++;
|
||||||
|
|
||||||
if ( self.health < level.zombie_health )
|
if ( self.health < level.zombie_health )
|
||||||
{
|
|
||||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
self notify( "zombie_delete" );
|
self notify( "zombie_delete" );
|
||||||
self delete();
|
self delete();
|
||||||
recalc_zombie_array();
|
recalc_zombie_array();
|
||||||
@ -133,32 +123,28 @@ delete_zombie_noone_looking( how_close, how_high )
|
|||||||
player_can_see_me( player )
|
player_can_see_me( player )
|
||||||
{
|
{
|
||||||
playerangles = player getplayerangles();
|
playerangles = player getplayerangles();
|
||||||
playerforwardvec = anglesToForward( playerangles );
|
playerforwardvec = anglestoforward( playerangles );
|
||||||
playerunitforwardvec = vectornormalize( playerforwardvec );
|
playerunitforwardvec = vectornormalize( playerforwardvec );
|
||||||
banzaipos = self.origin;
|
banzaipos = self.origin;
|
||||||
playerpos = player getorigin();
|
playerpos = player getorigin();
|
||||||
playertobanzaivec = banzaipos - playerpos;
|
playertobanzaivec = banzaipos - playerpos;
|
||||||
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
|
||||||
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
|
||||||
|
|
||||||
if ( forwarddotbanzai >= 1 )
|
if ( forwarddotbanzai >= 1 )
|
||||||
{
|
|
||||||
anglefromcenter = 0;
|
anglefromcenter = 0;
|
||||||
}
|
|
||||||
else if ( forwarddotbanzai <= -1 )
|
else if ( forwarddotbanzai <= -1 )
|
||||||
{
|
|
||||||
anglefromcenter = 180;
|
anglefromcenter = 180;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
anglefromcenter = acos( forwarddotbanzai );
|
anglefromcenter = acos( forwarddotbanzai );
|
||||||
}
|
|
||||||
playerfov = getDvarFloat( "cg_fov" );
|
playerfov = getdvarfloat( "cg_fov" );
|
||||||
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
|
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||||
|
|
||||||
if ( banzaivsplayerfovbuffer <= 0 )
|
if ( banzaivsplayerfovbuffer <= 0 )
|
||||||
{
|
banzaivsplayerfovbuffer = 0.2;
|
||||||
banzaivsplayerfovbuffer = 0,2;
|
|
||||||
}
|
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
|
||||||
return playercanseeme;
|
return playercanseeme;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,40 +152,42 @@ 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 thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
|
||||||
self.zombie_path_bad = 1;
|
self.zombie_path_bad = 1;
|
||||||
self escaped_zombies_cleanup();
|
self escaped_zombies_cleanup();
|
||||||
}
|
}
|
||||||
wait 0,1;
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,30 +195,26 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,12 +222,14 @@ get_escape_position()
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
str_zone = get_current_zone();
|
str_zone = get_current_zone();
|
||||||
if ( isDefined( str_zone ) )
|
|
||||||
|
if ( isdefined( str_zone ) )
|
||||||
{
|
{
|
||||||
a_zones = get_adjacencies_to_zone( str_zone );
|
a_zones = get_adjacencies_to_zone( str_zone );
|
||||||
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
a_dog_locations = get_dog_locations_in_zones( a_zones );
|
||||||
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
s_farthest = self get_farthest_dog_location( a_dog_locations );
|
||||||
}
|
}
|
||||||
|
|
||||||
return s_farthest;
|
return s_farthest;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,22 +237,16 @@ 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 ) )
|
|
||||||
{
|
{
|
||||||
zone = _a310[ _k310 ];
|
for ( i = 0; i < level.zones[zone].volumes.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level.zones[ zone ].volumes.size )
|
|
||||||
{
|
{
|
||||||
if ( self istouching( level.zones[zone].volumes[i] ) )
|
if ( self istouching( level.zones[zone].volumes[i] ) )
|
||||||
{
|
|
||||||
str_zone = zone;
|
str_zone = zone;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
_k310 = getNextArrayKey( _a310, _k310 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return str_zone;
|
return str_zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,29 +255,23 @@ get_adjacencies_to_zone( str_zone )
|
|||||||
a_adjacencies = [];
|
a_adjacencies = [];
|
||||||
a_adjacencies[0] = str_zone;
|
a_adjacencies[0] = str_zone;
|
||||||
a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
|
a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
|
||||||
i = 0;
|
|
||||||
while ( i < a_adjacent_zones.size )
|
for ( i = 0; i < a_adjacent_zones.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
|
if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
|
||||||
{
|
|
||||||
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
|
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return a_adjacencies;
|
return a_adjacencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_dog_locations_in_zones( a_zones )
|
get_dog_locations_in_zones( a_zones )
|
||||||
{
|
{
|
||||||
a_dog_locations = [];
|
a_dog_locations = [];
|
||||||
_a345 = a_zones;
|
|
||||||
_k345 = getFirstArrayKey( _a345 );
|
foreach ( zone in a_zones )
|
||||||
while ( isDefined( _k345 ) )
|
|
||||||
{
|
|
||||||
zone = _a345[ _k345 ];
|
|
||||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
||||||
_k345 = getNextArrayKey( _a345, _k345 );
|
|
||||||
}
|
|
||||||
return a_dog_locations;
|
return a_dog_locations;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,17 +279,18 @@ get_farthest_dog_location( a_dog_locations )
|
|||||||
{
|
{
|
||||||
n_farthest_index = 0;
|
n_farthest_index = 0;
|
||||||
n_distance_farthest = 0;
|
n_distance_farthest = 0;
|
||||||
i = 0;
|
|
||||||
while ( i < a_dog_locations.size )
|
for ( i = 0; i < a_dog_locations.size; i++ )
|
||||||
{
|
{
|
||||||
n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
|
n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
|
||||||
|
|
||||||
if ( n_distance_sq > n_distance_farthest )
|
if ( n_distance_sq > n_distance_farthest )
|
||||||
{
|
{
|
||||||
n_distance_farthest = n_distance_sq;
|
n_distance_farthest = n_distance_sq;
|
||||||
n_farthest_index = i;
|
n_farthest_index = i;
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return a_dog_locations[n_farthest_index];
|
return a_dog_locations[n_farthest_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,18 +300,19 @@ escaped_zombies_cleanup()
|
|||||||
s_escape = self get_escape_position();
|
s_escape = self get_escape_position();
|
||||||
self notify( "stop_find_flesh" );
|
self notify( "stop_find_flesh" );
|
||||||
self notify( "zombie_acquire_enemy" );
|
self notify( "zombie_acquire_enemy" );
|
||||||
if ( isDefined( s_escape ) )
|
|
||||||
|
if ( isdefined( s_escape ) )
|
||||||
{
|
{
|
||||||
self setgoalpos( s_escape.origin );
|
self setgoalpos( s_escape.origin );
|
||||||
self thread check_player_available();
|
self thread check_player_available();
|
||||||
self waittill_any( "goal", "reaquire_player" );
|
self waittill_any( "goal", "reaquire_player" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
self.zombie_path_bad = !can_zombie_path_to_any_player();
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
|
|
||||||
if ( !self.zombie_path_bad )
|
if ( !self.zombie_path_bad )
|
||||||
{
|
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
|
||||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
check_player_available()
|
check_player_available()
|
||||||
@ -346,70 +322,69 @@ 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" );
|
zombies = getaiarray( "axis" );
|
||||||
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth )
|
|
||||||
|
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && who.health >= who.maxhealth )
|
||||||
{
|
{
|
||||||
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper )
|
if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
|
||||||
{
|
{
|
||||||
level.zombie_total++;
|
level.zombie_total++;
|
||||||
|
|
||||||
if ( who.health < level.zombie_health )
|
if ( who.health < level.zombie_health )
|
||||||
{
|
|
||||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
|
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
who maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||||
who notify( "zombie_delete" );
|
who notify( "zombie_delete" );
|
||||||
who dodamage( who.health + 666, who.origin, who );
|
who dodamage( who.health + 666, who.origin, who );
|
||||||
recalc_zombie_array();
|
recalc_zombie_array();
|
||||||
}
|
}
|
||||||
wait 0,1;
|
|
||||||
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,35 +1,37 @@
|
|||||||
//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 = spawn( "script_model", ( 2044, 499, 2893 ) );
|
||||||
collision1 setmodel( "collision_wall_32x32x10_standard" );
|
collision1 setmodel( "collision_wall_32x32x10_standard" );
|
||||||
collision1.angles = vectorScale( ( 0, 1, 0 ), 330 );
|
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision1 ghost();
|
collision1 ghost();
|
||||||
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
|
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
|
||||||
collision2 setmodel( "collision_wall_32x32x10_standard" );
|
collision2 setmodel( "collision_wall_32x32x10_standard" );
|
||||||
collision2.angles = vectorScale( ( 0, 1, 0 ), 330 );
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision2 ghost();
|
collision2 ghost();
|
||||||
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
||||||
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
@ -45,11 +47,11 @@ spawned_collision_ffotd() //checked changed to match cerberus output
|
|||||||
collision3 ghost();
|
collision3 ghost();
|
||||||
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
||||||
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision4.angles = vectorScale( ( 0, 1, 0 ), 270 );
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collision4 ghost();
|
collision4 ghost();
|
||||||
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
|
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
|
||||||
collision5 setmodel( "collision_wall_256x256x10_standard" );
|
collision5 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collision5.angles = vectorScale( ( 1, 0, 0 ), 347.6 );
|
collision5.angles = vectorscale( ( 1, 0, 0 ), 347.6 );
|
||||||
collision5 ghost();
|
collision5 ghost();
|
||||||
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
||||||
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
||||||
@ -70,7 +72,7 @@ spawned_collision_ffotd() //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 );
|
||||||
@ -86,26 +88,29 @@ eject_player_trigger_init() //checked matches cerberus output
|
|||||||
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 );
|
self waittill( "trigger", who );
|
||||||
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
while ( who istouching( self ) )
|
while ( who istouching( self ) )
|
||||||
{
|
{
|
||||||
time++;
|
time++;
|
||||||
|
|
||||||
if ( time >= 6 )
|
if ( time >= 6 )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.point ) )
|
if ( isdefined( self.point ) )
|
||||||
{
|
{
|
||||||
if ( !positionwouldtelefrag( self.point.origin ) )
|
if ( !positionwouldtelefrag( self.point.origin ) )
|
||||||
{
|
{
|
||||||
@ -117,54 +122,64 @@ player_eject_watcher() //checked matches cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wait 1;
|
|
||||||
|
wait 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
time = 0;
|
time = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 0.1;
|
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();
|
tactical = self get_player_tactical_grenade();
|
||||||
if ( isDefined( tactical ) && tactical != "" )
|
|
||||||
|
if ( isdefined( tactical ) && tactical != "" )
|
||||||
{
|
{
|
||||||
self takeweapon( tactical );
|
self takeweapon( tactical );
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical );
|
||||||
}
|
}
|
||||||
|
|
||||||
mine = self get_player_placeable_mine();
|
mine = self get_player_placeable_mine();
|
||||||
if ( isDefined( mine ) )
|
|
||||||
|
if ( isdefined( mine ) )
|
||||||
{
|
{
|
||||||
self takeweapon( mine );
|
self takeweapon( mine );
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine );
|
||||||
}
|
}
|
||||||
|
|
||||||
melee_weapon = self get_player_melee_weapon();
|
melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( melee_weapon ) )
|
|
||||||
|
if ( isdefined( melee_weapon ) )
|
||||||
{
|
{
|
||||||
self takeweapon( melee_weapon );
|
self takeweapon( melee_weapon );
|
||||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
|
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( melee_weapon );
|
||||||
}
|
}
|
||||||
|
|
||||||
self giveweapon( "knife_zm" );
|
self giveweapon( "knife_zm" );
|
||||||
self.current_melee_weapon = "knife_zm";
|
self.current_melee_weapon = "knife_zm";
|
||||||
self give_start_weapon( 1 );
|
self give_start_weapon( 1 );
|
||||||
@ -173,17 +188,17 @@ ejected_overrun( trig ) //checked changed to match cerberus output
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 )
|
foreach ( struct in spawner_array )
|
||||||
{
|
{
|
||||||
if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
|
if ( isdefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
|
||||||
{
|
{
|
||||||
struct.script_noteworthy = "riser_location";
|
struct.script_noteworthy = "riser_location";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
#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()
|
||||||
@ -102,6 +103,8 @@ precache_createfx_fx()
|
|||||||
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;
|
||||||
|
@ -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,8 +1,10 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -35,40 +37,39 @@ stage_logic()
|
|||||||
|
|
||||||
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 = _a51[ _k51 ];
|
|
||||||
m_icon notsolid();
|
m_icon notsolid();
|
||||||
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
|
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
|
||||||
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 );
|
m_icon.origin = m_icon.m_elevator.origin + vectorscale( ( 0, 0, 1 ), 134.0 );
|
||||||
m_icon.angles = m_icon.m_elevator.angles;
|
m_icon.angles = m_icon.m_elevator.angles;
|
||||||
m_icon linkto( m_icon.m_elevator );
|
m_icon linkto( m_icon.m_elevator );
|
||||||
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
|
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 );
|
m_icon.m_lit_icon.origin = m_icon.origin - vectorscale( ( 0, 0, 1 ), 2.0 );
|
||||||
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;
|
|
||||||
while ( i < a_atd2_icons.size )
|
for ( i = 0; i < a_atd2_icons.size; i++ )
|
||||||
{
|
{
|
||||||
a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 );
|
a_atd2_lit_icons[i].origin = a_atd2_icons[i].origin - vectorscale( ( 0, 0, 1 ), 5.0 );
|
||||||
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++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,27 +77,25 @@ 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 ) )
|
|
||||||
{
|
{
|
||||||
m_icon = _a105[ _k105 ];
|
|
||||||
v_off_pos = m_icon.m_lit_icon.origin;
|
v_off_pos = m_icon.m_lit_icon.origin;
|
||||||
m_icon.m_lit_icon unlink();
|
m_icon.m_lit_icon unlink();
|
||||||
m_icon unlink();
|
m_icon unlink();
|
||||||
@ -105,8 +104,8 @@ sq_atd_elevators()
|
|||||||
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
m_icon.m_lit_icon linkto( m_icon.m_elevator );
|
||||||
m_icon linkto( m_icon.m_elevator );
|
m_icon linkto( m_icon.m_elevator );
|
||||||
m_icon playsound( "zmb_sq_symbol_light" );
|
m_icon playsound( "zmb_sq_symbol_light" );
|
||||||
_k105 = getNextArrayKey( _a105, _k105 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "sq_atd_elevator_activated" );
|
flag_set( "sq_atd_elevator_activated" );
|
||||||
vo_richtofen_atd_elevators();
|
vo_richtofen_atd_elevators();
|
||||||
level thread vo_maxis_atd_elevators();
|
level thread vo_maxis_atd_elevators();
|
||||||
@ -115,18 +114,22 @@ sq_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 );
|
self waittill( "trigger", e_who );
|
||||||
while ( !isplayer( e_who ) )
|
|
||||||
|
if ( !isplayer( e_who ) )
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( str_flag );
|
flag_set( str_flag );
|
||||||
|
|
||||||
while ( isalive( e_who ) && e_who istouching( self ) )
|
while ( isalive( e_who ) && e_who istouching( self ) )
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
flag_clear( str_flag );
|
flag_clear( str_flag );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,16 +139,13 @@ 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 )
|
while ( level.sq_atd_cur_drg < 4 )
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
flag_set( "sq_atd_drg_puzzle_complete" );
|
flag_set( "sq_atd_drg_puzzle_complete" );
|
||||||
level thread vo_maxis_atd_order_complete();
|
level thread vo_maxis_atd_order_complete();
|
||||||
/#
|
/#
|
||||||
@ -160,17 +160,19 @@ drg_puzzle_trig_think( n_order_id )
|
|||||||
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" );
|
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
|
||||||
while ( flag( "sq_atd_drg_puzzle_complete" ) )
|
|
||||||
{
|
if ( flag( "sq_atd_drg_puzzle_complete" ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self waittill( "trigger", e_who );
|
self waittill( "trigger", e_who );
|
||||||
|
|
||||||
if ( level.sq_atd_cur_drg == n_order_id )
|
if ( level.sq_atd_cur_drg == n_order_id )
|
||||||
{
|
{
|
||||||
m_lit.origin = v_top;
|
m_lit.origin = v_top;
|
||||||
@ -187,27 +189,27 @@ drg_puzzle_trig_think( n_order_id )
|
|||||||
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" );
|
level waittill( "drg_puzzle_reset" );
|
||||||
|
|
||||||
m_unlit.origin = v_top;
|
m_unlit.origin = v_top;
|
||||||
m_lit.origin = v_hidden;
|
m_lit.origin = v_hidden;
|
||||||
m_unlit playsound( "zmb_sq_symbol_fade" );
|
m_unlit playsound( "zmb_sq_symbol_fade" );
|
||||||
@ -216,32 +218,32 @@ drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
|
|||||||
|
|
||||||
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,11 +1,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -45,9 +45,9 @@ stage_logic_1()
|
|||||||
#/
|
#/
|
||||||
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" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,10 +56,9 @@ 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()
|
||||||
@ -68,15 +67,17 @@ watch_zombie_flings()
|
|||||||
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" );
|
self waittill( "fling" );
|
||||||
|
|
||||||
level.n_launched_zombies++;
|
level.n_launched_zombies++;
|
||||||
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
|
|
||||||
{
|
if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 )
|
||||||
level notify( "pts1_say_next_line" );
|
level notify( "pts1_say_next_line" );
|
||||||
}
|
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,9 +89,9 @@ stage_logic_2()
|
|||||||
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" );
|
||||||
}
|
}
|
||||||
@ -99,31 +100,27 @@ 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 = _a138[ _k138 ];
|
|
||||||
s_lion_spot.a_place_ball_trigs = [];
|
s_lion_spot.a_place_ball_trigs = [];
|
||||||
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
|
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
|
||||||
_k138 = getNextArrayKey( _a138, _k138 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_players = getplayers();
|
a_players = getplayers();
|
||||||
_a145 = a_players;
|
|
||||||
_k145 = getFirstArrayKey( _a145 );
|
foreach ( player in a_players )
|
||||||
while ( isDefined( _k145 ) )
|
|
||||||
{
|
{
|
||||||
player = _a145[ _k145 ];
|
|
||||||
player.a_place_ball_trigs = [];
|
player.a_place_ball_trigs = [];
|
||||||
if ( isDefined( player.zm_sq_has_ball ) )
|
|
||||||
{
|
if ( isdefined( player.zm_sq_has_ball ) )
|
||||||
player thread player_has_ball();
|
player thread player_has_ball();
|
||||||
}
|
}
|
||||||
_k145 = getNextArrayKey( _a145, _k145 );
|
|
||||||
}
|
while ( true )
|
||||||
while ( 1 )
|
|
||||||
{
|
{
|
||||||
level waittill( "zm_ball_picked_up", player );
|
level waittill( "zm_ball_picked_up", player );
|
||||||
|
|
||||||
player thread player_has_ball();
|
player thread player_has_ball();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +150,9 @@ sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
|||||||
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" );
|
t_place_ball waittill( "trigger" );
|
||||||
|
|
||||||
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 );
|
||||||
self.zm_sq_has_ball = undefined;
|
self.zm_sq_has_ball = undefined;
|
||||||
@ -173,68 +172,64 @@ place_ball_think( t_place_ball, s_lion_spot )
|
|||||||
|
|
||||||
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 = _a240[ _k240 ];
|
|
||||||
player thread pts_watch_springpad_use( is_generator );
|
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 );
|
self waittill( "equipment_placed", weapon, weapname );
|
||||||
|
|
||||||
if ( weapname == level.springpad_name )
|
if ( weapname == level.springpad_name )
|
||||||
{
|
|
||||||
self is_springpad_in_place( weapon, is_generator );
|
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" );
|
level waittill( "sq_pts_springpad_in_place" );
|
||||||
|
|
||||||
n_count = 0;
|
n_count = 0;
|
||||||
_a279 = a_spots;
|
|
||||||
_k279 = getFirstArrayKey( _a279 );
|
foreach ( s_spot in a_spots )
|
||||||
while ( isDefined( _k279 ) )
|
|
||||||
{
|
|
||||||
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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,21 +239,20 @@ 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 ) )
|
|
||||||
{
|
{
|
||||||
s_spot = _a298[ _k298 ];
|
|
||||||
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
|
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 + ")" );
|
||||||
@ -266,32 +260,31 @@ is_springpad_in_place( m_springpad, is_generator )
|
|||||||
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;
|
wait 0.1;
|
||||||
level thread pts_should_springpad_create_trigs( s_spot );
|
level thread pts_should_springpad_create_trigs( s_spot );
|
||||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_springpad.fling_scaler = 2;
|
m_springpad.fling_scaler = 2;
|
||||||
m_springpad thread watch_zombie_flings();
|
m_springpad thread watch_zombie_flings();
|
||||||
}
|
}
|
||||||
if ( isDefined( s_spot.script_float ) )
|
|
||||||
|
if ( isdefined( s_spot.script_float ) )
|
||||||
{
|
{
|
||||||
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
|
||||||
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
|
||||||
v_override_dir = vectorScale( v_override_dir, 1024 );
|
v_override_dir = vectorscale( v_override_dir, 1024 );
|
||||||
m_springpad.direction_vec_override = v_override_dir;
|
m_springpad.direction_vec_override = v_override_dir;
|
||||||
m_springpad.fling_scaler = s_spot.script_float;
|
m_springpad.fling_scaler = s_spot.script_float;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_k298 = getNextArrayKey( _a298, _k298 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +294,7 @@ pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
|||||||
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":
|
case "lion_pair_1":
|
||||||
@ -320,6 +314,7 @@ pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
|||||||
str_anim2 = "ab";
|
str_anim2 = "ab";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
|
||||||
m_anim.angles = ( 0, 0, 0 );
|
m_anim.angles = ( 0, 0, 0 );
|
||||||
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
|
||||||
@ -335,20 +330,21 @@ pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
|
|||||||
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 );
|
||||||
|
|
||||||
|
if ( isdefined( m_anim ) )
|
||||||
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
|
||||||
}
|
|
||||||
wait n_anim_length1;
|
wait( n_anim_length1 );
|
||||||
m_buddy_springpad notify( "fling" );
|
m_buddy_springpad notify( "fling", 1 );
|
||||||
if ( isDefined( m_anim ) )
|
|
||||||
{
|
if ( isdefined( m_anim ) )
|
||||||
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
|
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
|
||||||
}
|
|
||||||
wait n_anim_length2;
|
wait( n_anim_length2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,24 +364,20 @@ pts_springpad_waittill_removed( m_springpad )
|
|||||||
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;
|
is_clear = 0;
|
||||||
_a442 = a_spots;
|
|
||||||
_k442 = getFirstArrayKey( _a442 );
|
foreach ( s_spot in a_spots )
|
||||||
while ( isDefined( _k442 ) )
|
|
||||||
{
|
|
||||||
s_spot = _a442[ _k442 ];
|
|
||||||
if ( !isDefined( s_spot.springpad ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( s_spot.springpad ) )
|
||||||
is_clear = 1;
|
is_clear = 1;
|
||||||
}
|
}
|
||||||
_k442 = getNextArrayKey( _a442, _k442 );
|
|
||||||
}
|
|
||||||
if ( !is_clear )
|
if ( !is_clear )
|
||||||
{
|
|
||||||
flag_set( str_flag );
|
flag_set( str_flag );
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -393,53 +385,44 @@ wait_for_all_springpads_placed( str_type, str_flag )
|
|||||||
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 ) )
|
|
||||||
{
|
|
||||||
s_lion_spot = _a467[ _k467 ];
|
|
||||||
if ( 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 ) )
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
|
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 ) )
|
|
||||||
{
|
{
|
||||||
player = _a481[ _k481 ];
|
if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
||||||
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, player );
|
||||||
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, 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 );
|
||||||
}
|
}
|
||||||
@ -454,7 +437,7 @@ pts_putdown_trigs_springpad_delete_watcher( player, 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" );
|
||||||
@ -462,13 +445,10 @@ pts_reset_ball( s_lion_spot )
|
|||||||
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
|
else if ( isdefined( s_lion_spot.springpad_buddy.which_ball ) )
|
||||||
{
|
|
||||||
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) )
|
|
||||||
{
|
{
|
||||||
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
|
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
|
||||||
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
|
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
|
||||||
@ -476,95 +456,104 @@ pts_reset_ball( s_lion_spot )
|
|||||||
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.springpad_buddy.which_generator + "_started" );
|
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
|
||||||
level.current_generator--;
|
level.current_generator--;
|
||||||
|
|
||||||
s_lion_spot.springpad_buddy.which_ball = undefined;
|
s_lion_spot.springpad_buddy.which_ball = undefined;
|
||||||
m_ball_anim delete();
|
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 ) )
|
|
||||||
{
|
{
|
||||||
s_lion_spot = _a554[ _k554 ];
|
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||||
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();
|
s_lion_spot.pts_putdown_trigs[player.characterindex] delete();
|
||||||
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
|
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;
|
||||||
}
|
|
||||||
_a575 = s_lion_spot.pts_putdown_trigs;
|
foreach ( t_putdown in s_lion_spot.pts_putdown_trigs )
|
||||||
_k575 = getFirstArrayKey( _a575 );
|
|
||||||
while ( isDefined( _k575 ) )
|
|
||||||
{
|
|
||||||
t_putdown = _a575[ _k575 ];
|
|
||||||
t_putdown delete();
|
t_putdown delete();
|
||||||
_k575 = getNextArrayKey( _a575, _k575 );
|
|
||||||
}
|
|
||||||
s_lion_spot.pts_putdown_trigs = [];
|
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" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
|
||||||
|
|
||||||
level waittill( "sq_pts_springad_count2" );
|
level waittill( "sq_pts_springad_count2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
|
||||||
|
|
||||||
level waittill( "sq_pts_springad_count3" );
|
level waittill( "sq_pts_springad_count3" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
|
||||||
|
|
||||||
level waittill( "sq_pts_springad_count4" );
|
level waittill( "sq_pts_springad_count4" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
|
|
||||||
|
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" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
|
||||||
wait 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_1" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
|
||||||
wait 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_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" );
|
|
||||||
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
|
||||||
|
|
||||||
level waittill( "sq_pts_springad_count2" );
|
level waittill( "sq_pts_springad_count2" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
|
|
||||||
|
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
|
||||||
|
|
||||||
level waittill( "sq_pts_springad_count4" );
|
level waittill( "sq_pts_springad_count4" );
|
||||||
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
|
|
||||||
|
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,9 +1,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -30,6 +32,7 @@ stage_logic()
|
|||||||
|
|
||||||
exit_stage_1( success )
|
exit_stage_1( success )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
snipe_balls_wait()
|
snipe_balls_wait()
|
||||||
@ -37,22 +40,19 @@ 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" );
|
level waittill( "zm_ball_shot" );
|
||||||
|
|
||||||
wait 1;
|
wait 1;
|
||||||
is_complete = 1;
|
is_complete = 1;
|
||||||
_a50 = a_balls;
|
|
||||||
_k50 = getFirstArrayKey( _a50 );
|
foreach ( m_ball in a_balls )
|
||||||
while ( isDefined( _k50 ) )
|
|
||||||
{
|
|
||||||
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" );
|
||||||
@ -64,61 +64,65 @@ 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 );
|
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||||
if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
|
|
||||||
|
if ( maps\mp\zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
|
||||||
{
|
{
|
||||||
level notify( "zm_ball_shot" );
|
level notify( "zm_ball_shot" );
|
||||||
playsoundatposition( "zmb_sq_ball_ding", self.origin );
|
playsoundatposition( "zmb_sq_ball_ding", self.origin );
|
||||||
playfx( level._effect["sidequest_flash"], self.origin );
|
playfx( level._effect["sidequest_flash"], self.origin );
|
||||||
str_noteworthy = self.script_noteworthy;
|
str_noteworthy = self.script_noteworthy;
|
||||||
self delete();
|
self delete();
|
||||||
wait 0,5;
|
wait 0.5;
|
||||||
clientnotify( str_noteworthy );
|
clientnotify( str_noteworthy );
|
||||||
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
|
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
|
||||||
|
|
||||||
if ( str_noteworthy == "m_drg_tail" )
|
if ( str_noteworthy == "m_drg_tail" )
|
||||||
{
|
|
||||||
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
|
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
|
||||||
}
|
|
||||||
playfx( level._effect["sidequest_flash"], m_ball.origin );
|
playfx( level._effect["sidequest_flash"], m_ball.origin );
|
||||||
m_ball show();
|
m_ball show();
|
||||||
m_ball thread lion_ball_enable_pickup();
|
m_ball thread lion_ball_enable_pickup();
|
||||||
|
|
||||||
if ( !flag( "sq_slb_first_ball_sniped" ) )
|
if ( !flag( "sq_slb_first_ball_sniped" ) )
|
||||||
{
|
{
|
||||||
flag_set( "sq_slb_first_ball_sniped" );
|
flag_set( "sq_slb_first_ball_sniped" );
|
||||||
level thread vo_atd_ball1_sniped();
|
level thread vo_atd_ball1_sniped();
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
level thread vo_maxis_atd_ball2_sniped();
|
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.can_pickup = 1;
|
||||||
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
|
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
|
||||||
|
|
||||||
while ( self.can_pickup )
|
while ( self.can_pickup )
|
||||||
{
|
{
|
||||||
self.t_pickup waittill( "trigger", player );
|
self.t_pickup waittill( "trigger", player );
|
||||||
if ( !isDefined( player.zm_sq_has_ball ) )
|
|
||||||
|
if ( !isdefined( player.zm_sq_has_ball ) )
|
||||||
{
|
{
|
||||||
player.zm_sq_has_ball = 1;
|
player.zm_sq_has_ball = 1;
|
||||||
player.which_ball = self;
|
player.which_ball = self;
|
||||||
self.can_pickup = 0;
|
self.can_pickup = 0;
|
||||||
self.player = player;
|
self.player = player;
|
||||||
flag_set( "sq_ball_picked_up" );
|
flag_set( "sq_ball_picked_up" );
|
||||||
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player );
|
level thread maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs( player );
|
||||||
level notify( "zm_ball_picked_up" );
|
level notify( "zm_ball_picked_up", player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.t_pickup delete();
|
self.t_pickup delete();
|
||||||
self hide();
|
self hide();
|
||||||
self setcandamage( 0 );
|
self setcandamage( 0 );
|
||||||
@ -128,21 +132,24 @@ lion_ball_enable_pickup()
|
|||||||
self.player.t_putdown_ball = self.t_putdown;
|
self.player.t_putdown_ball = self.t_putdown;
|
||||||
self ball_pickup_waittill_change();
|
self ball_pickup_waittill_change();
|
||||||
play_spark = 0;
|
play_spark = 0;
|
||||||
if ( !isDefined( self.t_putdown ) )
|
|
||||||
|
if ( !isdefined( self.t_putdown ) )
|
||||||
{
|
{
|
||||||
self waittill( "sq_pickup_reset" );
|
self waittill( "sq_pickup_reset" );
|
||||||
|
|
||||||
play_spark = 1;
|
play_spark = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self.t_putdown delete();
|
self.t_putdown delete();
|
||||||
}
|
|
||||||
self.player notify( "zm_sq_ball_putdown" );
|
self.player notify( "zm_sq_ball_putdown" );
|
||||||
|
|
||||||
if ( play_spark )
|
if ( play_spark )
|
||||||
{
|
{
|
||||||
self.sq_pickup_reset = undefined;
|
self.sq_pickup_reset = undefined;
|
||||||
playfx( level._effect["sidequest_flash"], self.origin );
|
playfx( level._effect["sidequest_flash"], self.origin );
|
||||||
}
|
}
|
||||||
|
|
||||||
self show();
|
self show();
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self.player.zm_sq_has_ball = undefined;
|
self.player.zm_sq_has_ball = undefined;
|
||||||
@ -173,23 +180,23 @@ 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()
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -20,7 +22,7 @@ init_2()
|
|||||||
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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,40 +54,39 @@ ssp1_sliquify_balls()
|
|||||||
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" );
|
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
|
||||||
wait 0,5;
|
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()
|
||||||
@ -102,26 +103,22 @@ 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 );
|
level waittill( "ssp2_corpse_made", is_in_room );
|
||||||
|
|
||||||
if ( is_in_room )
|
if ( is_in_room )
|
||||||
{
|
|
||||||
n_count++;
|
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
|
else if ( n_count >= 15 )
|
||||||
{
|
|
||||||
if ( n_count >= 15 )
|
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
iprintlnbold( "Corpse Count Reached" );
|
iprintlnbold( "Corpse Count Reached" );
|
||||||
@ -133,52 +130,47 @@ corpse_room_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", 1 );
|
||||||
level notify( "ssp2_corpse_made" );
|
|
||||||
}
|
|
||||||
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;
|
wait 1;
|
||||||
a_corpses = getcorpsearray();
|
a_corpses = getcorpsearray();
|
||||||
|
|
||||||
if ( a_corpses.size < 15 )
|
if ( a_corpses.size < 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
n_count = 0;
|
n_count = 0;
|
||||||
_a206 = a_corpses;
|
|
||||||
_k206 = getFirstArrayKey( _a206 );
|
foreach ( m_corpse in a_corpses )
|
||||||
while ( isDefined( _k206 ) )
|
|
||||||
{
|
{
|
||||||
m_corpse = _a206[ _k206 ];
|
|
||||||
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();
|
||||||
@ -194,9 +186,11 @@ corpse_room_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 );
|
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
|
||||||
|
|
||||||
if ( isplayer( inflictor ) )
|
if ( isplayer( inflictor ) )
|
||||||
{
|
{
|
||||||
weaponname = inflictor.currentweapon;
|
weaponname = inflictor.currentweapon;
|
||||||
@ -213,9 +207,9 @@ corpse_room_revive_watcher()
|
|||||||
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 )
|
||||||
@ -225,82 +219,80 @@ exit_stage_1( success )
|
|||||||
|
|
||||||
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 );
|
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
|
||||||
|
|
||||||
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
|
||||||
{
|
{
|
||||||
n_count++;
|
n_count++;
|
||||||
|
|
||||||
if ( n_count >= n_end_limit )
|
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" );
|
level notify( "ssp1_ball_first_sliquified" );
|
||||||
break;
|
else if ( n_count == 10 )
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( n_count == 10 )
|
|
||||||
{
|
|
||||||
level notify( "ssp1_ball_sliquified_2" );
|
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" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
|
||||||
|
|
||||||
level waittill( "ssp1_ball_sliquified_2" );
|
level waittill( "ssp1_ball_sliquified_2" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
|
|
||||||
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
|
||||||
flag_wait( "ssp1_complete" );
|
flag_wait( "ssp1_complete" );
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
|
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
|
||||||
wait 10;
|
wait 10;
|
||||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
|
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()
|
||||||
@ -308,21 +300,19 @@ 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,8 +1,10 @@
|
|||||||
#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()
|
||||||
{
|
{
|
||||||
@ -25,55 +27,56 @@ spawned_collision_fix()
|
|||||||
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 = spawn( "script_model", ( 2992, 536, 497 ) );
|
||||||
collision1 setmodel( "collision_geo_512x512x512_standard" );
|
collision1 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision1 ghost();
|
collision1 ghost();
|
||||||
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
|
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
|
||||||
collision2 setmodel( "collision_geo_512x512x512_standard" );
|
collision2 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision2 ghost();
|
collision2 ghost();
|
||||||
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
|
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
|
||||||
collision3 setmodel( "collision_geo_512x512x512_standard" );
|
collision3 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision3.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision3 ghost();
|
collision3 ghost();
|
||||||
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
|
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
|
||||||
collision4 setmodel( "collision_geo_512x512x512_standard" );
|
collision4 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision4.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision4 ghost();
|
collision4 ghost();
|
||||||
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
|
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
|
||||||
collision5 setmodel( "collision_geo_512x512x512_standard" );
|
collision5 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision5.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision5 ghost();
|
collision5 ghost();
|
||||||
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
|
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
|
||||||
collision6 setmodel( "collision_geo_512x512x512_standard" );
|
collision6 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision6.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision6 ghost();
|
collision6 ghost();
|
||||||
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
|
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
|
||||||
collision7 setmodel( "collision_geo_512x512x512_standard" );
|
collision7 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision7.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision7 ghost();
|
collision7 ghost();
|
||||||
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
|
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
|
||||||
collision8 setmodel( "collision_geo_512x512x512_standard" );
|
collision8 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision8.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision8 ghost();
|
collision8 ghost();
|
||||||
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
|
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
|
||||||
collision9 setmodel( "collision_geo_512x512x512_standard" );
|
collision9 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision9.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision9 ghost();
|
collision9 ghost();
|
||||||
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
|
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
|
||||||
collision10 setmodel( "collision_geo_512x512x512_standard" );
|
collision10 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision10.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision10 ghost();
|
collision10 ghost();
|
||||||
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
|
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
|
||||||
collision11 setmodel( "collision_geo_512x512x512_standard" );
|
collision11 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision11.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision11 ghost();
|
collision11 ghost();
|
||||||
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
|
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
|
||||||
collision12 setmodel( "collision_geo_512x512x512_standard" );
|
collision12 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision12 ghost();
|
collision12 ghost();
|
||||||
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
||||||
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
@ -85,59 +88,59 @@ spawned_collision_fix()
|
|||||||
collisione2 ghost();
|
collisione2 ghost();
|
||||||
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
||||||
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione3.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione3 ghost();
|
collisione3 ghost();
|
||||||
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
|
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
|
||||||
collisione4 setmodel( "collision_wall_256x256x10_standard" );
|
collisione4 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione4 ghost();
|
collisione4 ghost();
|
||||||
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
|
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
|
||||||
collisione5 setmodel( "collision_wall_256x256x10_standard" );
|
collisione5 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione5.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione5 ghost();
|
collisione5 ghost();
|
||||||
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
|
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
|
||||||
collisione6 setmodel( "collision_wall_256x256x10_standard" );
|
collisione6 setmodel( "collision_wall_256x256x10_standard" );
|
||||||
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collisione6.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collisione6 ghost();
|
collisione6 ghost();
|
||||||
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
|
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
|
||||||
collision13 setmodel( "collision_wall_128x128x10_standard" );
|
collision13 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
collision13.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
|
||||||
collision13 ghost();
|
collision13 ghost();
|
||||||
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
|
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
|
||||||
collision14 setmodel( "collision_geo_512x512x512_standard" );
|
collision14 setmodel( "collision_geo_512x512x512_standard" );
|
||||||
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 );
|
collision14.angles = vectorscale( ( 0, 0, -1 ), 6.20013 );
|
||||||
collision14 ghost();
|
collision14 ghost();
|
||||||
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
|
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
|
||||||
collision15 setmodel( "collision_wall_128x128x10_standard" );
|
collision15 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision15.angles = ( 0, 240,4, -3,00014 );
|
collision15.angles = ( 0, 240.4, -3.00014 );
|
||||||
collision15 ghost();
|
collision15 ghost();
|
||||||
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
|
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
|
||||||
collision16 setmodel( "collision_wall_128x128x10_standard" );
|
collision16 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision16.angles = ( 0, 60, -2,60003 );
|
collision16.angles = ( 0, 60, -2.60003 );
|
||||||
collision16 ghost();
|
collision16 ghost();
|
||||||
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
|
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
|
||||||
collision17 setmodel( "collision_wall_128x128x10_standard" );
|
collision17 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision17.angles = ( 0, 60, -2,60003 );
|
collision17.angles = ( 0, 60, -2.60003 );
|
||||||
collision17 ghost();
|
collision17 ghost();
|
||||||
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
|
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
|
||||||
collision18 setmodel( "collision_geo_64x64x256_standard" );
|
collision18 setmodel( "collision_geo_64x64x256_standard" );
|
||||||
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 );
|
collision18.angles = vectorscale( ( 1, 0, 0 ), 350.0 );
|
||||||
collision18 ghost();
|
collision18 ghost();
|
||||||
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
|
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
|
||||||
collision19 setmodel( "collision_geo_32x32x128_standard" );
|
collision19 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision19.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision19 ghost();
|
collision19 ghost();
|
||||||
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
|
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
|
||||||
collision20 setmodel( "collision_wall_128x128x10_standard" );
|
collision20 setmodel( "collision_wall_128x128x10_standard" );
|
||||||
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 );
|
collision20.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||||
collision20 ghost();
|
collision20 ghost();
|
||||||
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
|
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
|
||||||
collision21 setmodel( "collision_geo_32x32x128_standard" );
|
collision21 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 );
|
collision21.angles = vectorscale( ( 0, 1, 0 ), 8.6 );
|
||||||
collision21 ghost();
|
collision21 ghost();
|
||||||
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
|
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
|
||||||
collision22 setmodel( "collision_geo_32x32x128_standard" );
|
collision22 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 );
|
collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 );
|
||||||
collision22 ghost();
|
collision22 ghost();
|
||||||
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
||||||
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
||||||
@ -152,25 +155,24 @@ spawned_collision_fix()
|
|||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -178,7 +180,7 @@ connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
|
|||||||
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 );
|
||||||
@ -193,70 +195,64 @@ pathfinding_override_fix()
|
|||||||
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 ) )
|
|
||||||
{
|
{
|
||||||
node = _a331[ _k331 ];
|
if ( node.origin[0] == 3598.2 )
|
||||||
if ( node.origin[ 0 ] == 3598,2 )
|
|
||||||
{
|
{
|
||||||
deletepathnode( node );
|
deletepathnode( node );
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_k331 = getNextArrayKey( _a331, _k331 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -264,17 +260,15 @@ pathfinding_override_fix()
|
|||||||
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 );
|
||||||
|
#/
|
||||||
|
}
|
@ -1,42 +1,40 @@
|
|||||||
#include maps/mp/zombies/_zm_buildables;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_power;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_unitrigger;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_equipment;
|
#include maps\mp\zombies\_zm_equipment;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_unitrigger;
|
||||||
|
#include maps\mp\zombies\_zm_power;
|
||||||
#using_animtree( "zombie_springpad" );
|
#include maps\mp\zombies\_zm_buildables;
|
||||||
|
|
||||||
init( pickupstring, howtostring )
|
init( pickupstring, howtostring )
|
||||||
{
|
{
|
||||||
if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.springpad_name = "equip_springpad_zm";
|
level.springpad_name = "equip_springpad_zm";
|
||||||
init_animtree();
|
init_animtree();
|
||||||
maps/mp/zombies/_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
||||||
maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
||||||
level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
|
level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
|
||||||
if ( -1 )
|
|
||||||
{
|
if ( !isdefined( level.springpad_trigger_radius ) )
|
||||||
setdvar( "player_useRadius_zm", 96 );
|
level.springpad_trigger_radius = 72;
|
||||||
}
|
|
||||||
thread wait_init_damage();
|
thread wait_init_damage();
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_init_damage()
|
wait_init_damage()
|
||||||
{
|
{
|
||||||
while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) )
|
while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) )
|
||||||
{
|
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
|
||||||
level.springpad_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 );
|
level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect()
|
||||||
@ -44,6 +42,7 @@ onplayerconnect()
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,9 +51,11 @@ onplayerspawned()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self thread setupwatchers();
|
self thread setupwatchers();
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread watchspringpaduse();
|
self thread watchspringpaduse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,8 +63,9 @@ onplayerspawned()
|
|||||||
setupwatchers()
|
setupwatchers()
|
||||||
{
|
{
|
||||||
self waittill( "weapon_watchers_created" );
|
self waittill( "weapon_watchers_created" );
|
||||||
watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
|
||||||
watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject;
|
watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
||||||
|
watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject;
|
||||||
}
|
}
|
||||||
|
|
||||||
watchspringpaduse()
|
watchspringpaduse()
|
||||||
@ -72,9 +74,11 @@ watchspringpaduse()
|
|||||||
self endon( "watchSpringPadUse" );
|
self endon( "watchSpringPadUse" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "equipment_placed", weapon, weapname );
|
self waittill( "equipment_placed", weapon, weapname );
|
||||||
|
|
||||||
if ( weapname == level.springpad_name )
|
if ( weapname == level.springpad_name )
|
||||||
{
|
{
|
||||||
self cleanupoldspringpad();
|
self cleanupoldspringpad();
|
||||||
@ -86,17 +90,19 @@ watchspringpaduse()
|
|||||||
|
|
||||||
cleanupoldspringpad()
|
cleanupoldspringpad()
|
||||||
{
|
{
|
||||||
if ( isDefined( self.buildablespringpad ) )
|
if ( isdefined( self.buildablespringpad ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.buildablespringpad.stub ) )
|
if ( isdefined( self.buildablespringpad.stub ) )
|
||||||
{
|
{
|
||||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||||
self.buildablespringpad.stub = undefined;
|
self.buildablespringpad.stub = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.buildablespringpad delete();
|
self.buildablespringpad delete();
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
}
|
}
|
||||||
if ( isDefined( level.springpad_sound_ent ) )
|
|
||||||
|
if ( isdefined( level.springpad_sound_ent ) )
|
||||||
{
|
{
|
||||||
level.springpad_sound_ent delete();
|
level.springpad_sound_ent delete();
|
||||||
level.springpad_sound_ent = undefined;
|
level.springpad_sound_ent = undefined;
|
||||||
@ -107,31 +113,41 @@ watchforcleanup()
|
|||||||
{
|
{
|
||||||
self notify( "springpad_cleanup" );
|
self notify( "springpad_cleanup" );
|
||||||
self endon( "springpad_cleanup" );
|
self endon( "springpad_cleanup" );
|
||||||
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
||||||
cleanupoldspringpad();
|
cleanupoldspringpad();
|
||||||
}
|
}
|
||||||
|
|
||||||
placespringpad( origin, angles )
|
placespringpad( origin, angles )
|
||||||
{
|
{
|
||||||
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, 96, -32 );
|
if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] )
|
||||||
if ( isDefined( item ) )
|
{
|
||||||
|
forward = anglestoforward( angles );
|
||||||
|
origin -= -24 * forward;
|
||||||
|
}
|
||||||
|
|
||||||
|
item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
|
||||||
|
|
||||||
|
if ( isdefined( item ) )
|
||||||
{
|
{
|
||||||
item.springpad_kills = self.springpad_kills;
|
item.springpad_kills = self.springpad_kills;
|
||||||
item.requires_pickup = 1;
|
item.requires_pickup = 1;
|
||||||
item.zombie_attack_callback = ::springpad_add_fling_ent;
|
item.zombie_attack_callback = ::springpad_fling_attacker;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
dropspringpad()
|
dropspringpad()
|
||||||
{
|
{
|
||||||
item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, 96, -32 );
|
item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 );
|
||||||
if ( isDefined( item ) )
|
|
||||||
|
if ( isdefined( item ) )
|
||||||
{
|
{
|
||||||
item.springpad_kills = self.springpad_kills;
|
item.springpad_kills = self.springpad_kills;
|
||||||
item.requires_pickup = 1;
|
item.requires_pickup = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@ -146,22 +162,16 @@ transferspringpad( fromplayer, toplayer )
|
|||||||
{
|
{
|
||||||
buildablespringpad = toplayer.buildablespringpad;
|
buildablespringpad = toplayer.buildablespringpad;
|
||||||
toarmed = 0;
|
toarmed = 0;
|
||||||
if ( isDefined( buildablespringpad ) )
|
|
||||||
{
|
if ( isdefined( buildablespringpad ) )
|
||||||
if ( isDefined( buildablespringpad.is_armed ) )
|
toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed;
|
||||||
{
|
|
||||||
toarmed = buildablespringpad.is_armed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
springpad_kills = toplayer.springpad_kills;
|
springpad_kills = toplayer.springpad_kills;
|
||||||
fromarmed = 0;
|
fromarmed = 0;
|
||||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
|
||||||
{
|
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||||
if ( isDefined( fromplayer.buildablespringpad.is_armed ) )
|
fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed;
|
||||||
{
|
|
||||||
fromarmed = fromplayer.buildablespringpad.is_armed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
||||||
toplayer.buildablespringpad.original_owner = toplayer;
|
toplayer.buildablespringpad.original_owner = toplayer;
|
||||||
toplayer.buildablespringpad.owner = toplayer;
|
toplayer.buildablespringpad.owner = toplayer;
|
||||||
@ -171,25 +181,23 @@ transferspringpad( fromplayer, toplayer )
|
|||||||
fromplayer.buildablespringpad = buildablespringpad;
|
fromplayer.buildablespringpad = buildablespringpad;
|
||||||
fromplayer.springpad_kills = springpad_kills;
|
fromplayer.springpad_kills = springpad_kills;
|
||||||
fromplayer notify( "equip_springpad_zm_taken" );
|
fromplayer notify( "equip_springpad_zm_taken" );
|
||||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
|
||||||
|
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||||
{
|
{
|
||||||
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
||||||
fromplayer.buildablespringpad.original_owner = fromplayer;
|
fromplayer.buildablespringpad.original_owner = fromplayer;
|
||||||
fromplayer.buildablespringpad.owner = fromplayer;
|
fromplayer.buildablespringpad.owner = fromplayer;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||||
fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_in_range( delta, origin, radius )
|
springpad_in_range( delta, origin, radius )
|
||||||
{
|
{
|
||||||
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
|
if ( distancesquared( self.target.origin, origin ) < radius * radius )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_power_on( origin, radius )
|
springpad_power_on( origin, radius )
|
||||||
@ -197,12 +205,11 @@ springpad_power_on( origin, radius )
|
|||||||
/#
|
/#
|
||||||
println( "^1ZM POWER: trap on\n" );
|
println( "^1ZM POWER: trap on\n" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( self.target ) )
|
if ( !isdefined( self.target ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.target.power_on = 1;
|
self.target.power_on = 1;
|
||||||
self.target.power_on_time = getTime();
|
self.target.power_on_time = gettime();
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_power_off( origin, radius )
|
springpad_power_off( origin, radius )
|
||||||
@ -210,10 +217,9 @@ springpad_power_off( origin, radius )
|
|||||||
/#
|
/#
|
||||||
println( "^1ZM POWER: trap off\n" );
|
println( "^1ZM POWER: trap off\n" );
|
||||||
#/
|
#/
|
||||||
if ( !isDefined( self.target ) )
|
if ( !isdefined( self.target ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.target.power_on = 0;
|
self.target.power_on = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,45 +230,50 @@ startspringpaddeploy( weapon, armed )
|
|||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
self thread watchforcleanup();
|
self thread watchforcleanup();
|
||||||
electricradius = 45;
|
electricradius = 45;
|
||||||
if ( isDefined( self.springpad_kills ) )
|
|
||||||
|
if ( isdefined( self.springpad_kills ) )
|
||||||
{
|
{
|
||||||
weapon.springpad_kills = self.springpad_kills;
|
weapon.springpad_kills = self.springpad_kills;
|
||||||
self.springpad_kills = undefined;
|
self.springpad_kills = undefined;
|
||||||
}
|
}
|
||||||
if ( !isDefined( weapon.springpad_kills ) )
|
|
||||||
{
|
if ( !isdefined( weapon.springpad_kills ) )
|
||||||
weapon.springpad_kills = 0;
|
weapon.springpad_kills = 0;
|
||||||
}
|
|
||||||
if ( isDefined( weapon ) )
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
weapon thread debugspringpad( electricradius );
|
weapon thread debugspringpad( electricradius );
|
||||||
#/
|
#/
|
||||||
if ( isDefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
||||||
{
|
{
|
||||||
weapon.power_on = 0;
|
weapon.power_on = 0;
|
||||||
maps/mp/zombies/_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon );
|
maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
weapon.power_on = 1;
|
weapon.power_on = 1;
|
||||||
}
|
|
||||||
if ( !weapon.power_on )
|
if ( !weapon.power_on )
|
||||||
{
|
|
||||||
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
||||||
}
|
|
||||||
self thread springpadthink( weapon, electricradius, armed );
|
self thread springpadthink( weapon, electricradius, armed );
|
||||||
if ( isDefined( level.equipment_springpad_needs_power ) && !level.equipment_springpad_needs_power )
|
|
||||||
|
if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon );
|
|
||||||
|
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon );
|
||||||
|
|
||||||
weapon waittill( "death" );
|
weapon waittill( "death" );
|
||||||
if ( isDefined( level.springpad_sound_ent ) )
|
|
||||||
|
if ( isdefined( level.springpad_sound_ent ) )
|
||||||
{
|
{
|
||||||
level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" );
|
level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" );
|
||||||
level.springpad_sound_ent delete();
|
level.springpad_sound_ent delete();
|
||||||
level.springpad_sound_ent = undefined;
|
level.springpad_sound_ent = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self notify( "springpad_cleanup" );
|
self notify( "springpad_cleanup" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -272,6 +283,8 @@ init_animtree()
|
|||||||
scriptmodelsuseanimtree( -1 );
|
scriptmodelsuseanimtree( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#using_animtree("zombie_springpad");
|
||||||
|
|
||||||
springpad_animate( weapon, armed )
|
springpad_animate( weapon, armed )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
@ -284,12 +297,13 @@ springpad_animate( weapon, armed )
|
|||||||
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
||||||
weapon thread springpad_audio();
|
weapon thread springpad_audio();
|
||||||
prearmed = 0;
|
prearmed = 0;
|
||||||
if ( isDefined( armed ) && armed )
|
|
||||||
{
|
if ( isdefined( armed ) && armed )
|
||||||
prearmed = 1;
|
prearmed = 1;
|
||||||
}
|
|
||||||
fast_reset = 0;
|
fast_reset = 0;
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
if ( !prearmed )
|
if ( !prearmed )
|
||||||
{
|
{
|
||||||
@ -297,32 +311,35 @@ springpad_animate( weapon, armed )
|
|||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||||
weapon thread playspringpadresetaudio( f_animlength );
|
weapon thread playspringpadresetaudio( f_animlength );
|
||||||
wait f_animlength;
|
wait( f_animlength );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
||||||
weapon thread playspringpadresetaudio( r_animlength );
|
weapon thread playspringpadresetaudio( r_animlength );
|
||||||
wait r_animlength;
|
wait( r_animlength );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
wait 0.05;
|
||||||
wait 0,05;
|
|
||||||
}
|
|
||||||
prearmed = 0;
|
prearmed = 0;
|
||||||
weapon notify( "armed" );
|
weapon notify( "armed" );
|
||||||
fast_reset = 0;
|
fast_reset = 0;
|
||||||
if ( isDefined( weapon ) )
|
|
||||||
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
||||||
|
|
||||||
weapon waittill( "fling", fast );
|
weapon waittill( "fling", fast );
|
||||||
|
|
||||||
fast_reset = fast;
|
fast_reset = fast;
|
||||||
}
|
}
|
||||||
if ( isDefined( weapon ) )
|
|
||||||
|
if ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
||||||
wait l_animlength;
|
wait( l_animlength );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,14 +350,16 @@ playspringpadresetaudio( time )
|
|||||||
ent = spawn( "script_origin", self.origin );
|
ent = spawn( "script_origin", self.origin );
|
||||||
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
||||||
self thread deleteentwhensounddone( time, ent );
|
self thread deleteentwhensounddone( time, ent );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteentwhensounddone( time, ent )
|
deleteentwhensounddone( time, ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait time;
|
wait( time );
|
||||||
self notify( "springpadAudioCleanup" );
|
self notify( "springpadAudioCleanup" );
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
@ -349,7 +368,9 @@ springpad_audio()
|
|||||||
{
|
{
|
||||||
loop_ent = spawn( "script_origin", self.origin );
|
loop_ent = spawn( "script_origin", self.origin );
|
||||||
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
loop_ent delete();
|
loop_ent delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,7 +378,8 @@ springpad_fx( weapon )
|
|||||||
{
|
{
|
||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
||||||
wait 1;
|
wait 1;
|
||||||
@ -372,96 +394,106 @@ springpadthink( weapon, electricradius, armed )
|
|||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
radiussquared = electricradius * electricradius;
|
radiussquared = electricradius * electricradius;
|
||||||
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
|
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
|
||||||
trigger.origin += anglesToForward( flat_angle( weapon.angles ) ) * -15;
|
trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15;
|
||||||
trigger.angles = weapon.angles;
|
trigger.angles = weapon.angles;
|
||||||
trigger enablelinkto();
|
trigger enablelinkto();
|
||||||
trigger linkto( weapon );
|
trigger linkto( weapon );
|
||||||
weapon.trigger = trigger;
|
weapon.trigger = trigger;
|
||||||
/#
|
/#
|
||||||
trigger.extent = ( 24, 24, 16 );
|
trigger.extent = ( 24.0, 24.0, 16.0 );
|
||||||
#/
|
#/
|
||||||
weapon thread springpadthinkcleanup( trigger );
|
weapon thread springpadthinkcleanup( trigger );
|
||||||
direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) );
|
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
|
||||||
direction_vector = vectorScale( direction_forward, 1024 );
|
direction_vector = vectorscale( direction_forward, 1024 );
|
||||||
direction_origin = weapon.origin + direction_vector;
|
direction_origin = weapon.origin + direction_vector;
|
||||||
home_angles = weapon.angles;
|
home_angles = weapon.angles;
|
||||||
weapon.is_armed = 0;
|
weapon.is_armed = 0;
|
||||||
self thread springpad_fx( weapon );
|
self thread springpad_fx( weapon );
|
||||||
self thread springpad_animate( weapon, armed );
|
self thread springpad_animate( weapon, armed );
|
||||||
|
|
||||||
weapon waittill( "armed" );
|
weapon waittill( "armed" );
|
||||||
|
|
||||||
weapon.is_armed = 1;
|
weapon.is_armed = 1;
|
||||||
weapon.fling_targets = [];
|
weapon.fling_targets = [];
|
||||||
self thread targeting_thread( weapon, trigger );
|
self thread targeting_thread( weapon, trigger );
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
wait_for_targets( weapon );
|
wait_for_targets( weapon );
|
||||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
|
||||||
|
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||||
{
|
{
|
||||||
weapon notify( "fling" );
|
weapon notify( "fling", weapon.zombies_only );
|
||||||
weapon.is_armed = 0;
|
weapon.is_armed = 0;
|
||||||
weapon.zombies_only = 1;
|
weapon.zombies_only = 1;
|
||||||
_a520 = weapon.fling_targets;
|
|
||||||
_k520 = getFirstArrayKey( _a520 );
|
foreach ( ent in weapon.fling_targets )
|
||||||
while ( isDefined( _k520 ) )
|
|
||||||
{
|
{
|
||||||
ent = _a520[ _k520 ];
|
|
||||||
if ( isplayer( ent ) )
|
if ( isplayer( ent ) )
|
||||||
{
|
{
|
||||||
ent thread player_fling( weapon.origin + vectorScale( ( 0, 0, 1 ), 30 ), weapon.angles, direction_vector );
|
ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) )
|
||||||
if ( isDefined( ent ) )
|
|
||||||
{
|
|
||||||
if ( !isDefined( self.num_zombies_flung ) )
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( self.num_zombies_flung ) )
|
||||||
self.num_zombies_flung = 0;
|
self.num_zombies_flung = 0;
|
||||||
}
|
|
||||||
self.num_zombies_flung++;
|
self.num_zombies_flung++;
|
||||||
self notify( "zombie_flung" );
|
self notify( "zombie_flung" );
|
||||||
if ( !isDefined( weapon.fling_scaler ) )
|
ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isdefined( ent ) )
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( self.num_zombies_flung ) )
|
||||||
|
self.num_zombies_flung = 0;
|
||||||
|
|
||||||
|
self.num_zombies_flung++;
|
||||||
|
self notify( "zombie_flung" );
|
||||||
|
|
||||||
|
if ( !isdefined( weapon.fling_scaler ) )
|
||||||
weapon.fling_scaler = 1;
|
weapon.fling_scaler = 1;
|
||||||
}
|
|
||||||
if ( isDefined( weapon.direction_vec_override ) )
|
if ( isdefined( weapon.direction_vec_override ) )
|
||||||
{
|
|
||||||
direction_vector = weapon.direction_vec_override;
|
direction_vector = weapon.direction_vec_override;
|
||||||
}
|
|
||||||
ent dodamage( ent.health + 666, ent.origin );
|
ent dodamage( ent.health + 666, ent.origin );
|
||||||
ent startragdoll();
|
ent startragdoll();
|
||||||
ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler );
|
ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
|
||||||
weapon.springpad_kills++;
|
weapon.springpad_kills++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_k520 = getNextArrayKey( _a520, _k520 );
|
|
||||||
}
|
|
||||||
if ( weapon.springpad_kills >= 28 )
|
if ( weapon.springpad_kills >= 28 )
|
||||||
{
|
|
||||||
self thread springpad_expired( weapon );
|
self thread springpad_expired( weapon );
|
||||||
}
|
|
||||||
weapon.fling_targets = [];
|
weapon.fling_targets = [];
|
||||||
|
|
||||||
weapon waittill( "armed" );
|
weapon waittill( "armed" );
|
||||||
|
|
||||||
weapon.is_armed = 1;
|
weapon.is_armed = 1;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
wait 0.1;
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_targets( weapon )
|
wait_for_targets( weapon )
|
||||||
{
|
{
|
||||||
weapon endon( "hi_priority_target" );
|
weapon endon( "hi_priority_target" );
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||||
{
|
{
|
||||||
wait 0,15;
|
wait 0.15;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,55 +504,50 @@ targeting_thread( weapon, trigger )
|
|||||||
self endon( "equip_springpad_zm_taken" );
|
self endon( "equip_springpad_zm_taken" );
|
||||||
weapon endon( "death" );
|
weapon endon( "death" );
|
||||||
weapon.zombies_only = 1;
|
weapon.zombies_only = 1;
|
||||||
while ( isDefined( weapon ) )
|
|
||||||
|
while ( isdefined( weapon ) )
|
||||||
{
|
{
|
||||||
if ( weapon.is_armed )
|
if ( weapon.is_armed )
|
||||||
{
|
{
|
||||||
zombies = getaiarray( level.zombie_team );
|
zombies = getaiarray( level.zombie_team );
|
||||||
_a594 = zombies;
|
|
||||||
_k594 = getFirstArrayKey( _a594 );
|
foreach ( zombie in zombies )
|
||||||
while ( isDefined( _k594 ) )
|
|
||||||
{
|
|
||||||
zombie = _a594[ _k594 ];
|
|
||||||
if ( !isDefined( zombie ) || !isalive( zombie ) )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if ( !isdefined( zombie ) || !isalive( zombie ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||||
|
continue;
|
||||||
|
|
||||||
if ( zombie istouching( trigger ) )
|
if ( zombie istouching( trigger ) )
|
||||||
{
|
|
||||||
weapon springpad_add_fling_ent( zombie );
|
weapon springpad_add_fling_ent( zombie );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
_k594 = getNextArrayKey( _a594, _k594 );
|
|
||||||
}
|
|
||||||
players = get_players();
|
players = get_players();
|
||||||
_a622 = players;
|
|
||||||
_k622 = getFirstArrayKey( _a622 );
|
foreach ( player in players )
|
||||||
while ( isDefined( _k622 ) )
|
|
||||||
{
|
{
|
||||||
player = _a622[ _k622 ];
|
|
||||||
if ( is_player_valid( player ) && player istouching( trigger ) )
|
if ( is_player_valid( player ) && player istouching( trigger ) )
|
||||||
{
|
{
|
||||||
weapon springpad_add_fling_ent( player );
|
weapon springpad_add_fling_ent( player );
|
||||||
weapon.zombies_only = 0;
|
weapon.zombies_only = 0;
|
||||||
}
|
}
|
||||||
_k622 = getNextArrayKey( _a622, _k622 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !weapon.zombies_only )
|
if ( !weapon.zombies_only )
|
||||||
{
|
|
||||||
weapon notify( "hi_priority_target" );
|
weapon notify( "hi_priority_target" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
wait 0,05;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
springpad_fling_attacker( ent )
|
||||||
|
{
|
||||||
|
springpad_add_fling_ent( ent );
|
||||||
|
|
||||||
|
if ( isdefined( level.springpad_attack_delay ) )
|
||||||
|
wait( level.springpad_attack_delay );
|
||||||
}
|
}
|
||||||
|
|
||||||
springpad_add_fling_ent( ent )
|
springpad_add_fling_ent( ent )
|
||||||
@ -530,15 +557,31 @@ springpad_add_fling_ent( ent )
|
|||||||
|
|
||||||
springpad_expired( weapon )
|
springpad_expired( weapon )
|
||||||
{
|
{
|
||||||
weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 );
|
weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
|
||||||
self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||||
self.springpad_kills = 0;
|
self.springpad_kills = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
player_fling( origin, angles, velocity )
|
player_fling( origin, angles, velocity, weapon )
|
||||||
{
|
{
|
||||||
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
||||||
self setorigin( ( origin + torigin ) * 0,5 );
|
aorigin = ( origin + torigin ) * 0.5;
|
||||||
|
trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
|
||||||
|
|
||||||
|
if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 )
|
||||||
|
{
|
||||||
|
if ( !isdefined( weapon.springpad_kills ) )
|
||||||
|
weapon.springpad_kills = 0;
|
||||||
|
|
||||||
|
weapon.springpad_kills += 5;
|
||||||
|
|
||||||
|
if ( weapon.springpad_kills >= 28 )
|
||||||
|
weapon.owner thread springpad_expired( weapon );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self setorigin( aorigin );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self setvelocity( velocity );
|
self setvelocity( velocity );
|
||||||
}
|
}
|
||||||
@ -546,47 +589,44 @@ player_fling( origin, angles, velocity )
|
|||||||
springpadthinkcleanup( trigger )
|
springpadthinkcleanup( trigger )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
if ( isdefined( trigger ) )
|
||||||
trigger delete();
|
trigger delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
debugspringpad( radius )
|
debugspringpad( radius )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
color_armed = ( 0, 0, 1 );
|
color_armed = ( 0, 1, 0 );
|
||||||
color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 );
|
color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 );
|
||||||
while ( isDefined( self ) )
|
|
||||||
|
while ( isdefined( self ) )
|
||||||
{
|
{
|
||||||
if ( getDvarInt( #"EB512CB7" ) )
|
if ( getdvarint( _hash_EB512CB7 ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( self.trigger ) )
|
if ( isdefined( self.trigger ) )
|
||||||
{
|
{
|
||||||
color = color_unarmed;
|
color = color_unarmed;
|
||||||
if ( isDefined( self.is_armed ) && self.is_armed )
|
|
||||||
{
|
if ( isdefined( self.is_armed ) && self.is_armed )
|
||||||
color = color_armed;
|
color = color_armed;
|
||||||
}
|
|
||||||
vec = self.trigger.extent;
|
vec = self.trigger.extent;
|
||||||
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
||||||
}
|
}
|
||||||
color = ( 0, 0, 1 );
|
|
||||||
|
color = ( 0, 1, 0 );
|
||||||
text = "";
|
text = "";
|
||||||
if ( isDefined( self.springpad_kills ) )
|
|
||||||
{
|
if ( isdefined( self.springpad_kills ) )
|
||||||
text = "" + self.springpad_kills + "";
|
text = "" + self.springpad_kills + "";
|
||||||
}
|
else if ( isdefined( self.owner.springpad_kills ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( self.owner.springpad_kills ) )
|
|
||||||
{
|
|
||||||
text = "[" + self.owner.springpad_kills + "]";
|
text = "[" + self.owner.springpad_kills + "]";
|
||||||
|
|
||||||
|
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
}
|
}
|
||||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), text, color, 1, 0,5, 1 );
|
|
||||||
}
|
|
||||||
wait 0,05;
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,61 +1,126 @@
|
|||||||
#include maps/mp/zombies/_zm_audio;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_score;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_laststand;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
|
#include maps\mp\zombies\_zm_pers_upgrades_functions;
|
||||||
|
#include maps\mp\zombies\_zm_score;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
{
|
{
|
||||||
precacheitem( weapon_name );
|
precacheitem( weapon_name );
|
||||||
precacheitem( flourish_weapon_name );
|
precacheitem( flourish_weapon_name );
|
||||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon );
|
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < melee_weapon_triggers.size )
|
for ( i = 0; i < melee_weapon_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||||
if ( isDefined( knife_model ) )
|
|
||||||
{
|
if ( isdefined( knife_model ) )
|
||||||
knife_model hide();
|
knife_model hide();
|
||||||
}
|
|
||||||
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||||
|
|
||||||
|
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||||
|
{
|
||||||
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
cursor_hint = "HINT_WEAPON";
|
||||||
|
cursor_hint_weapon = weapon_name;
|
||||||
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
|
}
|
||||||
|
else
|
||||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
melee_weapon_triggers[ i ] usetriggerrequirelookat();
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
else
|
||||||
i = 0;
|
|
||||||
while ( i < melee_weapon_structs.size )
|
|
||||||
{
|
{
|
||||||
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn );
|
weapon_display = get_weapon_display_name( weapon_name );
|
||||||
i++;
|
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||||
}
|
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
||||||
register_melee_weapon_for_level( weapon_name );
|
|
||||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
{
|
{
|
||||||
level.ballistic_weapon_name = [];
|
cursor_hint = "HINT_WEAPON";
|
||||||
|
cursor_hint_weapon = weapon_name;
|
||||||
|
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||||
}
|
}
|
||||||
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name;
|
else
|
||||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||||
{
|
|
||||||
level.ballistic_upgraded_weapon_name = [];
|
|
||||||
}
|
|
||||||
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||||
|
}
|
||||||
|
|
||||||
|
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < melee_weapon_structs.size; i++ )
|
||||||
|
prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||||
|
|
||||||
|
register_melee_weapon_for_level( weapon_name );
|
||||||
|
|
||||||
|
if ( !isdefined( level.ballistic_weapon_name ) )
|
||||||
|
level.ballistic_weapon_name = [];
|
||||||
|
|
||||||
|
level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
|
||||||
|
|
||||||
|
if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
|
||||||
|
level.ballistic_upgraded_weapon_name = [];
|
||||||
|
|
||||||
|
level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
|
||||||
|
/#
|
||||||
|
if ( !isdefined( level.zombie_weapons[weapon_name] ) )
|
||||||
{
|
{
|
||||||
if ( isDefined( stub ) )
|
if ( isdefined( level.devgui_add_weapon ) )
|
||||||
|
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||||
|
}
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
|
{
|
||||||
|
if ( isdefined( stub ) )
|
||||||
|
{
|
||||||
|
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||||
{
|
{
|
||||||
stub.hint_string = hint_string;
|
stub.hint_string = hint_string;
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_WEAPON";
|
||||||
|
stub.cursor_hint_weapon = weapon_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_NOICON";
|
||||||
|
stub.cursor_hint_weapon = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||||
|
stub.hint_parm2 = cost;
|
||||||
|
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||||
|
|
||||||
|
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_WEAPON";
|
||||||
|
stub.cursor_hint_weapon = weapon_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stub.cursor_hint = "HINT_NOICON";
|
||||||
|
stub.cursor_hint_weapon = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stub.cost = cost;
|
stub.cost = cost;
|
||||||
stub.weapon_name = weapon_name;
|
stub.weapon_name = weapon_name;
|
||||||
stub.has_weapon = has_weapon;
|
|
||||||
stub.give_weapon = give_weapon;
|
|
||||||
stub.take_weapon = take_weapon;
|
|
||||||
stub.vo_dialog_id = vo_dialog_id;
|
stub.vo_dialog_id = vo_dialog_id;
|
||||||
stub.flourish_weapon_name = flourish_weapon_name;
|
stub.flourish_weapon_name = flourish_weapon_name;
|
||||||
stub.ballistic_weapon_name = ballistic_weapon_name;
|
stub.ballistic_weapon_name = ballistic_weapon_name;
|
||||||
@ -68,48 +133,38 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
|||||||
add_stub( stub, weapon_name )
|
add_stub( stub, weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
melee_weapon = undefined;
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
|
||||||
{
|
|
||||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( isdefined( stub ) && isdefined( melee_weapon ) )
|
||||||
|
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_melee_weapon_by_name( weapon_name )
|
give_melee_weapon_by_name( weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = undefined;
|
melee_weapon = undefined;
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
{
|
{
|
||||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||||
{
|
{
|
||||||
melee_weapon = level._melee_weapons[i];
|
melee_weapon = level._melee_weapons[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( isDefined( melee_weapon ) )
|
|
||||||
{
|
|
||||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
if ( isdefined( melee_weapon ) )
|
||||||
|
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||||
|
}
|
||||||
|
|
||||||
|
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||||
{
|
{
|
||||||
melee_weapon = spawnstruct();
|
melee_weapon = spawnstruct();
|
||||||
melee_weapon.weapon_name = weapon_name;
|
melee_weapon.weapon_name = weapon_name;
|
||||||
@ -120,373 +175,343 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
|
|||||||
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
||||||
melee_weapon.hint_string = hint_string;
|
melee_weapon.hint_string = hint_string;
|
||||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||||
melee_weapon.has_weapon = has_weapon;
|
|
||||||
melee_weapon.give_weapon = give_weapon;
|
|
||||||
melee_weapon.take_weapon = take_weapon;
|
|
||||||
melee_weapon.flourish_fn = flourish_fn;
|
melee_weapon.flourish_fn = flourish_fn;
|
||||||
if ( !isDefined( level._melee_weapons ) )
|
|
||||||
{
|
if ( !isdefined( level._melee_weapons ) )
|
||||||
level._melee_weapons = [];
|
level._melee_weapons = [];
|
||||||
}
|
|
||||||
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
player_can_see_weapon_prompt( weapon_name )
|
||||||
|
{
|
||||||
|
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
spectator_respawn_all()
|
spectator_respawn_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||||
{
|
|
||||||
self [[ level._melee_weapons[ i ].take_weapon ]]();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spectator_respawn( wallbuy_targetname, take_weapon, has_weapon )
|
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < melee_triggers.size )
|
for ( i = 0; i < melee_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
melee_triggers[i] setvisibletoall();
|
melee_triggers[i] setvisibletoall();
|
||||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
{
|
{
|
||||||
j = 0;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ j ] [[ has_weapon ]]() )
|
|
||||||
{
|
{
|
||||||
|
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide_all()
|
trigger_hide_all()
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
|
||||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trigger_hide( wallbuy_targetname )
|
trigger_hide( wallbuy_targetname )
|
||||||
{
|
{
|
||||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||||
i = 0;
|
|
||||||
while ( i < melee_triggers.size )
|
for ( i = 0; i < melee_triggers.size; i++ )
|
||||||
{
|
|
||||||
melee_triggers[i] setinvisibletoplayer( self );
|
melee_triggers[i] setinvisibletoplayer( self );
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_any_ballistic_knife()
|
has_any_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
has_upgraded_ballistic_knife()
|
has_upgraded_ballistic_knife()
|
||||||
{
|
{
|
||||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||||
i = 0;
|
|
||||||
while ( i < level._melee_weapons.size )
|
|
||||||
{
|
{
|
||||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||||
{
|
return true;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
return false;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
give_ballistic_knife( weapon_string, upgraded )
|
give_ballistic_knife( weapon_string, upgraded )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_weapon();
|
current_melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( current_melee_weapon ) )
|
|
||||||
{
|
if ( isdefined( current_melee_weapon ) )
|
||||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
|
||||||
{
|
{
|
||||||
|
if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
|
||||||
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
||||||
}
|
|
||||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
|
||||||
{
|
|
||||||
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return weapon_string;
|
return weapon_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
change_melee_weapon( weapon_name, current_weapon )
|
change_melee_weapon( weapon_name, current_weapon )
|
||||||
{
|
{
|
||||||
current_melee_weapon = self get_player_melee_weapon();
|
current_melee_weapon = self get_player_melee_weapon();
|
||||||
if ( isDefined( current_melee_weapon ) )
|
|
||||||
|
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||||
{
|
{
|
||||||
self takeweapon( current_melee_weapon );
|
self takeweapon( current_melee_weapon );
|
||||||
unacquire_weapon_toggle( current_melee_weapon );
|
unacquire_weapon_toggle( current_melee_weapon );
|
||||||
}
|
}
|
||||||
|
|
||||||
self set_player_melee_weapon( weapon_name );
|
self set_player_melee_weapon( weapon_name );
|
||||||
had_ballistic = 0;
|
had_ballistic = 0;
|
||||||
had_ballistic_upgraded = 0;
|
had_ballistic_upgraded = 0;
|
||||||
ballistic_was_primary = 0;
|
ballistic_was_primary = 0;
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
i = 0;
|
|
||||||
while ( i < primaryweapons.size )
|
for ( i = 0; i < primaryweapons.size; i++ )
|
||||||
{
|
{
|
||||||
primary_weapon = primaryweapons[i];
|
primary_weapon = primaryweapons[i];
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||||
{
|
{
|
||||||
had_ballistic = 1;
|
had_ballistic = 1;
|
||||||
|
|
||||||
if ( primary_weapon == current_weapon )
|
if ( primary_weapon == current_weapon )
|
||||||
{
|
|
||||||
ballistic_was_primary = 1;
|
ballistic_was_primary = 1;
|
||||||
}
|
|
||||||
self notify( "zmb_lost_knife" );
|
self notify( "zmb_lost_knife" );
|
||||||
self takeweapon( primary_weapon );
|
self takeweapon( primary_weapon );
|
||||||
unacquire_weapon_toggle( primary_weapon );
|
unacquire_weapon_toggle( primary_weapon );
|
||||||
|
|
||||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||||
{
|
|
||||||
had_ballistic_upgraded = 1;
|
had_ballistic_upgraded = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if ( had_ballistic )
|
if ( had_ballistic )
|
||||||
{
|
{
|
||||||
if ( had_ballistic_upgraded )
|
if ( had_ballistic_upgraded )
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
current_weapon = new_ballistic;
|
||||||
}
|
|
||||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||||
|
|
||||||
if ( ballistic_was_primary )
|
if ( ballistic_was_primary )
|
||||||
{
|
|
||||||
current_weapon = new_ballistic;
|
current_weapon = new_ballistic;
|
||||||
}
|
|
||||||
self giveweapon( new_ballistic, 0 );
|
self giveweapon( new_ballistic, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_weapon;
|
return current_weapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||||
{
|
{
|
||||||
self.first_time_triggered = 0;
|
self.first_time_triggered = 0;
|
||||||
while ( isDefined( self.stub ) )
|
|
||||||
|
if ( isdefined( self.stub ) )
|
||||||
{
|
{
|
||||||
self endon( "kill_trigger" );
|
self endon( "kill_trigger" );
|
||||||
if ( isDefined( self.stub.first_time_triggered ) )
|
|
||||||
{
|
if ( isdefined( self.stub.first_time_triggered ) )
|
||||||
self.first_time_triggered = self.stub.first_time_triggered;
|
self.first_time_triggered = self.stub.first_time_triggered;
|
||||||
}
|
|
||||||
weapon_name = self.stub.weapon_name;
|
weapon_name = self.stub.weapon_name;
|
||||||
cost = self.stub.cost;
|
cost = self.stub.cost;
|
||||||
has_weapon = self.stub.has_weapon;
|
|
||||||
give_weapon = self.stub.give_weapon;
|
|
||||||
flourish_fn = self.stub.flourish_fn;
|
flourish_fn = self.stub.flourish_fn;
|
||||||
vo_dialog_id = self.stub.vo_dialog_id;
|
vo_dialog_id = self.stub.vo_dialog_id;
|
||||||
flourish_weapon_name = self.stub.flourish_weapon_name;
|
flourish_weapon_name = self.stub.flourish_weapon_name;
|
||||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
{
|
{
|
||||||
i = 0;
|
for ( i = 0; i < players.size; i++ )
|
||||||
while ( i < players.size )
|
|
||||||
{
|
|
||||||
if ( players[ i ] [[ has_weapon ]]() )
|
|
||||||
{
|
{
|
||||||
|
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||||
self setinvisibletoplayer( players[i] );
|
self setinvisibletoplayer( players[i] );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "trigger", player );
|
self waittill( "trigger", player );
|
||||||
|
|
||||||
if ( !is_player_valid( player ) )
|
if ( !is_player_valid( player ) )
|
||||||
{
|
{
|
||||||
player thread ignore_triggers( 0,5 );
|
player thread ignore_triggers( 0.5 );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player in_revive_trigger() )
|
|
||||||
|
if ( player in_revive_trigger() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player isthrowinggrenade() )
|
|
||||||
|
if ( player isthrowinggrenade() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player.is_drinking > 0 )
|
|
||||||
|
if ( player.is_drinking > 0 )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
|
||||||
|
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( player isswitchingweapons() )
|
if ( player isswitchingweapons() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
else current_weapon = player getcurrentweapon();
|
|
||||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
current_weapon = player getcurrentweapon();
|
||||||
|
|
||||||
|
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
|
||||||
{
|
{
|
||||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
wait 0.1;
|
||||||
{
|
continue;
|
||||||
wait 0,1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
player_has_weapon = player hasweapon( weapon_name );
|
||||||
player_has_weapon = player [[ has_weapon ]]();
|
|
||||||
if ( !player_has_weapon )
|
if ( !player_has_weapon )
|
||||||
{
|
{
|
||||||
|
cost = self.stub.cost;
|
||||||
|
|
||||||
|
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||||
|
cost = int( cost / 2 );
|
||||||
|
|
||||||
if ( player.score >= cost )
|
if ( player.score >= cost )
|
||||||
{
|
{
|
||||||
if ( self.first_time_triggered == 0 )
|
if ( self.first_time_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread melee_weapon_show( player );
|
model thread melee_weapon_show( player );
|
||||||
}
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isDefined( self.clientfieldname ) )
|
|
||||||
{
|
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
}
|
|
||||||
}
|
|
||||||
self.first_time_triggered = 1;
|
self.first_time_triggered = 1;
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.stub.first_time_triggered = 1;
|
self.stub.first_time_triggered = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
|
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
||||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self );
|
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
play_sound_on_ent( "no_purchase" );
|
play_sound_on_ent( "no_purchase" );
|
||||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
{
|
|
||||||
self setinvisibletoplayer( player );
|
self setinvisibletoplayer( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
melee_weapon_show( player )
|
melee_weapon_show( player )
|
||||||
{
|
{
|
||||||
player_angles = vectorToAngle( player.origin - self.origin );
|
player_angles = vectortoangles( player.origin - self.origin );
|
||||||
player_yaw = player_angles[1];
|
player_yaw = player_angles[1];
|
||||||
weapon_yaw = self.angles[1];
|
weapon_yaw = self.angles[1];
|
||||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
yaw_diff = angleclamp180( player_yaw - weapon_yaw );
|
||||||
|
|
||||||
if ( yaw_diff > 0 )
|
if ( yaw_diff > 0 )
|
||||||
{
|
|
||||||
yaw = weapon_yaw - 90;
|
yaw = weapon_yaw - 90;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
yaw = weapon_yaw + 90;
|
yaw = weapon_yaw + 90;
|
||||||
}
|
|
||||||
self.og_origin = self.origin;
|
self.og_origin = self.origin;
|
||||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
self show();
|
self show();
|
||||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||||
time = 1;
|
time = 1;
|
||||||
self moveto( self.og_origin, time );
|
self moveto( self.og_origin, time );
|
||||||
}
|
}
|
||||||
|
|
||||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger )
|
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||||
{
|
|
||||||
if ( isDefined( flourish_fn ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( flourish_fn ) )
|
||||||
self thread [[ flourish_fn ]]();
|
self thread [[ flourish_fn ]]();
|
||||||
}
|
|
||||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
|
||||||
{
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self [[ give_weapon ]]();
|
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
|
||||||
{
|
|
||||||
if ( isDefined( trigger ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( trigger ) )
|
||||||
trigger setinvisibletoplayer( self );
|
trigger setinvisibletoplayer( self );
|
||||||
}
|
|
||||||
self trigger_hide_all();
|
self trigger_hide_all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -512,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
|||||||
#/
|
#/
|
||||||
self enable_player_move_states();
|
self enable_player_move_states();
|
||||||
weapon = flourish_weapon_name;
|
weapon = flourish_weapon_name;
|
||||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
|
||||||
|
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||||
{
|
{
|
||||||
self takeweapon( weapon );
|
self takeweapon( weapon );
|
||||||
self.lastactiveweapon = "none";
|
self.lastactiveweapon = "none";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self takeweapon( weapon );
|
self takeweapon( weapon );
|
||||||
self giveweapon( weapon_name );
|
self giveweapon( weapon_name );
|
||||||
gun = change_melee_weapon( weapon_name, gun );
|
gun = change_melee_weapon( weapon_name, gun );
|
||||||
|
|
||||||
if ( self hasweapon( "knife_zm" ) )
|
if ( self hasweapon( "knife_zm" ) )
|
||||||
{
|
|
||||||
self takeweapon( "knife_zm" );
|
self takeweapon( "knife_zm" );
|
||||||
}
|
|
||||||
if ( self is_multiple_drinking() )
|
if ( self is_multiple_drinking() )
|
||||||
{
|
{
|
||||||
self decrement_is_drinking();
|
self decrement_is_drinking();
|
||||||
@ -537,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||||
{
|
|
||||||
self switchtoweapon( gun );
|
self switchtoweapon( gun );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
|
||||||
{
|
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||||
self switchtoweapon( primaryweapons[0] );
|
self switchtoweapon( primaryweapons[0] );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
self waittill( "weapon_change_complete" );
|
self waittill( "weapon_change_complete" );
|
||||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
|
||||||
{
|
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
|
||||||
self decrement_is_drinking();
|
self decrement_is_drinking();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
#include maps/mp/zombies/_zm_stats;
|
// T6 GSC SOURCE
|
||||||
#include common_scripts/utility;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_stats;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
if ( !isdefined( level.ballistic_knife_autorecover ) )
|
||||||
|
level.ballistic_knife_autorecover = 1;
|
||||||
|
|
||||||
|
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
||||||
{
|
{
|
||||||
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
||||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -17,9 +22,12 @@ on_spawn( watcher, player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
|
|
||||||
isfriendly = 0;
|
isfriendly = 0;
|
||||||
if ( isDefined( endpos ) )
|
|
||||||
|
if ( isdefined( endpos ) )
|
||||||
{
|
{
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||||
@ -27,47 +35,38 @@ on_spawn( watcher, player )
|
|||||||
retrievable_model.owner = player;
|
retrievable_model.owner = player;
|
||||||
retrievable_model.angles = angles;
|
retrievable_model.angles = angles;
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model.name = watcher.weapon;
|
||||||
if ( isDefined( prey ) )
|
|
||||||
|
if ( isdefined( prey ) )
|
||||||
{
|
{
|
||||||
if ( isplayer( prey ) && player.team == prey.team )
|
if ( isplayer( prey ) && player.team == prey.team )
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
else if ( isai( prey ) && player.team == prey.team )
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isai( prey ) && player.team == prey.team )
|
|
||||||
{
|
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !isfriendly )
|
if ( !isfriendly )
|
||||||
{
|
{
|
||||||
retrievable_model linkto( prey, bone );
|
retrievable_model linkto( prey, bone );
|
||||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
||||||
}
|
}
|
||||||
else
|
else if ( isfriendly )
|
||||||
{
|
|
||||||
if ( isfriendly )
|
|
||||||
{
|
{
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
normal = ( 0, 0, 1 );
|
normal = ( 0, 0, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
|
||||||
retrievable_model waittill( "stationary" );
|
retrievable_model waittill( "stationary" );
|
||||||
}
|
|
||||||
retrievable_model thread drop_knives_to_ground( player );
|
retrievable_model thread drop_knives_to_ground( player );
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
player notify( "ballistic_knife_stationary" );
|
|
||||||
}
|
|
||||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,13 +85,15 @@ on_spawn_retrieve_trigger( watcher, player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
if ( !isDefined( retrievable_model ) )
|
|
||||||
{
|
if ( !isdefined( retrievable_model ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger_pos = [];
|
trigger_pos = [];
|
||||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
|
||||||
|
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
||||||
{
|
{
|
||||||
trigger_pos[0] = prey.origin[0];
|
trigger_pos[0] = prey.origin[0];
|
||||||
trigger_pos[1] = prey.origin[1];
|
trigger_pos[1] = prey.origin[1];
|
||||||
@ -100,38 +101,43 @@ on_spawn_retrieve_trigger( watcher, player )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
|
||||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
|
||||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( is_true( level.ballistic_knife_autorecover ) )
|
||||||
|
{
|
||||||
|
trigger_pos[2] -= 50.0;
|
||||||
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
|
||||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||||
|
}
|
||||||
|
|
||||||
pickup_trigger.owner = player;
|
pickup_trigger.owner = player;
|
||||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||||
if ( isDefined( hint_string ) )
|
|
||||||
{
|
if ( isdefined( hint_string ) )
|
||||||
pickup_trigger sethintstring( hint_string );
|
pickup_trigger sethintstring( hint_string );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||||
}
|
|
||||||
pickup_trigger setteamfortrigger( player.team );
|
pickup_trigger setteamfortrigger( player.team );
|
||||||
player clientclaimtrigger( pickup_trigger );
|
player clientclaimtrigger( pickup_trigger );
|
||||||
pickup_trigger enablelinkto();
|
pickup_trigger enablelinkto();
|
||||||
if ( isDefined( prey ) )
|
|
||||||
{
|
if ( isdefined( prey ) )
|
||||||
pickup_trigger linkto( prey );
|
pickup_trigger linkto( prey );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pickup_trigger linkto( retrievable_model );
|
pickup_trigger linkto( retrievable_model );
|
||||||
}
|
|
||||||
if ( isDefined( level.knife_planted ) )
|
if ( isdefined( level.knife_planted ) )
|
||||||
{
|
|
||||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
||||||
}
|
|
||||||
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||||
}
|
}
|
||||||
@ -140,12 +146,13 @@ debug_print( endpos )
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
print3d( endpos, "pickup_trigger" );
|
print3d( endpos, "pickup_trigger" );
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
#/
|
|
||||||
}
|
}
|
||||||
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||||
@ -153,54 +160,63 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
|
|||||||
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 );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
trigger waittill( "trigger", player );
|
trigger waittill( "trigger", player );
|
||||||
while ( !isalive( player ) )
|
|
||||||
{
|
if ( !isalive( player ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( !player isonground() )
|
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
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;
|
||||||
|
hasreloaded = 1;
|
||||||
|
|
||||||
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||||
|
hasreloaded = 0;
|
||||||
|
|
||||||
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
|
||||||
{
|
{
|
||||||
|
if ( isdefined( playersoundonuse ) )
|
||||||
player playlocalsound( playersoundonuse );
|
player playlocalsound( playersoundonuse );
|
||||||
}
|
|
||||||
if ( isDefined( npcsoundonuse ) )
|
if ( isdefined( npcsoundonuse ) )
|
||||||
{
|
|
||||||
player playsound( npcsoundonuse );
|
player playsound( npcsoundonuse );
|
||||||
}
|
|
||||||
player thread [[ callback ]]( weapon, model, trigger );
|
player thread [[ callback ]]( weapon, model, trigger );
|
||||||
return;
|
break;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pick_up( weapon, model, trigger )
|
pick_up( weapon, model, trigger )
|
||||||
|
{
|
||||||
|
if ( self hasweapon( weapon ) )
|
||||||
{
|
{
|
||||||
current_weapon = self getcurrentweapon();
|
current_weapon = self getcurrentweapon();
|
||||||
|
|
||||||
if ( current_weapon != weapon )
|
if ( current_weapon != weapon )
|
||||||
{
|
{
|
||||||
clip_ammo = self getweaponammoclip( weapon );
|
clip_ammo = self getweaponammoclip( weapon );
|
||||||
|
|
||||||
if ( !clip_ammo )
|
if ( !clip_ammo )
|
||||||
{
|
|
||||||
self setweaponammoclip( weapon, 1 );
|
self setweaponammoclip( weapon, 1 );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
@ -212,27 +228,28 @@ pick_up( weapon, model, trigger )
|
|||||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||||
self setweaponammostock( weapon, new_ammo_stock );
|
self setweaponammostock( weapon, new_ammo_stock );
|
||||||
}
|
}
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
}
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
||||||
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
||||||
model destroy_ent();
|
model destroy_ent();
|
||||||
trigger destroy_ent();
|
trigger destroy_ent();
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy_ent()
|
destroy_ent()
|
||||||
{
|
{
|
||||||
if ( isDefined( self ) )
|
if ( isdefined( self ) )
|
||||||
{
|
|
||||||
if ( isDefined( self.glowing_model ) )
|
|
||||||
{
|
{
|
||||||
|
if ( isdefined( self.glowing_model ) )
|
||||||
self.glowing_model delete();
|
self.glowing_model delete();
|
||||||
}
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
}
|
}
|
||||||
@ -241,12 +258,14 @@ drop_knives_to_ground( player )
|
|||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
level waittill( "drop_objects_to_ground", origin, radius );
|
level waittill( "drop_objects_to_ground", origin, radius );
|
||||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
|
||||||
|
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||||
{
|
{
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
self thread update_retrieve_trigger( player );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -256,9 +275,11 @@ force_drop_knives_to_ground_on_death( player, prey )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
|
|
||||||
prey waittill( "death" );
|
prey waittill( "death" );
|
||||||
|
|
||||||
self unlink();
|
self unlink();
|
||||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||||
self thread update_retrieve_trigger( player );
|
self thread update_retrieve_trigger( player );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,12 +287,15 @@ update_retrieve_trigger( player )
|
|||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
player endon( "zmb_lost_knife" );
|
player endon( "zmb_lost_knife" );
|
||||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
|
||||||
|
if ( isdefined( level.custom_update_retrieve_trigger ) )
|
||||||
{
|
{
|
||||||
self [[ level.custom_update_retrieve_trigger ]]( player );
|
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self waittill( "stationary" );
|
self waittill( "stationary" );
|
||||||
|
|
||||||
trigger = self.retrievabletrigger;
|
trigger = self.retrievabletrigger;
|
||||||
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
|
@ -1,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
|
else
|
||||||
{
|
|
||||||
cost = 3000;
|
cost = 3000;
|
||||||
}
|
|
||||||
maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::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,29 +1,30 @@
|
|||||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_stats;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_audio;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_score;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/zombies/_zm_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;
|
|
||||||
while ( i < trigs.size )
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
{
|
{
|
||||||
model = getent( trigs[i].target, "targetname" );
|
model = getent( trigs[i].target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model hide();
|
model hide();
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
|
||||||
array_thread( trigs, ::buy_claymores );
|
array_thread( trigs, ::buy_claymores );
|
||||||
level thread give_claymores_after_rounds();
|
level thread give_claymores_after_rounds();
|
||||||
level.claymores_on_damage = ::satchel_damage;
|
level.claymores_on_damage = ::satchel_damage;
|
||||||
@ -38,28 +39,30 @@ 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;
|
||||||
|
|
||||||
|
if ( who has_powerup_weapon() )
|
||||||
{
|
{
|
||||||
|
wait 0.1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
while ( who has_powerup_weapon() )
|
|
||||||
{
|
|
||||||
wait 0,1;
|
|
||||||
}
|
|
||||||
if ( is_player_valid( who ) )
|
if ( is_player_valid( who ) )
|
||||||
{
|
{
|
||||||
if ( who.score >= self.zombie_cost )
|
if ( who.score >= self.zombie_cost )
|
||||||
@ -67,43 +70,41 @@ buy_claymores()
|
|||||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
play_sound_at_pos( "purchase", self.origin );
|
play_sound_at_pos( "purchase", self.origin );
|
||||||
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
|
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
|
||||||
who thread claymore_setup();
|
who thread claymore_setup();
|
||||||
who thread show_claymore_hint( "claymore_purchased" );
|
who thread show_claymore_hint( "claymore_purchased" );
|
||||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
if ( isdefined( self.stub ) )
|
||||||
self.claymores_triggered = self.stub.claymores_triggered;
|
self.claymores_triggered = self.stub.claymores_triggered;
|
||||||
}
|
|
||||||
if ( self.claymores_triggered == 0 )
|
if ( self.claymores_triggered == 0 )
|
||||||
{
|
{
|
||||||
model = getent( self.target, "targetname" );
|
model = getent( self.target, "targetname" );
|
||||||
if ( isDefined( model ) )
|
|
||||||
{
|
if ( isdefined( model ) )
|
||||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
|
||||||
|
else if ( isdefined( self.clientfieldname ) )
|
||||||
|
level setclientfield( self.clientfieldname, 1 );
|
||||||
|
|
||||||
|
self.claymores_triggered = 1;
|
||||||
|
|
||||||
|
if ( isdefined( self.stub ) )
|
||||||
|
self.stub.claymores_triggered = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||||
|
|
||||||
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
|
trigs[i] setinvisibletoplayer( who );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
who thread show_claymore_hint( "already_purchased" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( isDefined( self.clientfieldname ) )
|
who play_sound_on_ent( "no_purchase" );
|
||||||
{
|
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||||
level setclientfield( self.clientfieldname, 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self.claymores_triggered = 1;
|
|
||||||
if ( isDefined( self.stub ) )
|
|
||||||
{
|
|
||||||
self.stub.claymores_triggered = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
|
||||||
{
|
|
||||||
trigs[ i ] setinvisibletoplayer( who );
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else who thread show_claymore_hint( "already_purchased" );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,31 +114,32 @@ 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 false;
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
|
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;
|
for ( j = 0; j < players.size; j++ )
|
||||||
while ( j < players.size )
|
|
||||||
{
|
{
|
||||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
|
||||||
i = 0;
|
|
||||||
while ( i < trigs.size )
|
|
||||||
{
|
{
|
||||||
|
for ( i = 0; i < trigs.size; i++ )
|
||||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
j++;
|
|
||||||
}
|
|
||||||
wait 1;
|
wait 1;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
}
|
}
|
||||||
@ -146,60 +148,57 @@ set_claymore_visible()
|
|||||||
claymore_safe_to_plant()
|
claymore_safe_to_plant()
|
||||||
{
|
{
|
||||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||||
{
|
|
||||||
return self [[ level.claymore_safe_to_plant ]]();
|
return self [[ level.claymore_safe_to_plant ]]();
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_wait_and_detonate()
|
claymore_wait_and_detonate()
|
||||||
{
|
{
|
||||||
wait 0,1;
|
wait 0.1;
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
}
|
||||||
|
|
||||||
claymore_watch()
|
claymore_watch()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
while ( 1 )
|
self notify( "claymore_watch" );
|
||||||
|
self endon( "claymore_watch" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", claymore, weapname );
|
self waittill( "grenade_fire", claymore, weapname );
|
||||||
|
|
||||||
if ( weapname == "claymore_zm" )
|
if ( weapname == "claymore_zm" )
|
||||||
{
|
{
|
||||||
claymore.owner = self;
|
claymore.owner = self;
|
||||||
claymore.team = self.team;
|
claymore.team = self.team;
|
||||||
self notify( "zmb_enable_claymore_prompt" );
|
self notify( "zmb_enable_claymore_prompt" );
|
||||||
|
|
||||||
if ( claymore claymore_safe_to_plant() )
|
if ( claymore claymore_safe_to_plant() )
|
||||||
{
|
{
|
||||||
if ( isDefined( level.claymore_planted ) )
|
if ( isdefined( level.claymore_planted ) )
|
||||||
{
|
|
||||||
self thread [[ level.claymore_planted ]]( claymore );
|
self thread [[ level.claymore_planted ]]( claymore );
|
||||||
}
|
|
||||||
claymore thread satchel_damage();
|
|
||||||
claymore thread claymore_detonation();
|
claymore thread claymore_detonation();
|
||||||
claymore thread play_claymore_effects();
|
claymore thread play_claymore_effects();
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
|
||||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
claymore thread claymore_wait_and_detonate();
|
claymore thread claymore_wait_and_detonate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
claymore_setup()
|
claymore_setup()
|
||||||
{
|
{
|
||||||
if ( !isDefined( self.claymores ) )
|
if ( !isdefined( self.claymores ) )
|
||||||
{
|
|
||||||
self.claymores = [];
|
self.claymores = [];
|
||||||
}
|
|
||||||
self thread claymore_watch();
|
self thread claymore_watch();
|
||||||
self giveweapon( "claymore_zm" );
|
self giveweapon( "claymore_zm" );
|
||||||
self set_player_placeable_mine( "claymore_zm" );
|
self set_player_placeable_mine( "claymore_zm" );
|
||||||
@ -209,22 +208,22 @@ claymore_setup()
|
|||||||
|
|
||||||
adjust_trigger_origin( origin )
|
adjust_trigger_origin( origin )
|
||||||
{
|
{
|
||||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
|
||||||
return origin;
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
on_spawn_retrieve_trigger( watcher, player )
|
on_spawn_retrieve_trigger( watcher, player )
|
||||||
{
|
{
|
||||||
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
||||||
if ( isDefined( self.pickuptrigger ) )
|
|
||||||
{
|
if ( isdefined( self.pickuptrigger ) )
|
||||||
self.pickuptrigger sethintlowpriority( 0 );
|
self.pickuptrigger sethintlowpriority( 0 );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pickup_claymores()
|
pickup_claymores()
|
||||||
{
|
{
|
||||||
player = self.owner;
|
player = self.owner;
|
||||||
|
|
||||||
if ( !player hasweapon( "claymore_zm" ) )
|
if ( !player hasweapon( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
player thread claymore_watch();
|
player thread claymore_watch();
|
||||||
@ -238,6 +237,7 @@ pickup_claymores()
|
|||||||
{
|
{
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
{
|
||||||
self destroy_ent();
|
self destroy_ent();
|
||||||
@ -245,15 +245,16 @@ pickup_claymores()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self pick_up();
|
self pick_up();
|
||||||
clip_ammo = player getweaponammoclip( self.name );
|
clip_ammo = player getweaponammoclip( self.name );
|
||||||
clip_max_ammo = weaponclipsize( self.name );
|
clip_max_ammo = weaponclipsize( self.name );
|
||||||
|
|
||||||
if ( clip_ammo >= clip_max_ammo )
|
if ( clip_ammo >= clip_max_ammo )
|
||||||
{
|
|
||||||
player notify( "zmb_disable_claymore_prompt" );
|
player notify( "zmb_disable_claymore_prompt" );
|
||||||
}
|
|
||||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
|
||||||
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||||
}
|
}
|
||||||
|
|
||||||
pickup_claymores_trigger_listener( trigger, player )
|
pickup_claymores_trigger_listener( trigger, player )
|
||||||
@ -265,13 +266,15 @@ pickup_claymores_trigger_listener( 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" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger trigger_on();
|
trigger trigger_on();
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
}
|
}
|
||||||
@ -280,13 +283,15 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
|||||||
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" );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
player waittill( "zmb_disable_claymore_prompt" );
|
player waittill( "zmb_disable_claymore_prompt" );
|
||||||
if ( !isDefined( trigger ) )
|
|
||||||
{
|
if ( !isdefined( trigger ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
trigger unlink();
|
trigger unlink();
|
||||||
trigger trigger_off();
|
trigger trigger_off();
|
||||||
}
|
}
|
||||||
@ -294,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
|||||||
|
|
||||||
shouldaffectweaponobject( object )
|
shouldaffectweaponobject( object )
|
||||||
{
|
{
|
||||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||||
dirtopos = pos - object.origin;
|
dirtopos = pos - object.origin;
|
||||||
objectforward = anglesToForward( object.angles );
|
objectforward = anglestoforward( object.angles );
|
||||||
dist = vectordot( dirtopos, objectforward );
|
dist = vectordot( dirtopos, objectforward );
|
||||||
|
|
||||||
if ( dist < level.claymore_detectionmindist )
|
if ( dist < level.claymore_detectionmindist )
|
||||||
{
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
dirtopos = vectornormalize( dirtopos );
|
dirtopos = vectornormalize( dirtopos );
|
||||||
dot = vectordot( dirtopos, objectforward );
|
dot = vectordot( dirtopos, objectforward );
|
||||||
return dot > level.claymore_detectiondot;
|
return dot > level.claymore_detectiondot;
|
||||||
@ -316,44 +321,40 @@ claymore_detonation()
|
|||||||
damagearea setexcludeteamfortrigger( self.team );
|
damagearea setexcludeteamfortrigger( self.team );
|
||||||
damagearea enablelinkto();
|
damagearea enablelinkto();
|
||||||
damagearea linkto( self );
|
damagearea linkto( self );
|
||||||
|
|
||||||
if ( is_true( self.isonbus ) )
|
if ( is_true( self.isonbus ) )
|
||||||
{
|
|
||||||
damagearea setmovingplatformenabled( 1 );
|
damagearea setmovingplatformenabled( 1 );
|
||||||
}
|
|
||||||
self.damagearea = damagearea;
|
self.damagearea = damagearea;
|
||||||
self thread delete_claymores_on_death( self.owner, damagearea );
|
self thread delete_claymores_on_death( self.owner, damagearea );
|
||||||
self.owner.claymores[self.owner.claymores.size] = self;
|
self.owner.claymores[self.owner.claymores.size] = self;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
damagearea waittill( "trigger", ent );
|
damagearea waittill( "trigger", ent );
|
||||||
if ( isDefined( self.owner ) && ent == self.owner )
|
|
||||||
{
|
if ( isdefined( self.owner ) && ent == self.owner )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( !ent shouldaffectweaponobject( self ) )
|
if ( !ent shouldaffectweaponobject( self ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||||
{
|
{
|
||||||
self playsound( "wpn_claymore_alert" );
|
self playsound( "wpn_claymore_alert" );
|
||||||
wait 0,4;
|
wait 0.4;
|
||||||
if ( isDefined( self.owner ) )
|
|
||||||
{
|
if ( isdefined( self.owner ) )
|
||||||
self detonate( self.owner );
|
self detonate( self.owner );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
self detonate( undefined );
|
self detonate( undefined );
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -362,53 +363,53 @@ claymore_detonation()
|
|||||||
delete_claymores_on_death( player, ent )
|
delete_claymores_on_death( player, ent )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
if ( isDefined( player ) )
|
|
||||||
{
|
if ( isdefined( player ) )
|
||||||
arrayremovevalue( player.claymores, self );
|
arrayremovevalue( player.claymores, self );
|
||||||
}
|
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
if ( isDefined( ent ) )
|
|
||||||
{
|
if ( isdefined( ent ) )
|
||||||
ent delete();
|
ent delete();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
satchel_damage()
|
satchel_damage()
|
||||||
{
|
{
|
||||||
|
self endon( "death" );
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self.health = 100000;
|
self.health = 100000;
|
||||||
self.maxhealth = self.health;
|
self.maxhealth = self.health;
|
||||||
attacker = undefined;
|
attacker = undefined;
|
||||||
while ( 1 )
|
|
||||||
|
while ( true )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker );
|
self waittill( "damage", amount, attacker );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
self.health = self.maxhealth;
|
self.health = self.maxhealth;
|
||||||
while ( !isplayer( attacker ) )
|
|
||||||
{
|
if ( !isplayer( attacker ) )
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ( level.satchelexplodethisframe )
|
if ( level.satchelexplodethisframe )
|
||||||
{
|
wait( 0.1 + randomfloat( 0.4 ) );
|
||||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
else
|
||||||
}
|
wait 0.05;
|
||||||
else wait 0,05;
|
|
||||||
if ( !isDefined( self ) )
|
if ( !isdefined( self ) )
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
level.satchelexplodethisframe = 1;
|
level.satchelexplodethisframe = 1;
|
||||||
thread reset_satchel_explode_this_frame();
|
thread reset_satchel_explode_this_frame();
|
||||||
self detonate( attacker );
|
self detonate( attacker );
|
||||||
@ -416,7 +417,7 @@ satchel_damage()
|
|||||||
|
|
||||||
reset_satchel_explode_this_frame()
|
reset_satchel_explode_this_frame()
|
||||||
{
|
{
|
||||||
wait 0,05;
|
wait 0.05;
|
||||||
level.satchelexplodethisframe = 0;
|
level.satchelexplodethisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -429,14 +430,15 @@ play_claymore_effects()
|
|||||||
|
|
||||||
give_claymores_after_rounds()
|
give_claymores_after_rounds()
|
||||||
{
|
{
|
||||||
while ( 1 )
|
while ( true )
|
||||||
{
|
{
|
||||||
level waittill( "between_round_over" );
|
level waittill( "between_round_over" );
|
||||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
|
||||||
|
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
i = 0;
|
|
||||||
while ( i < players.size )
|
for ( i = 0; i < players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
|
||||||
{
|
{
|
||||||
@ -445,48 +447,20 @@ give_claymores_after_rounds()
|
|||||||
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
players[i] setactionslot( 4, "weapon", "claymore_zm" );
|
||||||
players[i] setweaponammoclip( "claymore_zm", 2 );
|
players[i] setweaponammoclip( "claymore_zm", 2 );
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
|
|
||||||
{
|
|
||||||
self.x = x;
|
|
||||||
self.y = y;
|
|
||||||
self.alignx = alignx;
|
|
||||||
self.aligny = aligny;
|
|
||||||
self.fontscale = fontscale;
|
|
||||||
self.alpha = alpha;
|
|
||||||
self.sort = 20;
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_client_hintelem()
|
|
||||||
{
|
|
||||||
self endon( "death" );
|
|
||||||
self endon( "disconnect" );
|
|
||||||
if ( !isDefined( self.hintelem ) )
|
|
||||||
{
|
|
||||||
self.hintelem = newclienthudelem( self );
|
|
||||||
}
|
|
||||||
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";
|
||||||
}
|
|
||||||
self setup_client_hintelem();
|
show_equipment_hint_text( text );
|
||||||
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,73 +1,67 @@
|
|||||||
#include maps/mp/zombies/_zm_audio;
|
// T6 GSC SOURCE
|
||||||
#include maps/mp/zombies/_zm_spawner;
|
// Decompiled by https://github.com/xensik/gsc-tool
|
||||||
#include maps/mp/zombies/_zm_weapons;
|
#include common_scripts\utility;
|
||||||
#include maps/mp/zombies/_zm_net;
|
#include maps\mp\_utility;
|
||||||
#include maps/mp/zombies/_zm_utility;
|
#include maps\mp\zombies\_zm_utility;
|
||||||
#include maps/mp/_utility;
|
#include maps\mp\zombies\_zm_net;
|
||||||
#include common_scripts/utility;
|
#include maps\mp\zombies\_zm_melee_weapon;
|
||||||
|
#include maps\mp\zombies\_zm_weapons;
|
||||||
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
|
#include maps\mp\zombies\_zm_audio;
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
|
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
|
||||||
register_melee_weapon_for_level( "tazer_knuckles_zm" );
|
register_melee_weapon_for_level( "tazer_knuckles_zm" );
|
||||||
if ( isDefined( level.tazer_cost ) )
|
|
||||||
{
|
if ( isdefined( level.tazer_cost ) )
|
||||||
cost = level.tazer_cost;
|
cost = level.tazer_cost;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
cost = 6000;
|
cost = 6000;
|
||||||
}
|
|
||||||
level.use_tazer_impact_fx = 0;
|
level.use_tazer_impact_fx = 0;
|
||||||
maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx );
|
maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
|
||||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
||||||
maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
|
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
|
||||||
level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
||||||
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
||||||
|
|
||||||
if ( level.script != "zm_transit" )
|
if ( level.script != "zm_transit" )
|
||||||
{
|
{
|
||||||
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
||||||
level.use_tazer_impact_fx = 1;
|
level.use_tazer_impact_fx = 1;
|
||||||
}
|
}
|
||||||
level.tazer_flourish_delay = 0,5;
|
|
||||||
}
|
|
||||||
|
|
||||||
spectator_respawn()
|
level.tazer_flourish_delay = 0.5;
|
||||||
{
|
|
||||||
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 ( 1 )
|
while ( isdefined( self ) && isalive( self ) )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
||||||
if ( !isDefined( self ) )
|
|
||||||
{
|
if ( !isdefined( self ) )
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
while ( type != "MOD_MELEE" )
|
if ( type != "MOD_MELEE" )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
ch = randomint( 100 );
|
ch = randomint( 100 );
|
||||||
|
|
||||||
if ( ch < 4 )
|
if ( ch < 4 )
|
||||||
{
|
|
||||||
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
|
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
|
||||||
}
|
|
||||||
if ( level.use_tazer_impact_fx )
|
if ( level.use_tazer_impact_fx )
|
||||||
{
|
{
|
||||||
tags = [];
|
tags = [];
|
||||||
@ -86,9 +80,11 @@ onplayerconnect()
|
|||||||
onplayerspawned()
|
onplayerspawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread watchtazerknucklemelee();
|
self thread watchtazerknucklemelee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,53 +92,30 @@ onplayerspawned()
|
|||||||
watchtazerknucklemelee()
|
watchtazerknucklemelee()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
self waittill( "weapon_melee", weapon );
|
self waittill( "weapon_melee", weapon );
|
||||||
|
|
||||||
if ( weapon == "tazer_knuckles_zm" )
|
if ( weapon == "tazer_knuckles_zm" )
|
||||||
{
|
|
||||||
self tazerknuckle_melee();
|
self tazerknuckle_melee();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tazerknuckle_melee()
|
tazerknuckle_melee()
|
||||||
{
|
{
|
||||||
}
|
|
||||||
|
|
||||||
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" );
|
self endon( "weapon_change" );
|
||||||
wait level.tazer_flourish_delay;
|
wait( level.tazer_flourish_delay );
|
||||||
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
|
self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
||||||
|
@ -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