Core/Packets: Added CMSG_AREATRIGGER

This commit is contained in:
Intel
2014-12-30 03:09:57 +02:00
parent 1f7e6a976d
commit f64e227e22
5 changed files with 36 additions and 19 deletions

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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;
};
}
}

View File

@@ -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 );

View File

@@ -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);