void NFCPVPMatchModule::ProcessSingePlayerRoom() { NFGUID xSelf; for (int nPVPMode = 0; nPVPMode < EPVPMODE::EPVPMODE_THREE; nPVPMode++) { for (int nGrade = 0; nGrade < EPVPDEFINE_MAXGRADE; nGrade++) { const int nHavePlayer = m_pPVPMatchRedisModule->GetSinglePlayerCount(xSelf, nPVPMode, nGrade); const int nNeedPlayer = 2 * GetMemberCount(nPVPMode); if (nNeedPlayer > nHavePlayer) { continue;; } std::vector<NFGUID> xRedPlayer; std::vector<NFGUID> xBluePlayer; m_pPVPMatchRedisModule->PopSinglePlayerList(nPVPMode, nGrade, GetMemberCount(nPVPMode), xRedPlayer); m_pPVPMatchRedisModule->PopSinglePlayerList(nPVPMode, nGrade, GetMemberCount(nPVPMode), xBluePlayer); NFGUID xRoomID = CreateRoom(xSelf, nPVPMode, nGrade); PlayerListEnterRoom(xRedPlayer, EPVPREDORBLUE_RED, xRoomID); PlayerListEnterRoom(xBluePlayer, EPVPREDORBLUE_BULE, xRoomID); } } }
NFGUID NFCPVPMatchModule::CreateRoom(const NFGUID& self, const int nPVPMode, const int nGrade) { NFGUID xRoomID = m_pKernelModule->CreateGUID(); if (xRoomID.IsNull()) { return NFGUID(); } NFMsg::PVPRoomInfo xRoomInfo; xRoomInfo.set_ncellstatus(0); *xRoomInfo.mutable_roomid() = NFINetModule::NFToPB(xRoomID); xRoomInfo.set_npvpmode(nPVPMode); xRoomInfo.set_npvpgrade(nGrade); int nPVPModeMaxMember = GetMemberCount(nPVPMode); if (nPVPModeMaxMember < 0) { return NFGUID(); } xRoomInfo.set_maxpalyer(nPVPModeMaxMember); if (!m_pPVPMatchRedisModule->SetRoomInfo(xRoomID, xRoomInfo)) { return NFGUID(); } return xRoomID; }
bool MMatchClan::CheckLifePeriod() { if (GetMemberCount() > 0) return true; if (m_nEmptyPeriod < MTICK_CLAN_EMPTY_PERIOD_LIMIT) return true; return false; }
// } ===== end morkNode methods ===== // ````` ````` ````` ````` ````` // { ----- begin attribute methods ----- /*virtual*/ nsresult morkTableRowCursor::GetCount(nsIMdbEnv* mev, mdb_count* outCount) { nsresult outErr = NS_OK; mdb_count count = 0; morkEnv* ev = morkEnv::FromMdbEnv(mev); if (ev) { count = GetMemberCount(ev); outErr = ev->AsErr(); } if (outCount) *outCount = count; return outErr; }
void MMatchClan::Tick(u64 nClock) { m_nDBRefreshLifeTime += MTICK_CLAN_RUN; if (m_nDBRefreshLifeTime >= MTICK_CLAN_DBREFRESH_PERIOD_LIMIT) { InitClanInfoFromDB(); m_nDBRefreshLifeTime = 0; } m_SmartRefresh.UpdateCategory(nClock); if (GetMemberCount() <= 0) m_nEmptyPeriod += MTICK_CLAN_RUN; else m_nEmptyPeriod = 0; }
void CParty::P2PQuit(DWORD dwPID) { TMemberMap::iterator it = m_memberMap.find(dwPID); if (it == m_memberMap.end()) return; if (m_bPCParty) SendPartyRemoveOneToAll(dwPID); if (it == m_itNextOwner) IncreaseOwnership(); if (m_bPCParty) RemoveBonusForOne(dwPID); LPCHARACTER ch = it->second.pCharacter; BYTE bRole = it->second.bRole; m_memberMap.erase(it); sys_log(2, "PARTY[%d] MemberCountChange %d -> %d", GetLeaderPID(), GetMemberCount(), GetMemberCount() - 1); if (bRole < PARTY_ROLE_MAX_NUM) { --m_anRoleCount[bRole]; } else { sys_err("ROLE_COUNT_QUIT_ERROR: INDEX(%d) > MAX(%d)", bRole, PARTY_ROLE_MAX_NUM); } if (ch) { ch->SetParty(NULL); ComputeRolePoint(ch, bRole, false); } if (m_bPCParty) CPartyManager::instance().SetPartyMember(dwPID, NULL); // 리더가 나가면 파티는 해산되어야 한다. if (bRole == PARTY_ROLE_LEADER) CPartyManager::instance().DeleteParty(this); // 이 아래는 코드를 추가하지 말 것!!! 위 DeleteParty 하면 this는 없다. }
void CParty::P2PQuit(DWORD dwPID) { TMemberMap::iterator it = m_memberMap.find(dwPID); if (it == m_memberMap.end()) return; if (m_bPCParty) SendPartyRemoveOneToAll(dwPID); if (it == m_itNextOwner) IncreaseOwnership(); if (m_bPCParty) RemoveBonusForOne(dwPID); LPCHARACTER ch = it->second.pCharacter; BYTE bRole = it->second.bRole; m_memberMap.erase(it); sys_log(2, "PARTY[%d] MemberCountChange %d -> %d", GetLeaderPID(), GetMemberCount(), GetMemberCount() - 1); if (bRole < PARTY_ROLE_MAX_NUM) { --m_anRoleCount[bRole]; } else { sys_err("ROLE_COUNT_QUIT_ERROR: INDEX(%d) > MAX(%d)", bRole, PARTY_ROLE_MAX_NUM); } if (ch) { ch->SetParty(NULL); ComputeRolePoint(ch, bRole, false); } if (m_bPCParty) CPartyManager::instance().SetPartyMember(dwPID, NULL); // ё®ґх°Ў іЄ°Ўёй ЖДЖјґВ ЗШ»кµЗѕоѕЯ ЗСґЩ. if (bRole == PARTY_ROLE_LEADER) CPartyManager::instance().DeleteParty(this); // АМ ѕЖ·ЎґВ ДЪµеё¦ ГЯ°ЎЗПБц ё» °Н!!! А§ DeleteParty ЗПёй thisґВ ѕшґЩ. }
void pgGroup::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { if (!expandedKids) { expandedKids = true; if (!memberIds.IsEmpty()) { wxString ml = memberIds; ml.Replace(wxT(" "), wxT(",")); pgSet *set = server->ExecuteSet(wxT( "SELECT usename FROM pg_user WHERE usesysid IN (") + ml + wxT(")")); if (set) { while (!set->Eof()) { wxString user = set->GetVal(0); if (memberCount) { members += wxT(", "); quotedMembers += wxT(", "); } members += user; quotedMembers += qtIdent(user); memberCount++; usersIn.Add(user); set->MoveNext(); } delete set; } } } if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("Group ID"), GetGroupId()); properties->AppendItem(_("Member count"), GetMemberCount()); properties->AppendItem(_("Members"), GetMembers()); } }
void CParty::P2PJoin(DWORD dwPID) { TMemberMap::iterator it = m_memberMap.find(dwPID); if (it == m_memberMap.end()) { TMember Member; Member.pCharacter = NULL; Member.bNear = false; if (m_memberMap.empty()) { Member.bRole = PARTY_ROLE_LEADER; m_dwLeaderPID = dwPID; } else Member.bRole = PARTY_ROLE_NORMAL; if (m_bPCParty) { LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(dwPID); if (ch) { sys_log(0, "PARTY: Join %s pid %u leader %u", ch->GetName(), dwPID, m_dwLeaderPID); Member.strName = ch->GetName(); if (Member.bRole == PARTY_ROLE_LEADER) m_iLeadership = ch->GetLeadershipSkillLevel(); } else { CCI * pcci = P2P_MANAGER::instance().FindByPID(dwPID); if (!pcci); else if (pcci->bChannel == g_bChannel) Member.strName = pcci->szName; else sys_err("member is not in same channel PID: %u channel %d, this channel %d", dwPID, pcci->bChannel, g_bChannel); } } sys_log(2, "PARTY[%d] MemberCountChange %d -> %d", GetLeaderPID(), GetMemberCount(), GetMemberCount()+1); m_memberMap.insert(TMemberMap::value_type(dwPID, Member)); if (m_memberMap.size() == 1) m_itNextOwner = m_memberMap.begin(); if (m_bPCParty) { CPartyManager::instance().SetPartyMember(dwPID, this); SendPartyJoinOneToAll(dwPID); LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(dwPID); if (ch) SendParameter(ch); } } if (m_pkDungeon) { m_pkDungeon->QuitParty(this); } }
bool NFCPVPMatchModule::TeamApplyPVP(const NFGUID& xTeam, const NFIDataList& varMemberList, int nPVPMode, const int nScore) { int nMemberCount = varMemberList.GetCount(); std::vector<NFGUID> xPlayerList; for (int i = 0; i < varMemberList.GetCount(); i++) { const NFGUID& xPlayerID = varMemberList.Object(i); if (xPlayerID.IsNull()) { return false; } xPlayerList.push_back(xPlayerID); } int nGrade = GetGradeByScore(nScore); int nPVPModeMaxMember = GetMemberCount(nPVPMode); if (nPVPModeMaxMember < 0) { return false; } if (nMemberCount > nPVPModeMaxMember) { return false; } NFGUID xFindRoomID; int bRed = EPVPREDORBLUE_RED; std::vector<NFGUID> xRoomIDList; if (m_pPVPMatchRedisModule->GetStatusRoomID(nPVPMode, nGrade, EPVPROOMSTATUS_WAIT, xRoomIDList)) { for (int i = 0; i < xRoomIDList.size(); i++) { const NFGUID& xRoomID = xRoomIDList[i]; NFMsg::PVPRoomInfo xRoomInfo; if (m_pPVPMatchRedisModule->GetRoomInfo(xRoomID, xRoomInfo)) { if ((xRoomInfo.xredplayer_size() + nMemberCount) < xRoomInfo.maxpalyer()) { xFindRoomID = xRoomID; bRed = EPVPREDORBLUE_RED; break; } else if ((xRoomInfo.xblueplayer_size() + nMemberCount) < xRoomInfo.maxpalyer()) { xFindRoomID = xRoomID; bRed = EPVPREDORBLUE_BULE; break; } } } } if (xFindRoomID.IsNull()) { xFindRoomID = CreateRoom(NFGUID(), nPVPMode, nGrade); if (xFindRoomID.IsNull()) { return false; } m_pPVPMatchRedisModule->SetStatusRoomID(nPVPMode, nGrade, EPVPROOMSTATUS_WAIT, xFindRoomID); } return PlayerListEnterRoom(xPlayerList, bRed, xFindRoomID); }