153 lines
3.8 KiB
C
153 lines
3.8 KiB
C
|
|
#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; //是否保存战报
|
|||
|
|
|
|||
|
|
};
|