🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger]Buff是在模块文件夹`Module\Buff`内配置 [TOC] <br><br><br> # 完整buff例子 ``` def: #buff的时长(秒),支持java解译器 #传递的参数: #UMap caster = 谁给的buff(可能为null), 可能是玩家/非玩家 #UMap recipient = 谁接收这个buff就是谁, 可能是玩家/非玩家 #int level = buff等级 time: 6.5 #buff名字 name: 井泉水 #buff生效时/进入游戏(保存) 读取时的提示, 留空不提示 msg: '已获得 Buff {name},时长 {time}' #结束时的提示, 留空不提示 end-msg: '{name} Buff已结束' #灵活运用下面4个节点,可以做出类似于: #惩罚buff(下线不消失,死亡不消失,不计时,强制玩家受用多少秒的 debuff QAQ) #通关奖励buff(下线不消失,死亡不消失,不计时,强制玩家受用多少秒的 buff) #下线后是否保存(对玩家生效) 默认false save: false #下线是否暂停计时(对玩家生效) (默认false) offline-pause: false #忽略暂停的计时, 如:死亡时(对玩家生效), 手动暂停,副本流程中暂停,其他方法 (默认true) ignore-pause: true #死亡时清除这个buff(对玩家生效) (默认 true) death-clear: true #词条组 entries: 防御: #添加属性 type: attribute data: id: 防御 min: |- int level = data.get("level"); double value = 10 + level * 5; UMap caster = data.get("caster"); if(caster != null){ //可以做一些加成等属性 Att att = caster.get("att"); double 状态加成 = att.s("状态加成"); value *= 1 + 状态加成; } UMap recipient = data.get("recipient"); Att att = recipient.get("att"); double 状态受益加成 = att.s("状态受益加成"); value *= 1 + 状态受益加成; return value; float: 0.0 sign: false #是否显示 show: true #词条显示的内容 #4.3.2之后词条支持java解译器模式, 返回 List 或者 String 都行 display: - '&e临时提升&f{attribute.value}&e的{attribute.name}属性' #java解译器模式例子: # display: |- List ret = new ArrayList(); //先新建一个待返回的List , 基本算固定写法了 AttributeEntry entry = data.get("entry"); //拿生成的属性词条 /* 注意这里PxAttribute的java类型 全路径是com.pxpmc.pxrpg.api.modules.attribute.Attribute 冲突了所以默认导入别名为: PxAttribute 或者也可以在环境内自行导入其他别名使用 */ PxAttribute att = entry.getAttribute(); //这里都是调用java原生代码 //或者使用 getMin() 和 getMax() 以及 isPercentage() 来自己组合 ret.add(att.getName() + "属性提升: " + att.spawnString()); return ret; //返回组合好的List 防御2: type: attribute data: id: 防御 #也支持常量的写法 min: 10 float: 0.0 sign: false show: true display: - '&e常量写法提升&f{attribute.value}&e点{attribute.name}属性' #下面词条都是4.3.2新增的(只在buff内生效) 每10tick造成灼烧伤害: #4.3.2新增的buff词条(只在buff内生效) type: tick damage data: #基于 释放者的 怪物/职业 内的 战斗公式 路径为: `formula.fight.custom.灼烧伤害` 结果进行计算 #可能没有释放者(如指令释放), 没有释放者时失效 custom: 灼烧伤害 show: true #每 X tick触发一次, 必须 > 0才生效 #注意: 这里的触发次数并不是 buff时长/(tick*20) #如: 10秒的BUFF 每10tick触发一次的话, 就很大可能是只会触发 19次 而不是 20次 #支持 java 解译器,传递的参数有: #UMap caster = 谁给的buff(可能为null), 可能是玩家/非玩家 #UMap recipient = 谁有这个buff就是谁, 可能是玩家/非玩家 #int level = buff的等级 tick: 10 #支持java解译器,传递的参数有 #UMap caster = 谁给的buff(可能为null), 可能是玩家/非玩家 #UMap recipient = 谁有这个buff就是谁, 可能是玩家/非玩家 #long tick = 由上面计算出的值 #int times = 当前触发的第几次(从0开始) #double value = 记录的上次时间 display: - '来自于{caster}的灼烧伤害: {value}' #是否在buff开始的一瞬间就计算伤害并记录(默认 true,没特殊要求推荐true) #true: 每次伤害都是一样的 #false: 每次都会计算一次战斗公式,如没变化的可为true notes-value: false 每10tick恢复蓝量: #4.3.2新增的buff词条(只在buff内生效) type: tick mana data: custom: 恢复蓝量 tick: 10 display: - '来自于{caster}的蓝BUFF: {value}' notes-value: false show: true 每10tick掉蓝量: #4.3.2新增的buff词条(只在buff内生效) type: tick sub mana data: custom: 掉蓝量 tick: 10 display: - '来自于{caster}的掉蓝: {value}' notes-value: false show: true 每10tick恢复生命: #4.3.2新增的buff词条(只在buff内生效) type: tick heal data: custom: 恢复生命 tick: 10 display: - '来自于{caster}的血BUFF: {value}' notes-value: false show: true ```