void WorldSession::SendLfgUpdatePlayer(LFGUpdateType updateType, LFGType type) { if (!sWorld.getConfig(CONFIG_BOOL_LFR_ENABLE) && !sWorld.getConfig(CONFIG_BOOL_LFG_ENABLE)) { DEBUG_LOG("SendLfgUpdatePlayer %u failed - Dungeon finder disabled", GetPlayer()->GetObjectGuid().GetCounter()); return; } bool queued = false; bool extrainfo = false; switch(updateType) { case LFG_UPDATETYPE_JOIN_PROPOSAL: extrainfo = true; if (type != LFG_TYPE_RAID) queued = true; break; case LFG_UPDATETYPE_ADDED_TO_QUEUE: queued = true; break; //case LFG_UPDATETYPE_CLEAR_LOCK_LIST: // TODO: Sometimes has extrainfo - Check ocurrences... case LFG_UPDATETYPE_PROPOSAL_BEGIN: extrainfo = true; break; } LFGDungeonSet* dungeons = GetPlayer()->GetLFGState()->GetDungeons(); uint8 size = dungeons->size(); std::string comment = GetPlayer()->GetLFGState()->GetComment(); DEBUG_LOG("SMSG_LFG_UPDATE_PLAYER %u updatetype: %u", GetPlayer()->GetObjectGuid().GetCounter(), updateType); WorldPacket data(SMSG_LFG_UPDATE_PLAYER, 1 + 1 + (extrainfo ? 1 : 0) * (1 + 1 + 1 + 1 + size * 4 + comment.length())); data << uint8(updateType); // Lfg Update type data << uint8(extrainfo); // Extra info if (extrainfo) { data << uint8(queued); // Join the queue data << uint8(0); // unk - Always 0 data << uint8(0); // unk - Always 0 data << uint8(size); for (LFGDungeonSet::const_iterator itr = dungeons->begin(); itr != dungeons->end(); ++itr) data << uint32((*itr)->Entry()); data << comment.c_str(); } SendPacket(&data); }
void WorldSession::HandleLfgPlayerLockInfoRequestOpcode(WorldPacket &/*recv_data*/) { if (!sWorld.getConfig(CONFIG_BOOL_LFR_ENABLE) && !sWorld.getConfig(CONFIG_BOOL_LFG_ENABLE)) { DEBUG_LOG("CMSG_LFD_PLAYER_LOCK_INFO_REQUEST %u failed - Dungeon finder disabled", GetPlayer()->GetObjectGuid().GetCounter()); return; } DEBUG_LOG("CMSG_LFD_PLAYER_LOCK_INFO_REQUEST %u ", GetPlayer()->GetObjectGuid().GetCounter()); uint32 rsize = 0; uint32 lsize = 0; LFGDungeonSet randomlist = sLFGMgr.GetRandomDungeonsForPlayer(GetPlayer()); LFGLockStatusMap* lockSet = GetPlayer()->GetLFGState()->GetLockMap(); rsize = randomlist.size(); if (lockSet) lsize = lockSet->size(); WorldPacket data(SMSG_LFG_PLAYER_INFO, 1 + rsize * (4 + 1 + 4 + 4 + 4 + 4 + 1 + 4 + 4 + 4) + 4 + lsize * (1 + 4 + 4 + 4 + 4 + 1 + 4 + 4 + 4)); if (rsize == 0) { data << uint8(0); } else { uint8 done; data << uint8(rsize); // Random Dungeon count for (LFGDungeonSet::const_iterator itr = randomlist.begin(); itr != randomlist.end(); ++itr) { data << uint32((*itr)->Entry()); // Entry LFGReward const* reward = sLFGMgr.GetRandomDungeonReward(*itr,GetPlayer()); Quest const* qRew = NULL; qRew = NULL; if (reward) { qRew = sObjectMgr.GetQuestTemplate(reward->reward[0].questId); if (qRew) { done = !GetPlayer()->CanRewardQuest(qRew,false); if (done) qRew = sObjectMgr.GetQuestTemplate(reward->reward[1].questId); } } if (qRew) { data << uint8(done); data << uint32(qRew->GetRewOrReqMoney()); data << uint32(qRew->XPValue(GetPlayer())); data << uint32(reward->reward[done].variableMoney); data << uint32(reward->reward[done].variableXP); data << uint8(qRew->GetRewItemsCount()); if (qRew->GetRewItemsCount()) { ItemPrototype const* iProto = NULL; for (uint8 i = 0; i < QUEST_REWARDS_COUNT; ++i) { if (!qRew->RewItemId[i]) continue; iProto = ObjectMgr::GetItemPrototype(qRew->RewItemId[i]); data << uint32(qRew->RewItemId[i]); data << uint32(iProto ? iProto->DisplayInfoID : 0); data << uint32(qRew->RewItemCount[i]); } } } else { data << uint8(0); data << uint32(0); data << uint32(0); data << uint32(0); data << uint32(0); data << uint8(0); } } } if (!lockSet || lsize == 0) { data << uint8(0); } else { data << uint32(lockSet->size()); // Size of lock dungeons for (LFGLockStatusMap::iterator itr = lockSet->begin(); itr != lockSet->end(); ++itr) { data << uint32((*itr->first).Entry()); // Dungeon entry + type data << uint32(itr->second); // Lock status } } SendPacket(&data); }