diff options
author | Intel <chemicstry@gmail.com> | 2014-12-30 03:09:57 +0200 |
---|---|---|
committer | Intel <chemicstry@gmail.com> | 2014-12-30 03:09:57 +0200 |
commit | f64e227e22e564c496cd795f78f4bdc59813f2b5 (patch) | |
tree | 404de2fd2ce6de78d63e8feb9ac366661fd653eb | |
parent | 1f7e6a976d345204f7ff123e2eda51a719d25d2e (diff) |
Core/Packets: Added CMSG_AREATRIGGER
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 31 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
5 files changed, 36 insertions, 19 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index c27def4a82c..cb59b747f52 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -839,33 +839,30 @@ void WorldSession::SendAreaTriggerMessage(const char* Text, ...) SendPacket(&data); } -void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) +void WorldSession::HandleAreaTriggerOpcode(WorldPackets::Misc::AreaTrigger& packet) { - uint32 triggerId; - recvData >> triggerId; - - TC_LOG_DEBUG("network", "CMSG_AREATRIGGER. Trigger ID: %u", triggerId); + TC_LOG_DEBUG("network", "CMSG_AREATRIGGER. Trigger ID: %u", packet.AreaTriggerID); Player* player = GetPlayer(); if (player->IsInFlight()) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (%s) in flight, ignore Area Trigger ID:%u", - player->GetName().c_str(), player->GetGUID().ToString().c_str(), triggerId); + player->GetName().c_str(), player->GetGUID().ToString().c_str(), packet.AreaTriggerID); return; } - AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(triggerId); + AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(packet.AreaTriggerID); if (!atEntry) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (%s) send unknown (by DBC) Area Trigger ID:%u", - player->GetName().c_str(), player->GetGUID().ToString().c_str(), triggerId); + player->GetName().c_str(), player->GetGUID().ToString().c_str(), packet.AreaTriggerID); return; } if (player->GetMapId() != atEntry->MapID) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (%s) too far (trigger map: %u player map: %u), ignore Area Trigger ID: %u", - player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->MapID, player->GetMapId(), triggerId); + player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->MapID, player->GetMapId(), packet.AreaTriggerID); return; } @@ -879,7 +876,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (dist > atEntry->Radius + delta) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (%s) too far (radius: %f distance: %f), ignore Area Trigger ID: %u", - player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->Radius, dist, triggerId); + player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->Radius, dist, packet.AreaTriggerID); return; } } @@ -910,20 +907,20 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) (std::fabs(dz) > atEntry->BoxHeight / 2 + delta)) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (%s) too far (1/2 box X: %f 1/2 box Y: %f 1/2 box Z: %f rotatedPlayerX: %f rotatedPlayerY: %f dZ:%f), ignore Area Trigger ID: %u", - player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->BoxLength / 2, atEntry->BoxWidth / 2, atEntry->BoxHeight / 2, rotPlayerX, rotPlayerY, dz, triggerId); + player->GetName().c_str(), player->GetGUID().ToString().c_str(), atEntry->BoxLength / 2, atEntry->BoxWidth / 2, atEntry->BoxHeight / 2, rotPlayerX, rotPlayerY, dz, packet.AreaTriggerID); return; } } if (player->isDebugAreaTriggers) - ChatHandler(player->GetSession()).PSendSysMessage(LANG_DEBUG_AREATRIGGER_REACHED, triggerId); + ChatHandler(player->GetSession()).PSendSysMessage(LANG_DEBUG_AREATRIGGER_REACHED, packet.AreaTriggerID); if (sScriptMgr->OnAreaTrigger(player, atEntry)) return; if (player->IsAlive()) { - if (uint32 questId = sObjectMgr->GetQuestForAreaTrigger(triggerId)) + if (uint32 questId = sObjectMgr->GetQuestForAreaTrigger(packet.AreaTriggerID)) { Quest const* qInfo = sObjectMgr->GetQuestTemplate(questId); if (qInfo && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE) @@ -943,7 +940,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) } } - if (sObjectMgr->IsTavernAreaTrigger(triggerId)) + if (sObjectMgr->IsTavernAreaTrigger(packet.AreaTriggerID)) { // set resting flag we are in the inn player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); @@ -958,13 +955,13 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (Battleground* bg = player->GetBattleground()) if (bg->GetStatus() == STATUS_IN_PROGRESS) - bg->HandleAreaTrigger(player, triggerId); + bg->HandleAreaTrigger(player, packet.AreaTriggerID); if (OutdoorPvP* pvp = player->GetOutdoorPvP()) - if (pvp->HandleAreaTrigger(_player, triggerId)) + if (pvp->HandleAreaTrigger(_player, packet.AreaTriggerID)) return; - AreaTriggerStruct const* at = sObjectMgr->GetAreaTrigger(triggerId); + AreaTriggerStruct const* at = sObjectMgr->GetAreaTrigger(packet.AreaTriggerID); if (!at) return; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 154ff134a6a..01e7f5b5191 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -115,3 +115,10 @@ WorldPacket const* WorldPackets::Misc::WorldServerInfo::Write() return &_worldPacket; } + +void WorldPackets::Misc::AreaTrigger::Read() +{ + _worldPacket >> AreaTriggerID; + Entered = _worldPacket.ReadBit(); + FromClient = _worldPacket.ReadBit(); +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index dfff0e331fc..31ec9d0563c 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -154,6 +154,18 @@ namespace WorldPackets Optional<uint32> RestrictedAccountMaxMoney; uint32 DifficultyID = 0; }; + + class AreaTrigger final : public ClientPacket + { + public: + AreaTrigger(WorldPacket&& packet) : ClientPacket(CMSG_AREATRIGGER, std::move(packet)) { } + + void Read() override; + + int32 AreaTriggerID = 0; + bool Entered = false; + bool FromClient = false; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 714a7ccff66..bd5b58d8e6f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -143,7 +143,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_ADD_MUTE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_ADD_VOICE_IGNORE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_ALTER_APPEARANCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAlterAppearance ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_AREATRIGGER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaTriggerOpcode ); + DEFINE_HANDLER(CMSG_AREATRIGGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::AreaTrigger, &WorldSession::HandleAreaTriggerOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_AREA_SPIRIT_HEALER_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueryOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_AREA_SPIRIT_HEALER_QUEUE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueueOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_ARENA_TEAM_ACCEPT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleArenaTeamAcceptOpcode ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 0f0a187edc3..eddb3ef8f3f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -160,6 +160,7 @@ namespace WorldPackets namespace Misc { + class AreaTrigger; class SetSelection; class ViolenceLevel; class TimeSyncResponse; @@ -701,7 +702,7 @@ class WorldSession void HandleSetContactNotesOpcode(WorldPacket& recvPacket); void HandleBugOpcode(WorldPacket& recvPacket); - void HandleAreaTriggerOpcode(WorldPacket& recvPacket); + void HandleAreaTriggerOpcode(WorldPackets::Misc::AreaTrigger& packet); void HandleSetFactionAtWar(WorldPacket& recvData); void HandleSetFactionCheat(WorldPacket& recvData); |