aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-12-30 03:09:57 +0200
committerIntel <chemicstry@gmail.com>2014-12-30 03:09:57 +0200
commitf64e227e22e564c496cd795f78f4bdc59813f2b5 (patch)
tree404de2fd2ce6de78d63e8feb9ac366661fd653eb
parent1f7e6a976d345204f7ff123e2eda51a719d25d2e (diff)
Core/Packets: Added CMSG_AREATRIGGER
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp31
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h12
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h3
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);