mw2 cap code

This commit is contained in:
INeedBots 2020-11-29 18:06:38 -06:00
parent 0a79afb166
commit a358285862

View File

@ -3854,3 +3854,173 @@ bot_sd_attackers()
self.bot_lock_goal = false;
}
}
/*
Bots play capture the flag
*/
bot_cap()
{
self endon( "death" );
self endon( "disconnect" );
level endon("game_ended");
if ( level.gametype != "ctf" )
return;
myTeam = self.pers[ "team" ];
otherTeam = getOtherTeam( myTeam );
for ( ;; )
{
wait( randomintrange( 3, 5 ) );
if ( self IsUsingRemote() || self.bot_lock_goal )
{
continue;
}
if(!isDefined(level.capZones))
continue;
if(!isDefined(level.teamFlags))
continue;
myflag = level.teamFlags[myteam];
myzone = level.capZones[myteam];
theirflag = level.teamFlags[otherTeam];
theirzone = level.capZones[otherTeam];
if(!myflag maps\mp\gametypes\_gameobjects::isHome())
{
carrier = myflag.carrier;
if(!isDefined(carrier))//someone doesnt has our flag
{
if(!isDefined(theirflag.carrier) && DistanceSquared(self.origin, theirflag.curorigin) < DistanceSquared(self.origin, myflag.curorigin)) //no one has their flag and its closer
self bot_cap_get_flag(theirflag);
else//go get it
self bot_cap_get_flag(myflag);
continue;
}
else
{
if(theirflag maps\mp\gametypes\_gameobjects::isHome() && randomint(100) < 50)
{ //take their flag
self bot_cap_get_flag(theirflag);
}
else
{
if(self HasScriptGoal())
continue;
if(!isDefined(theirzone.bots))
theirzone.bots = 0;
origin = theirzone.curorigin;
if(theirzone.bots > 2 || randomInt(100) < 45)
{
//kill carrier
if(carrier _hasPerk( "specialty_coldblooded" ))
continue;
origin = carrier.origin;
self SetScriptGoal( origin, 64 );
self thread bot_escort_obj(myflag, carrier);
if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal")
self ClearScriptGoal();
continue;
}
self thread bot_inc_bots(theirzone);
//camp their zone
if(DistanceSquared(origin, self.origin) <= 1024*1024)
{
wait 4;
self notify("bot_inc_bots"); theirzone.bots--;
continue;
}
self SetScriptGoal( origin, 256 );
self thread bot_inc_bots(theirzone);
self thread bot_escort_obj(myflag, carrier);
if(self waittill_any( "goal", "bad_path", "new_goal" ) != "new_goal")
self ClearScriptGoal();
}
}
}
else//our flag is ok
{
if(self isFlagCarrier())//if have flag
{
//go cap
origin = myzone.curorigin;
self.bot_lock_goal = true;
self SetScriptGoal( origin, 32 );
self thread bot_get_obj(myflag);
evt = self waittill_any_return( "goal", "bad_path", "new_goal" );
wait 1;
if (evt != "new_goal")
self ClearScriptGoal();
self.bot_lock_goal = false;
continue;
}
carrier = theirflag.carrier;
if(!isDefined(carrier))//if no one has enemy flag
{
self bot_cap_get_flag(theirflag);
continue;
}
//escort them
if(self HasScriptGoal())
continue;
origin = carrier.origin;
if(DistanceSquared(origin, self.origin) <= 1024*1024)
continue;
self SetScriptGoal( origin, 256 );
self thread bot_escort_obj(theirflag, carrier);
if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal")
self ClearScriptGoal();
}
}
}
/*
Bots go and get the flag
*/
bot_cap_get_flag(flag)
{
origin = flag.curorigin;
//go get it
self.bot_lock_goal = true;
self SetScriptGoal( origin, 32 );
self thread bot_get_obj(flag);
evt = self waittill_any_return( "goal", "bad_path", "new_goal" );
wait 1;
self.bot_lock_goal = false;
if (evt != "new_goal")
self ClearScriptGoal();
}