Files
mir_server/server/LogicServer/buff/DynamicBuff.h

83 lines
3.7 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#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类型的属性buff0.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是作为链表的结构进行管理的
};