83 lines
3.7 KiB
C++
83 lines
3.7 KiB
C++
#pragma once
|
||
|
||
/************************************************************************/
|
||
/*
|
||
/* 游戏角色BUFF对象类
|
||
/*
|
||
/* 类中包含了BUFF的数据定义以及BUFF的类型定义。buff由类型、分组、剩余作用次数以及
|
||
/* 作用值构成。
|
||
/*
|
||
/* buff类型:决定buff对角色产生的作用的类型,例如体力上限提升、攻击力提升等;
|
||
/* buff分组:相同类型的buff允许存在多个,单个不同buff实例时间具有不同的分组,对一个
|
||
/* buff的定位是通过buff的类型以及分组进行的。因此不允许存在相同类型以及相
|
||
/* 同分组的buff;
|
||
/* 作用次数:一个buff产生后,将在一定的时间后自动消失。buff存在的时间也是buff作用的
|
||
/* 次数,buff每秒钟对角色产生一次作用;
|
||
/* 作用值:不同类型的buff可能具有不同的值,值将表示此类型的buff对角色的作用影响的度,
|
||
/* 例如同为体力上限提升的buff,值为100则表示增加100体力上限,值为-300则表示
|
||
/* 减少体力上限300。对于Add类型的属性buff,可以使用负数来产生有损buff,对于
|
||
/* Power类型的属性buff,0.1表示提升10%,也可以使用负数来产生有损buff;
|
||
/*
|
||
/************************************************************************/
|
||
|
||
class CDynamicBuff
|
||
{
|
||
friend class CBuffSystem;
|
||
friend class CCampBuffMgr;
|
||
public:
|
||
/** 定义buff的分组归类 **/
|
||
enum BuffGroup
|
||
{
|
||
bgSystemBuff = 0, //系统默认的BUFF组
|
||
|
||
bgUserBuffMin = 32, //可以由开发者自定义的BUFF组的起始值
|
||
bgSkillBuffMin =bgUserBuffMin, //技能的最小的group
|
||
bgSkillBuffMax=80, //技能的最大的group
|
||
|
||
bgItemBuffMin , //物品的最小的组
|
||
bgUserBuffMax = 127, //可以由开发者自定义的BUFF组的结束值
|
||
bgItemBuffMax =bgUserBuffMax, //物品组的最大值
|
||
|
||
bgGuildBuffMin, //行会buff最小的组
|
||
bgGuildBuffMax = 200, //行会buff结束值
|
||
|
||
/*如果添加新的buff组请在AnyBuffGroup枚举值前增加*/
|
||
AnyBuffGroup = -1, //用于匹配任何组中的buff
|
||
MaxBuffGroup = 300, //buff分组最大值
|
||
};
|
||
/** 定义buff的最长作用时间(单位是秒),也是无时限buff的作用次数值 **/
|
||
static const INT_PTR Infinite = 0xFFFFFFFF;
|
||
static const INT_PTR MaxBuffNameLength = 48; //Buff的名字
|
||
|
||
//获取上一个BUFF
|
||
inline CDynamicBuff* GetPrevBuff()
|
||
{
|
||
return pPrev;
|
||
}
|
||
/// 获取buff的的剩余时 间,单位秒
|
||
inline int GetRemainTime(){
|
||
return ( dwTwice -1 ) * pConfig->nInterval + wActWait;
|
||
}
|
||
|
||
WORD GetId(){return wBuffId;};
|
||
public:
|
||
WORD wBuffId; //BUFFID;
|
||
WORD wActWait; //下次作用剩余时间,单位是秒
|
||
DWORD dwTwice; //剩余作用次数,每秒btInterval次,每作用一次此值减少1。值为0的时候buff应当消失。值为CDynamicBuff::Infinite的时候buff永远有效
|
||
GAMEATTRVALUE value; //buff的值
|
||
UINT32 mCreateTime; // Buff添加时间MiniDateTime格式
|
||
EntityHandle mGiver; // Buffer施法者
|
||
CBuffProvider::BUFFCONFIG * pConfig; //buff的标准配置
|
||
bool bSetVest; //是否设置攻击归属
|
||
BYTE btType; //buff类型,值为CDynamicBuff::BuffType中的枚举值
|
||
BYTE btGroup; //buff分组,分组的意义在于可以同时拥有多个相同类型的buff
|
||
WORD wAuxParam; //辅助的参数,用于一些特殊场合
|
||
WORD wInterval; //buff作用周期,单位是秒
|
||
CHAR sBuffName[MaxBuffNameLength]; //Buff的名字
|
||
int m_nBuffCd = 0;//buff下次生效的cd 短时间戳
|
||
|
||
private:
|
||
CDynamicBuff* pPrev; //上一个buff。buff是作为链表的结构进行管理的
|
||
|
||
};
|