323 lines
17 KiB
Plaintext
323 lines
17 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\duplicaterender_mgr;
|
|
#using scripts\shared\util_shared;
|
|
|
|
#using scripts\mp\_shoutcaster;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#precache( "client_fx", "ui/fx_uplink_goal_marker" );
|
|
#precache( "client_fx", "ui/fx_uplink_goal_marker_flash" );
|
|
#precache( "client_fx", "ui/fx_uplink_goal_marker_white" );
|
|
#precache( "client_fx", "ui/fx_uplink_goal_marker_white_flash" );
|
|
|
|
function main()
|
|
{
|
|
clientfield::register( "allplayers", "ballcarrier", 1, 1, "int", &player_ballcarrier_changed, !true, true );
|
|
clientfield::register( "allplayers", "passoption", 1, 1, "int", &player_passoption_changed, !true, !true );
|
|
clientfield::register( "world", "ball_away" , 1, 1, "int", &world_ball_away_changed, !true, true );
|
|
clientfield::register( "world", "ball_score_allies" , 1, 1, "int", &world_ball_score_allies, !true, true );
|
|
clientfield::register( "world", "ball_score_axis" , 1, 1, "int", &world_ball_score_axis, !true, true );
|
|
|
|
callback::on_localclient_connect( &on_localclient_connect );
|
|
callback::on_spawned( &on_player_spawned );
|
|
|
|
if ( !GetDvarInt("tu11_programaticallyColoredGameFX") )
|
|
{
|
|
level.effect_scriptbundles = [];
|
|
level.effect_scriptbundles["goal"] = struct::get_script_bundle( "teamcolorfx", "teamcolorfx_uplink_goal" );
|
|
level.effect_scriptbundles["goal_score"] = struct::get_script_bundle( "teamcolorfx", "teamcolorfx_uplink_goal_score" );
|
|
}
|
|
}
|
|
|
|
function on_localclient_connect( localClientNum )
|
|
{
|
|
objective_ids = [];
|
|
|
|
while ( !isdefined( objective_ids["allies"] ) )
|
|
{
|
|
objective_ids["allies"] = ServerObjective_GetObjective( localClientNum, "ball_goal_allies" );
|
|
objective_ids["axis"] = ServerObjective_GetObjective( localClientNum, "ball_goal_axis" );
|
|
wait(0.05);
|
|
}
|
|
|
|
foreach( key, objective in objective_ids )
|
|
{
|
|
level.goals[key] = SpawnStruct();
|
|
level.goals[key].objectiveId = objective;
|
|
setup_goal( localClientNum, level.goals[key] );
|
|
}
|
|
|
|
setup_fx( localClientNum );
|
|
}
|
|
|
|
function on_player_spawned( localClientNum )
|
|
{
|
|
players = GetPlayers( localclientnum );
|
|
foreach( player in players )
|
|
{
|
|
if( player util::IsEnemyPlayer( self ) )
|
|
{
|
|
player duplicate_render::update_dr_flag( localClientNum, "ballcarrier", 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
function setup_goal( localClientNum, goal )
|
|
{
|
|
goal.origin = ServerObjective_GetObjectiveOrigin( localClientNum, goal.objectiveId );
|
|
goal_entity = ServerObjective_GetObjectiveEntity( localClientNum, goal.objectiveId );
|
|
|
|
if ( isdefined(goal_entity) )
|
|
{
|
|
goal.origin = goal_entity.origin;
|
|
}
|
|
|
|
goal.team = ServerObjective_GetObjectiveTeam( localClientNum, goal.objectiveId );
|
|
}
|
|
|
|
function setup_goal_fx( localClientNum, goal, effects )
|
|
{
|
|
if ( isdefined( goal.base_fx ) )
|
|
{
|
|
StopFx( localClientNum, goal.base_fx );
|
|
}
|
|
|
|
goal.base_fx = PlayFx(localClientNum, effects[goal.team], goal.origin );
|
|
SetFxTeam( localClientNum, goal.base_fx, goal.team );
|
|
}
|
|
|
|
function setup_fx( localClientNum )
|
|
{
|
|
effects = [];
|
|
|
|
if ( shoutcaster::is_shoutcaster_using_team_identity(localClientNum) )
|
|
{
|
|
if ( GetDvarInt("tu11_programaticallyColoredGameFX") )
|
|
{
|
|
effects["allies"] = "ui/fx_uplink_goal_marker_white";
|
|
effects["axis"] = "ui/fx_uplink_goal_marker_white";
|
|
}
|
|
else
|
|
{
|
|
effects = shoutcaster::get_color_fx( localClientNum, level.effect_scriptbundles["goal"] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
effects["allies"] = "ui/fx_uplink_goal_marker";
|
|
effects["axis"] = "ui/fx_uplink_goal_marker";
|
|
}
|
|
|
|
foreach( goal in level.goals)
|
|
{
|
|
thread setup_goal_fx(localClientNum, goal, effects );
|
|
thread resetOnDemoJump( localClientNum, goal, effects );
|
|
}
|
|
|
|
thread watch_for_team_change( localClientNum );
|
|
}
|
|
|
|
function play_score_fx( localClientNum, goal)
|
|
{
|
|
effects = [];
|
|
|
|
if ( shoutcaster::is_shoutcaster_using_team_identity(localClientNum) )
|
|
{
|
|
if ( GetDvarInt("tu11_programaticallyColoredGameFX") )
|
|
{
|
|
effects["allies"] = "ui/fx_uplink_goal_marker_white_flash";
|
|
effects["axis"] = "ui/fx_uplink_goal_marker_white_flash";
|
|
}
|
|
else
|
|
{
|
|
effects = shoutcaster::get_color_fx( localClientNum, level.effect_scriptbundles["goal_score"] );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
effects["allies"] = "ui/fx_uplink_goal_marker_flash";
|
|
effects["axis"] = "ui/fx_uplink_goal_marker_flash";
|
|
}
|
|
|
|
fx_handle = PlayFx(localClientNum, effects[goal.team], goal.origin );
|
|
SetFxTeam( localClientNum, fx_handle, goal.team );
|
|
}
|
|
|
|
function play_goal_score_fx( localClientNum, team, oldVal, newVal, bInitialSnap, bWasTimeJump )
|
|
{
|
|
if( ( newVal != oldVal ) && !bInitialSnap && !bWasTimeJump )
|
|
{
|
|
play_score_fx( localClientNum, level.goals[team] );
|
|
}
|
|
}
|
|
|
|
function world_ball_score_allies( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
play_goal_score_fx( localClientNum, "allies", oldVal, newVal, bInitialSnap, bWasTimeJump );
|
|
}
|
|
|
|
function world_ball_score_axis( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
play_goal_score_fx( localClientNum, "axis", oldVal, newVal, bInitialSnap, bWasTimeJump );
|
|
}
|
|
|
|
function player_ballcarrier_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
localplayer = getlocalplayer( localClientNum );
|
|
|
|
if( localplayer == self )
|
|
{
|
|
if( newVal )
|
|
{
|
|
self._hasBall = true;
|
|
}
|
|
else
|
|
{
|
|
self._hasBall = false;
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.passOption" ), 0 );
|
|
}
|
|
}
|
|
|
|
if( ( localplayer != self ) && self isFriendly( localClientNum ) )
|
|
{
|
|
self set_player_ball_carrier_dr( localClientNum, newVal );
|
|
}
|
|
else
|
|
{
|
|
self set_player_ball_carrier_dr( localClientNum, false );
|
|
}
|
|
|
|
// if ( newVal == 1 )
|
|
// {
|
|
// self set_hud(localClientNum);
|
|
// }
|
|
// else
|
|
// {
|
|
// self clear_hud( localClientNum );
|
|
// }
|
|
|
|
if ( isdefined( level.ball_carrier ) && level.ball_carrier != self )
|
|
return;
|
|
|
|
level notify( "watch_for_death" );
|
|
|
|
if ( newVal == 1 )
|
|
{
|
|
// we need to track when the player dies because if they watch killcam we will not get flag updates
|
|
self thread watch_for_death( localClientNum );
|
|
}
|
|
}
|
|
|
|
function set_hud( localClientNum )
|
|
{
|
|
level.ball_carrier = self;
|
|
|
|
if ( shoutcaster::is_shoutcaster( localClientNum ) )
|
|
{
|
|
friendly = self shoutcaster::is_friendly( localclientnum );
|
|
}
|
|
else
|
|
{
|
|
friendly = self isFriendly( localClientNum );
|
|
}
|
|
|
|
if( isdefined( self.name ) )
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballStatusText" ), self.name );
|
|
else
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballStatusText" ), "" );
|
|
|
|
if( isdefined( friendly ) )
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByFriendly" ), friendly );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByEnemy" ), !friendly );
|
|
}
|
|
else
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByFriendly" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByEnemy" ), 0 );
|
|
}
|
|
}
|
|
|
|
function clear_hud( localClientNum )
|
|
{
|
|
level.ball_carrier = undefined;
|
|
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByEnemy" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByFriendly" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballStatusText" ), &"MPUI_BALL_AWAY" );
|
|
}
|
|
|
|
function watch_for_death( localClientNum )
|
|
{
|
|
level endon( "watch_for_death" );
|
|
|
|
self waittill( "entityshutdown" );
|
|
|
|
//self clear_hud(localClientNum);
|
|
}
|
|
|
|
function player_passoption_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
localplayer = getlocalplayer( localClientNum );
|
|
|
|
if( ( localplayer != self ) && self isFriendly( localClientNum ) )
|
|
{
|
|
if( ( isdefined( localplayer._hasBall ) && localplayer._hasBall ) )
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.passOption" ), newVal );
|
|
}
|
|
}
|
|
}
|
|
|
|
function world_ball_away_changed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballAway" ), newVal );
|
|
|
|
//if( newVal == 0 || bInitialSnap )
|
|
//{
|
|
//SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByEnemy" ), 0 );
|
|
//SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballHeldByFriendly" ), 0 );
|
|
//SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "ballGametype.ballStatusText" ), &"MPUI_BALL_HOME" );
|
|
//}
|
|
}
|
|
|
|
function set_player_ball_carrier_dr( localClientNum, on_off )
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "ballcarrier", on_off );
|
|
}
|
|
|
|
function set_player_pass_option_dr( localClientNum, on_off )
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "passoption", on_off );
|
|
}
|
|
|
|
function resetOnDemoJump( localClientNum, goal, effects )
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "demo_jump" + localClientNum );
|
|
|
|
setup_goal_fx( localClientNum, goal, effects );
|
|
}
|
|
}
|
|
|
|
function watch_for_team_change( localClientNum )
|
|
{
|
|
level notify( "end_team_change_watch" );
|
|
level endon( "end_team_change_watch" );
|
|
|
|
level waittill( "team_changed" );
|
|
|
|
thread setup_fx( localClientNum );
|
|
} |