added yb_camping_allowed.

partially fixed bot freeze when no ammo left in his guns. now bots' should switch to knife and rush enemy.
This commit is contained in:
jeefo 2016-01-03 22:03:02 +03:00
commit 18b4636500
5 changed files with 28 additions and 30 deletions

View file

@ -18,6 +18,7 @@ ConVar yb_jasonmode ("yb_jasonmode", "0");
ConVar yb_communication_type ("yb_communication_type", "2");
ConVar yb_economics_rounds ("yb_economics_rounds", "1");
ConVar yb_walking_allowed ("yb_walking_allowed", "1");
ConVar yb_camping_allowed ("yb_camping_allowed", "1");
ConVar yb_tkpunish ("yb_tkpunish", "1");
ConVar yb_freeze_bots ("yb_freeze_bots", "0");
@ -3051,7 +3052,7 @@ void Bot::RunTask_Normal (void)
PushTask (TASK_SPRAY, TASKPRI_SPRAYLOGO, -1, GetWorldTime () + 1.0f, false);
// reached waypoint is a camp waypoint
if ((m_currentPath->flags & FLAG_CAMP) && !yb_csdm_mode.GetBool ())
if ((m_currentPath->flags & FLAG_CAMP) && !yb_csdm_mode.GetBool () && yb_camping_allowed.GetBool ())
{
// check if bot has got a primary weapon and hasn't camped before
if (HasPrimaryWeapon () && m_timeCamping + 10.0f < GetWorldTime () && !HasHostage ())
@ -3497,11 +3498,17 @@ void Bot::RunTask_Blinded (void)
void Bot::RunTask_Camp (void)
{
if (!yb_camping_allowed.GetBool ())
{
TaskComplete ();
return;
}
m_aimFlags |= AIM_CAMP;
m_checkTerrain = false;
m_moveToGoal = false;
if (g_bombPlanted && m_defendedBomb && !IsBombDefusing (waypoints.GetBombPosition ()) && !OutOfBombTimer () && m_team == TEAM_CF)
if (m_team == TEAM_CF && g_bombPlanted && m_defendedBomb && !IsBombDefusing (waypoints.GetBombPosition ()) && !OutOfBombTimer ())
{
m_defendedBomb = false;
TaskComplete ();

View file

@ -906,17 +906,6 @@ WeaponSelectEnd:
m_zoomCheckTime = GetWorldTime ();
}
if (selectId != WEAPON_KNIFE && HasPrimaryWeapon () && GetAmmoInClip () <= 0)
{
if (GetAmmo () <= 0 && !(m_states &= ~(STATE_THROW_HE | STATE_THROW_FB | STATE_THROW_SG)))
SelectPistol();
pev->button |= IN_RELOAD;
pev->button &= ~IN_ATTACK;
return;
}
// need to care for burst fire?
if (distance < 256.0f || m_blindTime > GetWorldTime ())
{
@ -934,7 +923,7 @@ WeaponSelectEnd:
{
LookupEnemy ();
if (selectTab[chosenWeaponIndex].primaryFireHold && m_ammo[g_weaponDefs[selectTab[selectIndex].id].ammo1] >= selectTab[selectIndex].minPrimaryAmmo) // if automatic weapon, just press attack
if (selectTab[chosenWeaponIndex].primaryFireHold && m_ammo[g_weaponDefs[selectTab[selectIndex].id].ammo1] > selectTab[selectIndex].minPrimaryAmmo) // if automatic weapon, just press attack
pev->button |= IN_ATTACK;
else // if not, toggle buttons
{

View file

@ -170,6 +170,21 @@ int BotCommandHandler (edict_t *ent, const char *arg0, const char *arg1, const c
}
}
else if (stricmp (arg0, "bot_takedamage") == 0 && !IsNullString (arg1))
{
bool isOn = !!(atoi (arg1) == 1);
for (int i = 0; i < GetMaxClients (); i++)
{
Bot *bot = bots.GetBot (i);
if (bot != NULL)
{
bot->pev->takedamage = isOn ? 0.0f : 1.0f;
}
}
}
// displays main bot menu
else if (stricmp (arg0, "botmenu") == 0 || stricmp (arg0, "menu") == 0)
DisplayMenuToClient (ent, &g_menus[0]);
@ -1410,7 +1425,7 @@ void ClientCommand (edict_t *ent)
case 7:
if (waypoints.NodesValid ())
CenterPrint ("Nodes work Find");
CenterPrint ("Nodes works fine");
else
CenterPrint ("There are errors, see console");
break;
@ -3018,20 +3033,6 @@ DLL_GIVEFNPTRSTODLL GiveFnptrsToDll (enginefuncs_t *functionTable, globalvars_t
convars.PushRegisteredConVarsToEngine ();
#ifdef PLATFORM_ANDROID
// ensure data & learned directory are created (as we can download waypoints from the net), do this
// only under the android platform, in case user forget to install bot extras into the mod directory
const char *path = GetWaypointDir ();
// ensure data path exists
CreatePath (const_cast <char *> (path));
char learnedPath[256];
snprintf (learnedPath, SIZEOF_CHAR (learnedPath), "%s/learned", path);
// ensure data/learned path exists
CreatePath (learnedPath);
g_gameVersion = CSV_OLD; // temporary, until opensource client dll get BotVoice message
if (g_isMetamod)

View file

@ -75,6 +75,7 @@ void BotManager::TouchWithKillerEntity (Bot *bot)
MDLL_ClientKill (bot->GetEntity ());
return;
}
m_killerEntity->v.classname = MAKE_STRING (g_weaponDefs[bot->m_currentWeapon].className);
m_killerEntity->v.dmg_inflictor = bot->GetEntity ();