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;
}
Example #3
0
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;
}
Example #5
0
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;
}
Example #6
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는 없다.
}
Example #7
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ґВ ѕшґЩ.
}
Example #8
0
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());
	}
}
Example #9
0
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);
	}
}
Example #10
0
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);
}