mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-06-20 15:39:25 +02:00
Clean up unused variables (#2268)
<!--
Thank you for contributing to mod-playerbots, please make sure that
you...
1. Submit your PR to the test-staging branch, not master.
2. Read the guidelines below before submitting.
3. Don't delete parts of this template.
DESIGN PHILOSOPHY: We prioritize STABILITY, PERFORMANCE, AND
PREDICTABILITY over behavioral realism.
Every action and decision executes PER BOT AND PER TRIGGER. Small
increases in logic complexity scale
poorly across thousands of bots and negatively affect all. We prioritize
a stable system over a smarter
one. Bots don't need to behave perfectly; believable behavior is the
goal, not human simulation.
Default behavior must be cheap in processing; expensive behavior must be
opt-in.
Before submitting, make sure your changes aligns with these principles.
-->
## Pull Request Description
<!-- Describe what this change does and why it is needed -->
Clean up a bunch of additional unused variable warnings.
## Feature Evaluation
<!--
If your PR is very minimal (comment typo, wrong ID reference, etc), and
it is very obvious it will not have
any impact on performance, you may skip these question. If necessary, a
maintainer may ask you for them later.
-->
<!-- Please answer the following: -->
- Describe the **minimum logic** required to achieve the intended
behavior.
- Describe the **processing cost** when this logic executes across many
bots.
## How to Test the Changes
<!--
- Step-by-step instructions to test the change.
- Any required setup (e.g. multiple players, number of bots, specific
configuration).
- Expected behavior and how to verify it.
-->
## Impact Assessment
<!-- As a generic test, before and after measure of pmon (playerbot pmon
tick) can help you here. -->
- Does this change increase per-bot/per-tick processing or risk scaling
poorly with thousands of bots?
- - [x] No, not at all
- - [ ] Minimal impact (**explain below**)
- - [ ] Moderate impact (**explain below**)
- Does this change modify default bot behavior?
- - [x] No
- - [ ] Yes (**explain why**)
- Does this change add new decision branches or increase maintenance
complexity?
- - [x] No
- - [ ] Yes (**explain below**)
## Messages to Translate
<!--
Bot messages have to be translatable, but you don't need to do the
translations here. You only need to make sure
the message is in a translatable format, and list in the table the
message_key and the default English message.
Search for GetBotTextOrDefault in the codebase for examples.
-->
- Does this change add bot messages to translate?
- - [x] No
- - [ ] Yes (**list messages in the table**)
| Message key | Default message |
| --------------- | ------------------ |
| | |
| | |
## AI Assistance
<!--
AI assistance is allowed, but all submitted code must be fully
understood, reviewed, and owned by the contributor.
We expect contributors to be honest about what they do and do not
understand.
-->
- Was AI assistance used while working on this change?
- - [ ] No
- - [x] Yes (**explain below**)
<!--
If yes, please specify:
- Purpose of usage (e.g. brainstorming, refactoring, documentation, code
generation).
- Which parts of the change were influenced or generated, and whether it
was thoroughly reviewed.
-->
Claude reviewed the warnings log from a build and suggested a series of
changes. I focused just on these warnings for now. Every line was
reviewed. Some sections need to be reviewed by author for intent.
## Final Checklist
- - [x] Stability is not compromised.
- - [x] Performance impact is understood, tested, and acceptable.
- - [x] Added logic complexity is justified and explained.
- - [x] Documentation updated if needed (Conf comments, WiKi commands).
## Notes for Reviewers
<!-- Anything else that's helpful to review or test your pull request.
-->
This commit is contained in:
parent
a4b37c9fbc
commit
866a73dfbf
@ -73,7 +73,7 @@ void AutoMaintenanceOnLevelupAction::LearnSpells(std::ostringstream* out)
|
|||||||
LearnQuestSpells(out);
|
LearnQuestSpells(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoMaintenanceOnLevelupAction::LearnTrainerSpells(std::ostringstream* out)
|
void AutoMaintenanceOnLevelupAction::LearnTrainerSpells(std::ostringstream* /*out*/)
|
||||||
{
|
{
|
||||||
PlayerbotFactory factory(bot, bot->GetLevel());
|
PlayerbotFactory factory(bot, bot->GetLevel());
|
||||||
factory.InitSkills();
|
factory.InitSkills();
|
||||||
|
|||||||
@ -27,7 +27,7 @@ bool BankAction::Execute(Event event)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BankAction::ExecuteBank(std::string const text, Unit* bank)
|
bool BankAction::ExecuteBank(std::string const text, Unit* /*bank*/)
|
||||||
{
|
{
|
||||||
if (text.empty() || text == "?")
|
if (text.empty() || text == "?")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -21,7 +21,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
virtual std::string const castString(WorldObject* target) { return "cast"; }
|
virtual std::string const castString(WorldObject* /*target*/) { return "cast"; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool ncCast = false;
|
bool ncCast = false;
|
||||||
@ -49,7 +49,7 @@ public:
|
|||||||
|
|
||||||
bool isUseful() override { return false; }
|
bool isUseful() override { return false; }
|
||||||
virtual bool AcceptSpell(SpellInfo const* spellInfo);
|
virtual bool AcceptSpell(SpellInfo const* spellInfo);
|
||||||
virtual uint32 GetSpellPriority(SpellInfo const* spellInfo) { return 1; }
|
virtual uint32 GetSpellPriority(SpellInfo const* /*spellInfo*/) { return 1; }
|
||||||
virtual bool castSpell(uint32 spellId, WorldObject* wo);
|
virtual bool castSpell(uint32 spellId, WorldObject* wo);
|
||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
|
|
||||||
|
|||||||
@ -80,7 +80,7 @@ bool FollowChatShortcutAction::Execute(Event /*event*/)
|
|||||||
true, priority);
|
true, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Pet* pet = bot->GetPet())
|
if (bot->GetPet())
|
||||||
botAI->PetFollow();
|
botAI->PetFollow();
|
||||||
|
|
||||||
if (moved)
|
if (moved)
|
||||||
|
|||||||
@ -116,6 +116,7 @@ bool ChooseRpgTargetAction::Execute(Event /*event*/)
|
|||||||
GuidPosition masterRpgTarget;
|
GuidPosition masterRpgTarget;
|
||||||
if (master && master != bot && GET_PLAYERBOT_AI(master) && master->GetMapId() == bot->GetMapId() && !master->IsBeingTeleported())
|
if (master && master != bot && GET_PLAYERBOT_AI(master) && master->GetMapId() == bot->GetMapId() && !master->IsBeingTeleported())
|
||||||
{
|
{
|
||||||
|
//TODO Implement
|
||||||
Player* player = botAI->GetMaster();
|
Player* player = botAI->GetMaster();
|
||||||
//GuidPosition masterRpgTarget = PAI_VALUE(GuidPosition, "rpg target"); //not used, line marked for removal.
|
//GuidPosition masterRpgTarget = PAI_VALUE(GuidPosition, "rpg target"); //not used, line marked for removal.
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,25 +68,13 @@ bool CleanQuestLogAction::Execute(Event event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!sPlayerbotAIConfig.dropObsoleteQuests)
|
if (!sPlayerbotAIConfig.dropObsoleteQuests)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
// Only output this message if "debug rpg" strategy is enabled
|
// Only output this message if "debug rpg" strategy is enabled
|
||||||
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
||||||
{
|
|
||||||
botAI->TellMaster("Clean Quest Log command received, removing grey/trivial quests...");
|
botAI->TellMaster("Clean Quest Log command received, removing grey/trivial quests...");
|
||||||
}
|
|
||||||
|
|
||||||
uint8 botLevel = bot->GetLevel(); // Get bot's level
|
uint8 botLevel = bot->GetLevel(); // Get bot's level
|
||||||
uint8 numQuest = 0;
|
|
||||||
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
|
|
||||||
{
|
|
||||||
if (bot->GetQuestSlotQuestId(slot))
|
|
||||||
{
|
|
||||||
numQuest++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
|
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
|
||||||
{
|
{
|
||||||
@ -101,34 +89,24 @@ bool CleanQuestLogAction::Execute(Event event)
|
|||||||
// Determine if quest is trivial by comparing levels
|
// Determine if quest is trivial by comparing levels
|
||||||
int32 questLevel = quest->GetQuestLevel();
|
int32 questLevel = quest->GetQuestLevel();
|
||||||
if (questLevel == -1) // For scaling quests, default to bot level
|
if (questLevel == -1) // For scaling quests, default to bot level
|
||||||
{
|
|
||||||
questLevel = botLevel;
|
questLevel = botLevel;
|
||||||
}
|
|
||||||
|
|
||||||
// Set the level difference for when a quest becomes trivial
|
// Set the level difference for when a quest becomes trivial
|
||||||
// This was determined by using the Lua code the client uses
|
// This was determined by using the Lua code the client uses
|
||||||
int32 trivialLevel = 5;
|
int32 trivialLevel = 5;
|
||||||
if (botLevel >= 40)
|
if (botLevel >= 40)
|
||||||
{
|
|
||||||
trivialLevel = 8;
|
trivialLevel = 8;
|
||||||
}
|
|
||||||
else if (botLevel >= 30)
|
else if (botLevel >= 30)
|
||||||
{
|
|
||||||
trivialLevel = 7;
|
trivialLevel = 7;
|
||||||
}
|
|
||||||
else if (botLevel >= 20)
|
else if (botLevel >= 20)
|
||||||
{
|
|
||||||
trivialLevel = 6;
|
trivialLevel = 6;
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the quest is trivial (grey) for the bot
|
// Check if the quest is trivial (grey) for the bot
|
||||||
if ((botLevel - questLevel) > trivialLevel)
|
if ((botLevel - questLevel) > trivialLevel)
|
||||||
{
|
{
|
||||||
// Output only if "debug rpg" strategy is enabled
|
// Output only if "debug rpg" strategy is enabled
|
||||||
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
||||||
{
|
|
||||||
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] will be removed because it is trivial (grey).");
|
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] will be removed because it is trivial (grey).");
|
||||||
}
|
|
||||||
|
|
||||||
// Remove quest
|
// Remove quest
|
||||||
botAI->rpgStatistic.questDropped++;
|
botAI->rpgStatistic.questDropped++;
|
||||||
@ -137,8 +115,6 @@ bool CleanQuestLogAction::Execute(Event event)
|
|||||||
bot->SetQuestStatus(questId, QUEST_STATUS_NONE);
|
bot->SetQuestStatus(questId, QUEST_STATUS_NONE);
|
||||||
bot->RemoveRewardedQuest(questId);
|
bot->RemoveRewardedQuest(questId);
|
||||||
|
|
||||||
numQuest--;
|
|
||||||
|
|
||||||
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
||||||
{
|
{
|
||||||
const std::string text_quest = ChatHelper::FormatQuest(quest);
|
const std::string text_quest = ChatHelper::FormatQuest(quest);
|
||||||
@ -147,19 +123,15 @@ bool CleanQuestLogAction::Execute(Event event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
||||||
{
|
|
||||||
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] has been removed.");
|
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] has been removed.");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Only output if "debug rpg" strategy is enabled
|
// Only output if "debug rpg" strategy is enabled
|
||||||
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
if (botAI->HasStrategy("debug rpg", BotState::BOT_STATE_COMBAT))
|
||||||
{
|
|
||||||
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] is not trivial and will be kept.");
|
botAI->TellMaster("Quest [ " + quest->GetTitle() + " ] is not trivial and will be kept.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -174,7 +146,6 @@ void CleanQuestLogAction::DropQuestType(uint8& numQuest, uint8 wantNum, bool isG
|
|||||||
{
|
{
|
||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
std::mt19937 g(rd());
|
std::mt19937 g(rd());
|
||||||
|
|
||||||
std::shuffle(slots.begin(), slots.end(), g);
|
std::shuffle(slots.begin(), slots.end(), g);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,9 +171,11 @@ void CleanQuestLogAction::DropQuestType(uint8& numQuest, uint8 wantNum, bool isG
|
|||||||
bot->GetLevel() <= bot->GetQuestLevel(quest) + uint32(lowLevelDiff)) // Quest is not gray
|
bot->GetLevel() <= bot->GetQuestLevel(quest) + uint32(lowLevelDiff)) // Quest is not gray
|
||||||
{
|
{
|
||||||
if (bot->GetLevel() + 5 > bot->GetQuestLevel(quest)) // Quest is not red
|
if (bot->GetLevel() + 5 > bot->GetQuestLevel(quest)) // Quest is not red
|
||||||
|
{
|
||||||
if (!isGreen)
|
if (!isGreen)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else // Quest is gray
|
else // Quest is gray
|
||||||
{
|
{
|
||||||
if (isGreen)
|
if (isGreen)
|
||||||
|
|||||||
@ -168,8 +168,8 @@ bool FollowAction::Execute(Event /*event*/)
|
|||||||
? MovementPriority::MOVEMENT_COMBAT
|
? MovementPriority::MOVEMENT_COMBAT
|
||||||
: MovementPriority::MOVEMENT_NORMAL;
|
: MovementPriority::MOVEMENT_NORMAL;
|
||||||
|
|
||||||
bool const movingAllowed = IsMovingAllowed(mapId, destX, destY, destZ);
|
bool const movingAllowed = IsMovingAllowed();
|
||||||
bool const dupMove = IsDuplicateMove(mapId, destX, destY, destZ);
|
bool const dupMove = IsDuplicateMove(destX, destY, destZ);
|
||||||
bool const waiting = IsWaitingForLastMove(priority);
|
bool const waiting = IsWaitingForLastMove(priority);
|
||||||
|
|
||||||
if (movingAllowed && !dupMove && !waiting)
|
if (movingAllowed && !dupMove && !waiting)
|
||||||
|
|||||||
@ -53,7 +53,7 @@ bool GuildBankAction::Execute(std::string const text, GameObject* bank)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GuildBankAction::MoveFromCharToBank(Item* item, GameObject* bank)
|
bool GuildBankAction::MoveFromCharToBank(Item* item, GameObject* /*bank*/)
|
||||||
{
|
{
|
||||||
uint32 playerSlot = item->GetSlot();
|
uint32 playerSlot = item->GetSlot();
|
||||||
uint32 playerBag = item->GetBagSlot();
|
uint32 playerBag = item->GetBagSlot();
|
||||||
|
|||||||
@ -78,7 +78,7 @@ private:
|
|||||||
class TakeMailProcessor : public MailProcessor
|
class TakeMailProcessor : public MailProcessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Process(uint32 index, Mail* mail, PlayerbotAI* botAI) override
|
bool Process(uint32 /*index*/, Mail* mail, PlayerbotAI* botAI) override
|
||||||
{
|
{
|
||||||
Player* bot = botAI->GetBot();
|
Player* bot = botAI->GetBot();
|
||||||
if (!CheckBagSpace(bot))
|
if (!CheckBagSpace(bot))
|
||||||
@ -104,7 +104,7 @@ public:
|
|||||||
{
|
{
|
||||||
std::vector<uint32> guids;
|
std::vector<uint32> guids;
|
||||||
for (MailItemInfoVec::iterator i = mail->items.begin(); i != mail->items.end(); ++i)
|
for (MailItemInfoVec::iterator i = mail->items.begin(); i != mail->items.end(); ++i)
|
||||||
if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(i->item_template))
|
if (sObjectMgr->GetItemTemplate(i->item_template))
|
||||||
guids.push_back(i->item_guid);
|
guids.push_back(i->item_guid);
|
||||||
|
|
||||||
for (std::vector<uint32>::iterator i = guids.begin(); i != guids.end(); ++i)
|
for (std::vector<uint32>::iterator i = guids.begin(); i != guids.end(); ++i)
|
||||||
@ -157,7 +157,7 @@ private:
|
|||||||
class DeleteMailProcessor : public MailProcessor
|
class DeleteMailProcessor : public MailProcessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Process(uint32 index, Mail* mail, PlayerbotAI* botAI) override
|
bool Process(uint32 /*index*/, Mail* mail, PlayerbotAI* botAI) override
|
||||||
{
|
{
|
||||||
std::ostringstream out;
|
std::ostringstream out;
|
||||||
out << "|cffffffff" << mail->subject << "|cffff0000 deleted";
|
out << "|cffffffff" << mail->subject << "|cffff0000 deleted";
|
||||||
@ -172,7 +172,7 @@ public:
|
|||||||
class ReadMailProcessor : public MailProcessor
|
class ReadMailProcessor : public MailProcessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Process(uint32 index, Mail* mail, PlayerbotAI* botAI) override
|
bool Process(uint32 /*index*/, Mail* mail, PlayerbotAI* botAI) override
|
||||||
{
|
{
|
||||||
std::ostringstream out, body;
|
std::ostringstream out, body;
|
||||||
out << "|cffffffff" << mail->subject;
|
out << "|cffffffff" << mail->subject;
|
||||||
|
|||||||
@ -63,10 +63,10 @@ void MovementAction::CreateWp(Player* wpOwner, float x, float y, float z, float
|
|||||||
bool MovementAction::JumpTo(uint32 mapId, float x, float y, float z, MovementPriority priority)
|
bool MovementAction::JumpTo(uint32 mapId, float x, float y, float z, MovementPriority priority)
|
||||||
{
|
{
|
||||||
UpdateMovementState();
|
UpdateMovementState();
|
||||||
if (!IsMovingAllowed(mapId, x, y, z))
|
if (!IsMovingAllowed())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (IsDuplicateMove(mapId, x, y, z))
|
if (IsDuplicateMove(x, y, z))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (IsWaitingForLastMove(priority))
|
if (IsWaitingForLastMove(priority))
|
||||||
@ -171,11 +171,11 @@ bool MovementAction::MoveTo(uint32 mapId, float x, float y, float z, bool idle,
|
|||||||
bool exact_waypoint, MovementPriority priority, bool lessDelay, bool backwards)
|
bool exact_waypoint, MovementPriority priority, bool lessDelay, bool backwards)
|
||||||
{
|
{
|
||||||
UpdateMovementState();
|
UpdateMovementState();
|
||||||
if (!IsMovingAllowed(mapId, x, y, z))
|
if (!IsMovingAllowed())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (IsDuplicateMove(mapId, x, y, z))
|
if (IsDuplicateMove(x, y, z))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -897,20 +897,7 @@ bool MovementAction::IsMovingAllowed(WorldObject* target)
|
|||||||
return IsMovingAllowed();
|
return IsMovingAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MovementAction::IsMovingAllowed(uint32 mapId, float x, float y, float z)
|
bool MovementAction::IsDuplicateMove(float x, float y, float z)
|
||||||
{
|
|
||||||
// removed sqrt as means distance limit was effectively 22500 (ReactDistance<63>)
|
|
||||||
// leaving it commented incase we find ReactDistance limit causes problems
|
|
||||||
// float distance = sqrt(bot->GetDistance(x, y, z));
|
|
||||||
|
|
||||||
// Remove react distance limit
|
|
||||||
// if (!bot->InBattleground())
|
|
||||||
// return false;
|
|
||||||
|
|
||||||
return IsMovingAllowed();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MovementAction::IsDuplicateMove(uint32 mapId, float x, float y, float z)
|
|
||||||
{
|
{
|
||||||
LastMovement& lastMove = *context->GetValue<LastMovement&>("last movement");
|
LastMovement& lastMove = *context->GetValue<LastMovement&>("last movement");
|
||||||
|
|
||||||
@ -1286,7 +1273,7 @@ bool MovementAction::Follow(Unit* target, float distance, float angle)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MovementAction::ChaseTo(WorldObject* obj, float distance, float angle)
|
bool MovementAction::ChaseTo(WorldObject* obj, float distance)
|
||||||
{
|
{
|
||||||
if (!IsMovingAllowed())
|
if (!IsMovingAllowed())
|
||||||
{
|
{
|
||||||
@ -1859,7 +1846,7 @@ bool FleeAction::isUseful()
|
|||||||
|
|
||||||
bool FleeWithPetAction::Execute(Event /*event*/)
|
bool FleeWithPetAction::Execute(Event /*event*/)
|
||||||
{
|
{
|
||||||
if (Pet* pet = bot->GetPet())
|
if (bot->GetPet())
|
||||||
botAI->PetFollow();
|
botAI->PetFollow();
|
||||||
|
|
||||||
return Flee(AI_VALUE(Unit*, "current target"));
|
return Flee(AI_VALUE(Unit*, "current target"));
|
||||||
|
|||||||
@ -43,14 +43,13 @@ protected:
|
|||||||
float GetFollowAngle();
|
float GetFollowAngle();
|
||||||
bool Follow(Unit* target, float distance = sPlayerbotAIConfig.followDistance);
|
bool Follow(Unit* target, float distance = sPlayerbotAIConfig.followDistance);
|
||||||
bool Follow(Unit* target, float distance, float angle);
|
bool Follow(Unit* target, float distance, float angle);
|
||||||
bool ChaseTo(WorldObject* obj, float distance = 0.0f, float angle = 0.0f);
|
bool ChaseTo(WorldObject* obj, float distance = 0.0f);
|
||||||
bool ReachCombatTo(Unit* target, float distance = 0.0f);
|
bool ReachCombatTo(Unit* target, float distance = 0.0f);
|
||||||
float MoveDelay(float distance, bool backwards = false);
|
float MoveDelay(float distance, bool backwards = false);
|
||||||
void WaitForReach(float distance);
|
void WaitForReach(float distance);
|
||||||
void SetNextMovementDelay(float delayMillis);
|
void SetNextMovementDelay(float delayMillis);
|
||||||
bool IsMovingAllowed(WorldObject* target);
|
bool IsMovingAllowed(WorldObject* target);
|
||||||
bool IsMovingAllowed(uint32 mapId, float x, float y, float z);
|
bool IsDuplicateMove(float x, float y, float z);
|
||||||
bool IsDuplicateMove(uint32 mapId, float x, float y, float z);
|
|
||||||
bool IsWaitingForLastMove(MovementPriority priority);
|
bool IsWaitingForLastMove(MovementPriority priority);
|
||||||
bool IsMovingAllowed();
|
bool IsMovingAllowed();
|
||||||
bool Flee(Unit* target);
|
bool Flee(Unit* target);
|
||||||
|
|||||||
@ -45,7 +45,7 @@ std::once_flag ReadyChecker::initFlag;
|
|||||||
class HealthChecker : public ReadyChecker
|
class HealthChecker : public ReadyChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Check(PlayerbotAI* botAI, AiObjectContext* context) override
|
bool Check(PlayerbotAI* /*botAI*/, AiObjectContext* context) override
|
||||||
{
|
{
|
||||||
return AI_VALUE2(uint8, "health", "self target") > sPlayerbotAIConfig.almostFullHealth;
|
return AI_VALUE2(uint8, "health", "self target") > sPlayerbotAIConfig.almostFullHealth;
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ public:
|
|||||||
class ManaChecker : public ReadyChecker
|
class ManaChecker : public ReadyChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Check(PlayerbotAI* botAI, AiObjectContext* context) override
|
bool Check(PlayerbotAI* /*botAI*/, AiObjectContext* context) override
|
||||||
{
|
{
|
||||||
return !AI_VALUE2(bool, "has mana", "self target") ||
|
return !AI_VALUE2(bool, "has mana", "self target") ||
|
||||||
AI_VALUE2(uint8, "mana", "self target") > sPlayerbotAIConfig.mediumHealth;
|
AI_VALUE2(uint8, "mana", "self target") > sPlayerbotAIConfig.mediumHealth;
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
class DistanceChecker : public ReadyChecker
|
class DistanceChecker : public ReadyChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Check(PlayerbotAI* botAI, AiObjectContext* context) override
|
bool Check(PlayerbotAI* botAI, AiObjectContext* /*context*/) override
|
||||||
{
|
{
|
||||||
Player* bot = botAI->GetBot();
|
Player* bot = botAI->GetBot();
|
||||||
if (Player* master = botAI->GetMaster())
|
if (Player* master = botAI->GetMaster())
|
||||||
@ -90,7 +90,7 @@ public:
|
|||||||
class HunterChecker : public ReadyChecker
|
class HunterChecker : public ReadyChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool Check(PlayerbotAI* botAI, AiObjectContext* context) override
|
bool Check(PlayerbotAI* botAI, AiObjectContext* /*context*/) override
|
||||||
{
|
{
|
||||||
Player* bot = botAI->GetBot();
|
Player* bot = botAI->GetBot();
|
||||||
if (bot->getClass() == CLASS_HUNTER)
|
if (bot->getClass() == CLASS_HUNTER)
|
||||||
@ -126,7 +126,7 @@ class ItemCountChecker : public ReadyChecker
|
|||||||
public:
|
public:
|
||||||
ItemCountChecker(std::string const item, std::string const name) : item(item), name(name) {}
|
ItemCountChecker(std::string const item, std::string const name) : item(item), name(name) {}
|
||||||
|
|
||||||
bool Check(PlayerbotAI* botAI, AiObjectContext* context) override
|
bool Check(PlayerbotAI* /*botAI*/, AiObjectContext* context) override
|
||||||
{
|
{
|
||||||
return AI_VALUE2(uint32, "item count", item) > 0;
|
return AI_VALUE2(uint32, "item count", item) > 0;
|
||||||
}
|
}
|
||||||
@ -225,4 +225,4 @@ bool ReadyCheckAction::ReadyCheck()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FinishReadyCheckAction::Execute(Event event) { return ReadyCheck(); }
|
bool FinishReadyCheckAction::Execute(Event /*event*/) { return ReadyCheck(); }
|
||||||
|
|||||||
@ -65,7 +65,7 @@ void ReleaseSpiritAction::IncrementDeathCount() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReleaseSpiritAction::LogRelease(const std::string& releaseMsg, bool isAutoRelease) const
|
void ReleaseSpiritAction::LogRelease(const std::string& releaseMsg) const
|
||||||
{
|
{
|
||||||
const std::string teamPrefix = bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H";
|
const std::string teamPrefix = bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H";
|
||||||
|
|
||||||
@ -82,13 +82,13 @@ bool AutoReleaseSpiritAction::Execute(Event /*event*/)
|
|||||||
{
|
{
|
||||||
IncrementDeathCount();
|
IncrementDeathCount();
|
||||||
bot->DurabilityRepairAll(false, 1.0f, false);
|
bot->DurabilityRepairAll(false, 1.0f, false);
|
||||||
LogRelease("auto released", true);
|
LogRelease("auto released");
|
||||||
|
|
||||||
WorldPacket packet(CMSG_REPOP_REQUEST);
|
WorldPacket packet(CMSG_REPOP_REQUEST);
|
||||||
packet << uint8(0);
|
packet << uint8(0);
|
||||||
bot->GetSession()->HandleRepopRequestOpcode(packet);
|
bot->GetSession()->HandleRepopRequestOpcode(packet);
|
||||||
|
|
||||||
LogRelease("releases spirit", true);
|
LogRelease("releases spirit");
|
||||||
|
|
||||||
if (bot->InBattleground())
|
if (bot->InBattleground())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -18,7 +18,7 @@ public:
|
|||||||
: Action(botAI, name) {}
|
: Action(botAI, name) {}
|
||||||
|
|
||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
void LogRelease(const std::string& releaseType, bool isAutoRelease = false) const;
|
void LogRelease(const std::string& releaseType) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void IncrementDeathCount() const;
|
void IncrementDeathCount() const;
|
||||||
|
|||||||
@ -154,7 +154,7 @@ bool SayAction::isUseful()
|
|||||||
return (time(nullptr) - lastSaid) > 30;
|
return (time(nullptr) - lastSaid) > 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatReplyAction::ChatReplyDo(Player* bot, uint32& type, uint32& guid1, uint32& guid2, std::string& msg, std::string& chanName, std::string& name)
|
void ChatReplyAction::ChatReplyDo(Player* bot, uint32& type, uint32& guid1, std::string& msg, std::string& chanName, std::string& name)
|
||||||
{
|
{
|
||||||
std::string respondsText = "";
|
std::string respondsText = "";
|
||||||
|
|
||||||
@ -205,14 +205,14 @@ void ChatReplyAction::ChatReplyDo(Player* bot, uint32& type, uint32& guid1, uint
|
|||||||
if (msg.starts_with(sPlayerbotAIConfig.toxicLinksPrefix)
|
if (msg.starts_with(sPlayerbotAIConfig.toxicLinksPrefix)
|
||||||
&& (GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllItemIds(msg).size() > 0 || GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllQuestIds(msg).size() > 0))
|
&& (GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllItemIds(msg).size() > 0 || GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllQuestIds(msg).size() > 0))
|
||||||
{
|
{
|
||||||
HandleToxicLinksReply(bot, chatChannelSource, msg, name);
|
HandleToxicLinksReply(bot, chatChannelSource);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//thunderfury
|
//thunderfury
|
||||||
if (GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllItemIds(msg).count(19019))
|
if (GET_PLAYERBOT_AI(bot)->GetChatHelper()->ExtractAllItemIds(msg).count(19019))
|
||||||
{
|
{
|
||||||
HandleThunderfuryReply(bot, chatChannelSource, msg, name);
|
HandleThunderfuryReply(bot, chatChannelSource);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ void ChatReplyAction::ChatReplyDo(Player* bot, uint32& type, uint32& guid1, uint
|
|||||||
SendGeneralResponse(bot, chatChannelSource, messageRepy, name);
|
SendGeneralResponse(bot, chatChannelSource, messageRepy, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatReplyAction::HandleThunderfuryReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name)
|
bool ChatReplyAction::HandleThunderfuryReply(Player* bot, ChatChannelSource chatChannelSource)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string> placeholders;
|
std::map<std::string, std::string> placeholders;
|
||||||
const auto thunderfury = sObjectMgr->GetItemTemplate(19019);
|
const auto thunderfury = sObjectMgr->GetItemTemplate(19019);
|
||||||
@ -248,7 +248,7 @@ bool ChatReplyAction::HandleThunderfuryReply(Player* bot, ChatChannelSource chat
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatReplyAction::HandleToxicLinksReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name)
|
bool ChatReplyAction::HandleToxicLinksReply(Player* bot, ChatChannelSource chatChannelSource)
|
||||||
{
|
{
|
||||||
//quests
|
//quests
|
||||||
std::vector<uint32> incompleteQuests;
|
std::vector<uint32> incompleteQuests;
|
||||||
|
|||||||
@ -29,12 +29,12 @@ class ChatReplyAction : public Action
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ChatReplyAction(PlayerbotAI* ai) : Action(ai, "chat message") {}
|
ChatReplyAction(PlayerbotAI* ai) : Action(ai, "chat message") {}
|
||||||
virtual bool Execute(Event event) { return true; }
|
virtual bool Execute(Event /*event*/) { return true; }
|
||||||
bool isUseful() { return true; }
|
bool isUseful() { return true; }
|
||||||
|
|
||||||
static void ChatReplyDo(Player* bot, uint32& type, uint32& guid1, uint32& guid2, std::string& msg, std::string& chanName, std::string& name);
|
static void ChatReplyDo(Player* bot, uint32& type, uint32& guid1, std::string& msg, std::string& chanName, std::string& name);
|
||||||
static bool HandleThunderfuryReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
static bool HandleThunderfuryReply(Player* bot, ChatChannelSource chatChannelSource);
|
||||||
static bool HandleToxicLinksReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
static bool HandleToxicLinksReply(Player* bot, ChatChannelSource chatChannelSource);
|
||||||
static bool HandleWTBItemsReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
static bool HandleWTBItemsReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
||||||
static bool HandleLFGQuestsReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
static bool HandleLFGQuestsReply(Player* bot, ChatChannelSource chatChannelSource, std::string& msg, std::string& name);
|
||||||
static bool SendGeneralResponse(Player* bot, ChatChannelSource chatChannelSource, std::string& responseMessage, std::string& name);
|
static bool SendGeneralResponse(Player* bot, ChatChannelSource chatChannelSource, std::string& responseMessage, std::string& name);
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
std::set<uint32> const FISHING_SPELLS = {7620, 7731, 7732, 18248, 33095, 51294};
|
std::set<uint32> const FISHING_SPELLS = {7620, 7731, 7732, 18248, 33095, 51294};
|
||||||
|
|
||||||
Creature* SeeSpellAction::CreateWps(Player* wpOwner, float x, float y, float z, float o, uint32 entry, Creature* lastWp,
|
Creature* SeeSpellAction::CreateWps(Player* wpOwner, float x, float y, float z, float o, uint32 entry, Creature* /*lastWp*/,
|
||||||
bool important)
|
bool important)
|
||||||
{
|
{
|
||||||
float dist = wpOwner->GetDistance(x, y, z);
|
float dist = wpOwner->GetDistance(x, y, z);
|
||||||
|
|||||||
@ -61,7 +61,7 @@ bool SummonAction::Execute(Event /*event*/)
|
|||||||
if (!master)
|
if (!master)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (Pet* pet = bot->GetPet())
|
if (bot->GetPet())
|
||||||
botAI->PetFollow();
|
botAI->PetFollow();
|
||||||
|
|
||||||
if (master->GetSession()->GetSecurity() >= SEC_PLAYER)
|
if (master->GetSession()->GetSecurity() >= SEC_PLAYER)
|
||||||
|
|||||||
@ -11,7 +11,7 @@ public:
|
|||||||
ChatCommandActionNodeFactoryInternal() { creators["tank attack chat shortcut"] = &tank_attack_chat_shortcut; }
|
ChatCommandActionNodeFactoryInternal() { creators["tank attack chat shortcut"] = &tank_attack_chat_shortcut; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* tank_attack_chat_shortcut(PlayerbotAI* botAI)
|
static ActionNode* tank_attack_chat_shortcut(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode("tank attack chat shortcut",
|
return new ActionNode("tank attack chat shortcut",
|
||||||
/*P*/ {},
|
/*P*/ {},
|
||||||
|
|||||||
@ -64,11 +64,11 @@ std::vector<NextAction> AvoidAoeStrategy::getDefaultActions()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvoidAoeStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void AvoidAoeStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvoidAoeStrategy::InitMultipliers(std::vector<Multiplier*>& multipliers)
|
void AvoidAoeStrategy::InitMultipliers(std::vector<Multiplier*>& /*multipliers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ std::vector<NextAction> TankFaceStrategy::getDefaultActions()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TankFaceStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void TankFaceStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,6 @@ void DuelStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
|
|
||||||
DuelStrategy::DuelStrategy(PlayerbotAI* botAI) : PassTroughStrategy(botAI) {}
|
DuelStrategy::DuelStrategy(PlayerbotAI* botAI) : PassTroughStrategy(botAI) {}
|
||||||
|
|
||||||
void StartDuelStrategy::InitTriggers(std::vector<TriggerNode*>& triggers) {}
|
void StartDuelStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/) {}
|
||||||
|
|
||||||
StartDuelStrategy::StartDuelStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
StartDuelStrategy::StartDuelStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
||||||
|
|||||||
@ -12,6 +12,6 @@ std::vector<NextAction> FollowMasterStrategy::getDefaultActions()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void FollowMasterStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void FollowMasterStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,4 +12,4 @@ std::vector<NextAction> GuardStrategy::getDefaultActions()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuardStrategy::InitTriggers(std::vector<TriggerNode*>& triggers) {}
|
void GuardStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/) {}
|
||||||
|
|||||||
@ -17,7 +17,7 @@ void CollisionStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
new TriggerNode("collision", { NextAction("move out of collision", 2.0f) }));
|
new TriggerNode("collision", { NextAction("move out of collision", 2.0f) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MountStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void MountStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,4 +7,4 @@
|
|||||||
|
|
||||||
RTSCStrategy::RTSCStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
RTSCStrategy::RTSCStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
||||||
|
|
||||||
void RTSCStrategy::InitTriggers(std::vector<TriggerNode*>& triggers) {}
|
void RTSCStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/) {}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ public:
|
|||||||
RacialsStrategyActionNodeFactory() { creators["lifeblood"] = &lifeblood; }
|
RacialsStrategyActionNodeFactory() { creators["lifeblood"] = &lifeblood; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* lifeblood(PlayerbotAI* botAI)
|
static ActionNode* lifeblood(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode("lifeblood",
|
return new ActionNode("lifeblood",
|
||||||
/*P*/ {},
|
/*P*/ {},
|
||||||
|
|||||||
@ -11,7 +11,7 @@ public:
|
|||||||
UsePotionsStrategyActionNodeFactory() { creators["healthstone"] = &healthstone; }
|
UsePotionsStrategyActionNodeFactory() { creators["healthstone"] = &healthstone; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* healthstone(PlayerbotAI* botAI)
|
static ActionNode* healthstone(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode("healthstone",
|
return new ActionNode("healthstone",
|
||||||
/*P*/ {},
|
/*P*/ {},
|
||||||
|
|||||||
@ -19,6 +19,7 @@ WorldLocation ArrowFormation::GetLocationInternal()
|
|||||||
uint32 tankLines = 1 + tanks.Size() / 6;
|
uint32 tankLines = 1 + tanks.Size() / 6;
|
||||||
uint32 meleeLines = 1 + melee.Size() / 6;
|
uint32 meleeLines = 1 + melee.Size() / 6;
|
||||||
uint32 rangedLines = 1 + ranged.Size() / 6;
|
uint32 rangedLines = 1 + ranged.Size() / 6;
|
||||||
|
//TODO Implement Healer Lines
|
||||||
uint32 healerLines = 1 + healers.Size() / 6;
|
uint32 healerLines = 1 + healers.Size() / 6;
|
||||||
float offset = 0.f;
|
float offset = 0.f;
|
||||||
|
|
||||||
@ -147,7 +148,7 @@ UnitPosition MultiLineUnitPlacer::Place(FormationUnit* unit, uint32 index, uint3
|
|||||||
return placer.Place(unit, indexInLine, lineSize);
|
return placer.Place(unit, indexInLine, lineSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
UnitPosition SingleLineUnitPlacer::Place(FormationUnit* unit, uint32 index, uint32 count)
|
UnitPosition SingleLineUnitPlacer::Place(FormationUnit* /*unit*/, uint32 index, uint32 count)
|
||||||
{
|
{
|
||||||
float angle = orientation - M_PI / 2.0f;
|
float angle = orientation - M_PI / 2.0f;
|
||||||
float x = cos(angle) * sPlayerbotAIConfig.followDistance * ((float)index - (float)count / 2);
|
float x = cos(angle) * sPlayerbotAIConfig.followDistance * ((float)index - (float)count / 2);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void CheckAttacker(Unit* creature, ThreatManager* threatMgr) override
|
void CheckAttacker(Unit* creature, ThreatManager* /*threatMgr*/) override
|
||||||
{
|
{
|
||||||
Player* bot = botAI->GetBot();
|
Player* bot = botAI->GetBot();
|
||||||
if (!botAI->CanCastSpell(spell, creature))
|
if (!botAI->CanCastSpell(spell, creature))
|
||||||
|
|||||||
@ -13,7 +13,7 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckAttacker(Unit* attacker, ThreatManager* threatMgr) override
|
void CheckAttacker(Unit* attacker, ThreatManager* /*threatMgr*/) override
|
||||||
{
|
{
|
||||||
if (botAI->HasAura(spell, attacker))
|
if (botAI->HasAura(spell, attacker))
|
||||||
result = attacker;
|
result = attacker;
|
||||||
|
|||||||
@ -50,7 +50,7 @@ public:
|
|||||||
result = nullptr;
|
result = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckAttacker(Unit* attacker, ThreatManager* threatMgr) override
|
void CheckAttacker(Unit* attacker, ThreatManager* /*threatMgr*/) override
|
||||||
{
|
{
|
||||||
if (Group* group = botAI->GetBot()->GetGroup())
|
if (Group* group = botAI->GetBot()->GetGroup())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -11,8 +11,6 @@ std::vector<Item*> InventoryItemValueBase::Find(std::string const qualifier)
|
|||||||
{
|
{
|
||||||
std::vector<Item*> result;
|
std::vector<Item*> result;
|
||||||
|
|
||||||
Player* bot = InventoryAction::botAI->GetBot();
|
|
||||||
|
|
||||||
std::vector<Item*> items = InventoryAction::parseItems(qualifier);
|
std::vector<Item*> items = InventoryAction::parseItems(qualifier);
|
||||||
for (Item* item : items)
|
for (Item* item : items)
|
||||||
result.push_back(item);
|
result.push_back(item);
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class InventoryItemValueBase : public InventoryAction
|
|||||||
public:
|
public:
|
||||||
InventoryItemValueBase(PlayerbotAI* botAI) : InventoryAction(botAI, "empty") {}
|
InventoryItemValueBase(PlayerbotAI* botAI) : InventoryAction(botAI, "empty") {}
|
||||||
|
|
||||||
bool Execute(Event event) override { return false; }
|
bool Execute(Event /*event*/) override { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<Item*> Find(std::string const qualifier);
|
std::vector<Item*> Find(std::string const qualifier);
|
||||||
|
|||||||
@ -864,8 +864,6 @@ bool ItemUsageValue::SpellGivesSkillUp(uint32 spellId, Player* bot)
|
|||||||
{
|
{
|
||||||
uint32 SkillValue = bot->GetPureSkillValue(skill->SkillLine);
|
uint32 SkillValue = bot->GetPureSkillValue(skill->SkillLine);
|
||||||
|
|
||||||
uint32 craft_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING);
|
|
||||||
|
|
||||||
if (SkillGainChance(SkillValue, skill->TrivialSkillLineRankHigh,
|
if (SkillGainChance(SkillValue, skill->TrivialSkillLineRankHigh,
|
||||||
(skill->TrivialSkillLineRankHigh + skill->TrivialSkillLineRankLow) / 2,
|
(skill->TrivialSkillLineRankHigh + skill->TrivialSkillLineRankLow) / 2,
|
||||||
skill->TrivialSkillLineRankLow) > 0)
|
skill->TrivialSkillLineRankLow) > 0)
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class FindLeastHpTargetStrategy : public FindNonCcTargetStrategy
|
|||||||
public:
|
public:
|
||||||
FindLeastHpTargetStrategy(PlayerbotAI* botAI) : FindNonCcTargetStrategy(botAI), minHealth(0) {}
|
FindLeastHpTargetStrategy(PlayerbotAI* botAI) : FindNonCcTargetStrategy(botAI), minHealth(0) {}
|
||||||
|
|
||||||
void CheckAttacker(Unit* attacker, ThreatManager* threatMgr) override
|
void CheckAttacker(Unit* attacker, ThreatManager* /*threatMgr*/) override
|
||||||
{
|
{
|
||||||
if (IsCcTarget(attacker))
|
if (IsCcTarget(attacker))
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -60,7 +60,7 @@ public:
|
|||||||
class AllLootStrategy : public LootStrategy
|
class AllLootStrategy : public LootStrategy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool CanLoot(ItemTemplate const* proto, AiObjectContext* context) override { return true; }
|
bool CanLoot(ItemTemplate const* /*proto*/, AiObjectContext* /*context*/) override { return true; }
|
||||||
|
|
||||||
std::string const GetName() override { return "all"; }
|
std::string const GetName() override { return "all"; }
|
||||||
};
|
};
|
||||||
|
|||||||
@ -28,4 +28,4 @@ void NearestCorpsesValue::FindUnits(std::list<Unit*>& targets)
|
|||||||
Cell::VisitObjects(bot, searcher, range);
|
Cell::VisitObjects(bot, searcher, range);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NearestCorpsesValue::AcceptUnit(Unit* unit) { return true; }
|
bool NearestCorpsesValue::AcceptUnit(Unit* /*unit*/) { return true; }
|
||||||
|
|||||||
@ -27,7 +27,7 @@ Unit* PartyMemberValue::FindPartyMember(std::vector<Player*>* party, FindPlayerP
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Unit* PartyMemberValue::FindPartyMember(FindPlayerPredicate& predicate, bool ignoreOutOfGroup)
|
Unit* PartyMemberValue::FindPartyMember(FindPlayerPredicate& predicate, bool /*ignoreOutOfGroup*/)
|
||||||
{
|
{
|
||||||
Player* master = GetMaster();
|
Player* master = GetMaster();
|
||||||
// GuidVector nearestPlayers;
|
// GuidVector nearestPlayers;
|
||||||
|
|||||||
@ -49,7 +49,7 @@ class FindTankTargetSmartStrategy : public FindTargetStrategy
|
|||||||
public:
|
public:
|
||||||
FindTankTargetSmartStrategy(PlayerbotAI* botAI) : FindTargetStrategy(botAI) {}
|
FindTankTargetSmartStrategy(PlayerbotAI* botAI) : FindTargetStrategy(botAI) {}
|
||||||
|
|
||||||
void CheckAttacker(Unit* attacker, ThreatManager* threatMgr) override
|
void CheckAttacker(Unit* attacker, ThreatManager* /*threatMgr*/) override
|
||||||
{
|
{
|
||||||
if (Group* group = botAI->GetBot()->GetGroup())
|
if (Group* group = botAI->GetBot()->GetGroup())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -161,7 +161,7 @@ Unit* FindTargetValue::Calculate()
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FindBossTargetStrategy::CheckAttacker(Unit* attacker, ThreatManager* threatManager)
|
void FindBossTargetStrategy::CheckAttacker(Unit* attacker, ThreatManager* /*threatManager*/)
|
||||||
{
|
{
|
||||||
UnitAI* unitAI = attacker->GetAI();
|
UnitAI* unitAI = attacker->GetAI();
|
||||||
BossAI* bossAI = dynamic_cast<BossAI*>(unitAI);
|
BossAI* bossAI = dynamic_cast<BossAI*>(unitAI);
|
||||||
|
|||||||
@ -47,7 +47,7 @@ void GenericDKNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& trigger
|
|||||||
new TriggerNode("bone shield", { NextAction("bone shield", 21.0f) }));
|
new TriggerNode("bone shield", { NextAction("bone shield", 21.0f) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DKBuffDpsStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void DKBuffDpsStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -311,4 +311,4 @@ void CatDpsDruidStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CatAoeDruidStrategy::InitTriggers(std::vector<TriggerNode*>& triggers) {}
|
void CatAoeDruidStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/) {}
|
||||||
|
|||||||
@ -392,7 +392,7 @@ class CastExplosiveShotRank4Action : public CastExplosiveShotBaseAction
|
|||||||
public:
|
public:
|
||||||
CastExplosiveShotRank4Action(PlayerbotAI* botAI) :
|
CastExplosiveShotRank4Action(PlayerbotAI* botAI) :
|
||||||
CastExplosiveShotBaseAction(botAI) {}
|
CastExplosiveShotBaseAction(botAI) {}
|
||||||
bool Execute(Event event) override
|
bool Execute(Event /*event*/) override
|
||||||
{
|
{
|
||||||
return botAI->CastSpell(60053, GetTarget());
|
return botAI->CastSpell(60053, GetTarget());
|
||||||
}
|
}
|
||||||
@ -412,7 +412,7 @@ class CastExplosiveShotRank3Action : public CastExplosiveShotBaseAction
|
|||||||
public:
|
public:
|
||||||
CastExplosiveShotRank3Action(PlayerbotAI* botAI) :
|
CastExplosiveShotRank3Action(PlayerbotAI* botAI) :
|
||||||
CastExplosiveShotBaseAction(botAI) {}
|
CastExplosiveShotBaseAction(botAI) {}
|
||||||
bool Execute(Event event) override
|
bool Execute(Event /*event*/) override
|
||||||
{
|
{
|
||||||
return botAI->CastSpell(60052, GetTarget());
|
return botAI->CastSpell(60052, GetTarget());
|
||||||
}
|
}
|
||||||
@ -432,7 +432,7 @@ class CastExplosiveShotRank2Action : public CastExplosiveShotBaseAction
|
|||||||
public:
|
public:
|
||||||
CastExplosiveShotRank2Action(PlayerbotAI* botAI) :
|
CastExplosiveShotRank2Action(PlayerbotAI* botAI) :
|
||||||
CastExplosiveShotBaseAction(botAI) {}
|
CastExplosiveShotBaseAction(botAI) {}
|
||||||
bool Execute(Event event) override
|
bool Execute(Event /*event*/) override
|
||||||
{
|
{
|
||||||
return botAI->CastSpell(60051, GetTarget());
|
return botAI->CastSpell(60051, GetTarget());
|
||||||
}
|
}
|
||||||
@ -452,7 +452,7 @@ class CastExplosiveShotRank1Action : public CastExplosiveShotBaseAction
|
|||||||
public:
|
public:
|
||||||
CastExplosiveShotRank1Action(PlayerbotAI* botAI) :
|
CastExplosiveShotRank1Action(PlayerbotAI* botAI) :
|
||||||
CastExplosiveShotBaseAction(botAI) {}
|
CastExplosiveShotBaseAction(botAI) {}
|
||||||
bool Execute(Event event) override
|
bool Execute(Event /*event*/) override
|
||||||
{
|
{
|
||||||
return botAI->CastSpell(53301, GetTarget());
|
return botAI->CastSpell(53301, GetTarget());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,7 +54,7 @@ void PaladinCureStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
{ NextAction("cleanse magic on party", ACTION_DISPEL + 1) }));
|
{ NextAction("cleanse magic on party", ACTION_DISPEL + 1) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaladinBoostStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void PaladinBoostStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
|
|
||||||
// triggers.push_back(new TriggerNode("divine favor", { NextAction("divine favor",
|
// triggers.push_back(new TriggerNode("divine favor", { NextAction("divine favor",
|
||||||
|
|||||||
@ -124,12 +124,12 @@ void AoEWarlockStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WarlockBoostStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void WarlockBoostStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
// Placeholder for future boost triggers
|
// Placeholder for future boost triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
void WarlockPetStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void WarlockPetStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
// Placeholder for future pet triggers
|
// Placeholder for future pet triggers
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,6 +41,6 @@ std::vector<NextAction> TankWarlockStrategy::getDefaultActions()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TankWarlockStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
void TankWarlockStrategy::InitTriggers(std::vector<TriggerNode*>& /*triggers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* charge(PlayerbotAI* botAI)
|
static ActionNode* charge(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"charge",
|
"charge",
|
||||||
@ -31,7 +31,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* death_wish(PlayerbotAI* botAI)
|
static ActionNode* death_wish(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"death wish",
|
"death wish",
|
||||||
@ -41,7 +41,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* piercing_howl(PlayerbotAI* botAI)
|
static ActionNode* piercing_howl(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"piercing howl",
|
"piercing howl",
|
||||||
@ -51,7 +51,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* mocking_blow(PlayerbotAI* botAI)
|
static ActionNode* mocking_blow(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"mocking blow",
|
"mocking blow",
|
||||||
@ -61,7 +61,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* heroic_strike(PlayerbotAI* botAI)
|
static ActionNode* heroic_strike(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"heroic strike",
|
"heroic strike",
|
||||||
@ -71,7 +71,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* enraged_regeneration(PlayerbotAI* botAI)
|
static ActionNode* enraged_regeneration(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"enraged regeneration",
|
"enraged regeneration",
|
||||||
@ -81,7 +81,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* retaliation(PlayerbotAI* botAI)
|
static ActionNode* retaliation(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"retaliation",
|
"retaliation",
|
||||||
@ -91,7 +91,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* shattering_throw(PlayerbotAI* botAI)
|
static ActionNode* shattering_throw(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"shattering throw",
|
"shattering throw",
|
||||||
|
|||||||
@ -18,7 +18,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* charge(PlayerbotAI* botAI)
|
static ActionNode* charge(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"charge",
|
"charge",
|
||||||
@ -28,7 +28,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* intercept(PlayerbotAI* botAI)
|
static ActionNode* intercept(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"intercept",
|
"intercept",
|
||||||
@ -38,7 +38,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* piercing_howl(PlayerbotAI* botAI)
|
static ActionNode* piercing_howl(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"piercing howl",
|
"piercing howl",
|
||||||
@ -48,7 +48,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* pummel(PlayerbotAI* botAI)
|
static ActionNode* pummel(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"pummel",
|
"pummel",
|
||||||
@ -58,7 +58,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* enraged_regeneration(PlayerbotAI* botAI)
|
static ActionNode* enraged_regeneration(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"enraged regeneration",
|
"enraged regeneration",
|
||||||
|
|||||||
@ -24,7 +24,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ActionNode* heroic_throw_taunt(PlayerbotAI* botAI)
|
static ActionNode* heroic_throw_taunt(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"heroic throw",
|
"heroic throw",
|
||||||
@ -34,7 +34,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* heroic_throw_on_snare_target(PlayerbotAI* botAI)
|
static ActionNode* heroic_throw_on_snare_target(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"heroic throw on snare target",
|
"heroic throw on snare target",
|
||||||
@ -44,7 +44,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* last_stand(PlayerbotAI* botAI)
|
static ActionNode* last_stand(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"last stand",
|
"last stand",
|
||||||
@ -54,7 +54,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* devastate(PlayerbotAI* botAI)
|
static ActionNode* devastate(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"devastate",
|
"devastate",
|
||||||
@ -64,7 +64,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* commanding_shout(PlayerbotAI* botAI)
|
static ActionNode* commanding_shout(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"commanding shout",
|
"commanding shout",
|
||||||
@ -74,7 +74,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* sunder_armor(PlayerbotAI* botAI)
|
static ActionNode* sunder_armor(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"sunder armor",
|
"sunder armor",
|
||||||
@ -84,7 +84,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* charge(PlayerbotAI* botAI)
|
static ActionNode* charge(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"charge",
|
"charge",
|
||||||
@ -94,7 +94,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* taunt(PlayerbotAI* botAI)
|
static ActionNode* taunt(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"taunt",
|
"taunt",
|
||||||
@ -104,7 +104,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* vigilance(PlayerbotAI* botAI)
|
static ActionNode* vigilance(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"vigilance",
|
"vigilance",
|
||||||
@ -114,7 +114,7 @@ private:
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ActionNode* enraged_regeneration(PlayerbotAI* botAI)
|
static ActionNode* enraged_regeneration(PlayerbotAI* /*botAI*/)
|
||||||
{
|
{
|
||||||
return new ActionNode(
|
return new ActionNode(
|
||||||
"enraged regeneration",
|
"enraged regeneration",
|
||||||
|
|||||||
@ -134,7 +134,7 @@ bool IckAndKrickAction::PoisonNova(bool poisonNova, Unit* boss)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IckAndKrickAction::ExplosiveBarrage(bool explosiveBarrage, Unit* boss)
|
bool IckAndKrickAction::ExplosiveBarrage(bool /*explosiveBarrage*/, Unit* boss)
|
||||||
{
|
{
|
||||||
std::vector<Unit*> orbs;
|
std::vector<Unit*> orbs;
|
||||||
Unit* closestOrb = nullptr;
|
Unit* closestOrb = nullptr;
|
||||||
|
|||||||
@ -27,7 +27,7 @@ float IckAndKrickMultiplier::GetValue(Action* action)
|
|||||||
return 1.0f;
|
return 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
float GarfrostMultiplier::GetValue(Action* action)
|
float GarfrostMultiplier::GetValue(Action* /*action*/)
|
||||||
{
|
{
|
||||||
Unit* boss = AI_VALUE2(Unit*, "find target", "garfrost");
|
Unit* boss = AI_VALUE2(Unit*, "find target", "garfrost");
|
||||||
if (!boss)
|
if (!boss)
|
||||||
|
|||||||
@ -15,6 +15,6 @@ void WotlkDungeonToCStrategy::InitTriggers(std::vector<TriggerNode*> &triggers)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WotlkDungeonToCStrategy::InitMultipliers(std::vector<Multiplier*> &multipliers)
|
void WotlkDungeonToCStrategy::InitMultipliers(std::vector<Multiplier*> &/*multipliers*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,7 +57,7 @@ float HighKingMaulgarDisableArcaneShotOnKroshMultiplier::GetValue(Action* action
|
|||||||
|
|
||||||
float HighKingMaulgarDisableMageTankAOEMultiplier::GetValue(Action* action)
|
float HighKingMaulgarDisableMageTankAOEMultiplier::GetValue(Action* action)
|
||||||
{
|
{
|
||||||
if (IsKroshMageTank(botAI, bot) &&
|
if (IsKroshMageTank(bot) &&
|
||||||
(dynamic_cast<CastFrostNovaAction*>(action) || dynamic_cast<CastBlizzardAction*>(action) ||
|
(dynamic_cast<CastFrostNovaAction*>(action) || dynamic_cast<CastBlizzardAction*>(action) ||
|
||||||
dynamic_cast<CastConeOfColdAction*>(action) || dynamic_cast<CastFlamestrikeAction*>(action) ||
|
dynamic_cast<CastConeOfColdAction*>(action) || dynamic_cast<CastFlamestrikeAction*>(action) ||
|
||||||
dynamic_cast<CastDragonsBreathAction*>(action) || dynamic_cast<CastBlastWaveAction*>(action)))
|
dynamic_cast<CastDragonsBreathAction*>(action) || dynamic_cast<CastBlastWaveAction*>(action)))
|
||||||
|
|||||||
@ -31,14 +31,14 @@ bool HighKingMaulgarIsMageTankTrigger::IsActive()
|
|||||||
{
|
{
|
||||||
Unit* krosh = AI_VALUE2(Unit*, "find target", "krosh firehand");
|
Unit* krosh = AI_VALUE2(Unit*, "find target", "krosh firehand");
|
||||||
|
|
||||||
return IsKroshMageTank(botAI, bot) && krosh;
|
return IsKroshMageTank(bot) && krosh;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HighKingMaulgarIsMoonkinTankTrigger::IsActive()
|
bool HighKingMaulgarIsMoonkinTankTrigger::IsActive()
|
||||||
{
|
{
|
||||||
Unit* kiggler = AI_VALUE2(Unit*, "find target", "kiggler the crazed");
|
Unit* kiggler = AI_VALUE2(Unit*, "find target", "kiggler the crazed");
|
||||||
|
|
||||||
return IsKigglerMoonkinTank(botAI, bot) && kiggler;
|
return IsKigglerMoonkinTank(bot) && kiggler;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HighKingMaulgarDeterminingKillOrderTrigger::IsActive()
|
bool HighKingMaulgarDeterminingKillOrderTrigger::IsActive()
|
||||||
@ -53,8 +53,8 @@ bool HighKingMaulgarDeterminingKillOrderTrigger::IsActive()
|
|||||||
!(botAI->IsMainTank(bot) && maulgar) &&
|
!(botAI->IsMainTank(bot) && maulgar) &&
|
||||||
!(botAI->IsAssistTankOfIndex(bot, 0, false) && olm) &&
|
!(botAI->IsAssistTankOfIndex(bot, 0, false) && olm) &&
|
||||||
!(botAI->IsAssistTankOfIndex(bot, 1, false) && blindeye) &&
|
!(botAI->IsAssistTankOfIndex(bot, 1, false) && blindeye) &&
|
||||||
!(IsKroshMageTank(botAI, bot) && krosh) &&
|
!(IsKroshMageTank(bot) && krosh) &&
|
||||||
!(IsKigglerMoonkinTank(botAI, bot) && kiggler);
|
!(IsKigglerMoonkinTank(bot) && kiggler);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HighKingMaulgarHealerInDangerTrigger::IsActive()
|
bool HighKingMaulgarHealerInDangerTrigger::IsActive()
|
||||||
|
|||||||
@ -39,7 +39,7 @@ namespace GruulsLairHelpers
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsKroshMageTank(PlayerbotAI* botAI, Player* bot)
|
bool IsKroshMageTank(Player* bot)
|
||||||
{
|
{
|
||||||
Group* group = bot->GetGroup();
|
Group* group = bot->GetGroup();
|
||||||
if (!group)
|
if (!group)
|
||||||
@ -79,7 +79,7 @@ namespace GruulsLairHelpers
|
|||||||
return highestHpMage == bot;
|
return highestHpMage == bot;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsKigglerMoonkinTank(PlayerbotAI* botAI, Player* bot)
|
bool IsKigglerMoonkinTank(Player* bot)
|
||||||
{
|
{
|
||||||
Group* group = bot->GetGroup();
|
Group* group = bot->GetGroup();
|
||||||
if (!group)
|
if (!group)
|
||||||
|
|||||||
@ -29,8 +29,8 @@ namespace GruulsLairHelpers
|
|||||||
constexpr uint32 GRUULS_LAIR_MAP_ID = 565;
|
constexpr uint32 GRUULS_LAIR_MAP_ID = 565;
|
||||||
|
|
||||||
bool IsAnyOgreBossAlive(PlayerbotAI* botAI);
|
bool IsAnyOgreBossAlive(PlayerbotAI* botAI);
|
||||||
bool IsKroshMageTank(PlayerbotAI* botAI, Player* bot);
|
bool IsKroshMageTank(Player* bot);
|
||||||
bool IsKigglerMoonkinTank(PlayerbotAI* botAI, Player* bot);
|
bool IsKigglerMoonkinTank(Player* bot);
|
||||||
bool IsPositionSafe(PlayerbotAI* botAI, Player* bot, Position pos);
|
bool IsPositionSafe(PlayerbotAI* botAI, Player* bot, Position pos);
|
||||||
bool TryGetNewSafePosition(PlayerbotAI* botAI, Player* bot, Position& outPos);
|
bool TryGetNewSafePosition(PlayerbotAI* botAI, Player* bot, Position& outPos);
|
||||||
|
|
||||||
|
|||||||
@ -1998,10 +1998,10 @@ bool IccRotfaceGroupPositionAction::PositionRangedAndHealers(Unit* boss,Unit *sm
|
|||||||
if (!isHeroic)
|
if (!isHeroic)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return FindAndMoveFromClosestMember(boss, smallOoze);
|
return FindAndMoveFromClosestMember(smallOoze);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IccRotfaceGroupPositionAction::FindAndMoveFromClosestMember(Unit* boss, Unit* smallOoze)
|
bool IccRotfaceGroupPositionAction::FindAndMoveFromClosestMember(Unit* smallOoze)
|
||||||
{
|
{
|
||||||
|
|
||||||
const GuidVector npcs = AI_VALUE(GuidVector, "nearest hostile npcs");
|
const GuidVector npcs = AI_VALUE(GuidVector, "nearest hostile npcs");
|
||||||
@ -6925,7 +6925,7 @@ bool IccLichKingWinterAction::Execute(Event /*event*/)
|
|||||||
isVictim = true;
|
isVictim = true;
|
||||||
|
|
||||||
// First priority: Get out of Defile if we're in one
|
// First priority: Get out of Defile if we're in one
|
||||||
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), 3.0f))
|
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), 3.0f))
|
||||||
{
|
{
|
||||||
// Find nearest safe position (use tank position as fallback)
|
// Find nearest safe position (use tank position as fallback)
|
||||||
const Position* safePos = botAI->IsTank(bot) ? GetMainTankPosition() : GetMainTankRangedPosition();
|
const Position* safePos = botAI->IsTank(bot) ? GetMainTankPosition() : GetMainTankRangedPosition();
|
||||||
@ -7124,7 +7124,7 @@ const Position* IccLichKingWinterAction::GetMainTankRangedPosition()
|
|||||||
return &ICC_LK_FROSTR3_POSITION;
|
return &ICC_LK_FROSTR3_POSITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IccLichKingWinterAction::IsPositionSafeFromDefile(float x, float y, float z, float minSafeDistance)
|
bool IccLichKingWinterAction::IsPositionSafeFromDefile(float x, float y, float minSafeDistance)
|
||||||
{
|
{
|
||||||
Unit* boss = AI_VALUE2(Unit*, "find target", "the lich king");
|
Unit* boss = AI_VALUE2(Unit*, "find target", "the lich king");
|
||||||
if (!boss)
|
if (!boss)
|
||||||
@ -7190,7 +7190,7 @@ bool IccLichKingWinterAction::TryMoveToPosition(float targetX, float targetY, fl
|
|||||||
dy /= distance;
|
dy /= distance;
|
||||||
|
|
||||||
// First check if direct path is safe
|
// First check if direct path is safe
|
||||||
if (bot->IsWithinLOS(targetX, targetY, targetZ) && IsPositionSafeFromDefile(targetX, targetY, targetZ, 3.0f))
|
if (bot->IsWithinLOS(targetX, targetY, targetZ) && IsPositionSafeFromDefile(targetX, targetY, 3.0f))
|
||||||
{
|
{
|
||||||
if (isForced)
|
if (isForced)
|
||||||
botAI->Reset();
|
botAI->Reset();
|
||||||
@ -7221,7 +7221,7 @@ bool IccLichKingWinterAction::TryMoveToPosition(float targetX, float targetY, fl
|
|||||||
float testY = currentY + dy * attemptDistance + offsetY * direction;
|
float testY = currentY + dy * attemptDistance + offsetY * direction;
|
||||||
float testZ = targetZ;
|
float testZ = targetZ;
|
||||||
|
|
||||||
if (bot->IsWithinLOS(testX, testY, testZ) && IsPositionSafeFromDefile(testX, testY, testZ, 3.0f))
|
if (bot->IsWithinLOS(testX, testY, testZ) && IsPositionSafeFromDefile(testX, testY, 3.0f))
|
||||||
{
|
{
|
||||||
if (isForced)
|
if (isForced)
|
||||||
botAI->Reset();
|
botAI->Reset();
|
||||||
@ -7271,7 +7271,7 @@ void IccLichKingWinterAction::HandleTankPositioning()
|
|||||||
const Position* targetPos = GetMainTankPosition();
|
const Position* targetPos = GetMainTankPosition();
|
||||||
|
|
||||||
// First check if current position is safe
|
// First check if current position is safe
|
||||||
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), 3.0f))
|
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), 3.0f))
|
||||||
{
|
{
|
||||||
// If in defile, prioritize getting out
|
// If in defile, prioritize getting out
|
||||||
TryMoveToPosition(targetPos->GetPositionX(), targetPos->GetPositionY(), 840.857f, true);
|
TryMoveToPosition(targetPos->GetPositionX(), targetPos->GetPositionY(), 840.857f, true);
|
||||||
@ -7295,7 +7295,7 @@ void IccLichKingWinterAction::HandleTankPositioning()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Once in position, handle add management from tank position
|
// Once in position, handle add management from tank position
|
||||||
HandleMainTankAddManagement(boss, targetPos);
|
HandleMainTankAddManagement(targetPos);
|
||||||
}
|
}
|
||||||
// ASSIST TANK: More flexible positioning based on add collection
|
// ASSIST TANK: More flexible positioning based on add collection
|
||||||
else if (botAI->IsAssistTank(bot))
|
else if (botAI->IsAssistTank(bot))
|
||||||
@ -7312,7 +7312,7 @@ void IccLichKingWinterAction::HandleTankPositioning()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle assist tank add collection and positioning
|
// Handle assist tank add collection and positioning
|
||||||
HandleAssistTankAddManagement(boss, targetPos);
|
HandleAssistTankAddManagement(targetPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7405,7 +7405,7 @@ void IccLichKingWinterAction::HandleRangedPositioning()
|
|||||||
const Position* targetPos = GetMainTankRangedPosition();
|
const Position* targetPos = GetMainTankRangedPosition();
|
||||||
|
|
||||||
// First check if current position is safe
|
// First check if current position is safe
|
||||||
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), 3.0f))
|
if (!IsPositionSafeFromDefile(bot->GetPositionX(), bot->GetPositionY(), 3.0f))
|
||||||
{
|
{
|
||||||
// If in defile, prioritize getting out
|
// If in defile, prioritize getting out
|
||||||
TryMoveToPosition(targetPos->GetPositionX(), targetPos->GetPositionY(), 840.857f, true);
|
TryMoveToPosition(targetPos->GetPositionX(), targetPos->GetPositionY(), 840.857f, true);
|
||||||
@ -7484,7 +7484,7 @@ void IccLichKingWinterAction::HandleRangedPositioning()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IccLichKingWinterAction::HandleMainTankAddManagement(Unit* boss, const Position* tankPos)
|
void IccLichKingWinterAction::HandleMainTankAddManagement(const Position* tankPos)
|
||||||
{
|
{
|
||||||
if (!botAI->IsMainTank(bot))
|
if (!botAI->IsMainTank(bot))
|
||||||
return;
|
return;
|
||||||
@ -7607,7 +7607,7 @@ void IccLichKingWinterAction::HandleMainTankAddManagement(Unit* boss, const Posi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IccLichKingWinterAction::HandleAssistTankAddManagement(Unit* boss, const Position* tankPos)
|
void IccLichKingWinterAction::HandleAssistTankAddManagement(const Position* tankPos)
|
||||||
{
|
{
|
||||||
if (!botAI->IsAssistTank(bot))
|
if (!botAI->IsAssistTank(bot))
|
||||||
return;
|
return;
|
||||||
@ -7812,7 +7812,7 @@ bool IccLichKingAddsAction::Execute(Event /*event*/)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Handle shambling horror interactions
|
// Handle shambling horror interactions
|
||||||
HandleShamblingHorrors(boss, hasPlague);
|
HandleShamblingHorrors();
|
||||||
|
|
||||||
// Handle assist tank add management
|
// Handle assist tank add management
|
||||||
if (HandleAssistTankAddManagement(boss, diff))
|
if (HandleAssistTankAddManagement(boss, diff))
|
||||||
@ -8251,7 +8251,7 @@ bool IccLichKingAddsAction::HandleQuakeMechanics(Unit* boss)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IccLichKingAddsAction::HandleShamblingHorrors(Unit* boss, bool hasPlague)
|
void IccLichKingAddsAction::HandleShamblingHorrors()
|
||||||
{
|
{
|
||||||
// Find closest shambling horror
|
// Find closest shambling horror
|
||||||
GuidVector npcs2 = AI_VALUE(GuidVector, "nearest hostile npcs");
|
GuidVector npcs2 = AI_VALUE(GuidVector, "nearest hostile npcs");
|
||||||
|
|||||||
@ -286,7 +286,7 @@ public:
|
|||||||
bool HandleOozeTargeting();
|
bool HandleOozeTargeting();
|
||||||
bool HandleOozeMemberPositioning();
|
bool HandleOozeMemberPositioning();
|
||||||
bool PositionRangedAndHealers(Unit* boss,Unit* smallOoze);
|
bool PositionRangedAndHealers(Unit* boss,Unit* smallOoze);
|
||||||
bool FindAndMoveFromClosestMember(Unit* boss, Unit* smallOoze);
|
bool FindAndMoveFromClosestMember(Unit* smallOoze);
|
||||||
};
|
};
|
||||||
|
|
||||||
class IccRotfaceMoveAwayFromExplosionAction : public MovementAction
|
class IccRotfaceMoveAwayFromExplosionAction : public MovementAction
|
||||||
@ -623,12 +623,12 @@ class IccLichKingWinterAction : public AttackAction
|
|||||||
|
|
||||||
void HandlePositionCorrection();
|
void HandlePositionCorrection();
|
||||||
bool IsValidCollectibleAdd(Unit* unit);
|
bool IsValidCollectibleAdd(Unit* unit);
|
||||||
bool IsPositionSafeFromDefile(float x, float y, float z, float minSafeDistance);
|
bool IsPositionSafeFromDefile(float x, float y, float minSafeDistance);
|
||||||
void HandleTankPositioning();
|
void HandleTankPositioning();
|
||||||
void HandleMeleePositioning();
|
void HandleMeleePositioning();
|
||||||
void HandleRangedPositioning();
|
void HandleRangedPositioning();
|
||||||
void HandleMainTankAddManagement(Unit* boss, const Position* tankPos);
|
void HandleMainTankAddManagement(const Position* tankPos);
|
||||||
void HandleAssistTankAddManagement(Unit* boss, const Position* tankPos);
|
void HandleAssistTankAddManagement(const Position* tankPos);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Position* GetMainTankPosition();
|
const Position* GetMainTankPosition();
|
||||||
@ -648,7 +648,7 @@ class IccLichKingAddsAction : public AttackAction
|
|||||||
void HandleHeroicNonTankPositioning(Difficulty diff, Unit* terenasMenethilHC);
|
void HandleHeroicNonTankPositioning(Difficulty diff, Unit* terenasMenethilHC);
|
||||||
void HandleSpiritMarkingAndTargeting(Difficulty diff, Unit* terenasMenethilHC);
|
void HandleSpiritMarkingAndTargeting(Difficulty diff, Unit* terenasMenethilHC);
|
||||||
bool HandleQuakeMechanics(Unit* boss);
|
bool HandleQuakeMechanics(Unit* boss);
|
||||||
void HandleShamblingHorrors(Unit* boss, bool hasPlague);
|
void HandleShamblingHorrors();
|
||||||
bool HandleAssistTankAddManagement(Unit* boss, Difficulty diff);
|
bool HandleAssistTankAddManagement(Unit* boss, Difficulty diff);
|
||||||
void HandleMeleePositioning(Unit* boss, bool hasPlague, Difficulty diff);
|
void HandleMeleePositioning(Unit* boss, bool hasPlague, Difficulty diff);
|
||||||
void HandleMainTankTargeting(Unit* boss, Difficulty diff);
|
void HandleMainTankTargeting(Unit* boss, Difficulty diff);
|
||||||
|
|||||||
@ -559,7 +559,7 @@ bool IccBqlVampiricBiteTrigger::IsActive()
|
|||||||
bool IccValkyreSpearTrigger::IsActive()
|
bool IccValkyreSpearTrigger::IsActive()
|
||||||
{
|
{
|
||||||
// Check if there's a spear nearby
|
// Check if there's a spear nearby
|
||||||
if (Creature* spear = bot->FindNearestCreature(NPC_SPEAR, 100.0f))
|
if (bot->FindNearestCreature(NPC_SPEAR, 100.0f))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -744,7 +744,7 @@ bool NetherspiteBlockBlueBeamAction::Execute(Event /*event*/)
|
|||||||
float candidateX = bx + dx * dist;
|
float candidateX = bx + dx * dist;
|
||||||
float candidateY = by + dy * dist;
|
float candidateY = by + dy * dist;
|
||||||
float candidateZ = bz;
|
float candidateZ = bz;
|
||||||
if (!IsSafePosition(candidateX, candidateY, candidateZ, voidZones, 4.0f))
|
if (!IsSafePosition(candidateX, candidateY, voidZones, 4.0f))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
float distToIdeal = fabs(dist - idealDistance);
|
float distToIdeal = fabs(dist - idealDistance);
|
||||||
@ -836,7 +836,7 @@ bool NetherspiteBlockGreenBeamAction::Execute(Event /*event*/)
|
|||||||
float candidateX = bx + dx * dist;
|
float candidateX = bx + dx * dist;
|
||||||
float candidateY = by + dy * dist;
|
float candidateY = by + dy * dist;
|
||||||
float candidateZ = bz;
|
float candidateZ = bz;
|
||||||
if (!IsSafePosition(candidateX, candidateY, candidateZ, voidZones, 4.0f))
|
if (!IsSafePosition(candidateX, candidateY, voidZones, 4.0f))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
float distToIdeal = fabs(dist - 18.0f);
|
float distToIdeal = fabs(dist - 18.0f);
|
||||||
@ -873,7 +873,7 @@ bool NetherspiteAvoidBeamAndVoidZoneAction::Execute(Event /*event*/)
|
|||||||
std::vector<Unit*> voidZones = GetAllVoidZones(botAI, bot);
|
std::vector<Unit*> voidZones = GetAllVoidZones(botAI, bot);
|
||||||
|
|
||||||
bool nearVoidZone = !IsSafePosition(bot->GetPositionX(), bot->GetPositionY(),
|
bool nearVoidZone = !IsSafePosition(bot->GetPositionX(), bot->GetPositionY(),
|
||||||
bot->GetPositionZ(), voidZones, 4.0f);
|
voidZones, 4.0f);
|
||||||
|
|
||||||
std::vector<BeamAvoid> beams;
|
std::vector<BeamAvoid> beams;
|
||||||
Unit* redPortal = bot->FindNearestCreature(NPC_RED_PORTAL, 150.0f);
|
Unit* redPortal = bot->FindNearestCreature(NPC_RED_PORTAL, 150.0f);
|
||||||
@ -922,7 +922,7 @@ bool NetherspiteAvoidBeamAndVoidZoneAction::Execute(Event /*event*/)
|
|||||||
float cy = botY + std::sin(angle) * dist;
|
float cy = botY + std::sin(angle) * dist;
|
||||||
float cz = netherspiteZ;
|
float cz = netherspiteZ;
|
||||||
|
|
||||||
if (!IsSafePosition(cx, cy, cz, voidZones, 4.0f) ||
|
if (!IsSafePosition(cx, cy, voidZones, 4.0f) ||
|
||||||
!IsAwayFromBeams(cx, cy, beams, netherspite))
|
!IsAwayFromBeams(cx, cy, beams, netherspite))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -272,7 +272,7 @@ namespace KarazhanHelpers
|
|||||||
return voidZones;
|
return voidZones;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsSafePosition(float x, float y, float z, const std::vector<Unit*>& hazards, float hazardRadius)
|
bool IsSafePosition(float x, float y, const std::vector<Unit*>& hazards, float hazardRadius)
|
||||||
{
|
{
|
||||||
for (Unit* hazard : hazards)
|
for (Unit* hazard : hazards)
|
||||||
{
|
{
|
||||||
@ -351,7 +351,7 @@ namespace KarazhanHelpers
|
|||||||
destX, destY, destZ, true))
|
destX, destY, destZ, true))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!IsSafePosition(destX, destY, destZ, hazards, safeDistance))
|
if (!IsSafePosition(destX, destY, hazards, safeDistance))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (requireSafePath)
|
if (requireSafePath)
|
||||||
|
|||||||
@ -116,7 +116,7 @@ namespace KarazhanHelpers
|
|||||||
std::vector<Player*> GetGreenBlockers(PlayerbotAI* botAI, Player* bot);
|
std::vector<Player*> GetGreenBlockers(PlayerbotAI* botAI, Player* bot);
|
||||||
std::tuple<Player*, Player*, Player*> GetCurrentBeamBlockers(PlayerbotAI* botAI, Player* bot);
|
std::tuple<Player*, Player*, Player*> GetCurrentBeamBlockers(PlayerbotAI* botAI, Player* bot);
|
||||||
std::vector<Unit*> GetAllVoidZones(PlayerbotAI *botAI, Player* bot);
|
std::vector<Unit*> GetAllVoidZones(PlayerbotAI *botAI, Player* bot);
|
||||||
bool IsSafePosition (float x, float y, float z, const std::vector<Unit*>& hazards, float hazardRadius);
|
bool IsSafePosition (float x, float y, const std::vector<Unit*>& hazards, float hazardRadius);
|
||||||
std::vector<Unit*> GetSpawnedInfernals(PlayerbotAI* botAI);
|
std::vector<Unit*> GetSpawnedInfernals(PlayerbotAI* botAI);
|
||||||
bool IsStraightPathSafe(
|
bool IsStraightPathSafe(
|
||||||
const Position& start, const Position& target,
|
const Position& start, const Position& target,
|
||||||
|
|||||||
@ -499,7 +499,7 @@ bool MagtheridonUseManticronCubeAction::Execute(Event /*event*/)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Release cubes after Blast Nova is interrupted
|
// Release cubes after Blast Nova is interrupted
|
||||||
if (HandleCubeRelease(magtheridon, cube))
|
if (HandleCubeRelease(magtheridon))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Check if cube logic should be active (49+ second rule)
|
// Check if cube logic should be active (49+ second rule)
|
||||||
@ -520,7 +520,7 @@ bool MagtheridonUseManticronCubeAction::Execute(Event /*event*/)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MagtheridonUseManticronCubeAction::HandleCubeRelease(Unit* magtheridon, GameObject* cube)
|
bool MagtheridonUseManticronCubeAction::HandleCubeRelease(Unit* magtheridon)
|
||||||
{
|
{
|
||||||
if (bot->HasAura(SPELL_SHADOW_GRASP) &&
|
if (bot->HasAura(SPELL_SHADOW_GRASP) &&
|
||||||
!(magtheridon->HasUnitState(UNIT_STATE_CASTING) &&
|
!(magtheridon->HasUnitState(UNIT_STATE_CASTING) &&
|
||||||
|
|||||||
@ -81,7 +81,7 @@ public:
|
|||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool HandleCubeRelease(Unit* magtheridon, GameObject* cube);
|
bool HandleCubeRelease(Unit* magtheridon);
|
||||||
bool ShouldActivateCubeLogic(Unit* magtheridon);
|
bool ShouldActivateCubeLogic(Unit* magtheridon);
|
||||||
bool HandleWaitingPhase(const MagtheridonHelpers::CubeInfo& cubeInfo);
|
bool HandleWaitingPhase(const MagtheridonHelpers::CubeInfo& cubeInfo);
|
||||||
bool HandleCubeInteraction(const MagtheridonHelpers::CubeInfo& cubeInfo, GameObject* cube);
|
bool HandleCubeInteraction(const MagtheridonHelpers::CubeInfo& cubeInfo, GameObject* cube);
|
||||||
|
|||||||
@ -118,7 +118,7 @@ namespace MagtheridonHelpers
|
|||||||
std::unordered_map<uint32, time_t> spreadWaitTimer;
|
std::unordered_map<uint32, time_t> spreadWaitTimer;
|
||||||
std::unordered_map<uint32, time_t> dpsWaitTimer;
|
std::unordered_map<uint32, time_t> dpsWaitTimer;
|
||||||
|
|
||||||
bool IsSafeFromMagtheridonHazards(PlayerbotAI* botAI, Player* bot, float x, float y, float z)
|
bool IsSafeFromMagtheridonHazards(PlayerbotAI* botAI, Player* /*bot*/, float x, float y, float /*z*/)
|
||||||
{
|
{
|
||||||
// Debris
|
// Debris
|
||||||
std::vector<Unit*> debrisHazards;
|
std::vector<Unit*> debrisHazards;
|
||||||
|
|||||||
@ -24,7 +24,7 @@ void RaidOnyxiaStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
"ony whelps spawn", { NextAction("ony kill whelps", ACTION_RAID + 1) }));
|
"ony whelps spawn", { NextAction("ony kill whelps", ACTION_RAID + 1) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RaidOnyxiaStrategy::InitMultipliers(std::vector<Multiplier*>& multipliers)
|
void RaidOnyxiaStrategy::InitMultipliers(std::vector<Multiplier*>& /*multipliers*/)
|
||||||
{
|
{
|
||||||
// Empty for now
|
// Empty for now
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1466,16 +1466,16 @@ bool MorogrimTidewalkerMoveBossToTankPositionAction::Execute(Event /*event*/)
|
|||||||
if (tidewalker->GetVictim() == bot && bot->IsWithinMeleeRange(tidewalker))
|
if (tidewalker->GetVictim() == bot && bot->IsWithinMeleeRange(tidewalker))
|
||||||
{
|
{
|
||||||
if (tidewalker->GetHealthPct() > 26.0f)
|
if (tidewalker->GetHealthPct() > 26.0f)
|
||||||
return MoveToPhase1TankPosition(tidewalker);
|
return MoveToPhase1TankPosition();
|
||||||
else
|
else
|
||||||
return MoveToPhase2TankPosition(tidewalker);
|
return MoveToPhase2TankPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Phase 1: tank position is up against the Northeast pillar
|
// Phase 1: tank position is up against the Northeast pillar
|
||||||
bool MorogrimTidewalkerMoveBossToTankPositionAction::MoveToPhase1TankPosition(Unit* tidewalker)
|
bool MorogrimTidewalkerMoveBossToTankPositionAction::MoveToPhase1TankPosition()
|
||||||
{
|
{
|
||||||
const Position& phase1 = TIDEWALKER_PHASE_1_TANK_POSITION;
|
const Position& phase1 = TIDEWALKER_PHASE_1_TANK_POSITION;
|
||||||
float distToPhase1 = bot->GetExactDist2d(phase1.GetPositionX(), phase1.GetPositionY());
|
float distToPhase1 = bot->GetExactDist2d(phase1.GetPositionX(), phase1.GetPositionY());
|
||||||
@ -1495,7 +1495,7 @@ bool MorogrimTidewalkerMoveBossToTankPositionAction::MoveToPhase1TankPosition(Un
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Phase 2: move in two steps to get around the pillar and back up into the Northeast corner
|
// Phase 2: move in two steps to get around the pillar and back up into the Northeast corner
|
||||||
bool MorogrimTidewalkerMoveBossToTankPositionAction::MoveToPhase2TankPosition(Unit* tidewalker)
|
bool MorogrimTidewalkerMoveBossToTankPositionAction::MoveToPhase2TankPosition()
|
||||||
{
|
{
|
||||||
const Position& phase2 = TIDEWALKER_PHASE_2_TANK_POSITION;
|
const Position& phase2 = TIDEWALKER_PHASE_2_TANK_POSITION;
|
||||||
const Position& transition = TIDEWALKER_PHASE_TRANSITION_WAYPOINT;
|
const Position& transition = TIDEWALKER_PHASE_TRANSITION_WAYPOINT;
|
||||||
@ -2151,7 +2151,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
{
|
{
|
||||||
// Passer order: HealAssistantOfIndex 0, 1, 2, then RangedDpsAssistantOfIndex 0
|
// Passer order: HealAssistantOfIndex 0, 1, 2, then RangedDpsAssistantOfIndex 0
|
||||||
if (bot == firstCorePasser &&
|
if (bot == firstCorePasser &&
|
||||||
LineUpFirstCorePasser(designatedLooter, closestTrigger))
|
LineUpFirstCorePasser(designatedLooter))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2176,7 +2176,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
// Designated core looter logic
|
// Designated core looter logic
|
||||||
// Applicable only if cheat mode is on and thus looter is a bot
|
// Applicable only if cheat mode is on and thus looter is a bot
|
||||||
if (bot == designatedLooter &&
|
if (bot == designatedLooter &&
|
||||||
IsFirstCorePasserInPosition(designatedLooter, firstCorePasser, closestTrigger))
|
IsFirstCorePasserInPosition(firstCorePasser))
|
||||||
{
|
{
|
||||||
const time_t now = std::time(nullptr);
|
const time_t now = std::time(nullptr);
|
||||||
auto it = lastImbueAttempt.find(instanceId);
|
auto it = lastImbueAttempt.find(instanceId);
|
||||||
@ -2192,7 +2192,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
// First core passer: receive core from looter at the top of the stairs,
|
// First core passer: receive core from looter at the top of the stairs,
|
||||||
// pass to second core passer
|
// pass to second core passer
|
||||||
else if (bot == firstCorePasser &&
|
else if (bot == firstCorePasser &&
|
||||||
IsSecondCorePasserInPosition(firstCorePasser, secondCorePasser, closestTrigger))
|
IsSecondCorePasserInPosition(secondCorePasser))
|
||||||
{
|
{
|
||||||
const time_t now = std::time(nullptr);
|
const time_t now = std::time(nullptr);
|
||||||
auto it = lastImbueAttempt.find(instanceId);
|
auto it = lastImbueAttempt.find(instanceId);
|
||||||
@ -2209,7 +2209,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
// of the first passer, move to the generator; otherwise, move as close as
|
// of the first passer, move to the generator; otherwise, move as close as
|
||||||
// possible to the generator while staying in passing range
|
// possible to the generator while staying in passing range
|
||||||
else if (bot == secondCorePasser && !UseCoreOnNearestGenerator(instanceId) &&
|
else if (bot == secondCorePasser && !UseCoreOnNearestGenerator(instanceId) &&
|
||||||
IsThirdCorePasserInPosition(secondCorePasser, thirdCorePasser, closestTrigger))
|
IsThirdCorePasserInPosition(thirdCorePasser))
|
||||||
{
|
{
|
||||||
const time_t now = std::time(nullptr);
|
const time_t now = std::time(nullptr);
|
||||||
auto it = lastImbueAttempt.find(instanceId);
|
auto it = lastImbueAttempt.find(instanceId);
|
||||||
@ -2226,7 +2226,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
// of the second passer, move to the generator; otherwise, move as close as
|
// of the second passer, move to the generator; otherwise, move as close as
|
||||||
// possible to the generator while staying in passing range
|
// possible to the generator while staying in passing range
|
||||||
else if (bot == thirdCorePasser && !UseCoreOnNearestGenerator(instanceId) &&
|
else if (bot == thirdCorePasser && !UseCoreOnNearestGenerator(instanceId) &&
|
||||||
IsFourthCorePasserInPosition(thirdCorePasser, fourthCorePasser, closestTrigger))
|
IsFourthCorePasserInPosition(fourthCorePasser))
|
||||||
{
|
{
|
||||||
const time_t now = std::time(nullptr);
|
const time_t now = std::time(nullptr);
|
||||||
auto it = lastImbueAttempt.find(instanceId);
|
auto it = lastImbueAttempt.find(instanceId);
|
||||||
@ -2249,7 +2249,7 @@ bool LadyVashjPassTheTaintedCoreAction::Execute(Event /*event*/)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool LadyVashjPassTheTaintedCoreAction::LineUpFirstCorePasser(
|
bool LadyVashjPassTheTaintedCoreAction::LineUpFirstCorePasser(
|
||||||
Player* designatedLooter, Unit* closestTrigger)
|
Player* designatedLooter)
|
||||||
{
|
{
|
||||||
const float centerX = VASHJ_PLATFORM_CENTER_POSITION.GetPositionX();
|
const float centerX = VASHJ_PLATFORM_CENTER_POSITION.GetPositionX();
|
||||||
const float centerY = VASHJ_PLATFORM_CENTER_POSITION.GetPositionY();
|
const float centerY = VASHJ_PLATFORM_CENTER_POSITION.GetPositionY();
|
||||||
@ -2288,8 +2288,6 @@ bool LadyVashjPassTheTaintedCoreAction::LineUpSecondCorePasser(
|
|||||||
if (itFirst == intendedLineup.end())
|
if (itFirst == intendedLineup.end())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const Position& firstLineup = itFirst->second;
|
|
||||||
|
|
||||||
auto itSecond = intendedLineup.find(bot->GetGUID());
|
auto itSecond = intendedLineup.find(bot->GetGUID());
|
||||||
if (itSecond == intendedLineup.end())
|
if (itSecond == intendedLineup.end())
|
||||||
{
|
{
|
||||||
@ -2343,9 +2341,9 @@ bool LadyVashjPassTheTaintedCoreAction::LineUpThirdCorePasser(
|
|||||||
Player* secondCorePasser, Unit* closestTrigger)
|
Player* secondCorePasser, Unit* closestTrigger)
|
||||||
{
|
{
|
||||||
bool needThirdPasser =
|
bool needThirdPasser =
|
||||||
(IsFirstCorePasserInPosition(designatedLooter, firstCorePasser, closestTrigger) &&
|
(IsFirstCorePasserInPosition(firstCorePasser) &&
|
||||||
firstCorePasser->GetExactDist2d(closestTrigger) > 42.0f) ||
|
firstCorePasser->GetExactDist2d(closestTrigger) > 42.0f) ||
|
||||||
(IsSecondCorePasserInPosition(firstCorePasser, secondCorePasser, closestTrigger) &&
|
(IsSecondCorePasserInPosition(secondCorePasser) &&
|
||||||
secondCorePasser->GetExactDist2d(closestTrigger) > 4.0f);
|
secondCorePasser->GetExactDist2d(closestTrigger) > 4.0f);
|
||||||
|
|
||||||
if (!needThirdPasser)
|
if (!needThirdPasser)
|
||||||
@ -2408,9 +2406,9 @@ bool LadyVashjPassTheTaintedCoreAction::LineUpFourthCorePasser(
|
|||||||
Player* thirdCorePasser, Unit* closestTrigger)
|
Player* thirdCorePasser, Unit* closestTrigger)
|
||||||
{
|
{
|
||||||
bool needFourthPasser =
|
bool needFourthPasser =
|
||||||
(IsSecondCorePasserInPosition(firstCorePasser, secondCorePasser, closestTrigger) &&
|
(IsSecondCorePasserInPosition(secondCorePasser) &&
|
||||||
secondCorePasser->GetExactDist2d(closestTrigger) > 42.0f) ||
|
secondCorePasser->GetExactDist2d(closestTrigger) > 42.0f) ||
|
||||||
(IsThirdCorePasserInPosition(secondCorePasser, thirdCorePasser, closestTrigger) &&
|
(IsThirdCorePasserInPosition(thirdCorePasser) &&
|
||||||
thirdCorePasser->GetExactDist2d(closestTrigger) > 4.0f);
|
thirdCorePasser->GetExactDist2d(closestTrigger) > 4.0f);
|
||||||
|
|
||||||
if (!needFourthPasser)
|
if (!needFourthPasser)
|
||||||
@ -2460,8 +2458,7 @@ bool LadyVashjPassTheTaintedCoreAction::LineUpFourthCorePasser(
|
|||||||
|
|
||||||
// The next four functions check if the respective passer is <= 2 yards of their intended
|
// The next four functions check if the respective passer is <= 2 yards of their intended
|
||||||
// position and are used to determine when the prior bot in the chain can pass the core
|
// position and are used to determine when the prior bot in the chain can pass the core
|
||||||
bool LadyVashjPassTheTaintedCoreAction::IsFirstCorePasserInPosition(
|
bool LadyVashjPassTheTaintedCoreAction::IsFirstCorePasserInPosition(Player* firstCorePasser)
|
||||||
Player* designatedLooter, Player* firstCorePasser, Unit* closestTrigger)
|
|
||||||
{
|
{
|
||||||
auto itSnap = intendedLineup.find(firstCorePasser->GetGUID());
|
auto itSnap = intendedLineup.find(firstCorePasser->GetGUID());
|
||||||
if (itSnap != intendedLineup.end())
|
if (itSnap != intendedLineup.end())
|
||||||
@ -2474,8 +2471,7 @@ bool LadyVashjPassTheTaintedCoreAction::IsFirstCorePasserInPosition(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LadyVashjPassTheTaintedCoreAction::IsSecondCorePasserInPosition(
|
bool LadyVashjPassTheTaintedCoreAction::IsSecondCorePasserInPosition(Player* secondCorePasser)
|
||||||
Player* firstCorePasser, Player* secondCorePasser, Unit* closestTrigger)
|
|
||||||
{
|
{
|
||||||
auto itSnap = intendedLineup.find(secondCorePasser->GetGUID());
|
auto itSnap = intendedLineup.find(secondCorePasser->GetGUID());
|
||||||
if (itSnap != intendedLineup.end())
|
if (itSnap != intendedLineup.end())
|
||||||
@ -2488,8 +2484,7 @@ bool LadyVashjPassTheTaintedCoreAction::IsSecondCorePasserInPosition(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LadyVashjPassTheTaintedCoreAction::IsThirdCorePasserInPosition(
|
bool LadyVashjPassTheTaintedCoreAction::IsThirdCorePasserInPosition(Player* thirdCorePasser)
|
||||||
Player* secondCorePasser, Player* thirdCorePasser, Unit* closestTrigger)
|
|
||||||
{
|
{
|
||||||
auto itSnap = intendedLineup.find(thirdCorePasser->GetGUID());
|
auto itSnap = intendedLineup.find(thirdCorePasser->GetGUID());
|
||||||
if (itSnap != intendedLineup.end())
|
if (itSnap != intendedLineup.end())
|
||||||
@ -2502,8 +2497,7 @@ bool LadyVashjPassTheTaintedCoreAction::IsThirdCorePasserInPosition(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LadyVashjPassTheTaintedCoreAction::IsFourthCorePasserInPosition(
|
bool LadyVashjPassTheTaintedCoreAction::IsFourthCorePasserInPosition(Player* fourthCorePasser)
|
||||||
Player* thirdCorePasser, Player* fourthCorePasser, Unit* closestTrigger)
|
|
||||||
{
|
{
|
||||||
auto itSnap = intendedLineup.find(fourthCorePasser->GetGUID());
|
auto itSnap = intendedLineup.find(fourthCorePasser->GetGUID());
|
||||||
if (itSnap != intendedLineup.end())
|
if (itSnap != intendedLineup.end())
|
||||||
|
|||||||
@ -312,8 +312,8 @@ public:
|
|||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool MoveToPhase1TankPosition(Unit* tidewalker);
|
bool MoveToPhase1TankPosition();
|
||||||
bool MoveToPhase2TankPosition(Unit* tidewalker);
|
bool MoveToPhase2TankPosition();
|
||||||
};
|
};
|
||||||
|
|
||||||
class MorogrimTidewalkerPhase2RepositionRangedAction : public MovementAction
|
class MorogrimTidewalkerPhase2RepositionRangedAction : public MovementAction
|
||||||
@ -414,14 +414,14 @@ public:
|
|||||||
bool Execute(Event event) override;
|
bool Execute(Event event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool LineUpFirstCorePasser(Player* designatedLooter, Unit* closestTrigger);
|
bool LineUpFirstCorePasser(Player* designatedLooter);
|
||||||
bool LineUpSecondCorePasser(Player* firstCorePasser, Unit* closestTrigger);
|
bool LineUpSecondCorePasser(Player* firstCorePasser, Unit* closestTrigger);
|
||||||
bool LineUpThirdCorePasser(Player* designatedLooter, Player* firstCorePasser, Player* secondCorePasser, Unit* closestTrigger);
|
bool LineUpThirdCorePasser(Player* designatedLooter, Player* firstCorePasser, Player* secondCorePasser, Unit* closestTrigger);
|
||||||
bool LineUpFourthCorePasser(Player* firstCorePasser, Player* secondCorePasser, Player* thirdCorePasser, Unit* closestTrigger);
|
bool LineUpFourthCorePasser(Player* firstCorePasser, Player* secondCorePasser, Player* thirdCorePasser, Unit* closestTrigger);
|
||||||
bool IsFirstCorePasserInPosition(Player* designatedLooter, Player* firstCorePasser, Unit* closestTrigger);
|
bool IsFirstCorePasserInPosition(Player* firstCorePasser);
|
||||||
bool IsSecondCorePasserInPosition(Player* firstCorePasser, Player* secondCorePasser, Unit* closestTrigger);
|
bool IsSecondCorePasserInPosition(Player* secondCorePasser);
|
||||||
bool IsThirdCorePasserInPosition(Player* secondCorePasser, Player* thirdCorePasser, Unit* closestTrigger);
|
bool IsThirdCorePasserInPosition(Player* thirdCorePasser);
|
||||||
bool IsFourthCorePasserInPosition(Player* thirdCorePasser, Player* fourthCorePasser, Unit* closestTrigger);
|
bool IsFourthCorePasserInPosition(Player* fourthCorePasser);
|
||||||
void ScheduleTransferCoreAfterImbue(PlayerbotAI* botAI, Player* giver, Player* receiver);
|
void ScheduleTransferCoreAfterImbue(PlayerbotAI* botAI, Player* giver, Player* receiver);
|
||||||
bool UseCoreOnNearestGenerator(const uint32 instanceId);
|
bool UseCoreOnNearestGenerator(const uint32 instanceId);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -690,13 +690,11 @@ float LadyVashjCorePassersPrioritizePositioningMultiplier::GetValue(Action* acti
|
|||||||
auto coreHandlers = GetCoreHandlers(botAI, bot);
|
auto coreHandlers = GetCoreHandlers(botAI, bot);
|
||||||
|
|
||||||
bool isCoreHandler = false;
|
bool isCoreHandler = false;
|
||||||
int myIndex = -1;
|
|
||||||
for (int i = 0; i < static_cast<int>(coreHandlers.size()); ++i)
|
for (int i = 0; i < static_cast<int>(coreHandlers.size()); ++i)
|
||||||
{
|
{
|
||||||
if (coreHandlers[i] && coreHandlers[i] == bot)
|
if (coreHandlers[i] && coreHandlers[i] == bot)
|
||||||
{
|
{
|
||||||
isCoreHandler = true;
|
isCoreHandler = true;
|
||||||
myIndex = i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isCoreHandler)
|
if (!isCoreHandler)
|
||||||
|
|||||||
@ -213,7 +213,7 @@ bool AlarAssistTanksPickUpEmbersAction::Execute(Event /*event*/)
|
|||||||
if (!isAlarInPhase2[alar->GetMap()->GetInstanceId()])
|
if (!isAlarInPhase2[alar->GetMap()->GetInstanceId()])
|
||||||
return HandlePhase1Embers(alar);
|
return HandlePhase1Embers(alar);
|
||||||
else
|
else
|
||||||
return HandlePhase2Embers(alar);
|
return HandlePhase2Embers();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Embers will be tanked by only the second assist tank in Phase 1
|
// Embers will be tanked by only the second assist tank in Phase 1
|
||||||
@ -275,7 +275,7 @@ bool AlarAssistTanksPickUpEmbersAction::HandlePhase1Embers(Unit* alar)
|
|||||||
|
|
||||||
// One Ember will be tanked by the second assist tank in Phase 2, and the other by
|
// One Ember will be tanked by the second assist tank in Phase 2, and the other by
|
||||||
// the main tank or first assist tank (whichever is not tanking Al'ar)
|
// the main tank or first assist tank (whichever is not tanking Al'ar)
|
||||||
bool AlarAssistTanksPickUpEmbersAction::HandlePhase2Embers(Unit* alar)
|
bool AlarAssistTanksPickUpEmbersAction::HandlePhase2Embers()
|
||||||
{
|
{
|
||||||
auto [firstEmber, secondEmber] = GetFirstTwoEmbersOfAlar(botAI);
|
auto [firstEmber, secondEmber] = GetFirstTwoEmbersOfAlar(botAI);
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool HandlePhase1Embers(Unit* alar);
|
bool HandlePhase1Embers(Unit* alar);
|
||||||
bool HandlePhase2Embers(Unit* alar);
|
bool HandlePhase2Embers();
|
||||||
};
|
};
|
||||||
|
|
||||||
class AlarRangedDpsPrioritizeEmbersAction : public AttackAction
|
class AlarRangedDpsPrioritizeEmbersAction : public AttackAction
|
||||||
|
|||||||
@ -2332,7 +2332,6 @@ bool MimironRocketStrikeAction::isUseful()
|
|||||||
|
|
||||||
bool MimironRocketStrikeAction::Execute(Event /*event*/)
|
bool MimironRocketStrikeAction::Execute(Event /*event*/)
|
||||||
{
|
{
|
||||||
Unit* leviathanMkII = nullptr;
|
|
||||||
Unit* vx001 = nullptr;
|
Unit* vx001 = nullptr;
|
||||||
Unit* aerialCommandUnit = nullptr;
|
Unit* aerialCommandUnit = nullptr;
|
||||||
|
|
||||||
@ -2344,9 +2343,7 @@ bool MimironRocketStrikeAction::Execute(Event /*event*/)
|
|||||||
if (!target || !target->IsAlive())
|
if (!target || !target->IsAlive())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (target->GetEntry() == NPC_LEVIATHAN_MKII)
|
if (target->GetEntry() == NPC_VX001)
|
||||||
leviathanMkII = target;
|
|
||||||
else if (target->GetEntry() == NPC_VX001)
|
|
||||||
vx001 = target;
|
vx001 = target;
|
||||||
else if (target->GetEntry() == NPC_AERIAL_COMMAND_UNIT)
|
else if (target->GetEntry() == NPC_AERIAL_COMMAND_UNIT)
|
||||||
aerialCommandUnit = target;
|
aerialCommandUnit = target;
|
||||||
|
|||||||
@ -157,7 +157,7 @@ float JanalaiStayAwayFromFireBombsMultiplier::GetValue(Action* action)
|
|||||||
if (!AI_VALUE2(Unit*, "find target", "jan'alai"))
|
if (!AI_VALUE2(Unit*, "find target", "jan'alai"))
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
|
|
||||||
if (!HasFireBombNearby(botAI, bot))
|
if (!HasFireBombNearby(bot))
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
|
|
||||||
if (dynamic_cast<CastReachTargetSpellAction*>(action) ||
|
if (dynamic_cast<CastReachTargetSpellAction*>(action) ||
|
||||||
|
|||||||
@ -108,7 +108,7 @@ bool JanalaiBossEngagedByTanksTrigger::IsActive()
|
|||||||
!AI_VALUE2(Unit*, "find target", "jan'alai"))
|
!AI_VALUE2(Unit*, "find target", "jan'alai"))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return !HasFireBombNearby(botAI, bot);
|
return !HasFireBombNearby(bot);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JanalaiBossCastsFlameBreathTrigger::IsActive()
|
bool JanalaiBossCastsFlameBreathTrigger::IsActive()
|
||||||
@ -118,13 +118,13 @@ bool JanalaiBossCastsFlameBreathTrigger::IsActive()
|
|||||||
AI_VALUE2(Unit*, "find target", "amani dragonhawk hatchling"))
|
AI_VALUE2(Unit*, "find target", "amani dragonhawk hatchling"))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return !HasFireBombNearby(botAI, bot);
|
return !HasFireBombNearby(bot);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JanalaiBossSummoningFireBombsTrigger::IsActive()
|
bool JanalaiBossSummoningFireBombsTrigger::IsActive()
|
||||||
{
|
{
|
||||||
return AI_VALUE2(Unit*, "find target", "jan'alai") &&
|
return AI_VALUE2(Unit*, "find target", "jan'alai") &&
|
||||||
HasFireBombNearby(botAI, bot);
|
HasFireBombNearby(bot);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JanalaiAmanishiHatchersSpawnedTrigger::IsActive()
|
bool JanalaiAmanishiHatchersSpawnedTrigger::IsActive()
|
||||||
|
|||||||
@ -143,7 +143,7 @@ namespace ZulAmanHelpers
|
|||||||
// Jan'alai <Dragonhawk Avatar>
|
// Jan'alai <Dragonhawk Avatar>
|
||||||
const Position JANALAI_TANK_POSITION = { -33.873f, 1149.571f, 19.146f };
|
const Position JANALAI_TANK_POSITION = { -33.873f, 1149.571f, 19.146f };
|
||||||
|
|
||||||
bool HasFireBombNearby(PlayerbotAI* botAI, Player* bot)
|
bool HasFireBombNearby(Player* bot)
|
||||||
{
|
{
|
||||||
constexpr float searchRadius = 30.0f;
|
constexpr float searchRadius = 30.0f;
|
||||||
std::list<Creature*> creatureList;
|
std::list<Creature*> creatureList;
|
||||||
|
|||||||
@ -97,7 +97,7 @@ namespace ZulAmanHelpers
|
|||||||
|
|
||||||
// Jan'alai <Dragonhawk Avatar>
|
// Jan'alai <Dragonhawk Avatar>
|
||||||
extern const Position JANALAI_TANK_POSITION;
|
extern const Position JANALAI_TANK_POSITION;
|
||||||
bool HasFireBombNearby(PlayerbotAI* botAI, Player* bot);
|
bool HasFireBombNearby(Player* bot);
|
||||||
std::pair<Unit*, Unit*> GetAmanishiHatcherPair(PlayerbotAI* botAI);
|
std::pair<Unit*, Unit*> GetAmanishiHatcherPair(PlayerbotAI* botAI);
|
||||||
|
|
||||||
// Halazzi <Lynx Avatar>
|
// Halazzi <Lynx Avatar>
|
||||||
|
|||||||
@ -138,7 +138,7 @@ void Engine::Init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Engine::DoNextAction(Unit* unit, uint32 depth, bool minimal)
|
bool Engine::DoNextAction(Unit* /*unit*/, uint32 /*depth*/, bool minimal)
|
||||||
{
|
{
|
||||||
LogAction("--- AI Tick ---");
|
LogAction("--- AI Tick ---");
|
||||||
|
|
||||||
|
|||||||
@ -2230,8 +2230,6 @@ void PlayerbotFactory::InitEquipment(bool incremental, bool second_chance)
|
|||||||
if (!CanEquipUnseenItem(slot, dest, bestItemForSlot))
|
if (!CanEquipUnseenItem(slot, dest, bestItemForSlot))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Item* newItem = bot->EquipNewItem(dest, bestItemForSlot, true);
|
|
||||||
|
|
||||||
bot->EquipNewItem(dest, bestItemForSlot, true);
|
bot->EquipNewItem(dest, bestItemForSlot, true);
|
||||||
bot->AutoUnequipOffhandIfNeed();
|
bot->AutoUnequipOffhandIfNeed();
|
||||||
}
|
}
|
||||||
@ -2393,7 +2391,7 @@ void PlayerbotFactory::InitBags(bool destroyOld)
|
|||||||
if (old_bag)
|
if (old_bag)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Item* newItem = bot->EquipNewItem(dest, newItemId, true);
|
bot->EquipNewItem(dest, newItemId, true);
|
||||||
// if (newItem)
|
// if (newItem)
|
||||||
// {
|
// {
|
||||||
// newItem->AddToWorld();
|
// newItem->AddToWorld();
|
||||||
@ -4729,7 +4727,7 @@ void PlayerbotFactory::ApplyEnchantTemplate(uint8 spec)
|
|||||||
// const SpellItemEnchantmentEntry* a = sSpellItemEnchantmentStore.LookupEntry(1);
|
// const SpellItemEnchantmentEntry* a = sSpellItemEnchantmentStore.LookupEntry(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerbotFactory::ApplyEnchantAndGemsNew(bool destroyOld)
|
void PlayerbotFactory::ApplyEnchantAndGemsNew(bool /*destroyOld*/)
|
||||||
{
|
{
|
||||||
//int32 bestGemEnchantId[4] = {-1, -1, -1, -1}; // 1, 2, 4, 8 color //not used, line marked for removal.
|
//int32 bestGemEnchantId[4] = {-1, -1, -1, -1}; // 1, 2, 4, 8 color //not used, line marked for removal.
|
||||||
//float bestGemScore[4] = {0, 0, 0, 0}; //not used, line marked for removal.
|
//float bestGemScore[4] = {0, 0, 0, 0}; //not used, line marked for removal.
|
||||||
|
|||||||
@ -491,7 +491,7 @@ void PlayerbotAI::UpdateAIInternal([[maybe_unused]] uint32 elapsed, bool minimal
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatReplyAction::ChatReplyDo(bot, it->m_type, it->m_guid1, it->m_guid2, it->m_msg, it->m_chanName, it->m_name);
|
ChatReplyAction::ChatReplyDo(bot, it->m_type, it->m_guid1, it->m_msg, it->m_chanName, it->m_name);
|
||||||
it = chatReplies.erase(it);
|
it = chatReplies.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1811,7 +1811,7 @@ Strategy* PlayerbotAI::GetStrategy(std::string const name, BotState type)
|
|||||||
return engines[type] ? engines[type]->GetStrategy(name) : nullptr;
|
return engines[type] ? engines[type]->GetStrategy(name) : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerbotAI::ResetStrategies(bool load)
|
void PlayerbotAI::ResetStrategies(bool /*load*/)
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < BOT_STATE_MAX; i++)
|
for (uint8 i = 0; i < BOT_STATE_MAX; i++)
|
||||||
engines[i]->removeAllStrategies();
|
engines[i]->removeAllStrategies();
|
||||||
|
|||||||
@ -1667,7 +1667,7 @@ void PlayerbotMgr::TellError(std::string const botName, std::string const text)
|
|||||||
errors[text] = names;
|
errors[text] = names;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerbotMgr::CheckTellErrors(uint32 elapsed)
|
void PlayerbotMgr::CheckTellErrors(uint32 /*elapsed*/)
|
||||||
{
|
{
|
||||||
time_t now = time(nullptr);
|
time_t now = time(nullptr);
|
||||||
if ((now - lastErrorTell) < sPlayerbotAIConfig.errorDelay / 1000)
|
if ((now - lastErrorTell) < sPlayerbotAIConfig.errorDelay / 1000)
|
||||||
|
|||||||
@ -278,7 +278,7 @@ void RandomPlayerbotMgr::LogPlayerLocation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomPlayerbotMgr::UpdateAIInternal(uint32 elapsed, bool /*minimal*/)
|
void RandomPlayerbotMgr::UpdateAIInternal(uint32 /*elapsed*/, bool /*minimal*/)
|
||||||
{
|
{
|
||||||
if (totalPmo)
|
if (totalPmo)
|
||||||
totalPmo->finish();
|
totalPmo->finish();
|
||||||
|
|||||||
@ -65,7 +65,7 @@ void PlayerbotRepository::Save(PlayerbotAI* botAI)
|
|||||||
SaveValue(guid, "dead", FormatStrategies("dead", botAI->GetStrategies(BOT_STATE_DEAD)));
|
SaveValue(guid, "dead", FormatStrategies("dead", botAI->GetStrategies(BOT_STATE_DEAD)));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string const PlayerbotRepository::FormatStrategies(std::string const type, std::vector<std::string> strategies)
|
std::string const PlayerbotRepository::FormatStrategies(std::string const /*type*/, std::vector<std::string> strategies)
|
||||||
{
|
{
|
||||||
std::ostringstream out;
|
std::ostringstream out;
|
||||||
for (std::vector<std::string>::iterator i = strategies.begin(); i != strategies.end(); ++i)
|
for (std::vector<std::string>::iterator i = strategies.begin(); i != strategies.end(); ++i)
|
||||||
|
|||||||
@ -325,9 +325,6 @@ public:
|
|||||||
FindMountVisitor(Player* bot) : FindUsableItemVisitor(bot) {}
|
FindMountVisitor(Player* bot) : FindUsableItemVisitor(bot) {}
|
||||||
|
|
||||||
bool Accept(ItemTemplate const* proto) override;
|
bool Accept(ItemTemplate const* proto) override;
|
||||||
|
|
||||||
private:
|
|
||||||
uint32 effectId;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FindPetVisitor : public FindUsableItemVisitor
|
class FindPetVisitor : public FindUsableItemVisitor
|
||||||
|
|||||||
@ -176,7 +176,7 @@ RandomItemMgr::~RandomItemMgr()
|
|||||||
predicates.clear();
|
predicates.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RandomItemMgr::HandleConsoleCommand(ChatHandler* handler, char const* args)
|
bool RandomItemMgr::HandleConsoleCommand(ChatHandler* /*handler*/, char const* args)
|
||||||
{
|
{
|
||||||
if (!args || !*args)
|
if (!args || !*args)
|
||||||
{
|
{
|
||||||
@ -1823,7 +1823,7 @@ uint32 RandomItemMgr::GetUpgrade(Player* player, std::string spec, uint8 slot, u
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint32> RandomItemMgr::GetUpgradeList(Player* player, std::string spec, uint8 slot, uint32 quality,
|
std::vector<uint32> RandomItemMgr::GetUpgradeList(Player* player, std::string spec, uint8 slot, uint32 quality,
|
||||||
uint32 itemId, uint32 amount)
|
uint32 itemId, uint32 /*amount*/)
|
||||||
{
|
{
|
||||||
std::vector<uint32> listItems;
|
std::vector<uint32> listItems;
|
||||||
if (!player)
|
if (!player)
|
||||||
|
|||||||
@ -517,7 +517,7 @@ void StatsWeightCalculator::CalculateItemSetMod(Player* player, ItemTemplate con
|
|||||||
weight_ *= multiplier;
|
weight_ *= multiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatsWeightCalculator::CalculateSocketBonus(Player* player, ItemTemplate const* proto)
|
void StatsWeightCalculator::CalculateSocketBonus(Player* /*player*/, ItemTemplate const* proto)
|
||||||
{
|
{
|
||||||
uint32 socketNum = 0;
|
uint32 socketNum = 0;
|
||||||
for (uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT + MAX_GEM_SOCKETS;
|
for (uint32 enchant_slot = SOCK_ENCHANTMENT_SLOT; enchant_slot < SOCK_ENCHANTMENT_SLOT + MAX_GEM_SOCKETS;
|
||||||
|
|||||||
@ -142,7 +142,7 @@ bool TalentSpec::CheckTalents(uint32 level, std::ostringstream* out)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set the talents for the bots to the current spec.
|
// Set the talents for the bots to the current spec.
|
||||||
void TalentSpec::ApplyTalents(Player* bot, std::ostringstream* out)
|
void TalentSpec::ApplyTalents(Player* bot, std::ostringstream* /*out*/)
|
||||||
{
|
{
|
||||||
for (auto& entry : talents)
|
for (auto& entry : talents)
|
||||||
{
|
{
|
||||||
@ -397,7 +397,7 @@ uint32 TalentSpec::highestTree()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string const TalentSpec::FormatSpec(Player* bot)
|
std::string const TalentSpec::FormatSpec(Player* /*bot*/)
|
||||||
{
|
{
|
||||||
// uint8 cls = bot->getClass(); //not used, (used in lined 403), line marked for removal.
|
// uint8 cls = bot->getClass(); //not used, (used in lined 403), line marked for removal.
|
||||||
|
|
||||||
|
|||||||
@ -226,7 +226,7 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OnPlayerCanUseChat(Player* player, uint32 type, uint32 /*lang*/, std::string& msg, Guild* guild) override
|
bool OnPlayerCanUseChat(Player* player, uint32 type, uint32 /*lang*/, std::string& msg, Guild* /*guild*/) override
|
||||||
{
|
{
|
||||||
if (type != CHAT_MSG_GUILD)
|
if (type != CHAT_MSG_GUILD)
|
||||||
return true;
|
return true;
|
||||||
@ -445,7 +445,7 @@ public:
|
|||||||
playerbotMgr->HandleMasterOutgoingPacket(*packet);
|
playerbotMgr->HandleMasterOutgoingPacket(*packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnPlayerbotUpdate(uint32 diff) override
|
void OnPlayerbotUpdate(uint32 /*diff*/) override
|
||||||
{
|
{
|
||||||
sRandomPlayerbotMgr.UpdateSessions(); // Per-bot updates only
|
sRandomPlayerbotMgr.UpdateSessions(); // Per-bot updates only
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ bool ServerFacade::IsDistanceGreaterOrEqualThan(float dist1, float dist2) { retu
|
|||||||
|
|
||||||
bool ServerFacade::IsDistanceLessOrEqualThan(float dist1, float dist2) { return !IsDistanceGreaterThan(dist1, dist2); }
|
bool ServerFacade::IsDistanceLessOrEqualThan(float dist1, float dist2) { return !IsDistanceGreaterThan(dist1, dist2); }
|
||||||
|
|
||||||
void ServerFacade::SetFacingTo(Player* bot, WorldObject* wo, bool force)
|
void ServerFacade::SetFacingTo(Player* bot, WorldObject* wo, bool /*force*/)
|
||||||
{
|
{
|
||||||
if (!bot)
|
if (!bot)
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user