mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
499 lines
12 KiB
Plaintext
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";
|
|
} |