mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-06-10 11:17:59 -05:00
Add experimental alternative to clientfields.
This commit is contained in:
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" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 );
|
||||
|
||||
|
||||
|
||||
keys = getArrayKeys( level.ai_data );
|
||||
for ( i = 0; i < keys.size; i++ )
|
||||
{
|
||||
|
Reference in New Issue
Block a user