Core/PacketIO: Updated and enabled SMSG_RAID_GROUP_ONLY opcode

This commit is contained in:
Vincent-Michael
2015-08-09 01:30:58 +02:00
parent a2969358d9
commit 00a77230bd
7 changed files with 41 additions and 21 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -85,3 +85,11 @@ void WorldPackets::Instance::InstanceLockResponse::Read()
{
AcceptLock = _worldPacket.ReadBit();
}
WorldPacket const* WorldPackets::Instance::RaidGroupOnly::Write()
{
_worldPacket << Delay;
_worldPacket << Reason;
return &_worldPacket;
}

View File

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

View File

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