mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-18 19:25:44 +00:00
65 lines
2.1 KiB
C++
65 lines
2.1 KiB
C++
/*
|
|
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
|
|
* and/or modify it under version 3 of the License, or (at your option), any later version.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <functional>
|
|
#include "Common.h"
|
|
#include "Group.h"
|
|
#include "Chat.h"
|
|
#include "Language.h"
|
|
|
|
class Player;
|
|
class PlayerbotAI;
|
|
|
|
namespace ai::buff
|
|
{
|
|
|
|
// Build an aura qualifier "single + greater" to avoid double-buffing
|
|
std::string MakeAuraQualifierForBuff(std::string const& name);
|
|
|
|
// Returns the group spell name for a given single-target buff.
|
|
// If no group equivalent exists, returns "".
|
|
std::string GroupVariantFor(std::string const& name);
|
|
|
|
// Checks if the bot has the required reagents to cast a spell (by its spellId).
|
|
// Returns false if the spellId is invalid.
|
|
bool HasRequiredReagents(Player* bot, uint32 spellId);
|
|
|
|
|
|
// Applies the "switch to group buff" policy if: the bot is in a group of size x+,
|
|
// the group variant is known/useful, and reagents are available. Otherwise, returns baseName.
|
|
// If announceOnMissing == true and reagents are missing, calls the 'announce' callback
|
|
// (if provided) to notify the party/raid.
|
|
std::string UpgradeToGroupIfAppropriate(
|
|
Player* bot,
|
|
PlayerbotAI* botAI,
|
|
std::string const& baseName,
|
|
bool announceOnMissing = false,
|
|
std::function<void(std::string const&)> announce = {}
|
|
);
|
|
}
|
|
|
|
namespace ai::chat {
|
|
inline std::function<void(std::string const&)> MakeGroupAnnouncer(Player* me)
|
|
{
|
|
return [me](std::string const& msg)
|
|
{
|
|
if (Group* g = me->GetGroup())
|
|
{
|
|
WorldPacket data;
|
|
ChatMsg type = g->isRaidGroup() ? CHAT_MSG_RAID : CHAT_MSG_PARTY;
|
|
ChatHandler::BuildChatPacket(data, type, LANG_UNIVERSAL, me, /*receiver=*/nullptr, msg.c_str());
|
|
g->BroadcastPacket(&data, true, -1, me->GetGUID());
|
|
}
|
|
else
|
|
{
|
|
me->Say(msg, LANG_UNIVERSAL);
|
|
}
|
|
};
|
|
}
|
|
}
|