烁灵 发表于 2024-7-14 01:36:36

【汉化】简易技能cd

本帖最后由 烁灵 于 2024-7-14 01:55 编辑

原地址: https://forums.rpgmakerweb.com/i ... cooldown-mz.126885/
简单的按回合数设置技能CD

脚本:保存为 SimpleSkillColldown.js
/*:@target MZ
@url https://github.com/theoallen/RMMZ
@plugindesc v1.0.0 - Simple Skill Cooldown
汉化 by 烁灵 更多插件请访问 www.hknmtt.com
@author TheoAllen
@help
本插件允许你设置技能冷却回合,cd每次回合结束时更新

使用方法:
在技能备注中填写 <cooldown: x> x为回合数

Next plan:
- Customizable CD text in the skill window
- Give me more ideas...

Terms of Use:
- Free for commercial
*/
var Theo = Theo || {}
Theo.SkillCD = function(){
    const _ = Theo.SkillCD
    const $ = Game_Battler.prototype

    _.version = '1.0.0'
    _.cooldownRGX = /<cooldown[\s_]*:\s*(\d+)>/i
    $._cooldowns = {}

    _.skillInCooldown = function(skillId){
      return this._cooldowns && this._cooldowns > 0
    }

    _.resetCooldown = function(){
      this._cooldowns = {}
    }

    _.updateCooldown = function(){
      Object.keys(this._cooldowns).forEach(cd => {
            this._cooldowns -= 1
      });
    }

    _.setCooldown = function(skillId, turn){
      this._cooldowns = turn
    }

    _.initMembers = $.initMembers
    $.initMembers = function(){
      _.initMembers.call(this)
      _.resetCooldown.call(this)
    }

    _.onTurnEnd = $.onTurnEnd
    $.onTurnEnd = function() {
      _.onTurnEnd.call(this)
      _.updateCooldown.call(this)
    }

    _.onBattleStart = $.onBattleStart
    $.onBattleStart = function(advantageous) {
      _.resetCooldown.call(this)
      _.onBattleStart.call(this, advantageous)
    }

    _.onBattleEnd = $.onBattleEnd
    $.onBattleEnd = function() {
      _.resetCooldown.call(this)
      _.onBattleEnd.call(this)
    }

    _.paySkillCost = $.paySkillCost
    $.paySkillCost = function(skill) {
      _.paySkillCost.call(this, skill)
      _.setCooldown.call(this, skill.id, skill._skillCD)
    };

    _.canPaySkillCost = $.canPaySkillCost
    $.canPaySkillCost = function(skill) {
      return _.canPaySkillCost.call(this, skill) && !_.skillInCooldown.call(this, skill.id)
    };

    wskill = Window_SkillList.prototype
    _.drawSkillCost = wskill.drawSkillCost
    wskill.drawSkillCost = function(skill, x, y, width) {
      if(_.skillInCooldown.call(this._actor, skill.id)){
            this.changeTextColor(ColorManager.textColor(8))
            let text = this._actor._cooldowns + " CD"
            this.drawText(text, x, y, width, "right")
            return
      }
      _.drawSkillCost.call(this, skill, x, y, width)
    };

    _.dbLoaded = DataManager.isDatabaseLoaded;
    DataManager.isDatabaseLoaded = function(){
      if (!_.dbLoaded.call(this)) {return false};
      if (!_.skillCDLoaded) {
            $dataSkills.forEach(function(db){
                if(db === null){return}
                _.loadDB(db)
            })
            _.skillCDLoaded = true
      }
      return true;
    }

    _.loadDB = function(db){
      if(db._skillCD){
            db._skillCD = 0
      }
      let notedata = db.note.split(/[\r\n]+/)
      notedata.forEach(function(line){
            if(line.match(_.cooldownRGX)){
                db._skillCD = Number(RegExp.$1)
            }
      });
    }
}
Theo.SkillCD()


页: [1]
查看完整版本: 【汉化】简易技能cd