138 lines
3.8 KiB
C
138 lines
3.8 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
static const LPCTSTR g_szTodayConsumeYuBao = _T("TodayConsumeYuBaoName.Rank"); //今天元宝消耗排行
|
|||
|
|
static const LPCTSTR g_szTodayConsumeYuBaoRanking = _T("TodayConsumeYuBaoRank.Rank");
|
|||
|
|
|
|||
|
|
static const LPCTSTR g_szYesterdayConsumeYuBao = _T("YesterdayConsumeYuBaoName.Rank"); //昨日元宝消耗排行
|
|||
|
|
static const LPCTSTR g_szYesterdayConsumeYuBaoRanking = _T("YesterdayConsumeYuBaoRank.Rank");
|
|||
|
|
|
|||
|
|
class CGameStoreRank
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
//商城排行文件头标志
|
|||
|
|
static const UINT32 GameStoreRankFileIdent = MAKEFOURCC(0, 'R', 'S', 'S');
|
|||
|
|
//商城排行文件版本号
|
|||
|
|
static const UINT32 GameStoreRankFileVersion = MAKEFOURCC(1, 11,10 , 11);
|
|||
|
|
/* 定义商城商品销量排行文件头 */
|
|||
|
|
typedef struct GameStoreRankFileHeader
|
|||
|
|
{
|
|||
|
|
UINT32 uIdent; //文件标志头,固定为GameStoreRankFileIdent
|
|||
|
|
UINT32 uVersion; //文件版本号,当前版本号为GameStoreRankFileVersion
|
|||
|
|
UINT32 uRecCount; //文件中记录的商品排行数据数量
|
|||
|
|
BYTE reseve[52]; //保留字节使得文件头大小固定为64字节
|
|||
|
|
}*PGSRFHEADER;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* 定义商品销售排行项结构 */
|
|||
|
|
typedef struct SaleData
|
|||
|
|
{
|
|||
|
|
INT nId; //商品唯一ID
|
|||
|
|
UINT uCount; //累积销售数量
|
|||
|
|
INT nActorId; //玩家的actorid,这个是用于存储
|
|||
|
|
}*PSALADATA;
|
|||
|
|
|
|||
|
|
//消费元宝排行
|
|||
|
|
typedef struct tagConsumeYuanBao
|
|||
|
|
{
|
|||
|
|
int nActorId; //玩家id
|
|||
|
|
int nCount; //消耗的元宝
|
|||
|
|
ACTORNAME nActorName; //玩家姓名
|
|||
|
|
}CONSUMEYB;
|
|||
|
|
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
~CGameStoreRank();
|
|||
|
|
CGameStoreRank()
|
|||
|
|
{
|
|||
|
|
m_hasDataChange =false;
|
|||
|
|
}
|
|||
|
|
//更新商品销售数量,函数内会更新商品排行并返回商品的总计销量
|
|||
|
|
UINT UpdateSelaCount(INT nMerchandiseId, INT nSellCount,unsigned int nActorId =0, bool bNeedRank =false);
|
|||
|
|
|
|||
|
|
//获取排行记录数量
|
|||
|
|
inline INT_PTR RankCount(){ return m_SaleRankList.count(); }
|
|||
|
|
|
|||
|
|
//从文件加载商城销量排行数据
|
|||
|
|
bool LoadFromFile(LPCTSTR sFilePath);
|
|||
|
|
//将商城销量排行数据保存到文件
|
|||
|
|
bool SaveToFile(LPCTSTR sFilePath) ;
|
|||
|
|
|
|||
|
|
//从数据流中加载商城销量排行数据
|
|||
|
|
bool LoadFromStream(wylib::stream::CBaseStream &stream);
|
|||
|
|
//将商城销量排行数据保存到数据流中
|
|||
|
|
bool SaveToStream(wylib::stream::CBaseStream &stream) const;
|
|||
|
|
|
|||
|
|
//清空列表
|
|||
|
|
inline void Clear()
|
|||
|
|
{
|
|||
|
|
m_SaleRankList.clear();
|
|||
|
|
m_hasDataChange =true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//获取某个的数目,以及是否存在这个商品
|
|||
|
|
UINT GetIdCount(INT nId,bool &isExist,INT nActorId =0)
|
|||
|
|
{
|
|||
|
|
for(INT_PTR i=0;i < m_SaleRankList.count(); i++)
|
|||
|
|
{
|
|||
|
|
if( m_SaleRankList[i].nId == nId)
|
|||
|
|
{
|
|||
|
|
if(nActorId == m_SaleRankList[i].nActorId || nActorId ==0)
|
|||
|
|
{
|
|||
|
|
isExist =true;
|
|||
|
|
return m_SaleRankList[i].uCount;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
isExist =false;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool RemoveIndex(INT_PTR nIndex)
|
|||
|
|
{
|
|||
|
|
if(nIndex <0 || nIndex >= m_SaleRankList.count())
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
m_SaleRankList.remove(nIndex);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
CVector<SaleData>& GetActorConsume(INT nActorId);
|
|||
|
|
|
|||
|
|
//加载今天消耗的排行榜
|
|||
|
|
void LoadTodayConsumeRankFile();
|
|||
|
|
|
|||
|
|
//保存今天消耗的排行榜
|
|||
|
|
void SaveTodayConsumeRankToFile();
|
|||
|
|
|
|||
|
|
//加载昨天消耗的排行榜
|
|||
|
|
void LoadYesterdayConsumeRank();
|
|||
|
|
|
|||
|
|
//保存昨天消耗的排行榜
|
|||
|
|
void SaveYesterdayConsumeRankToFile();
|
|||
|
|
|
|||
|
|
//每天0点更新
|
|||
|
|
void RfeshConsumeRank();
|
|||
|
|
|
|||
|
|
void SetDataChange(bool bDataChange = true)
|
|||
|
|
{
|
|||
|
|
m_hasDataChange = bDataChange;
|
|||
|
|
}
|
|||
|
|
public:
|
|||
|
|
inline operator const PSALADATA () const
|
|||
|
|
{
|
|||
|
|
return m_SaleRankList;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//商品销售数据对比函数,用于排行排序
|
|||
|
|
static INT __cdecl CompareMerchandiseSaleData(CGameStoreRank::SaleData &s1, CGameStoreRank::SaleData &s2);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
CVector<SaleData> m_SaleRankList; //商品销售排行榜
|
|||
|
|
|
|||
|
|
CVector<CONSUMEYB> m_TodayComsumeRank; //今天消耗元宝排行
|
|||
|
|
CVector<CONSUMEYB> m_YesterdayComsumeRank; //昨天消耗元宝排行
|
|||
|
|
|
|||
|
|
bool m_hasDataChange; //是否已经改变过
|
|||
|
|
};
|