diff --git a/source/basecode.cpp b/source/basecode.cpp index c1852f4..35d6c6b 100644 --- a/source/basecode.cpp +++ b/source/basecode.cpp @@ -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]); diff --git a/source/combat.cpp b/source/combat.cpp index b981f86..50ba131 100644 --- a/source/combat.cpp +++ b/source/combat.cpp @@ -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 ()) { diff --git a/source/navigate.cpp b/source/navigate.cpp index dda56de..ae754cb 100644 --- a/source/navigate.cpp +++ b/source/navigate.cpp @@ -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 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 (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 (); } }