Files
mir_server/server/LogicServer/entitysystem/PkSystem.h

109 lines
3.0 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
/**************************************
PK子系统
**************************************/
static const char *szIntercedeCount = "IntercedeCount"; //今日求情次数
class CPkSystem:
public CEntitySubSystem<enPkSystemID,CPkSystem,CActor>
{
public:
/*
* Comments:
* @Return void:
*/
virtual void OnEnterGame();
/*
* Comments:
* 10buff保护
* Param CActor * pActor:
* @Return bool:true表示能被估计,false表示不可以
*/
bool _CanAttack(CActor* pActor, CAnimal *pPet=NULL, bool boAttackNotice = true);
bool IsUnLimited(CEntity* pActor);
bool CanAttack(CActor* pActor, CAnimal *pPet=NULL, bool boAttackNotice = true);
/*
* Comments:PK值
* Param INT_PTR nValue:
* @Return void:
*/
void AddPkValue(INT_PTR nValue, CActor * pActor = NULL);
//获取和设置pk模式
int GetPkMode();
//获取Pk模式的名称
void SendPkModeStr();
/*
* Comments: pk模式
* Param int mode:id
* Param bool boForce:
* Param bool bNeedBroadCast:广广广
* @Return void:
*/
void SetPkMode( int mode,bool boForce=false,bool bNeedBroadCast =true );
/*
* Comments:pk模式能否攻击对方
* Param CActor * pActor:
* @Return bool:
*/
bool CanAttackByMode(CActor* pActor);
INT_PTR GetZyType(CActor* pActor);
/*
* Comments:PK结束时的计算HP计算的HP为0表示失败
* Param CActor * pActor:pK的对手
* @Return void:
*/
void OnEndPk( CActor* pActor );
//进入战斗状态(被玩家打通知前端)
void EnterPK(CActor* pEntity);
void SendPkToClient();
protected:
/*
* Comments:pk的模式
* Param CDataPacketReader & reader:
* @Return void:
*/
void SetFreePkMode(CDataPacketReader& reader);
/*
* Comments:buff保护
* @Return bool:true
*/
bool IsProtected();
/*
* Comments:buff,
* @Return void:
*/
void DeleteProtectBuff();
void DoFriendIntercede(CDataPacketReader &reader );
public:
virtual bool Initialize(void *data,SIZE_T size);
virtual VOID OnTimeCheck(TICKCOUNT nTickCount);
virtual void ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet );
public:
CPkSystem();
~CPkSystem();
private:
UINT m_SubNext; //每3分钟减少一点杀戮值
bool m_boCanPked; //能否给别人pk默认关40级以上默认开可以使用物品使其关闭(同时也必须是和平模式)
public:
BYTE m_bLastMode; //上一次的模式,用于区域属性强制改成其他模式后可恢复
};