//
// HPB bot - botman's High Ping Bastard bot
//
// (http://planethalflife.com/botman/)
//
// bot_start.cpp
//

#ifndef _WIN32
#include <string.h>
#endif

#include <extdll.h>
#include <dllapi.h>
#include <h_export.h>
#include <meta_api.h>

#include "bot.h"
#include "bot_func.h"
#include "bot_weapons.h"

extern int mod_id;
extern edict_t *pent_info_ctfdetect;

extern int max_team_players[4];
extern int team_class_limits[4];
extern int max_teams;


void BotStartGame( bot_t *pBot )
{
	char c_team[32];
	char c_class[32];
	char c_item[32];
	int index, count, retry_count;
	edict_t *pPlayer;
	int team;
	int class_not_allowed;
	
	edict_t *pEdict = pBot->pEdict;
// TODO: Handle starting
	if ((mod_id == TFC_DLL) || (mod_id == WIZARDWARS_DLL) || (mod_id == SWARM_DLL))
	{
		if ((pBot->start_action == MSG_TFC_IDLE) &&
			(pBot->f_create_time + 3.0 <= gpGlobals->time))
		{
			pBot->start_action = MSG_TFC_TEAM_SELECT;  // force team selection
		}
		
		// handle Team Fortress Classic stuff here...
		
		if (pBot->start_action == MSG_TFC_TEAM_SELECT)
		{
			pBot->start_action = MSG_TFC_IDLE;  // switch back to idle
			pBot->f_create_time = gpGlobals->time;  // reset
			
			if ((pBot->bot_team != 1) && (pBot->bot_team != 2) &&
				(pBot->bot_team != 3) && (pBot->bot_team != 4) &&
				(pBot->bot_team != 5))
				pBot->bot_team = -1;

			// 1.2.6 Don't pick a random team, let mod decide #18
//			if (pBot->bot_team == -1)
//				pBot->bot_team = RANDOM_LONG(1, max_teams);

			if( (pBot->bot_team != -1) && pBot->bot_team != 5)
			{	
				retry_count = 0;
			
				while ((retry_count < 4) &&
        	        (max_team_players[pBot->bot_team-1] > 0))  // not unlimited?
				{
					count = 0;
				
					// count number of players on this team...
					for (index = 1; index <= gpGlobals->maxClients; index++)
					{
						pPlayer = INDEXENT(index);
						
						if (pPlayer && !pPlayer->free)
						{
							if (UTIL_GetTeam(pPlayer) == (pBot->bot_team - 1))
								count++;
						}
					}
				
					if (count < max_team_players[pBot->bot_team-1])
						break;  // haven't reached limit yet, continue
					else
					{
						pBot->bot_team++;

						if (pBot->bot_team > max_teams)
							pBot->bot_team = 1;
					
						retry_count++;
					}
				}
			}
			
			// select the team the bot wishes to join...
			if (pBot->bot_team == 1)
				strcpy(c_team, "1");
			else if (pBot->bot_team == 2)
				strcpy(c_team, "2");
			else if (pBot->bot_team == 3)
				strcpy(c_team, "3");
			else if (pBot->bot_team == 4)
				strcpy(c_team, "4");
			else
				strcpy(c_team, "5");
			
			FakeClientCommand(pEdict, "jointeam", c_team, NULL);
			
			return;
		}
		
		if (pBot->start_action == MSG_TFC_CLASS_SELECT)
		{
			pBot->start_action = MSG_TFC_IDLE;  // switch back to idle
			pBot->f_create_time = gpGlobals->time;  // reset
			
			if (mod_id != SWARM_DLL)
			{
				if((pBot->bot_class < 0) || (pBot->bot_class > 10))
					pBot->bot_class = -1;
			}
			else
			{
				if((pBot->bot_class <= 0) || (pBot->bot_class > SWARM_CLASSID_RANDOM))
					pBot->bot_class = SWARM_CLASSID_RANDOM;
			}

			if (pBot->bot_class == -1)
				pBot->bot_class = RANDOM_LONG(1, 10);
			
			team = UTIL_GetTeam(pEdict);
			
			if (team_class_limits[team] == -1)  // civilian only?
			{
				pBot->bot_class = 0;  // civilian
			}
			else
			{
//TODO: Handle class limits
				if (pBot->bot_class == 10)
					class_not_allowed = team_class_limits[team] & (1<<7);
				else if (pBot->bot_class <= 7)
					class_not_allowed = team_class_limits[team] & (1<<(pBot->bot_class-1));
				else
					class_not_allowed = team_class_limits[team] & (1<<(pBot->bot_class));
				
				while (class_not_allowed)
				{
					pBot->bot_class = RANDOM_LONG(1, 10);
					
					if (pBot->bot_class == 10)
						class_not_allowed = team_class_limits[team] & (1<<7);
					else if (pBot->bot_class <= 7)
						class_not_allowed = team_class_limits[team] & (1<<(pBot->bot_class-1));
					else
						class_not_allowed = team_class_limits[team] & (1<<(pBot->bot_class));
				}
			}
			
			// select the class the bot wishes to use...
			if (pBot->bot_class == 0)
				strcpy(c_class, "civilian");
			else if (pBot->bot_class == 1)
				strcpy(c_class, "scout");
			else if (pBot->bot_class == 2)
				strcpy(c_class, "sniper");
			else if (pBot->bot_class == 3)
				strcpy(c_class, "soldier");
			else if (pBot->bot_class == 4)
				strcpy(c_class, "demoman");
			else if (pBot->bot_class == 5)
				strcpy(c_class, "medic");
			else if (pBot->bot_class == 6)
				strcpy(c_class, "hwguy");
			else if (pBot->bot_class == 7)
				strcpy(c_class, "pyro");
			else if (pBot->bot_class == 8)
				strcpy(c_class, "spy");
			else if (pBot->bot_class == 9)
				strcpy(c_class, "engineer");
			else
				strcpy(c_class, "randompc");
			
			if((mod_id == WIZARDWARS_DLL) || (mod_id == SWARM_DLL))
			{
				sprintf(c_class,"%d", pBot->bot_class);
//				sprintf(c_class,"%d", SWARM_CLASSID_RANDOM);
//				FakeClientCommand(pEdict, "joinclass", c_class, NULL);
				FakeClientCommand(pEdict, "changeclass", c_class, NULL);
			}
			else
				FakeClientCommand(pEdict, c_class, NULL, NULL);

			
			// bot has now joined the game (doesn't need to be started)
			pBot->not_started = 0;
			
			return;
		}
   }
   else if (mod_id == CSTRIKE_DLL)
   {
	   // handle Counter-Strike stuff here...
	   
	   if (pBot->start_action == MSG_CS_TEAM_SELECT)
	   {
		   pBot->start_action = MSG_CS_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_team != 1) && (pBot->bot_team != 2) &&
			   (pBot->bot_team != 5))
			   pBot->bot_team = -1;
		   
		   if (pBot->bot_team == -1)
			   pBot->bot_team = RANDOM_LONG(1, 2);
		   
		   // select the team the bot wishes to join...
		   if (pBot->bot_team == 1)
			   strcpy(c_team, "1");
		   else if (pBot->bot_team == 2)
			   strcpy(c_team, "2");
		   else
			   strcpy(c_team, "5");
		   
		   FakeClientCommand(pEdict, "menuselect", c_team, NULL);
		   
		   return;
	   }
	   
	   if (pBot->start_action == MSG_CS_CT_SELECT)  // counter terrorist
	   {
		   pBot->start_action = MSG_CS_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_class < 1) || (pBot->bot_class > 4))
			   pBot->bot_class = -1;  // use random if invalid
		   
		   if (pBot->bot_class == -1)
			   pBot->bot_class = RANDOM_LONG(1, 4);
		   
		   // select the class the bot wishes to use...
		   if (pBot->bot_class == 1)
			   strcpy(c_class, "1");
		   else if (pBot->bot_class == 2)
			   strcpy(c_class, "2");
		   else if (pBot->bot_class == 3)
			   strcpy(c_class, "3");
		   else if (pBot->bot_class == 4)
			   strcpy(c_class, "4");
		   else
			   strcpy(c_class, "5");  // random
		   
		   FakeClientCommand(pEdict, "menuselect", c_class, NULL);
		   
		   // bot has now joined the game (doesn't need to be started)
		   pBot->not_started = 0;
		   
		   return;
	   }
	   
	   if (pBot->start_action == MSG_CS_T_SELECT)  // terrorist select
	   {
		   pBot->start_action = MSG_CS_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_class < 1) || (pBot->bot_class > 4))
			   pBot->bot_class = -1;  // use random if invalid
		   
		   if (pBot->bot_class == -1)
			   pBot->bot_class = RANDOM_LONG(1, 4);
		   
		   // select the class the bot wishes to use...
		   if (pBot->bot_class == 1)
			   strcpy(c_class, "1");
		   else if (pBot->bot_class == 2)
			   strcpy(c_class, "2");
		   else if (pBot->bot_class == 3)
			   strcpy(c_class, "3");
		   else if (pBot->bot_class == 4)
			   strcpy(c_class, "4");
		   else
			   strcpy(c_class, "5");  // random
		   
		   FakeClientCommand(pEdict, "menuselect", c_class, NULL);
		   
		   // bot has now joined the game (doesn't need to be started)
		   pBot->not_started = 0;
		   
		   return;
	   }
   }
   else if ((mod_id == GEARBOX_DLL) && (pent_info_ctfdetect != NULL))
   {
	   // handle Opposing Force CTF stuff here...
	   
	   if (pBot->start_action == MSG_OPFOR_TEAM_SELECT)
	   {
		   pBot->start_action = MSG_OPFOR_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_team != 1) && (pBot->bot_team != 2) &&
			   (pBot->bot_team != 3))
			   pBot->bot_team = -1;
		   
		   if (pBot->bot_team == -1)
			   pBot->bot_team = RANDOM_LONG(1, 2);
		   
		   // select the team the bot wishes to join...
		   if (pBot->bot_team == 1)
			   strcpy(c_team, "1");
		   else if (pBot->bot_team == 2)
			   strcpy(c_team, "2");
		   else
			   strcpy(c_team, "3");
		   
		   FakeClientCommand(pEdict, "jointeam", c_team, NULL);
		   
		   return;
	   }
	   
	   if (pBot->start_action == MSG_OPFOR_CLASS_SELECT)
	   {
		   pBot->start_action = MSG_OPFOR_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_class < 0) || (pBot->bot_class > 10))
			   pBot->bot_class = -1;
		   
		   if (pBot->bot_class == -1)
			   pBot->bot_class = RANDOM_LONG(1, 10);
		   
		   // select the class the bot wishes to use...
		   if (pBot->bot_class == 1)
			   strcpy(c_class, "1");
		   else if (pBot->bot_class == 2)
			   strcpy(c_class, "2");
		   else if (pBot->bot_class == 3)
			   strcpy(c_class, "3");
		   else if (pBot->bot_class == 4)
			   strcpy(c_class, "4");
		   else if (pBot->bot_class == 5)
			   strcpy(c_class, "5");
		   else if (pBot->bot_class == 6)
			   strcpy(c_class, "6");
		   else
			   strcpy(c_class, "7");
		   
		   FakeClientCommand(pEdict, "selectchar", c_class, NULL);
		   
		   // bot has now joined the game (doesn't need to be started)
		   pBot->not_started = 0;
		   
		   return;
	   }
   }
   else if (mod_id == FRONTLINE_DLL)
   {
	   // handle FrontLineForce stuff here...
	   
	   if (pBot->start_action == MSG_FLF_TEAM_SELECT)
	   {
		   pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		   
		   if ((pBot->bot_team != 1) && (pBot->bot_team != 2) &&
			   (pBot->bot_team != 5))
			   pBot->bot_team = -1;
		   
		   if (pBot->bot_team == -1)
			   pBot->bot_team = RANDOM_LONG(1, 2);
		   
		   // select the team the bot wishes to join...
		   if (pBot->bot_team == 1)
			   strcpy(c_team, "1");
		   else if (pBot->bot_team == 2)
			   strcpy(c_team, "2");
		   else
			   strcpy(c_team, "5");
		   
		   FakeClientCommand(pEdict, "jointeam", c_team, NULL);
		   
		   return;
	   }
	   
	   if (pBot->start_action == MSG_FLF_CLASS_SELECT)
	   {
		   pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		   
		   team = UTIL_GetTeam(pEdict);
		   
		   if (team == 0)  // rebels
		   {
			   if ((pBot->bot_class < 0) || (pBot->bot_class > 3))
				   pBot->bot_class = -1;
			   
			   if (pBot->bot_class == -1)
				   pBot->bot_class = RANDOM_LONG(1, 3);
			   
			   // select the class the bot wishes to use...
			   if (pBot->bot_class == 1)
				   strcpy(c_class, "rebelsrecon");
			   else if (pBot->bot_class == 2)
				   strcpy(c_class, "rebelsassault");
			   else
				   strcpy(c_class, "rebelssupport");
		   }
		   else // commandos
		   {
			   if ((pBot->bot_class < 0) || (pBot->bot_class > 3))
				   pBot->bot_class = -1;
			   
			   if (pBot->bot_class == -1)
				   pBot->bot_class = RANDOM_LONG(1, 3);
			   
			   // select the class the bot wishes to use...
			   if (pBot->bot_class == 1)
				   strcpy(c_class, "commandosrecon");
			   else if (pBot->bot_class == 2)
				   strcpy(c_class, "commandosassault");
			   else
				   strcpy(c_class, "commandossupport");
		   }
		   
		   FakeClientCommand(pEdict, c_class, NULL, NULL);
		   
		   return;
	   }
	   
	   if (pBot->start_action == MSG_FLF_PISTOL_SELECT)
	   {
		   int prim_weapon_group, sec_weapon_group;
		   
		   pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		   
		   int flf_class = UTIL_GetClass(pEdict);
		   
		   if (flf_class == 0)  // recon
		   {
			   prim_weapon_group = RANDOM_LONG(1, 3);
			   
			   if (prim_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->primary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (prim_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->primary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->primary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->primary_weapon = FLF_WEAPON_UMP45;
			   }
			   else  // rifles
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_MSG90;
				   else
					   pBot->primary_weapon = FLF_WEAPON_SAKO;
			   }
			   
			   if (prim_weapon_group == 1)
				   sec_weapon_group = RANDOM_LONG(2, 3);
			   else if (prim_weapon_group == 3)
				   sec_weapon_group = RANDOM_LONG(1, 2);
			   else
			   {
				   if (RANDOM_LONG(1, 100) <= 50)
					   sec_weapon_group = 1;
				   else
					   sec_weapon_group = 3;
			   }
			   
			   if (sec_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (sec_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->secondary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->secondary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_UMP45;
			   }
			   else  // rifles
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_MSG90;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_SAKO;
			   }
		   }
		   else if (flf_class == 1)  // assault
		   {
			   prim_weapon_group = RANDOM_LONG(1, 3);
			   
			   if (prim_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->primary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (prim_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->primary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->primary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->primary_weapon = FLF_WEAPON_UMP45;
			   }
			   else  // rifles
			   {
				   int weapon = RANDOM_LONG(1, 3);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_M4;
				   else if (weapon == 2)
					   pBot->primary_weapon = FLF_WEAPON_FAMAS;
				   else
					   pBot->primary_weapon = FLF_WEAPON_AK5;
			   }
			   
			   if (prim_weapon_group == 1)
				   sec_weapon_group = RANDOM_LONG(2, 3);
			   else if (prim_weapon_group == 2)
			   {
				   if (RANDOM_LONG(1, 100) <= 50)
					   sec_weapon_group = 1;
				   else
					   sec_weapon_group = 3;
			   }
			   else  // prim == 3
				   sec_weapon_group = RANDOM_LONG(1, 2);
			   
			   if (sec_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (sec_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->secondary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->secondary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_UMP45;
			   }
			   else  // rifles
			   {
				   int weapon = RANDOM_LONG(1, 3);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_M4;
				   else if (weapon == 2)
					   pBot->secondary_weapon = FLF_WEAPON_FAMAS;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_AK5;
			   }
		   }
		   else  // support
		   {
			   prim_weapon_group = RANDOM_LONG(1, 3);
			   
			   if (prim_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->primary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (prim_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->primary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->primary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->primary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->primary_weapon = FLF_WEAPON_UMP45;
			   }
			   else if (prim_weapon_group == 3)  // rifles & heavyweapons
			   {
				   if (RANDOM_LONG(1, 100) <= 50)
				   {
					   int weapon = RANDOM_LONG(1, 3);  // rifles
					   
					   if (weapon == 1)
						   pBot->primary_weapon = FLF_WEAPON_M4;
					   else if (weapon == 2)
						   pBot->primary_weapon = FLF_WEAPON_FAMAS;
					   else
						   pBot->primary_weapon = FLF_WEAPON_AK5;
				   }
				   else  // heavy weapons
				   {
					   pBot->primary_weapon = FLF_WEAPON_HK21;
				   }
			   }
			   
			   if (prim_weapon_group == 1)
				   sec_weapon_group = RANDOM_LONG(2, 3);
			   else if (prim_weapon_group == 2)
			   {
				   if (RANDOM_LONG(1, 100) <= 50)
					   sec_weapon_group = 1;
				   else
					   sec_weapon_group = 3;
			   }
			   else  // prim == 3
				   sec_weapon_group = RANDOM_LONG(1, 2);
			   
			   if (sec_weapon_group == 1)  // shotguns
			   {
				   int weapon = RANDOM_LONG(1, 2);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_SPAS12;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_RS202M2;
			   }
			   else if (sec_weapon_group == 2)  // submachine
			   {
				   int weapon = RANDOM_LONG(1, 4);
				   
				   if (weapon == 1)
					   pBot->secondary_weapon = FLF_WEAPON_MP5A2;
				   else if (weapon == 2)
					   pBot->secondary_weapon = FLF_WEAPON_MP5SD;
				   else if (weapon == 3)
					   pBot->secondary_weapon = FLF_WEAPON_MAC10;
				   else
					   pBot->secondary_weapon = FLF_WEAPON_UMP45;
			   }
			   else if (sec_weapon_group == 3)  // rifles & heavyweapons
			   {
				   if (RANDOM_LONG(1, 100) <= 50)
				   {
					   int weapon = RANDOM_LONG(1, 3);  // rifles
					   
					   if (weapon == 1)
						   pBot->secondary_weapon = FLF_WEAPON_M4;
					   else if (weapon == 2)
						   pBot->secondary_weapon = FLF_WEAPON_FAMAS;
					   else
						   pBot->secondary_weapon = FLF_WEAPON_AK5;
				   }
				   else  // heavy weapons
				   {
					   pBot->secondary_weapon = FLF_WEAPON_HK21;
				   }
			   }
		   }
		   
		   int pistol = RANDOM_LONG(1, 2);
		   
		   if (pistol == 1)
			   strcpy(c_item, "26");  // mk23
		   else
			   strcpy(c_item, "23");  // beretta
		   
		   FakeClientCommand(pEdict, "pistols", c_item, NULL);
		   
		   return;
      }
	  
      if (pBot->start_action == MSG_FLF_WEAPON_SELECT)
      {
		  int weapon_class;
		  
		  pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		  
		  if (pBot->primary_weapon)
			  weapon_class = pBot->primary_weapon;
		  else
			  weapon_class = pBot->secondary_weapon;
		  
		  if ((weapon_class == FLF_WEAPON_SPAS12) ||  // shotguns
			  (weapon_class == FLF_WEAPON_RS202M2))
			  strcpy(c_item, "shotgun");
		  else if ((weapon_class == FLF_WEAPON_MP5A2) ||  // submachine
			  (weapon_class == FLF_WEAPON_MP5SD) ||
			  (weapon_class == FLF_WEAPON_MAC10) ||
			  (weapon_class == FLF_WEAPON_UMP45))
			  strcpy(c_item, "submachine");
		  else if ((weapon_class == FLF_WEAPON_M4) ||
			  (weapon_class == FLF_WEAPON_FAMAS) ||
			  (weapon_class == FLF_WEAPON_AK5) ||
			  (weapon_class == FLF_WEAPON_MSG90) ||
			  (weapon_class == FLF_WEAPON_SAKO))
			  strcpy(c_item, "rifles");
		  else
			  strcpy(c_item, "heavyweapons");
		  
		  FakeClientCommand(pEdict, "wpnclass", c_item, NULL);
		  
		  return;
      }
	  
      if (pBot->start_action == MSG_FLF_SHOTGUN_SELECT)
      {
		  int weapon_class;
		  
		  pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		  
		  if (pBot->primary_weapon)
		  {
			  weapon_class = pBot->primary_weapon;
			  pBot->primary_weapon = 0;
		  }
		  else
		  {
			  weapon_class = pBot->secondary_weapon;
			  
			  // bot has now joined the game (doesn't need to be started)
			  pBot->not_started = 0;
		  }
		  
		  sprintf(c_item, "%d", weapon_class);
		  
		  FakeClientCommand(pEdict, "shotgun", c_item, NULL);
		  
		  return;
      }
	  
      if (pBot->start_action == MSG_FLF_SUBMACHINE_SELECT)
      {
		  int weapon_class;
		  
		  pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		  
		  if (pBot->primary_weapon)
		  {
			  weapon_class = pBot->primary_weapon;
			  pBot->primary_weapon = 0;
		  }
		  else
		  {
			  weapon_class = pBot->secondary_weapon;
			  
			  // bot has now joined the game (doesn't need to be started)
			  pBot->not_started = 0;
		  }
		  
		  sprintf(c_item, "%d", weapon_class);
		  
		  FakeClientCommand(pEdict, "submach", c_item, NULL);
		  
		  return;
      }
	  
      if (pBot->start_action == MSG_FLF_RIFLE_SELECT)
      {
		  int weapon_class;
		  
		  pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		  
		  if (pBot->primary_weapon)
		  {
			  weapon_class = pBot->primary_weapon;
			  pBot->primary_weapon = 0;
		  }
		  else
		  {
			  weapon_class = pBot->secondary_weapon;
			  
			  // bot has now joined the game (doesn't need to be started)
			  pBot->not_started = 0;
		  }
		  
		  sprintf(c_item, "%d", weapon_class);
		  
		  FakeClientCommand(pEdict, "rifles", c_item, NULL);
		  
		  return;
      }
	  
      if (pBot->start_action == MSG_FLF_HEAVYWEAPONS_SELECT)
      {
		  int weapon_class;
		  
		  pBot->start_action = MSG_FLF_IDLE;  // switch back to idle
		  
		  if (pBot->primary_weapon)
		  {
			  weapon_class = pBot->primary_weapon;
			  pBot->primary_weapon = 0;
		  }
		  else
		  {
			  weapon_class = pBot->secondary_weapon;
			  
			  // bot has now joined the game (doesn't need to be started)
			  pBot->not_started = 0;
		  }
		  
		  sprintf(c_item, "%d", weapon_class);
		  
		  FakeClientCommand(pEdict, "heavyweapons", c_item, NULL);
		  
		  return;
      }
   }
   else if (mod_id == DMC_DLL)
   {
	   FakeClientCommand(pEdict, "_firstspawn", NULL, NULL);
	   
	   pBot->not_started = 0;
   }
   else
   {
	   // otherwise, don't need to do anything to start game...
	   pBot->not_started = 0;
   }
}

