Files
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

153 lines
3.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
//职业竞技子系统
class CCombatSystem:public CEntitySubSystem<enCombatSystemID, CCombatSystem, CActor>
{
public:
CCombatSystem();
~CCombatSystem(){};
/****----------------覆盖父类的函数集-----------------***/
virtual bool Initialize(void *data, SIZE_T size);
virtual void OnDbRetData(INT_PTR nCmd, INT_PTR nErrorCode, CDataPacketReader &reader);
virtual void Save(PACTORDBDATA pData);
virtual void OnTimeCheck(TICKCOUNT nTickCount);
virtual void OnEnterGame();
virtual void ProcessNetData(INT_PTR nCmd, CDataPacketReader &packet);
/****----------------协议处理的入口函数集-----------------***/
//下发基本信息
void SendCombatBaseInfo();
//筛选对手
void PickRankPlayer(int nActive);
//开始挑战
void StartCombatChallage(int nActorId, int nRank);
//清除cd时间
void ClearCombatCd();
//兑换排名奖励
void RechargeRankAward(int nAwardId);
//请求战报
void GetCombatLog();
//请求排行榜
void GetCombatRank(int nCurrentPage);
//请求已兑换奖励信息
void GetRankAwardList();
/****----------------其他逻辑功能的函数集-----------------***/
//脚本操作触发入口
void TriggerEvent(INT_PTR nSubEvent, INT_PTR nParam1=-1, INT_PTR nParam2=-1, INT_PTR nParam3=-1, INT_PTR nParam4=-1);
//添加职业宗师竞技战报
void AddToCombatLog(int nType, char *strName, int nActorId, int nRank, int nResult);
//添加到职业宗师竞技榜
void AddToCombatRank(int nActorId,int nValue);
//更新自身职业宗师竞技榜信息
void UpdateCombatRanking();
//筛选对手执行接口
void PickRankPlayerImpl();
//发送筛选对手
void SendPickRankPlayer();
//交换排名
void SwapCombatRank(int nActorId, int nTagetId);
//挑战结束操作
void ChallegeOverOp(int nResult, int nActorId, char* strName, int nIsReal);
//获取我的排名
int GetMyCombatRank();
//在线通知被挑战方
void ChallegeNotice(int nResult, int nActorId, char* strName, int nMyRank);
//离线消息处理战报
void OfflineCombatOp(int nResult, int nActorId, char* strName, int nMyRank);
//加载职业宗师竞技基本信息
void LoadCombatInfoFromDb();
void LoadCombatInfoFromDbResult(CDataPacketReader &reader);
//保存职业宗师竞技基本信息
void SaveCombatGameInfo();
//加载职业宗师竞技战报
void LoadCombatRecordFromDb();
void LoadCombatRecordFromDbResult(CDataPacketReader &reader);
//保存职业宗师竞技战报
void SaveCombatRecord();
//每天清除信息
void OnNewDayClear();
//改变积分
void ChangeCombatScore(int nValue);
//获取积分
int GetCombatScore() { return m_nCombatScore; }
//等级提升操作
void OnLevelUp();
public:
enum tagCombatRecordResult
{
enFail = -1, //失败
enFailAndSwap = -1, //失败且交换排名
enSucc = 1, //胜利
enSuccAndSwap = 2, //胜利且交换排名
};
//战报信息
typedef struct tagCombatRecord
{
int nType; //攻防类型0攻 1防
int nResult; //结果(-1失败 -2失败排名变化 1胜利 2 胜利排名变化)
int nActorId; //id
char strName[32]; //姓名
int nRank; //排名
}COMBATRECORD, *PCOMBATRECORD;
private:
int m_nJobType; //职业类型
int m_nCurrentRankLevel; //当前排名
int m_nMaxRankLevel; //历史最高排名
int m_nLastRankLevel; //上次结算排名
int m_nCombatScore; //战力积分
int m_nChallengeCount; //挑战次数
int m_nPickCount; //筛选次数
unsigned int m_nClearTime; //清零时间
bool m_bCdFlag; //冷却标志
CVector<COMBATRECORD> m_CombatRecordList; //战报
int m_nSelectedIndex[MAXPICKITEMNUM + 1]; //筛选对手索引列表
bool m_bPickSwitch; //筛选开关
bool m_bSaveInfoFlag; //是否保存基本信息
bool m_bSaveLogFlag; //是否保存战报
};