mirror of
https://github.com/ineedbots/iw4_bot_warfare.git
synced 2025-04-22 22:05:44 +00:00
Added placeholder gamemode
This commit is contained in:
parent
82a9695555
commit
38b448aec9
@ -1418,6 +1418,11 @@ start_bot_threads()
|
||||
|
||||
self thread bot_dem_attackers();
|
||||
self thread bot_dem_defenders();
|
||||
|
||||
self thread bot_gtnw();
|
||||
self thread bot_oneflag();
|
||||
self thread bot_arena();
|
||||
self thread bot_vip();
|
||||
}
|
||||
}
|
||||
|
||||
@ -5803,3 +5808,346 @@ bot_dem_defend_spawnkill()
|
||||
|
||||
self notify("bad_path");
|
||||
}
|
||||
|
||||
/*
|
||||
Bots play the Global thermonuclear warfare
|
||||
*/
|
||||
bot_gtnw()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
level endon("game_ended");
|
||||
|
||||
if ( level.gametype != "gtnw" )
|
||||
return;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait( randomintrange( 3, 5 ) );
|
||||
|
||||
if ( self IsUsingRemote() || self.bot_lock_goal )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isDefined(level.nukeSite))
|
||||
continue;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Bots play oneflag
|
||||
*/
|
||||
bot_oneflag()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
level endon("game_ended");
|
||||
|
||||
if ( level.gametype != "oneflag" )
|
||||
return;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait( randomintrange( 3, 5 ) );
|
||||
|
||||
if ( self IsUsingRemote() || self.bot_lock_goal )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isDefined(level.capZones) || !isDefined(level.teamFlags))
|
||||
continue;
|
||||
|
||||
/*if(isDefined(level.capZones) && isDefined(level.teamFlags))
|
||||
{
|
||||
if(self.pers["team"] == game["attackers"])//attacking
|
||||
{
|
||||
if(isDefined(self.carryFlag))//has flag
|
||||
{
|
||||
self.bots_objDoing = "cap";
|
||||
self thread bots\talk::bots_oneflag_capFlag();
|
||||
self bots_goToLoc(level.capZones[self.team].trigger.origin, ::bots_nullFunc, 0, 0, 0);
|
||||
self.bots_objDoing = "none";
|
||||
self thread bots\talk::bots_oneflag_doneCap();
|
||||
}
|
||||
else//doesn't have flag
|
||||
{
|
||||
if(!isDefined(level.teamFlags[game["defenders"]].carrier))//no one has flag
|
||||
{
|
||||
self.bots_objDoing = "flag";
|
||||
self thread bots\talk::bots_oneflag_getFlag();
|
||||
self bots_goToLoc(level.teamFlags[game["defenders"]].trigger.origin, ::bots_oneFlagGet, 0, 0, 0);
|
||||
self.bots_objDoing = "none";
|
||||
self thread bots\talk::bots_oneflag_doneGetFlag();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(self.bots_traitRandom)
|
||||
{
|
||||
self thread bots\talk::bots_oneflag_protectCarrier(level.teamFlags[game["defenders"]].carrier);
|
||||
self bots_goFollow(level.teamFlags[game["defenders"]].carrier, 30, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else//defending
|
||||
{
|
||||
if(isDefined(level.teamFlags[self.team].carrier))//some one has flag
|
||||
{
|
||||
if(self.bots_traitRandom < 2)
|
||||
{
|
||||
self thread bots\talk::bots_oneflag_killCarrier(level.teamFlags[self.team].carrier);//kill carrier
|
||||
self bots_goFollow(level.teamFlags[self.team].carrier, 30, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.capZones[game["attackers"]].trigger.origin, randomFloatRange(100,1000));
|
||||
wp = undefined;
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp))
|
||||
{
|
||||
self thread bots\talk::bots_oneflag_protectCapzone();//hang around cap zone
|
||||
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_defendOneFlagCap, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_defendOneFlagCap, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(level.teamFlags[self.team] maps\mp\gametypes\_gameobjects::isHome())
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.teamFlags[self.team].trigger.origin, randomFloatRange(100,1000));
|
||||
wp = undefined;//hang around flag area
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp))
|
||||
{
|
||||
self thread bots\talk::bots_oneflag_protectFlag();
|
||||
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_defendOneFlag, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_defendOneFlag, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self.bots_objDoing = "flag";
|
||||
self thread bots\talk::bots_oneflag_returnFlag();//return flag
|
||||
self bots_campAtEnt(level.teamFlags[self.team].trigger, false, ::bots_oneFlagGetDefend, 0, 0, 0);
|
||||
self.bots_objDoing = "none";
|
||||
self thread bots\talk::bots_oneflag_returnFlagDone();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Bots play arena
|
||||
*/
|
||||
bot_arena()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
level endon("game_ended");
|
||||
|
||||
if ( level.gametype != "arena" )
|
||||
return;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait( randomintrange( 3, 5 ) );
|
||||
|
||||
if ( self IsUsingRemote() || self.bot_lock_goal )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*case "arena"://iw's hidden gametypes.
|
||||
if(isDefined(level.arenaFlag))
|
||||
{
|
||||
self.bots_objDoing = "flag";
|
||||
self thread bots\talk::bots_arena_capFlag();
|
||||
self bots_campAtEnt(level.arenaFlag.trigger, false, ::bots_nullFunc, 0, 0, 0);
|
||||
self.bots_objDoing = "none";
|
||||
self thread bots\talk::bots_arena_capFlagDone();
|
||||
}
|
||||
else
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.bots_goalPoint.origin, level.bots_goalRad);
|
||||
wp = undefined;
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp) && self.bots_traitRandom != 3)
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Bots play arena
|
||||
*/
|
||||
bot_vip()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
level endon("game_ended");
|
||||
|
||||
if ( level.gametype != "vip" )
|
||||
return;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait( randomintrange( 3, 5 ) );
|
||||
|
||||
if ( self IsUsingRemote() || self.bot_lock_goal )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*case "vip"://maybe used at gaming events. (ya right, this is not even finished)
|
||||
if(isDefined(level.extractionZone))
|
||||
{
|
||||
if(self.team == game["defenders"])
|
||||
{
|
||||
if(isDefined(self.isVip) && self.isVip)
|
||||
{
|
||||
if(!isDefined(level.extractionTime))
|
||||
{
|
||||
self.bots_objDoing = "vip";
|
||||
self thread bots\talk::bots_vip_extract();
|
||||
self bots_goToLoc(level.extractionZone.trigger.origin, ::bots_nullFunc, 0, 0, 0);
|
||||
if(distance(level.extractionZone.trigger.origin, self.origin) <= level.bots_useNear)
|
||||
level.extractionZone [[level.extractionZone.onUse]](self);
|
||||
|
||||
self thread bots\talk::bots_vip_extractDone();
|
||||
self.bots_objDoing = "none";
|
||||
}
|
||||
else
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.bots_goalPoint.origin, level.bots_goalRad);
|
||||
wp = undefined;
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp) && self.bots_traitRandom != 3)
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(self.bots_traitRandom)
|
||||
{
|
||||
tarPlay = undefined;
|
||||
foreach(player in level.players)
|
||||
{
|
||||
if(!isDefined(player.isVip) || !player.isVip)
|
||||
continue;
|
||||
|
||||
if(!bots_isReallyAlive(player))
|
||||
continue;
|
||||
|
||||
tarPlay = player;
|
||||
break;
|
||||
}
|
||||
|
||||
self thread bots\talk::bots_vip_protect(tarPlay);
|
||||
self bots_goFollow(tarPlay, 30, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.bots_goalPoint.origin, level.bots_goalRad);
|
||||
wp = undefined;
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp) && self.bots_traitRandom != 3)
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tarPlay = undefined;
|
||||
foreach(player in level.players)
|
||||
{
|
||||
if(!isDefined(player.isVip) || !player.isVip)
|
||||
continue;
|
||||
|
||||
if(!bots_isReallyAlive(player))
|
||||
continue;
|
||||
|
||||
tarPlay = player;
|
||||
break;
|
||||
}
|
||||
|
||||
if((!isDefined(level.extractionTime) || self.bots_traitRandom < 2) && isDefined(tarPlay))
|
||||
{
|
||||
self thread bots\talk::bots_vip_kill(tarPlay);
|
||||
self bots_goFollow(tarPlay, 30, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
wps = bots_getWaypointsNear(level.extractionZone.trigger.origin, randomFloatRange(100,1000));
|
||||
wp = undefined;
|
||||
if(wps.size > 0)
|
||||
{
|
||||
wp = wps[randomint(wps.size)];
|
||||
}
|
||||
if(isDefined(wp) && self.bots_traitRandom != 3)
|
||||
{
|
||||
self thread bots\talk::bots_vip_hangaround();
|
||||
self bots_goToLoc(level.waypoints[wp].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
self bots_goToLoc(level.waypoints[randomint(level.waypointCount)].origin, ::bots_nullFunc, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;*/
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user