mirror of
https://github.com/JezuzLizard/Public-BO2-Mods.git
synced 2025-06-08 02:58:24 -05:00
added more files and fixed more files
This commit is contained in:
parent
81f75225f6
commit
8021494436
File diff suppressed because it is too large
Load Diff
@ -21,11 +21,12 @@
|
|||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
//level.player_out_of_playable_area_monitor = 1;
|
|
||||||
//level.player_too_many_weapons_monitor = 1;
|
level.player_out_of_playable_area_monitor = 1;
|
||||||
//level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor;
|
level.player_too_many_weapons_monitor = 1;
|
||||||
//level.player_too_many_players_check = 1;
|
level.player_too_many_weapons_monitor_func = ::player_too_many_weapons_monitor;
|
||||||
//level.player_too_many_players_check_func = ::player_too_many_players_check;
|
level.player_too_many_players_check = 1;
|
||||||
|
level.player_too_many_players_check_func = ::player_too_many_players_check;
|
||||||
level._use_choke_weapon_hints = 1;
|
level._use_choke_weapon_hints = 1;
|
||||||
level._use_choke_blockers = 1;
|
level._use_choke_blockers = 1;
|
||||||
level.passed_introscreen = 0;
|
level.passed_introscreen = 0;
|
||||||
@ -120,11 +121,8 @@ init()
|
|||||||
}
|
}
|
||||||
register_offhand_weapons_for_level_defaults();
|
register_offhand_weapons_for_level_defaults();
|
||||||
level thread drive_client_connected_notifies();
|
level thread drive_client_connected_notifies();
|
||||||
/*
|
|
||||||
/#
|
//not the cause of the minidump
|
||||||
maps/mp/zombies/_zm_devgui::init();
|
|
||||||
#/
|
|
||||||
*/
|
|
||||||
maps/mp/zombies/_zm_zonemgr::init();
|
maps/mp/zombies/_zm_zonemgr::init();
|
||||||
maps/mp/zombies/_zm_unitrigger::init();
|
maps/mp/zombies/_zm_unitrigger::init();
|
||||||
maps/mp/zombies/_zm_audio::init();
|
maps/mp/zombies/_zm_audio::init();
|
||||||
@ -136,15 +134,24 @@ init()
|
|||||||
maps/mp/zombies/_zm_laststand::init();
|
maps/mp/zombies/_zm_laststand::init();
|
||||||
maps/mp/zombies/_zm_magicbox::init();
|
maps/mp/zombies/_zm_magicbox::init();
|
||||||
maps/mp/zombies/_zm_perks::init();
|
maps/mp/zombies/_zm_perks::init();
|
||||||
maps/mp/zombies/_zm_playerhealth::init();
|
|
||||||
|
//causes the server to minidump
|
||||||
|
//maps/mp/zombies/_zm_playerhealth::init();
|
||||||
|
|
||||||
|
//ok
|
||||||
maps/mp/zombies/_zm_power::init();
|
maps/mp/zombies/_zm_power::init();
|
||||||
maps/mp/zombies/_zm_powerups::init();
|
maps/mp/zombies/_zm_powerups::init();
|
||||||
maps/mp/zombies/_zm_score::init();
|
maps/mp/zombies/_zm_score::init();
|
||||||
maps/mp/zombies/_zm_spawner::init();
|
maps/mp/zombies/_zm_spawner::init();
|
||||||
maps/mp/zombies/_zm_gump::init();
|
maps/mp/zombies/_zm_gump::init();
|
||||||
maps/mp/zombies/_zm_timer::init();
|
|
||||||
|
//causes the server to minidump
|
||||||
|
//maps/mp/zombies/_zm_timer::init();
|
||||||
|
|
||||||
|
//ok
|
||||||
maps/mp/zombies/_zm_traps::init();
|
maps/mp/zombies/_zm_traps::init();
|
||||||
maps/mp/zombies/_zm_weapons::init();
|
maps/mp/zombies/_zm_weapons::init();
|
||||||
|
|
||||||
init_function_overrides();
|
init_function_overrides();
|
||||||
level thread last_stand_pistol_rank_init();
|
level thread last_stand_pistol_rank_init();
|
||||||
level thread maps/mp/zombies/_zm_tombstone::init();
|
level thread maps/mp/zombies/_zm_tombstone::init();
|
||||||
@ -177,6 +184,7 @@ init()
|
|||||||
level thread onallplayersready();
|
level thread onallplayersready();
|
||||||
level thread startunitriggers();
|
level thread startunitriggers();
|
||||||
level thread maps/mp/gametypes_zm/_zm_gametype::post_init_gametype();
|
level thread maps/mp/gametypes_zm/_zm_gametype::post_init_gametype();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
post_main()
|
post_main()
|
||||||
@ -1450,7 +1458,7 @@ onplayerspawned()
|
|||||||
self.zmbdialogactive = 0;
|
self.zmbdialogactive = 0;
|
||||||
self.zmbdialoggroups = [];
|
self.zmbdialoggroups = [];
|
||||||
self.zmbdialoggroup = "";
|
self.zmbdialoggroup = "";
|
||||||
/*
|
|
||||||
if ( isDefined( level.player_out_of_playable_area_monitor ) && level.player_out_of_playable_area_monitor )
|
if ( isDefined( level.player_out_of_playable_area_monitor ) && level.player_out_of_playable_area_monitor )
|
||||||
{
|
{
|
||||||
self thread player_out_of_playable_area_monitor();
|
self thread player_out_of_playable_area_monitor();
|
||||||
@ -1463,7 +1471,6 @@ onplayerspawned()
|
|||||||
{
|
{
|
||||||
level thread [[ level.player_too_many_players_check_func ]]();
|
level thread [[ level.player_too_many_players_check_func ]]();
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
self.disabled_perks = [];
|
self.disabled_perks = [];
|
||||||
if ( isDefined( self.player_initialized ) )
|
if ( isDefined( self.player_initialized ) )
|
||||||
{
|
{
|
||||||
@ -1586,7 +1593,7 @@ in_enabled_playable_area()
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
get_player_out_of_playable_area_monitor_wait_time()
|
get_player_out_of_playable_area_monitor_wait_time()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -1599,8 +1606,7 @@ get_player_out_of_playable_area_monitor_wait_time()
|
|||||||
|
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/*
|
|
||||||
player_out_of_playable_area_monitor()
|
player_out_of_playable_area_monitor()
|
||||||
{
|
{
|
||||||
self notify( "stop_player_out_of_playable_area_monitor" );
|
self notify( "stop_player_out_of_playable_area_monitor" );
|
||||||
@ -1638,7 +1644,7 @@ player_out_of_playable_area_monitor()
|
|||||||
wait get_player_out_of_playable_area_monitor_wait_time();
|
wait get_player_out_of_playable_area_monitor_wait_time();
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" );
|
self maps/mp/zombies/_zm_stats::increment_map_cheat_stat( "cheat_out_of_playable" );
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 );
|
self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_out_of_playable", 0 );
|
||||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 );
|
self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 );
|
||||||
@ -1743,7 +1749,7 @@ player_too_many_weapons_monitor()
|
|||||||
wait get_player_too_many_weapons_monitor_wait_time();
|
wait get_player_too_many_weapons_monitor_wait_time();
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
weapon_limit = get_player_weapon_limit( self );
|
weapon_limit = get_player_weapon_limit( self );
|
||||||
primaryweapons = self getweaponslistprimaries();
|
primaryweapons = self getweaponslistprimaries();
|
||||||
if ( primaryweapons.size > weapon_limit )
|
if ( primaryweapons.size > weapon_limit )
|
||||||
@ -1775,7 +1781,7 @@ player_too_many_weapons_monitor()
|
|||||||
wait get_player_too_many_weapons_monitor_wait_time();
|
wait get_player_too_many_weapons_monitor_wait_time();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
player_monitor_travel_dist()
|
player_monitor_travel_dist()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
@ -6067,7 +6073,7 @@ update_quick_revive( solo_mode )
|
|||||||
level.quick_revive_machine thread maps/mp/zombies/_zm_perks::reenable_quickrevive( clip, solo_mode );
|
level.quick_revive_machine thread maps/mp/zombies/_zm_perks::reenable_quickrevive( clip, solo_mode );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
player_too_many_players_check()
|
player_too_many_players_check()
|
||||||
{
|
{
|
||||||
max_players = 4;
|
max_players = 4;
|
||||||
@ -6081,6 +6087,7 @@ player_too_many_players_check()
|
|||||||
level notify( "end_game" );
|
level notify( "end_game" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,12 +26,9 @@ init()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( getDvarIntDefault( "_zm_perks_return_early", "0" ) == "1" )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
initialize_custom_perk_arrays();
|
initialize_custom_perk_arrays();
|
||||||
perk_machine_spawn_init();
|
perk_machine_spawn_init();
|
||||||
|
|
||||||
vending_weapon_upgrade_trigger = [];
|
vending_weapon_upgrade_trigger = [];
|
||||||
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -75,6 +72,7 @@ init()
|
|||||||
set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 );
|
set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 );
|
||||||
array_thread( vending_triggers, ::vending_trigger_think );
|
array_thread( vending_triggers, ::vending_trigger_think );
|
||||||
array_thread( vending_triggers, ::electric_perks_dialog );
|
array_thread( vending_triggers, ::electric_perks_dialog );
|
||||||
|
|
||||||
if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk )
|
if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk )
|
||||||
{
|
{
|
||||||
level thread turn_doubletap_on();
|
level thread turn_doubletap_on();
|
||||||
@ -137,6 +135,7 @@ init()
|
|||||||
[[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation );
|
[[ level.quantum_bomb_register_result_func ]]( "give_nearest_perk", ::quantum_bomb_give_nearest_perk_result, 10, ::quantum_bomb_give_nearest_perk_validation );
|
||||||
}
|
}
|
||||||
level thread perk_hostmigration();
|
level thread perk_hostmigration();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default_vending_precaching()
|
default_vending_precaching()
|
||||||
@ -3091,13 +3090,13 @@ perk_machine_spawn_init()
|
|||||||
{
|
{
|
||||||
match_string = "";
|
match_string = "";
|
||||||
location = level.scr_zm_map_start_location;
|
location = level.scr_zm_map_start_location;
|
||||||
if ( location != "default" && location == "" && isDefined( level.default_start_location ) )
|
if(location == "default" || location == "" && isdefined(level.default_start_location))
|
||||||
{
|
{
|
||||||
location = level.default_start_location;
|
location = level.default_start_location;
|
||||||
}
|
}
|
||||||
match_string = ( level.scr_zm_ui_gametype + "_perks_" ) + location;
|
match_string = level.scr_zm_ui_gametype + "_perks_" + location;
|
||||||
pos = [];
|
pos = [];
|
||||||
if ( isDefined( level.override_perk_targetname ) )
|
if(isdefined(level.override_perk_targetname))
|
||||||
{
|
{
|
||||||
structs = getstructarray(level.override_perk_targetname, "targetname");
|
structs = getstructarray(level.override_perk_targetname, "targetname");
|
||||||
}
|
}
|
||||||
@ -3128,25 +3127,24 @@ perk_machine_spawn_init()
|
|||||||
else pos[ pos.size ] = struct;
|
else pos[ pos.size ] = struct;
|
||||||
_k3578 = getNextArrayKey( _a3578, _k3578 );
|
_k3578 = getNextArrayKey( _a3578, _k3578 );
|
||||||
}
|
}
|
||||||
if ( !isDefined( pos ) || pos.size == 0 )
|
if(!isdefined(pos) || pos.size == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
precachemodel("zm_collision_perks1");
|
precachemodel("zm_collision_perks1");
|
||||||
i = 0;
|
for(i = 0; i < pos.size; i++)
|
||||||
while ( i < pos.size )
|
|
||||||
{
|
{
|
||||||
perk = pos[i].script_noteworthy;
|
perk = pos[i].script_noteworthy;
|
||||||
if ( isDefined( perk ) && isDefined( pos[ i ].model ) )
|
if(isdefined(perk) && isdefined(pos[i].model))
|
||||||
{
|
{
|
||||||
use_trigger = spawn( "trigger_radius_use", pos[ i ].origin + vectorScale( ( 0, -1, 0 ), 30 ), 0, 40, 70 );
|
use_trigger = spawn("trigger_radius_use", pos[i].origin + VectorScale( 0, 0, 1, 30), 0, 40, 70);
|
||||||
use_trigger.targetname = "zombie_vending";
|
use_trigger.targetname = "zombie_vending";
|
||||||
use_trigger.script_noteworthy = perk;
|
use_trigger.script_noteworthy = perk;
|
||||||
use_trigger triggerignoreteam();
|
use_trigger triggerignoreteam();
|
||||||
perk_machine = spawn("script_model", pos[i].origin);
|
perk_machine = spawn("script_model", pos[i].origin);
|
||||||
perk_machine.angles = pos[i].angles;
|
perk_machine.angles = pos[i].angles;
|
||||||
perk_machine setmodel(pos[i].model);
|
perk_machine setmodel(pos[i].model);
|
||||||
if ( isDefined( level._no_vending_machine_bump_trigs ) && level._no_vending_machine_bump_trigs )
|
if(isdefined(level._no_vending_machine_bump_trigs) && level._no_vending_machine_bump_trigs)
|
||||||
{
|
{
|
||||||
bump_trigger = undefined;
|
bump_trigger = undefined;
|
||||||
}
|
}
|
||||||
@ -3169,15 +3167,15 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.clip = collision;
|
use_trigger.clip = collision;
|
||||||
use_trigger.machine = perk_machine;
|
use_trigger.machine = perk_machine;
|
||||||
use_trigger.bump = bump_trigger;
|
use_trigger.bump = bump_trigger;
|
||||||
if ( isDefined( pos[ i ].blocker_model ) )
|
if(isdefined(pos[i].blocker_model))
|
||||||
{
|
{
|
||||||
use_trigger.blocker_model = pos[i].blocker_model;
|
use_trigger.blocker_model = pos[i].blocker_model;
|
||||||
}
|
}
|
||||||
if ( isDefined( pos[ i ].script_int ) )
|
if(isdefined(pos[i].script_int))
|
||||||
{
|
{
|
||||||
perk_machine.script_int = pos[i].script_int;
|
perk_machine.script_int = pos[i].script_int;
|
||||||
}
|
}
|
||||||
if ( isDefined( pos[ i ].turn_on_notify ) )
|
if(isdefined(pos[i].turn_on_notify))
|
||||||
{
|
{
|
||||||
perk_machine.turn_on_notify = pos[i].turn_on_notify;
|
perk_machine.turn_on_notify = pos[i].turn_on_notify;
|
||||||
}
|
}
|
||||||
@ -3191,7 +3189,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_revive";
|
use_trigger.target = "vending_revive";
|
||||||
perk_machine.script_string = "revive_perk";
|
perk_machine.script_string = "revive_perk";
|
||||||
perk_machine.targetname = "vending_revive";
|
perk_machine.targetname = "vending_revive";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "revive_perk";
|
bump_trigger.script_string = "revive_perk";
|
||||||
}
|
}
|
||||||
@ -3204,7 +3202,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_sleight";
|
use_trigger.target = "vending_sleight";
|
||||||
perk_machine.script_string = "speedcola_perk";
|
perk_machine.script_string = "speedcola_perk";
|
||||||
perk_machine.targetname = "vending_sleight";
|
perk_machine.targetname = "vending_sleight";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "speedcola_perk";
|
bump_trigger.script_string = "speedcola_perk";
|
||||||
}
|
}
|
||||||
@ -3217,7 +3215,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_marathon";
|
use_trigger.target = "vending_marathon";
|
||||||
perk_machine.script_string = "marathon_perk";
|
perk_machine.script_string = "marathon_perk";
|
||||||
perk_machine.targetname = "vending_marathon";
|
perk_machine.targetname = "vending_marathon";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "marathon_perk";
|
bump_trigger.script_string = "marathon_perk";
|
||||||
}
|
}
|
||||||
@ -3231,7 +3229,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_jugg";
|
use_trigger.target = "vending_jugg";
|
||||||
perk_machine.script_string = "jugg_perk";
|
perk_machine.script_string = "jugg_perk";
|
||||||
perk_machine.targetname = "vending_jugg";
|
perk_machine.targetname = "vending_jugg";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "jugg_perk";
|
bump_trigger.script_string = "jugg_perk";
|
||||||
}
|
}
|
||||||
@ -3244,7 +3242,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_tombstone";
|
use_trigger.target = "vending_tombstone";
|
||||||
perk_machine.script_string = "tombstone_perk";
|
perk_machine.script_string = "tombstone_perk";
|
||||||
perk_machine.targetname = "vending_tombstone";
|
perk_machine.targetname = "vending_tombstone";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "tombstone_perk";
|
bump_trigger.script_string = "tombstone_perk";
|
||||||
}
|
}
|
||||||
@ -3257,7 +3255,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_doubletap";
|
use_trigger.target = "vending_doubletap";
|
||||||
perk_machine.script_string = "tap_perk";
|
perk_machine.script_string = "tap_perk";
|
||||||
perk_machine.targetname = "vending_doubletap";
|
perk_machine.targetname = "vending_doubletap";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "tap_perk";
|
bump_trigger.script_string = "tap_perk";
|
||||||
}
|
}
|
||||||
@ -3270,7 +3268,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_chugabud";
|
use_trigger.target = "vending_chugabud";
|
||||||
perk_machine.script_string = "tap_perk";
|
perk_machine.script_string = "tap_perk";
|
||||||
perk_machine.targetname = "vending_chugabud";
|
perk_machine.targetname = "vending_chugabud";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "tap_perk";
|
bump_trigger.script_string = "tap_perk";
|
||||||
}
|
}
|
||||||
@ -3283,7 +3281,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_additionalprimaryweapon";
|
use_trigger.target = "vending_additionalprimaryweapon";
|
||||||
perk_machine.script_string = "tap_perk";
|
perk_machine.script_string = "tap_perk";
|
||||||
perk_machine.targetname = "vending_additionalprimaryweapon";
|
perk_machine.targetname = "vending_additionalprimaryweapon";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "tap_perk";
|
bump_trigger.script_string = "tap_perk";
|
||||||
}
|
}
|
||||||
@ -3295,7 +3293,7 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.longjinglewait = 1;
|
use_trigger.longjinglewait = 1;
|
||||||
perk_machine.targetname = "vending_packapunch";
|
perk_machine.targetname = "vending_packapunch";
|
||||||
flag_pos = getstruct(pos[i].target, "targetname");
|
flag_pos = getstruct(pos[i].target, "targetname");
|
||||||
if ( isDefined( flag_pos ) )
|
if(isdefined(flag_pos))
|
||||||
{
|
{
|
||||||
perk_machine_flag = spawn("script_model", flag_pos.origin);
|
perk_machine_flag = spawn("script_model", flag_pos.origin);
|
||||||
perk_machine_flag.angles = flag_pos.angles;
|
perk_machine_flag.angles = flag_pos.angles;
|
||||||
@ -3303,7 +3301,7 @@ perk_machine_spawn_init()
|
|||||||
perk_machine_flag.targetname = "pack_flag";
|
perk_machine_flag.targetname = "pack_flag";
|
||||||
perk_machine.target = "pack_flag";
|
perk_machine.target = "pack_flag";
|
||||||
}
|
}
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "perks_rattle";
|
bump_trigger.script_string = "perks_rattle";
|
||||||
}
|
}
|
||||||
@ -3316,30 +3314,29 @@ perk_machine_spawn_init()
|
|||||||
use_trigger.target = "vending_deadshot";
|
use_trigger.target = "vending_deadshot";
|
||||||
perk_machine.script_string = "deadshot_vending";
|
perk_machine.script_string = "deadshot_vending";
|
||||||
perk_machine.targetname = "vending_deadshot_model";
|
perk_machine.targetname = "vending_deadshot_model";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "deadshot_vending";
|
bump_trigger.script_string = "deadshot_vending";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
case default:
|
||||||
use_trigger.script_sound = "mus_perks_speed_jingle";
|
use_trigger.script_sound = "mus_perks_speed_jingle";
|
||||||
use_trigger.script_string = "speedcola_perk";
|
use_trigger.script_string = "speedcola_perk";
|
||||||
use_trigger.script_label = "mus_perks_speed_sting";
|
use_trigger.script_label = "mus_perks_speed_sting";
|
||||||
use_trigger.target = "vending_sleight";
|
use_trigger.target = "vending_sleight";
|
||||||
perk_machine.script_string = "speedcola_perk";
|
perk_machine.script_string = "speedcola_perk";
|
||||||
perk_machine.targetname = "vending_sleight";
|
perk_machine.targetname = "vending_sleight";
|
||||||
if ( isDefined( bump_trigger ) )
|
if(isdefined(bump_trigger))
|
||||||
{
|
{
|
||||||
bump_trigger.script_string = "speedcola_perk";
|
bump_trigger.script_string = "speedcola_perk";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].perk_machine_set_kvps ) )
|
if(isdefined(level._custom_perks[perk]) && isdefined(level._custom_perks[perk].perk_machine_set_kvps))
|
||||||
{
|
{
|
||||||
[[level._custom_perks[perk].perk_machine_set_kvps]](use_trigger, perk_machine, bump_trigger, collision);
|
[[level._custom_perks[perk].perk_machine_set_kvps]](use_trigger, perk_machine, bump_trigger, collision);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4163,3 +4160,4 @@ _register_undefined_perk( str_perk )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,7 @@ patch_zm/maps/mp/zombies/_zm_hackables_packapunch.gsc
|
|||||||
patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc
|
patch_zm/maps/mp/zombies/_zm_hackables_perks.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc
|
patch_zm/maps/mp/zombies/_zm_hackables_powerups.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc
|
patch_zm/maps/mp/zombies/_zm_hackables_wallbuys.gsc
|
||||||
|
patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc
|
patch_zm/maps/mp/zombies/_zm_pers_upgrades.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
|
patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc
|
patch_zm/maps/mp/zombies/_zm_pers_upgrades_system.gsc
|
||||||
@ -31,22 +32,32 @@ zm_transit_patch/maps/mp/zm_transit_utility.gsc
|
|||||||
zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc
|
zm_transit_patch/maps/mp/gametypes_zm/zgrief.gsc
|
||||||
```
|
```
|
||||||
### The following scripts compile and run successfully with major errors:
|
### The following scripts compile and run successfully with major errors:
|
||||||
|
```
|
||||||
|
patch_zm/maps/mp/zombies/_zm_magicbox.gsc
|
||||||
|
patch_zm/maps/mp/zombies/_zm_perks.gsc
|
||||||
|
patch_zm/maps/mp/zombies/_zm_powerups.gsc
|
||||||
|
patch_zm/maps/mp/zombies/_zm_weapons.gsc
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc
|
zm_transit_patch/maps/mp/zombies/_zm_weap_jetgun.gsc
|
||||||
```
|
```
|
||||||
|
```
|
||||||
|
zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc
|
||||||
|
```
|
||||||
### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch
|
### The following scripts compile and run serverside but clients cannot join due to exe_client_field_mismatch
|
||||||
```
|
```
|
||||||
patch_zm/maps/mp/zombies/_zm_weapons.gsc
|
patch_zm/maps/mp/zombies/_zm.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_gump.gsc
|
patch_zm/maps/mp/zombies/_zm_gump.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_equipment.gsc
|
patch_zm/maps/mp/zombies/_zm_equipment.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm_perks.gsc
|
|
||||||
```
|
```
|
||||||
### The following scripts compile but cause a minidump or other severe error:
|
### The following scripts compile but cause a minidump or other severe error:
|
||||||
```
|
```
|
||||||
patch_zm/maps/mp/zombies/_load.gsc
|
patch_zm/maps/mp/zombies/_load.gsc
|
||||||
patch_zm/maps/mp/zombies/_zm.gsc
|
|
||||||
patch_zm/maps/mp/zombies/_zm_powerups.gsc
|
|
||||||
patch_zm/maps/mp/zombies/_zm_magicbox.gsc
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### notes:
|
### notes:
|
||||||
|
@ -0,0 +1,891 @@
|
|||||||
|
#include maps/mp/zombies/_zm_audio;
|
||||||
|
#include maps/mp/zombies/_zm_powerups;
|
||||||
|
#include maps/mp/zombies/_zm_ai_basic;
|
||||||
|
#include maps/mp/animscripts/zm_shared;
|
||||||
|
#include maps/mp/animscripts/zm_utility;
|
||||||
|
#include maps/mp/zombies/_zm;
|
||||||
|
#include maps/mp/zombies/_zm_spawner;
|
||||||
|
#include maps/mp/gametypes_zm/_weaponobjects;
|
||||||
|
#include maps/mp/zombies/_zm_equipment;
|
||||||
|
#include maps/mp/zombies/_zm_weapons;
|
||||||
|
#include maps/mp/zombies/_zm_utility;
|
||||||
|
#include maps/mp/_utility;
|
||||||
|
#include common_scripts/utility;
|
||||||
|
|
||||||
|
set_zombie_var_once( var, value, is_float, column, is_team_based )
|
||||||
|
{
|
||||||
|
if ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ var ] ) )
|
||||||
|
{
|
||||||
|
set_zombie_var( var, value, is_float, column, is_team_based );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "slipgun_zm" ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
precachemodel( "t5_weapon_crossbow_bolt" );
|
||||||
|
precacheitem( "slip_bolt_zm" );
|
||||||
|
precacheitem( "slip_bolt_upgraded_zm" );
|
||||||
|
if ( is_true( level.slipgun_as_equipment ) )
|
||||||
|
{
|
||||||
|
maps/mp/zombies/_zm_equipment::register_equipment( "slipgun_zm", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SLIPGUN_HOWTO", "jetgun_zm_icon", "slipgun", ::slipgun_activation_watcher_thread, ::transferslipgun, ::dropslipgun, ::pickupslipgun );
|
||||||
|
maps/mp/zombies/_zm_equipment::enemies_ignore_equipment( "slipgun_zm" );
|
||||||
|
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "slipgun", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING" );
|
||||||
|
}
|
||||||
|
set_zombie_var_once( "slipgun_reslip_max_spots", 8 );
|
||||||
|
set_zombie_var_once( "slipgun_reslip_rate", 6 );
|
||||||
|
set_zombie_var_once( "slipgun_max_kill_chain_depth", 16 );
|
||||||
|
set_zombie_var_once( "slipgun_max_kill_round", 100 );
|
||||||
|
set_zombie_var_once( "slipgun_chain_radius", 120 );
|
||||||
|
set_zombie_var_once( "slipgun_chain_wait_min", 0.75, 1 );
|
||||||
|
set_zombie_var_once( "slipgun_chain_wait_max", 1.5, 1 );
|
||||||
|
level.slippery_spot_count = 0;
|
||||||
|
level.sliquifier_distance_checks = 0;
|
||||||
|
maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::slipgun_zombie_damage_response );
|
||||||
|
maps/mp/zombies/_zm_spawner::register_zombie_death_animscript_callback( ::slipgun_zombie_death_response );
|
||||||
|
level._effect[ "slipgun_explode" ] = loadfx( "weapon/liquifier/fx_liquifier_goo_explo" );
|
||||||
|
level._effect[ "slipgun_splatter" ] = loadfx( "maps/zombie/fx_zmb_goo_splat" );
|
||||||
|
level._effect[ "slipgun_simmer" ] = loadfx( "weapon/liquifier/fx_liquifier_goo_sizzle" );
|
||||||
|
level._effect[ "slipgun_viewmodel_eject" ] = loadfx( "weapon/liquifier/fx_liquifier_clip_eject" );
|
||||||
|
level._effect[ "slipgun_viewmodel_reload" ] = loadfx( "weapon/liquifier/fx_liquifier_reload_steam" );
|
||||||
|
onplayerconnect_callback( ::slipgun_player_connect );
|
||||||
|
thread wait_init_damage();
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_init_damage()
|
||||||
|
{
|
||||||
|
while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) )
|
||||||
|
{
|
||||||
|
wait 1;
|
||||||
|
}
|
||||||
|
wait 1;
|
||||||
|
level.slipgun_damage = maps/mp/zombies/_zm::ai_zombie_health( level.zombie_vars[ "slipgun_max_kill_round" ] );
|
||||||
|
level.slipgun_damage_mod = "MOD_PROJECTILE_SPLASH";
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_player_connect()
|
||||||
|
{
|
||||||
|
self thread watch_for_slip_bolt();
|
||||||
|
}
|
||||||
|
|
||||||
|
watch_for_slip_bolt()
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "disconnect" );
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
self waittill( "grenade_fire", grenade, weaponname, parent );
|
||||||
|
self.num_sliquifier_kills = 0;
|
||||||
|
switch( weaponname )
|
||||||
|
{
|
||||||
|
case "slip_bolt_zm":
|
||||||
|
grenade thread slip_bolt( self, 0 );
|
||||||
|
break;
|
||||||
|
continue;
|
||||||
|
case "slip_bolt_upgraded_zm":
|
||||||
|
grenade thread slip_bolt( self, 1 );
|
||||||
|
break;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slip_bolt( player, upgraded )
|
||||||
|
{
|
||||||
|
startpos = player getweaponmuzzlepoint();
|
||||||
|
self waittill( "explode", position );
|
||||||
|
duration = 24;
|
||||||
|
if ( upgraded )
|
||||||
|
{
|
||||||
|
duration = 36;
|
||||||
|
}
|
||||||
|
thread add_slippery_spot( position, duration, startpos );
|
||||||
|
}
|
||||||
|
|
||||||
|
dropslipgun()
|
||||||
|
{
|
||||||
|
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_slipgun_world", "slipgun_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles );
|
||||||
|
if ( isDefined( item ) )
|
||||||
|
{
|
||||||
|
item.original_owner = self;
|
||||||
|
item.owner = undefined;
|
||||||
|
item.name = "slipgun_zm";
|
||||||
|
item.requires_pickup = 1;
|
||||||
|
item.clipammo = self getweaponammoclip( item.name );
|
||||||
|
item.stockammo = self getweaponammostock( item.name );
|
||||||
|
}
|
||||||
|
self takeweapon( "slipgun_zm" );
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
pickupslipgun( item )
|
||||||
|
{
|
||||||
|
item.owner = self;
|
||||||
|
self giveweapon( item.name );
|
||||||
|
if ( isDefined( item.clipammo ) && isDefined( item.stockammo ) )
|
||||||
|
{
|
||||||
|
self setweaponammoclip( item.name, item.clipammo );
|
||||||
|
self setweaponammostock( item.name, item.stockammo );
|
||||||
|
item.clipammo = undefined;
|
||||||
|
item.stockammo = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
transferslipgun( fromplayer, toplayer )
|
||||||
|
{
|
||||||
|
toplayer notify( "slipgun_zm_taken" );
|
||||||
|
fromplayer notify( "slipgun_zm_taken" );
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_activation_watcher_thread()
|
||||||
|
{
|
||||||
|
self endon( "zombified" );
|
||||||
|
self endon( "disconnect" );
|
||||||
|
self endon( "slipgun_zm_taken" );
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
self waittill_either( "slipgun_zm_activate", "slipgun_zm_deactivate" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_debug_circle( origin, radius, seconds, onslope, parent, start )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
if ( getDvarInt( #"6136A815" ) )
|
||||||
|
{
|
||||||
|
frames = int( 20 * seconds );
|
||||||
|
if ( isDefined( parent ) )
|
||||||
|
{
|
||||||
|
time = seconds;
|
||||||
|
frames = 1;
|
||||||
|
while ( time > 0 )
|
||||||
|
{
|
||||||
|
morigin = origin + ( parent.origin - start );
|
||||||
|
if ( isDefined( onslope ) && onslope )
|
||||||
|
{
|
||||||
|
circle( morigin, radius, ( 0, 0, 1 ), 0, 1, frames );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
circle( morigin, radius, ( 0, 0, 1 ), 0, 1, frames );
|
||||||
|
}
|
||||||
|
time -= 0,05;
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( isDefined( onslope ) && onslope )
|
||||||
|
{
|
||||||
|
circle( origin, radius, ( 0, 0, 1 ), 0, 1, frames );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
circle( origin, radius, ( 0, 0, 1 ), 0, 1, frames );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_debug_line( start, end, color, seconds )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
if ( getDvarInt( #"6136A815" ) )
|
||||||
|
{
|
||||||
|
frames = int( 20 * seconds );
|
||||||
|
line( start, end, color, 1, 0, frames );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
canzombieongoofall()
|
||||||
|
{
|
||||||
|
if ( is_true( self.is_inert ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( is_true( self.is_traversing ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( is_true( self.barricade_enter ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( randomint( 100 ) < 20 )
|
||||||
|
{
|
||||||
|
trace = groundtrace( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.origin + vectorScale( ( 0, 0, 1 ), 300 ), 0, undefined );
|
||||||
|
origin = trace[ "position" ];
|
||||||
|
groundnormal = trace[ "normal" ];
|
||||||
|
if ( distancesquared( self.origin, origin ) > 256 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
dot = vectordot( ( 0, 0, 1 ), groundnormal );
|
||||||
|
if ( dot < 0.9 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
trace_origin = self.origin + vectorScale( anglesToForward( self.angles ), 200 );
|
||||||
|
trace = groundtrace( trace_origin + vectorScale( ( 0, 0, 1 ), 5 ), self.origin + vectorScale( ( 0, 0, 1 ), 300 ), 0, undefined );
|
||||||
|
origin = trace[ "position" ];
|
||||||
|
groundnormal = trace[ "normal" ];
|
||||||
|
if ( distancesquared( trace_origin, origin ) > 256 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
dot = vectordot( ( 0, 0, 1 ), groundnormal );
|
||||||
|
if ( dot < 0.9 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
zombiemoveongoo()
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "removed" );
|
||||||
|
level endon( "intermission" );
|
||||||
|
if ( is_true( self.sliding_on_goo ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self notify( "endOnGoo" );
|
||||||
|
self endon( "endOnGoo" );
|
||||||
|
self notify( "stop_zombie_goto_entrance" );
|
||||||
|
self notify( "stop_find_flesh" );
|
||||||
|
self notify( "zombie_acquire_enemy" );
|
||||||
|
self.goo_last_vel = self getvelocity();
|
||||||
|
self.goo_last_pos = self.origin;
|
||||||
|
slide_direction = anglesToForward( self.angles );
|
||||||
|
self animmode( "slide" );
|
||||||
|
self orientmode( "face enemy" );
|
||||||
|
self.forcemovementscriptstate = 1;
|
||||||
|
self.ai_state = "zombieMoveOnGoo";
|
||||||
|
self maps/mp/zombies/_zm_spawner::zombie_history( "zombieMoveOnGoo " + getTime() );
|
||||||
|
self.sliding_on_goo = 0;
|
||||||
|
self thread zombiemoveongoo_on_killanimscript();
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
if ( isDefined( self.is_on_goo ) )
|
||||||
|
{
|
||||||
|
self_on_goo = self.is_on_goo;
|
||||||
|
}
|
||||||
|
velocity = self getvelocity();
|
||||||
|
velocitylength = length( self getvelocity() );
|
||||||
|
if ( isDefined( self.has_legs ) )
|
||||||
|
{
|
||||||
|
iscrawler = !self.has_legs;
|
||||||
|
}
|
||||||
|
isleaper = self is_leaper();
|
||||||
|
while ( is_true( self.is_leaping ) )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
|
if ( !self_on_goo )
|
||||||
|
{
|
||||||
|
self animcustom( ::zombie_moveongoo_animcustom_recover );
|
||||||
|
self waittill( "zombie_MoveOnGoo_animCustom_recover_done" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( velocitylength <= 0.2 )
|
||||||
|
{
|
||||||
|
self animmode( "normal" );
|
||||||
|
wait 0.1;
|
||||||
|
self animmode( "slide" );
|
||||||
|
}
|
||||||
|
if ( !self.sliding_on_goo || !issubstr( self.zombie_move_speed, "slide" ) )
|
||||||
|
{
|
||||||
|
if ( !iscrawler && !isleaper && !isDefined( self.fell_while_sliding ) && canzombieongoofall() )
|
||||||
|
{
|
||||||
|
self animcustom( ::zombie_moveongoo_animcustom_fall );
|
||||||
|
self waittill( "zombie_MoveOnGoo_animCustom_fall_done" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else self.sliding_on_goo = 1;
|
||||||
|
if ( velocitylength <= 0.2 )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
|
self animmode( "slide" );
|
||||||
|
self orientmode( "face enemy" );
|
||||||
|
if ( self.zombie_move_speed == "sprint" )
|
||||||
|
{
|
||||||
|
if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "sprint_slide" )
|
||||||
|
{
|
||||||
|
animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "sprint_slide" );
|
||||||
|
self set_zombie_run_cycle( animstatedef );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if ( self.zombie_move_speed == "run" )
|
||||||
|
{
|
||||||
|
if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "run_slide" )
|
||||||
|
{
|
||||||
|
animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "run_slide" );
|
||||||
|
self set_zombie_run_cycle( animstatedef );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "walk_slide" )
|
||||||
|
{
|
||||||
|
animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "walk_slide" );
|
||||||
|
self set_zombie_run_cycle( animstatedef );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zombiemoveongoo_gobacktonormal();
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_moveongoo_animcustom_fall()
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "removed" );
|
||||||
|
level endon( "intermission" );
|
||||||
|
self.fell_while_sliding = 1;
|
||||||
|
self animmode( "normal" );
|
||||||
|
self orientmode( "face angle", self.angles[ 1 ] );
|
||||||
|
fallanimstatedef = "zm_move_slide_fall";
|
||||||
|
self setanimstatefromasd( fallanimstatedef );
|
||||||
|
maps/mp/animscripts/zm_shared::donotetracks( "slide_fall_anim" );
|
||||||
|
self notify( "zombie_MoveOnGoo_animCustom_fall_done" );
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_moveongoo_animcustom_recover()
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "removed" );
|
||||||
|
level endon( "intermission" );
|
||||||
|
self.recovering_from_goo = 1;
|
||||||
|
if ( randomint( 100 ) < 50 )
|
||||||
|
{
|
||||||
|
animstatedef = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_move_slide_recover" );
|
||||||
|
self setanimstatefromasd( animstatedef );
|
||||||
|
maps/mp/animscripts/zm_shared::donotetracks( "slide_recover_anim" );
|
||||||
|
}
|
||||||
|
self.recovering_from_goo = 0;
|
||||||
|
zombiemoveongoo_gobacktonormal();
|
||||||
|
self notify( "zombie_MoveOnGoo_animCustom_recover_done" );
|
||||||
|
}
|
||||||
|
|
||||||
|
zombiemoveongoo_on_killanimscript()
|
||||||
|
{
|
||||||
|
self endon( "death" );
|
||||||
|
self endon( "removed" );
|
||||||
|
level endon( "intermission" );
|
||||||
|
self notify( "zombieMoveOnGoo_on_killAnimScript_thread" );
|
||||||
|
self endon( "zombieMoveOnGoo_on_killAnimScript_thread" );
|
||||||
|
self waittill_any( "endOnGoo", "killanimscript" );
|
||||||
|
zombiemoveongoo_gobacktonormal();
|
||||||
|
}
|
||||||
|
|
||||||
|
zombiemoveongoo_gobacktonormal()
|
||||||
|
{
|
||||||
|
self animmode( "normal" );
|
||||||
|
self set_zombie_run_cycle();
|
||||||
|
self.sliding_on_goo = 0;
|
||||||
|
self.fell_while_sliding = undefined;
|
||||||
|
self notify( "zombieMoveOnGoo_on_killAnimScript_thread" );
|
||||||
|
self notify( "endOnGoo" );
|
||||||
|
self.forcemovementscriptstate = 0;
|
||||||
|
if ( !is_true( self.completed_emerging_into_playable_area ) )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
assert( isDefined( self.first_node ) );
|
||||||
|
#/
|
||||||
|
*/
|
||||||
|
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||||
|
self orientmode( "face default" );
|
||||||
|
self thread maps/mp/zombies/_zm_spawner::zombie_goto_entrance( self.first_node );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self orientmode( "face enemy" );
|
||||||
|
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_can_slip()
|
||||||
|
{
|
||||||
|
if ( is_true( self.barricade_enter ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( is_true( self.is_traversing ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( !is_true( self.completed_emerging_into_playable_area ) && !isDefined( self.first_node ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( is_true( self.is_leaping ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_set_slipping( onoff )
|
||||||
|
{
|
||||||
|
if ( isDefined( self ) )
|
||||||
|
{
|
||||||
|
self.is_on_goo = onoff;
|
||||||
|
if ( onoff )
|
||||||
|
{
|
||||||
|
self thread zombiemoveongoo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slippery_spot_choke( lifetime )
|
||||||
|
{
|
||||||
|
level.sliquifier_distance_checks++;
|
||||||
|
if ( level.sliquifier_distance_checks >= 32 )
|
||||||
|
{
|
||||||
|
level.sliquifier_distance_checks = 0;
|
||||||
|
lifetime -= 0.05;
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
return lifetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_slippery_spot( origin, duration, startpos )
|
||||||
|
{
|
||||||
|
wait 0.5;
|
||||||
|
level.slippery_spot_count++;
|
||||||
|
hit_norm = vectornormalize( startpos - origin );
|
||||||
|
hit_from = 6 * hit_norm;
|
||||||
|
trace_height = 120;
|
||||||
|
trace = bullettrace( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), 0, undefined );
|
||||||
|
if ( isDefined( trace[ "entity" ] ) )
|
||||||
|
{
|
||||||
|
parent = trace[ "entity" ];
|
||||||
|
if ( is_true( parent.can_move ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fxorigin = origin + hit_from;
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
red = ( 0, 0, 1 );
|
||||||
|
green = ( 0, 0, 1 );
|
||||||
|
dkgreen = vectorScale( ( 0, 0, 1 ), 0,15 );
|
||||||
|
blue = ( 0, 0, 1 );
|
||||||
|
grey = vectorScale( ( 0, 0, 1 ), 0,3 );
|
||||||
|
black = ( 0, 0, 1 );
|
||||||
|
slipgun_debug_line( origin, origin + hit_from, red, duration );
|
||||||
|
if ( trace[ "fraction" ] == 1 )
|
||||||
|
{
|
||||||
|
slipgun_debug_line( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), grey, duration );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slipgun_debug_line( origin + hit_from, trace[ "position" ], green, duration );
|
||||||
|
slipgun_debug_line( trace[ "position" ], origin + hit_from + ( 0, 0, trace_height * -1 ), dkgreen, duration );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if ( trace[ "fraction" ] == 1 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
moving_parent = undefined;
|
||||||
|
moving_parent_start = ( 0, 0, 1 );
|
||||||
|
if ( isDefined( trace[ "entity" ] ) )
|
||||||
|
{
|
||||||
|
parent = trace[ "entity" ];
|
||||||
|
if ( is_true( parent.can_move ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
origin = trace[ "position" ];
|
||||||
|
thread pool_of_goo( fxorigin, duration );
|
||||||
|
if ( !isDefined( level.slippery_spots ) )
|
||||||
|
{
|
||||||
|
level.slippery_spots = [];
|
||||||
|
}
|
||||||
|
level.slippery_spots[ level.slippery_spots.size ] = origin;
|
||||||
|
radius = 60;
|
||||||
|
height = 48;
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
thread slipgun_debug_circle( origin, radius, duration, 0, moving_parent, moving_parent_start );
|
||||||
|
#/
|
||||||
|
*/
|
||||||
|
slicked_players = [];
|
||||||
|
slicked_zombies = [];
|
||||||
|
lifetime = duration;
|
||||||
|
radius2 = radius * radius;
|
||||||
|
while ( lifetime > 0 )
|
||||||
|
{
|
||||||
|
oldlifetime = lifetime;
|
||||||
|
_a612 = get_players();
|
||||||
|
_k612 = getFirstArrayKey( _a612 );
|
||||||
|
while ( isDefined( _k612 ) )
|
||||||
|
{
|
||||||
|
player = _a612[ _k612 ];
|
||||||
|
num = player getentitynumber();
|
||||||
|
morigin = origin;
|
||||||
|
if ( isDefined( moving_parent ) )
|
||||||
|
{
|
||||||
|
morigin = origin + ( moving_parent.origin - moving_parent_start );
|
||||||
|
}
|
||||||
|
if ( distance2dsquared( player.origin, morigin ) < radius2 )
|
||||||
|
{
|
||||||
|
should_be_slick = abs( player.origin[ 2 ] - morigin[ 2 ] ) < height;
|
||||||
|
}
|
||||||
|
is_slick = isDefined( slicked_players[ num ] );
|
||||||
|
if ( should_be_slick != is_slick )
|
||||||
|
{
|
||||||
|
if ( !isDefined( player.slick_count ) )
|
||||||
|
{
|
||||||
|
player.slick_count = 0;
|
||||||
|
}
|
||||||
|
if ( should_be_slick )
|
||||||
|
{
|
||||||
|
player.slick_count++;
|
||||||
|
slicked_players[ num ] = player;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.slick_count--;
|
||||||
|
/*
|
||||||
|
/#
|
||||||
|
assert( player.slick_count >= 0 );
|
||||||
|
#/
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
player forceslick( player.slick_count );
|
||||||
|
}
|
||||||
|
lifetime = slippery_spot_choke( lifetime );
|
||||||
|
_k612 = getNextArrayKey( _a612, _k612 );
|
||||||
|
}
|
||||||
|
zombies = get_round_enemy_array();
|
||||||
|
while ( isDefined( zombies ) )
|
||||||
|
{
|
||||||
|
_a645 = zombies;
|
||||||
|
_k645 = getFirstArrayKey( _a645 );
|
||||||
|
while ( isDefined( _k645 ) )
|
||||||
|
{
|
||||||
|
zombie = _a645[ _k645 ];
|
||||||
|
if ( isDefined( zombie ) )
|
||||||
|
{
|
||||||
|
num = zombie getentitynumber();
|
||||||
|
morigin = origin;
|
||||||
|
if ( isDefined( moving_parent ) )
|
||||||
|
{
|
||||||
|
morigin = origin + ( moving_parent.origin - moving_parent_start );
|
||||||
|
}
|
||||||
|
if ( distance2dsquared( zombie.origin, morigin ) < radius2 )
|
||||||
|
{
|
||||||
|
should_be_slick = abs( zombie.origin[ 2 ] - morigin[ 2 ] ) < height;
|
||||||
|
}
|
||||||
|
if ( should_be_slick && !zombie zombie_can_slip() )
|
||||||
|
{
|
||||||
|
should_be_slick = 0;
|
||||||
|
}
|
||||||
|
is_slick = isDefined( slicked_zombies[ num ] );
|
||||||
|
if ( should_be_slick != is_slick )
|
||||||
|
{
|
||||||
|
if ( !isDefined( zombie.slick_count ) )
|
||||||
|
{
|
||||||
|
zombie.slick_count = 0;
|
||||||
|
}
|
||||||
|
if ( should_be_slick )
|
||||||
|
{
|
||||||
|
zombie.slick_count++;
|
||||||
|
slicked_zombies[ num ] = zombie;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( zombie.slick_count > 0 )
|
||||||
|
{
|
||||||
|
zombie.slick_count--;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zombie zombie_set_slipping( zombie.slick_count > 0 );
|
||||||
|
}
|
||||||
|
lifetime = slippery_spot_choke( lifetime );
|
||||||
|
}
|
||||||
|
_k645 = getNextArrayKey( _a645, _k645 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( oldlifetime == lifetime )
|
||||||
|
{
|
||||||
|
lifetime -= 0.05;
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_a684 = slicked_players;
|
||||||
|
_k684 = getFirstArrayKey( _a684 );
|
||||||
|
while ( isDefined( _k684 ) )
|
||||||
|
{
|
||||||
|
player = _a684[ _k684 ];
|
||||||
|
player.slick_count--;
|
||||||
|
/*
|
||||||
|
|
||||||
|
/#
|
||||||
|
assert( player.slick_count >= 0 );
|
||||||
|
#/
|
||||||
|
*/
|
||||||
|
player forceslick( player.slick_count );
|
||||||
|
_k684 = getNextArrayKey( _a684, _k684 );
|
||||||
|
}
|
||||||
|
_a690 = slicked_zombies;
|
||||||
|
_k690 = getFirstArrayKey( _a690 );
|
||||||
|
while ( isDefined( _k690 ) )
|
||||||
|
{
|
||||||
|
zombie = _a690[ _k690 ];
|
||||||
|
if ( isDefined( zombie ) )
|
||||||
|
{
|
||||||
|
if ( zombie.slick_count > 0 )
|
||||||
|
{
|
||||||
|
zombie.slick_count--;
|
||||||
|
|
||||||
|
}
|
||||||
|
zombie zombie_set_slipping( zombie.slick_count > 0 );
|
||||||
|
}
|
||||||
|
_k690 = getNextArrayKey( _a690, _k690 );
|
||||||
|
}
|
||||||
|
arrayremovevalue( level.slippery_spots, origin, 0 );
|
||||||
|
level.slippery_spot_count--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pool_of_goo( origin, duration )
|
||||||
|
{
|
||||||
|
effect_life = 24;
|
||||||
|
if ( duration > effect_life )
|
||||||
|
{
|
||||||
|
pool_of_goo( origin, duration - effect_life );
|
||||||
|
duration = effect_life;
|
||||||
|
}
|
||||||
|
if ( isDefined( level._effect[ "slipgun_splatter" ] ) )
|
||||||
|
{
|
||||||
|
playfx( level._effect[ "slipgun_splatter" ], origin );
|
||||||
|
}
|
||||||
|
wait duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
explode_into_goo( player, chain_depth )
|
||||||
|
{
|
||||||
|
if ( isDefined( self.marked_for_insta_upgraded_death ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tag = "J_SpineLower";
|
||||||
|
if ( is_true( self.isdog ) )
|
||||||
|
{
|
||||||
|
tag = "tag_origin";
|
||||||
|
}
|
||||||
|
self.guts_explosion = 1;
|
||||||
|
self playsound( "wpn_slipgun_zombie_explode" );
|
||||||
|
if ( isDefined( level._effect[ "slipgun_explode" ] ) )
|
||||||
|
{
|
||||||
|
playfx( level._effect[ "slipgun_explode" ], self gettagorigin( tag ) );
|
||||||
|
}
|
||||||
|
if ( !is_true( self.isdog ) )
|
||||||
|
{
|
||||||
|
wait 0.1;
|
||||||
|
}
|
||||||
|
self ghost();
|
||||||
|
if ( !isDefined( self.goo_chain_depth ) )
|
||||||
|
{
|
||||||
|
self.goo_chain_depth = chain_depth;
|
||||||
|
}
|
||||||
|
chain_radius = level.zombie_vars[ "slipgun_chain_radius" ];
|
||||||
|
level thread explode_to_near_zombies( player, self.origin, chain_radius, self.goo_chain_depth );
|
||||||
|
}
|
||||||
|
|
||||||
|
explode_to_near_zombies( player, origin, radius, chain_depth )
|
||||||
|
{
|
||||||
|
if ( level.zombie_vars[ "slipgun_max_kill_chain_depth" ] > 0 && chain_depth > level.zombie_vars[ "slipgun_max_kill_chain_depth" ] )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
enemies = get_round_enemy_array();
|
||||||
|
enemies = get_array_of_closest( origin, enemies );
|
||||||
|
minchainwait = level.zombie_vars[ "slipgun_chain_wait_min" ];
|
||||||
|
maxchainwait = level.zombie_vars[ "slipgun_chain_wait_max" ];
|
||||||
|
rsquared = radius * radius;
|
||||||
|
tag = "J_Head";
|
||||||
|
marked_zombies = [];
|
||||||
|
while ( isDefined( enemies ) && enemies.size )
|
||||||
|
{
|
||||||
|
index = 0;
|
||||||
|
enemy = enemies[ index ];
|
||||||
|
while ( distancesquared( enemy.origin, origin ) < rsquared )
|
||||||
|
{
|
||||||
|
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) && !isDefined( enemy.slipgun_sizzle ) )
|
||||||
|
{
|
||||||
|
trace = bullettrace( origin + vectorScale( ( 0, 0, 1 ), 50 ), enemy.origin + vectorScale( ( 0, 0, 1 ), 50 ), 0, undefined, 1 );
|
||||||
|
if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] == 1 )
|
||||||
|
{
|
||||||
|
enemy.slipgun_sizzle = playfxontag( level._effect[ "slipgun_simmer" ], enemy, tag );
|
||||||
|
marked_zombies[ marked_zombies.size ] = enemy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
if ( index >= enemies.size )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enemy = enemies[ index ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ( isDefined( marked_zombies ) && marked_zombies.size )
|
||||||
|
{
|
||||||
|
_a799 = marked_zombies;
|
||||||
|
_k799 = getFirstArrayKey( _a799 );
|
||||||
|
while ( isDefined( _k799 ) )
|
||||||
|
{
|
||||||
|
enemy = _a799[ _k799 ];
|
||||||
|
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) )
|
||||||
|
{
|
||||||
|
wait randomfloatrange( minchainwait, maxchainwait );
|
||||||
|
if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) )
|
||||||
|
{
|
||||||
|
if ( !isDefined( enemy.goo_chain_depth ) )
|
||||||
|
{
|
||||||
|
enemy.goo_chain_depth = chain_depth;
|
||||||
|
}
|
||||||
|
if ( enemy.health > 0 )
|
||||||
|
{
|
||||||
|
if ( player maps/mp/zombies/_zm_powerups::is_insta_kill_active() )
|
||||||
|
{
|
||||||
|
enemy.health = 1;
|
||||||
|
}
|
||||||
|
enemy dodamage( level.slipgun_damage, origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" );
|
||||||
|
}
|
||||||
|
if ( level.slippery_spot_count < level.zombie_vars[ "slipgun_reslip_max_spots" ] )
|
||||||
|
{
|
||||||
|
if ( isDefined( enemy.slick_count ) && enemy.slick_count == 0 && enemy.health <= 0 )
|
||||||
|
{
|
||||||
|
if ( level.zombie_vars[ "slipgun_reslip_rate" ] > 0 && randomint( level.zombie_vars[ "slipgun_reslip_rate" ] ) == 0 )
|
||||||
|
{
|
||||||
|
startpos = origin;
|
||||||
|
duration = 24;
|
||||||
|
thread add_slippery_spot( enemy.origin, duration, startpos );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_k799 = getNextArrayKey( _a799, _k799 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_zombie_1st_hit_response( upgraded, player )
|
||||||
|
{
|
||||||
|
self notify( "stop_find_flesh" );
|
||||||
|
self notify( "zombie_acquire_enemy" );
|
||||||
|
self orientmode( "face default" );
|
||||||
|
self.ignoreall = 1;
|
||||||
|
self.gibbed = 1;
|
||||||
|
if ( isalive( self ) )
|
||||||
|
{
|
||||||
|
if ( !isDefined( self.goo_chain_depth ) )
|
||||||
|
{
|
||||||
|
self.goo_chain_depth = 0;
|
||||||
|
}
|
||||||
|
if ( self.health > 0 )
|
||||||
|
{
|
||||||
|
if ( player maps/mp/zombies/_zm_powerups::is_insta_kill_active() )
|
||||||
|
{
|
||||||
|
self.health = 1;
|
||||||
|
}
|
||||||
|
self dodamage( level.slipgun_damage, self.origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_zombie_hit_response_internal( mod, damageweapon, player )
|
||||||
|
{
|
||||||
|
if ( !self is_slipgun_damage( mod, damageweapon ) && !is_slipgun_explosive_damage( mod, damageweapon ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
self playsound( "wpn_slipgun_zombie_impact" );
|
||||||
|
upgraded = damageweapon == "slipgun_upgraded_zm";
|
||||||
|
self thread slipgun_zombie_1st_hit_response( upgraded, player );
|
||||||
|
if ( isDefined( player ) && isplayer( player ) )
|
||||||
|
{
|
||||||
|
player thread slipgun_play_zombie_hit_vox();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_zombie_damage_response( mod, hit_location, hit_origin, player, amount )
|
||||||
|
{
|
||||||
|
return slipgun_zombie_hit_response_internal( mod, self.damageweapon, player );
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_zombie_death_response()
|
||||||
|
{
|
||||||
|
if ( !self is_slipgun_damage( self.damagemod, self.damageweapon ) && !is_slipgun_explosive_damage( self.damagemod, self.damageweapon ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self );
|
||||||
|
self explode_into_goo( self.attacker, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_slipgun_explosive_damage( mod, weapon )
|
||||||
|
{
|
||||||
|
if ( isDefined( weapon ) )
|
||||||
|
{
|
||||||
|
if ( weapon != "slip_goo_zm" && weapon != "slip_bolt_zm" )
|
||||||
|
{
|
||||||
|
return weapon == "slip_bolt_upgraded_zm";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is_slipgun_damage( mod, weapon )
|
||||||
|
{
|
||||||
|
if ( isDefined( weapon ) )
|
||||||
|
{
|
||||||
|
if ( weapon != "slipgun_zm" )
|
||||||
|
{
|
||||||
|
return weapon == "slipgun_upgraded_zm";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slipgun_play_zombie_hit_vox()
|
||||||
|
{
|
||||||
|
rand = randomintrange( 0, 101 );
|
||||||
|
if ( rand >= 20 )
|
||||||
|
{
|
||||||
|
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "human" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user