mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PacketIO: Updated and enabled more LFG opcodes
This commit is contained in:
@@ -44,17 +44,21 @@ enum LfgUpdateType
|
||||
LFG_UPDATETYPE_DEFAULT = 0, // Internal Use
|
||||
LFG_UPDATETYPE_LEADER_UNK1 = 1, // FIXME: At group leave
|
||||
LFG_UPDATETYPE_ROLECHECK_ABORTED = 4,
|
||||
LFG_UPDATETYPE_JOIN_QUEUE = 5,
|
||||
LFG_UPDATETYPE_ROLECHECK_FAILED = 6,
|
||||
LFG_UPDATETYPE_REMOVED_FROM_QUEUE = 7,
|
||||
LFG_UPDATETYPE_PROPOSAL_FAILED = 8,
|
||||
LFG_UPDATETYPE_PROPOSAL_DECLINED = 9,
|
||||
LFG_UPDATETYPE_GROUP_FOUND = 10,
|
||||
LFG_UPDATETYPE_ADDED_TO_QUEUE = 12,
|
||||
LFG_UPDATETYPE_PROPOSAL_BEGIN = 13,
|
||||
LFG_UPDATETYPE_UPDATE_STATUS = 14,
|
||||
LFG_UPDATETYPE_GROUP_MEMBER_OFFLINE = 15,
|
||||
LFG_UPDATETYPE_GROUP_DISBAND_UNK16 = 16, // FIXME: Sometimes at group disband
|
||||
LFG_UPDATETYPE_JOIN_QUEUE = 6,
|
||||
LFG_UPDATETYPE_ROLECHECK_FAILED = 7,
|
||||
LFG_UPDATETYPE_REMOVED_FROM_QUEUE = 8,
|
||||
LFG_UPDATETYPE_PROPOSAL_FAILED = 9,
|
||||
LFG_UPDATETYPE_PROPOSAL_DECLINED = 10,
|
||||
LFG_UPDATETYPE_GROUP_FOUND = 11,
|
||||
LFG_UPDATETYPE_ADDED_TO_QUEUE = 13,
|
||||
LFG_UPDATETYPE_PROPOSAL_BEGIN = 14,
|
||||
LFG_UPDATETYPE_UPDATE_STATUS = 15,
|
||||
LFG_UPDATETYPE_GROUP_MEMBER_OFFLINE = 16,
|
||||
LFG_UPDATETYPE_GROUP_DISBAND_UNK16 = 17, // FIXME: Sometimes at group disband
|
||||
LFG_UPDATETYPE_JOIN_QUEUE_INITIAL = 24,
|
||||
LFG_UPDATETYPE_DUNGEON_FINISHED = 25,
|
||||
LFG_UPDATETYPE_PARTY_ROLE_NOT_AVAILABLE = 43,
|
||||
LFG_UPDATETYPE_JOIN_LFG_OBJECT_FAILED = 45,
|
||||
};
|
||||
|
||||
enum LfgState
|
||||
|
||||
@@ -286,7 +286,7 @@ void LFGMgr::Update(uint32 diff)
|
||||
RestoreState(guid, "Remove Obsolete RoleCheck");
|
||||
SendLfgRoleCheckUpdate(guid, roleCheck);
|
||||
if (guid == roleCheck.leader)
|
||||
SendLfgJoinResult(guid, LfgJoinResultData(LFG_JOIN_FAILED, LFG_ROLECHECK_MISSING_ROLE));
|
||||
SendLfgJoinResult(guid, LfgJoinResultData(LFG_JOIN_ROLE_CHECK_FAILED, LFG_ROLECHECK_MISSING_ROLE));
|
||||
}
|
||||
|
||||
RestoreState(itRoleCheck->first, "Remove Obsolete RoleCheck");
|
||||
@@ -343,10 +343,10 @@ void LFGMgr::Update(uint32 diff)
|
||||
if (uint64 gguid = GetGroup(guid))
|
||||
{
|
||||
SetState(gguid, LFG_STATE_PROPOSAL);
|
||||
SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)), true);
|
||||
}
|
||||
else
|
||||
SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_PROPOSAL_BEGIN, GetSelectedDungeons(guid), GetComment(guid)), false);
|
||||
SendLfgUpdateProposal(guid, proposal);
|
||||
}
|
||||
|
||||
@@ -495,7 +495,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
|
||||
if (Player* plrg = itr->GetSource())
|
||||
{
|
||||
if (!plrg->GetSession()->HasPermission(RBAC_PERM_JOIN_DUNGEON_FINDER))
|
||||
joinData.result = LFG_JOIN_PARTY_NOT_MEET_REQS;
|
||||
joinData.result = LFG_JOIN_INTERNAL_ERROR;
|
||||
if (plrg->HasAura(LFG_SPELL_DUNGEON_DESERTER))
|
||||
joinData.result = LFG_JOIN_PARTY_DESERTER;
|
||||
else if (plrg->HasAura(LFG_SPELL_DUNGEON_COOLDOWN))
|
||||
@@ -558,7 +558,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
|
||||
// if we have lockmap then there are no compatible dungeons
|
||||
GetCompatibleDungeons(dungeons, players, joinData.lockmap);
|
||||
if (dungeons.empty())
|
||||
joinData.result = grp ? LFG_JOIN_PARTY_NOT_MEET_REQS : LFG_JOIN_NOT_MEET_REQS;
|
||||
joinData.result = grp ? LFG_JOIN_INTERNAL_ERROR : LFG_JOIN_NOT_MEET_REQS;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -605,7 +605,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
|
||||
if (Player* plrg = itr->GetSource())
|
||||
{
|
||||
uint64 pguid = plrg->GetGUID();
|
||||
plrg->GetSession()->SendLfgUpdateParty(updateData);
|
||||
plrg->GetSession()->SendLfgUpdateStatus(updateData, true);
|
||||
SetState(pguid, LFG_STATE_ROLECHECK);
|
||||
if (!isContinue)
|
||||
SetSelectedDungeons(pguid, dungeons);
|
||||
@@ -636,7 +636,7 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
|
||||
}
|
||||
// Send update to player
|
||||
player->GetSession()->SendLfgJoinResult(joinData);
|
||||
player->GetSession()->SendLfgUpdatePlayer(LfgUpdateData(LFG_UPDATETYPE_JOIN_QUEUE, dungeons, comment));
|
||||
player->GetSession()->SendLfgUpdateStatus(LfgUpdateData(LFG_UPDATETYPE_JOIN_QUEUE, dungeons, comment), false);
|
||||
SetState(gguid, LFG_STATE_QUEUED);
|
||||
SetRoles(guid, roles);
|
||||
debugNames.append(player->GetName());
|
||||
@@ -675,14 +675,14 @@ void LFGMgr::LeaveLfg(uint64 guid)
|
||||
for (LfgGuidSet::const_iterator it = players.begin(); it != players.end(); ++it)
|
||||
{
|
||||
SetState(*it, LFG_STATE_NONE);
|
||||
SendLfgUpdateParty(*it, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE));
|
||||
SendLfgUpdateStatus(*it, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LFGQueue& queue = GetQueue(guid);
|
||||
queue.RemoveFromQueue(guid);
|
||||
SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), false);
|
||||
SetState(guid, LFG_STATE_NONE);
|
||||
}
|
||||
break;
|
||||
@@ -771,6 +771,10 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /*
|
||||
else
|
||||
dungeons = roleCheck.dungeons;
|
||||
|
||||
LfgJoinResult joinResult = LFG_JOIN_FAILED;
|
||||
if (roleCheck.state == LFG_ROLECHECK_MISSING_ROLE || roleCheck.state == LFG_ROLECHECK_WRONG_ROLES)
|
||||
joinResult = LFG_JOIN_ROLE_CHECK_FAILED;
|
||||
|
||||
LfgJoinResultData joinData = LfgJoinResultData(LFG_JOIN_FAILED, roleCheck.state);
|
||||
for (LfgRolesMap::const_iterator it = roleCheck.roles.begin(); it != roleCheck.roles.end(); ++it)
|
||||
{
|
||||
@@ -787,12 +791,12 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /*
|
||||
case LFG_ROLECHECK_FINISHED:
|
||||
SetState(pguid, LFG_STATE_QUEUED);
|
||||
SetRoles(pguid, it->second);
|
||||
SendLfgUpdateParty(pguid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid)));
|
||||
SendLfgUpdateStatus(pguid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, dungeons, GetComment(pguid)), true);
|
||||
break;
|
||||
default:
|
||||
if (roleCheck.leader == pguid)
|
||||
SendLfgJoinResult(pguid, joinData);
|
||||
SendLfgUpdateParty(pguid, LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED));
|
||||
SendLfgUpdateStatus(pguid, LfgUpdateData(LFG_UPDATETYPE_ROLECHECK_FAILED), true);
|
||||
RestoreState(pguid, "Rolecheck Failed");
|
||||
break;
|
||||
}
|
||||
@@ -1056,16 +1060,16 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
|
||||
if (gguid)
|
||||
{
|
||||
waitTime = int32((joinTime - queue.GetJoinTime(gguid)) / IN_MILLISECONDS);
|
||||
SendLfgUpdateParty(pguid, updateData);
|
||||
SendLfgUpdateStatus(pguid, updateData, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
waitTime = int32((joinTime - queue.GetJoinTime(pguid)) / IN_MILLISECONDS);
|
||||
SendLfgUpdatePlayer(pguid, updateData);
|
||||
SendLfgUpdateStatus(pguid, updateData, false);
|
||||
}
|
||||
updateData.updateType = LFG_UPDATETYPE_REMOVED_FROM_QUEUE;
|
||||
SendLfgUpdatePlayer(pguid, updateData);
|
||||
SendLfgUpdateParty(pguid, updateData);
|
||||
SendLfgUpdateStatus(pguid, updateData, true);
|
||||
SendLfgUpdateStatus(pguid, updateData, false);
|
||||
|
||||
// Update timers
|
||||
uint8 role = GetRoles(pguid);
|
||||
@@ -1157,10 +1161,10 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate
|
||||
if (gguid != guid)
|
||||
{
|
||||
RestoreState(it->second.group, "Proposal Fail (someone in group didn't accepted)");
|
||||
SendLfgUpdateParty(guid, updateData);
|
||||
SendLfgUpdateStatus(guid, updateData, true);
|
||||
}
|
||||
else
|
||||
SendLfgUpdatePlayer(guid, updateData);
|
||||
SendLfgUpdateStatus(guid, updateData, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1169,10 +1173,10 @@ void LFGMgr::RemoveProposal(LfgProposalContainer::iterator itProposal, LfgUpdate
|
||||
if (gguid != guid)
|
||||
{
|
||||
SetState(gguid, LFG_STATE_QUEUED);
|
||||
SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)), true);
|
||||
}
|
||||
else
|
||||
SendLfgUpdatePlayer(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_ADDED_TO_QUEUE, GetSelectedDungeons(guid), GetComment(guid)), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1733,7 +1737,7 @@ void LFGMgr::RemoveGroupData(uint64 guid)
|
||||
if (state != LFG_STATE_PROPOSAL)
|
||||
{
|
||||
SetState(*it, LFG_STATE_NONE);
|
||||
SendLfgUpdateParty(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE));
|
||||
SendLfgUpdateStatus(guid, LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE), true);
|
||||
}
|
||||
}
|
||||
GroupsStore.erase(it);
|
||||
@@ -1813,16 +1817,10 @@ void LFGMgr::SendLfgRoleCheckUpdate(uint64 guid, LfgRoleCheck const& roleCheck)
|
||||
player->GetSession()->SendLfgRoleCheckUpdate(roleCheck);
|
||||
}
|
||||
|
||||
void LFGMgr::SendLfgUpdatePlayer(uint64 guid, LfgUpdateData const& data)
|
||||
void LFGMgr::SendLfgUpdateStatus(uint64 guid, LfgUpdateData const& data, bool party)
|
||||
{
|
||||
if (Player* player = ObjectAccessor::FindPlayer(guid))
|
||||
player->GetSession()->SendLfgUpdatePlayer(data);
|
||||
}
|
||||
|
||||
void LFGMgr::SendLfgUpdateParty(uint64 guid, LfgUpdateData const& data)
|
||||
{
|
||||
if (Player* player = ObjectAccessor::FindPlayer(guid))
|
||||
player->GetSession()->SendLfgUpdateParty(data);
|
||||
player->GetSession()->SendLfgUpdateStatus(data, party);
|
||||
}
|
||||
|
||||
void LFGMgr::SendLfgJoinResult(uint64 guid, LfgJoinResultData const& data)
|
||||
@@ -1854,18 +1852,22 @@ bool LFGMgr::IsLfgGroup(uint64 guid)
|
||||
return guid && IS_GROUP_GUID(guid) && GroupsStore[guid].IsLfgGroup();
|
||||
}
|
||||
|
||||
LFGQueue& LFGMgr::GetQueue(uint64 guid)
|
||||
uint8 LFGMgr::GetQueueId(uint64 guid)
|
||||
{
|
||||
uint8 queueId = 0;
|
||||
if (IS_GROUP_GUID(guid))
|
||||
{
|
||||
LfgGuidSet const& players = GetPlayers(guid);
|
||||
uint64 pguid = players.empty() ? 0 : (*players.begin());
|
||||
if (pguid)
|
||||
queueId = GetTeam(pguid);
|
||||
return GetTeam(pguid);
|
||||
}
|
||||
else
|
||||
queueId = GetTeam(guid);
|
||||
|
||||
return GetTeam(guid);
|
||||
}
|
||||
|
||||
LFGQueue& LFGMgr::GetQueue(uint64 guid)
|
||||
{
|
||||
uint8 queueId = GetQueueId(guid);
|
||||
return QueuesStore[queueId];
|
||||
}
|
||||
|
||||
@@ -1880,6 +1882,12 @@ bool LFGMgr::AllQueued(LfgGuidList const& check)
|
||||
return true;
|
||||
}
|
||||
|
||||
time_t LFGMgr::GetQueueJoinTime(uint64 guid)
|
||||
{
|
||||
LFGQueue& queue = GetQueue(guid);
|
||||
return queue.GetJoinTime(guid);
|
||||
}
|
||||
|
||||
// Only for debugging purposes
|
||||
void LFGMgr::Clean()
|
||||
{
|
||||
|
||||
@@ -94,23 +94,24 @@ enum LfgTeleportError
|
||||
enum LfgJoinResult
|
||||
{
|
||||
// 3 = No client reaction | 18 = "Rolecheck failed"
|
||||
LFG_JOIN_OK = 0, // Joined (no client msg)
|
||||
LFG_JOIN_FAILED = 1, // RoleCheck Failed
|
||||
LFG_JOIN_GROUPFULL = 2, // Your group is full
|
||||
LFG_JOIN_INTERNAL_ERROR = 4, // Internal LFG Error
|
||||
LFG_JOIN_NOT_MEET_REQS = 5, // You do not meet the requirements for the chosen dungeons
|
||||
LFG_JOIN_PARTY_NOT_MEET_REQS = 6, // One or more party members do not meet the requirements for the chosen dungeons
|
||||
LFG_JOIN_MIXED_RAID_DUNGEON = 7, // You cannot mix dungeons, raids, and random when picking dungeons
|
||||
LFG_JOIN_MULTI_REALM = 8, // The dungeon you chose does not support players from multiple realms
|
||||
LFG_JOIN_DISCONNECTED = 9, // One or more party members are pending invites or disconnected
|
||||
LFG_JOIN_PARTY_INFO_FAILED = 10, // Could not retrieve information about some party members
|
||||
LFG_JOIN_DUNGEON_INVALID = 11, // One or more dungeons was not valid
|
||||
LFG_JOIN_DESERTER = 12, // You can not queue for dungeons until your deserter debuff wears off
|
||||
LFG_JOIN_PARTY_DESERTER = 13, // One or more party members has a deserter debuff
|
||||
LFG_JOIN_RANDOM_COOLDOWN = 14, // You can not queue for random dungeons while on random dungeon cooldown
|
||||
LFG_JOIN_PARTY_RANDOM_COOLDOWN = 15, // One or more party members are on random dungeon cooldown
|
||||
LFG_JOIN_TOO_MUCH_MEMBERS = 16, // You can not enter dungeons with more that 5 party members
|
||||
LFG_JOIN_USING_BG_SYSTEM = 17 // You can not use the dungeon system while in BG or arenas
|
||||
LFG_JOIN_OK = 0x00, // Joined (no client msg)
|
||||
LFG_JOIN_FAILED = 0x1B, // RoleCheck Failed
|
||||
LFG_JOIN_GROUPFULL = 0x1C, // Your group is full
|
||||
LFG_JOIN_INTERNAL_ERROR = 0x1E, // Internal LFG Error
|
||||
LFG_JOIN_NOT_MEET_REQS = 0x1F, // You do not meet the requirements for the chosen dungeons
|
||||
//LFG_JOIN_PARTY_NOT_MEET_REQS = 6, // One or more party members do not meet the requirements for the chosen dungeons
|
||||
LFG_JOIN_MIXED_RAID_DUNGEON = 0x20, // You cannot mix dungeons, raids, and random when picking dungeons
|
||||
LFG_JOIN_MULTI_REALM = 0x21, // The dungeon you chose does not support players from multiple realms
|
||||
LFG_JOIN_DISCONNECTED = 0x22, // One or more party members are pending invites or disconnected
|
||||
LFG_JOIN_PARTY_INFO_FAILED = 0x23, // Could not retrieve information about some party members
|
||||
LFG_JOIN_DUNGEON_INVALID = 0x24, // One or more dungeons was not valid
|
||||
LFG_JOIN_DESERTER = 0x25, // You can not queue for dungeons until your deserter debuff wears off
|
||||
LFG_JOIN_PARTY_DESERTER = 0x26, // One or more party members has a deserter debuff
|
||||
LFG_JOIN_RANDOM_COOLDOWN = 0x27, // You can not queue for random dungeons while on random dungeon cooldown
|
||||
LFG_JOIN_PARTY_RANDOM_COOLDOWN = 0x28, // One or more party members are on random dungeon cooldown
|
||||
LFG_JOIN_TOO_MUCH_MEMBERS = 0x29, // You can not enter dungeons with more that 5 party members
|
||||
LFG_JOIN_USING_BG_SYSTEM = 0x2A, // You can not use the dungeon system while in BG or arenas
|
||||
LFG_JOIN_ROLE_CHECK_FAILED = 0x2B // Role check failed, client shows special error
|
||||
};
|
||||
|
||||
/// Role check states
|
||||
@@ -157,7 +158,7 @@ struct LfgJoinResultData
|
||||
LfgLockPartyMap lockmap;
|
||||
};
|
||||
|
||||
// Data needed by SMSG_LFG_UPDATE_PARTY and SMSG_LFG_UPDATE_PLAYER
|
||||
// Data needed by SMSG_LFG_UPDATE_STATUS
|
||||
struct LfgUpdateData
|
||||
{
|
||||
LfgUpdateData(LfgUpdateType _type = LFG_UPDATETYPE_DEFAULT): updateType(_type), state(LFG_STATE_NONE), comment("") { }
|
||||
@@ -409,8 +410,12 @@ class LFGMgr
|
||||
uint8 GetPlayerCount(uint64 guid);
|
||||
/// Add a new Proposal
|
||||
uint32 AddProposal(LfgProposal& proposal);
|
||||
/// Returns queue id
|
||||
uint8 GetQueueId(uint64 guid);
|
||||
/// Checks if all players are queued
|
||||
bool AllQueued(LfgGuidList const& check);
|
||||
/// Gets queue join time
|
||||
time_t GetQueueJoinTime(uint64 guid);
|
||||
/// Checks if given roles match, modifies given roles map with new roles
|
||||
static bool CheckGroupRoles(LfgRolesMap &groles, bool removeLeaderFlag = true);
|
||||
/// Checks if given players are ignoring each other
|
||||
@@ -437,7 +442,8 @@ class LFGMgr
|
||||
void MakeNewGroup(LfgProposal const& proposal);
|
||||
|
||||
// Generic
|
||||
LFGQueue &GetQueue(uint64 guid);
|
||||
LFGQueue& GetQueue(uint64 guid);
|
||||
|
||||
LfgDungeonSet const& GetDungeonsByRandom(uint32 randomdungeon);
|
||||
LfgType GetDungeonType(uint32 dungeon);
|
||||
|
||||
@@ -445,8 +451,7 @@ class LFGMgr
|
||||
void SendLfgJoinResult(uint64 guid, LfgJoinResultData const& data);
|
||||
void SendLfgRoleChosen(uint64 guid, uint64 pguid, uint8 roles);
|
||||
void SendLfgRoleCheckUpdate(uint64 guid, LfgRoleCheck const& roleCheck);
|
||||
void SendLfgUpdateParty(uint64 guid, LfgUpdateData const& data);
|
||||
void SendLfgUpdatePlayer(uint64 guid, LfgUpdateData const& data);
|
||||
void SendLfgUpdateStatus(uint64 guid, LfgUpdateData const& data, bool party);
|
||||
void SendLfgUpdateProposal(uint64 guid, LfgProposal const& proposal);
|
||||
|
||||
LfgGuidSet const& GetPlayers(uint64 guid);
|
||||
|
||||
@@ -197,7 +197,7 @@ void LFGGroupScript::OnRemoveMember(Group* group, uint64 guid, RemoveMethod meth
|
||||
//else if (state == LFG_STATE_BOOT)
|
||||
// Update internal kick cooldown of kicked
|
||||
|
||||
player->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_LEADER_UNK1));
|
||||
player->GetSession()->SendLfgUpdateStatus(LfgUpdateData(LFG_UPDATETYPE_LEADER_UNK1), true);
|
||||
if (isLFG && player->GetMap()->IsDungeon()) // Teleport player out the dungeon
|
||||
sLFGMgr->TeleportPlayer(player, true);
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType;
|
||||
struct ObjectGuid
|
||||
{
|
||||
public:
|
||||
ObjectGuid() { _data.u64 = 0LL; }
|
||||
ObjectGuid() { _data.u64 = UI64LIT(0); }
|
||||
ObjectGuid(uint64 guid) { _data.u64 = guid; }
|
||||
ObjectGuid(ObjectGuid const& other) { _data.u64 = other._data.u64; }
|
||||
|
||||
|
||||
@@ -89,12 +89,15 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket& recvData)
|
||||
return;
|
||||
}
|
||||
|
||||
uint8 numDungeons;
|
||||
uint32 roles;
|
||||
|
||||
recvData >> roles;
|
||||
recvData.read_skip<uint16>(); // uint8 (always 0) - uint8 (always 0)
|
||||
recvData >> numDungeons;
|
||||
for (int32 i = 0; i < 3; ++i)
|
||||
recvData.read_skip<uint32>();
|
||||
|
||||
uint32 commentLen = recvData.ReadBits(9);
|
||||
uint32 numDungeons = recvData.ReadBits(24);
|
||||
|
||||
if (!numDungeons)
|
||||
{
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "CMSG_LFG_JOIN %s no dungeons selected", GetPlayerInfo().c_str());
|
||||
@@ -102,41 +105,63 @@ void WorldSession::HandleLfgJoinOpcode(WorldPacket& recvData)
|
||||
return;
|
||||
}
|
||||
|
||||
std::string comment = recvData.ReadString(commentLen);
|
||||
|
||||
lfg::LfgDungeonSet newDungeons;
|
||||
for (int8 i = 0; i < numDungeons; ++i)
|
||||
for (uint32 i = 0; i < numDungeons; ++i)
|
||||
{
|
||||
uint32 dungeon;
|
||||
recvData >> dungeon;
|
||||
newDungeons.insert((dungeon & 0x00FFFFFF)); // remove the type from the dungeon entry
|
||||
}
|
||||
|
||||
recvData.read_skip<uint32>(); // for 0..uint8 (always 3) { uint8 (always 0) }
|
||||
|
||||
std::string comment;
|
||||
recvData >> comment;
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "CMSG_LFG_JOIN %s roles: %u, Dungeons: %u, Comment: %s",
|
||||
GetPlayerInfo().c_str(), roles, uint8(newDungeons.size()), comment.c_str());
|
||||
|
||||
sLFGMgr->JoinLfg(GetPlayer(), uint8(roles), newDungeons, comment);
|
||||
}
|
||||
|
||||
void WorldSession::HandleLfgLeaveOpcode(WorldPacket& /*recvData*/)
|
||||
void WorldSession::HandleLfgLeaveOpcode(WorldPacket& recvData)
|
||||
{
|
||||
ObjectGuid leaveGuid;
|
||||
Group* group = GetPlayer()->GetGroup();
|
||||
uint64 guid = GetPlayer()->GetGUID();
|
||||
uint64 gguid = group ? group->GetGUID() : guid;
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "CMSG_LFG_LEAVE %s in group: %u",
|
||||
GetPlayerInfo().c_str(), group ? 1 : 0);
|
||||
recvData.read_skip<uint32>(); // Always 8
|
||||
recvData.read_skip<uint32>(); // Join date
|
||||
recvData.read_skip<uint32>(); // Always 3
|
||||
recvData.read_skip<uint32>(); // Queue Id
|
||||
|
||||
leaveGuid[4] = recvData.ReadBit();
|
||||
leaveGuid[5] = recvData.ReadBit();
|
||||
leaveGuid[0] = recvData.ReadBit();
|
||||
leaveGuid[6] = recvData.ReadBit();
|
||||
leaveGuid[2] = recvData.ReadBit();
|
||||
leaveGuid[7] = recvData.ReadBit();
|
||||
leaveGuid[1] = recvData.ReadBit();
|
||||
leaveGuid[3] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(leaveGuid[7]);
|
||||
recvData.ReadByteSeq(leaveGuid[4]);
|
||||
recvData.ReadByteSeq(leaveGuid[3]);
|
||||
recvData.ReadByteSeq(leaveGuid[2]);
|
||||
recvData.ReadByteSeq(leaveGuid[6]);
|
||||
recvData.ReadByteSeq(leaveGuid[0]);
|
||||
recvData.ReadByteSeq(leaveGuid[1]);
|
||||
recvData.ReadByteSeq(leaveGuid[5]);
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "CMSG_LFG_LEAVE %s in group: %u sent guid " UI64FMTD ".",
|
||||
GetPlayerInfo().c_str(), group ? 1 : 0, uint64(leaveGuid));
|
||||
|
||||
// Check cheating - only leader can leave the queue
|
||||
if (!group || group->GetLeaderGUID() == GetPlayer()->GetGUID())
|
||||
if (!group || group->GetLeaderGUID() == guid)
|
||||
sLFGMgr->LeaveLfg(gguid);
|
||||
}
|
||||
|
||||
void WorldSession::HandleLfgProposalResultOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 lfgGroupID; // Internal lfgGroupID
|
||||
uint32 lfgGroupID; // Internal lfgGroupID
|
||||
bool accept; // Accept to join?
|
||||
recvData >> lfgGroupID;
|
||||
recvData >> accept;
|
||||
@@ -242,57 +267,36 @@ void WorldSession::SendLfgPlayerLockInfo()
|
||||
}
|
||||
}
|
||||
|
||||
if (quest)
|
||||
data << uint8(done);
|
||||
data << uint32(0); // currencyQuantity
|
||||
data << uint32(0); // some sort of overall cap/weekly cap
|
||||
data << uint32(0); // currencyID
|
||||
data << uint32(0); // tier1Quantity
|
||||
data << uint32(0); // tier1Limit
|
||||
data << uint32(0); // overallQuantity
|
||||
data << uint32(0); // overallLimit
|
||||
data << uint32(0); // periodPurseQuantity
|
||||
data << uint32(0); // periodPurseLimit
|
||||
data << uint32(0); // purseQuantity
|
||||
data << uint32(0); // purseLimit
|
||||
data << uint32(0); // some sort of reward for completion
|
||||
data << uint32(0); // completedEncounters
|
||||
data << uint8(0); // Call to Arms eligible
|
||||
|
||||
for (uint32 i = 0; i < 3; ++i)
|
||||
{
|
||||
uint8 rewCount = quest->GetRewItemsCount() + quest->GetRewCurrencyCount();
|
||||
|
||||
data << uint8(done);
|
||||
data << uint32(0); // currencyQuantity
|
||||
data << uint32(0); // some sort of overall cap/weekly cap
|
||||
data << uint32(0); // currencyID
|
||||
data << uint32(0); // tier1Quantity
|
||||
data << uint32(0); // tier1Limit
|
||||
data << uint32(0); // overallQuantity
|
||||
data << uint32(0); // overallLimit
|
||||
data << uint32(0); // periodPurseQuantity
|
||||
data << uint32(0); // periodPurseLimit
|
||||
data << uint32(0); // purseQuantity
|
||||
data << uint32(0); // purseLimit
|
||||
data << uint32(0); // some sort of reward for completion
|
||||
data << uint32(0); // completedEncounters
|
||||
data << uint8(0); // Call to Arms eligible
|
||||
|
||||
for (uint32 i = 0; i < 3; ++i)
|
||||
{
|
||||
data << uint32(0); // Call to Arms Role
|
||||
//if (role)
|
||||
// BuildQuestReward(data, ctaRoleQuest, GetPlayer());
|
||||
}
|
||||
|
||||
BuildQuestReward(data, quest, GetPlayer());
|
||||
data << uint32(0); // Call to Arms Role
|
||||
//if (role)
|
||||
// BuildQuestReward(data, ctaRoleQuest, GetPlayer());
|
||||
}
|
||||
|
||||
if (quest)
|
||||
BuildQuestReward(data, quest, GetPlayer());
|
||||
else
|
||||
{
|
||||
data << uint32(0); // currencyQuantity
|
||||
data << uint32(0); // some sort of overall cap/weekly cap
|
||||
data << uint32(0); // currencyID
|
||||
data << uint32(0); // tier1Quantity
|
||||
data << uint32(0); // tier1Limit
|
||||
data << uint32(0); // overallQuantity
|
||||
data << uint32(0); // overallLimit
|
||||
data << uint32(0); // periodPurseQuantity
|
||||
data << uint32(0); // periodPurseLimit
|
||||
data << uint32(0); // purseQuantity
|
||||
data << uint32(0); // purseLimit
|
||||
data << uint32(0); // some sort of reward for completion
|
||||
data << uint32(0); // completedEncounters
|
||||
data << uint8(0); // Call to Arms eligible
|
||||
data << uint32(0); // Call to Arms Role
|
||||
data << uint32(0); // Call to Arms Role
|
||||
data << uint32(0); // Call to Arms Role
|
||||
data << uint32(0);
|
||||
data << uint32(0);
|
||||
data << uint8(0);
|
||||
data << uint32(0); // Money
|
||||
data << uint32(0); // XP
|
||||
data << uint8(0); // Reward count
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,71 +358,45 @@ void WorldSession::HandleLfgGetStatus(WorldPacket& /*recvData*/)
|
||||
{
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "CMSG_LFG_GET_STATUS %s", GetPlayerInfo().c_str());
|
||||
|
||||
if (!GetPlayer()->isUsingLfg())
|
||||
return;
|
||||
|
||||
uint64 guid = GetPlayer()->GetGUID();
|
||||
lfg::LfgUpdateData updateData = sLFGMgr->GetLfgStatus(guid);
|
||||
|
||||
if (GetPlayer()->GetGroup())
|
||||
{
|
||||
SendLfgUpdateParty(updateData);
|
||||
SendLfgUpdateStatus(updateData, true);
|
||||
updateData.dungeons.clear();
|
||||
SendLfgUpdatePlayer(updateData);
|
||||
SendLfgUpdateStatus(updateData, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendLfgUpdatePlayer(updateData);
|
||||
SendLfgUpdateStatus(updateData, false);
|
||||
updateData.dungeons.clear();
|
||||
SendLfgUpdateParty(updateData);
|
||||
SendLfgUpdateStatus(updateData, true);
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::SendLfgUpdatePlayer(lfg::LfgUpdateData const& updateData)
|
||||
{
|
||||
bool queued = false;
|
||||
uint8 size = uint8(updateData.dungeons.size());
|
||||
|
||||
switch (updateData.updateType)
|
||||
{
|
||||
case lfg::LFG_UPDATETYPE_JOIN_QUEUE:
|
||||
case lfg::LFG_UPDATETYPE_ADDED_TO_QUEUE:
|
||||
queued = true;
|
||||
break;
|
||||
case lfg::LFG_UPDATETYPE_UPDATE_STATUS:
|
||||
queued = updateData.state == lfg::LFG_STATE_QUEUED;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "SMSG_LFG_UPDATE_PLAYER %s updatetype: %u",
|
||||
GetPlayerInfo().c_str(), updateData.updateType);
|
||||
WorldPacket data(SMSG_LFG_UPDATE_PLAYER, 1 + 1 + (size > 0 ? 1 : 0) * (1 + 1 + 1 + 1 + size * 4 + updateData.comment.length()));
|
||||
data << uint8(updateData.updateType); // Lfg Update type
|
||||
data << uint8(size > 0); // Extra info
|
||||
if (size)
|
||||
{
|
||||
data << uint8(queued); // Join the queue
|
||||
data << uint8(0); // unk - Always 0
|
||||
data << uint8(0); // unk - Always 0
|
||||
|
||||
data << uint8(size);
|
||||
for (lfg::LfgDungeonSet::const_iterator it = updateData.dungeons.begin(); it != updateData.dungeons.end(); ++it)
|
||||
data << uint32(*it);
|
||||
data << updateData.comment;
|
||||
}
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::SendLfgUpdateParty(const lfg::LfgUpdateData& updateData)
|
||||
void WorldSession::SendLfgUpdateStatus(lfg::LfgUpdateData const& updateData, bool party)
|
||||
{
|
||||
bool join = false;
|
||||
bool queued = false;
|
||||
uint8 size = uint8(updateData.dungeons.size());
|
||||
ObjectGuid guid = _player->GetGUID();
|
||||
time_t joinTime = sLFGMgr->GetQueueJoinTime(_player->GetGUID());
|
||||
uint32 queueId = sLFGMgr->GetQueueId(_player->GetGUID());
|
||||
|
||||
switch (updateData.updateType)
|
||||
{
|
||||
case lfg::LFG_UPDATETYPE_JOIN_QUEUE_INITIAL: // Joined queue outside the dungeon
|
||||
join = true;
|
||||
break;
|
||||
case lfg::LFG_UPDATETYPE_JOIN_QUEUE:
|
||||
case lfg::LFG_UPDATETYPE_ADDED_TO_QUEUE: // Rolecheck Success
|
||||
join = true;
|
||||
queued = true;
|
||||
// no break on purpose
|
||||
break;
|
||||
case lfg::LFG_UPDATETYPE_PROPOSAL_BEGIN:
|
||||
join = true;
|
||||
break;
|
||||
@@ -430,25 +408,44 @@ void WorldSession::SendLfgUpdateParty(const lfg::LfgUpdateData& updateData)
|
||||
break;
|
||||
}
|
||||
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "SMSG_LFG_UPDATE_PARTY %s updatetype: %u",
|
||||
GetPlayerInfo().c_str(), updateData.updateType);
|
||||
WorldPacket data(SMSG_LFG_UPDATE_PARTY, 1 + 1 + (size > 0 ? 1 : 0) * (1 + 1 + 1 + 1 + 1 + size * 4 + updateData.comment.length()));
|
||||
data << uint8(updateData.updateType); // Lfg Update type
|
||||
data << uint8(size > 0); // Extra info
|
||||
if (size)
|
||||
{
|
||||
data << uint8(join); // LFG Join
|
||||
data << uint8(queued); // Join the queue
|
||||
data << uint8(0); // unk - Always 0
|
||||
data << uint8(0); // unk - Always 0
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
data << uint8(0); // unk - Always 0
|
||||
TC_LOG_DEBUG(LOG_FILTER_LFG, "SMSG_LFG_UPDATE_STATUS %s updatetype: %u, party %s",
|
||||
GetPlayerInfo().c_str(), updateData.updateType, party ? "true" : "false");
|
||||
|
||||
WorldPacket data(SMSG_LFG_UPDATE_STATUS, 1 + 8 + 3 + 2 + 1 + updateData.comment.length() + 4 + 4 + 1 + 1 + 1 + 4 + size);
|
||||
data.WriteBit(guid[1]);
|
||||
data.WriteBit(party);
|
||||
data.WriteBits(size, 24);
|
||||
data.WriteBit(guid[6]);
|
||||
data.WriteBit(size > 0); // Extra info
|
||||
data.WriteBits(updateData.comment.length(), 9);
|
||||
data.WriteBit(guid[4]);
|
||||
data.WriteBit(guid[7]);
|
||||
data.WriteBit(guid[2]);
|
||||
data.WriteBit(join); // LFG Join
|
||||
data.WriteBit(guid[0]);
|
||||
data.WriteBit(guid[3]);
|
||||
data.WriteBit(guid[5]);
|
||||
data.WriteBit(queued); // Join the queue
|
||||
|
||||
data << uint8(updateData.updateType); // Lfg Update type
|
||||
data.WriteString(updateData.comment);
|
||||
data << uint32(queueId); // Queue Id
|
||||
data << uint32(joinTime); // Join date
|
||||
data.WriteByteSeq(guid[6]);
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
data << uint8(0); // unk - Always 0
|
||||
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data << uint32(3);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
for (lfg::LfgDungeonSet::const_iterator it = updateData.dungeons.begin(); it != updateData.dungeons.end(); ++it)
|
||||
data << uint32(*it);
|
||||
|
||||
data << uint8(size);
|
||||
for (lfg::LfgDungeonSet::const_iterator it = updateData.dungeons.begin(); it != updateData.dungeons.end(); ++it)
|
||||
data << uint32(*it);
|
||||
data << updateData.comment;
|
||||
}
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
@@ -514,6 +511,8 @@ void WorldSession::SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& roleCheck)
|
||||
void WorldSession::SendLfgJoinResult(lfg::LfgJoinResultData const& joinData)
|
||||
{
|
||||
uint32 size = 0;
|
||||
ObjectGuid guid = GetPlayer()->GetGUID();
|
||||
uint32 queueId = sLFGMgr->GetQueueId(_player->GetGUID());
|
||||
for (lfg::LfgLockPartyMap::const_iterator it = joinData.lockmap.begin(); it != joinData.lockmap.end(); ++it)
|
||||
size += 8 + 4 + uint32(it->second.size()) * (4 + 4 + 4 + 4);
|
||||
|
||||
@@ -521,10 +520,64 @@ void WorldSession::SendLfgJoinResult(lfg::LfgJoinResultData const& joinData)
|
||||
GetPlayerInfo().c_str(), joinData.result, joinData.state);
|
||||
|
||||
WorldPacket data(SMSG_LFG_JOIN_RESULT, 4 + 4 + size);
|
||||
data << uint32(joinData.result); // Check Result
|
||||
data << uint32(joinData.state); // Check Value
|
||||
if (!joinData.lockmap.empty())
|
||||
BuildPartyLockDungeonBlock(data, joinData.lockmap);
|
||||
data << uint32(3);
|
||||
data << uint8(joinData.result); // Check Result
|
||||
data << uint32(queueId); // Queue Id
|
||||
data << uint8(joinData.state); // Check Value
|
||||
data << uint32(time(NULL)); // Join date
|
||||
data.WriteBit(guid[2]);
|
||||
data.WriteBit(guid[7]);
|
||||
data.WriteBit(guid[3]);
|
||||
data.WriteBit(guid[0]);
|
||||
data.WriteBits(joinData.lockmap.size(), 24);
|
||||
for (lfg::LfgLockPartyMap::const_iterator it = joinData.lockmap.begin(); it != joinData.lockmap.end(); ++it)
|
||||
{
|
||||
ObjectGuid playerGuid = it->first;
|
||||
data.WriteBit(playerGuid[7]);
|
||||
data.WriteBit(playerGuid[5]);
|
||||
data.WriteBit(playerGuid[3]);
|
||||
data.WriteBit(playerGuid[6]);
|
||||
data.WriteBit(playerGuid[0]);
|
||||
data.WriteBit(playerGuid[2]);
|
||||
data.WriteBit(playerGuid[4]);
|
||||
data.WriteBit(playerGuid[1]);
|
||||
data.WriteBits(it->second.size(), 22);
|
||||
}
|
||||
|
||||
data.WriteBit(guid[4]);
|
||||
data.WriteBit(guid[5]);
|
||||
data.WriteBit(guid[1]);
|
||||
data.WriteBit(guid[6]);
|
||||
for (lfg::LfgLockPartyMap::const_iterator it = joinData.lockmap.begin(); it != joinData.lockmap.end(); ++it)
|
||||
{
|
||||
ObjectGuid playerGuid = it->first;
|
||||
for (lfg::LfgLockMap::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr)
|
||||
{
|
||||
data << uint32(itr->second); // Lock status
|
||||
data << uint32(0); // Current itemLevel
|
||||
data << uint32(0); // Required itemLevel
|
||||
data << uint32(itr->first); // Dungeon entry (id + type)
|
||||
}
|
||||
|
||||
data.WriteByteSeq(playerGuid[2]);
|
||||
data.WriteByteSeq(playerGuid[5]);
|
||||
data.WriteByteSeq(playerGuid[1]);
|
||||
data.WriteByteSeq(playerGuid[0]);
|
||||
data.WriteByteSeq(playerGuid[4]);
|
||||
data.WriteByteSeq(playerGuid[3]);
|
||||
data.WriteByteSeq(playerGuid[6]);
|
||||
data.WriteByteSeq(playerGuid[7]);
|
||||
}
|
||||
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data.WriteByteSeq(guid[6]);
|
||||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
|
||||
@@ -298,8 +298,8 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LEARN_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLearnTalentOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_GET_STATUS, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleLfgGetStatus );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_JOIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgJoinOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_LEAVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgLeaveOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgJoinOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLfgLeaveOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_LFR_JOIN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_LFR_LEAVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_LFG_LOCK_INFO_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleLfgGetLockInfoOpcode );
|
||||
@@ -922,7 +922,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LEVELUP_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_BOOT_PROPOSAL_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_DISABLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_JOIN_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_JOIN_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_OFFER_CONTINUE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_PARTY_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_PLAYER_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
@@ -934,7 +934,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_SLOT_INVALID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_TELEPORT_DENIED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_SEARCH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS_NONE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICANT_LIST_UPDATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
DEFINE_OPCODE_HANDLER(SMSG_LF_GUILD_APPLICATIONS_LIST_CHANGED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
@@ -1616,8 +1616,6 @@ void OpcodeTable::Initialize()
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_KICK_REASON, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_OPEN_FROM_GOSSIP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_LIST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_PARTY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LFG_UPDATE_PLAYER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LF_GUILD_SEARCH_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LOTTERY_QUERY_RESULT_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//DEFINE_OPCODE_HANDLER(SMSG_LOTTERY_RESULT_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
|
||||
@@ -995,8 +995,6 @@ enum Opcodes
|
||||
SMSG_LFG_SLOT_INVALID = 0x54B5,
|
||||
SMSG_LFG_TELEPORT_DENIED = 0x0E14,
|
||||
SMSG_LFG_UPDATE_LIST = 0x0000,
|
||||
SMSG_LFG_UPDATE_PARTY = 0x0000,
|
||||
SMSG_LFG_UPDATE_PLAYER = 0x0000,
|
||||
SMSG_LFG_UPDATE_SEARCH = 0x54A1,
|
||||
SMSG_LFG_UPDATE_STATUS = 0x31A4,
|
||||
SMSG_LFG_UPDATE_STATUS_NONE = 0x7CA1,
|
||||
|
||||
@@ -820,8 +820,7 @@ class WorldSession
|
||||
void HandleLfrLeaveOpcode(WorldPacket& recvData);
|
||||
void HandleLfgGetStatus(WorldPacket& recvData);
|
||||
|
||||
void SendLfgUpdatePlayer(lfg::LfgUpdateData const& updateData);
|
||||
void SendLfgUpdateParty(lfg::LfgUpdateData const& updateData);
|
||||
void SendLfgUpdateStatus(lfg::LfgUpdateData const& updateData, bool party);
|
||||
void SendLfgRoleChosen(uint64 guid, uint8 roles);
|
||||
void SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& pRoleCheck);
|
||||
void SendLfgLfrList(bool update);
|
||||
|
||||
Reference in New Issue
Block a user