82 lines
1.6 KiB
C++
82 lines
1.6 KiB
C++
|
|
|
|||
|
|
//实现排行榜的一个文件
|
|||
|
|
|
|||
|
|
#include "StdAfx.h"
|
|||
|
|
|
|||
|
|
bool CRankMgr::AddRankItem(CRankItem &rankItem,int nRankItemCount)
|
|||
|
|
{
|
|||
|
|
CRankItem * pItem;
|
|||
|
|
int nKey = rankItem.nKey;
|
|||
|
|
unsigned int nActorid= rankItem.nActorid;
|
|||
|
|
|
|||
|
|
if(nKey <=0 || nActorid ==0) return false;
|
|||
|
|
|
|||
|
|
//锁定,防治重复操作
|
|||
|
|
m_rankItems.trylock();
|
|||
|
|
|
|||
|
|
for(int i=0;i < m_rankItems.count(); i++)
|
|||
|
|
{
|
|||
|
|
pItem =& m_rankItems[i];
|
|||
|
|
//if(pItem->nKey != nKey) continue;
|
|||
|
|
//如果自己在这个榜单上有个名次,就删除自己的名次
|
|||
|
|
//当前写死一下,如果职业排行榜的有同样的actorid过来,则删除掉掉以前的actorid
|
|||
|
|
if(pItem->nActorid == nActorid && pItem->nKey <=3)
|
|||
|
|
{
|
|||
|
|
m_rankItems.remove(i);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
INT_PTR nInsertPos =-1;
|
|||
|
|
|
|||
|
|
int nAboveCount=0; //超过这个玩家的角色数目
|
|||
|
|
|
|||
|
|
for(INT_PTR i=0; i< m_rankItems.count(); i++)
|
|||
|
|
{
|
|||
|
|
pItem =& m_rankItems[i];
|
|||
|
|
if(pItem->nKey != nKey) continue;
|
|||
|
|
|
|||
|
|
if(pItem->nValue < rankItem.nValue )
|
|||
|
|
{
|
|||
|
|
nInsertPos = i;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else if (pItem->nValue == rankItem.nValue)
|
|||
|
|
{
|
|||
|
|
if(pItem->lAuxValue1 < rankItem.lAuxValue1)
|
|||
|
|
{
|
|||
|
|
nInsertPos = i;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else if(pItem->lAuxValue1 == rankItem.lAuxValue1)
|
|||
|
|
{
|
|||
|
|
if(pItem->lAuxValue2 < rankItem.lAuxValue2)
|
|||
|
|
{
|
|||
|
|
nInsertPos = i;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
nAboveCount ++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//能够替换掉1个
|
|||
|
|
if(nInsertPos >=0)
|
|||
|
|
{
|
|||
|
|
m_rankItems[nInsertPos] = rankItem;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//如果还不够位置的话,就在后面添加1个
|
|||
|
|
if(nAboveCount <nRankItemCount )
|
|||
|
|
{
|
|||
|
|
m_rankItems.add(rankItem);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
m_rankItems.unlock(); //解锁一下
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|