Files
mir_server/server/LogicServer/buff/DynamicBuff.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

83 lines
3.7 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
/************************************************************************/
/*
/* 游戏角色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是作为链表的结构进行管理的
};