2056 lines
56 KiB
Plaintext
2056 lines
56 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
setskill( var_0 )
|
|
{
|
|
if ( !isdefined( level.script ) )
|
|
level.script = tolower( getdvar( "mapname" ) );
|
|
|
|
if ( !isdefined( var_0 ) || var_0 == 0 )
|
|
{
|
|
if ( isdefined( level.gameskill ) )
|
|
return;
|
|
|
|
if ( !isdefined( level.custom_player_attacker ) )
|
|
level.custom_player_attacker = ::return_false;
|
|
|
|
level.global_damage_func_ads = ::empty_kill_func;
|
|
level.global_damage_func = ::empty_kill_func;
|
|
level.global_kill_func = ::empty_kill_func;
|
|
maps\_utility::set_console_status();
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
var_2 maps\_utility::ent_flag_init( "player_has_red_flashing_overlay" );
|
|
var_2 maps\_utility::ent_flag_init( "player_is_invulnerable" );
|
|
var_2 maps\_utility::ent_flag_init( "player_zero_attacker_accuracy" );
|
|
var_2 maps\_utility::ent_flag_init( "player_no_auto_blur" );
|
|
var_2 maps\_utility::ent_flag_init( "near_death_vision_enabled" );
|
|
var_2 maps\_utility::ent_flag_set( "near_death_vision_enabled" );
|
|
var_2.gs = spawnstruct();
|
|
var_2 init_screeneffect_vars();
|
|
var_2.a = spawnstruct();
|
|
var_2.damage_functions = [];
|
|
var_2 maps\_player_stats::init_stats();
|
|
var_2 maps\_utility::ent_flag_init( "global_hint_in_use" );
|
|
var_2.pers = [];
|
|
|
|
if ( !isdefined( var_2.baseignorerandombulletdamage ) )
|
|
var_2.baseignorerandombulletdamage = 0;
|
|
|
|
var_2.disabledweapon = 0;
|
|
var_2.disabledweaponswitch = 0;
|
|
var_2.disabledusability = 0;
|
|
var_2 setoffhandprimaryclass( "frag" );
|
|
}
|
|
|
|
level.difficultytype[0] = "easy";
|
|
level.difficultytype[1] = "normal";
|
|
level.difficultytype[2] = "hardened";
|
|
level.difficultytype[3] = "veteran";
|
|
level.difficultystring["easy"] = &"GAMESKILL_EASY";
|
|
level.difficultystring["normal"] = &"GAMESKILL_NORMAL";
|
|
level.difficultystring["hardened"] = &"GAMESKILL_HARDENED";
|
|
level.difficultystring["veteran"] = &"GAMESKILL_VETERAN";
|
|
thread gameskill_change_monitor();
|
|
}
|
|
|
|
setdvarifuninitialized( "autodifficulty_playerDeathTimer", 0 );
|
|
anim.run_accuracy = 0.5;
|
|
anim.walk_accuracy = 0.8;
|
|
setdvar( "autodifficulty_frac", 0 );
|
|
level.difficultysettings_frac_data_points = [];
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
var_2 init_take_cover_warnings();
|
|
var_2 thread increment_take_cover_warnings_on_death();
|
|
}
|
|
|
|
level.mg42badplace_mintime = 8;
|
|
level.mg42badplace_maxtime = 16;
|
|
level.difficultysettings["playerGrenadeBaseTime"]["easy"] = 40000;
|
|
level.difficultysettings["playerGrenadeBaseTime"]["normal"] = 35000;
|
|
level.difficultysettings["playerGrenadeBaseTime"]["hardened"] = 25000;
|
|
level.difficultysettings["playerGrenadeBaseTime"]["veteran"] = 25000;
|
|
level.difficultysettings["playerGrenadeRangeTime"]["easy"] = 20000;
|
|
level.difficultysettings["playerGrenadeRangeTime"]["normal"] = 15000;
|
|
level.difficultysettings["playerGrenadeRangeTime"]["hardened"] = 10000;
|
|
level.difficultysettings["playerGrenadeRangeTime"]["veteran"] = 10000;
|
|
level.difficultysettings["playerDoubleGrenadeTime"]["easy"] = 3600000;
|
|
level.difficultysettings["playerDoubleGrenadeTime"]["normal"] = 150000;
|
|
level.difficultysettings["playerDoubleGrenadeTime"]["hardened"] = 90000;
|
|
level.difficultysettings["playerDoubleGrenadeTime"]["veteran"] = 90000;
|
|
level.difficultysettings["double_grenades_allowed"]["easy"] = 0;
|
|
level.difficultysettings["double_grenades_allowed"]["normal"] = 1;
|
|
level.difficultysettings["double_grenades_allowed"]["hardened"] = 1;
|
|
level.difficultysettings["double_grenades_allowed"]["veteran"] = 1;
|
|
level.difficultysettings["threatbias"]["easy"] = 100;
|
|
level.difficultysettings["threatbias"]["normal"] = 150;
|
|
level.difficultysettings["threatbias"]["hardened"] = 200;
|
|
level.difficultysettings["threatbias"]["veteran"] = 400;
|
|
level.difficultysettings["base_enemy_accuracy"]["easy"] = 0.9;
|
|
level.difficultysettings["base_enemy_accuracy"]["normal"] = 1.0;
|
|
level.difficultysettings["base_enemy_accuracy"]["hardened"] = 1.15;
|
|
level.difficultysettings["base_enemy_accuracy"]["veteran"] = 1.15;
|
|
level.difficultysettings["accuracyDistScale"]["easy"] = 1.0;
|
|
level.difficultysettings["accuracyDistScale"]["normal"] = 1.0;
|
|
level.difficultysettings["accuracyDistScale"]["hardened"] = 0.6;
|
|
level.difficultysettings["accuracyDistScale"]["veteran"] = 0.8;
|
|
level.difficultysettings["min_sniper_burst_delay_time"]["easy"] = 3.0;
|
|
level.difficultysettings["min_sniper_burst_delay_time"]["normal"] = 2.0;
|
|
level.difficultysettings["min_sniper_burst_delay_time"]["hardened"] = 1.5;
|
|
level.difficultysettings["min_sniper_burst_delay_time"]["veteran"] = 1.1;
|
|
level.difficultysettings["max_sniper_burst_delay_time"]["easy"] = 4.0;
|
|
level.difficultysettings["max_sniper_burst_delay_time"]["normal"] = 3.0;
|
|
level.difficultysettings["max_sniper_burst_delay_time"]["hardened"] = 2.0;
|
|
level.difficultysettings["max_sniper_burst_delay_time"]["veteran"] = 1.5;
|
|
level.difficultysettings["dog_health"]["easy"] = 0.25;
|
|
level.difficultysettings["dog_health"]["normal"] = 0.75;
|
|
level.difficultysettings["dog_health"]["hardened"] = 1.0;
|
|
level.difficultysettings["dog_health"]["veteran"] = 1.0;
|
|
level.difficultysettings["dog_presstime"]["easy"] = 415;
|
|
level.difficultysettings["dog_presstime"]["normal"] = 375;
|
|
level.difficultysettings["dog_presstime"]["hardened"] = 250;
|
|
level.difficultysettings["dog_presstime"]["veteran"] = 225;
|
|
level.difficultysettings["dog_hits_before_kill"]["easy"] = 2;
|
|
level.difficultysettings["dog_hits_before_kill"]["normal"] = 1;
|
|
level.difficultysettings["dog_hits_before_kill"]["hardened"] = 0;
|
|
level.difficultysettings["dog_hits_before_kill"]["veteran"] = 0;
|
|
level.difficultysettings["pain_test"]["easy"] = ::always_pain;
|
|
level.difficultysettings["pain_test"]["normal"] = ::always_pain;
|
|
level.difficultysettings["pain_test"]["hardened"] = ::pain_protection;
|
|
level.difficultysettings["pain_test"]["veteran"] = ::pain_protection;
|
|
level.difficultysettings["missTimeConstant"]["easy"] = 1.0;
|
|
level.difficultysettings["missTimeConstant"]["normal"] = 0.05;
|
|
level.difficultysettings["missTimeConstant"]["hardened"] = 0;
|
|
level.difficultysettings["missTimeConstant"]["veteran"] = 0;
|
|
level.difficultysettings["missTimeDistanceFactor"]["easy"] = 0.0008;
|
|
level.difficultysettings["missTimeDistanceFactor"]["normal"] = 0.0001;
|
|
level.difficultysettings["missTimeDistanceFactor"]["hardened"] = 0.00005;
|
|
level.difficultysettings["missTimeDistanceFactor"]["veteran"] = 0;
|
|
level.difficultysettings["flashbangedInvulFactor"]["easy"] = 0.25;
|
|
level.difficultysettings["flashbangedInvulFactor"]["normal"] = 0;
|
|
level.difficultysettings["flashbangedInvulFactor"]["hardened"] = 0;
|
|
level.difficultysettings["flashbangedInvulFactor"]["veteran"] = 0;
|
|
level.difficultysettings["player_criticalBulletDamageDist"]["easy"] = 0;
|
|
level.difficultysettings["player_criticalBulletDamageDist"]["normal"] = 0;
|
|
level.difficultysettings["player_criticalBulletDamageDist"]["hardened"] = 0;
|
|
level.difficultysettings["player_criticalBulletDamageDist"]["veteran"] = 0;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["easy"] = 4000;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 600;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 100;
|
|
level.difficultysettings["invulTime_preShield"]["easy"] = 0.6;
|
|
level.difficultysettings["invulTime_preShield"]["normal"] = 0.5;
|
|
level.difficultysettings["invulTime_preShield"]["hardened"] = 0.3;
|
|
level.difficultysettings["invulTime_preShield"]["veteran"] = 0.0;
|
|
level.difficultysettings["invulTime_onShield"]["easy"] = 1.6;
|
|
level.difficultysettings["invulTime_onShield"]["normal"] = 1.0;
|
|
level.difficultysettings["invulTime_onShield"]["hardened"] = 0.5;
|
|
level.difficultysettings["invulTime_onShield"]["veteran"] = 0.25;
|
|
level.difficultysettings["invulTime_postShield"]["easy"] = 0.5;
|
|
level.difficultysettings["invulTime_postShield"]["normal"] = 0.4;
|
|
level.difficultysettings["invulTime_postShield"]["hardened"] = 0.3;
|
|
level.difficultysettings["invulTime_postShield"]["veteran"] = 0.0;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["easy"] = 4000;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 4000;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 3000;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 1200;
|
|
level.difficultysettings["worthyDamageRatio"]["easy"] = 0.0;
|
|
level.difficultysettings["worthyDamageRatio"]["normal"] = 0.1;
|
|
level.difficultysettings["worthyDamageRatio"]["hardened"] = 0.3;
|
|
level.difficultysettings["worthyDamageRatio"]["veteran"] = 0.3;
|
|
level.difficultysettings["playerDifficultyHealth"]["easy"] = 475;
|
|
level.difficultysettings["playerDifficultyHealth"]["normal"] = 275;
|
|
level.difficultysettings["playerDifficultyHealth"]["hardened"] = 165;
|
|
level.difficultysettings["playerDifficultyHealth"]["veteran"] = 115;
|
|
level.difficultysettings["longRegenTime"]["easy"] = 5000;
|
|
level.difficultysettings["longRegenTime"]["normal"] = 5000;
|
|
level.difficultysettings["longRegenTime"]["hardened"] = 3200;
|
|
level.difficultysettings["longRegenTime"]["veteran"] = 3200;
|
|
level.difficultysettings["healthOverlayCutoff"]["easy"] = 0.02;
|
|
level.difficultysettings["healthOverlayCutoff"]["normal"] = 0.02;
|
|
level.difficultysettings["healthOverlayCutoff"]["hardened"] = 0.02;
|
|
level.difficultysettings["healthOverlayCutoff"]["veteran"] = 0.02;
|
|
level.difficultysettings["health_regenRate"]["easy"] = 0.02;
|
|
level.difficultysettings["health_regenRate"]["normal"] = 0.02;
|
|
level.difficultysettings["health_regenRate"]["hardened"] = 0.02;
|
|
level.difficultysettings["health_regenRate"]["veteran"] = 0.02;
|
|
level.difficultysettings["explosivePlantTime"]["easy"] = 10;
|
|
level.difficultysettings["explosivePlantTime"]["normal"] = 10;
|
|
level.difficultysettings["explosivePlantTime"]["hardened"] = 5;
|
|
level.difficultysettings["explosivePlantTime"]["veteran"] = 5;
|
|
level.difficultysettings["player_downed_buffer_time"]["normal"] = 2;
|
|
level.difficultysettings["player_downed_buffer_time"]["hardened"] = 1.5;
|
|
level.difficultysettings["player_downed_buffer_time"]["veteran"] = 0;
|
|
level.lastplayersighted = 0;
|
|
setsaveddvar( "player_meleeDamageMultiplier", 0.266667 );
|
|
|
|
if ( isdefined( level.custom_gameskill_func ) )
|
|
[[ level.custom_gameskill_func ]]();
|
|
|
|
if ( coop_with_one_player_downed() )
|
|
make_remaining_player_a_little_stronger();
|
|
|
|
updategameskill();
|
|
updatealldifficulty();
|
|
setdvar( "autodifficulty_original_setting", level.gameskill );
|
|
}
|
|
|
|
init_screeneffect_vars()
|
|
{
|
|
self.gs.screeneffect = [];
|
|
var_0 = [ "bottom", "left", "right" ];
|
|
var_1 = [ "bloodsplat", "dirt" ];
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
self.gs.screeneffect[var_3][var_5] = 0;
|
|
self.gs.screeneffect[var_3 + "_count"][var_5] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
coop_player_in_special_ops_survival()
|
|
{
|
|
setsaveddvar( "player_meleeDamageMultiplier", 0.26 );
|
|
}
|
|
|
|
solo_player_in_special_ops()
|
|
{
|
|
if ( !maps\_utility::is_survival() )
|
|
{
|
|
setsaveddvar( "player_deathInvulnerableToMelee", "1" );
|
|
setsaveddvar( "ai_accuracy_attackercountDecrease", "0.6" );
|
|
}
|
|
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["normal"] = 2000;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["hardened"] = 2000;
|
|
level.difficultysettings["playerHealth_RegularRegenDelay"]["veteran"] = 900;
|
|
|
|
if ( !maps\_utility::is_survival() )
|
|
level.difficultysettings["invulTime_onShield"]["normal"] = 2.5;
|
|
else
|
|
level.difficultysettings["invulTime_onShield"]["normal"] = 1.5;
|
|
|
|
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 3000;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1300;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 800;
|
|
level.difficultysettings["longRegenTime"]["normal"] = 4500;
|
|
level.difficultysettings["longRegenTime"]["hardened"] = 4500;
|
|
level.difficultysettings["longRegenTime"]["veteran"] = 4500;
|
|
level.difficultysettings["playerDifficultyHealth"]["normal"] = 350;
|
|
level.difficultysettings["playerDifficultyHealth"]["hardened"] = 205;
|
|
level.difficultysettings["playerDifficultyHealth"]["veteran"] = 205;
|
|
|
|
if ( !maps\_utility::is_survival() )
|
|
setsaveddvar( "player_meleeDamageMultiplier", 0.5 );
|
|
else
|
|
setsaveddvar( "player_meleeDamageMultiplier", 0.26 );
|
|
}
|
|
|
|
solo_player_in_coop_gameskill_settings()
|
|
{
|
|
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1200;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["veteran"] = 200;
|
|
var_0 = 1.35;
|
|
level.difficultysettings["playerDifficultyHealth"]["normal"] = int( 275 * var_0 );
|
|
level.difficultysettings["playerDifficultyHealth"]["hardened"] = int( 165 * var_0 );
|
|
level.difficultysettings["playerDifficultyHealth"]["veteran"] = int( 138.0 );
|
|
}
|
|
|
|
make_remaining_player_a_little_stronger()
|
|
{
|
|
level.difficultysettings["player_deathInvulnerableTime"]["normal"] = 2500;
|
|
level.difficultysettings["player_deathInvulnerableTime"]["hardened"] = 1000;
|
|
var_0 = 1.25;
|
|
level.difficultysettings["playerDifficultyHealth"]["normal"] = int( 275 * var_0 );
|
|
level.difficultysettings["playerDifficultyHealth"]["hardened"] = int( 165 * var_0 );
|
|
}
|
|
|
|
updatealldifficulty()
|
|
{
|
|
setglobaldifficulty();
|
|
|
|
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
|
|
level.players[var_0] setdifficulty();
|
|
}
|
|
|
|
setdifficulty()
|
|
{
|
|
set_difficulty_from_locked_settings();
|
|
}
|
|
|
|
setglobaldifficulty()
|
|
{
|
|
var_0 = ::get_locked_difficulty_val_global;
|
|
var_1 = get_skill_from_index( level.gameskill );
|
|
anim.dog_health = [[ var_0 ]]( "dog_health", level.gameskill );
|
|
anim.pain_test = level.difficultysettings["pain_test"][var_1];
|
|
level.explosiveplanttime = level.difficultysettings["explosivePlantTime"][var_1];
|
|
anim.min_sniper_burst_delay_time = [[ var_0 ]]( "min_sniper_burst_delay_time", level.gameskill );
|
|
anim.max_sniper_burst_delay_time = [[ var_0 ]]( "max_sniper_burst_delay_time", level.gameskill );
|
|
setsaveddvar( "ai_accuracyDistScale", [[ var_0 ]]( "accuracyDistScale", level.gameskill ) );
|
|
|
|
if ( maps\_utility::laststand_enabled() )
|
|
level.player_downed_death_buffer_time = level.difficultysettings["player_downed_buffer_time"][var_1];
|
|
|
|
maps\_mgturret::setdifficulty();
|
|
}
|
|
|
|
updategameskill()
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( maps\_utility::is_survival() )
|
|
{
|
|
var_1.gameskill = 1;
|
|
continue;
|
|
}
|
|
|
|
var_1.gameskill = var_1 maps\_utility::get_player_gameskill();
|
|
}
|
|
|
|
level.gameskill = level.player.gameskill;
|
|
|
|
if ( maps\_utility::is_coop() && level.player2.gameskill > level.gameskill )
|
|
level.gameskill = level.player2.gameskill;
|
|
|
|
level.specops_reward_gameskill = level.player.gameskill;
|
|
|
|
if ( maps\_utility::is_coop() && level.player2.gameskill < level.specops_reward_gameskill )
|
|
level.specops_reward_gameskill = level.player2.gameskill;
|
|
|
|
if ( isdefined( level.forcedgameskill ) )
|
|
level.gameskill = level.forcedgameskill;
|
|
|
|
return level.gameskill;
|
|
}
|
|
|
|
gameskill_change_monitor()
|
|
{
|
|
var_0 = level.gameskill;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
wait 1;
|
|
var_0 = level.gameskill;
|
|
continue;
|
|
}
|
|
|
|
if ( var_0 != updategameskill() )
|
|
{
|
|
var_0 = level.gameskill;
|
|
updatealldifficulty();
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
get_skill_from_index( var_0 )
|
|
{
|
|
return level.difficultytype[var_0];
|
|
}
|
|
|
|
aa_should_start_fresh()
|
|
{
|
|
return level.gameskill == getdvarint( "autodifficulty_original_setting" );
|
|
}
|
|
|
|
apply_difficulty_frac_with_func( var_0, var_1 )
|
|
{
|
|
self.gs.invultime_preshield = [[ var_0 ]]( "invulTime_preShield", var_1 );
|
|
self.gs.invultime_onshield = [[ var_0 ]]( "invulTime_onShield", var_1 );
|
|
self.gs.invultime_postshield = [[ var_0 ]]( "invulTime_postShield", var_1 );
|
|
self.gs.playerhealth_regularregendelay = [[ var_0 ]]( "playerHealth_RegularRegenDelay", var_1 );
|
|
self.gs.worthydamageratio = [[ var_0 ]]( "worthyDamageRatio", var_1 );
|
|
self.threatbias = int( [[ var_0 ]]( "threatbias", var_1 ) );
|
|
self.gs.longregentime = [[ var_0 ]]( "longRegenTime", var_1 );
|
|
self.gs.healthoverlaycutoff = [[ var_0 ]]( "healthOverlayCutoff", var_1 );
|
|
self.gs.regenrate = [[ var_0 ]]( "health_regenRate", var_1 );
|
|
self.gs.player_attacker_accuracy = [[ var_0 ]]( "base_enemy_accuracy", var_1 );
|
|
update_player_attacker_accuracy();
|
|
self.gs.playergrenadebasetime = int( [[ var_0 ]]( "playerGrenadeBaseTime", var_1 ) );
|
|
self.gs.playergrenaderangetime = int( [[ var_0 ]]( "playerGrenadeRangeTime", var_1 ) );
|
|
self.gs.playerdoublegrenadetime = int( [[ var_0 ]]( "playerDoubleGrenadeTime", var_1 ) );
|
|
self.gs.min_sniper_burst_delay_time = [[ var_0 ]]( "min_sniper_burst_delay_time", var_1 );
|
|
self.gs.max_sniper_burst_delay_time = [[ var_0 ]]( "max_sniper_burst_delay_time", var_1 );
|
|
self.gs.dog_presstime = [[ var_0 ]]( "dog_presstime", var_1 );
|
|
self.deathinvulnerabletime = int( [[ var_0 ]]( "player_deathInvulnerableTime", var_1 ) );
|
|
self.criticalbulletdamagedist = int( [[ var_0 ]]( "player_criticalBulletDamageDist", var_1 ) );
|
|
self.damagemultiplier = 100 / [[ var_0 ]]( "playerDifficultyHealth", var_1 );
|
|
}
|
|
|
|
update_player_attacker_accuracy()
|
|
{
|
|
if ( maps\_utility::ent_flag( "player_zero_attacker_accuracy" ) )
|
|
return;
|
|
|
|
self.ignorerandombulletdamage = self.baseignorerandombulletdamage;
|
|
self.attackeraccuracy = self.gs.player_attacker_accuracy;
|
|
}
|
|
|
|
apply_difficulty_step_with_func( var_0, var_1 )
|
|
{
|
|
self.gs.misstimeconstant = [[ var_0 ]]( "missTimeConstant", var_1 );
|
|
self.gs.misstimedistancefactor = [[ var_0 ]]( "missTimeDistanceFactor", var_1 );
|
|
self.gs.dog_hits_before_kill = [[ var_0 ]]( "dog_hits_before_kill", var_1 );
|
|
self.gs.double_grenades_allowed = [[ var_0 ]]( "double_grenades_allowed", var_1 );
|
|
}
|
|
|
|
set_difficulty_from_locked_settings()
|
|
{
|
|
apply_difficulty_frac_with_func( ::get_locked_difficulty_val_player, 1 );
|
|
apply_difficulty_step_with_func( ::get_locked_difficulty_step_val_player, 1 );
|
|
}
|
|
|
|
get_locked_difficulty_step_val_player( var_0, var_1 )
|
|
{
|
|
return level.difficultysettings[var_0][get_skill_from_index( self.gameskill )];
|
|
}
|
|
|
|
get_locked_difficulty_step_val_global( var_0, var_1 )
|
|
{
|
|
return level.difficultysettings[var_0][get_skill_from_index( level.gameskill )];
|
|
}
|
|
|
|
get_blended_difficulty( var_0, var_1 )
|
|
{
|
|
var_2 = level.difficultysettings_frac_data_points[var_0];
|
|
|
|
for ( var_3 = 1; var_3 < var_2.size; var_3++ )
|
|
{
|
|
var_4 = var_2[var_3]["frac"];
|
|
var_5 = var_2[var_3]["val"];
|
|
|
|
if ( var_1 <= var_4 )
|
|
{
|
|
var_6 = var_2[var_3 - 1]["frac"];
|
|
var_7 = var_2[var_3 - 1]["val"];
|
|
var_8 = var_4 - var_6;
|
|
var_9 = var_5 - var_7;
|
|
var_10 = var_1 - var_6;
|
|
var_11 = var_10 / var_8;
|
|
return var_7 + var_11 * var_9;
|
|
}
|
|
}
|
|
|
|
return var_2[var_2.size - 1]["val"];
|
|
}
|
|
|
|
getcurrentdifficultysetting( var_0 )
|
|
{
|
|
return level.difficultysettings[var_0][get_skill_from_index( self.gameskill )];
|
|
}
|
|
|
|
getratio( var_0, var_1, var_2 )
|
|
{
|
|
return ( level.difficultysettings[var_0][level.difficultytype[var_1]] * ( 100 - getdvarint( "autodifficulty_frac" ) ) + level.difficultysettings[var_0][level.difficultytype[var_2]] * getdvarint( "autodifficulty_frac" ) ) * 0.01;
|
|
}
|
|
|
|
get_locked_difficulty_val_player( var_0, var_1 )
|
|
{
|
|
return level.difficultysettings[var_0][get_skill_from_index( self.gameskill )];
|
|
}
|
|
|
|
get_locked_difficulty_val_global( var_0, var_1 )
|
|
{
|
|
return level.difficultysettings[var_0][get_skill_from_index( level.gameskill )];
|
|
}
|
|
|
|
always_pain()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
pain_protection()
|
|
{
|
|
if ( !pain_protection_check() )
|
|
return 0;
|
|
|
|
return randomint( 100 ) > 25;
|
|
}
|
|
|
|
pain_protection_check()
|
|
{
|
|
if ( !isalive( self.enemy ) )
|
|
return 0;
|
|
|
|
if ( !isplayer( self.enemy ) )
|
|
return 0;
|
|
|
|
if ( !isalive( level.painai ) || level.painai.script != "pain" )
|
|
level.painai = self;
|
|
|
|
if ( self == level.painai )
|
|
return 0;
|
|
|
|
if ( self.damageweapon != "none" && weaponisboltaction( self.damageweapon ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
set_accuracy_based_on_situation()
|
|
{
|
|
if ( animscripts\combat_utility::issniper() && isalive( self.enemy ) )
|
|
{
|
|
setsniperaccuracy();
|
|
return;
|
|
}
|
|
|
|
if ( isplayer( self.enemy ) )
|
|
{
|
|
resetmissdebouncetime();
|
|
|
|
if ( self.a.misstime > gettime() )
|
|
{
|
|
self.accuracy = 0;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( self.script == "move" )
|
|
{
|
|
if ( animscripts\utility::iscqbwalkingorfacingenemy() )
|
|
self.accuracy = anim.walk_accuracy * self.baseaccuracy;
|
|
else
|
|
self.accuracy = anim.run_accuracy * self.baseaccuracy;
|
|
|
|
return;
|
|
}
|
|
|
|
self.accuracy = self.baseaccuracy;
|
|
|
|
if ( isdefined( self.isrambo ) && isdefined( self.ramboaccuracymult ) )
|
|
self.accuracy = self.accuracy * self.ramboaccuracymult;
|
|
}
|
|
|
|
setsniperaccuracy()
|
|
{
|
|
if ( !isdefined( self.snipershotcount ) )
|
|
{
|
|
self.snipershotcount = 0;
|
|
self.sniperhitcount = 0;
|
|
}
|
|
|
|
self.snipershotcount++;
|
|
var_0 = level.gameskill;
|
|
|
|
if ( isplayer( self.enemy ) )
|
|
var_0 = self.enemy.gameskill;
|
|
|
|
if ( shouldforcesnipermissshot() )
|
|
{
|
|
self.accuracy = 0;
|
|
|
|
if ( var_0 > 0 || self.snipershotcount > 1 )
|
|
self.lastmissedenemy = self.enemy;
|
|
|
|
return;
|
|
}
|
|
|
|
self.accuracy = ( 1 + 1 * self.sniperhitcount ) * self.baseaccuracy;
|
|
self.sniperhitcount++;
|
|
|
|
if ( var_0 < 1 && self.sniperhitcount == 1 )
|
|
self.lastmissedenemy = undefined;
|
|
}
|
|
|
|
shouldforcesnipermissshot()
|
|
{
|
|
if ( isdefined( self.neverforcesnipermissenemy ) && self.neverforcesnipermissenemy )
|
|
return 0;
|
|
|
|
if ( self.team == "allies" )
|
|
return 0;
|
|
|
|
if ( isdefined( self.lastmissedenemy ) && self.enemy == self.lastmissedenemy )
|
|
return 0;
|
|
|
|
if ( distancesquared( self.origin, self.enemy.origin ) > 250000 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
shotsafterplayerbecomesinvul()
|
|
{
|
|
return 1 + randomfloat( 4 );
|
|
}
|
|
|
|
didsomethingotherthanshooting()
|
|
{
|
|
self.a.misstimedebounce = 0;
|
|
}
|
|
|
|
resetaccuracyandpause()
|
|
{
|
|
resetmisstime();
|
|
}
|
|
|
|
waittimeifplayerishit()
|
|
{
|
|
var_0 = 0;
|
|
waittillframeend;
|
|
|
|
if ( !isalive( self.enemy ) )
|
|
return var_0;
|
|
|
|
if ( !isplayer( self.enemy ) )
|
|
return var_0;
|
|
|
|
if ( self.enemy maps\_utility::ent_flag( "player_is_invulnerable" ) )
|
|
var_0 = 0.3 + randomfloat( 0.4 );
|
|
|
|
return var_0;
|
|
}
|
|
|
|
print3d_time( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_3 = var_3 * 20;
|
|
|
|
for ( var_4 = 0; var_4 < var_3; var_4++ )
|
|
wait 0.05;
|
|
}
|
|
|
|
resetmisstime()
|
|
{
|
|
if ( !self isbadguy() )
|
|
return;
|
|
|
|
if ( self.weapon == "none" )
|
|
return;
|
|
|
|
if ( !animscripts\weaponlist::usingautomaticweapon() && !animscripts\weaponlist::usingsemiautoweapon() )
|
|
{
|
|
self.misstime = 0;
|
|
return;
|
|
}
|
|
|
|
if ( !isalive( self.enemy ) )
|
|
return;
|
|
|
|
if ( !isplayer( self.enemy ) )
|
|
{
|
|
self.accuracy = self.baseaccuracy;
|
|
return;
|
|
}
|
|
|
|
var_0 = distance( self.enemy.origin, self.origin );
|
|
setmisstime( self.enemy.gs.misstimeconstant + var_0 * self.enemy.gs.misstimedistancefactor );
|
|
}
|
|
|
|
resetmissdebouncetime()
|
|
{
|
|
self.a.misstimedebounce = gettime() + 3000;
|
|
}
|
|
|
|
setmisstime( var_0 )
|
|
{
|
|
if ( self.a.misstimedebounce > gettime() )
|
|
return;
|
|
|
|
if ( var_0 > 0 )
|
|
self.accuracy = 0;
|
|
|
|
var_0 = var_0 * 1000;
|
|
self.a.misstime = gettime() + var_0;
|
|
self.a.accuracygrowthmultiplier = 1;
|
|
}
|
|
|
|
player_aim_debug()
|
|
{
|
|
self endon( "death" );
|
|
self notify( "playeraim" );
|
|
self endon( "playeraim" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = ( 0, 1, 0 );
|
|
|
|
if ( self.a.misstime > gettime() )
|
|
var_0 = ( 1, 0, 0 );
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
screen_effect_on_open_bottom( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = randomfloatrange( -15, 15 );
|
|
var_4 = randomfloatrange( -15, 15 );
|
|
self scaleovertime( 0.1, int( 2048 * var_1 ), int( 1152 * var_1 ) );
|
|
self.y = 100 + var_4;
|
|
self moveovertime( 0.08 );
|
|
self.y = 0 + var_4;
|
|
self.x = self.x + var_3;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
return;
|
|
|
|
screen_effect_fade();
|
|
}
|
|
|
|
screen_effect_on_open_side( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 1;
|
|
|
|
if ( var_2 )
|
|
var_3 = -1;
|
|
|
|
var_4 = randomfloatrange( -15, 15 );
|
|
var_5 = randomfloatrange( -15, 15 );
|
|
self scaleovertime( 0.1, int( 2048 * var_1 ), int( 1152 * var_1 ) );
|
|
self.x = 1000 * var_3 + var_4;
|
|
self moveovertime( 0.1 );
|
|
self.x = 0 + var_4;
|
|
self.y = self.y + var_5;
|
|
screen_effect_fade();
|
|
}
|
|
|
|
screen_effect_fade()
|
|
{
|
|
self endon( "death" );
|
|
var_0 = gettime();
|
|
var_1 = 1;
|
|
var_2 = 0.05;
|
|
self.alpha = 0;
|
|
self fadeovertime( var_2 );
|
|
self.alpha = 1;
|
|
wait( var_2 );
|
|
maps\_utility::wait_for_buffer_time_to_pass( var_0, 2 );
|
|
self fadeovertime( var_1 );
|
|
self.alpha = 0;
|
|
wait( var_1 );
|
|
self destroy();
|
|
}
|
|
|
|
screen_detailed_alpha()
|
|
{
|
|
var_0 = 0.2;
|
|
self.alpha = 0.7;
|
|
self fadeovertime( var_0 );
|
|
self.alpha = 0;
|
|
wait( var_0 );
|
|
self destroy();
|
|
}
|
|
|
|
grenade_dirt_on_screen( var_0 )
|
|
{
|
|
var_1 = "fullscreen_dirt_" + var_0;
|
|
var_2 = undefined;
|
|
|
|
if ( var_0 == "bottom" )
|
|
var_2 = "fullscreen_dirt_bottom_b";
|
|
|
|
thread display_screen_effect( "dirt", var_0, var_1, var_2, randomfloatrange( 0.55, 0.66 ) );
|
|
}
|
|
|
|
blood_splat_on_screen( var_0 )
|
|
{
|
|
var_1 = "fullscreen_bloodsplat_" + var_0;
|
|
thread display_screen_effect( "bloodsplat", var_0, var_1, undefined, randomfloatrange( 0.45, 0.56 ) );
|
|
}
|
|
|
|
display_screen_effect( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
if ( isdefined( self.is_controlling_uav ) )
|
|
return;
|
|
|
|
var_5 = gettime();
|
|
|
|
if ( self.gs.screeneffect[var_0][var_1] == var_5 )
|
|
return;
|
|
|
|
if ( self.gs.screeneffect[var_0 + "_count"][var_1] == 1 )
|
|
return;
|
|
|
|
self.gs.screeneffect[var_0 + "_count"][var_1]++;
|
|
self.gs.screeneffect[var_0][var_1] = var_5;
|
|
self endon( "death" );
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "bottom":
|
|
var_6 = int( 640 );
|
|
var_7 = int( 480 );
|
|
|
|
if ( var_0 == "dirt" )
|
|
{
|
|
var_8 = maps\_hud_util::create_client_overlay_custom_size( var_2, 1 );
|
|
var_8 thread screen_effect_on_open_bottom( var_0, var_4, 1 );
|
|
var_8 screen_detailed_alpha();
|
|
}
|
|
else
|
|
{
|
|
var_8 = maps\_hud_util::create_client_overlay_custom_size( var_2, 0 );
|
|
var_8 screen_effect_on_open_bottom( var_0, var_4 );
|
|
}
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_9 = maps\_hud_util::create_client_overlay_custom_size( var_3, 0 );
|
|
var_9 screen_effect_on_open_bottom( var_0, var_4 );
|
|
}
|
|
|
|
break;
|
|
case "left":
|
|
var_8 = maps\_hud_util::create_client_overlay_custom_size( var_2, 0, 1, 1 );
|
|
var_8 screen_effect_on_open_side( var_0, var_4, 1 );
|
|
break;
|
|
case "right":
|
|
var_8 = maps\_hud_util::create_client_overlay_custom_size( var_2, 0, 1, 1 );
|
|
var_8 screen_effect_on_open_side( var_0, var_4, 0 );
|
|
break;
|
|
default:
|
|
}
|
|
|
|
self.gs.screeneffect[var_1 + "_count"][var_2]--;
|
|
}
|
|
|
|
playerhurtcheck()
|
|
{
|
|
var_0 = maps\_utility::dirt_on_screen_from_position;
|
|
var_1 = maps\_utility::bloodsplateffect;
|
|
var_2 = [];
|
|
var_2["MOD_GRENADE"] = var_0;
|
|
var_2["MOD_GRENADE_SPLASH"] = var_0;
|
|
var_2["MOD_PROJECTILE"] = var_0;
|
|
var_2["MOD_PROJECTILE_SPLASH"] = var_0;
|
|
var_2["MOD_EXPLOSIVE"] = var_0;
|
|
var_2["MOD_PISTOL_BULLET"] = var_1;
|
|
var_2["MOD_RIFLE_BULLET"] = var_1;
|
|
var_2["MOD_EXPLOSIVE_BULLET"] = var_1;
|
|
self.hurtagain = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_3, var_4, var_5, var_6, var_7 );
|
|
self.hurtagain = 1;
|
|
self.damagepoint = var_6;
|
|
self.damageattacker = var_4;
|
|
var_8 = undefined;
|
|
|
|
if ( isdefined( self.mods_override ) )
|
|
var_8 = self.mods_override[var_7];
|
|
|
|
if ( !isdefined( var_8 ) && isdefined( var_2[var_7] ) )
|
|
var_8 = var_2[var_7];
|
|
|
|
if ( isdefined( var_8 ) )
|
|
{
|
|
waittillframeend;
|
|
[[ var_8 ]]( var_6 );
|
|
}
|
|
}
|
|
}
|
|
|
|
player_health_packets()
|
|
{
|
|
self.player_health_packets = 3;
|
|
}
|
|
|
|
playerhealthregeninit()
|
|
{
|
|
wait 0.05;
|
|
level.strings["take_cover"] = spawnstruct();
|
|
level.strings["take_cover"].text = &"GAME_GET_TO_COVER";
|
|
level.strings["get_back_up"] = spawnstruct();
|
|
level.strings["get_back_up"].text = &"GAME_LAST_STAND_GET_BACK_UP";
|
|
}
|
|
|
|
playerhealthregen()
|
|
{
|
|
thread healthoverlay();
|
|
var_0 = 1;
|
|
var_1 = 0;
|
|
thread player_health_packets();
|
|
var_2 = 0;
|
|
var_3 = 0;
|
|
thread playerbreathingsound( self.maxhealth * 0.35 );
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
var_7 = 1;
|
|
thread playerhurtcheck();
|
|
self.bolthit = 0;
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.05;
|
|
waittillframeend;
|
|
|
|
if ( maps\_utility::laststand_enabled() )
|
|
{
|
|
if ( isdefined( level.laststand_player_func ) )
|
|
self thread [[ level.laststand_player_func ]]();
|
|
}
|
|
|
|
if ( self.health == self.maxhealth )
|
|
{
|
|
if ( maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) )
|
|
player_recovers_from_red_flashing();
|
|
|
|
var_7 = 1;
|
|
var_3 = 0;
|
|
var_2 = 0;
|
|
continue;
|
|
}
|
|
|
|
if ( self.health <= 0 )
|
|
return;
|
|
|
|
var_8 = var_2;
|
|
var_9 = self.health / self.maxhealth;
|
|
|
|
if ( var_9 <= self.gs.healthoverlaycutoff && self.player_health_packets > 1 )
|
|
{
|
|
var_2 = 1;
|
|
|
|
if ( !var_8 )
|
|
{
|
|
var_5 = gettime();
|
|
|
|
if ( maps\_utility::ent_flag( "near_death_vision_enabled" ) )
|
|
{
|
|
thread blurview( 3.6, 2 );
|
|
thread maps\_audio::set_deathsdoor();
|
|
self painvisionon();
|
|
}
|
|
|
|
maps\_utility::ent_flag_set( "player_has_red_flashing_overlay" );
|
|
var_3 = 1;
|
|
}
|
|
}
|
|
|
|
if ( self.hurtagain )
|
|
{
|
|
var_5 = gettime();
|
|
self.hurtagain = 0;
|
|
}
|
|
|
|
if ( self.health / self.maxhealth >= var_0 )
|
|
{
|
|
if ( gettime() - var_5 < self.gs.playerhealth_regularregendelay )
|
|
continue;
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_6 = var_9;
|
|
|
|
if ( gettime() > var_5 + self.gs.longregentime )
|
|
var_6 = var_6 + self.gs.regenrate;
|
|
|
|
if ( var_6 >= 1 )
|
|
reducetakecoverwarnings();
|
|
}
|
|
else
|
|
var_6 = 1;
|
|
|
|
if ( var_6 > 1.0 )
|
|
var_6 = 1.0;
|
|
|
|
if ( var_6 <= 0 )
|
|
return;
|
|
|
|
self setnormalhealth( var_6 );
|
|
var_0 = self.health / self.maxhealth;
|
|
continue;
|
|
}
|
|
|
|
var_0 = var_7;
|
|
var_10 = self.gs.worthydamageratio;
|
|
|
|
if ( self.attackercount == 1 )
|
|
var_10 = var_10 * 3;
|
|
|
|
var_11 = var_0 - var_9 >= var_10;
|
|
|
|
if ( self.health <= 1 )
|
|
{
|
|
self setnormalhealth( 2 / self.maxhealth );
|
|
var_11 = 1;
|
|
}
|
|
|
|
var_0 = self.health / self.maxhealth;
|
|
self notify( "hit_again" );
|
|
var_1 = 0;
|
|
var_5 = gettime();
|
|
thread blurview( 3, 0.8 );
|
|
|
|
if ( !var_11 )
|
|
continue;
|
|
|
|
if ( maps\_utility::ent_flag( "player_is_invulnerable" ) )
|
|
continue;
|
|
|
|
maps\_utility::ent_flag_set( "player_is_invulnerable" );
|
|
level notify( "player_becoming_invulnerable" );
|
|
|
|
if ( var_3 )
|
|
{
|
|
var_4 = self.gs.invultime_onshield;
|
|
var_3 = 0;
|
|
}
|
|
else if ( var_2 )
|
|
var_4 = self.gs.invultime_postshield;
|
|
else
|
|
var_4 = self.gs.invultime_preshield;
|
|
|
|
var_7 = self.health / self.maxhealth;
|
|
thread playerinvul( var_4 );
|
|
}
|
|
}
|
|
|
|
reducetakecoverwarnings()
|
|
{
|
|
if ( !take_cover_warnings_enabled() )
|
|
return;
|
|
|
|
if ( isalive( self ) )
|
|
{
|
|
var_0 = self getlocalplayerprofiledata( "takeCoverWarnings" );
|
|
|
|
if ( var_0 > 0 )
|
|
{
|
|
var_0--;
|
|
self setlocalplayerprofiledata( "takeCoverWarnings", var_0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
playerinvul( var_0 )
|
|
{
|
|
if ( isdefined( self.flashendtime ) && self.flashendtime > gettime() )
|
|
var_0 = var_0 * getcurrentdifficultysetting( "flashbangedInvulFactor" );
|
|
|
|
if ( var_0 > 0 )
|
|
{
|
|
if ( !isdefined( self.noplayerinvul ) )
|
|
self.attackeraccuracy = 0;
|
|
|
|
self.ignorerandombulletdamage = 1;
|
|
wait( var_0 );
|
|
}
|
|
|
|
update_player_attacker_accuracy();
|
|
maps\_utility::ent_flag_clear( "player_is_invulnerable" );
|
|
}
|
|
|
|
default_door_node_flashbang_frequency()
|
|
{
|
|
if ( self.team == "allies" )
|
|
self.doorflashchance = 0.6;
|
|
|
|
if ( self isbadguy() )
|
|
{
|
|
if ( level.gameskill >= 2 )
|
|
self.doorflashchance = 0.8;
|
|
else
|
|
self.doorflashchance = 0.6;
|
|
}
|
|
}
|
|
|
|
grenadeawareness()
|
|
{
|
|
if ( self.team == "allies" )
|
|
{
|
|
self.grenadeawareness = 0.9;
|
|
return;
|
|
}
|
|
|
|
if ( self isbadguy() )
|
|
{
|
|
if ( level.gameskill >= 2 )
|
|
{
|
|
if ( randomint( 100 ) < 33 )
|
|
self.grenadeawareness = 0.2;
|
|
else
|
|
self.grenadeawareness = 0.5;
|
|
}
|
|
else if ( randomint( 100 ) < 33 )
|
|
self.grenadeawareness = 0;
|
|
else
|
|
self.grenadeawareness = 0.2;
|
|
}
|
|
}
|
|
|
|
blurview( var_0, var_1 )
|
|
{
|
|
if ( maps\_utility::ent_flag( "player_no_auto_blur" ) )
|
|
return;
|
|
|
|
self notify( "blurview_stop" );
|
|
self endon( "blurview_stop" );
|
|
self setblurforplayer( var_0, 0 );
|
|
wait 0.05;
|
|
self setblurforplayer( 0, var_1 );
|
|
}
|
|
|
|
playerbreathingsound( var_0 )
|
|
{
|
|
wait 2;
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.2;
|
|
|
|
if ( self.health <= 0 )
|
|
return;
|
|
|
|
var_1 = self.health / self.maxhealth;
|
|
|
|
if ( var_1 > self.gs.healthoverlaycutoff )
|
|
continue;
|
|
|
|
if ( isdefined( self.disable_breathing_sound ) && self.disable_breathing_sound )
|
|
continue;
|
|
|
|
if ( isdefined( level.gameskill_breath_func ) )
|
|
[[ level.gameskill_breath_func ]]( "breathing_hurt" );
|
|
else
|
|
self playlocalsound( "breathing_hurt" );
|
|
|
|
var_2 = 0.1;
|
|
|
|
if ( isdefined( level.player.gs.custombreathingtime ) )
|
|
var_2 = level.player.gs.custombreathingtime;
|
|
|
|
wait( var_2 + randomfloat( 0.8 ) );
|
|
}
|
|
}
|
|
|
|
healthoverlay()
|
|
{
|
|
self endon( "noHealthOverlay" );
|
|
var_0 = newclienthudelem( self );
|
|
var_0.x = 0;
|
|
var_0.y = 0;
|
|
|
|
if ( issplitscreen() )
|
|
{
|
|
var_0 setshader( "vfx_blood_screen_overlay", 640, 960 );
|
|
|
|
if ( self == level.players[0] )
|
|
var_0.y = var_0.y - 120;
|
|
}
|
|
else
|
|
var_0 setshader( "vfx_blood_screen_overlay", 640, 480 );
|
|
|
|
var_0.splatter = 1;
|
|
var_0.alignx = "left";
|
|
var_0.aligny = "top";
|
|
var_0.sort = 1;
|
|
var_0.foreground = 0;
|
|
var_0.horzalign = "fullscreen";
|
|
var_0.vertalign = "fullscreen";
|
|
var_0.alpha = 0;
|
|
var_0.enablehudlighting = 1;
|
|
thread healthoverlay_remove( var_0 );
|
|
thread take_cover_warning_loop();
|
|
var_1 = 0.0;
|
|
var_2 = 0.05;
|
|
|
|
for ( var_3 = 0.3; isalive( self ); var_0.alpha = var_1 )
|
|
{
|
|
wait( var_2 );
|
|
var_4 = 1.0 - self.health / self.maxhealth;
|
|
var_5 = var_4 * var_4 * 1.2;
|
|
var_5 = clamp( var_5, 0, 1 );
|
|
|
|
if ( var_1 > var_5 )
|
|
var_1 = var_1 - var_3 * var_2;
|
|
|
|
if ( var_1 < var_5 )
|
|
var_1 = var_5;
|
|
}
|
|
}
|
|
|
|
take_cover_warning_loop()
|
|
{
|
|
while ( isalive( self ) )
|
|
{
|
|
maps\_utility::ent_flag_wait( "player_has_red_flashing_overlay" );
|
|
take_cover_warning();
|
|
}
|
|
}
|
|
|
|
add_hudelm_position_internal( var_0 )
|
|
{
|
|
if ( level.console )
|
|
self.fontscale = 2;
|
|
else
|
|
self.fontscale = 1.6;
|
|
|
|
self.x = 0;
|
|
self.y = -36;
|
|
self.alignx = "center";
|
|
self.aligny = "bottom";
|
|
self.horzalign = "center";
|
|
self.vertalign = "middle";
|
|
|
|
if ( !isdefined( self.background ) )
|
|
return;
|
|
|
|
self.background.x = 0;
|
|
self.background.y = -40;
|
|
self.background.alignx = "center";
|
|
self.background.aligny = "middle";
|
|
self.background.horzalign = "center";
|
|
self.background.vertalign = "middle";
|
|
|
|
if ( level.console )
|
|
self.background setshader( "popmenu_bg", 650, 52 );
|
|
else
|
|
self.background setshader( "popmenu_bg", 650, 42 );
|
|
|
|
self.background.alpha = 0.5;
|
|
}
|
|
|
|
create_warning_elem()
|
|
{
|
|
var_0 = newclienthudelem( self );
|
|
var_0 add_hudelm_position_internal();
|
|
thread destroy_warning_elem_when_hit_again( var_0 );
|
|
var_0 thread destroy_warning_elem_when_mission_failed();
|
|
|
|
if ( maps\_utility::is_player_down( self ) )
|
|
var_0 settext( level.strings["get_back_up"].text );
|
|
else
|
|
var_0 settext( level.strings["take_cover"].text );
|
|
|
|
var_0.fontscale = 2;
|
|
var_0.alpha = 1;
|
|
var_0.color = ( 1, 0.9, 0.9 );
|
|
var_0.sort = 1;
|
|
var_0.foreground = 1;
|
|
return var_0;
|
|
}
|
|
|
|
waittillplayerishitagain()
|
|
{
|
|
self endon( "hit_again" );
|
|
self endon( "player_downed" );
|
|
self waittill( "damage" );
|
|
}
|
|
|
|
destroy_warning_elem_when_hit_again( var_0 )
|
|
{
|
|
var_0 endon( "being_destroyed" );
|
|
waittillplayerishitagain();
|
|
var_1 = !isalive( self );
|
|
var_0 thread destroy_warning_elem( var_1 );
|
|
}
|
|
|
|
destroy_warning_elem_when_mission_failed()
|
|
{
|
|
self endon( "being_destroyed" );
|
|
common_scripts\utility::flag_wait( "missionfailed" );
|
|
thread destroy_warning_elem( 1 );
|
|
}
|
|
|
|
destroy_warning_elem( var_0 )
|
|
{
|
|
self notify( "being_destroyed" );
|
|
self.beingdestroyed = 1;
|
|
|
|
if ( var_0 )
|
|
{
|
|
self fadeovertime( 0.5 );
|
|
self.alpha = 0;
|
|
wait 0.5;
|
|
}
|
|
|
|
self notify( "death" );
|
|
self destroy();
|
|
}
|
|
|
|
may_change_cover_warning_alpha( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
if ( isdefined( var_0.beingdestroyed ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
fontscaler( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 = var_0 * 2;
|
|
var_2 = var_0 - self.fontscale;
|
|
self changefontscaleovertime( var_1 );
|
|
self.fontscale = self.fontscale + var_2;
|
|
}
|
|
|
|
fadefunc( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = 0.8;
|
|
var_5 = 0.5;
|
|
var_6 = var_4 * 0.1;
|
|
var_7 = var_4 * ( 0.1 + var_1 * 0.2 );
|
|
var_8 = var_4 * ( 0.1 + var_1 * 0.1 );
|
|
var_9 = var_4 * 0.3;
|
|
var_10 = var_4 - var_6 - var_7 - var_8 - var_9;
|
|
|
|
if ( var_10 < 0 )
|
|
var_10 = 0;
|
|
|
|
var_11 = 0.8 + var_1 * 0.1;
|
|
var_12 = 0.5 + var_1 * 0.3;
|
|
|
|
if ( may_change_cover_warning_alpha( var_0 ) )
|
|
{
|
|
if ( !var_3 )
|
|
{
|
|
var_0 fadeovertime( var_6 );
|
|
var_0.alpha = var_2 * 1.0;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 thread fontscaler( 1.0, var_6 );
|
|
|
|
wait( var_6 + var_7 );
|
|
|
|
if ( may_change_cover_warning_alpha( var_0 ) )
|
|
{
|
|
if ( !var_3 )
|
|
{
|
|
var_0 fadeovertime( var_8 );
|
|
var_0.alpha = var_2 * var_11;
|
|
}
|
|
}
|
|
|
|
wait( var_8 );
|
|
|
|
if ( may_change_cover_warning_alpha( var_0 ) )
|
|
{
|
|
if ( !var_3 )
|
|
{
|
|
var_0 fadeovertime( var_9 );
|
|
var_0.alpha = var_2 * var_12;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 thread fontscaler( 0.9, var_9 );
|
|
|
|
wait( var_9 );
|
|
wait( var_10 );
|
|
}
|
|
|
|
take_cover_warnings_enabled()
|
|
{
|
|
if ( isdefined( level.cover_warnings_disabled ) )
|
|
return 0;
|
|
|
|
if ( isdefined( self.vehicle ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
should_show_cover_warning()
|
|
{
|
|
if ( !isalive( self ) )
|
|
return 0;
|
|
|
|
if ( self islinked() )
|
|
return 0;
|
|
|
|
if ( self.ignoreme )
|
|
return 0;
|
|
|
|
if ( level.missionfailed )
|
|
return 0;
|
|
|
|
if ( !take_cover_warnings_enabled() )
|
|
return 0;
|
|
|
|
if ( self.gameskill > 0 && !maps\_load::map_is_early_in_the_game() )
|
|
return 0;
|
|
|
|
var_0 = self getlocalplayerprofiledata( "takeCoverWarnings" );
|
|
|
|
if ( var_0 <= 3 )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
take_cover_warning()
|
|
{
|
|
self endon( "hit_again" );
|
|
self endon( "damage" );
|
|
var_0 = undefined;
|
|
|
|
if ( should_show_cover_warning() )
|
|
var_0 = create_warning_elem();
|
|
|
|
var_1 = gettime() + self.gs.longregentime;
|
|
fadefunc( var_0, 1, 1, 0 );
|
|
|
|
while ( gettime() < var_1 && isalive( self ) && maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) )
|
|
fadefunc( var_0, 0.9, 1, 0 );
|
|
|
|
if ( isalive( self ) )
|
|
fadefunc( var_0, 0.65, 0.8, 0 );
|
|
|
|
if ( may_change_cover_warning_alpha( var_0 ) )
|
|
{
|
|
var_0 fadeovertime( 1.0 );
|
|
var_0.alpha = 0;
|
|
}
|
|
|
|
fadefunc( var_0, 0, 0.6, 1 );
|
|
wait 0.5;
|
|
self notify( "take_cover_done" );
|
|
self notify( "hit_again" );
|
|
}
|
|
|
|
player_recovers_from_red_flashing()
|
|
{
|
|
maps\_utility::ent_flag_clear( "player_has_red_flashing_overlay" );
|
|
|
|
if ( maps\_utility::ent_flag( "near_death_vision_enabled" ) )
|
|
{
|
|
self painvisionoff();
|
|
thread maps\_audio::restore_after_deathsdoor();
|
|
}
|
|
|
|
if ( !isdefined( self.disable_breathing_sound ) || !self.disable_breathing_sound )
|
|
{
|
|
if ( isdefined( level.gameskill_breath_func ) )
|
|
[[ level.gameskill_breath_func ]]( "breathing_better" );
|
|
else
|
|
self playlocalsound( "breathing_better" );
|
|
}
|
|
|
|
self notify( "take_cover_done" );
|
|
}
|
|
|
|
healthoverlay_remove( var_0 )
|
|
{
|
|
self waittill( "noHealthOverlay" );
|
|
var_0 destroy();
|
|
}
|
|
|
|
resetskill()
|
|
{
|
|
waittillframeend;
|
|
setskill( 1 );
|
|
}
|
|
|
|
init_take_cover_warnings()
|
|
{
|
|
var_0 = isdefined( level.ispregameplaylevel ) && level.ispregameplaylevel;
|
|
|
|
if ( self getlocalplayerprofiledata( "takeCoverWarnings" ) == -1 || var_0 )
|
|
self setlocalplayerprofiledata( "takeCoverWarnings", 9 );
|
|
}
|
|
|
|
increment_take_cover_warnings_on_death()
|
|
{
|
|
self notify( "new_cover_on_death_thread" );
|
|
self endon( "new_cover_on_death_thread" );
|
|
self waittill( "death" );
|
|
|
|
if ( !maps\_utility::ent_flag( "player_has_red_flashing_overlay" ) )
|
|
return;
|
|
|
|
if ( !take_cover_warnings_enabled() )
|
|
return;
|
|
|
|
var_0 = self getlocalplayerprofiledata( "takeCoverWarnings" );
|
|
|
|
if ( var_0 < 10 )
|
|
self setlocalplayerprofiledata( "takeCoverWarnings", var_0 + 1 );
|
|
}
|
|
|
|
auto_adjust_difficulty_player_positioner()
|
|
{
|
|
var_0 = self.origin;
|
|
wait 5;
|
|
|
|
if ( autospot_is_close_to_player( var_0 ) )
|
|
level.autoadjust_playerspots[level.autoadjust_playerspots.size] = var_0;
|
|
}
|
|
|
|
autospot_is_close_to_player( var_0 )
|
|
{
|
|
return distancesquared( self.origin, var_0 ) < 19600;
|
|
}
|
|
|
|
auto_adjust_difficulty_player_movement_check()
|
|
{
|
|
level.autoadjust_playerspots = [];
|
|
level.player.movedrecently = 1;
|
|
wait 1;
|
|
|
|
for (;;)
|
|
{
|
|
level.player thread auto_adjust_difficulty_player_positioner();
|
|
level.player.movedrecently = 1;
|
|
var_0 = [];
|
|
var_1 = level.autoadjust_playerspots.size - 5;
|
|
|
|
if ( var_1 < 0 )
|
|
var_1 = 0;
|
|
|
|
for ( var_2 = var_1; var_2 < level.autoadjust_playerspots.size; var_2++ )
|
|
{
|
|
if ( !level.player autospot_is_close_to_player( level.autoadjust_playerspots[var_2] ) )
|
|
continue;
|
|
|
|
var_0[var_0.size] = level.autoadjust_playerspots[var_2];
|
|
level.player.movedrecently = 0;
|
|
}
|
|
|
|
level.autoadjust_playerspots = var_0;
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
auto_adjust_difficulty_track_player_death()
|
|
{
|
|
level.player waittill( "death" );
|
|
var_0 = getdvarint( "autodifficulty_playerDeathTimer" );
|
|
var_0 = var_0 - 60;
|
|
setdvar( "autodifficulty_playerDeathTimer", var_0 );
|
|
}
|
|
|
|
auto_adjust_difficulty_track_player_shots()
|
|
{
|
|
var_0 = gettime();
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player attackbuttonpressed() )
|
|
var_0 = gettime();
|
|
|
|
level.timebetweenshots = gettime() - var_0;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
hud_debug_add_frac( var_0, var_1 )
|
|
{
|
|
hud_debug_add_display( var_0, var_1 * 100, 1 );
|
|
}
|
|
|
|
hud_debug_add( var_0, var_1 )
|
|
{
|
|
hud_debug_add_display( var_0, var_1, 0 );
|
|
}
|
|
|
|
hud_debug_clear()
|
|
{
|
|
level.hudnum = 0;
|
|
|
|
if ( isdefined( level.huddebugnum ) )
|
|
{
|
|
for ( var_0 = 0; var_0 < level.huddebugnum.size; var_0++ )
|
|
level.huddebugnum[var_0] destroy();
|
|
}
|
|
|
|
level.huddebugnum = [];
|
|
}
|
|
|
|
hud_debug_add_message( var_0 )
|
|
{
|
|
if ( !isdefined( level.hudmsgshare ) )
|
|
level.hudmsgshare = [];
|
|
|
|
if ( !isdefined( level.hudmsgshare[var_0] ) )
|
|
{
|
|
var_1 = newhudelem();
|
|
var_1.x = level.debugleft;
|
|
var_1.y = level.debugheight + level.hudnum * 15;
|
|
var_1.foreground = 1;
|
|
var_1.sort = 100;
|
|
var_1.alpha = 1.0;
|
|
var_1.alignx = "left";
|
|
var_1.horzalign = "left";
|
|
var_1.fontscale = 1.0;
|
|
var_1 settext( var_0 );
|
|
level.hudmsgshare[var_0] = 1;
|
|
}
|
|
}
|
|
|
|
hud_debug_add_display( var_0, var_1, var_2 )
|
|
{
|
|
hud_debug_add_message( var_0 );
|
|
var_1 = int( var_1 );
|
|
var_3 = 0;
|
|
|
|
if ( var_1 < 0 )
|
|
{
|
|
var_3 = 1;
|
|
var_1 = var_1 * -1;
|
|
}
|
|
|
|
var_4 = 0;
|
|
var_5 = 0;
|
|
var_6 = 0;
|
|
|
|
for ( var_7 = 0; var_1 >= 10000; var_1 = var_1 - 10000 )
|
|
{
|
|
|
|
}
|
|
|
|
while ( var_1 >= 1000 )
|
|
{
|
|
var_1 = var_1 - 1000;
|
|
var_4++;
|
|
}
|
|
|
|
while ( var_1 >= 100 )
|
|
{
|
|
var_1 = var_1 - 100;
|
|
var_5++;
|
|
}
|
|
|
|
while ( var_1 >= 10 )
|
|
{
|
|
var_1 = var_1 - 10;
|
|
var_6++;
|
|
}
|
|
|
|
while ( var_1 >= 1 )
|
|
{
|
|
var_1 = var_1 - 1;
|
|
var_7++;
|
|
}
|
|
|
|
var_8 = 0;
|
|
var_9 = 10;
|
|
|
|
if ( var_4 > 0 )
|
|
{
|
|
hud_debug_add_num( var_4, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_5, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_6, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_7, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
}
|
|
else if ( var_5 > 0 || var_2 )
|
|
{
|
|
hud_debug_add_num( var_5, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_6, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_7, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
}
|
|
else if ( var_6 > 0 )
|
|
{
|
|
hud_debug_add_num( var_6, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
hud_debug_add_num( var_7, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
}
|
|
else
|
|
{
|
|
hud_debug_add_num( var_7, var_8 );
|
|
var_8 = var_8 + var_9;
|
|
}
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_10 = newhudelem();
|
|
var_10.x = 204.5;
|
|
var_10.y = level.debugheight + level.hudnum * 15;
|
|
var_10.foreground = 1;
|
|
var_10.sort = 100;
|
|
var_10.alpha = 1.0;
|
|
var_10.alignx = "left";
|
|
var_10.horzalign = "left";
|
|
var_10.fontscale = 1.0;
|
|
var_10 settext( "." );
|
|
level.huddebugnum[level.huddebugnum.size] = var_10;
|
|
}
|
|
|
|
if ( var_3 )
|
|
{
|
|
var_11 = newhudelem();
|
|
var_11.x = 195.5;
|
|
var_11.y = level.debugheight + level.hudnum * 15;
|
|
var_11.foreground = 1;
|
|
var_11.sort = 100;
|
|
var_11.alpha = 1.0;
|
|
var_11.alignx = "left";
|
|
var_11.horzalign = "left";
|
|
var_11.fontscale = 1.0;
|
|
var_11 settext( " - " );
|
|
level.huddebugnum[level.hudnum] = var_11;
|
|
}
|
|
|
|
level.hudnum++;
|
|
}
|
|
|
|
hud_debug_add_string( var_0, var_1 )
|
|
{
|
|
hud_debug_add_message( var_0 );
|
|
hud_debug_add_second_string( var_1, 0 );
|
|
level.hudnum++;
|
|
}
|
|
|
|
hud_debug_add_num( var_0, var_1 )
|
|
{
|
|
var_2 = newhudelem();
|
|
var_2.x = 200 + var_1 * 0.65;
|
|
var_2.y = level.debugheight + level.hudnum * 15;
|
|
var_2.foreground = 1;
|
|
var_2.sort = 100;
|
|
var_2.alpha = 1.0;
|
|
var_2.alignx = "left";
|
|
var_2.horzalign = "left";
|
|
var_2.fontscale = 1.0;
|
|
var_2 settext( var_0 + "" );
|
|
level.huddebugnum[level.huddebugnum.size] = var_2;
|
|
}
|
|
|
|
hud_debug_add_second_string( var_0, var_1 )
|
|
{
|
|
var_2 = newhudelem();
|
|
var_2.x = 200 + var_1 * 0.65;
|
|
var_2.y = level.debugheight + level.hudnum * 15;
|
|
var_2.foreground = 1;
|
|
var_2.sort = 100;
|
|
var_2.alpha = 1.0;
|
|
var_2.alignx = "left";
|
|
var_2.horzalign = "left";
|
|
var_2.fontscale = 1.0;
|
|
var_2 settext( var_0 );
|
|
level.huddebugnum[level.huddebugnum.size] = var_2;
|
|
}
|
|
|
|
aa_init_stats()
|
|
{
|
|
level.sp_stat_tracking_func = ::auto_adjust_new_zone;
|
|
setdvar( "aa_player_kills", "0" );
|
|
setdvar( "aa_enemy_deaths", "0" );
|
|
setdvar( "aa_enemy_damage_taken", "0" );
|
|
setdvar( "aa_player_damage_taken", "0" );
|
|
setdvar( "aa_player_damage_dealt", "0" );
|
|
setdvar( "aa_ads_damage_dealt", "0" );
|
|
setdvar( "aa_time_tracking", "0" );
|
|
setdvar( "aa_deaths", "0" );
|
|
setdvar( "player_cheated", 0 );
|
|
level.auto_adjust_results = [];
|
|
thread aa_time_tracking();
|
|
thread aa_player_health_tracking();
|
|
thread aa_player_ads_tracking();
|
|
common_scripts\utility::flag_set( "auto_adjust_initialized" );
|
|
common_scripts\utility::flag_init( "aa_main_" + level.script );
|
|
common_scripts\utility::flag_set( "aa_main_" + level.script );
|
|
}
|
|
|
|
command_used( var_0 )
|
|
{
|
|
var_1 = getkeybinding( var_0 );
|
|
|
|
if ( var_1["count"] <= 0 )
|
|
return 0;
|
|
|
|
for ( var_2 = 1; var_2 < var_1["count"] + 1; var_2++ )
|
|
{
|
|
if ( self buttonpressed( var_1["key" + var_2] ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
aa_time_tracking()
|
|
{
|
|
waittillframeend;
|
|
|
|
for (;;)
|
|
wait 0.2;
|
|
}
|
|
|
|
aa_player_ads_tracking()
|
|
{
|
|
level.player endon( "death" );
|
|
level.player_ads_time = 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player maps\_utility::isads() )
|
|
{
|
|
level.player_ads_time = gettime();
|
|
|
|
while ( level.player maps\_utility::isads() )
|
|
wait 0.05;
|
|
|
|
continue;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
aa_player_health_tracking()
|
|
{
|
|
for (;;)
|
|
{
|
|
level.player waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
aa_add_event( "aa_player_damage_taken", var_0 );
|
|
|
|
if ( !isalive( level.player ) )
|
|
{
|
|
aa_add_event( "aa_deaths", 1 );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
auto_adjust_new_zone( var_0 )
|
|
{
|
|
if ( !isdefined( level.auto_adjust_flags ) )
|
|
level.auto_adjust_flags = [];
|
|
|
|
common_scripts\utility::flag_wait( "auto_adjust_initialized" );
|
|
level.auto_adjust_results[var_0] = [];
|
|
level.auto_adjust_flags[var_0] = 0;
|
|
common_scripts\utility::flag_wait( var_0 );
|
|
|
|
if ( getdvar( "aa_zone" + var_0 ) == "" )
|
|
{
|
|
setdvar( "aa_zone" + var_0, "on" );
|
|
level.auto_adjust_flags[var_0] = 1;
|
|
aa_update_flags();
|
|
setdvar( "start_time" + var_0, getdvar( "aa_time_tracking" ) );
|
|
setdvar( "starting_player_kills" + var_0, getdvar( "aa_player_kills" ) );
|
|
setdvar( "starting_deaths" + var_0, getdvar( "aa_deaths" ) );
|
|
setdvar( "starting_ads_damage_dealt" + var_0, getdvar( "aa_ads_damage_dealt" ) );
|
|
setdvar( "starting_player_damage_dealt" + var_0, getdvar( "aa_player_damage_dealt" ) );
|
|
setdvar( "starting_player_damage_taken" + var_0, getdvar( "aa_player_damage_taken" ) );
|
|
setdvar( "starting_enemy_damage_taken" + var_0, getdvar( "aa_enemy_damage_taken" ) );
|
|
setdvar( "starting_enemy_deaths" + var_0, getdvar( "aa_enemy_deaths" ) );
|
|
}
|
|
else if ( getdvar( "aa_zone" + var_0 ) == "done" )
|
|
return;
|
|
|
|
common_scripts\utility::flag_waitopen( var_0 );
|
|
auto_adust_zone_complete( var_0 );
|
|
}
|
|
|
|
auto_adust_zone_complete( var_0 )
|
|
{
|
|
setdvar( "aa_zone" + var_0, "done" );
|
|
var_1 = getdvarfloat( "start_time" + var_0 );
|
|
var_2 = getdvarint( "starting_player_kills" + var_0 );
|
|
var_3 = getdvarint( "aa_enemy_deaths" + var_0 );
|
|
var_4 = getdvarint( "aa_enemy_damage_taken" + var_0 );
|
|
var_5 = getdvarint( "aa_player_damage_taken" + var_0 );
|
|
var_6 = getdvarint( "aa_player_damage_dealt" + var_0 );
|
|
var_7 = getdvarint( "aa_ads_damage_dealt" + var_0 );
|
|
var_8 = getdvarint( "aa_deaths" + var_0 );
|
|
level.auto_adjust_flags[var_0] = 0;
|
|
aa_update_flags();
|
|
var_9 = getdvarfloat( "aa_time_tracking" ) - var_1;
|
|
var_10 = getdvarint( "aa_player_kills" ) - var_2;
|
|
var_11 = getdvarint( "aa_enemy_deaths" ) - var_3;
|
|
var_12 = 0;
|
|
|
|
if ( var_11 > 0 )
|
|
{
|
|
var_12 = var_10 / var_11;
|
|
var_12 = var_12 * 100;
|
|
var_12 = int( var_12 );
|
|
}
|
|
|
|
var_13 = getdvarint( "aa_enemy_damage_taken" ) - var_4;
|
|
var_14 = getdvarint( "aa_player_damage_dealt" ) - var_6;
|
|
var_15 = 0;
|
|
var_16 = 0;
|
|
|
|
if ( var_13 > 0 && var_9 > 0 )
|
|
{
|
|
var_15 = var_14 / var_13;
|
|
var_15 = var_15 * 100;
|
|
var_15 = int( var_15 );
|
|
var_16 = var_14 / var_9;
|
|
var_16 = var_16 * 60;
|
|
var_16 = int( var_16 );
|
|
}
|
|
|
|
var_17 = getdvarint( "aa_ads_damage_dealt" ) - var_7;
|
|
var_18 = 0;
|
|
|
|
if ( var_14 > 0 )
|
|
{
|
|
var_18 = var_17 / var_14;
|
|
var_18 = var_18 * 100;
|
|
var_18 = int( var_18 );
|
|
}
|
|
|
|
var_19 = getdvarint( "aa_player_damage_taken" ) - var_5;
|
|
var_20 = 0;
|
|
|
|
if ( var_9 > 0 )
|
|
var_20 = var_19 / var_9;
|
|
|
|
var_21 = var_20 * 60;
|
|
var_21 = int( var_21 );
|
|
var_22 = getdvarint( "aa_deaths" ) - var_8;
|
|
var_23 = [];
|
|
var_23["player_damage_taken_per_minute"] = var_21;
|
|
var_23["player_damage_dealt_per_minute"] = var_16;
|
|
var_23["minutes"] = var_9 / 60;
|
|
var_23["deaths"] = var_22;
|
|
var_23["gameskill"] = level.gameskill;
|
|
level.auto_adjust_results[var_0] = var_23;
|
|
var_24 = "Completed AA sequence: ";
|
|
var_24 = var_24 + ( level.script + "/" + var_0 );
|
|
var_25 = getarraykeys( var_23 );
|
|
|
|
for ( var_26 = 0; var_26 < var_25.size; var_26++ )
|
|
var_24 = var_24 + ", " + var_25[var_26] + ": " + var_23[var_25[var_26]];
|
|
|
|
logstring( var_24 );
|
|
}
|
|
|
|
aa_print_vals( var_0, var_1 )
|
|
{
|
|
logstring( var_0 + ": " + var_1[var_0] );
|
|
}
|
|
|
|
aa_update_flags()
|
|
{
|
|
|
|
}
|
|
|
|
aa_add_event( var_0, var_1 )
|
|
{
|
|
var_2 = getdvarint( var_0 );
|
|
setdvar( var_0, var_2 + var_1 );
|
|
}
|
|
|
|
aa_add_event_float( var_0, var_1 )
|
|
{
|
|
var_2 = getdvarfloat( var_0 );
|
|
setdvar( var_0, var_2 + var_1 );
|
|
}
|
|
|
|
return_false( var_0 )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
player_attacker( var_0 )
|
|
{
|
|
if ( [[ level.custom_player_attacker ]]( var_0 ) )
|
|
return 1;
|
|
|
|
if ( isplayer( var_0 ) )
|
|
return 1;
|
|
|
|
if ( !isdefined( var_0.car_damage_owner_recorder ) )
|
|
return 0;
|
|
|
|
return var_0 player_did_most_damage();
|
|
}
|
|
|
|
player_did_most_damage()
|
|
{
|
|
return self.player_damage * 1.75 > self.non_player_damage;
|
|
}
|
|
|
|
empty_kill_func( var_0, var_1, var_2 )
|
|
{
|
|
|
|
}
|
|
|
|
auto_adjust_enemy_died( var_0, var_1, var_2, var_3 )
|
|
{
|
|
aa_add_event( "aa_enemy_deaths", 1 );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
if ( !player_attacker( var_1 ) )
|
|
return;
|
|
|
|
[[ level.global_kill_func ]]( var_2, self.damagelocation, var_3 );
|
|
aa_add_event( "aa_player_kills", 1 );
|
|
}
|
|
|
|
auto_adjust_enemy_death_detection( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
|
|
{
|
|
if ( !isalive( self ) || self.delayeddeath )
|
|
{
|
|
auto_adjust_enemy_died( var_1, var_2, var_5, var_4 );
|
|
return;
|
|
}
|
|
|
|
if ( !player_attacker( var_2 ) )
|
|
return;
|
|
|
|
aa_player_attacks_enemy_with_ads( var_1, var_5, var_4 );
|
|
}
|
|
|
|
aa_player_attacks_enemy_with_ads( var_0, var_1, var_2 )
|
|
{
|
|
aa_add_event( "aa_player_damage_dealt", var_0 );
|
|
|
|
if ( !level.player maps\_utility::isads() )
|
|
{
|
|
[[ level.global_damage_func ]]( var_1, self.damagelocation, var_2 );
|
|
return 0;
|
|
}
|
|
|
|
if ( !bullet_attack( var_1 ) )
|
|
{
|
|
[[ level.global_damage_func ]]( var_1, self.damagelocation, var_2 );
|
|
return 0;
|
|
}
|
|
|
|
[[ level.global_damage_func_ads ]]( var_1, self.damagelocation, var_2 );
|
|
aa_add_event( "aa_ads_damage_dealt", var_0 );
|
|
return 1;
|
|
}
|
|
|
|
bullet_attack( var_0 )
|
|
{
|
|
if ( var_0 == "MOD_PISTOL_BULLET" )
|
|
return 1;
|
|
|
|
return var_0 == "MOD_RIFLE_BULLET";
|
|
}
|
|
|
|
add_fractional_data_point( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.difficultysettings_frac_data_points[var_0] ) )
|
|
level.difficultysettings_frac_data_points[var_0] = [];
|
|
|
|
var_3 = [];
|
|
var_3["frac"] = var_1;
|
|
var_3["val"] = var_2;
|
|
level.difficultysettings_frac_data_points[var_0][level.difficultysettings_frac_data_points[var_0].size] = var_3;
|
|
}
|
|
|
|
coop_with_one_player_downed()
|
|
{
|
|
return maps\_utility::is_coop() && maps\_utility::get_players_healthy().size == 1;
|
|
}
|