IL-GSC/AW/PC/MP/maps/mp/agents/_agents.gsc
2023-10-27 03:49:01 -04:00

499 lines
12 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\agents\_agents.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 13
* Decompile Time: 238 ms
* Timestamp: 10/27/2023 1:40:59 AM
*******************************************************************/
//Function Number: 1
main()
{
if(isdefined(level.createfx_enabled) && level.createfx_enabled)
{
return;
}
setup_callbacks();
level.badplace_cylinder_func = ::badplace_cylinder;
level.badplace_delete_func = ::badplace_delete;
level thread maps\mp\agents\_agent_common::init();
if(!maps\mp\_utility::invirtuallobby() && !isdefined(level.iszombiegame) && level.iszombiegame)
{
level thread maps\mp\killstreaks\_agent_killstreak::init();
level thread maps\mp\killstreaks\_dog_killstreak::init();
}
}
//Function Number: 2
setup_callbacks()
{
if(!isdefined(level.agent_funcs))
{
level.agent_funcs = [];
}
if(!isdefined(level.iszombiegame) && level.iszombiegame)
{
level.agent_funcs["player"] = [];
level.agent_funcs["player"]["spawn"] = ::spawn_agent_player;
level.agent_funcs["player"]["think"] = ::maps\mp\bots\_bots_gametype_war::bot_war_think;
level.agent_funcs["player"]["on_killed"] = ::on_agent_player_killed;
level.agent_funcs["player"]["on_damaged"] = ::on_agent_player_damaged;
level.agent_funcs["player"]["on_damaged_finished"] = ::agent_damage_finished;
maps\mp\killstreaks\_agent_killstreak::setup_callbacks();
maps\mp\killstreaks\_dog_killstreak::setup_callbacks();
}
}
//Function Number: 3
wait_till_agent_funcs_defined()
{
while(!isdefined(level.agent_funcs))
{
wait(0.05);
}
}
//Function Number: 4
add_humanoid_agent(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
var_09 = maps\mp\agents\_agent_common::connectnewagent(param_00,param_01,param_02);
if(isdefined(var_09))
{
var_09 thread [[ var_09 maps\mp\agents\_agent_utility::agentfunc("spawn") ]](param_03,param_04,param_05,param_06,param_07,param_08);
}
return var_09;
}
//Function Number: 5
spawn_agent_player(param_00,param_01,param_02,param_03,param_04,param_05)
{
self endon("disconnect");
while(!isdefined(level.getspawnpoint))
{
wait 0.05;
}
if(self.hasdied)
{
wait(randomintrange(6,10));
}
maps\mp\agents\_agent_utility::initplayerscriptvariables(1);
if(isdefined(param_00) && isdefined(param_01))
{
var_06 = param_00;
var_07 = param_01;
self.lastspawnpoint = spawnstruct();
self.lastspawnpoint.origin = var_06;
self.lastspawnpoint.angles = var_07;
}
else
{
var_08 = self [[ level.getspawnpoint ]]();
var_06 = var_08.origin;
var_07 = var_08.angles;
self.lastspawnpoint = var_08;
}
maps\mp\agents\_agent_utility::activateagent();
self.lastspawntime = gettime();
self.spawntime = gettime();
var_09 = var_06 + (0,0,25);
var_0A = var_06;
var_0B = playerphysicstrace(var_09,var_0A);
if(distancesquared(var_0B,var_09) > 1)
{
var_06 = var_0B;
}
self spawnagent(var_06,var_07);
if(isdefined(param_05))
{
self.agent_override_difficulty = param_05;
}
if(isdefined(self.agent_override_difficulty))
{
if(self.agent_override_difficulty == "follow_code_and_dev_dvar")
{
maps\mp\bots\_bots_util::bot_set_difficulty(self botgetdifficulty(),1);
}
else
{
maps\mp\bots\_bots_util::bot_set_difficulty(param_05);
}
}
else
{
maps\mp\bots\_bots_util::bot_set_difficulty(self botgetdifficulty());
}
if(isdefined(param_03) && param_03)
{
self.use_randomized_personality = 1;
}
if(isdefined(self.use_randomized_personality) && self.use_randomized_personality)
{
if(!self.hasdied)
{
var_0C = self botgetdifficultysetting("advancedPersonality");
if(isdefined(var_0C) && var_0C != 0)
{
maps\mp\bots\_bots_personality::bot_balance_personality();
}
}
maps\mp\bots\_bots_personality::bot_assign_personality_functions();
}
else
{
maps\mp\bots\_bots_util::bot_set_personality("default");
}
initplayerclass();
maps\mp\agents\_agent_common::set_agent_health(100);
if(isdefined(param_04) && param_04)
{
self.respawn_on_death = 1;
}
if(isdefined(param_02))
{
maps\mp\agents\_agent_utility::set_agent_team(param_02.team,param_02);
}
if(isdefined(self.owner))
{
thread destroyonownerdisconnect(self.owner);
}
thread maps\mp\_flashgrenades::monitorflash();
self enableanimstate(0);
self [[ level.onspawnplayer ]]();
maps\mp\gametypes\_class::giveandapplyloadout(self.team,self.class,1);
thread maps\mp\bots\_bots::bot_think_watch_enemy(1);
thread maps\mp\bots\_bots::bot_think_crate();
if(self.agent_type == "player")
{
thread maps\mp\bots\_bots::bot_think_level_actions();
}
else if(self.agent_type == "odin_juggernaut")
{
thread maps\mp\bots\_bots::bot_think_level_actions(128);
}
thread maps\mp\bots\_bots_strategy::bot_think_tactical_goals();
self thread [[ maps\mp\agents\_agent_utility::agentfunc("think") ]]();
if(!self.hasdied)
{
maps\mp\gametypes\_spawnlogic::addtoparticipantsarray();
}
if(!self.hasdied)
{
thread maps\mp\gametypes\_weapons::onplayerspawned();
thread maps\mp\gametypes\_battlechatter_mp::onplayerspawned();
}
self.hasdied = 0;
thread maps\mp\gametypes\_healthoverlay::playerhealthregen();
if(isdefined(self.use_randomized_personality) && self.use_randomized_personality && isdefined(self.respawn_on_death) && self.respawn_on_death)
{
self setagentcostumeindex(1);
}
level notify("spawned_agent_player",self);
level notify("spawned_agent",self);
level notify("player_spawned",self);
self notify("spawned_player");
}
//Function Number: 6
destroyonownerdisconnect(param_00)
{
self endon("death");
param_00 waittill("killstreak_disowned");
self notify("owner_disconnect");
if(maps\mp\gametypes\_hostmigration::waittillhostmigrationdone())
{
wait(0.05);
}
self suicide();
}
//Function Number: 7
agent_damage_finished(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(isdefined(param_00) || isdefined(param_01))
{
if(!isdefined(param_00))
{
param_00 = param_01;
}
if(isdefined(self.allowvehicledamage) && !self.allowvehicledamage)
{
if(isdefined(param_00.classname) && param_00.classname == "script_vehicle")
{
return 0;
}
}
if(isdefined(param_00.classname) && param_00.classname == "auto_turret")
{
param_01 = param_00;
}
if(isdefined(param_01) && param_04 != "MOD_FALLING" && param_04 != "MOD_SUICIDE")
{
if(level.teambased)
{
if(isdefined(param_01.team) && param_01.team != self.team)
{
self setagentattacker(param_01);
}
}
else
{
self setagentattacker(param_01);
}
}
}
var_0A = maps\mp\gametypes\_damage::shouldplayblastimpact(param_03,param_04,param_05);
var_0B = self finishagentdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,0,var_0A);
if(isdefined(var_0B))
{
thread finishagentdamage_impactfxwrapper(var_0B[0],var_0B[1],var_0B[2],var_0B[3],var_0B[4],var_0B[5],var_0B[6]);
}
if(!isdefined(self.isactive))
{
self.waitingtodeactivate = 1;
}
return 1;
}
//Function Number: 8
finishagentdamage_impactfxwrapper(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
{
waittillframeend;
if(!isdefined(self) || !isdefined(param_00))
{
return;
}
self finishagentdamage_impactfx(param_00,param_01,param_02,param_03,param_04,param_05,param_06);
}
//Function Number: 9
on_agent_generic_damaged(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
var_0A = isdefined(param_01) && isdefined(self.owner) && self.owner == param_01;
var_0B = maps\mp\_utility::attackerishittingteam(self.owner,param_01) || var_0A;
if(level.teambased && var_0B && !level.friendlyfire)
{
return 0;
}
if(!level.teambased && var_0A)
{
return 0;
}
if(isdefined(param_04) && param_04 == "MOD_CRUSH" && isdefined(param_00) && isdefined(param_00.classname) && param_00.classname == "script_vehicle")
{
return 0;
}
if(!isdefined(self) || !maps\mp\_utility::isreallyalive(self))
{
return 0;
}
if(isdefined(param_01) && param_01.classname == "script_origin" && isdefined(param_01.type) && param_01.type == "soft_landing")
{
return 0;
}
if(param_05 == "killstreak_emp_mp")
{
return 0;
}
if(param_05 == "bouncingbetty_mp" && !maps\mp\gametypes\_weapons::minedamageheightpassed(param_00,self))
{
return 0;
}
if((param_05 == "throwingknife_mp" || param_05 == "throwingknifejugg_mp") && param_04 == "MOD_IMPACT")
{
param_02 = self.health + 1;
}
if(isdefined(param_00) && isdefined(param_00.stuckenemyentity) && param_00.stuckenemyentity == self)
{
param_02 = self.health + 1;
}
if(param_02 <= 0)
{
return 0;
}
if(isdefined(level.modifyplayerdamage))
{
param_02 = [[ level.modifyplayerdamage ]](self,param_00,param_01,param_02,param_04,param_05,param_06,param_07,param_08);
}
if(isdefined(param_01) && param_01 != self && param_02 > 0 && !isdefined(param_08) || param_08 != "shield")
{
if(param_03 & level.idflags_stun)
{
var_0C = "stun";
}
else if(!maps\mp\gametypes\_damage::shouldweaponfeedback(param_06))
{
var_0C = "none";
}
else
{
var_0C = "standard";
if(isdefined(level.iszombiegame) && level.iszombiegame)
{
if(param_05 == "trap_zm_mp" || param_05 == "zombie_vaporize_mp" || param_05 == "zombie_trap_turret_mp" || param_05 == "zombie_water_trap_mp")
{
var_0C = "none";
}
else
{
if(param_05 == "iw5_microwavezm_mp")
{
var_0C = "nosound";
}
if(param_02 < self.health)
{
switch(param_08)
{
case "neck":
case "helmet":
case "head":
break;
}
}
}
}
}
}
}
//Function Number: 10
on_agent_player_damaged(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
var_0A = isdefined(param_01) && isdefined(self.owner) && self.owner == param_01;
if(!level.teambased && var_0A)
{
return 0;
}
maps\mp\gametypes\_damage::callback_playerdamage(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09);
}
//Function Number: 11
on_agent_player_killed(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
on_humanoid_agent_killed_common(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,1);
if(isplayer(param_01) && !isdefined(self.owner) || param_01 != self.owner && !isdefined(self.nonkillstreakagent) || !self.nonkillstreakagent)
{
maps\mp\gametypes\_damage::onkillstreakkilled(param_01,param_04,param_03,param_02,"destroyed_squad_mate");
}
if(isdefined(level.on_agent_player_killed))
{
[[ level.on_agent_player_killed ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08);
}
thread maps\mp\gametypes\_weapons::dropscavengerfordeath(param_01);
if(self.isactive)
{
self.hasdied = 1;
if(maps\mp\_utility::getgametypenumlives() != 1 && isdefined(self.respawn_on_death) && self.respawn_on_death)
{
self thread [[ maps\mp\agents\_agent_utility::agentfunc("spawn") ]]();
return;
}
maps\mp\agents\_agent_utility::deactivateagent();
}
}
//Function Number: 12
on_humanoid_agent_killed_common(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
if(maps\mp\_riotshield::hasriotshieldequipped())
{
maps\mp\gametypes\_damage::launchshield(param_02,param_03);
if(!param_09)
{
var_0A = self dropitem(self getcurrentweapon());
if(isdefined(var_0A))
{
var_0A thread maps\mp\gametypes\_weapons::deletepickupafterawhile();
var_0A.owner = self;
var_0A.ownersattacker = param_01;
var_0A makeunusable();
}
}
}
if(param_09)
{
self thread [[ level.weapondropfunction ]](param_01,param_03);
}
if(!isdefined(self.bypassagentcorpse) || !self.bypassagentcorpse)
{
self.body = self finishagentdamage(param_08);
if(isdefined(level.agentshouldragdollimmediatelyfunc) && [[ level.agentshouldragdollimmediatelyfunc ]](param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09))
{
self.body startragdoll();
if(!self.body isragdoll())
{
thread maps\mp\gametypes\_damage::delaystartragdoll(self.body,param_06,param_05,param_04,param_00,param_03);
}
}
else
{
thread maps\mp\gametypes\_damage::delaystartragdoll(self.body,param_06,param_05,param_04,param_00,param_03);
}
}
maps\mp\_riotshield::riotshield_clear();
}
//Function Number: 13
initplayerclass()
{
if(isdefined(self.class_override))
{
self.class = self.class_override;
return;
}
if(maps\mp\bots\_bots_loadout::bot_setup_loadout_callback())
{
self.class = "callback";
return;
}
self.class = "class1";
}