diff options
| author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-13 22:38:25 +0200 |
|---|---|---|
| committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-13 22:38:25 +0200 |
| commit | ca3961f9875608bd02ba42445f165a02002444f8 (patch) | |
| tree | 419c54ec37303a5639f33180e507230d8cb50f1b /src/server/game/Entities/Unit | |
| parent | 524788712a879d26428b3c7f2b56765e4099f5ff (diff) | |
| parent | d9fdbb06e48dd5b384cf9a8b58289c3ccf7b8731 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Achievements/AchievementMgr.cpp
src/server/game/Entities/Object/Object.cpp
src/server/game/Entities/Player/Player.cpp
src/server/game/Entities/Player/Player.h
src/server/game/Entities/Unit/Unit.h
src/server/game/Handlers/ChatHandler.cpp
src/server/game/Spells/SpellEffects.cpp
src/server/scripts/Commands/cs_wp.cpp
src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp
src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp
src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp
src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 86 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 12 |
2 files changed, 96 insertions, 2 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6f37f74b607..49397e90df6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -23,6 +23,7 @@ #include "Battleground.h" #include "BattlegroundScore.h" #include "CellImpl.h" +#include "ChatTextBuilder.h" #include "ConditionMgr.h" #include "CreatureAI.h" #include "CreatureAIImpl.h" @@ -461,7 +462,7 @@ bool Unit::IsWithinMeleeRange(const Unit* obj, float dist) const float dx = GetPositionX() - obj->GetPositionX(); float dy = GetPositionY() - obj->GetPositionY(); - float dz = GetPositionZ() - obj->GetPositionZ(); + float dz = GetPositionZMinusOffset() - obj->GetPositionZMinusOffset(); float distsq = dx*dx + dy*dy + dz*dz; float sizefactor = GetMeleeReach() + obj->GetMeleeReach(); @@ -6901,7 +6902,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg if (triggerEntry == NULL) { // Don't cast unknown spell - // TC_LOG_ERROR("entities.unit", "Unit::HandleProcTriggerSpell: Spell %u has 0 in EffectTriggered[%d]. Unhandled custom case?", auraSpellInfo->Id, triggeredByAura->GetEffIndex()); + TC_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; } @@ -16697,3 +16698,84 @@ bool Unit::IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplicat return true; } + +void Unit::Talk(std::string const& text, ChatMsg msgType, Language language, float textRange, WorldObject const* target) +{ + Trinity::CustomChatTextBuilder builder(this, msgType, text, language, target); + Trinity::LocalizedPacketDo<Trinity::CustomChatTextBuilder> localizer(builder); + Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::CustomChatTextBuilder> > worker(this, textRange, localizer); + VisitNearbyWorldObject(textRange, worker); +} + +void Unit::Say(std::string const& 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 const& 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 const& 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 const& 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)) + { + TC_LOG_ERROR("entities.unit", "WorldObject::MonsterText: `broadcast_text` was not %u found", textId); + return; + } + + Trinity::BroadcastTextBuilder builder(this, msgType, textId, target); + Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> localizer(builder); + Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> > worker(this, textRange, localizer); + VisitNearbyWorldObject(textRange, worker); +} + +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) + { + TC_LOG_ERROR("entities.unit", "WorldObject::MonsterWhisper: `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); +} diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index acf9875ad55..ee52189b0f5 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1636,6 +1636,7 @@ class Unit : public WorldObject bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); } bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); } + bool IsHovering() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_HOVER); } bool SetWalk(bool enable); bool SetDisableGravity(bool disable, bool packetOnly = false); bool SetFall(bool enable); @@ -2172,6 +2173,17 @@ class Unit : public WorldObject int32 GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue = false, int32 miscValue = 0) const; bool IsHighestExclusiveAura(Aura const* aura, bool removeOtherAuraApplications = false); + virtual void Talk(std::string const& text, ChatMsg msgType, Language language, float textRange, WorldObject const* target); + virtual void Say(std::string const& text, Language language, WorldObject const* target = nullptr); + virtual void Yell(std::string const& text, Language language, WorldObject const* target = nullptr); + virtual void TextEmote(std::string const& text, WorldObject const* target = nullptr, bool isBossEmote = false); + virtual void Whisper(std::string const& text, Language language, Player* target, bool isBossWhisper = false); + void Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target); + void Say(uint32 textId, WorldObject const* target = nullptr); + void Yell(uint32 textId, WorldObject const* target = nullptr); + void TextEmote(uint32 textId, WorldObject const* target = nullptr, bool isBossEmote = false); + void Whisper(uint32 textId, Player* target, bool isBossWhisper = false); + protected: explicit Unit (bool isWorldObject); |
