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

141 lines
4.3 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
/***************************************************************/
/*
/* 属性子系统
/* 1) 根据玩家的1级属性计算玩家的2级属性
/* 2) 根据玩家的等级,性别,职业,来决定玩家的模型
/* 3) NPC的将初始化系统,进行一些属性的改变运算
/***************************************************************/
#pragma once
class CCreature;
class CPropertySystem:
public CEntitySubSystem<enPropertySystemID,CPropertySystem,CCreature>
{
public:
//重载这个函数,初始化玩家的一些2级属性
bool Initialize(void *data,SIZE_T size);
/// 玩家升级的时候调用,需要计算一下模型ID是否需要改变
inline VOID OnLevelUp(){ResertProperty();}
/// 重置属性
bool ResertProperty();
/*
* Comments: 初始化怪物的属性计算器,为了计算的方便,把怪物的属性放到计算器里
* Param CREATURBATTLEEDATA & data: 怪物的2级属性
* Param CAttrCalc & cal: 目标计算器
* @Return VOID:
*/
static VOID InitMonsterCalculator( CREATURBATTLEEDATA & data, CAttrCalc& cal );
/*
* Comments:把1级属性的数值属性的加成到2级属性里去
* Param CAttrCalc & cal:计算器,把里边的1级属性映射到2级属性
* Param PLEVEL1PROPERTYTRANSFER pProp: 属性转换表
* @Return VOID:
*/
static VOID Level1ValuePropertyTransfer( CAttrCalc& cal,PLEVEL1PROPERTYTRANSFER pProp); //
/*
* Comments:初始化实体的等级信息,包括初始化的属性+等级带来的属性的加成
* Param CAttrCalc & cal: 结果计算器
* Param PENTITYLEVELPROPERTY pPropTable:等级的属性的配置
* Param INT_PTR nLevel:实体的等级
* @Return void:
*/
static void InitEntityLevelProperty(CAttrCalc &cal,PENTITYLEVELPROPERTY pPropTable,INT_PTR nLevel);
/*
* Comments:计算加成boss难度等级
* Param PMONSTERCONFIG pConfig:怪的配置
* @Return bool:成功返回true
*/
static bool calcMonsterLevelHard( PMONSTERCONFIG pConfig,CAttrCalc &cal,INT_PTR nBornLevel = 0, const INT_PTR nLevel=0);
/*
* Comments: 设置属性
* @Param INT_PTR nPropertyType: 属性类型
* @Param int nAddValue: 百分比
* @Return void:
* @Remark:
*/
void AddPropertyValue(INT_PTR nPropertyType, int nAddValue);//
/*
* Comments: 设置属性
* @Param INT_PTR nPropertyType: 属性类型
* @Param int nAddValue: 万分比
* @Return void:
* @Remark:
*/
void AddPropertyRatioValue(INT_PTR nPropertyType, int nAddValue);//
#ifdef _DEBUG
public:
CAttrCalc m_Debug;
#endif
private:
//设置玩家的属性,把计算器里的属性写到属性集
VOID SetEntityProperty(CAttrCalc& cal);
/// 初始化怪物的属性,把结果写到计算器
VOID InitMonsterProperty(CAttrCalc& cal);
//初始化玩家初始属性
bool InitActorInitProperty(CAttrCalc &cal);
//初始化玩家的等级属性信息,把结果写到计算器
bool InitActorLevelProperty(CAttrCalc& cal);
//初始化玩家的转生属性信息,把结果写到计算器
bool InitActorCircleProperty(CAttrCalc &calc);
//初始化玩家的祝福属性信息,把结果写到计算器
bool InitActorBlessProperty(CAttrCalc &calc);
//初始化玩家的经脉属性信息,把结果写到计算器
bool InitActorMeridianProperty(CAttrCalc &calc);
//初始化玩家的狂暴属性信息,把结果写道计算器
bool InitActorFrenzyProperty(CAttrCalc &calc);
//初始化玩家的官阶属性信息,把结果写道计算器
bool InitActorOfficeProperty(CAttrCalc &calc);
/*
* Comments: 返回这个实体的默认的移动速度,都是从配置表里读取的
* @Return int: 返回默认的移动速度也就是1秒钟经过多少格
*/
int GetDefaultMoveSpeed();
/*
* Comments: 获取默认的攻击速度
* @Return int: 返回攻击速度的间隔时间也就是ms
*/
int GetDefaultAttackSpeed();
/**
* @brief: 更新怪物动态属性(针对副本怪)
* @param[in]calc: 属性计算器
*/
void updateMonsterDynProp(CAttrCalc &calc);
//计算角色头衔属性
bool CalcActorHeadTitleProperty(CAttrCalc &calc);
//获取防火率
unsigned int GetFireDefenseRate();
/*
* Comments:计算宠物基本属性
* Param PMONSTERCONFIG pConfig:怪的配置
* @Return bool:成功返回true
*/
bool CalcPetBaseProperty(CAttrCalc &calc, const INT_PTR nMonsterId, const INT_PTR nLevel);
};