diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-08-09 01:30:58 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-08-09 01:30:58 +0200 |
commit | 00a77230bdee8bb7e6483e77aaa8b7127b712931 (patch) | |
tree | 7caf27a73ac890d9d3cfe16c35903228f7948659 | |
parent | a2969358d9769c0d608bd349b2700811ae60631f (diff) |
Core/PacketIO: Updated and enabled SMSG_RAID_GROUP_ONLY opcode
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Maps/MapManager.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InstancePackets.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Server/Packets/InstancePackets.h | 11 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
7 files changed, 41 insertions, 21 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f36f3162399..4165728ae7d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21689,14 +21689,9 @@ void Player::UpdateHomebindTime(uint32 time) // GMs never get homebind timer online if (m_InstanceValid || IsGameMaster()) { - if (m_HomebindTimer) // instance valid, but timer not reset - { - // hide reminder - WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4); - data << uint32(0); - data << uint32(0); - GetSession()->SendPacket(&data); - } + if (m_HomebindTimer) // instance valid, but timer not reset + SendRaidGroupOnlyMessage(RAID_GROUP_ERR_NONE, 0); + // instance is valid, reset homebind timer m_HomebindTimer = 0; } @@ -21715,10 +21710,7 @@ void Player::UpdateHomebindTime(uint32 time) // instance is invalid, start homebind timer m_HomebindTimer = 60000; // send message to player - WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4); - data << uint32(m_HomebindTimer); - data << uint32(1); - GetSession()->SendPacket(&data); + SendRaidGroupOnlyMessage(RAID_GROUP_ERR_REQUIREMENTS_UNMATCH, m_HomebindTimer); TC_LOG_DEBUG("maps", "PLAYER: Player '%s' (%s) will be teleported to homebind in 60 seconds", GetName().c_str(), GetGUID().ToString().c_str()); } } @@ -26766,3 +26758,12 @@ void Player::SendSpellCategoryCooldowns() SendDirectMessage(cooldowns.Write()); } + +void Player::SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay) +{ + WorldPackets::Instance::RaidGroupOnly raidGroupOnly; + raidGroupOnly.Delay = delay; + raidGroupOnly.Reason = reason; + + GetSession()->SendPacket(raidGroupOnly.Write()); +} diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 99f6154bede..50c2852ba6e 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2051,6 +2051,7 @@ class Player : public Unit, public GridObject<Player> static Difficulty CheckLoadedDungeonDifficultyID(Difficulty difficulty); static Difficulty CheckLoadedRaidDifficultyID(Difficulty difficulty); static Difficulty CheckLoadedLegacyRaidDifficultyID(Difficulty difficulty); + void SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay); bool UpdateSkill(uint32 skill_id, uint32 step); bool UpdateSkillPro(uint16 skillId, int32 chance, uint32 step); diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index a708556fe64..5cb3a2c26c5 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -155,9 +155,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) if ((!group || !group->isRaidGroup()) && !sWorld->getBoolConfig(CONFIG_INSTANCE_IGNORE_RAID)) { /// @todo this is not a good place to send the message - WorldPacket data(SMSG_RAID_GROUP_ONLY); - data << uint32(0) << uint32(2); - player->GetSession()->SendPacket(&data); + player->SendRaidGroupOnlyMessage(RAID_GROUP_ERR_ONLY, 0); TC_LOG_DEBUG("maps", "MAP: Player '%s' must be in a raid group to enter instance '%s'", player->GetName().c_str(), mapName); return false; } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 9d41ce6980a..b85f0167dc7 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -4940,11 +4940,12 @@ enum TokenResult }; enum RaidGroupReason -{ - RAID_GROUP_ERR_LOWLEVEL = 1, - RAID_GROUP_ERR_ONLY = 2, - RAID_GROUP_ERR_FULL = 3, - RAID_GROUP_ERR_REQUIREMENTS_UNMATCH = 4 +{ + RAID_GROUP_ERR_NONE = 0, + RAID_GROUP_ERR_LOWLEVEL = 1, // "You are too low level to enter this instance." + RAID_GROUP_ERR_ONLY = 2, // "You must be in a raid group to enter this instance." + RAID_GROUP_ERR_FULL = 3, // "The instance is full." + RAID_GROUP_ERR_REQUIREMENTS_UNMATCH = 4 // "You do not meet the requirements to enter this instance." }; #endif diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp index 5e85e961a21..3c0a4ccdb90 100644 --- a/src/server/game/Server/Packets/InstancePackets.cpp +++ b/src/server/game/Server/Packets/InstancePackets.cpp @@ -85,3 +85,11 @@ void WorldPackets::Instance::InstanceLockResponse::Read() { AcceptLock = _worldPacket.ReadBit(); } + +WorldPacket const* WorldPackets::Instance::RaidGroupOnly::Write() +{ + _worldPacket << Delay; + _worldPacket << Reason; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index b137afd7383..78539684865 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -125,6 +125,17 @@ namespace WorldPackets bool AcceptLock = false; }; + + class RaidGroupOnly final : public ServerPacket + { + public: + RaidGroupOnly() : ServerPacket(SMSG_RAID_GROUP_ONLY, 4 + 4) { } + + WorldPacket const* Write() override; + + int32 Delay = 0; + uint32 Reason = 0; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index b2426377dd0..396eba732ed 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1534,7 +1534,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_EMAIL_ENABLED_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_DIFFICULTY_SET, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_MARKERS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RANDOM_ROLL, STATUS_NEVER, CONNECTION_TYPE_REALM); |