boiii-scripts/shared/vehicleriders_shared.csc
2023-04-13 17:30:38 +02:00

111 lines
10 KiB
Plaintext

#using scripts\codescripts\struct;
#using scripts\shared\animation_shared;
#using scripts\shared\array_shared;
#using scripts\shared\clientfield_shared;
#using scripts\shared\flag_shared;
#using scripts\shared\flagsys_shared;
#using scripts\shared\system_shared;
#using scripts\shared\trigger_shared;
#using scripts\shared\util_shared;
#using_animtree( "generic" );
#namespace vehicle;
function autoexec __init__sytem__() { system::register("vehicleriders",&__init__,undefined,undefined); }
function __init__()
{
a_registered_fields = [];
foreach ( bundle in struct::get_script_bundles( "vehicleriders" ) )
{
foreach ( object in bundle.objects )
{
if ( IsString( object.VehicleEnterAnim ) )
{
array::add( a_registered_fields, object.position + "_enter", false );
}
if ( IsString( object.VehicleExitAnim ) )
{
array::add( a_registered_fields, object.position + "_exit", false );
}
if ( IsString( object.VehicleRiderDeathAnim ) )
{
array::add( a_registered_fields, object.position + "_death", false );
}
}
}
foreach ( str_clientfield in a_registered_fields )
{
clientfield::register( "vehicle", str_clientfield, 1, 1, "counter", &play_vehicle_anim, !true, !true );
}
}
function play_vehicle_anim( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump ) // self = vehicle
{
s_bundle = struct::get_script_bundle( "vehicleriders", self.vehicleridersbundle );
str_pos = "";
str_action = "";
if ( StrEndsWith( fieldName, "_enter" ) )
{
str_pos = GetSubStr( fieldName, 0, fieldName.size - 6 );
str_action = "enter";
}
else if ( StrEndsWith( fieldName, "_exit" ) )
{
str_pos = GetSubStr( fieldName, 0, fieldName.size - 5 );
str_action = "exit";
}
else if ( StrEndsWith( fieldName, "_death" ) )
{
str_pos = GetSubStr( fieldName, 0, fieldName.size - 6 );
str_action = "death";
}
str_vh_anim = undefined;
foreach ( s_rider in s_bundle.objects )
{
if ( s_rider.position == str_pos )
{
switch ( str_action )
{
case "enter":
str_vh_anim = s_rider.VehicleEnterAnim;
break;
case "exit":
str_vh_anim = s_rider.VehicleExitAnim;
break;
case "death":
str_vh_anim = s_rider.VehicleRiderDeathAnim;
break;
}
break;
}
}
if ( isdefined( str_vh_anim ) )
{
self SetAnimRestart( str_vh_anim );
}
}
function set_vehicleriders_bundle( str_bundlename )
{
self.vehicleriders = struct::get_script_bundle( "vehicleriders", str_bundlename );
}