229 lines
14 KiB
Plaintext
229 lines
14 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\util_shared;
|
|
|
|
#using scripts\mp\_shoutcaster;
|
|
|
|
|
|
|
|
|
|
#precache( "client_fx", "ui/fx_koth_marker_blue" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_orng" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_neutral" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_contested" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_blue_window" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_orng_window" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_neutral_window" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_contested_window" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_white" );
|
|
#precache( "client_fx", "ui/fx_koth_marker_white_window" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function main()
|
|
{
|
|
level.current_zone = [];
|
|
level.current_state = [];
|
|
for( i = 0; i < 4; i++ )
|
|
{
|
|
level.current_zone[i] = 0;
|
|
level.current_state[i] = 0;
|
|
}
|
|
|
|
level.hardPoints = [];
|
|
level.visuals = [];
|
|
level.hardPointFX = [];
|
|
|
|
clientfield::register( "world", "hardpoint", 1, 5, "int",&hardpoint, !true, !true );
|
|
clientfield::register( "world", "hardpointteam", 1, 5, "int",&hardpoint_state, !true, !true );
|
|
|
|
level.effect_scriptbundles = [];
|
|
|
|
level.effect_scriptbundles["zoneEdgeMarker"] = struct::get_script_bundle( "teamcolorfx", "teamcolorfx_koth_edge_marker" );
|
|
level.effect_scriptbundles["zoneEdgeMarkerWndw"] = struct::get_script_bundle( "teamcolorfx", "teamcolorfx_koth_edge_marker_window" );
|
|
|
|
level._effect["zoneEdgeMarker"] = [];
|
|
level._effect["zoneEdgeMarker"][0] = "ui/fx_koth_marker_neutral";
|
|
level._effect["zoneEdgeMarker"][1] = "ui/fx_koth_marker_blue";
|
|
level._effect["zoneEdgeMarker"][2] = "ui/fx_koth_marker_orng";
|
|
level._effect["zoneEdgeMarker"][3] = "ui/fx_koth_marker_contested";
|
|
|
|
level._effect["zoneEdgeMarkerWndw"] = [];
|
|
level._effect["zoneEdgeMarkerWndw"][0] = "ui/fx_koth_marker_neutral_window";
|
|
level._effect["zoneEdgeMarkerWndw"][1] = "ui/fx_koth_marker_blue_window";
|
|
level._effect["zoneEdgeMarkerWndw"][2] = "ui/fx_koth_marker_orng_window";
|
|
level._effect["zoneEdgeMarkerWndw"][3] = "ui/fx_koth_marker_contested_window";
|
|
}
|
|
|
|
function get_shoutcaster_fx(local_client_num)
|
|
{
|
|
effects = [];
|
|
effects["zoneEdgeMarker"][0] = level._effect["zoneEdgeMarker"][0];
|
|
effects["zoneEdgeMarker"][3] = level._effect["zoneEdgeMarker"][3];
|
|
effects["zoneEdgeMarkerWndw"][0] = level._effect["zoneEdgeMarkerWndw"][0];
|
|
effects["zoneEdgeMarkerWndw"][3] = level._effect["zoneEdgeMarkerWndw"][3];
|
|
|
|
if ( GetDvarInt("tu11_programaticallyColoredGameFX") )
|
|
{
|
|
effects["zoneEdgeMarker"][1] = "ui/fx_koth_marker_white";
|
|
effects["zoneEdgeMarker"][2] = "ui/fx_koth_marker_white";
|
|
effects["zoneEdgeMarkerWndw"][1] = "ui/fx_koth_marker_white_window";
|
|
effects["zoneEdgeMarkerWndw"][2] = "ui/fx_koth_marker_white_window";
|
|
}
|
|
else
|
|
{
|
|
caster_effects = [];
|
|
caster_effects["zoneEdgeMarker"] = shoutcaster::get_color_fx( local_client_num, level.effect_scriptbundles["zoneEdgeMarker"] );
|
|
caster_effects["zoneEdgeMarkerWndw"] = shoutcaster::get_color_fx( local_client_num, level.effect_scriptbundles["zoneEdgeMarkerWndw"] );
|
|
|
|
effects["zoneEdgeMarker"][1] = caster_effects["zoneEdgeMarker"]["allies"];
|
|
effects["zoneEdgeMarker"][2] = caster_effects["zoneEdgeMarker"]["axis"];
|
|
effects["zoneEdgeMarkerWndw"][1] = caster_effects["zoneEdgeMarkerWndw"]["allies"];
|
|
effects["zoneEdgeMarkerWndw"][2] = caster_effects["zoneEdgeMarkerWndw"]["axis"];
|
|
}
|
|
|
|
return effects;
|
|
}
|
|
|
|
function get_fx_state( local_client_num, state, is_shoutcaster )
|
|
{
|
|
if ( is_shoutcaster )
|
|
return state;
|
|
|
|
if ( state == 1 )
|
|
{
|
|
if ( util::friend_not_foe_team( local_client_num, "allies" ) )
|
|
return 1;
|
|
else
|
|
return 2;
|
|
}
|
|
else if ( state == 2 )
|
|
{
|
|
if ( util::friend_not_foe_team( local_client_num, "axis" ) )
|
|
return 1;
|
|
else
|
|
return 2;
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
function get_fx( fx_name, fx_state, effects )
|
|
{
|
|
return effects[fx_name][fx_state];
|
|
}
|
|
|
|
function setup_hardpoint_fx( local_client_num, zone_index, state )
|
|
{
|
|
effects = [];
|
|
|
|
if ( shoutcaster::is_shoutcaster_using_team_identity(local_client_num) )
|
|
{
|
|
effects = get_shoutcaster_fx(local_client_num);
|
|
}
|
|
else
|
|
{
|
|
effects["zoneEdgeMarker"] = level._effect["zoneEdgeMarker"];
|
|
effects["zoneEdgeMarkerWndw"] = level._effect["zoneEdgeMarkerWndw"];
|
|
}
|
|
|
|
if ( isdefined( level.hardPointFX[local_client_num] ) )
|
|
{
|
|
foreach ( fx in level.hardPointFX[local_client_num] )
|
|
{
|
|
StopFx( local_client_num, fx );
|
|
}
|
|
}
|
|
level.hardPointFX[local_client_num] = [];
|
|
|
|
if ( zone_index )
|
|
{
|
|
if ( isdefined( level.visuals[zone_index] ) )
|
|
{
|
|
fx_state = get_fx_state( local_client_num, state, shoutcaster::is_shoutcaster(local_client_num) );
|
|
|
|
foreach ( visual in level.visuals[zone_index] )
|
|
{
|
|
if ( !isdefined(visual.script_fxid ) )
|
|
continue;
|
|
|
|
fxid = get_fx( visual.script_fxid, fx_state, effects );
|
|
|
|
if ( isdefined(visual.angles) )
|
|
forward = AnglesToForward( visual.angles );
|
|
else
|
|
forward = ( 0,0,0 );
|
|
|
|
fxHandle = PlayFX( local_client_num, fxid, visual.origin, forward );
|
|
level.hardPointFX[local_client_num][level.hardPointFX[local_client_num].size] = fxHandle;
|
|
if ( isdefined( fxHandle ) )
|
|
{
|
|
if ( state == 1 )
|
|
{
|
|
SetFxTeam( local_client_num, fxHandle, "allies" );
|
|
}
|
|
else if ( state == 2 )
|
|
{
|
|
SetFxTeam( local_client_num, fxHandle, "axis" );
|
|
}
|
|
else
|
|
{
|
|
SetFxTeam( local_client_num, fxHandle, "free" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
thread watch_for_team_change( local_client_num );
|
|
}
|
|
|
|
function hardpoint(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
|
|
{
|
|
if ( level.hardPoints.size == 0 )
|
|
{
|
|
hardpoints = struct::get_array( "koth_zone_center", "targetname" );
|
|
foreach( point in hardpoints )
|
|
{
|
|
level.hardPoints[point.script_index] = point;
|
|
}
|
|
|
|
foreach( point in level.hardPoints )
|
|
{
|
|
level.visuals[point.script_index] = struct::get_array( point.target, "targetname" );
|
|
}
|
|
}
|
|
|
|
level.current_zone[localClientNum] = newVal;
|
|
level.current_state[localClientNum] = 0;
|
|
|
|
setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
|
|
}
|
|
|
|
function hardpoint_state(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
|
|
{
|
|
if ( newVal != level.current_state[localClientNum] )
|
|
{
|
|
level.current_state[localClientNum] = newVal;
|
|
setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
|
|
}
|
|
}
|
|
|
|
function watch_for_team_change( localClientNum )
|
|
{
|
|
level notify( "end_team_change_watch" );
|
|
level endon( "end_team_change_watch" );
|
|
|
|
level waittill( "team_changed" );
|
|
|
|
wait(0.05);
|
|
|
|
thread setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
|
|
} |