Buff系统说明文档

buff系统介绍.

buff系统为一定时间内为玩家以及怪物提供一定的增益 或者 减益效果。

buff 系统分类。

buff系统根据实际作用效果可分为三大类。

1.属性类Buff

玩家或怪物获得此类Buff 可增加或者减少其某些属性的数值。

2.状态类Buff

玩家或怪物获得此类Buff 可增加 对应的状态 , 例如 禁止移动、 无敌 、 隐身、禁止使用某些技能以及物品等。

3.间隔作用类Buff

玩家或怪物获得此类Buff 将在持续时间内以间隔时间为单位产生作用。 例如 持续10秒 每2秒减少100点HP。

Buff系统对应接口说明。

1.添加属性类Buff

TActor.AddAbilityBuff(GroupID:Integer;AbilityType:TBuffAbilityType;
 DuraMs:Cardinal;AblityValue:Int64;ValueIsRate:Boolean):TBuff;

参数说明

参数名称 参数类型 说明
GroupID Integer 分组ID(同组ID只能存在一个Buff 若重复在添加的时候会先移除掉之前的Buff)
AbilityType TBuffAblityType 属性类型 跳转 TBuffAbilityType 对照表
DuraMs Cardinal 持续时间(单位毫秒)
AblityValue Int64 增加的属性数值,根据ValueIsRate来确定增加的属性是万分比值还是具体数值
ValueIsRate Boolean 此字段若为true则表示添加的属性AblityValue使用万分比类型,否则为具体实际数值。

2.添加状态类Buff

TActor.AddStatusBuff(GroupID:Integer;StatusType:TBuffStatusType;DuraMs:Cardinal;
 Args1:Int64 = 0; Args2:Int64 = 0):TBuff;

参数说明

参数名称 参数类型 说明
GroupID Integer 分组ID(同组ID只能存在一个Buff 若重复在添加的时候会先移除掉之前的Buff)
StatusType TBuffStatusType 状态Buff类型 TBuffStatusType 对照表
DuraMs Cardinal 持续时间(单位毫秒)
Args1 Int64 可选参数1 对于某些特定类型的Buff才有意义请查询 TBuffStatusType 对照表
Args2 Int64 可选参数2 对于某些特定类型的Buff才有意义请查询 TBuffStatusType 对照表

3.添加间隔作用类Buff

TActor.AddIntervalBuff(GroupID:Integer;IntervalType:TBuffIntervalType;
 DuraMs:Cardinal;Interval:Cardinal;Args1:Int64 = 0; Args2:Int64 = 0):TBuff;

参数说明

参数名称 参数类型 说明
GroupID Integer 分组ID(同组ID只能存在一个Buff 若重复在添加的时候会先移除掉之前的Buff)
IntervalType TBuffIntervalType 属性类型 参照 TBuffIntervalType 对照表
DuraMs Cardinal 持续时间(单位毫秒)
Interval Cardinal 间隔作用时间(单位毫秒)
Args1 Int64 可选参数1 对于某些特定类型的Buff才有意义请查询 TBuffIntervalType 对照表
Args2 Int64 可选参数2 对于某些特定类型的Buff才有意义请查询 TBuffIntervalType 对照表

4.设置Buff客户端图标以及提示消息。

Buff添加完毕就会立即生效。如果需要在客户端Buff作用区域显示Buff图标,在添加Buff后立即调用TPlayObject.SetBuffIcon即可。

4.添加间隔作用类Buff

TPlayObject.SetBuffIcon(BuffHandle:Integer;ImageLibFile:String; ImageIndex:Integer;
 HoverImageIndex;ShowMessage:String;DisappearMessage:String;HintMessage:String;FlashOnDisappear:Boolean;ShowTimeStr:Boolean);

参数说明

参数名称 参数类型 说明
BuffHandle Integer 添加Buff成功后返回的Buff对象的Handle值。
ImageLibFile String 图片库文件 如果为空 则默认使用 icons.data
ImageIndex Word 正常图标显示的序号
HoverImageIndex Word 鼠标选中状态的图标序号。
ShowMessage String Buff添加时候发送到聊天栏的文字消息。(仅自己可见)
DisappearMessage String Buff 从身上移除时候发送到聊天栏的文字消息。(仅自己可见)
HintMessage String 鼠标选中图标时候的提示信息(支持文字排版)
FlashOnDisappear Boolean 是否在消失前3秒图标闪动
ShowTimeStr Boolean 是否在图标底部显示剩余时间

说明:
三个字符串参数 可用
$属性值$
$属性值比率$ buff值 百分比小数 保留两位小数
$Args1$ 参数1值
$Args2$ 参数2值
$Args1比率$ 百分比小数 保留两位小数
$Args2比率$ 百分比小数 保留两位小数
$持续时间$ 总持续时间 单位秒
$剩余时间$ 剩余时间 单位秒
$作用间隔$ BUFF触发间隔 对于 持续间隔作用类BUFF有效。 单位秒 进行格式化

5.使用预定义配置添加Buff

在版本管理器如下位置可以对Buff做一个预定义设置。

image
设置之后可以使用

 //使用预定义BuffID 添加Buff
 TActor.AddBuffByID(BuffID:Integer;GroupID:Integer = -1):TBuff;

 //使用预定义Buff名称 添加Buff
 TActor.AddBuffByName(BuffName:String;GroupID:Integer = -1):TBuff;

对Buff进行添加。
注意: 当参数GroupID留空或者为-1时候表示 不修改配置中的分组ID 当GroupID >=0 表示动态修改为对应的分组ID ,根据分组ID

使用预定义配置添加的Buff 在流量带宽上有更好的表现。频繁添加的Buff 建议使用预定义配置进行添加。
并且在添加了预定义buff后 无需再执行SetBuffIcon对 Buff进行图标设置。

