IL-GSC/AW/PC/maps/_autosave.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

772 lines
12 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: _autosave.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 28
* Decompile Time: 413 ms
* Timestamp: 4/22/2024 2:20:05 AM
*******************************************************************/
//Function Number: 1
main()
{
level.lastautosavetime = 0;
common_scripts\utility::flag_init("game_saving");
common_scripts\utility::flag_init("can_save");
common_scripts\utility::flag_set("can_save");
common_scripts\utility::flag_init("disable_autosaves");
if(!isdefined(level._extra_autosave_checks))
{
level._extra_autosave_checks = [];
}
level.autosave_proximity_threat_func = ::autosave_proximity_threat_func;
}
//Function Number: 2
getdescription()
{
return &"AUTOSAVE_AUTOSAVE";
}
//Function Number: 3
getnames(param_00)
{
if(param_00 == 0)
{
var_01 = &"AUTOSAVE_GAME";
}
else
{
var_01 = &"AUTOSAVE_NOGAME";
}
return var_01;
}
//Function Number: 4
beginningoflevelsave()
{
common_scripts\utility::flag_wait("introscreen_complete");
if(isdefined(level.introscreen_complete_delay))
{
wait(level.introscreen_complete_delay);
}
if(level.missionfailed)
{
return;
}
if(common_scripts\utility::flag("game_saving"))
{
return;
}
common_scripts\utility::flag_set("game_saving");
var_00 = "levelshots / autosave / autosave_" + level.script + "start";
savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1);
setdvar("ui_grenade_death","0");
common_scripts\utility::flag_clear("game_saving");
}
//Function Number: 5
trigger_autosave_stealth(param_00)
{
param_00 waittill("trigger");
maps\_utility::autosave_stealth();
}
//Function Number: 6
trigger_autosave_tactical(param_00)
{
param_00 waittill("trigger");
maps\_utility::autosave_tactical();
}
//Function Number: 7
trigger_autosave(param_00)
{
if(!isdefined(param_00.script_autosave))
{
param_00.script_autosave = 0;
}
autosaves_think(param_00);
}
//Function Number: 8
autosaves_think(param_00)
{
var_01 = getnames(param_00.script_autosave);
if(!isdefined(var_01))
{
return;
}
wait(1);
param_00 waittill("trigger");
var_02 = param_00.script_autosave;
var_03 = "levelshots / autosave / autosave_" + level.script + var_02;
tryautosave(var_02,var_01,var_03);
if(isdefined(param_00))
{
param_00 delete();
}
}
//Function Number: 9
autosavenamethink(param_00)
{
if(maps\_utility::is_no_game_start())
{
return;
}
wait(1);
param_00 waittill("trigger");
if(!isdefined(param_00))
{
return;
}
var_01 = param_00.script_autosavename;
param_00 delete();
if(isdefined(level.customautosavecheck))
{
if(![[ level.customautosavecheck ]]())
{
return;
}
}
maps\_utility::autosave_by_name(var_01);
}
//Function Number: 10
trigger_autosave_immediate(param_00)
{
param_00 waittill("trigger");
}
//Function Number: 11
autosaveprint(param_00,param_01)
{
if(isdefined(param_01))
{
}
}
//Function Number: 12
autosave_timeout(param_00)
{
level endon("trying_new_autosave");
level endon("autosave_complete");
wait(param_00);
common_scripts\utility::flag_clear("game_saving");
level notify("autosave_timeout");
}
//Function Number: 13
_autosave_game_now_nochecks()
{
var_00 = "levelshots / autosave / autosave_" + level.script + "start";
savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1);
autosave_recon(0);
}
//Function Number: 14
_autosave_game_now_notrestart()
{
var_00 = "levelshots / autosave / autosave_" + level.script + "start";
if(getdvarint("g_reloading") == 0)
{
savegame("levelstart",&"AUTOSAVE_LEVELSTART",var_00,1);
autosave_recon(0);
}
}
//Function Number: 15
_autosave_game_now(param_00)
{
if(isdefined(level.missionfailed) && level.missionfailed)
{
return;
}
if(common_scripts\utility::flag("game_saving"))
{
return 0;
}
for(var_01 = 0;var_01 < level.players.size;var_01++)
{
var_02 = level.players[var_01];
if(!isalive(var_02))
{
return 0;
}
}
var_03 = "save_now";
var_04 = getdescription();
if(isdefined(param_00))
{
var_05 = savegamenocommit(var_03,var_04,"$default",1);
}
else
{
var_05 = savegamenocommit(var_04,var_05);
}
wait(0.05);
if(issaverecentlyloaded())
{
level.lastautosavetime = gettime();
return 0;
}
if(var_05 < 0)
{
return 0;
}
if(!try_to_autosave_now())
{
return 0;
}
common_scripts\utility::flag_set("game_saving");
wait(2);
common_scripts\utility::flag_clear("game_saving");
if(!commitwouldbevalid(var_05))
{
return 0;
}
if(try_to_autosave_now())
{
autosave_recon(var_05);
commitsave(var_05);
setdvar("ui_grenade_death","0");
}
return 1;
}
//Function Number: 16
autosave_now_trigger(param_00)
{
param_00 waittill("trigger");
maps\_utility::autosave_now();
}
//Function Number: 17
try_to_autosave_now()
{
if(!issavesuccessful())
{
return 0;
}
for(var_00 = 0;var_00 < level.players.size;var_00++)
{
var_01 = level.players[var_00];
if(!var_01 autosavehealthcheck())
{
return 0;
}
}
if(!common_scripts\utility::flag("can_save"))
{
return 0;
}
return 1;
}
//Function Number: 18
tryautosave(param_00,param_01,param_02,param_03,param_04,param_05)
{
if(common_scripts\utility::flag("disable_autosaves"))
{
return 0;
}
level endon("nextmission");
level.player endon("death");
if(maps\_utility::is_coop())
{
level.player2 endon("death");
}
level notify("trying_new_autosave");
if(common_scripts\utility::flag("game_saving"))
{
return 0;
}
if(isdefined(level.nextmission))
{
return 0;
}
var_06 = 1.25;
var_07 = 1.25;
if(isdefined(param_03) && param_03 < var_06 + var_07)
{
}
if(!isdefined(param_05))
{
param_05 = 0;
}
if(!isdefined(param_02))
{
param_02 = "$default";
}
if(!isdefined(param_04))
{
param_04 = 0;
}
common_scripts\utility::flag_set("game_saving");
var_08 = getdescription();
var_09 = gettime();
for(;;)
{
if(autosavecheck(undefined,param_04))
{
var_0A = savegamenocommit(param_00,var_08,param_02,param_05);
if(var_0A < 0)
{
break;
}
wait(0.05);
if(issaverecentlyloaded())
{
level.lastautosavetime = gettime();
break;
}
wait(var_06);
if(!autosavecheck(undefined,param_04))
{
continue;
}
wait(var_07);
if(!autosavecheck_not_picky())
{
continue;
}
if(isdefined(param_03))
{
if(gettime() > var_09 + param_03 * 1000)
{
break;
}
}
if(!common_scripts\utility::flag("can_save"))
{
break;
}
if(!commitwouldbevalid(var_0A))
{
common_scripts\utility::flag_clear("game_saving");
return 0;
}
autosave_recon(var_0A);
commitsave(var_0A);
level.lastsavetime = gettime();
setdvar("ui_grenade_death","0");
break;
}
wait(0.25);
}
common_scripts\utility::flag_clear("game_saving");
return 1;
}
//Function Number: 19
extra_autosave_checks_failed()
{
foreach(var_01 in level._extra_autosave_checks)
{
if(![[ var_01["func"] ]]())
{
autosaveprint("autosave failed: " + var_01["msg"]);
return 1;
}
}
return 0;
}
//Function Number: 20
autosavecheck_not_picky()
{
return autosavecheck(0,0);
}
//Function Number: 21
autosavecheck(param_00,param_01)
{
if(isdefined(level.autosave_check_override))
{
return [[ level.autosave_check_override ]]();
}
if(isdefined(level.special_autosavecondition) && ![[ level.special_autosavecondition ]]())
{
return 0;
}
if(level.missionfailed)
{
return 0;
}
if(!isdefined(param_00))
{
param_00 = level.dopickyautosavechecks;
}
if(!isdefined(param_01))
{
param_01 = 0;
}
if(param_01)
{
if(![[ level.global_callbacks["_autosave_stealthcheck"] ]]())
{
return 0;
}
}
for(var_02 = 0;var_02 < level.players.size;var_02++)
{
var_03 = level.players[var_02];
if(!var_03 autosavehealthcheck())
{
return 0;
}
if(param_00 && !var_03 autosaveammocheck())
{
return 0;
}
}
if(level.autosave_threat_check_enabled)
{
if(!autosavethreatcheck(param_00))
{
return 0;
}
}
for(var_02 = 0;var_02 < level.players.size;var_02++)
{
var_03 = level.players[var_02];
if(!var_03 autosaveplayercheck(param_00))
{
return 0;
}
}
if(isdefined(level.savehere) && !level.savehere)
{
return 0;
}
if(isdefined(level.cansave) && !level.cansave)
{
return 0;
}
if(extra_autosave_checks_failed())
{
return 0;
}
if(!issavesuccessful())
{
autosaveprint("autosave failed: save call was unsuccessful");
return 0;
}
return 1;
}
//Function Number: 22
autosaveplayercheck(param_00)
{
if(isdefined(level.ac130gunner) && level.ac130gunner == self)
{
return 1;
}
if(self ismeleeing() && param_00)
{
autosaveprint("autosave failed:player is meleeing");
return 0;
}
if(self isthrowinggrenade() && param_00)
{
autosaveprint("autosave failed:player is throwing a grenade");
return 0;
}
if(self isfiring() && param_00)
{
autosaveprint("autosave failed:player is firing");
return 0;
}
if(isdefined(self.shellshocked) && self.shellshocked)
{
autosaveprint("autosave failed:player is in shellshock");
return 0;
}
if(common_scripts\utility::isflashed())
{
autosaveprint("autosave failed:player is flashbanged");
return 0;
}
return 1;
}
//Function Number: 23
autosaveammocheck()
{
if(isdefined(level.noautosaveammocheck) && level.noautosaveammocheck)
{
return 1;
}
if(isdefined(level.ac130gunner) && level.ac130gunner == self)
{
return 1;
}
var_00 = self getweaponslistprimaries();
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_02 = self getfractionmaxammo(var_00[var_01]);
if(var_02 > 0.1)
{
return 1;
}
}
autosaveprint("autosave failed: ammo too low");
return 0;
}
//Function Number: 24
autosavehealthcheck()
{
if(isdefined(level.ac130gunner) && level.ac130gunner == self)
{
return 1;
}
if(maps\_utility::ent_flag_exist("laststand_downed") && maps\_utility::ent_flag("laststand_downed"))
{
return 0;
}
var_00 = self.health / self.maxhealth;
if(var_00 < 0.5)
{
return 0;
}
if(common_scripts\utility::flag("_radiation_poisoning"))
{
return 0;
}
if(maps\_utility::ent_flag("player_has_red_flashing_overlay"))
{
return 0;
}
return 1;
}
//Function Number: 25
autosavethreatcheck(param_00)
{
if(isdefined(level.ac130gunner) && level.ac130gunner == self)
{
return 1;
}
var_01 = getaispeciesarray("bad_guys","all");
foreach(var_03 in var_01)
{
if(!isdefined(var_03.enemy))
{
continue;
}
if(!isplayer(var_03.enemy))
{
continue;
}
if(var_03.type == "dog")
{
foreach(var_05 in level.players)
{
if(distance(var_03.origin,var_05.origin) < 384)
{
return 0;
}
}
continue;
}
if(isdefined(var_03.melee) && isdefined(var_03.melee.target) && isplayer(var_03.melee.target))
{
return 0;
}
var_07 = [[ level.autosave_proximity_threat_func ]](var_03);
if(var_07 == "return_even_if_low_accuracy")
{
return 0;
}
if(var_03.finalaccuracy < 0.021 && var_03.finalaccuracy > -1)
{
continue;
}
if(var_07 == "return")
{
return 0;
}
if(var_07 == "none")
{
continue;
}
if(var_03.a.lastshoottime > gettime() - 500)
{
if(param_00 || var_03 animscripts\utility::canseeenemy(0) && var_03 canshootenemy(0))
{
return 0;
}
}
if(isdefined(var_03.a.aimidlethread) && var_03 animscripts\utility::canseeenemy(0) && var_03 canshootenemy(0))
{
return 0;
}
}
if(maps\_utility::player_is_near_live_grenade())
{
return 0;
}
var_09 = getentarray("destructible","classname");
foreach(var_0B in var_09)
{
if(!isdefined(var_0B.healthdrain))
{
continue;
}
foreach(var_05 in level.players)
{
if(distance(var_0B.origin,var_05.origin) < 400)
{
return 0;
}
}
}
return 1;
}
//Function Number: 26
enemy_is_a_threat()
{
if(self.finalaccuracy >= 0.021)
{
return 1;
}
foreach(var_01 in level.players)
{
if(distance(self.origin,var_01.origin) < 500)
{
return 1;
}
}
return 0;
}
//Function Number: 27
autosave_proximity_threat_func(param_00)
{
foreach(var_02 in level.players)
{
var_03 = distance(param_00.origin,var_02.origin);
if(var_03 < 200)
{
return "return_even_if_low_accuracy";
}
else if(var_03 < 360)
{
return "return";
}
else if(var_03 < 1000)
{
return "threat_exists";
}
}
return "none";
}
//Function Number: 28
autosave_recon(param_00)
{
if(!maps\_utility::is_default_start())
{
return;
}
var_01 = maps\_utility_code::get_leveltime();
var_02 = var_01;
if(isdefined(level.recon_checkpoint_lasttime))
{
var_02 = var_01 - level.recon_checkpoint_lasttime;
}
level.recon_checkpoint_lasttime = var_01;
reconevent("script_checkpoint: id %d, leveltime %d, deltatime %d",param_00,var_01,var_02);
}