some combat behaviour improvements
This commit is contained in:
parent
83740aa129
commit
f0dcda5747
3 changed files with 28 additions and 32 deletions
|
|
@ -2872,16 +2872,11 @@ void Bot::SelectLeaderEachTeam (int team)
|
|||
|
||||
void Bot::ChooseAimDirection (void)
|
||||
{
|
||||
if (!m_canChooseAimDirection)
|
||||
return;
|
||||
|
||||
TraceResult tr;
|
||||
memset (&tr, 0, sizeof (TraceResult));
|
||||
|
||||
unsigned int flags = m_aimFlags;
|
||||
|
||||
bool canChooseAimDirection = false;
|
||||
|
||||
if (!(m_currentWaypointIndex >= 0 && m_currentWaypointIndex < g_numWaypoints))
|
||||
GetValidWaypoint ();
|
||||
|
||||
|
|
@ -2913,7 +2908,7 @@ void Bot::ChooseAimDirection (void)
|
|||
if (IsOnLadder () || IsInWater () || (m_waypointFlags & FLAG_LADDER) || (m_currentTravelFlags & PATHFLAG_JUMP))
|
||||
{
|
||||
flags &= ~(AIM_LAST_ENEMY | AIM_PREDICT_PATH);
|
||||
canChooseAimDirection = false;
|
||||
m_canChooseAimDirection = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2982,7 +2977,7 @@ void Bot::ChooseAimDirection (void)
|
|||
{
|
||||
m_lookAt = m_destOrigin;
|
||||
|
||||
if (canChooseAimDirection && m_currentWaypointIndex != -1 && !(m_currentPath->flags & FLAG_LADDER))
|
||||
if (m_canChooseAimDirection && m_currentWaypointIndex != -1 && !(m_currentPath->flags & FLAG_LADDER))
|
||||
{
|
||||
int index = m_currentWaypointIndex;
|
||||
|
||||
|
|
@ -3010,7 +3005,7 @@ void Bot::ChooseAimDirection (void)
|
|||
}
|
||||
}
|
||||
|
||||
if (canChooseAimDirection && m_prevWptIndex[0] >= 0 && m_prevWptIndex[0] < g_numWaypoints)
|
||||
if (m_canChooseAimDirection && m_prevWptIndex[0] >= 0 && m_prevWptIndex[0] < g_numWaypoints)
|
||||
{
|
||||
Path *path = g_waypoint->GetPath (m_prevWptIndex[0]);
|
||||
|
||||
|
|
|
|||
|
|
@ -1047,7 +1047,7 @@ void Bot::CombatFight (void)
|
|||
{
|
||||
if (m_lastFightStyleCheck + 3.0 < GetWorldTime ())
|
||||
{
|
||||
if ( g_randGen.Long (0, 100) < 50)
|
||||
if (g_randGen.Long (0, 100) < 50)
|
||||
m_fightStyle = 1;
|
||||
else
|
||||
m_fightStyle = 0;
|
||||
|
|
@ -1056,7 +1056,11 @@ void Bot::CombatFight (void)
|
|||
}
|
||||
}
|
||||
|
||||
if ((m_difficulty >= 1 && m_fightStyle == 0) || ((pev->button & IN_RELOAD) || m_isReloading) || (UsesPistol () && distance < 500.0))
|
||||
// if there is a friend between us and enemy, do a strafe movement
|
||||
if (m_lastFightStyleCheck + 2.5f < GetWorldTime () && IsFriendInLineOfFire (distance))
|
||||
m_fightStyle = 0;
|
||||
|
||||
if ((m_difficulty >= 1 && m_fightStyle == 0) || ((pev->button & IN_RELOAD) || m_isReloading) || (UsesPistol () && distance < 400.0f))
|
||||
{
|
||||
if (m_strafeSetTime < GetWorldTime ())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1847,7 +1847,6 @@ bool Bot::FindWaypoint (void)
|
|||
reachDistances[j] = distance;
|
||||
}
|
||||
}
|
||||
DebugMsg ("got some waypoints...");
|
||||
}
|
||||
|
||||
// now pick random one from choosen
|
||||
|
|
@ -1872,8 +1871,6 @@ bool Bot::FindWaypoint (void)
|
|||
Array <int> found;
|
||||
g_waypoint->FindInRadius (found, 256.0f, pev->origin);
|
||||
|
||||
DebugMsg ("doing worst case");
|
||||
|
||||
if (!found.IsEmpty ())
|
||||
{
|
||||
bool gotId = false;
|
||||
|
|
@ -2339,6 +2336,7 @@ bool Bot::HeadTowardWaypoint (void)
|
|||
m_navNode = m_navNode->next; // advance in list
|
||||
m_currentTravelFlags = 0; // reset travel flags (jumping etc)
|
||||
|
||||
// we're not at the end of the list?
|
||||
// we're not at the end of the list?
|
||||
if (m_navNode != NULL)
|
||||
{
|
||||
|
|
@ -2346,12 +2344,10 @@ bool Bot::HeadTowardWaypoint (void)
|
|||
if (m_navNode != m_navNodeStart && m_navNode->next != NULL)
|
||||
{
|
||||
GetBestNextWaypoint ();
|
||||
|
||||
int taskID = GetTaskId ();
|
||||
m_minSpeed = pev->maxspeed;
|
||||
|
||||
// only if we in normal task and bomb is not planted
|
||||
if (taskID == TASK_NORMAL && !g_bombPlanted && !m_inBombZone && !m_inBuyZone && m_personality != PERSONALITY_RUSHER && !m_hasC4 && !m_isVIP && (m_loosedBombWptIndex == -1) && !HasHostage () && m_fearLevel * 2 > m_agressionLevel)
|
||||
if (m_currentPath->flags & (FLAG_GOAL | FLAG_SNIPER | FLAG_CAMP) && GetTaskId () == TASK_NORMAL && !g_bombPlanted && m_personality != PERSONALITY_RUSHER && !m_hasC4 && !m_isVIP && m_loosedBombWptIndex == -1 && !HasHostage ())
|
||||
{
|
||||
m_campButtons = 0;
|
||||
|
||||
|
|
@ -2363,35 +2359,36 @@ bool Bot::HeadTowardWaypoint (void)
|
|||
else
|
||||
kills = (g_experienceData + (waypoint * g_numWaypoints) + waypoint)->team1Damage / g_highestDamageCT;
|
||||
|
||||
switch (m_personality)
|
||||
{
|
||||
case PERSONALITY_NORMAL:
|
||||
kills *= 0.33f;
|
||||
break;
|
||||
|
||||
default:
|
||||
kills *= 0.5f;
|
||||
break;
|
||||
}
|
||||
|
||||
// if damage done higher than one
|
||||
if (kills > 0.15f && g_timeRoundMid + 30.0f > GetWorldTime () && m_timeCamping + 10.0 < GetWorldTime())
|
||||
if (kills > 0.15f && g_timeRoundMid > GetWorldTime ())
|
||||
{
|
||||
switch (m_personality)
|
||||
{
|
||||
case PERSONALITY_NORMAL:
|
||||
kills *= 0.33f;
|
||||
break;
|
||||
|
||||
default:
|
||||
kills *= 0.5f;
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_baseAgressionLevel < kills && GetTaskId () != TASK_MOVETOPOSITION && HasPrimaryWeapon ())
|
||||
{
|
||||
DebugMsg ("pushing camp on to stack");
|
||||
StartTask (TASK_CAMP, TASKPRI_CAMP, -1, GetWorldTime () + (m_fearLevel * (g_timeRoundMid - GetWorldTime ()) * 0.5), true); // push camp task on to stack
|
||||
|
||||
StartTask (TASK_MOVETOPOSITION, TASKPRI_MOVETOPOSITION, FindDefendWaypoint (g_waypoint->GetPath (waypoint)->origin), 0.0, true);
|
||||
|
||||
if (m_difficulty >= 2)
|
||||
if (m_difficulty >= 3)
|
||||
pev->button |= IN_DUCK;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_botsCanPause && !IsOnLadder () && !IsInWater () && !m_currentTravelFlags && IsOnFloor ())
|
||||
else if (g_botsCanPause && !IsOnLadder () && !IsInWater () && !m_currentTravelFlags && IsOnFloor ())
|
||||
{
|
||||
if (static_cast <float> (kills) == m_baseAgressionLevel)
|
||||
m_campButtons |= IN_DUCK;
|
||||
else if (g_randGen.Long (1, 100) < m_difficulty * 25)
|
||||
else if (g_randGen.Long (1, 100) > (m_difficulty * 25 + g_randGen.Long (1, 20)))
|
||||
m_minSpeed = GetWalkSpeed ();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue