You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
834 lines
25 KiB
834 lines
25 KiB
// |
|
// HPB bot - botman's High Ping Bastard bot |
|
// |
|
// (http://planethalflife.com/botman/) |
|
// |
|
// bot_start.cpp |
|
// |
|
|
|
#include "extdll.h" |
|
#include "util.h" |
|
#include "cbase.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; |
|
|
|
if (mod_id == TFC_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; |
|
|
|
if (pBot->bot_team == -1) |
|
pBot->bot_team = RANDOM_LONG(1, max_teams); |
|
|
|
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 ((pBot->bot_class < 0) || (pBot->bot_class > 10)) |
|
pBot->bot_class = -1; |
|
|
|
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 |
|
{ |
|
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"); |
|
|
|
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; |
|
} |
|
} |
|
|
|
|