diff options
| author | Peter Keresztes Schmidt <carbenium@outlook.com> | 2020-08-15 15:29:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-15 15:29:43 +0200 |
| commit | 6c7837f947ff4eb5110a116a371daa6f9e2b3bbe (patch) | |
| tree | 68c0338b65932b47b62903f8b09a3f573909b66e /src/server/game | |
| parent | 34d403e83f42304332f89ffc73549f6f2c695ccd (diff) | |
Core/Unit: Make HandleEmoteCommand typesafe (#25249)
* Scripts/ScarletMonastery: Fix wrong emote during Headless Horseman encounter
* Scripts/HoR: Fix wrong emote during escape event
* Core/Unit: Make improve type safety of HandleEmoteCommand
Change argument type to the expected enum type Emote
* Scripts/CoS: Use SetUInt32Value to set UNIT_NPC_EMOTESTATE
UNIT_NPC_EMOTESTATE is no flag field
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Maps/MapScripts.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 5 | ||||
| -rw-r--r-- | src/server/game/Texts/CreatureTextMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Texts/CreatureTextMgr.h | 2 |
9 files changed, 15 insertions, 14 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index feb0cbd978e..4df56079d1f 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -307,7 +307,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsUnit(target)) { - target->ToUnit()->HandleEmoteCommand(e.action.emote.emote); + target->ToUnit()->HandleEmoteCommand(static_cast<Emote>(e.action.emote.emote)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_PLAY_EMOTE: target: %s %s, emote: %u", target->GetName().c_str(), target->GetGUID().ToString().c_str(), e.action.emote.emote); } @@ -461,7 +461,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsUnit(target)) { - uint32 emote = Trinity::Containers::SelectRandomContainerElement(emotes); + Emote emote = static_cast<Emote>(Trinity::Containers::SelectRandomContainerElement(emotes)); target->ToUnit()->HandleEmoteCommand(emote); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RANDOM_EMOTE: Creature %s handle random emote %u", target->GetGUID().ToString().c_str(), emote); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f695159ee7c..5d71cd12499 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1527,7 +1527,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) } } -void Unit::HandleEmoteCommand(uint32 emoteId) +void Unit::HandleEmoteCommand(Emote emoteId) { WorldPackets::Chat::Emote packet; packet.EmoteID = emoteId; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 3d2110ada04..c83f2e5edd5 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -948,7 +948,7 @@ class TC_GAME_API Unit : public WorldObject DamageInfo* damageInfo, HealInfo* healInfo); void TriggerAurasProcOnEvent(ProcEventInfo& eventInfo, AuraApplicationProcContainer& procAuras); - void HandleEmoteCommand(uint32 emoteId); + void HandleEmoteCommand(Emote emoteId); void AttackerStateUpdate (Unit* victim, WeaponAttackType attType = BASE_ATTACK, bool extra = false); void CalculateMeleeDamage(Unit* victim, CalcDamageInfo* damageInfo, WeaponAttackType attackType = BASE_ATTACK); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 56e4ed2066b..a43707d0ef6 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -562,7 +562,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) void WorldSession::HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet) { - uint32 emoteId = packet.EmoteID; + Emote emoteId = static_cast<Emote>(packet.EmoteID); // restrict to the only emotes hardcoded in client if (emoteId != EMOTE_ONESHOT_NONE && emoteId != EMOTE_ONESHOT_WAVE) @@ -632,9 +632,9 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recvData) if (!em) return; - uint32 emote_anim = em->EmoteID; + Emote emote = static_cast<Emote>(em->EmoteID); - switch (emote_anim) + switch (emote) { case EMOTE_STATE_SLEEP: case EMOTE_STATE_SIT: @@ -645,7 +645,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recvData) // Only allow text-emotes for "dead" entities (feign death included) if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) break; - GetPlayer()->HandleEmoteCommand(emote_anim); + GetPlayer()->HandleEmoteCommand(emote); break; } diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp index 0b6f4901c3d..63c4113348e 100644 --- a/src/server/game/Maps/MapScripts.cpp +++ b/src/server/game/Maps/MapScripts.cpp @@ -450,7 +450,7 @@ void Map::ScriptsProcess() if (step.script->Emote.Flags & SF_EMOTE_USE_STATE) cSource->SetUInt32Value(UNIT_NPC_EMOTESTATE, step.script->Emote.EmoteID); else - cSource->HandleEmoteCommand(step.script->Emote.EmoteID); + cSource->HandleEmoteCommand(static_cast<Emote>(step.script->Emote.EmoteID)); } break; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 6e0024e769d..acb2c962d57 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1910,7 +1910,7 @@ void ScriptMgr::OnPlayerChat(Player* player, uint32 type, uint32 lang, std::stri FOREACH_SCRIPT(PlayerScript)->OnChat(player, type, lang, msg, channel); } -void ScriptMgr::OnPlayerEmote(Player* player, uint32 emote) +void ScriptMgr::OnPlayerEmote(Player* player, Emote emote) { FOREACH_SCRIPT(PlayerScript)->OnEmote(player, emote); } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index f255a3b06a3..be35f14448e 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -76,6 +76,7 @@ enum BattlegroundTypeId : uint32; enum ContentLevels : uint8; enum Difficulty : uint8; enum DuelCompleteType : uint8; +enum Emote : uint32; enum QuestStatus : uint8; enum RemoveMethod : uint8; enum ShutdownExitCode : uint32; @@ -682,7 +683,7 @@ class TC_GAME_API PlayerScript : public ScriptObject virtual void OnChat(Player* /*player*/, uint32 /*type*/, uint32 /*lang*/, std::string& /*msg*/, Channel* /*channel*/) { } // Both of the below are called on emote opcodes. - virtual void OnEmote(Player* /*player*/, uint32 /*emote*/) { } + virtual void OnEmote(Player* /*player*/, Emote /*emote*/) { } virtual void OnTextEmote(Player* /*player*/, uint32 /*textEmote*/, uint32 /*emoteNum*/, ObjectGuid /*guid*/) { } @@ -1027,7 +1028,7 @@ class TC_GAME_API ScriptMgr void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group); void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild); void OnPlayerChat(Player* player, uint32 type, uint32 lang, std::string& msg, Channel* channel); - void OnPlayerEmote(Player* player, uint32 emote); + void OnPlayerEmote(Player* player, Emote emote); void OnPlayerTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, ObjectGuid guid); void OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck); void OnPlayerLogin(Player* player, bool firstLogin); diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 9d7efaa71ac..5d37aa2f507 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -382,7 +382,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket const* source->SendMessageToSetInRange(data, dist, true); } -void CreatureTextMgr::SendEmote(Unit* source, uint32 emote) +void CreatureTextMgr::SendEmote(Unit* source, Emote emote) { if (!source) return; diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 7b14188a410..263685566aa 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -94,7 +94,7 @@ class TC_GAME_API CreatureTextMgr CreatureTextMap const& GetTextMap() const { return mTextMap; } void SendSound(Creature* source, uint32 sound, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly); - void SendEmote(Unit* source, uint32 emote); + void SendEmote(Unit* source, Emote emote); //if sent, returns the 'duration' of the text else 0 if error uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = nullptr, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = nullptr); |
