diff --git a/zone/bot.h b/zone/bot.h index f0cc3510b..4edf3d4a1 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -387,6 +387,7 @@ public: static void ProcessRaidInvite(Bot* invitee, Client* invitor); //Mitch static void ProcessRaidInvite(Client* invitee, Client* invitor); //Mitch uint8 GetNumberNeedingHealedInRaidGroup(uint8 hpr, bool includePets); //Mitch + bool m_dirtyautohaters; inline void SetDirtyAutoHaters() { m_dirtyautohaters = true; } static std::list GetBotSpellsForSpellEffect(Bot* botCaster, int spellEffect); @@ -609,6 +610,9 @@ public: int32 GetBaseDR() { return _baseDR; } int32 GetBaseCorrup() { return _baseCorrup; } + //Raid additions + Raid* p_raid_instance; + protected: virtual void PetAIProcess(); virtual void BotMeditate(bool isSitting); @@ -737,9 +741,6 @@ private: bool SavePet(); // Save and depop bot pet if there is one bool DeletePet(); - //Raid Additions - bool m_dirtyautohaters; - public: static uint8 spell_casting_chances[SPELL_TYPE_COUNT][PLAYER_CLASS_COUNT][EQ::constants::STANCE_TYPE_COUNT][cntHSND]; }; diff --git a/zone/bot_raid.cpp b/zone/bot_raid.cpp index 78ae8c909..167652d6a 100644 --- a/zone/bot_raid.cpp +++ b/zone/bot_raid.cpp @@ -1531,7 +1531,7 @@ std::vector Raid::GetRaidGroupMembers(uint32 gid) { if (members[i].member && members[i].GroupNumber == gid) { - raid_group_members.emplace_back(members[i]); + raid_group_members.push_back(members[i]); } } return raid_group_members; @@ -1780,9 +1780,10 @@ bool Bot::AICastSpell_Raid(Mob* tar, uint8 iChance, uint32 iSpellTypes) { BotGroupSay(this, "Casting %s.", spells[botSpell.SpellId].name); //raid->RaidBotGroupSay(this, 0, 100, "Casting %s.", spells[botSpell.SpellId].name); std::vector raid_group_members = raid->GetRaidGroupMembers(r_group); - for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { - if (iter->member && !iter->member->qglobal) { - iter->member->SetDontHealMeBefore(Timer::GetCurrentTime() + 1000); + //for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { + for (int i = 0; i < raid_group_members.size(); ++i){ + if (raid_group_members.at(i).member && !raid_group_members.at(i).member->qglobal) { + raid_group_members.at(i).member->SetDontHealMeBefore(Timer::GetCurrentTime() + 1000); } } } @@ -2603,13 +2604,14 @@ uint8 Bot::GetNumberNeedingHealedInRaidGroup(uint8 hpr, bool includePets) { raid = entity_list.GetRaidByBotName(this->GetName()); uint32 r_group = raid->GetGroup(this->GetName()); std::vector raid_group_members = raid->GetRaidGroupMembers(r_group); - for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { - if (iter->member && !iter->member->qglobal) { - if (iter->member->GetHPRatio() <= hpr) + //for (std::vector::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) { + for (int i = 0; i< raid_group_members.size(); ++i) { + if (raid_group_members.at(i).member && !raid_group_members.at(i).member->qglobal) { + if (raid_group_members.at(i).member->GetHPRatio() <= hpr) needHealed++; if (includePets) { - if (iter->member->GetPet() && iter->member->GetPet()->GetHPRatio() <= hpr) + if (raid_group_members.at(i).member->GetPet() && raid_group_members.at(i).member->GetPet()->GetHPRatio() <= hpr) needHealed++; } } diff --git a/zone/entity.cpp b/zone/entity.cpp index cc78fe6ca..328f2f2ee 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -2050,7 +2050,7 @@ Raid* EntityList::GetRaidByClient(Client* client) Raid* EntityList::GetRaidByBotName(const char* name) { - + std::list::iterator iterator; iterator = raid_list.begin(); @@ -2070,6 +2070,26 @@ Raid* EntityList::GetRaidByBotName(const char* name) return nullptr; } +Raid* EntityList::GetRaidByBot(Bot* bot) +{ + + std::list::iterator iterator; + iterator = raid_list.begin(); + + while (iterator != raid_list.end()) { + for (auto& member : (*iterator)->members) { + if (member.member && member.member->CastToBot() == bot) { + bot->p_raid_instance = *iterator; + return *iterator; + } + } + ++iterator; + } + return nullptr; +} + + + Raid *EntityList::GetRaidByMob(Mob *mob) { std::list::iterator iterator; diff --git a/zone/entity.h b/zone/entity.h index 45f588ccf..ddc796319 100644 --- a/zone/entity.h +++ b/zone/entity.h @@ -199,6 +199,7 @@ public: Raid *GetRaidByLeaderName(const char *leader); #ifdef BOTS Raid* GetRaidByBotName(const char* name); + Raid* GetRaidByBot(Bot* bot); #endif Corpse *GetCorpseByOwner(Client* client);