void WorldSession::HandleLfgGetStatus(WorldPacket& /*recvData*/) { uint64 guid = GetPlayer()->GetGUID(); sLog->outDebug(LOG_FILTER_LFG, "SMSG_LFG_GET_STATUS [" UI64FMTD "]", guid); LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_UPDATE_STATUS); LfgState state = sLFGMgr->GetLfgStatus(guid, updateData); if (state == LFG_STATE_NONE || updateData.dungeons.empty()) { SendLfgUpdatePlayer(updateData); SendLfgUpdateParty(updateData); return; } if (state != LFG_STATE_QUEUED) return; if (GetPlayer()->GetGroup()) { SendLfgUpdateParty(updateData); updateData.dungeons.clear(); SendLfgUpdatePlayer(updateData); } else { SendLfgUpdatePlayer(updateData); updateData.dungeons.clear(); SendLfgUpdateParty(updateData); } }
void WorldSession::HandleLfgGetStatus(WorldPacket& /*recvData*/) { sLog->outDebug(LOG_FILTER_LFG, "CMSG_LFG_GET_STATUS %s", GetPlayerInfo().c_str()); uint64 guid = GetPlayer()->GetGUID(); LfgUpdateData updateData = sLFGMgr->GetLfgStatus(guid); if (GetPlayer()->GetGroup()) { SendLfgUpdateParty(updateData); updateData.dungeons.clear(); SendLfgUpdatePlayer(updateData); } else { SendLfgUpdatePlayer(updateData); updateData.dungeons.clear(); SendLfgUpdateParty(updateData); } }
void WorldSession::HandleLfgGetStatus(WorldPacket& /*recvData*/) { TC_LOG_DEBUG("lfg", "CMSG_LFG_GET_STATUS %s", GetPlayerInfo().c_str()); ObjectGuid guid = GetPlayer()->GetGUID(); lfg::LfgUpdateData updateData = sLFGMgr->GetLfgStatus(guid); if (GetPlayer()->GetGroup()) { SendLfgUpdateParty(updateData); updateData.dungeons.clear(); SendLfgUpdatePlayer(updateData); } else { SendLfgUpdatePlayer(updateData); updateData.dungeons.clear(); SendLfgUpdateParty(updateData); } }
void WorldSession::HandleLfgGetStatus(WorldPacket& /*recvData*/) { sLog.outDebug("CMSG_LFG_GET_STATUS %s", _player->GetGuidStr().c_str()); ObjectGuid guid = _player->GetObjectGuid(); LfgUpdateData updateData = sLFGMgr.GetLfgStatus(guid); if (_player->GetGroup()) { SendLfgUpdateParty(updateData); updateData.dungeons.clear(); SendLfgUpdatePlayer(updateData); } else { SendLfgUpdatePlayer(updateData); updateData.dungeons.clear(); SendLfgUpdateParty(updateData); } }
void WorldSession::HandleGroupAcceptOpcode(WorldPacket & /*recv_data*/) { Group *group = GetPlayer()->GetGroupInvite(); if (!group) return; if (group->GetLeaderGUID() == GetPlayer()->GetGUID()) { sLog.outError("HandleGroupAcceptOpcode: player %s(%d) tried to accept an invite to his own group", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow()); return; } // remove in from ivites in any case group->RemoveInvite(GetPlayer()); /** error handling **/ /********************/ // not have place if (group->IsFull()) { SendPartyResult(PARTY_OP_INVITE, "", ERR_GROUP_FULL); return; } Player* leader = objmgr.GetPlayer(group->GetLeaderGUID()); // forming a new group, create it if (!group->IsCreated()) { if (leader) group->RemoveInvite(leader); group->Create(group->GetLeaderGUID(), group->GetLeaderName()); objmgr.AddGroup(group); } // everything's fine, do it, PLAYER'S GROUP IS SET IN ADDMEMBER!!! if (!group->AddMember(GetPlayer()->GetGUID(), GetPlayer()->GetName())) return; SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) if (Player *plrg = itr->getSource()) { plrg->GetSession()->SendLfgUpdatePlayer(LFG_UPDATETYPE_CLEAR_LOCK_LIST); plrg->GetSession()->SendLfgUpdateParty(LFG_UPDATETYPE_CLEAR_LOCK_LIST); } group->BroadcastGroupUpdate(); }
void WorldSession::HandleGroupInviteOpcode(WorldPacket & recv_data) { std::string membername; recv_data >> membername; // attempt add selected player // cheating if (!normalizePlayerName(membername)) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_BAD_PLAYER_NAME_S); return; } Player *player = objmgr.GetPlayer(membername.c_str()); // no player if (!player) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_BAD_PLAYER_NAME_S); return; } // restrict invite to GMs if (!sWorld.getConfig(CONFIG_ALLOW_GM_GROUP) && !GetPlayer()->isGameMaster() && player->isGameMaster()) return; // can't group with if (!sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && GetPlayer()->GetTeam() != player->GetTeam()) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_PLAYER_WRONG_FACTION); return; } if (GetPlayer()->GetInstanceId() != 0 && player->GetInstanceId() != 0 && GetPlayer()->GetInstanceId() != player->GetInstanceId() && GetPlayer()->GetMapId() == player->GetMapId()) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_TARGET_NOT_IN_INSTANCE_S); return; } // just ignore us if (player->GetInstanceId() != 0 && player->GetDungeonDifficulty() != GetPlayer()->GetDungeonDifficulty()) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_IGNORING_YOU_S); return; } if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_IGNORING_YOU_S); return; } Group *group = GetPlayer()->GetGroup(); if (group && group->isBGGroup()) group = GetPlayer()->GetOriginalGroup(); Group *group2 = player->GetGroup(); if (group2 && group2->isBGGroup()) group2 = player->GetOriginalGroup(); // player already in another group or invited if (group2 || player->GetGroupInvite()) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_ALREADY_IN_GROUP_S); if (group2) { // tell the player that they were invited but it failed as they were already in a group WorldPacket data(SMSG_GROUP_INVITE, 10); // guess size data << uint8(0); // invited/already in group flag data << GetPlayer()->GetName(); // max len 48 data << uint32(0); // unk data << uint8(0); // count data << uint32(0); // unk player->GetSession()->SendPacket(&data); } return; } if (group) { // not have permissions for invite if (!group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) { SendPartyResult(PARTY_OP_INVITE, "", ERR_NOT_LEADER); return; } // not have place if (group->IsFull()) { SendPartyResult(PARTY_OP_INVITE, "", ERR_GROUP_FULL); return; } } // ok, but group not exist, start a new group // but don't create and save the group to the DB until // at least one person joins if (!group) { group = new Group; // new group: if can't add then delete if (!group->AddLeaderInvite(GetPlayer())) { delete group; return; } if (!group->AddInvite(player)) { delete group; return; } } else { // already existed group: if can't add then just leave if (!group->AddInvite(player)) { return; } } // ok, we do it WorldPacket data(SMSG_GROUP_INVITE, 10); // guess size data << uint8(1); // invited/already in group flag data << GetPlayer()->GetName(); // max len 48 data << uint32(0); // unk data << uint8(0); // count data << uint32(0); // unk player->GetSession()->SendPacket(&data); SendLfgUpdatePlayer(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); SendLfgUpdateParty(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); SendPartyResult(PARTY_OP_INVITE, membername, ERR_PARTY_RESULT_OK); }