mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 17:54:48 +01:00
Core/Packets: Added CMSG_AREATRIGGER
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user