From fae745ea729bca5114eac969d0f50e7407f9b541 Mon Sep 17 00:00:00 2001 From: Andrei Drexler Date: Fri, 3 May 2002 19:08:51 +0000 Subject: [PATCH] Bot stuff --- reaction/game/ai_team.c | 95 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 2 deletions(-) diff --git a/reaction/game/ai_team.c b/reaction/game/ai_team.c index 43bd844a..092dd94d 100644 --- a/reaction/game/ai_team.c +++ b/reaction/game/ai_team.c @@ -5,6 +5,9 @@ //----------------------------------------------------------------------------- // // $Log$ +// Revision 1.7 2002/05/03 19:08:51 makro +// Bot stuff +// // Revision 1.6 2002/03/18 12:25:10 jbravo // Live players dont get fraglines, except their own. Cleanups and some // hacks to get bots to stop using knives only. @@ -941,6 +944,79 @@ void BotTeamOrders(bot_state_t *bs) { } } +/* +==================================== +RQ3_Bot_TPOrders + +Added by Makro +(just an edited version of +BotTeamOrders) +==================================== +*/ +void RQ3_Bot_TPOrders(bot_state_t *bs) { + int teammates[MAX_CLIENTS]; + int numteammates, i; + char buf[MAX_INFO_STRING]; + static int maxclients; + + if (!maxclients) + maxclients = trap_Cvar_VariableIntegerValue("sv_maxclients"); + + numteammates = 0; + for (i = 0; i < maxclients && i < MAX_CLIENTS; i++) { + trap_GetConfigstring(CS_PLAYERS+i, buf, sizeof(buf)); + //if no config string or no name + if (!strlen(buf) || !strlen(Info_ValueForKey(buf, "n"))) continue; + //skip spectators + if (atoi(Info_ValueForKey(buf, "t")) == TEAM_SPECTATOR) continue; + // + if (BotSameTeam(bs, i)) { + teammates[numteammates] = i; + numteammates++; + } + } + // + //TODO: find a human player; make 2 bots follow him + // if no human player on the team. make groups of 2-3 bots + // and send them to spawn points + + switch(numteammates) { + case 1: break; + case 2: + { + //nothing special + break; + } + case 3: + { + //have one follow another and one free roaming + BotCreateGroup(bs, teammates, 2); + break; + } + case 4: + { + BotCreateGroup(bs, teammates, 2); //a group of 2 + BotCreateGroup(bs, &teammates[2], 2); //a group of 2 + break; + } + case 5: + { + BotCreateGroup(bs, teammates, 2); //a group of 2 + BotCreateGroup(bs, &teammates[2], 3); //a group of 3 + break; + } + default: + { + if (numteammates <= 10) { + for (i = 0; i < numteammates / 2; i++) { + BotCreateGroup(bs, &teammates[i*2], 2); //groups of 2 + } + } + break; + } + } +} + #ifdef MISSIONPACK /* @@ -1982,8 +2058,6 @@ void BotTeamAI(bot_state_t *bs) { //give orders switch(gametype) { case GT_TEAM: -// JBravo - case GT_TEAMPLAY: { if (bs->numteammates != numteammates || bs->forceorders) { bs->teamgiveorders_time = FloatTime(); @@ -1998,6 +2072,23 @@ void BotTeamAI(bot_state_t *bs) { } break; } +// JBravo +// Makro - separate case now + case GT_TEAMPLAY: + { + if (bs->numteammates != numteammates || bs->forceorders) { + bs->teamgiveorders_time = FloatTime(); + bs->numteammates = numteammates; + bs->forceorders = qfalse; + } + //if it's time to give orders + if (bs->teamgiveorders_time && bs->teamgiveorders_time < FloatTime() - 5) { + RQ3_Bot_TPOrders(bs); + //give orders again after 120 seconds + bs->teamgiveorders_time = FloatTime() + 120; + } + break; + } case GT_CTF: { //if the number of team mates changed or the flag status changed