init
This commit is contained in:
81
server/SessionServer/RankMgr.cpp
Normal file
81
server/SessionServer/RankMgr.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
//实现排行榜的一个文件
|
||||
|
||||
#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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user