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

Day2:Stagger
《醉拳》的做法:

需求插件:(全部為yep系插件)
Battle Engine Core
Buffs & States Core
Passive Aura Effects
實現這個功能在原版做法中本來同樣需要兩個buff。
第一個buff是【醉拳】本身,用以將受到的物理傷害轉化為持續(xù)性傷害【流觴】。
第二個buff則是【流觴】,他是一個將受到的物理傷害記錄并造成持續(xù)性傷害的buff,由【醉拳】產生。
但在后續(xù)討論下我們優(yōu)化了這個代碼,將他改為了只需要【醉拳】本身就能實現。
在【醉拳】的備注中,我們應該這么寫:
//<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;
? ? //將當前傷害的后續(xù)流失效果儲存在總流逝值內
? ? target._staggerDmg.push({"damage":reduce,"turn":3});
}
//</Custom React Effect>
//<Custom Regenerate Effect>
user._staggerDmg = user._staggerDmg || [];
//檢查用戶是否存活,總流逝是否存在
if (user.isAlive() && user._staggerDmg.length > 0) {
? ? //循環(huán)總流逝庫
? ? 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>