mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
335 lines
6.9 KiB
Plaintext
335 lines
6.9 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\mp\bots\_bot_koth.gsc
|
|
* Game: Call of Duty: Black Ops 2
|
|
* Platform: PC
|
|
* Function Count: 11
|
|
* Decompile Time: 6 ms
|
|
* Timestamp: 10/28/2023 12:10:27 AM
|
|
*******************************************************************/
|
|
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_utility;
|
|
#include maps/mp/bots/_bot;
|
|
#include maps/mp/bots/_bot_combat;
|
|
#include maps/mp/gametypes/koth;
|
|
|
|
//Function Number: 1
|
|
bot_koth_think()
|
|
{
|
|
if(!(IsDefined(level.zone.trig.goal_radius)))
|
|
{
|
|
maxs = level.zone.trig getmaxs();
|
|
maxs = level.zone.trig.origin + maxs;
|
|
level.zone.trig.goal_radius = distance(level.zone.trig.origin,maxs);
|
|
/#
|
|
println("distance: " + level.zone.trig.goal_radius);
|
|
#/
|
|
ground = bullettrace(level.zone.gameobject.curorigin,1024 - VectorScale((0,0,1)),level.zone.gameobject.curorigin,0);
|
|
level.zone.trig.goal = 8 + VectorScale((0,0,1));
|
|
}
|
|
|
|
if(!(bot_has_hill_goal()))
|
|
{
|
|
self bot_move_to_hill();
|
|
}
|
|
|
|
if(self bot_is_at_hill())
|
|
{
|
|
self bot_capture_hill();
|
|
}
|
|
|
|
bot_hill_tactical_insertion();
|
|
bot_hill_grenade();
|
|
}
|
|
|
|
//Function Number: 2
|
|
bot_has_hill_goal()
|
|
{
|
|
origin = self getgoal("koth_hill");
|
|
if(IsDefined(origin))
|
|
{
|
|
if(distance2dsquared(level.zone.gameobject.curorigin,origin) < level.zone.trig.goal_radius * level.zone.trig.goal_radius)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 3
|
|
bot_is_at_hill()
|
|
{
|
|
return self atgoal("koth_hill");
|
|
}
|
|
|
|
//Function Number: 4
|
|
bot_move_to_hill()
|
|
{
|
|
if(GetTime() < self.bot.update_objective + 4000)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self clearlookat();
|
|
self cancelgoal("koth_hill");
|
|
if(self getstance() == "prone")
|
|
{
|
|
self setstance("crouch");
|
|
wait(0.25);
|
|
}
|
|
|
|
if(self getstance() == "crouch")
|
|
{
|
|
self setstance("stand");
|
|
wait(0.25);
|
|
}
|
|
|
|
nodes = getnodesinradiussorted(level.zone.trig.goal,level.zone.trig.goal_radius,0,128);
|
|
foreach(node in nodes)
|
|
{
|
|
if(self maps/mp/bots/_bot::bot_friend_goal_in_radius("koth_hill",node.origin,64) == 0)
|
|
{
|
|
if(findpath(self.origin,node.origin,self,0,1))
|
|
{
|
|
self addgoal(node,24,3,"koth_hill");
|
|
self.bot.update_objective = GetTime();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 5
|
|
bot_get_look_at()
|
|
{
|
|
enemy = self maps/mp/bots/_bot::bot_get_closest_enemy(self.origin,1);
|
|
if(IsDefined(enemy))
|
|
{
|
|
node = getvisiblenode(self.origin,enemy.origin);
|
|
if(IsDefined(node) && distancesquared(self.origin,node.origin) > 1024)
|
|
{
|
|
return node.origin;
|
|
}
|
|
}
|
|
|
|
enemies = self maps/mp/bots/_bot::bot_get_enemies(0);
|
|
if(enemies.size)
|
|
{
|
|
enemy = random(enemies);
|
|
}
|
|
|
|
if(IsDefined(enemy))
|
|
{
|
|
node = getvisiblenode(self.origin,enemy.origin);
|
|
if(IsDefined(node) && distancesquared(self.origin,node.origin) > 1024)
|
|
{
|
|
return node.origin;
|
|
}
|
|
}
|
|
|
|
spawn = random(level.spawnpoints);
|
|
node = getvisiblenode(self.origin,spawn.origin);
|
|
if(IsDefined(node) && distancesquared(self.origin,node.origin) > 1024)
|
|
{
|
|
return node.origin;
|
|
}
|
|
|
|
return level.zone.gameobject.curorigin;
|
|
}
|
|
|
|
//Function Number: 6
|
|
bot_capture_hill()
|
|
{
|
|
self addgoal(self.origin,24,3,"koth_hill");
|
|
self setstance("crouch");
|
|
if(GetTime() > self.bot.update_lookat)
|
|
{
|
|
origin = self bot_get_look_at();
|
|
z = 20;
|
|
if(distancesquared(origin,self.origin) > 262144)
|
|
{
|
|
z = randomintrange(16,60);
|
|
}
|
|
|
|
self lookat(origin + (0,0,z));
|
|
if(distancesquared(origin,self.origin) > 65536)
|
|
{
|
|
dir = vectornormalize(self.origin - origin);
|
|
dir = VectorScale(dir);
|
|
origin = origin + dir;
|
|
}
|
|
|
|
self maps/mp/bots/_bot_combat::bot_combat_throw_proximity(origin);
|
|
if(cointoss() && lengthsquared(self getvelocity()) < 2)
|
|
{
|
|
nodes = getnodesinradius(level.zone.trig.goal,level.zone.trig.goal_radius + 128,0,128);
|
|
for(i = randomintrange(0,nodes.size);i < nodes.size;i++)
|
|
{
|
|
node = nodes[i];
|
|
if(distancesquared(node.origin,self.origin) > 1024)
|
|
{
|
|
if(self maps/mp/bots/_bot::bot_friend_goal_in_radius("koth_hill",node.origin,128) == 0)
|
|
{
|
|
if(findpath(self.origin,node.origin,self,0,1))
|
|
{
|
|
self addgoal(node,24,3,"koth_hill");
|
|
self.bot.update_objective = GetTime();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
self.bot.update_lookat = GetTime() + randomintrange(1500,3000);
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
any_other_team_touching(skip_team)
|
|
{
|
|
foreach(team in level.teams)
|
|
{
|
|
if(team == skip_team)
|
|
{
|
|
}
|
|
else if(level.zone.gameobject.numtouching[team])
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 8
|
|
is_hill_contested(skip_team)
|
|
{
|
|
if(any_other_team_touching(skip_team))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
enemy = self maps/mp/bots/_bot::bot_get_closest_enemy(level.zone.gameobject.curorigin,1);
|
|
if(IsDefined(enemy) && distancesquared(enemy.origin,level.zone.gameobject.curorigin) < 262144)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 9
|
|
bot_hill_grenade()
|
|
{
|
|
enemies = bot_get_enemies();
|
|
if(!(enemies.size))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self atgoal("hill_patrol") || self atgoal("koth_hill"))
|
|
{
|
|
if(self getweaponammostock("proximity_grenade_mp") > 0)
|
|
{
|
|
origin = bot_get_look_at();
|
|
if(self maps/mp/bots/_bot_combat::bot_combat_throw_proximity(origin))
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!(is_hill_contested(self.team)))
|
|
{
|
|
if(!(IsDefined(level.next_smoke_time)))
|
|
{
|
|
level.next_smoke_time = 0;
|
|
}
|
|
|
|
if(GetTime() > level.next_smoke_time)
|
|
{
|
|
if(self maps/mp/bots/_bot_combat::bot_combat_throw_smoke(level.zone.gameobject.curorigin))
|
|
{
|
|
level.next_smoke_time = GetTime() + randomintrange(60000,120000);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
enemy = self maps/mp/bots/_bot::bot_get_closest_enemy(level.zone.gameobject.curorigin,0);
|
|
if(IsDefined(enemy))
|
|
{
|
|
origin = enemy.origin;
|
|
}
|
|
else
|
|
{
|
|
origin = level.zone.gameobject.curorigin;
|
|
}
|
|
|
|
dir = vectornormalize(self.origin - origin);
|
|
dir = (0,dir[1],0);
|
|
origin = 128 + VectorScale(dir);
|
|
if(maps/mp/bots/_bot::bot_get_difficulty() == "easy")
|
|
{
|
|
if(!(IsDefined(level.next_grenade_time)))
|
|
{
|
|
level.next_grenade_time = 0;
|
|
}
|
|
|
|
if(GetTime() > level.next_grenade_time)
|
|
{
|
|
if(!(self maps/mp/bots/_bot_combat::bot_combat_throw_lethal(origin)))
|
|
{
|
|
self maps/mp/bots/_bot_combat::bot_combat_throw_tactical(origin);
|
|
}
|
|
else
|
|
{
|
|
level.next_grenade_time = GetTime() + randomintrange(60000,120000);
|
|
}
|
|
}
|
|
}
|
|
else if(!(self maps/mp/bots/_bot_combat::bot_combat_throw_lethal(origin)))
|
|
{
|
|
self maps/mp/bots/_bot_combat::bot_combat_throw_tactical(origin);
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
bot_hill_tactical_insertion()
|
|
{
|
|
if(!(self hasweapon("tactical_insertion_mp")))
|
|
{
|
|
return;
|
|
}
|
|
|
|
dist = self getlookaheaddist();
|
|
dir = self getlookaheaddir();
|
|
if(!IsDefined(dist) || !IsDefined(dir))
|
|
{
|
|
return;
|
|
}
|
|
|
|
node = hill_nearest_node();
|
|
mine = getnearestnode(self.origin);
|
|
if(IsDefined(mine) && !nodesvisible(mine,node))
|
|
{
|
|
origin = dist + VectorScale(dir);
|
|
next = getnearestnode(origin);
|
|
if(IsDefined(next) && nodesvisible(next,node))
|
|
{
|
|
bot_combat_tactical_insertion(self.origin);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
hill_nearest_node()
|
|
{
|
|
nodes = getnodesinradiussorted(level.zone.gameobject.curorigin,256,0);
|
|
/#
|
|
assert(nodes.size);
|
|
#/
|
|
return nodes[0];
|
|
} |