6.移除Buff

TActor.DeleteBuff(BuffHandle:Integer):Boolean;
参数名称 参数类型 说明
BuffHandle Integer Buff添加返回得到的Handle

7.根据Buff分组移除Buff

TActor.RemoveBuffByGroupID(MinGroupID:Integer;MaxGroupID:Integer):Integer;
参数名称 参数类型 说明
MinGroupID Integer 最小的作用组
MaxGroupID Integer 最大的作用组

说明: 其中参数使用的是闭区间 即包含最小组和最大组 , 返回值为移除的Buff 数量。

6.根据Buff Tag移除Buff

TActor.RemoveBuffByTag(Tag:Integer):Integer;
参数名称 参数类型 说明
Tag Integer Tag值

说明: 其中参数使用的是闭区间 即包含最小组和最大组 , 返回值为移除的Buff 数量。

8.遍历玩家或者怪物身上拥有的Buff示例

for i := Actor.BuffCount -1 downto 0 do
begin
 Buff := Actor.Buff[i]
end;

Buff系统脚本触发

1.添加Buff时触发

当对玩家或者怪物添加Buff时会引擎会触发QFunction内的

procedure OnAddBuff(Actor:TActor;Buff:TBuff;var Accept:Boolean)

函数 通过修改 Accept := False 可以禁止此Buff添加到怪物或者玩家身上。

2.移除Buff时触发

当Buff从玩家或者怪物身上移除的时候引擎会触发QFunction内的

procedure OnRemoveBuff(Actor:TActor;Buff:TBuff)

3.自定义间隔作用类Buff触发。

当添加自定义间隔作用类Buff之后 在间隔设定时间后。引擎将调用QFunction

procedure OnCustomBuffAffect(Actor:TActor;Buff:TBuff)

Buff对象字段说明

TBuff 对象说明

字段 参数类型 只读 说明
Handle Integer Buff的运行唯一标记通过此Handle 可对Buff进行一些操作。
Tag Integer × Buff标志值用于提供给脚本对buff进行特殊标记
GroupID Integer Buff创建时候的分组ID (同组所有的Buff只能存在一个)
Category TBuffCategory Buff分类。 TBuffCategory 对照表
AbilityType TBuffAbilityType 属性类型,仅当Buff类型为属性类Buff时有效
AbilityValue Int64 Buff增加的属性数值,仅当Buff类型为属性类Buff时有效
ValueIsRate Boolean Buff作用值是否为万分比(仅Buff为属性类Buff时有意义)
StatusType TBuffStatusType 状态类型,仅当Buff类型为状态类Buff时有效 TBuffStatusType 对照表
IntervalType TBuffIntervalType 间隔作用类型,仅当Buff类型为状态类Buff时有效 TBuffIntervalType 对照表
Args1 Int64 参数1,对不同的Buff类型有不同的意义
Args2 Int64 参数2,对不同的Buff类型有不同的意义
CustomInt Array[0..3] of Int64 × 自定义数据,提供给脚本中进行实现自定义数据标记。
CustomStr String × 自定义数据,提供给脚本中进行实现自定义数据标记。

Buff系统类型定义参考表

1.Buff分类对照表

TBuffCategory

类型 说明
bcNone 无效
bcAbility 属性类buff
bcStatus 状态类buff
bcInterval 间隔作用类buff

2.属性类Buff类型对照表。

TBuffAbilityType

类型 说明
atNone 无效
atMaxHP 最大HP
atMaxMP 最大MP
atDC 物理攻击下限
atDCMax 物理攻击上限
atMC 魔法攻击下限
atMCMax 魔法攻击上限
atSC 道术下限
atSCMax 道术上限
atPC 刺术下限
atPCMax 刺术上限
atTC 箭术下限
atTCMax 箭术上限
atWC 武术下限
atWCMax 武术上限
atAC 物理防御下限
atACMax 物理防御上限
atMAC 魔法防御下限
atMacMax 魔法防御上限
atHitPoint 准确
atHitSpeed 攻击速度
atSpeedPoint 敏捷
atLucky 幸运
atHealthRecover HP恢复
atSpellRecover MP恢复
atAntiMagic 魔法躲避
atAntiPoison 毒物躲避
atPoisonRecover 中毒恢复
atAbsorbing 伤害吸收
atRebound 伤害反弹
atAttackAdd 附加伤害
atPunchHit 致命一击
atCriticalHit 会心一击
atPunchHitDef 致命一击抵抗
atCriticalHitDef 会心一击抵抗

3.状态类Buff类型对照表

TBuffStatusType

类型 说明
stNone 无效
stStone 石化
stDenyMove 禁止移动(跑步和走路以及骑马都不行)
stDenyWalk 禁止行走
stDenyRun 禁止跑步
stDenyHorse 禁止骑马
stSuperMan 无敌
stSuperManForMon 只对怪物无敌
stRelive 复活 (Args1为复活次数 次数达到会自动移除掉,0表示无限制)
stUnRelive 防复活
stObserver 隐身
stObserverForMon 隐身只对怪物
stDenyUseMagic 禁止使用技能(Args1为技能ID, -1表示禁止所有技能)
stDenyUseItem 禁止使用物品(Args1为物品ID,-1表示禁止所有物品)

4.间隔作用类Buff类型对照表

TBuffIntervalType

类型 说明
biNone 无效
biCustom 自定义
biHP 减少或增加HP(Args1 为数量 , Args2为万分比例)
biMP 减少或增加MP(Args1 为数量 , Args2为万分比例)
biExp 减少或增加经验值(Args1 为数量 , Args2为万分比例)