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

302 lines
13 KiB
Plaintext

#using scripts\shared\audio_shared;
#using scripts\shared\callbacks_shared;
#using scripts\shared\exploder_shared;
#using scripts\shared\filter_shared;
#using scripts\shared\footsteps_shared;
#using scripts\shared\system_shared;
#using scripts\shared\util_shared;
#using scripts\shared\vehicle_shared;
#using scripts\shared\vehicles\_driving_fx;
#using scripts\shared\abilities\gadgets\_gadget_vision_pulse;
#using scripts\shared\weapons\_sticky_grenade;
#using scripts\mp\killstreaks\_ai_tank;
#using scripts\mp\killstreaks\_airsupport;
#using scripts\mp\killstreaks\_helicopter;
#using scripts\mp\killstreaks\_qrdrone;
#using scripts\mp\killstreaks\_rcbomb;
#using scripts\shared\_burnplayer;
#using scripts\mp\_callbacks;
#using scripts\mp\_util;
#using scripts\mp\_vehicle;
#using scripts\mp\gametypes\_globallogic;
#using scripts\mp\gametypes\_globallogic_actor;
#namespace callback;
function autoexec __init__sytem__() { system::register("callback",&__init__,undefined,undefined); }
// Callback set up, clientside.
function __init__()
{
level thread set_default_callbacks();
}
function set_default_callbacks()
{
level.callbackPlayerSpawned = &playerspawned;
level.callbackLocalClientConnect = &localclientconnect;
level.callbackCreatingCorpse = &creating_corpse;
level.callbackEntitySpawned = &entityspawned;
level.callbackAirSupport = &airsupport;
//level.callbackDogSoundNotify = &dogs::play_dog_sound;
level.callbackPlayAIFootstep = &footsteps::playaifootstep;
level.callbackPlayLightLoopExploder = &exploder::playlightloopexploder;
level._custom_weapon_CB_Func = &callback::spawned_weapon_type;
level.gadgetVisionPulse_reveal_func = &gadget_vision_pulse::gadget_visionpulse_reveal;
}
function localclientconnect( localClientNum )
{
/# println( "*** Client script VM : Local client connect " + localClientNum ); #/
if ( isdefined( level.characterCustomizationSetup ) )
{
[[ level.characterCustomizationSetup ]]( localclientnum );
}
callback::callback( #"on_localclient_connect", localClientNum );
}
function playerspawned(localClientNum)
{
self endon( "entityshutdown" );
self notify( "playerspawned_callback" );
self endon( "playerspawned_callback" );
player = GetLocalPlayer(localClientNum);
if ( isdefined( level.infraredVisionset ) )
{
player SetInfraredVisionset( level.infraredVisionset );
}
if ( isdefined( level._playerspawned_override ) )
{
self thread [[level._playerspawned_override]]( localClientNum );
return;
}
/# PrintLn( "Player spawned" ); #/
if ( self isLocalPlayer() )
callback::callback( #"on_localplayer_spawned", localClientNum );
callback::callback( #"on_player_spawned", localClientNum );
}
function entityspawned(localClientNum)
{
self endon( "entityshutdown" );
if( self IsPlayer() )
{
if( isdefined( level._clientFaceAnimOnPlayerSpawned ) )
{
self thread [[level._clientFaceAnimOnPlayerSpawned]](localClientNum);
}
}
if ( isdefined( level._entityspawned_override ) )
{
self thread [[level._entityspawned_override]]( localClientNum );
return;
}
if ( !isdefined( self.type ) )
{
/# println( "Entity type undefined!" ); #/
return;
}
if ( self.type == "missile" )
{
if( isdefined( level._custom_weapon_CB_Func ) )
{
self thread [[level._custom_weapon_CB_Func]]( localClientNum );
}
}
else if ( self.type == "vehicle" || self.type == "helicopter" || self.type == "plane" )
{
if( isdefined(level._customVehicleCBFunc) )
{
self thread [[level._customVehicleCBFunc]](localClientNum);
}
self thread vehicle::field_toggle_exhaustfx_handler( localClientNum, undefined, false, true );
self thread vehicle::field_toggle_lights_handler( localClientNum, undefined, false, true );
if ( self.type == "plane" || self.type == "helicopter" )
{
self thread vehicle::aircraft_dustkick();
}
else
{
self thread driving_fx::play_driving_fx(localClientNum);
self thread vehicle::vehicle_rumble(localClientNum);
}
if( self.type == "helicopter" )
{
self thread helicopter::startfx_loop( localClientNum );
}
}
if ( self.type == "actor" )
{
if( isdefined(level._customActorCBFunc) )
{
self thread [[level._customActorCBFunc]](localClientNum);
}
}
}
function airsupport( localClientNum, x, y, z, type, yaw, team, teamfaction, owner, exittype, time, height )
{
pos = ( x, y, z );
switch( teamFaction )
{
case "v":
teamfaction = "vietcong";
break;
case "n":
case "nva":
teamfaction = "nva";
break;
case "j":
teamfaction = "japanese";
break;
case "m":
teamfaction = "marines";
break;
case "s":
teamfaction = "specops";
break;
case "r":
teamfaction = "russian";
break;
default:
/# println( "Warning: Invalid team char provided, defaulted to marines" ); #/
/# println( "Teamfaction received: " + teamFaction + "\n" ); #/
teamfaction = "marines";
break;
}
switch( team )
{
case "x":
team = "axis";
break;
case "l":
team = "allies";
break;
case "r":
team = "free";
break;
default:
/# println( "Invalid team used with playclientAirstike/napalm: " + team + "\n"); #/
team = "allies";
break;
}
data = spawnstruct();
data.team = team;
data.owner = owner;
data.bombsite = pos;
data.yaw = yaw;
direction = ( 0, yaw, 0 );
data.direction = direction;
data.flyHeight = height;
if ( type == "a" )
{
planeHalfDistance = 12000;
data.planeHalfDistance = planeHalfDistance;
data.startPoint = pos + VectorScale( anglestoforward( direction ), -1 * planeHalfDistance );
data.endPoint = pos + VectorScale( anglestoforward( direction ), planeHalfDistance );
data.planeModel = "t5_veh_air_b52";
data.flyBySound = "null";
data.washSound = "veh_b52_flyby_wash";
data.apexTime = 6145;
data.exitType = -1;
data.flySpeed = 2000;
data.flyTime = ( ( planeHalfDistance * 2 ) / data.flySpeed );
planeType = "airstrike";
//_airstrike::addPlaneEvent( localClientNum, planeType, data, time );
}
else if ( type == "n" )
{
planeHalfDistance = 24000;
data.planeHalfDistance = planeHalfDistance;
data.startPoint = pos + VectorScale( anglestoforward( direction ), -1 * planeHalfDistance );
data.endPoint = pos + VectorScale( anglestoforward( direction ), planeHalfDistance );
data.planeModel = airsupport::getPlaneModel( teamFaction );
data.flyBySound = "null";
data.washSound = "evt_us_napalm_wash";
data.apexTime = 2362;
data.exitType = exitType;
data.flySpeed = 7000;
data.flyTime = ( ( planeHalfDistance * 2 ) / data.flySpeed );
planeType = "napalm";
//_plane::addPlaneEvent( localClientNum, planeType, data, time );
}
else
{
/#
println( "" );
println( "Unhandled airsupport type, only A (airstrike) and N (napalm) supported" );
println( type );
println( "" );
#/
return;
}
}
function creating_corpse(localClientNum, player )
{
}
function callback_stunned( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
self.stunned = newVal;
/# PrintLn("stunned_callback"); #/
if ( newVal )
{
self notify("stunned");
}
else
{
self notify("not_stunned");
}
}
function callback_emp( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
self.emp = newVal;
/# PrintLn("emp_callback"); #/
if ( newVal )
{
self notify("emp");
}
else
{
self notify("not_emp");
}
}
function callback_proximity( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
{
self.enemyInProximity = newVal;
}