From fb1467284c6b25a930158aab9939e4a7e4474205 Mon Sep 17 00:00:00 2001 From: Aeadoin <109764533+Aeadoin@users.noreply.github.com> Date: Mon, 6 Feb 2023 21:07:38 -0500 Subject: [PATCH] [Bots] Add Additional HeroicStr modifiers. (#2837) --- zone/attack.cpp | 30 +++++++++++++++--------------- zone/bonuses.cpp | 2 +- zone/client.h | 1 - zone/mob.h | 2 +- zone/tune.cpp | 20 ++++++++++---------- 5 files changed, 27 insertions(+), 28 deletions(-) diff --git a/zone/attack.cpp b/zone/attack.cpp index c218a3906..f57a54cfb 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -871,16 +871,16 @@ int Mob::ACSum(bool skip_caps) int ac = 0; // this should be base AC whenever shrouds come around ac += itembonuses.AC; // items + food + tribute int shield_ac = 0; - if (HasShieldEquiped() && IsClient()) { - auto client = CastToClient(); - auto inst = client->GetInv().GetItem(EQ::invslot::slotSecondary); + if (HasShieldEquiped() && (IsClient() || IsBot())) { + auto inst = (IsClient()) ? GetInv().GetItem(EQ::invslot::slotSecondary) : CastToBot()->GetBotItem(EQ::invslot::slotSecondary); if (inst) { - if (inst->GetItemRecommendedLevel(true) <= GetLevel()) + if (inst->GetItemRecommendedLevel(true) <= GetLevel()) { shield_ac = inst->GetItemArmorClass(true); - else - shield_ac = client->CalcRecommendedLevelBonus(GetLevel(), inst->GetItemRecommendedLevel(true), inst->GetItemArmorClass(true)); + } else { + shield_ac = CalcRecommendedLevelBonus(GetLevel(), inst->GetItemRecommendedLevel(true), inst->GetItemArmorClass(true)); + } } - shield_ac += client->GetHeroicSTR() / 10; + shield_ac += GetHeroicSTR() / 10; } // EQ math ac = (ac * 4) / 3; @@ -5793,16 +5793,16 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraAttac TryCriticalHit(defender, hit, opts); hit.damage_done += hit.min_damage; - if (IsClient()) { + if (IsClient() || IsBot()) { int extra = 0; switch (hit.skill) { - case EQ::skills::SkillThrowing: - case EQ::skills::SkillArchery: - extra = CastToClient()->GetHeroicDEX() / 10; - break; - default: - extra = CastToClient()->GetHeroicSTR() / 10; - break; + case EQ::skills::SkillThrowing: + case EQ::skills::SkillArchery: + extra = GetHeroicDEX() / 10; + break; + default: + extra = GetHeroicSTR() / 10; + break; } hit.damage_done += extra; } diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index a6664f55b..82e5cda25 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -128,7 +128,7 @@ void Client::CalcBonuses() consume_food_timer.SetTimer(timer); } -int Client::CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat) +int Mob::CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat) { if( (reclevel > 0) && (level < reclevel) ) { diff --git a/zone/client.h b/zone/client.h index bead68294..6e7de9d6f 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1683,7 +1683,6 @@ protected: void CalcItemBonuses(StatBonuses* newbon); void AddItemBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0, bool ammo_slot_item = false); void AdditiveWornBonuses(const EQ::ItemInstance *inst, StatBonuses* newbon, bool isAug = false); - int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CalcEdibleBonuses(StatBonuses* newbon); void ProcessItemCaps(); void MakeBuffFadePacket(uint16 spell_id, int slot_id, bool send_message = true); diff --git a/zone/mob.h b/zone/mob.h index c3f9251df..66a6ac225 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -657,7 +657,7 @@ public: inline int32 GetHeroicStrikethrough() const { return heroic_strikethrough; } inline const bool GetKeepsSoldItems() const { return keeps_sold_items; } inline void SetKeepsSoldItems(bool in_keeps_sold_items) { keeps_sold_items = in_keeps_sold_items; } - + int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat); void CopyHateList(Mob* to); //Group diff --git a/zone/tune.cpp b/zone/tune.cpp index dcd51a0cc..273d2f488 100644 --- a/zone/tune.cpp +++ b/zone/tune.cpp @@ -1040,16 +1040,16 @@ int64 Mob::TuneACSum(bool skip_caps, int ac_override, int add_ac) } int shield_ac = 0; - if (HasShieldEquiped() && IsClient()) { - auto client = CastToClient(); - auto inst = client->GetInv().GetItem(EQ::invslot::slotSecondary); + if (HasShieldEquiped() && (IsClient() || IsBot())) { + auto inst = (IsClient()) ? GetInv().GetItem(EQ::invslot::slotSecondary) : CastToBot()->GetBotItem(EQ::invslot::slotSecondary); if (inst) { - if (inst->GetItemRecommendedLevel(true) <= GetLevel()) + if (inst->GetItemRecommendedLevel(true) <= GetLevel()) { shield_ac = inst->GetItemArmorClass(true); - else - shield_ac = client->CalcRecommendedLevelBonus(GetLevel(), inst->GetItemRecommendedLevel(true), inst->GetItemArmorClass(true)); + } else { + shield_ac = CalcRecommendedLevelBonus(GetLevel(), inst->GetItemRecommendedLevel(true),inst->GetItemArmorClass(true)); + } } - shield_ac += client->GetHeroicSTR() / 10; + shield_ac += GetHeroicSTR() / 10; } // EQ math ac = (ac * 4) / 3; @@ -1490,15 +1490,15 @@ void Mob::TuneCommonOutgoingHitSuccess(Mob* defender, DamageHitInfo &hit, ExtraA hit.damage_done = min_mod; hit.damage_done += hit.min_damage; - if (IsClient()) { + if (IsClient() || IsBot()) { int extra = 0; switch (hit.skill) { case EQ::skills::SkillThrowing: case EQ::skills::SkillArchery: - extra = CastToClient()->GetHeroicDEX() / 10; + extra = GetHeroicDEX() / 10; break; default: - extra = CastToClient()->GetHeroicSTR() / 10; + extra = GetHeroicSTR() / 10; break; } hit.damage_done += extra;