[Bots] Change how bots handle blind (#5104)

This commit is contained in:
nytmyr
2026-06-17 23:22:33 -05:00
committed by GitHub
parent 8fd083b95c
commit 36d6613a47
4 changed files with 28 additions and 1 deletions
+21
View File
@@ -3432,6 +3432,10 @@ bool Bot::CheckIfIncapacitated() {
}
if (currently_fleeing) {
if (!FindType(SpellEffect::Fear)) { // Blinded
return BotProcessBlind();
}
if (RuleB(Combat, EnableFearPathing) && AI_movement_timer->Check()) {
// Check if we have reached the last fear point
if (DistanceNoZ(glm::vec3(GetX(), GetY(), GetZ()), m_FearWalkTarget) <= 5.0f) {
@@ -3453,6 +3457,23 @@ bool Bot::CheckIfIncapacitated() {
return false;
}
bool Bot::BotProcessBlind() {
if (m_combat_jitter_timer.Check() && zone->random.Int(1, 100) <= RuleI(Bots, BlindMoveChance)) {
Mob* tar = GetTarget() ? GetTarget() : GetBotOwner();
if (tar) {
glm::vec3 Goal = tar->GetPosition();
RunTo(Goal.x, Goal.y, Goal.z);
SetCombatJitter();
}
return true;
}
return false;
}
void Bot::SetBerserkState() {// Berserk updates should occur if primary AI criteria are met
if (GetClass() == Class::Warrior || GetClass() == Class::Berserker) {
if (!berserk && GetHPRatio() < RuleI(Combat, BerserkerFrenzyStart)) {
+2 -1
View File
@@ -542,7 +542,7 @@ public:
bool IsValidMezTarget(Mob* owner, Mob* npc, uint16 spell_id);
// Cast checks
bool PrecastChecks(Mob* tar, uint16 spell_type);
bool PrecastChecks(Mob* tar, uint16 spell_type);
bool CastChecks(uint16 spell_id, Mob* tar, uint16 spell_type, bool prechecks = false, bool ae_check = false);
bool IsImmuneToBotSpell(uint16 spell_id, Mob* caster);
bool CanCastSpellType(uint16 spell_type, uint16 spell_id, Mob* tar);
@@ -1055,6 +1055,7 @@ public:
bool BotCastCure(Mob* tar, uint8 bot_class, BotSpell& bot_spell, uint16 spell_type);
bool CheckIfIncapacitated();
bool BotProcessBlind();
bool IsAIProcessValid(const Client* bot_owner, const Group* bot_group, const Raid* raid);
Client* SetLeashOwner(Client* bot_owner, Group* bot_group, Raid* raid, uint32 r_group) const;
+4
View File
@@ -1362,6 +1362,10 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
}
}
}
else if (IsBot()) {
currently_fleeing = true;
CastToBot()->BotProcessBlind();
}
else if (!IsClient()) {
CalculateNewFearpoint();
}