mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-14 01:29:07 +00:00
refactor(Core/Unit): clean MonsterText methods (#6957)
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "Battleground.h"
|
||||
#include "CellImpl.h"
|
||||
#include "Chat.h"
|
||||
#include "ChatTextBuilder.h"
|
||||
#include "Common.h"
|
||||
#include "ConditionMgr.h"
|
||||
#include "Creature.h"
|
||||
@@ -8788,7 +8790,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
|
||||
if (triggerEntry == nullptr)
|
||||
{
|
||||
// Don't cast unknown spell
|
||||
// LOG_ERROR("entities.unit", "Unit::HandleProcTriggerSpell: Spell %u has 0 in EffectTriggered[%d]. Unhandled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex());
|
||||
LOG_ERROR("entities.unit", "Unit::HandleProcTriggerSpell: Spell %u (effIndex: %u) has unknown TriggerSpell %u. Unhandled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex(), trigger_spell_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -20083,3 +20085,88 @@ float Unit::GetCollisionHeight() const
|
||||
|
||||
return collisionHeight == 0.0f ? defaultHeight : collisionHeight;
|
||||
}
|
||||
|
||||
void Unit::Talk(std::string_view text, ChatMsg msgType, Language language, float textRange, WorldObject const* target)
|
||||
{
|
||||
Acore::CustomChatTextBuilder builder(this, msgType, text, language, target);
|
||||
Acore::LocalizedPacketDo<Acore::CustomChatTextBuilder> localizer(builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::CustomChatTextBuilder> > worker(this, textRange, localizer);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(std::string_view text, Language language, WorldObject const* target /*= nullptr*/)
|
||||
{
|
||||
Talk(text, CHAT_MSG_MONSTER_SAY, language, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), target);
|
||||
}
|
||||
|
||||
void Unit::Yell(std::string_view text, Language language, WorldObject const* target /*= nullptr*/)
|
||||
{
|
||||
Talk(text, CHAT_MSG_MONSTER_YELL, language, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), target);
|
||||
}
|
||||
|
||||
void Unit::TextEmote(std::string_view text, WorldObject const* target /*= nullptr*/, bool isBossEmote /*= false*/)
|
||||
{
|
||||
Talk(text, isBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, LANG_UNIVERSAL, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), target);
|
||||
}
|
||||
|
||||
void Unit::Whisper(std::string_view text, Language language, Player* target, bool isBossWhisper /*= false*/)
|
||||
{
|
||||
if (!target)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
|
||||
WorldPacket data;
|
||||
ChatHandler::BuildChatPacket(data, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, language, this, target, text, 0, "", locale);
|
||||
target->SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target)
|
||||
{
|
||||
if (!sObjectMgr->GetBroadcastText(textId))
|
||||
{
|
||||
LOG_ERROR("entities.unit", "Unit::Talk: `broadcast_text` (ID: %u) was not found", textId);
|
||||
return;
|
||||
}
|
||||
|
||||
Acore::BroadcastTextBuilder builder(this, msgType, textId, getGender(), target);
|
||||
Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> localizer(builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> > worker(this, textRange, localizer);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
{
|
||||
Talk(textId, CHAT_MSG_MONSTER_SAY, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), target);
|
||||
}
|
||||
|
||||
void Unit::Yell(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
{
|
||||
Talk(textId, CHAT_MSG_MONSTER_YELL, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), target);
|
||||
}
|
||||
|
||||
void Unit::TextEmote(uint32 textId, WorldObject const* target /*= nullptr*/, bool isBossEmote /*= false*/)
|
||||
{
|
||||
Talk(textId, isBossEmote ? CHAT_MSG_RAID_BOSS_EMOTE : CHAT_MSG_MONSTER_EMOTE, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), target);
|
||||
}
|
||||
|
||||
void Unit::Whisper(uint32 textId, Player* target, bool isBossWhisper /*= false*/)
|
||||
{
|
||||
if (!target)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BroadcastText const* bct = sObjectMgr->GetBroadcastText(textId);
|
||||
if (!bct)
|
||||
{
|
||||
LOG_ERROR("entities.unit", "Unit::Whisper: `broadcast_text` was not %u found", textId);
|
||||
return;
|
||||
}
|
||||
|
||||
LocaleConstant locale = target->GetSession()->GetSessionDbLocaleIndex();
|
||||
WorldPacket data;
|
||||
ChatHandler::BuildChatPacket(data, isBossWhisper ? CHAT_MSG_RAID_BOSS_WHISPER : CHAT_MSG_MONSTER_WHISPER, LANG_UNIVERSAL, this, target, bct->GetText(locale, getGender()), 0, "", locale);
|
||||
target->SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user