Files
mir_server/server/SessionServer/RankMgr.h

78 lines
1.9 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
//排行榜的信息,用于做全服的排行榜,只取最nb的多少名
//排行的依据,根据 nValue
struct CRankItem
{
unsigned int nActorid; //角色的actorid
char sCharName[32];//角色的名字
int nKey; //关键字其中1表示战士排行榜2表示法师排行榜3表示道士排行榜,其他类似
int nServerId; //服务器的id
int nValue; //关键字的值,表示排行榜用于排行依据的值
unsigned long long lAuxValue1; //辅助的依据1
unsigned long long lAuxValue2; //排行的依据2用于排行的辅助比如根据等级
int nProp1; //附加属性1
int nProp2; //附加属性2
int nProp3; //附加属性3
CRankItem()
{
memset(this,0,sizeof(*this)); //初始化设置0
}
};
class CRankMgr
{
public:
CRankMgr()
{
m_rankItems.setLock(&m_itemListLock);
}
~CRankMgr()
{
m_rankItems.empty();
}
/*
* Comments: 1
* Parameter: CRankItem & rankItem:
* Parameter: int nRankItemCount:
* @Return bool:true,false
*/
bool AddRankItem(CRankItem &rankItem,int nRankItemCount=1);
//获取排行榜的元素列表
const void GetRankList(int nKey,wylib::container::CBaseList<CRankItem> & itemList)
{
itemList.clear();
for(INT_PTR i=0; i< m_rankItems.count(); i++)
{
if(m_rankItems[i].nKey == nKey || nKey <0)
{
itemList.add(m_rankItems[i]);
}
}
}
private:
/*
* Comments: key的数目
* Parameter: int nKeyId:key的ID
* Parameter: unsigned int nActorid:actorid
* @Return int:
*/
int GetActorPos(int nKeyId,unsigned int nActorid);
private:
wylib::container::CLockList<CRankItem> m_rankItems; //排行的列表
wylib::container::CCSLock m_itemListLock; //排行的列表锁
};