Files
mir_server/server/LogicServer/base/ConsignmentMgr.h

118 lines
4.4 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
/****************************************
*****************************************/
#define CONSIGN_SAVE_COUNT_EACH_TIME 300 //保存寄卖数据,每个包发送的物品数
#define INCOME_SAVE_COUNT_EACH_TIME 1000 //保存收益数据,每个包发送的数量
typedef struct tagAutoConsignmentData
{
int nId;// id
int nEndDay;//过期时间
int nCd;//每轮时间
int nItemId;//id
int nNumber;//数量
int nPrice;//价格
tagAutoConsignmentData()
{
memset(this, 0, sizeof(*this));
}
}AutoConsignmentData,PAutoConsignmentData;
class CConsignmentMgr
{
public:
CConsignmentMgr();
~CConsignmentMgr();
void Destroy();
/*
* Comments:
* @Return VOID:
*/
VOID Load();
/*
* Comments:,
* Param INT_PTR nCmd:
* Param INT_PTR nErrorCode:
* Param CDataPacketReader & inPacket:
* @Return VOID:
*/
VOID OnDbReturnData(INT_PTR nCmd,char * data,SIZE_T size); //
/*
* Comments:
* @Return VOID:
*/
VOID RunOne(CMiniDateTime& minidate,TICKCOUNT tick);
public:
//检查过期物品
void CheckConsignTimeOut();
//获取某个玩家的收益
unsigned int GetIncomeValue(unsigned int nActorId);
//获取某个玩家的收益
ConsignmentIncome* GetIncome(unsigned int nActorId);
//删除某个玩家的收益数据
bool DelIncome(unsigned int nActorId);
//增加收益
void AddIncome(ConsignmentData* pData, int nCount);
//获取寄卖数据
ConsignmentData* GetConsignItem(uint64_t nSellIndex);
//增加一个寄售物品
//ConsignmentData* AddConsignItem( CUserItem* pUserItem, unsigned int nActorId, unsigned int nPrice, unsigned int nCount);
bool AddConsignItem(ConsignmentData& nData, bool dbReturn = false);
//删除一个寄售物品
bool DelConsignItem(ConsignmentData* pDelData);
//排序物品
void SortSearchItem();
//按条件过滤寄卖物品
void FilterSearchItem(CVector<ConsignmentData*>& List, BYTE nClass1Id, BYTE nClass2Id, BYTE nMinLevel,BYTE nMaxLevel, char nCircle, BYTE nJob, char nQuality, const char *sName);
//保存寄卖物品数据(按玩家,收益+物品)
void SaveActorConsignToDb();
//保存寄卖物品数据(主要是系统的nActorId=0,数据量有可能很多分包发送不用cache)
void SaveConsignItemToDb();
//玩家数据是否修改过
bool IsActorDataModify(unsigned int nActorId);
//设置玩家数据修改过
void SetActorDataModify(unsigned int nActorId);
//从管理器里读取自己的寄卖数据
void GetMyConsignItem(unsigned int nMyActorId,std::vector<ConsignmentData*>& myItemList);
//从管理器里读取自己的正在寄卖数据
void GetMyConsignOnSellItem(unsigned int nMyActorId, std::vector<ConsignmentData*>& myItemList);
//从管理器里读取自己可领取的寄卖数据
bool GetMyCanGetConsignItem(unsigned int nMyActorId);
void DealBuyConsignItem(ConsignmentData* nData, unsigned int nActorId);
int nCount() {return m_consignmentDataList.size();};
struct WaitingTaxAutomaticCmpter
{
bool operator()(const TaxAutomaticConfig _x, const TaxAutomaticConfig _y) const
{ return (unsigned int)(_x.nOpenday) == (unsigned int)(_y.nOpenday)? _x.class1Id < _y.class1Id : (unsigned int)(_x.nOpenday) < (unsigned int)(_y.nOpenday); }
};
void AddConsignItemByAuto(AutoConsignmentData& nData);
bool CheckInConsignItemByAutoId(int nId);
// void addNewConsignItem(ConsignmentData& dbdata);
void addNewConsignItem(const TaxAutomaticConfig& cfg);
void CheckCanAutoConsign();
//删除过期的上架物品
void DelOffShelf();
public:
CTimer<60000> m_1minuteTimer; //1分钟的定时器
CTimer<180000> m_3minuteTimer; //3分钟的定时器
bool m_boInited; //是否已经读入数据
std::map<int , AutoConsignmentData> m_OpenLists; //已经开启的上架的物品信息
std::set<TaxAutomaticConfig,WaitingTaxAutomaticCmpter> m_nWaitAutoIns;//自动上架
std::vector<ConsignmentData> m_consignmentDataList;//寄卖数据
int64_t m_nSellIndex; //交易行当前最大标识
// std::vector<ConsignmentIncome> m_consignmentIncomeList;//收入数据
std::vector<unsigned int> m_ActorDataModifyList; //玩家数据修改标志
bool m_boNeedSort; //是否需要排序
};