380 lines
8.9 KiB
Plaintext
380 lines
8.9 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
precachestring( &"SCRIPT_INTELLIGENCE_OF_EIGHTEEN" );
|
|
precachestring( &"SCRIPT_RORKEFILE_PREV_FOUND" );
|
|
precachestring( &"SCRIPT_RORKEFILE_PICKUP" );
|
|
precachestring( &"SCRIPT_INTELLIGENCE_PERCENT" );
|
|
precachestring( &"SCRIPT_INTELLIGENCE_UPLOADING" );
|
|
precacheshader( "torpedo_connection_bar" );
|
|
precacheshader( "torpedo_connection_frame" );
|
|
level.intel_items = create_array_of_intel_items();
|
|
setdvar( "ui_level_cheatpoints", level.intel_items.size );
|
|
level.intel_counter = 0;
|
|
setdvar( "ui_level_player_cheatpoints", level.intel_counter );
|
|
level.table_origins = create_array_of_origins_from_table();
|
|
initialize_intel();
|
|
|
|
if ( maps\_utility::is_specialop() )
|
|
{
|
|
remove_all_intel();
|
|
return;
|
|
}
|
|
|
|
intel_think();
|
|
wait 0.05;
|
|
}
|
|
|
|
remove_all_intel()
|
|
{
|
|
foreach ( var_2, var_1 in level.intel_items )
|
|
{
|
|
if ( !isdefined( var_1.removed ) )
|
|
var_1 remove_intel_item();
|
|
}
|
|
}
|
|
|
|
remove_intel_item()
|
|
{
|
|
self.removed = 1;
|
|
self.item hide();
|
|
self.item notsolid();
|
|
common_scripts\utility::trigger_off();
|
|
level.intel_counter++;
|
|
setdvar( "ui_level_player_cheatpoints", level.intel_counter );
|
|
self notify( "end_trigger_thread" );
|
|
}
|
|
|
|
initialize_intel()
|
|
{
|
|
foreach ( var_3, var_1 in level.intel_items )
|
|
{
|
|
var_2 = var_1.origin;
|
|
var_1.num = get_nums_from_origins( var_2 );
|
|
}
|
|
}
|
|
|
|
intel_think()
|
|
{
|
|
foreach ( var_2, var_1 in level.intel_items )
|
|
{
|
|
if ( var_1 check_item_found() )
|
|
{
|
|
var_1 remove_intel_item();
|
|
continue;
|
|
}
|
|
|
|
var_1 thread wait_for_pickup();
|
|
var_1 thread poll_for_found();
|
|
}
|
|
}
|
|
|
|
poll_for_found()
|
|
{
|
|
self endon( "end_loop_thread" );
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
if ( check_item_found() )
|
|
remove_intel_item();
|
|
}
|
|
else
|
|
return;
|
|
|
|
while ( !check_item_found() )
|
|
wait 0.05;
|
|
|
|
remove_intel_item();
|
|
}
|
|
|
|
check_item_found()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( !var_1 getplayerintelisfound( self.num ) )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
create_array_of_intel_items()
|
|
{
|
|
var_0 = getentarray( "intelligence_item", "targetname" );
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
var_0[var_1].item = getent( var_0[var_1].target, "targetname" );
|
|
var_0[var_1].found = 0;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
create_array_of_origins_from_table()
|
|
{
|
|
var_0 = 20;
|
|
var_1 = [];
|
|
|
|
for ( var_2 = 1; var_2 <= var_0; var_2++ )
|
|
{
|
|
var_3 = tablelookup( "maps/_intel_items.csv", 0, var_2, 4 );
|
|
|
|
if ( isdefined( var_3 ) && var_3 != "undefined" )
|
|
{
|
|
var_4 = strtok( var_3, "," );
|
|
|
|
for ( var_5 = 0; var_5 < var_4.size; var_5++ )
|
|
var_4[var_5] = int( var_4[var_5] );
|
|
|
|
var_1[var_2] = ( var_4[0], var_4[1], var_4[2] );
|
|
continue;
|
|
}
|
|
|
|
var_1[var_2] = undefined;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
award_intel()
|
|
{
|
|
save_intel_for_all_players();
|
|
updategamerprofileall();
|
|
waittillframeend;
|
|
remove_intel_item();
|
|
}
|
|
|
|
wait_for_pickup()
|
|
{
|
|
self endon( "end_trigger_thread" );
|
|
|
|
if ( self.classname == "trigger_use" )
|
|
{
|
|
self sethintstring( &"SCRIPT_RORKEFILE_PICKUP" );
|
|
self usetriggerrequirelookat();
|
|
}
|
|
|
|
thread upload_hold();
|
|
self waittill( "hold_complete" );
|
|
self notify( "end_loop_thread" );
|
|
intel_feedback( level.player );
|
|
award_intel();
|
|
}
|
|
|
|
upload_hold()
|
|
{
|
|
level.player.hold_count = 0;
|
|
|
|
while ( level.player.hold_count < 30 && isdefined( self ) )
|
|
{
|
|
level.player.hold_count = 0;
|
|
self stoploopsound( "intelligence_pickup_loop" );
|
|
self waittill( "trigger", var_0 );
|
|
self playloopsound( "intelligence_pickup_loop" );
|
|
setdvar( "ui_securing", "intel" );
|
|
setdvar( "ui_securing_progress", 0.0 );
|
|
thread progress_bar();
|
|
hold_count_check();
|
|
}
|
|
|
|
self notify( "hold_complete" );
|
|
self stoploopsound( "intelligence_pickup_loop" );
|
|
setdvar( "ui_securing_progress", 1.0 );
|
|
setdvar( "ui_securing", "" );
|
|
}
|
|
|
|
hold_count_check()
|
|
{
|
|
self endon( "stopped_pressing" );
|
|
|
|
while ( isdefined( self ) && isdefined( level.player ) )
|
|
{
|
|
if ( level.player usebuttonpressed() && distance( level.player.origin, self.origin ) < 128 && isalive( level.player ) )
|
|
level.player.hold_count++;
|
|
else
|
|
{
|
|
setdvar( "ui_securing", "" );
|
|
self stoploopsound( "intelligence_pickup_loop" );
|
|
self notify( "stopped_pressing" );
|
|
}
|
|
|
|
if ( level.player.hold_count >= 30 )
|
|
{
|
|
setdvar( "ui_securing", "" );
|
|
self notify( "stopped_pressing" );
|
|
self stoploopsound( "intelligence_pickup_loop" );
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
progress_bar()
|
|
{
|
|
self endon( "stopped_pressing" );
|
|
var_0 = 30;
|
|
var_1 = 8;
|
|
|
|
for ( var_2 = 0; var_2 < var_0; var_2++ )
|
|
{
|
|
setdvar( "ui_securing_progress", getdvarfloat( "ui_securing_progress" ) + 1 / var_0 );
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
intel_upload_text( var_0, var_1 )
|
|
{
|
|
self endon( "stopped_pressing" );
|
|
var_2 = 30;
|
|
var_3 = 10;
|
|
var_4 = 0;
|
|
|
|
for ( var_5 = 0; var_5 < var_2; var_5++ )
|
|
{
|
|
if ( var_4 > var_3 )
|
|
var_4 = 0;
|
|
|
|
if ( var_4 < var_3 / 2 )
|
|
var_0 settext( &"SCRIPT_INTELLIGENCE_UPLOADING" );
|
|
else
|
|
var_0 settext( "" );
|
|
|
|
var_1.label = int( var_5 / var_2 * 100 );
|
|
var_1 settext( &"SCRIPT_INTELLIGENCE_PERCENT" );
|
|
var_4++;
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
var_0 settext( &"SCRIPT_INTELLIGENCE_UPLOADING" );
|
|
var_1.label = "100";
|
|
var_1 settext( &"SCRIPT_INTELLIGENCE_PERCENT" );
|
|
}
|
|
|
|
save_intel_for_all_players()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( var_1 getplayerintelisfound( self.num ) )
|
|
continue;
|
|
|
|
var_1 setplayerintelfound( self.num );
|
|
}
|
|
|
|
logstring( "found intel item " + self.num );
|
|
maps\_endmission::updatesppercent();
|
|
}
|
|
|
|
give_point()
|
|
{
|
|
var_0 = self getlocalplayerprofiledata( "cheatPoints" );
|
|
self setlocalplayerprofiledata( "cheatPoints", var_0 + 1 );
|
|
}
|
|
|
|
intel_feedback( var_0 )
|
|
{
|
|
self.item hide();
|
|
self.item notsolid();
|
|
level thread common_scripts\utility::play_sound_in_space( "intelligence_pickup", self.item.origin );
|
|
var_1 = 3000;
|
|
var_2 = 700;
|
|
var_3 = var_1 + var_2 / 1000;
|
|
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( var_0 != var_5 && var_5 getplayerintelisfound( self.num ) )
|
|
continue;
|
|
|
|
var_6 = var_5 maps\_hud_util::createclientfontstring( "objective", 1.5 );
|
|
var_6.glowcolor = ( 0.7, 0.7, 0.3 );
|
|
var_6.glowalpha = 1;
|
|
var_6 setup_hud_elem();
|
|
var_6.y = -50;
|
|
var_6 setpulsefx( 60, var_1, var_2 );
|
|
var_7 = 0;
|
|
|
|
if ( var_0 == var_5 && var_5 getplayerintelisfound( self.num ) )
|
|
var_6.label = &"SCRIPT_RORKEFILE_PREV_FOUND";
|
|
else
|
|
{
|
|
var_6.label = &"SCRIPT_INTELLIGENCE_OF_EIGHTEEN";
|
|
var_5 give_point();
|
|
var_7 = var_5 getlocalplayerprofiledata( "cheatPoints" );
|
|
var_6 setvalue( var_7 );
|
|
}
|
|
|
|
if ( var_7 == 18 )
|
|
var_5 maps\_utility::player_giveachievement_wrapper( "EXT_1" );
|
|
|
|
var_6 common_scripts\utility::delaycall( var_3, ::destroy );
|
|
}
|
|
}
|
|
|
|
setup_hud_elem()
|
|
{
|
|
self.color = ( 1, 1, 1 );
|
|
self.alpha = 1;
|
|
self.x = 0;
|
|
self.alignx = "center";
|
|
self.aligny = "middle";
|
|
self.horzalign = "center";
|
|
self.vertalign = "middle";
|
|
self.foreground = 1;
|
|
}
|
|
|
|
assert_if_identical_origins()
|
|
{
|
|
var_0 = [];
|
|
|
|
for ( var_1 = 1; var_1 < 65; var_1++ )
|
|
{
|
|
var_2 = tablelookup( "maps/_intel_items.csv", 0, var_1, 4 );
|
|
var_3 = strtok( var_2, "," );
|
|
|
|
for ( var_1 = 0; var_1 < var_3.size; var_1++ )
|
|
var_3[var_1] = int( var_3[var_1] );
|
|
|
|
var_0[var_1] = ( var_3[0], var_3[1], var_3[2] );
|
|
}
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
{
|
|
if ( !isdefined( var_0[var_1] ) )
|
|
continue;
|
|
|
|
if ( var_0[var_1] == "undefined" )
|
|
continue;
|
|
|
|
for ( var_4 = 0; var_4 < var_0.size; var_4++ )
|
|
{
|
|
if ( !isdefined( var_0[var_4] ) )
|
|
continue;
|
|
|
|
if ( var_0[var_4] == "undefined" )
|
|
continue;
|
|
|
|
if ( var_1 == var_4 )
|
|
continue;
|
|
|
|
if ( var_0[var_1] == var_0[var_4] )
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
get_nums_from_origins( var_0 )
|
|
{
|
|
for ( var_1 = 1; var_1 < level.table_origins.size + 1; var_1++ )
|
|
{
|
|
if ( !isdefined( level.table_origins[var_1] ) )
|
|
continue;
|
|
|
|
if ( distancesquared( var_0, level.table_origins[var_1] ) < squared( 75 ) )
|
|
return var_1;
|
|
}
|
|
}
|