iw6-scripts/maps/_intelligence.gsc
2024-02-13 13:20:49 +01:00

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;
}
}