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是作为链表的结构进行管理的
|
|||
|
|
|
|||
|
|
};
|