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

662 lines
18 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
create_intel_spots()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
setdvar( "scr_alien_intel_pillage", 1 );
level.intel_outline_func = ::intel_pillage_outline;
level.intel_pillage_show_func = ::create_intel_from_pillage_spot;
level.intel_pillage_allowed_func = ::intel_pillage_allowed_func;
level.outline_intel_watch_list = [];
level.intel_type_1 = [];
level.intel_type_2 = [];
create_intel_by_section( "pillage_intel_section_hard" );
}
create_intel_by_section( var_0 )
{
var_1 = common_scripts\utility::getstructarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
var_4 = common_scripts\utility::getstructarray( var_3.target, "targetname" );
var_3 create_intel_section( var_4 );
}
}
create_intel_section( var_0 )
{
var_1 = 0;
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_noteworthy ) )
{
var_4 = strtok( var_3.script_noteworthy, " " );
if ( isdefined( var_4 ) && var_4.size > 1 )
{
var_5 = "";
foreach ( var_7 in var_4 )
var_5 = var_5 + var_7;
iprintln( var_5 );
var_4 = strtok( var_5, "," );
}
else
var_4 = strtok( var_3.script_noteworthy, "," );
var_3.intel_type = var_4[0];
if ( isdefined( var_4[1] ) )
var_3.script_model = var_4[1];
if ( isdefined( var_4[2] ) )
var_3.location = var_4[2];
var_3.is_intel = 1;
switch ( var_3.intel_type )
{
case "intel_easy":
var_3.type = 1;
level.intel_type_1[level.intel_type_1.size] = var_3;
break;
case "intel_hard":
var_3.type = 2;
level.intel_type_2[level.intel_type_2.size] = var_3;
break;
}
add_to_outline_intel_watch_list( var_3 );
var_3 thread intel_listener();
}
}
}
create_intel_from_pillage_spot( var_0 )
{
var_1 = self;
if ( isdefined( self.pillageinfo ) )
self.pillageinfo = undefined;
var_1.script_model = "cnd_cellphone_01_on";
var_1.intel_type = "intel_easy";
var_1.is_intel = 1;
var_1.type = 1;
level.intel_type_1[level.intel_type_1.size] = var_1;
var_1.drop_override_func = ::drop_pillage_intel_on_ground;
add_to_outline_intel_watch_list( var_1 );
var_1 thread intel_listener();
}
intel_pillage_allowed_func()
{
var_0 = 6;
switch ( level.script )
{
case "mp_alien_armory":
var_0 = 6;
break;
case "mp_alien_beacon":
var_0 = 4;
break;
case "mp_alien_dlc3":
var_0 = 3;
break;
case "mp_alien_last":
var_0 = 4;
break;
default:
break;
}
var_1 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
if ( self getcoopplayerdatareservedint( var_1 ) < var_0 )
return 1;
else
return 0;
}
init_player_intel_total()
{
var_0 = "NO_INTEL_ACHIEVEMENT";
var_1 = 0;
var_2 = getdvar( "ui_mapname" );
switch ( var_2 )
{
case "mp_alien_armory":
var_0 = "FOUND_ALL_INTELS";
var_1 = 2;
break;
case "mp_alien_beacon":
var_0 = "FOUND_ALL_INTELS_MAYDAY";
break;
case "mp_alien_dlc3":
var_0 = "AWAKENING_ALL_INTEL";
break;
case "mp_alien_last":
var_0 = "LAST_ALL_INTEL";
break;
default:
break;
}
var_3 = self.achievement_list[var_0];
if ( isdefined( var_3 ) )
{
var_3.progress = aliens_get_intel_num_collected( self ) - var_1;
var_4 = self getcoopplayerdatareservedint( "intel_episode_4_location_4" );
if ( var_4 && var_2 == "mp_alien_last" )
var_3.progress = var_3.progress - 1;
maps\mp\alien\_achievement::update_achievement( var_0, 0 );
}
}
intel_on_player_connect()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
thread init_player_intel_total();
wait 1.0;
foreach ( var_1 in level.intel_type_2 )
{
if ( has_player_found( var_1.location ) )
turn_off_intel_for_player( var_1 );
}
}
build_intel_pillageitem_arrays( var_0 )
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return;
while ( !isdefined( level.pillageinfo ) )
wait 0.1;
switch ( var_0 )
{
case "easy":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.easy_intel );
break;
case "medium":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.medium_intel );
break;
case "hard":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "intel", level.pillageinfo.hard_intel );
break;
}
}
has_player_found( var_0 )
{
if ( isdefined( var_0 ) )
{
var_1 = "intel_episode_" + level.extinction_episode + "_location_" + var_0;
if ( self getcoopplayerdatareservedint( var_1 ) )
return 1;
}
return 0;
}
turn_off_intel_for_player( var_0 )
{
var_0.pillage_trigger disableplayeruse( self );
if ( var_0.type == 2 )
{
if ( !isdefined( self.outline_player_intel_found_list ) )
self.outline_player_intel_found_list = [];
if ( !common_scripts\utility::array_contains( self.outline_player_intel_found_list, var_0 ) )
{
self.outline_player_intel_found_list[self.outline_player_intel_found_list.size] = var_0;
var_0 thread wait_then_add_player_to_intel_array( self, 3.0 );
}
}
remove_from_outline_intel_watch_list( var_0 );
}
wait_then_add_player_to_intel_array( var_0, var_1 )
{
var_2 = var_0.name;
wait( var_1 );
if ( !isdefined( self.player_has_found_me ) )
self.player_has_found_me = [];
self.player_has_found_me[var_2] = 1;
}
intel_listener()
{
self.pillage_trigger = spawn( "script_model", self.origin );
if ( isdefined( self.script_model ) )
{
self.pillage_trigger setmodel( self.script_model );
if ( isdefined( self.angles ) )
self.pillage_trigger.angles = self.angles;
}
else
self.pillage_trigger setmodel( "tag_origin" );
thread toggle_usablity_on_distance();
self.pillage_trigger setcursorhint( "HINT_NOICON" );
self.pillage_trigger makeusable();
if ( self.type == 1 )
self.pillage_trigger sethintstring( &"ALIEN_PILLAGE_INTEL_PICKUP_INTEL" );
else
self.pillage_trigger sethintstring( &"ALIEN_PILLAGE_INTEL_PICKUP_INTEL" );
for (;;)
{
self.pillage_trigger waittill( "trigger", var_0 );
if ( self.type == 1 && var_0 intel_pillage_allowed_func() )
give_player_intel( var_0 );
if ( self.type == 2 && !var_0 has_player_found( self.location ) )
give_player_intel( var_0 );
}
}
aliens_get_intel_num_possible()
{
var_0 = 0;
var_1 = 0;
var_2 = 0;
var_3 = getdvar( "ui_mapname" );
switch ( var_3 )
{
case "mp_alien_armory":
var_0 = 2;
var_1 = 6;
var_2 = 5;
break;
case "mp_alien_beacon":
var_0 = 0;
var_1 = 4;
var_2 = 5;
break;
case "mp_alien_dlc3":
var_0 = 0;
var_1 = 3;
var_2 = 3;
break;
case "mp_alien_last":
var_0 = 0;
var_1 = 4;
var_2 = 4;
break;
}
return var_0 + var_1 + var_2;
}
aliens_get_intel_num_collected( var_0 )
{
var_1 = 0;
var_2 = 5;
var_3 = getdvar( "ui_mapname" );
switch ( var_3 )
{
case "mp_alien_armory":
var_1 = 2;
var_2 = 5;
break;
case "mp_alien_beacon":
var_1 = 0;
var_2 = 5;
break;
case "mp_alien_dlc3":
var_1 = 0;
var_2 = 3;
break;
case "mp_alien_last":
var_1 = 0;
var_2 = 4;
break;
}
var_4 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
var_5 = var_0 getcoopplayerdatareservedint( var_4 );
var_6 = 0;
for ( var_7 = 0; var_7 < var_2; var_7++ )
{
var_8 = "intel_episode_" + level.extinction_episode + "_location_" + ( var_7 + 1 );
if ( var_0 getcoopplayerdatareservedint( var_8 ) )
var_6++;
}
return var_1 + var_5 + var_6;
}
give_player_easter_egg_intel( var_0 )
{
var_1 = "intel_episode_" + level.extinction_episode + "_location_4";
if ( var_0 getcoopplayerdatareservedint( var_1 ) )
return;
var_0 setclientomnvar( "ui_alien_intel_num_collected", aliens_get_intel_num_collected( var_0 ) + 1 );
wait 0.5;
var_0 notify( "dlc_vo_notify", "intel_recovered", var_0 );
var_2 = 8;
var_3 = get_vo_to_play( var_2 );
var_0 thread play_intel_pickup_vo( var_3 );
var_0 setclientomnvar( "ui_alien_intercept_pickup", var_2 );
var_0 setcoopplayerdatareservedint( var_1, 1 );
}
give_player_intel( var_0 )
{
var_0 setclientomnvar( "ui_alien_intel_num_collected", aliens_get_intel_num_collected( var_0 ) + 1 );
wait 0.5;
var_1 = getdvar( "ui_mapname" );
var_0 notify( "dlc_vo_notify", "intel_recovered", var_0 );
if ( isdefined( self.location ) && self.type == 2 )
{
var_2 = 0;
switch ( var_1 )
{
case "mp_alien_armory":
var_2 = 8;
break;
case "mp_alien_beacon":
var_2 = 4;
break;
case "mp_alien_dlc3":
var_2 = 3;
break;
case "mp_alien_last":
var_2 = 4;
break;
}
var_3 = int( self.location ) + var_2;
var_4 = get_vo_to_play( var_3 );
var_0 thread play_intel_pickup_vo( var_4 );
var_0 setclientomnvar( "ui_alien_intercept_pickup", var_3 );
var_5 = "intel_episode_" + level.extinction_episode + "_location_" + self.location;
var_0 setcoopplayerdatareservedint( var_5, 1 );
var_0 turn_off_intel_for_player( self );
var_0 maps\mp\alien\_persistence::give_player_currency( 500 );
var_0 maps\mp\alien\_persistence::give_player_xp( 2500 );
var_0 maps\mp\alien\_achievement::update_intel_achievement();
}
else if ( self.type == 1 )
{
var_6 = 0;
switch ( var_1 )
{
case "mp_alien_armory":
var_6 = 3;
break;
case "mp_alien_beacon":
var_6 = 1;
break;
case "mp_alien_dlc3":
var_6 = 1;
break;
case "mp_alien_last":
var_6 = 1;
break;
}
var_7 = "intel_episode_" + level.extinction_episode + "_sequenced_count";
var_8 = var_0 getcoopplayerdatareservedint( var_7 );
var_9 = var_8 + var_6;
var_4 = get_vo_to_play( var_9 );
var_0 thread play_intel_pickup_vo( var_4 );
var_0 setclientomnvar( "ui_alien_nightfall_pickup", var_9 );
var_0 setcoopplayerdatareservedint( var_7, var_8 + 1 );
var_0 maps\mp\alien\_achievement::update_intel_achievement();
maps\mp\alien\_outline_proto::remove_outline( self.pillage_trigger );
self.pillageinfo = spawnstruct();
self.pillageinfo.type = undefined;
maps\mp\alien\_pillage::delete_pillage_trigger();
var_0 maps\mp\alien\_persistence::give_player_currency( 500 );
var_0 maps\mp\alien\_persistence::give_player_xp( 2500 );
}
}
play_intel_pickup_vo( var_0 )
{
wait 1.0;
if ( soundexists( var_0 ) )
self playsoundtoplayer( var_0, self );
}
get_vo_to_play( var_0 )
{
if ( !isdefined( level.intel_table ) )
{
var_1 = getdvar( "ui_mapname" );
switch ( var_1 )
{
case "mp_alien_armory":
level.intel_table = "mp/alien/alien_armory_intel.csv";
break;
case "mp_alien_beacon":
level.intel_table = "mp/alien/alien_beacon_intel.csv";
break;
case "mp_alien_dlc3":
level.intel_table = "mp/alien/alien_dlc3_intel.csv";
break;
case "mp_alien_last":
level.intel_table = "mp/alien/alien_last_intel.csv";
break;
}
}
var_2 = tablelookup( level.intel_table, 0, var_0, 15 );
return var_2;
}
drop_pillage_intel_on_ground( var_0 )
{
if ( self.pillage_trigger.model != "tag_origin" )
{
var_1 = ( 0, 0, 20 );
var_2 = ( 0, 0, 1 );
var_3 = ( 0, 0, 0 );
var_4 = ( 0, 0, 6 );
var_5 = ( 0, 0, 0 );
var_6 = getgroundposition( self.pillage_trigger.origin + var_1, 2 );
switch ( self.pillage_trigger.model )
{
case "cnd_cellphone_01_on":
var_4 = var_2;
var_5 = ( 0, 0, -90 );
break;
}
self.pillage_trigger.origin = var_6 + var_4;
self.pillage_trigger.angles = var_5;
}
thread turn_off_pillage_intel_for_players();
}
turn_off_pillage_intel_for_players()
{
foreach ( var_1 in level.players )
{
if ( !var_1 intel_pillage_allowed_func() )
var_1 thread turn_off_intel_for_player( self );
}
}
toggle_usablity_on_distance()
{
self endon( "death" );
self.pillage_trigger endon( "death" );
var_0 = 1;
var_1 = 2;
var_2 = 1024;
var_3 = 4900;
if ( self.type == var_0 )
var_3 = 27225;
while ( !isdefined( level.players ) )
wait 0.1;
for (;;)
{
foreach ( var_5 in level.players )
{
if ( !isdefined( var_5 ) || !isalive( var_5 ) )
continue;
var_6 = 1;
if ( distancesquared( var_5.origin, self.pillage_trigger.origin ) > var_3 )
var_6 = 0;
if ( distancesquared( var_5.origin, self.pillage_trigger.origin ) < var_2 && should_display_already_found_message( var_5 ) )
{
var_5 maps\mp\_utility::setlowermessage( "already_have_intel", &"ALIEN_PILLAGE_INTEL_ALREADY_HAVE_INTEL", 2 );
common_scripts\utility::waitframe();
continue;
}
if ( self.type == var_1 && var_5 has_player_found( self.location ) )
{
var_5 turn_off_intel_for_player( self );
var_6 = 0;
}
else if ( self.type == var_0 && !var_5 intel_pillage_allowed_func() )
{
var_5 turn_off_intel_for_player( self );
var_6 = 0;
}
if ( isdefined( var_5.outline_player_intel_found_list ) && common_scripts\utility::array_contains( var_5.outline_player_intel_found_list, self ) )
var_6 = 0;
if ( var_6 )
enable_usability( var_5 );
else
disable_usability( var_5 );
common_scripts\utility::waitframe();
}
wait 0.1;
}
}
should_display_already_found_message( var_0 )
{
if ( isdefined( self.player_has_found_me ) && isdefined( self.player_has_found_me[var_0.name] ) && self.player_has_found_me[var_0.name] )
return 1;
return 0;
}
enable_usability( var_0 )
{
self.pillage_trigger enableplayeruse( var_0 );
}
disable_usability( var_0 )
{
self.pillage_trigger disableplayeruse( var_0 );
}
intel_pillage_outline()
{
self endon( "refresh_outline" );
foreach ( var_3, var_1 in level.outline_intel_watch_list )
{
if ( !isdefined( var_1 ) || !isdefined( var_1.pillage_trigger ) )
continue;
var_2 = get_intel_item_outline_color( var_1 );
if ( var_2 == 3 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1.pillage_trigger, self, 3, 0, "high" );
else if ( var_2 == 4 )
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1.pillage_trigger, self, 1, 0, "high" );
else
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1.pillage_trigger, self );
if ( var_3 % 10 == 0 )
common_scripts\utility::waitframe();
}
}
get_intel_item_outline_color( var_0 )
{
if ( !isdefined( var_0 ) || !isdefined( var_0.pillage_trigger ) )
return 0;
if ( isdefined( self.outline_player_intel_found_list ) && common_scripts\utility::array_contains( self.outline_player_intel_found_list, var_0 ) )
return 0;
if ( var_0.type == 1 )
var_1 = 27225;
else
var_1 = 4900;
var_2 = distancesquared( self.origin, var_0.origin ) < var_1;
if ( !var_2 )
return 0;
if ( maps\mp\alien\_utility::is_holding_deployable() || maps\mp\alien\_utility::has_special_weapon() )
return 4;
return 3;
}
add_to_outline_intel_watch_list( var_0 )
{
if ( !common_scripts\utility::array_contains( level.outline_intel_watch_list, var_0 ) )
level.outline_intel_watch_list[level.outline_intel_watch_list.size] = var_0;
}
remove_from_outline_intel_watch_list( var_0 )
{
remove_outline_for_player( self, var_0.pillage_trigger );
}
remove_outline_for_player( var_0, var_1 )
{
if ( !isdefined( var_1 ) || !isdefined( var_0 ) )
return;
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_0 );
}