mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-04-19 21:32:53 +00:00
Add experimental alternative to clientfields.
This commit is contained in:
parent
1bb49ef5cf
commit
3ceec870a7
@ -3,6 +3,8 @@
|
|||||||
#include clientscripts\mp\_utility;
|
#include clientscripts\mp\_utility;
|
||||||
#include clientscripts\mp\zombies\_zm_utility;
|
#include clientscripts\mp\zombies\_zm_utility;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
precache()
|
precache()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -17,8 +19,9 @@ init()
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
registerclientfield( "actor", "helmet_off", 9000, 1, "int", ::brutus_helmet_launch_cb );
|
//registerclientfield( "actor", "helmet_off", 9000, 1, "int", ::brutus_helmet_launch_cb );
|
||||||
registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int", ::brutus_lock_down_effects_cb );
|
//registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int", ::brutus_lock_down_effects_cb );
|
||||||
|
register_clientfield_alt( "actor", "brutus_lock_down", "int", ::brutus_lock_down_effects_cb_alt );
|
||||||
registerbrutusfootstepcb( "zm_alcatraz_brutus", ::brutusfootstepcbfunc );
|
registerbrutusfootstepcb( "zm_alcatraz_brutus", ::brutusfootstepcbfunc );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +37,13 @@ brutus_helmet_launch_cb( localclientnum, oldval, newval, bnewent, binitialsnap,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
brutus_lock_down_effects_cb_alt( new_val, old_val )
|
||||||
|
{
|
||||||
|
player = getlocalplayer( 0 );
|
||||||
|
player earthquake( 0.7, 1, self.origin, 1500 );
|
||||||
|
playrumbleonposition( 0, "explosion_generic", self.origin );
|
||||||
|
}
|
||||||
|
|
||||||
brutus_lock_down_effects_cb( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
brutus_lock_down_effects_cb( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
||||||
{
|
{
|
||||||
if ( bwasdemojump )
|
if ( bwasdemojump )
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
#include clientscripts\mp\_utility;
|
#include clientscripts\mp\_utility;
|
||||||
#include clientscripts\mp\zombies\_zm_utility;
|
#include clientscripts\mp\zombies\_zm_utility;
|
||||||
|
|
||||||
|
#include scripts\zm\zm_ai_pack_mod_main;
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
precache()
|
precache()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -40,10 +43,15 @@ add_fx_element( index, fx_element, tag_name, min_freq, max_freq )
|
|||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
registerclientfield( "actor", "mechz_fx", 14000, 12, "int", ::mechz_handle_fx );
|
register_clientfield_alt( "toplayer", "mechz_grab", "int", ::mechz_claw_callback_alt );
|
||||||
registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int", ::mechz_claw_callback );
|
register_clientfield_alt( "actor", "mechz_fx", "int", ::mechz_handle_fx_alt );
|
||||||
registerclientfield( "actor", "anim_rate", 14000, 2, "float", undefined, 0 );
|
//registerclientfield( "actor", "mechz_fx", 14000, 12, "int", ::mechz_handle_fx );
|
||||||
setupclientfieldanimspeedcallbacks( "actor", 1, "anim_rate" );
|
//registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int", ::mechz_claw_callback );
|
||||||
|
if ( getDvar( "mapname" ) != "zm_buried" && getDvar( "g_gametype" != "zclassic" ) )
|
||||||
|
{
|
||||||
|
registerclientfield( "actor", "anim_rate", 14000, 2, "float", undefined, 0 );
|
||||||
|
setupclientfieldanimspeedcallbacks( "actor", 1, "anim_rate" );
|
||||||
|
}
|
||||||
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_armor", "J_Knee_Attach_LE" );
|
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_armor", "J_Knee_Attach_LE" );
|
||||||
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_sparks", "J_Knee_Attach_LE", 0.25, 0.75 );
|
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_sparks", "J_Knee_Attach_LE", 0.25, 0.75 );
|
||||||
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_steam", "J_Knee_Attach_LE", 0.1, 0.3 );
|
add_fx_element( 0, "maps/zombie_tomb/fx_tomb_mech_dmg_steam", "J_Knee_Attach_LE", 0.1, 0.3 );
|
||||||
@ -120,32 +128,77 @@ init()
|
|||||||
init_animtree();
|
init_animtree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup_fx_alt( index )
|
||||||
|
{
|
||||||
|
if ( !is_true( self.fx_initialized ) )
|
||||||
|
{
|
||||||
|
self.fx_initialized = 1;
|
||||||
|
self.smoke_fx = playfxontag( 0, level._effect["mech_exhaust_smoke"], self, "tag_back_exhaust_FX" );
|
||||||
|
self setsoundentcontext( "f35", "interior" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( index == 10 )
|
||||||
|
self setsoundentcontext( "f35", "exterior" );
|
||||||
|
|
||||||
|
for ( i = 0; i < level.mechz_clientside_fx[index].size; i++ )
|
||||||
|
{
|
||||||
|
fx_struct = level.mechz_clientside_fx[index][i];
|
||||||
|
unique_script_id = "kill_fx_" + index + "_" + self getentitynumber();
|
||||||
|
self thread sndplayfxloops( 0, index, fx_struct.tag_name );
|
||||||
|
|
||||||
|
if ( isdefined( fx_struct.min_freq ) )
|
||||||
|
{
|
||||||
|
self thread mechz_do_manual_looping_fx( 0, unique_script_id, fx_struct.tag_name, fx_struct.fx_element, fx_struct.min_freq, fx_struct.max_freq );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
self thread mechz_do_auto_looping_fx( 0, index, fx_struct.tag_name, fx_struct.fx_element );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setup_fx( localclientnum, index, bnewent, binitialsnap, fieldname, bwasdemojump )
|
setup_fx( localclientnum, index, bnewent, binitialsnap, fieldname, bwasdemojump )
|
||||||
{
|
{
|
||||||
if ( !is_true( self.fx_initialized ) )
|
if ( !is_true( self.fx_initialized ) )
|
||||||
{
|
{
|
||||||
self.fx_initialized = 1;
|
self.fx_initialized = 1;
|
||||||
self.smoke_fx = playfxontag( localclientnum, level._effect["mech_exhaust_smoke"], self, "tag_back_exhaust_FX" );
|
self.smoke_fx = playfxontag( localclientnum, level._effect["mech_exhaust_smoke"], self, "tag_back_exhaust_FX" );
|
||||||
self setsoundentcontext( "f35", "interior" );
|
self setsoundentcontext( "f35", "interior" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( index == 10 )
|
if ( index == 10 )
|
||||||
self setsoundentcontext( "f35", "exterior" );
|
self setsoundentcontext( "f35", "exterior" );
|
||||||
|
|
||||||
for ( i = 0; i < level.mechz_clientside_fx[index].size; i++ )
|
for ( i = 0; i < level.mechz_clientside_fx[index].size; i++ )
|
||||||
{
|
{
|
||||||
fx_struct = level.mechz_clientside_fx[index][i];
|
fx_struct = level.mechz_clientside_fx[index][i];
|
||||||
unique_script_id = "kill_fx_" + index + "_" + self getentitynumber();
|
unique_script_id = "kill_fx_" + index + "_" + self getentitynumber();
|
||||||
self thread sndplayfxloops( localclientnum, index, fx_struct.tag_name );
|
self thread sndplayfxloops( localclientnum, index, fx_struct.tag_name );
|
||||||
|
|
||||||
if ( isdefined( fx_struct.min_freq ) )
|
if ( isdefined( fx_struct.min_freq ) )
|
||||||
{
|
{
|
||||||
self thread mechz_do_manual_looping_fx( localclientnum, unique_script_id, fx_struct.tag_name, fx_struct.fx_element, fx_struct.min_freq, fx_struct.max_freq );
|
self thread mechz_do_manual_looping_fx( localclientnum, unique_script_id, fx_struct.tag_name, fx_struct.fx_element, fx_struct.min_freq, fx_struct.max_freq );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread mechz_do_auto_looping_fx( localclientnum, index, fx_struct.tag_name, fx_struct.fx_element );
|
self thread mechz_do_auto_looping_fx( localclientnum, index, fx_struct.tag_name, fx_struct.fx_element );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup_fx_alt( index )
|
||||||
|
{
|
||||||
|
unique_script_id = "kill_fx_" + index + "_" + self getentitynumber();
|
||||||
|
fx_array = level.mechz_clientside_fx_inst[index];
|
||||||
|
|
||||||
|
if ( isdefined( fx_array ) && fx_array.size > 0 )
|
||||||
|
{
|
||||||
|
for ( i = fx_array.size - 1; i >= 0; i-- )
|
||||||
|
{
|
||||||
|
stopfx( 0, fx_array[i] );
|
||||||
|
fx_array[i] = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self notify( unique_script_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup_fx( localclientnum, index, bnewent, binitialsnap, fieldname, bwasdemojump )
|
cleanup_fx( localclientnum, index, bnewent, binitialsnap, fieldname, bwasdemojump )
|
||||||
@ -165,6 +218,34 @@ cleanup_fx( localclientnum, index, bnewent, binitialsnap, fieldname, bwasdemojum
|
|||||||
self notify( unique_script_id );
|
self notify( unique_script_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mechz_handle_fx_alt( new_val, old_val )
|
||||||
|
{
|
||||||
|
newval = int( new_val );
|
||||||
|
oldval = int( old_val );
|
||||||
|
for ( i = 0; i < level.mechz_clientside_fx.size; i++ )
|
||||||
|
{
|
||||||
|
set_in_new = ( newval & 1 << i ) != 0;
|
||||||
|
set_in_old = ( oldval & 1 << i ) != 0;
|
||||||
|
|
||||||
|
if ( set_in_new && !set_in_old )
|
||||||
|
{
|
||||||
|
self thread setup_fx_alt( i );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !set_in_new && set_in_old )
|
||||||
|
self thread cleanup_fx_alt( i );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !newval && is_true( self.fx_initialized ) )
|
||||||
|
{
|
||||||
|
self.fx_initialized = 0;
|
||||||
|
|
||||||
|
if ( isdefined( self.smoke_fx ) )
|
||||||
|
deletefx( 0, self.smoke_fx );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mechz_handle_fx( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
mechz_handle_fx( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < level.mechz_clientside_fx.size; i++ )
|
for ( i = 0; i < level.mechz_clientside_fx.size; i++ )
|
||||||
@ -236,6 +317,19 @@ mechz_screen_shake_loop( localclientnum )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mechz_claw_callback_alt( new_val, old_val )
|
||||||
|
{
|
||||||
|
oldval = int( old_val );
|
||||||
|
newval = int( new_val );
|
||||||
|
if ( oldval == 1 && newval == 0 )
|
||||||
|
{
|
||||||
|
self stoprumble( 0, "mechz_footsteps" );
|
||||||
|
self notify( "kill_screen_shake" );
|
||||||
|
}
|
||||||
|
else if ( newval == 1 )
|
||||||
|
self thread mechz_screen_shake_loop( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
mechz_claw_callback( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
mechz_claw_callback( localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump )
|
||||||
{
|
{
|
||||||
if ( oldval == 1 && newval == 0 )
|
if ( oldval == 1 && newval == 0 )
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
#include maps\mp\animscripts\zm_death;
|
#include maps\mp\animscripts\zm_death;
|
||||||
#include maps\mp\zombies\_zm_perks;
|
#include maps\mp\zombies\_zm_perks;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
precache()
|
precache()
|
||||||
{
|
{
|
||||||
level._effect["brutus_flashlight"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_light" );
|
level._effect["brutus_flashlight"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_light" );
|
||||||
@ -62,8 +64,8 @@ main()
|
|||||||
precachestring( &"ZOMBIE_LOCKED_COST_6000" );
|
precachestring( &"ZOMBIE_LOCKED_COST_6000" );
|
||||||
flag_init( "brutus_setup_complete" );
|
flag_init( "brutus_setup_complete" );
|
||||||
setdvar( "zombie_double_wide_checks", 1 );
|
setdvar( "zombie_double_wide_checks", 1 );
|
||||||
registerclientfield( "actor", "helmet_off", 9000, 1, "int" );
|
//registerclientfield( "actor", "helmet_off", 9000, 1, "int" );
|
||||||
registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" );
|
//registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" );
|
||||||
|
|
||||||
if ( !isdefined( level.vsmgr_prio_zm_brutus_teargas ) )
|
if ( !isdefined( level.vsmgr_prio_zm_brutus_teargas ) )
|
||||||
level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50;
|
level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50;
|
||||||
@ -2448,15 +2450,15 @@ brutus_lockdown_client_effects( delay )
|
|||||||
if ( isdefined( delay ) )
|
if ( isdefined( delay ) )
|
||||||
wait( delay );
|
wait( delay );
|
||||||
|
|
||||||
if ( self.brutus_lockdown_state )
|
self.brutus_lockdown_state = !self.brutus_lockdown_state;
|
||||||
|
|
||||||
|
if ( level.script == "zm_tomb" )
|
||||||
{
|
{
|
||||||
self.brutus_lockdown_state = 0;
|
self setclientfield( "brutus_lock_down", self.brutus_lockdown_state );
|
||||||
self setclientfield( "brutus_lock_down", 0 );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.brutus_lockdown_state = 1;
|
set_clientfield_alt_allplayers( "actor", "brutus_lock_down", self, self.brutus_lockdown_state );
|
||||||
self setclientfield( "brutus_lock_down", 1 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
//#include maps\mp\zm_tomb_chamber;
|
//#include maps\mp\zm_tomb_chamber;
|
||||||
#include maps\mp\zombies\_zm_ai_basic;
|
#include maps\mp\zombies\_zm_ai_basic;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
precache()
|
precache()
|
||||||
{
|
{
|
||||||
level thread mechz_setup_armor_pieces();
|
level thread mechz_setup_armor_pieces();
|
||||||
@ -47,9 +49,12 @@ precache()
|
|||||||
|
|
||||||
register_clientfields()
|
register_clientfields()
|
||||||
{
|
{
|
||||||
registerclientfield( "actor", "mechz_fx", 14000, 12, "int" );
|
//registerclientfield( "actor", "mechz_fx", 14000, 12, "int" );
|
||||||
registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int" );
|
//registerclientfield( "toplayer", "mechz_grab", 14000, 1, "int" );
|
||||||
registerclientfield( "actor", "anim_rate", 14000, 2, "float" );
|
if ( getDvar( "mapname" ) != "zm_buried" )
|
||||||
|
{
|
||||||
|
registerclientfield( "actor", "anim_rate", 14000, 2, "float" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
register_burn_overlay()
|
register_burn_overlay()
|
||||||
@ -210,7 +215,14 @@ clear_one_off_fx( fx_id )
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait 10;
|
wait 10;
|
||||||
self.fx_field = self.fx_field & ~fx_id;
|
self.fx_field = self.fx_field & ~fx_id;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
traversal_booster_fx_watcher()
|
traversal_booster_fx_watcher()
|
||||||
@ -233,8 +245,14 @@ traversal_booster_fx_watcher()
|
|||||||
self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" );
|
self.sndloopent playsound( "zmb_ai_mechz_rocket_stop" );
|
||||||
self.sndloopent stoploopsound( 1 );
|
self.sndloopent stoploopsound( 1 );
|
||||||
}
|
}
|
||||||
|
if ( level.script == "zm_tomb" )
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,8 +289,14 @@ booster_fx_watcher()
|
|||||||
|
|
||||||
self thread clear_one_off_fx( 512 );
|
self thread clear_one_off_fx( 512 );
|
||||||
}
|
}
|
||||||
|
if ( level.script == "zm_tomb" )
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,14 +313,28 @@ flamethrower_fx_watcher()
|
|||||||
else if ( notetrack == "stop_ft" )
|
else if ( notetrack == "stop_ft" )
|
||||||
self.fx_field = self.fx_field & ~64;
|
self.fx_field = self.fx_field & ~64;
|
||||||
|
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fx_cleanup()
|
fx_cleanup()
|
||||||
{
|
{
|
||||||
self.fx_field = 0;
|
self.fx_field = 0;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,6 +614,7 @@ mechz_spawn()
|
|||||||
self.melee_anim_func = ::melee_anim_func;
|
self.melee_anim_func = ::melee_anim_func;
|
||||||
self.meleedamage = 75;
|
self.meleedamage = 75;
|
||||||
self.custom_item_dmg = 2000;
|
self.custom_item_dmg = 2000;
|
||||||
|
self.ignore_distance_tracking = true;
|
||||||
recalc_zombie_array();
|
recalc_zombie_array();
|
||||||
width = 15;
|
width = 15;
|
||||||
if ( level.script == "zm_tomb" )
|
if ( level.script == "zm_tomb" )
|
||||||
@ -757,7 +796,14 @@ mechz_death()
|
|||||||
self mechz_claw_detach();
|
self mechz_claw_detach();
|
||||||
self release_flamethrower_trigger();
|
self release_flamethrower_trigger();
|
||||||
self.fx_field = 0;
|
self.fx_field = 0;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
|
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
|
||||||
self mechz_interrupt();
|
self mechz_interrupt();
|
||||||
|
|
||||||
@ -1507,7 +1553,14 @@ mechz_launch_armor_piece()
|
|||||||
self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag );
|
self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag );
|
||||||
|
|
||||||
self.fx_field = self.fx_field | 1 << self.armor_state[self.next_armor_piece].index;
|
self.fx_field = self.fx_field | 1 << self.armor_state[self.next_armor_piece].index;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
|
|
||||||
if ( sndmechzisnetworksafe( "destruction" ) )
|
if ( sndmechzisnetworksafe( "destruction" ) )
|
||||||
self playsound( "zmb_ai_mechz_destruction" );
|
self playsound( "zmb_ai_mechz_destruction" );
|
||||||
@ -1637,7 +1690,14 @@ mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon,
|
|||||||
|
|
||||||
self.fx_field = self.fx_field | 1024;
|
self.fx_field = self.fx_field | 1024;
|
||||||
self.fx_field = self.fx_field & ~2048;
|
self.fx_field = self.fx_field & ~2048;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
|
|
||||||
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
|
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#include maps\mp\animscripts\zm_shared;
|
#include maps\mp\animscripts\zm_shared;
|
||||||
#include maps\mp\zombies\_zm_spawner;
|
#include maps\mp\zombies\_zm_spawner;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
mechz_in_range_for_jump()
|
mechz_in_range_for_jump()
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.jump_pos ) )
|
if ( !isdefined( self.jump_pos ) )
|
||||||
@ -272,7 +274,14 @@ mechz_do_jump( wait_for_stationary_tank )
|
|||||||
self show();
|
self show();
|
||||||
self.fx_field = self.fx_field_old;
|
self.fx_field = self.fx_field_old;
|
||||||
self.fx_field_old = undefined;
|
self.fx_field_old = undefined;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
|
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
|
||||||
|
|
||||||
if ( isdefined( self.m_claw ) )
|
if ( isdefined( self.m_claw ) )
|
||||||
@ -298,7 +307,14 @@ mechz_kill_jump_watcher()
|
|||||||
mechz_jump_cleanup()
|
mechz_jump_cleanup()
|
||||||
{
|
{
|
||||||
self.fx_field = self.fx_field & ~128;
|
self.fx_field = self.fx_field & ~128;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self stopanimscripted();
|
self stopanimscripted();
|
||||||
self notify( "jump_complete" );
|
self notify( "jump_complete" );
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
#include maps\mp\zombies\_zm_laststand;
|
#include maps\mp\zombies\_zm_laststand;
|
||||||
//#include maps\mp\zombies\_zm_weap_riotshield_tomb;
|
//#include maps\mp\zombies\_zm_weap_riotshield_tomb;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
#using_animtree("mechz_claw");
|
#using_animtree("mechz_claw");
|
||||||
|
|
||||||
mechz_claw_detach()
|
mechz_claw_detach()
|
||||||
@ -48,6 +50,14 @@ mechz_claw_release( bopenclaw )
|
|||||||
{
|
{
|
||||||
if ( isplayer( self.e_grabbed ) )
|
if ( isplayer( self.e_grabbed ) )
|
||||||
{
|
{
|
||||||
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self.e_grabbed setclientfieldtoplayer( "mechz_grab", 0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.e_grabbed set_clientfield_alt_toplayer( "toplayer", "mechz_grab", self.e_grabbed, 0 );
|
||||||
|
}
|
||||||
self.e_grabbed setclientfieldtoplayer( "mechz_grab", 0 );
|
self.e_grabbed setclientfieldtoplayer( "mechz_grab", 0 );
|
||||||
self.e_grabbed allowcrouch( 1 );
|
self.e_grabbed allowcrouch( 1 );
|
||||||
self.e_grabbed allowprone( 1 );
|
self.e_grabbed allowprone( 1 );
|
||||||
@ -163,7 +173,14 @@ claw_grapple()
|
|||||||
v_claw_origin = self gettagorigin( "tag_claw" );
|
v_claw_origin = self gettagorigin( "tag_claw" );
|
||||||
v_claw_angles = vectortoangles( self.origin - self.favoriteenemy.origin );
|
v_claw_angles = vectortoangles( self.origin - self.favoriteenemy.origin );
|
||||||
self.fx_field = self.fx_field | 256;
|
self.fx_field = self.fx_field | 256;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
|
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
|
||||||
self.m_claw unlink();
|
self.m_claw unlink();
|
||||||
self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) );
|
self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) );
|
||||||
@ -211,7 +228,14 @@ claw_grapple()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.e_grabbed = player;
|
self.e_grabbed = player;
|
||||||
self.e_grabbed setclientfieldtoplayer( "mechz_grab", 1 );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self.e_grabbed setclientfieldtoplayer( "mechz_grab", 1 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.e_grabbed set_clientfield_alt_toplayer( "toplayer", "mechz_grab", self.e_grabbed, 1 );
|
||||||
|
}
|
||||||
self.e_grabbed playerlinktodelta( self.m_claw, "tag_attach_player" );
|
self.e_grabbed playerlinktodelta( self.m_claw, "tag_attach_player" );
|
||||||
self.e_grabbed setplayerangles( vectortoangles( self.origin - self.e_grabbed.origin ) );
|
self.e_grabbed setplayerangles( vectortoangles( self.origin - self.e_grabbed.origin ) );
|
||||||
self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" );
|
self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" );
|
||||||
@ -285,7 +309,14 @@ claw_grapple()
|
|||||||
self.m_claw.fx_ent delete();
|
self.m_claw.fx_ent delete();
|
||||||
self.m_claw.fx_ent = undefined;
|
self.m_claw.fx_ent = undefined;
|
||||||
self.fx_field = self.fx_field & ~256;
|
self.fx_field = self.fx_field & ~256;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
flag_clear( "mechz_launching_claw" );
|
flag_clear( "mechz_launching_claw" );
|
||||||
|
|
||||||
if ( isdefined( self.e_grabbed ) )
|
if ( isdefined( self.e_grabbed ) )
|
||||||
@ -558,7 +589,14 @@ mechz_claw_cleanup()
|
|||||||
{
|
{
|
||||||
self.fx_field = self.fx_field & ~256;
|
self.fx_field = self.fx_field & ~256;
|
||||||
self.fx_field = self.fx_field & ~64;
|
self.fx_field = self.fx_field & ~64;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self mechz_claw_release();
|
self mechz_claw_release();
|
||||||
|
|
||||||
if ( isdefined( self.m_claw ) )
|
if ( isdefined( self.m_claw ) )
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#include maps\mp\animscripts\zm_shared;
|
#include maps\mp\animscripts\zm_shared;
|
||||||
#include maps\mp\_visionset_mgr;
|
#include maps\mp\_visionset_mgr;
|
||||||
|
|
||||||
|
#include scripts\zm\clientfield_alt_sys;
|
||||||
|
|
||||||
init_flamethrower_triggers()
|
init_flamethrower_triggers()
|
||||||
{
|
{
|
||||||
if ( level.script != "zm_tomb" )
|
if ( level.script != "zm_tomb" )
|
||||||
@ -611,7 +613,14 @@ mechz_kill_flamethrower_watcher()
|
|||||||
mechz_flamethrower_cleanup()
|
mechz_flamethrower_cleanup()
|
||||||
{
|
{
|
||||||
self.fx_field = self.fx_field & ~64;
|
self.fx_field = self.fx_field & ~64;
|
||||||
self setclientfield( "mechz_fx", self.fx_field );
|
if ( level.script == "zm_tomb" )
|
||||||
|
{
|
||||||
|
self setclientfield( "mechz_fx", self.fx_field );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set_clientfield_alt_allplayers( "actor", "mechz_fx", self, self.fx_field );
|
||||||
|
}
|
||||||
self.firing = 0;
|
self.firing = 0;
|
||||||
self.doing_tank_sweep = 0;
|
self.doing_tank_sweep = 0;
|
||||||
self.cant_melee = 0;
|
self.cant_melee = 0;
|
||||||
|
81
zm_ai_pack/scripts/zm/clientfield_alt_sys.csc
Normal file
81
zm_ai_pack/scripts/zm/clientfield_alt_sys.csc
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
execute_clientfield_alt_callback_internal( data, last_data, field_type, field_name )
|
||||||
|
{
|
||||||
|
entnum = data.entnum;
|
||||||
|
last_entnum = last_data.entnum;
|
||||||
|
ent = undefined;
|
||||||
|
field_data = level.clientfield_alts[ field_type ][ field_name ];
|
||||||
|
switch ( field_type )
|
||||||
|
{
|
||||||
|
case "actor":
|
||||||
|
assert( entnum >= 22 && entnum < 54, "Entnum " + entnum + " out of range for actor" );
|
||||||
|
ent = getEntByNum( 0, entnum );
|
||||||
|
break;
|
||||||
|
// case "toplayer":
|
||||||
|
// default:
|
||||||
|
// assertMsg( "Unhandled field type " + field_type );
|
||||||
|
// break;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert( isDefined( ent ) );
|
||||||
|
|
||||||
|
ent thread [[ field_data.callback ]]( data.value, last_data.value );
|
||||||
|
}
|
||||||
|
|
||||||
|
get_data_from_payload( payload )
|
||||||
|
{
|
||||||
|
struct = spawnStruct();
|
||||||
|
tokens = strTok( payload, " " );
|
||||||
|
|
||||||
|
struct.entnum = int( tokens[ 0 ] );
|
||||||
|
struct.value = tokens[ 1 ];
|
||||||
|
|
||||||
|
return struct;
|
||||||
|
}
|
||||||
|
|
||||||
|
execute_clientfield_alt_callback( payload, last_payload, field_type, field_name )
|
||||||
|
{
|
||||||
|
data = get_data_from_payload( payload );
|
||||||
|
last_data = get_data_from_payload( last_payload );
|
||||||
|
|
||||||
|
execute_clientfield_alt_callback_internal( data, last_data, field_type, field_name );
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_clientfield_alt_callbacks( dvar_name, field_type, field_name )
|
||||||
|
{
|
||||||
|
level endon( "disconnect" );
|
||||||
|
|
||||||
|
old_dvar_value = getDvar( dvar_name );
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
dvar_value = getDvar( dvar_name );
|
||||||
|
if ( dvar_value != old_dvar_value )
|
||||||
|
{
|
||||||
|
level execute_clientfield_alt_callback( dvar_value, old_dvar_value, field_type, field_name );
|
||||||
|
old_dvar_value = dvar_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
wait 0.01;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
register_clientfield_alt( field_type, field_name, field_value_type, field_callback )
|
||||||
|
{
|
||||||
|
if ( !isDefined( level.clientfield_alts ) )
|
||||||
|
{
|
||||||
|
level.clientfield_alts = [];
|
||||||
|
}
|
||||||
|
if ( !isDefined( level.clientfield_alts[ field_type ] ) )
|
||||||
|
{
|
||||||
|
level.clientfield_alts[ field_type ] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
struct = spawnStruct();
|
||||||
|
struct.value_type = field_value_type;
|
||||||
|
struct.callback = field_callback;
|
||||||
|
level.clientfield_alts[ field_type ][ field_name ] = struct;
|
||||||
|
|
||||||
|
dvar_name = field_type + "." + field_name;
|
||||||
|
setDvar( dvar_name, "" );
|
||||||
|
|
||||||
|
level thread handle_clientfield_alt_callbacks( dvar_name, field_type, field_name );
|
||||||
|
}
|
15
zm_ai_pack/scripts/zm/clientfield_alt_sys.gsc
Normal file
15
zm_ai_pack/scripts/zm/clientfield_alt_sys.gsc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
set_clientfield_alt_toplayer( field_type, field_name, ent, value )
|
||||||
|
{
|
||||||
|
entnum = ent getEntityNumber();
|
||||||
|
self setClientDvar( field_type + "." + field_name, entnum + " " + value );
|
||||||
|
}
|
||||||
|
|
||||||
|
set_clientfield_alt_allplayers( field_type, field_name, ent, value )
|
||||||
|
{
|
||||||
|
foreach ( player in level.players )
|
||||||
|
{
|
||||||
|
entnum = ent getEntityNumber();
|
||||||
|
player setClientDvar( field_type + "." + field_name, entnum + " " + value );
|
||||||
|
}
|
||||||
|
}
|
@ -47,8 +47,6 @@ main()
|
|||||||
// level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds;
|
// level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds;
|
||||||
// level.ai_data[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 );
|
// level.ai_data[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
keys = getArrayKeys( level.ai_data );
|
keys = getArrayKeys( level.ai_data );
|
||||||
for ( i = 0; i < keys.size; i++ )
|
for ( i = 0; i < keys.size; i++ )
|
||||||
{
|
{
|
||||||
|
@ -56,4 +56,6 @@ script,clientscripts/mp/zombies/_zm_ai_screecher.csc
|
|||||||
|
|
||||||
script,scripts/zm/zm_ai_pack_mod_debug_main.gsc
|
script,scripts/zm/zm_ai_pack_mod_debug_main.gsc
|
||||||
script,scripts/zm/zm_ai_pack_mod_main.csc
|
script,scripts/zm/zm_ai_pack_mod_main.csc
|
||||||
script,scripts/zm/zm_ai_pack_mod_main.gsc
|
script,scripts/zm/zm_ai_pack_mod_main.gsc
|
||||||
|
script,scripts/zm/clientfield_alt_sys.csc
|
||||||
|
script,scripts/zm/clientfield_alt_sys.gsc
|
Loading…
x
Reference in New Issue
Block a user