aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2015-08-09 01:30:58 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2015-08-09 01:30:58 +0200
commit00a77230bdee8bb7e6483e77aaa8b7127b712931 (patch)
tree7caf27a73ac890d9d3cfe16c35903228f7948659
parenta2969358d9769c0d608bd349b2700811ae60631f (diff)
Core/PacketIO: Updated and enabled SMSG_RAID_GROUP_ONLY opcode
-rw-r--r--src/server/game/Entities/Player/Player.cpp25
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Maps/MapManager.cpp4
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h11
-rw-r--r--src/server/game/Server/Packets/InstancePackets.cpp8
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h11
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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);