RPGMaker MV 基于Yep系列插件实例教程(2)

Day2:Stagger
《醉拳》的做法:

需求插件:(全部为yep系插件)
Battle Engine Core
Buffs & States Core
Passive Aura Effects
实现这个功能在原版做法中本来同样需要两个buff。
第一个buff是【醉拳】本身,用以将受到的物理伤害转化为持续性伤害【流觞】。
第二个buff则是【流觞】,他是一个将受到的物理伤害记录并造成持续性伤害的buff,由【醉拳】产生。
但在后续讨论下我们优化了这个代码,将他改为了只需要【醉拳】本身就能实现。
在【醉拳】的备注中,我们应该这么写:
//<Custom React Effect>
//检查当前动作是否物理伤害,是否为生命值变动效果,值是否大于0
if (this.isPhysical() && this.isHpEffect() && value > 0) {
//设置目标身上的总伤害流逝值
target._staggerDmg = target._staggerDmg || [];
//设置当前伤害的流失伤害的比例为15% + 随机值 * 0.25
(此处可以改为定值,最好是设置为15%~40%,这是测试得出的结果,原版是35%)
const reduceRate = 0.15 + Math.random() * 0.25;
//设置当前伤害的流失伤害回合为1到3
(此处同样可以改为定值,设置为固定几回合,只要修改下方右边的数值就好)
const reduceTurn = Math.randomInt(3) + 1;
//计算因流逝减少的伤害
var reduce = Math.ceil(value * reduceRate);
//应用减伤效果
value -= reduce;
//将当前伤害的后续流失效果储存在总流逝值内
target._staggerDmg.push({"damage":reduce,"turn":3});
}
//</Custom React Effect>
//<Custom Regenerate Effect>
user._staggerDmg = user._staggerDmg || [];
//检查用户是否存活,总流逝是否存在
if (user.isAlive() && user._staggerDmg.length > 0) {
//循环总流逝库
for (let index = 0; index < user._staggerDmg.length; index++) {
//设置当前流逝伤害为当前流逝子库中伤害/剩余回合,即将伤害按照回合均分
const dmg = Math.ceil(user._staggerDmg[index]["damage"] / user._staggerDmg[index]["turn"]);
//当前流逝子库中伤害减少
user._staggerDmg[index]["damage"] -= dmg;
//用户减少流失效果的生命值
user.gainHp(-dmg);
//播放动画(任选一个啦,和你的动画库里的ID相对应)
user.startAnimation(1);
//启动伤害弹窗
user.startDamagePopup();
//清除结果
user.clearResult();
//当前流逝子库中剩余回合减1
user._staggerDmg[index]["turn"]--;
//检查当前流逝子库中剩余回合是否小于等于0
if(user._staggerDmg[index]["turn"] <= 0) {
//若是,则移除当前流逝子库
user._staggerDmg.splice(index,1);
};
//检查角色是否死亡
if (user.isDead()) {
//若角色死亡
user.performCollapse();
//则角色总流逝库清空
user._staggerDmg = [];
};
};
};
//</Custom Regenerate Effect>