Code:
//=============================================================================
// CriticalOnFinalHit.js
//=============================================================================
/*:
* @target MZ
* @plugindesc v1.0.0 อนุญาตให้คุณสามารถกำหนดอัตราคริติคอลให้การโจมตีครั้งสุดท้ายได้
* @author jojo741963
* @help CriticalOnFinalHit.js
*
* Log:
* v1.0.0 - Release
*
* ปลั๊กอินนี้จะทำให้คุณกำหนดอัตราคริติคอลในการโจมตีครั้งสุดท้ายได้
* (แม้การโจมตีนั้นจะมีครั้งเดียว คุณก็สามารถกำหนดคริติคอลได้เช่นกัน)
*
* วิธีการใช้ :
* 1. ไปที่ Skill หรือ Item ที่ต้องการ
* 2. ใน Note ให้เพิ่มข้อความดังนี้
*
* <LastHitCriRate:X>
*
* เมื่อ X คือ อัตราคริติคอลที่กำหนด (ค่าระหว่าง 0-1)
*
* เช่น <LastHitCriRate:1> การโจมตีครั้งสุดท้ายจะติดคริติคอลแน่นอน
* <LastHitCriRate:.04> การโจมตีครั้งสุดท้ายจะติดคริติคอล 4%
*
* หมายเหตุ :
* - ทั้งนี้ อัตราคริติคอลในปลั๊กอินนี้เป็นการเขียนทับ (กำหนดค่าใหม่ลงไป)
* ไม่มีผลกับอัตราคริเดิมของผู้ใช้สกิล และอัตราการหลบหลีกของเป้าหมาย
* - ไม่สามารถกำหนดค่าเป็นสมการหรือเรียกใช้ตัวแปรอื่น ๆ ได้
* - สามารถใช้ร่วมกันได้กับสกิลที่โจมตีครั้งเดียว (Repeat 1 ครั้ง)
* โดยจะเป็นการกำหนดอัตราคริติคอลการโจมตีครั้งนั้น
*
* วิธีการคิดอัตราตริติคอลเดิมของระบบ : อัตราคริผู้ใช้สกิล * (1 - อัตราการหลบคริเป้าหมาย)
*
*/
(() => {
const pluginName = "CriticalOnFinalHit";
//------------------------------------------------------------------------------------
// add _repeatHitIndex and _lastHit
var _jojo741963_cuscri_GameAction_initialize = Game_Action.prototype.initialize;
Game_Action.prototype.initialize = function(subject, forcing) {
_jojo741963_cuscri_GameAction_initialize.call(this, subject, forcing);
this._repeatHitIndex = 0;
this._lastHit = false;
};
var _jojo741963_cuscri_GameAction_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function(target) {
this._repeatHitIndex += 1;
if ( this._repeatHitIndex >= this.numRepeats() ) this._lastHit = true;
//--------------------------------------------------------
_jojo741963_cuscri_GameAction_apply.call(this, target);
//--------------------------------------------------------
if( this._lastHit ) {
this._repeatHitIndex = 0;
this._lastHit = false;
}
}
//------------------------------------------------------------------------------------
Game_Action.prototype.getItemMeta = function() {
var data = null;
switch (this._item._dataClass) {
case "skill":
data = $dataSkills[this._item._itemId];
break;
case "item":
data = $dataItems[this._item._itemId];
break;
}
return data.meta;
}
Game_Action.prototype.IsLastHitCriRate = function() {
var data = null;
switch (this._item._dataClass) {
case "skill":
data = $dataSkills[this._item._itemId];
break;
case "item":
data = $dataItems[this._item._itemId];
break;
}
if (data != null) {
if (data.meta.LastHitCriRate) return true;
return false;
} else {
return false;
}
};
var _jojo741963_cuscri_GameAction_itemCri = Game_Action.prototype.itemCri;
Game_Action.prototype.itemCri = function(target) {
if ( this._lastHit && this.IsLastHitCriRate() ) {
return this.getItemMeta().LastHitCriRate;
} else {
return _jojo741963_cuscri_GameAction_itemCri.call(this, target)
}
};
})();