RMVXA

[미해결] yanfly skill restrictions 스크립트에서 쿨타임 조정 질문이요!!

by 반내림 posted Feb 26, 2017
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

 

간단히 말해 스킬의 쿨타임을 만들어주는 스크립튼데


전투가 끝난 후에도 쿨타임이 이어지게끔 설정할 수 있을까요?


예를들면, 10턴 짜리 쿨타임의 스킬을 사용후


전투종료 - 쿨타임 7턴 남음 - 다음 전투때 7턴 이후에 스킬 재사용 가능


이런식으로요!



아래는 스크립트 전문입니다.

 

 

 

 #==============================================================================

# ▼ Yanfly Engine Ace - Skill Restrictions v1.02

# -- Last Updated: 2012.01.23

# -- Level: Normal, Hard, Lunatic

# -- Requires: n/a

#==============================================================================


$imported = {} if $imported.nil?

$imported["YEA-SkillRestrictions"] = true


#==============================================================================

# ▼ Updates

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# 2012.01.23 - Compatibility Update: Doppelganger

# 2011.12.12 - Started Script and Finished.

#            - Added cooldown altering notetags for items.

#==============================================================================

# ▼ Introduction

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# Sometimes good game balance depends on restriction mechanics. Of these

# mechanics include skill cooldowns, warmups, and the amount of times a skill

# can be used (limited uses). Included in this script are features also to

# lock cooldowns, reduce cooldown rates, change cooldown values for skills,

# skill types, and more. If this isn't enough restriction power, switches may

# be used to restrict skills from being used as well as even code.

#==============================================================================

# ▼ Instructions

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# To install this script, open up your script editor and copy/paste this script

# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.

# -----------------------------------------------------------------------------

# Actor Notetags - These notetags go in the actors notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

# -----------------------------------------------------------------------------

# Class Notetags - These notetags go in the class notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

# -----------------------------------------------------------------------------

# Skill Notetags - These notetags go in the skills notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown: x>

# Causes the skill to have a cooldown of x once it's used in battle. Skills

# with cooldowns cannot be used again until cooldown reaches 0 or until the

# battle is over.

# <change cooldown: +x>

# <change cooldown: -x>

# This will cause the target's cooldowns for every skill to increase by x or

# decrease by x. This selects skills indiscriminately.

# <skill cooldown x: +y>

# <skill cooldown x: -y>

# This will cause the target's specific skill x to receive a change in cooldown

# by either an increase or decrease of y amount.

# <stype cooldown x: +y>

# <stype cooldown x: -y>

# This will cause all of the skills with skill type x to have its cooldowns

# changed by y amount. +y increases cooldown turns while -y decreases turns.

# <limited uses: x>

# This will allow the skill to only be usable x times throughout the course of

# battle. Once the skill is used x times, it is disabled until the battle is

# over. This effect only takes place during battle.

# <warmup: x>

# Causes the skill to be sealed until the x turns pass in battle. There's no

# way to speed up a warmup manually with the exception of warmup rates.

# <restrict if switch: x>

# This will restrict the skill if switch x is ON. If switch x is OFF, this

# skill will no longer be restricted.

# <restrict any switch: x>

# <restrict any switch: x, x>

# This will restrict the skill if any of the x switches are ON. If all of them

# are off, then the skill will not be restricted.

# <restrict all switch: x>

# <restrict all switch: x, x>

# This will restrict the skill if all of the x switches are ON. If any of them

# are off, then the skill will not be restricted.

# <restrict eval>

#  string

#  string

# </restrict eval>

# For the more advanced users, replace string with code to determine whether

# or not the skill is restricted. If multiple lines are used, they are all

# considered part of the same line.

# -----------------------------------------------------------------------------

# Item Notetags - These notetags go in the items notebox in the database.

# -----------------------------------------------------------------------------

# <change cooldown: +x>

# <change cooldown: -x>

# This will cause the target's cooldowns for every skill to increase by x or

# decrease by x. This selects skills indiscriminately.

# <skill cooldown x: +y>

# <skill cooldown x: -y>

# This will cause the target's specific skill x to receive a change in cooldown

# by either an increase or decrease of y amount.

# <stype cooldown x: +y>

# <stype cooldown x: -y>

# This will cause all of the skills with skill type x to have its cooldowns

# changed by y amount. +y increases cooldown turns while -y decreases turns.

# -----------------------------------------------------------------------------

# Weapon Notetags - These notetags go in the weapons notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

# -----------------------------------------------------------------------------

# Armour Notetags - These notetags go in the armours notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

# -----------------------------------------------------------------------------

# Enemy Notetags - These notetags go in the enemies notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

# -----------------------------------------------------------------------------

# State Notetags - These notetags go in the states notebox in the database.

# -----------------------------------------------------------------------------

# <cooldown lock>

# A battler afflicted with cooldown lock will not have cooldowns count down

# every turn until the cooldown lock is removed.

# <cooldown rate: x%>

# When cooldowns are applied from using skills in battle, the cooldown rate can

# reduce or increase the finalized amount of turns a battler would need to wait

# before being able to use that skill again.

# <warmup rate: x%>

# Lowers/Raises the amount of turns needed to pass in battle before the warmup

# skills become available for usage.

#==============================================================================

# ▼ Compatibility

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that

# it will run with RPG Maker VX without adjusting.

#==============================================================================


module YEA

  module SKILL_RESTRICT

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Cooldown Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Skills with cooldowns cannot be used for some number of turns. Adjust the

    # settings here on how cooldowns appear in the menu. Cooldowns are only

    # applied in battle.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    COOLDOWN_COLOUR = 6          # Colour used from "Window" skin.

    COOLDOWN_SIZE   = 12         # Font size used for cooldowns.

    COOLDOWN_SUFFIX = "%s턴"     # Suffix used for cooldowns.

    COOLDOWN_ICON   = 11          # Icon used for cooldowns. Set 0 to disable.

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Warmup Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Skills with warmups are unaffected by cooldowns. They become available to

    # use after a certain number of turns have passed. Warmups are only applied

    # in battle. Cooldown Rates do not affect warmups but Warmup Rates do.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    WARMUP_COLOUR   = 5          # Colour used from "Window" skin.

    WARMUP_SIZE     = 12         # Font size used for warmups.

    WARMUP_SUFFIX   = "%s턴"     # Suffix used for warmups.

    WARMUP_ICON     = 11          # Icon used for warmups. Set 0 to disable.

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Limited Use Settings -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Some skills have limited uses per battle. These limited uses are reset

    # at the start and end of each battle and do not apply when used outside of

    # battle. There are no effects that can affect limited uses.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    LIMITED_COLOUR  = 8          # Colour used from "Window" skin.

    LIMITED_SIZE    = 12         # Font size used for used up.

    LIMITED_TEXT    = "Used"     # Text used for used up.

    LIMITED_ICON    = 11          # Icon used for used up. Set 0 to disable.

    

  end # SKILL_RESTRICT

end # YEA


#==============================================================================

# ▼ Editting anything past this point may potentially result in causing

# computer damage, incontinence, explosion of user's head, coma, death, and/or

# halitosis so edit at your own risk.

#==============================================================================


module YEA

  module REGEXP

  module BASEITEM

    

    COOLDOWN_RATE = /<(?:COOL_DOWN_RATE|cooldown rate):[ ](\d+)([%%])>/i

    COOLDOWN_LOCK = /<(?:COOL_DOWN_LOCK|cooldown lock)>/i

    WARMUP_RATE   = /<(?:WARM_UP_RATE|warmup rate):[ ](\d+)([%%])>/i

    

  end # BASEITEM

  module SKILL

    

    COOLDOWN = /<(?:COOL_DOWN|cooldown):[ ](\d+)>/i

    WARMUP   = /<(?:WARM_UP|warmup):[ ](\d+)>/i

    LIMITED_USES = /<(?:LIMITED_USES|limited uses):[ ](\d+)>/i

    

    CHANGE_COOLDOWN = /<(?:CHANGE_COOL_DOWN|change cooldown):[ ]([\+\-]\d+)>/i

    STYPE_COOLDOWN =

      /<(?:STYPE_COOL_DOWN|stype cooldown)[ ](\d+):[ ]([\+\-]\d+)>/i

    SKILL_COOLDOWN =

      /<(?:SKILL_COOL_DOWN|skill cooldown)[ ](\d+):[ ]([\+\-]\d+)>/i

      

    RESTRICT_IF_SWITCH  = 

      /<(?:RESTRICT_IF_SWITCH|restrict if switch):[ ](\d+)>/i

    RESTRICT_ANY_SWITCH =

      /<(?:RESTRICT_ANY_SWITCH|restrict any switch):[ ]*(\d+(?:\s*,\s*\d+)*)>/i

    RESTRICT_ALL_SWITCH =

      /<(?:RESTRICT_ALL_SWITCH|restrict all switch):[ ]*(\d+(?:\s*,\s*\d+)*)>/i

    

    RESTRICT_EVAL_ON  = /<(?:RESTRICT_EVAL|restrict eval)>/i

    RESTRICT_EVAL_OFF = /<\/(?:RESTRICT_EVAL|restrict eval)>/i

    

  end # SKILL

  module ITEM

    

    CHANGE_COOLDOWN = /<(?:CHANGE_COOL_DOWN|change cooldown):[ ]([\+\-]\d+)>/i

    STYPE_COOLDOWN =

      /<(?:STYPE_COOL_DOWN|stype cooldown)[ ](\d+):[ ]([\+\-]\d+)>/i

    SKILL_COOLDOWN =

      /<(?:SKILL_COOL_DOWN|skill cooldown)[ ](\d+):[ ]([\+\-]\d+)>/i

    

  end # ITEM

  end # REGEXP

end # YEA


#==============================================================================

# ■ Icon

#==============================================================================


module Icon

  

  #--------------------------------------------------------------------------

  # self.cooldown

  #--------------------------------------------------------------------------

  def self.cooldown; return YEA::SKILL_RESTRICT::COOLDOWN_ICON; end

  

  #--------------------------------------------------------------------------

  # self.warmup

  #--------------------------------------------------------------------------

  def self.warmup; return YEA::SKILL_RESTRICT::WARMUP_ICON; end

  

  #--------------------------------------------------------------------------

  # self.limited

  #--------------------------------------------------------------------------

  def self.limited; return YEA::SKILL_RESTRICT::LIMITED_ICON; end

    

end # Icon


#==============================================================================

# ■ Numeric

#==============================================================================


class Numeric

  

  #--------------------------------------------------------------------------

  # new method: group_digits

  #--------------------------------------------------------------------------

  unless $imported["YEA-CoreEngine"]

  def group; return self.to_s; end

  end # $imported["YEA-CoreEngine"]

    

end # Numeric


#==============================================================================

# ■ DataManager

#==============================================================================


module DataManager

  

  #--------------------------------------------------------------------------

  # alias method: load_database

  #--------------------------------------------------------------------------

  class <<self; alias load_database_srs load_database; end

  def self.load_database

    load_database_srs

    load_notetags_srs

  end

  

  #--------------------------------------------------------------------------

  # new method: load_notetags_srs

  #--------------------------------------------------------------------------

  def self.load_notetags_srs

    groups = [$data_actors, $data_classes, $data_skills, $data_weapons,

      $data_armors, $data_enemies, $data_states, $data_items]

    for group in groups

      for obj in group

        next if obj.nil?

        obj.load_notetags_srs

      end

    end

  end

  

end # DataManager


#==============================================================================

# ■ RPG::BaseItem

#==============================================================================


class RPG::BaseItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :cooldown_rate

  attr_accessor :cooldown_lock

  attr_accessor :warmup_rate

  

  #--------------------------------------------------------------------------

  # common cache: load_notetags_srs

  #--------------------------------------------------------------------------

  def load_notetags_srs

    @cooldown_rate = 1.0

    @warmup_rate = 1.0

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::BASEITEM::COOLDOWN_RATE

        @cooldown_rate = $1.to_i * 0.01

      when YEA::REGEXP::BASEITEM::COOLDOWN_LOCK

        @cooldown_lock = true

      when YEA::REGEXP::BASEITEM::WARMUP_RATE

        @warmup_rate = $1.to_i * 0.01

      #---

      end

    } # self.note.split

    #---

  end

  

end # RPG::BaseItem


#==============================================================================

# ■ RPG::Skill

#==============================================================================


class RPG::Skill < RPG::UsableItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :cooldown

  attr_accessor :warmup

  attr_accessor :limited_uses

  attr_accessor :change_cooldown

  attr_accessor :skill_cooldown

  attr_accessor :restrict_any_switch

  attr_accessor :restrict_all_switch

  attr_accessor :restrict_eval

  

  #--------------------------------------------------------------------------

  # common cache: load_notetags_srs

  #--------------------------------------------------------------------------

  def load_notetags_srs

    @cooldown = 0

    @warmup = 0

    @limited_uses = 0

    @change_cooldown = {}

    @skill_cooldown = {}

    @restrict_any_switch = []

    @restrict_all_switch = []

    @restrict_eval = ""

    @restrict_eval_on = false

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::SKILL::COOLDOWN

        @cooldown = $1.to_i

      when YEA::REGEXP::SKILL::WARMUP

        @warmup = $1.to_i

      when YEA::REGEXP::SKILL::LIMITED_USES

        @limited_uses = $1.to_i

      #---

      when YEA::REGEXP::SKILL::CHANGE_COOLDOWN

        @change_cooldown[0] = $1.to_i

      when YEA::REGEXP::SKILL::STYPE_COOLDOWN

        @change_cooldown[$1.to_i] = $2.to_i

      when YEA::REGEXP::SKILL::SKILL_COOLDOWN

        @skill_cooldown[$1.to_i] = $2.to_i

      #---

      when YEA::REGEXP::SKILL::RESTRICT_IF_SWITCH

        @restrict_any_switch.push($1.to_i)

      when YEA::REGEXP::SKILL::RESTRICT_ANY_SWITCH

        $1.scan(/\d+/).each { |num| 

        @restrict_any_switch.push(num.to_i) if num.to_i > 0 }

      when YEA::REGEXP::SKILL::RESTRICT_ALL_SWITCH

        $1.scan(/\d+/).each { |num| 

        @restrict_all_switch.push(num.to_i) if num.to_i > 0 }

      #---

      when YEA::REGEXP::SKILL::RESTRICT_EVAL_ON

        @restrict_eval_on = true

      when YEA::REGEXP::SKILL::RESTRICT_EVAL_OFF

        @restrict_eval_off = true

      else

        @restrict_eval += line.to_s if @restrict_eval_on

      #---

      end

    } # self.note.split

    #---

  end

  

end # RPG::Skill


#==============================================================================

# ■ RPG::Item

#==============================================================================


class RPG::Item < RPG::UsableItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :change_cooldown

  attr_accessor :skill_cooldown

  

  #--------------------------------------------------------------------------

  # common cache: load_notetags_srs

  #--------------------------------------------------------------------------

  def load_notetags_srs

    @change_cooldown = {}

    @skill_cooldown = {}

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::ITEM::CHANGE_COOLDOWN

        @change_cooldown[0] = $1.to_i

      when YEA::REGEXP::ITEM::STYPE_COOLDOWN

        @change_cooldown[$1.to_i] = $2.to_i

      when YEA::REGEXP::ITEM::SKILL_COOLDOWN

        @skill_cooldown[$1.to_i] = $2.to_i

      #---

      end

    } # self.note.split

    #---

  end

  

end # RPG::Item


#==============================================================================

# ■ Game_BattlerBase

#==============================================================================


class Game_BattlerBase

  

  #--------------------------------------------------------------------------

  # alias method: initialize

  #--------------------------------------------------------------------------

  alias game_battlerbase_initialize_srs initialize

  def initialize

    game_battlerbase_initialize_srs

    reset_cooldowns

    reset_times_used

  end

  

  #--------------------------------------------------------------------------

  # new method: reset_cooldowns

  #--------------------------------------------------------------------------

  def reset_cooldowns

    @cooldown = {}

  end

  

  #--------------------------------------------------------------------------

  # new method: reset_times_used

  #--------------------------------------------------------------------------

  def reset_times_used

    @times_used = {}

  end

  

  #--------------------------------------------------------------------------

  # alias method: skill_conditions_met?

  #--------------------------------------------------------------------------

  alias game_battlerbase_skill_conditions_met_srs skill_conditions_met?

  def skill_conditions_met?(skill)

    return false if skill_restriction?(skill)

    return game_battlerbase_skill_conditions_met_srs(skill)

  end

  

  #--------------------------------------------------------------------------

  # alias method: pay_skill_cost

  #--------------------------------------------------------------------------

  alias game_battlerbase_pay_skill_cost_srs pay_skill_cost

  def pay_skill_cost(skill)

    game_battlerbase_pay_skill_cost_srs(skill)

    pay_skill_cooldown(skill)

  end

  

  #--------------------------------------------------------------------------

  # new method: skill_restriction?

  #--------------------------------------------------------------------------

  def skill_restriction?(skill)

    if $game_party.in_battle

      return true if cooldown?(skill) > 0

      return true if warmup?(skill) > $game_troop.turn_count

      return true if limit_restricted?(skill)

    end

    return true if switch_restricted?(skill)

    return true if restrict_eval?(skill)

    return false

  end

  

  #--------------------------------------------------------------------------

  # new method: cooldown?

  #--------------------------------------------------------------------------

  def cooldown?(skill)

    skill = skill.id if skill.is_a?(RPG::Skill)

    return @cooldown[skill].nil? ? 0 : @cooldown[skill]

  end

  

  #--------------------------------------------------------------------------

  # new method: warmup?(skill)

  #--------------------------------------------------------------------------

  def warmup?(skill)

    skill = skill.id if skill.is_a?(RPG::Skill)

    return [$data_skills[skill].warmup * wur, 0].max.to_i

  end

  

  #--------------------------------------------------------------------------

  # new method: limit_restricted?

  #--------------------------------------------------------------------------

  def limit_restricted?(skill)

    return false if skill.limited_uses <= 0

    return times_used?(skill) >= skill.limited_uses

  end

  

  #--------------------------------------------------------------------------

  # new method: times_used?

  #--------------------------------------------------------------------------

  def times_used?(skill)

    skill = skill.id if skill.is_a?(RPG::Skill)

    return @times_used[skill].nil? ? 0 : @times_used[skill]

  end

  

  #--------------------------------------------------------------------------

  # new method: update_times_used

  #--------------------------------------------------------------------------

  def update_times_used(skill)

    skill = skill.id if skill.is_a?(RPG::Skill)

    reset_times_used if @times_used.nil?

    @times_used[skill] = 0 if @times_used[skill].nil?

    @times_used[skill] += 1

  end

  

  #--------------------------------------------------------------------------

  # new method: cdr

  #--------------------------------------------------------------------------

  def cdr

    n = 1.0

    if actor?

      n *= self.actor.cooldown_rate

      n *= self.class.cooldown_rate

      for equip in equips

        next if equip.nil?

        n *= equip.cooldown_rate

      end

    else

      n *= self.enemy.cooldown_rate

      if $imported["YEA-Doppelganger"] && !self.class.nil?

        n *= self.class.cooldown_rate

      end

    end

    for state in states

      next if state.nil?

      n *= state.cooldown_rate

    end

    return n

  end

  

  #--------------------------------------------------------------------------

  # new method: pay_skill_cooldown

  #--------------------------------------------------------------------------

  def pay_skill_cooldown(skill)

    return unless $game_party.in_battle

    skill = skill.id if skill.is_a?(RPG::Skill)

    set_cooldown(skill, $data_skills[skill].cooldown * cdr)

  end

  

  #--------------------------------------------------------------------------

  # new method: set_cooldown

  #--------------------------------------------------------------------------

  def set_cooldown(skill, amount = 0)

    return unless $game_party.in_battle

    skill = skill.id if skill.is_a?(RPG::Skill)

    @cooldown[skill] = [amount, 0].max.to_i

  end

  

  #--------------------------------------------------------------------------

  # new method: cooldown_lock?

  #--------------------------------------------------------------------------

  def cooldown_lock?

    if actor?

      return true if self.actor.cooldown_lock

      return true if self.class.cooldown_lock

      for equip in equips

        next if equip.nil?

        return true if equip.cooldown_lock

      end

    else

      return true if self.enemy.cooldown_lock

    end

    for state in states

      next if state.nil?

      return true if state.cooldown_lock

    end

    return false

  end

  

  #--------------------------------------------------------------------------

  # new method: update_cooldowns

  #--------------------------------------------------------------------------

  def update_cooldowns(amount = -1, stype_id = 0, skill_id = 0)

    return if cooldown_lock?

    reset_cooldowns if @cooldown.nil?

    for skill in skills

      skill = $data_skills[skill] if !skill.is_a?(RPG::Skill)

      next if stype_id != 0 && skill.stype_id != stype_id

      next if skill_id != 0 && skill.id != skill_id

      set_cooldown(skill, cooldown?(skill) + amount)

    end

  end

  

  #--------------------------------------------------------------------------

  # new method: wur

  #--------------------------------------------------------------------------

  def wur

    n = 1.0

    if actor?

      n *= self.actor.warmup_rate

      n *= self.class.warmup_rate

      for equip in equips

        next if equip.nil?

        n *= equip.warmup_rate

      end

    else

      n *= self.enemy.warmup_rate

      if $imported["YEA-Doppelganger"] && !self.class.nil?

        n *= self.class.warmup_rate

      end

    end

    for state in states

      next if state.nil?

      n *= state.warmup_rate

    end

    return n

  end

  

  #--------------------------------------------------------------------------

  # new method: switch_restricted?

  #--------------------------------------------------------------------------

  def switch_restricted?(skill)

    return true if restrict_any_switch?(skill)

    return true if restrict_all_switch?(skill)

    return false

  end

  

  #--------------------------------------------------------------------------

  # new method: restrict_any_switch?

  #--------------------------------------------------------------------------

  def restrict_any_switch?(skill)

    for switch_id in skill.restrict_any_switch

      return true if $game_switches[switch_id]

    end

    return false

  end

  

  #--------------------------------------------------------------------------

  # new method: restrict_all_switch?

  #--------------------------------------------------------------------------

  def restrict_all_switch?(skill)

    return false if skill.restrict_all_switch == []

    for switch_id in skill.restrict_all_switch

      return false unless $game_switches[switch_id]

    end

    return true

  end

  

  #--------------------------------------------------------------------------

  # new method: restrict_eval?

  #--------------------------------------------------------------------------

  def restrict_eval?(skill)

    return false if skill.restrict_eval == ""

    return eval(skill.restrict_eval)

  end

  

end # Game_BattlerBase


#==============================================================================

# ■ Game_Battler

#==============================================================================


class Game_Battler < Game_BattlerBase

  

  #--------------------------------------------------------------------------

  # alias method: on_battle_start

  #--------------------------------------------------------------------------

  alias game_battler_on_battle_start_srs on_battle_start

  def on_battle_start

    game_battler_on_battle_start_srs

    reset_cooldowns

    reset_times_used

  end

  

  #--------------------------------------------------------------------------

  # alias method: on_battle_end

  #--------------------------------------------------------------------------

  alias game_battler_on_battle_end_srs on_battle_end

  def on_battle_end

    game_battler_on_battle_end_srs

    reset_cooldowns

    reset_times_used

  end

  

  #--------------------------------------------------------------------------

  # alias method: item_apply

  #--------------------------------------------------------------------------

  alias game_battler_item_apply_srs item_apply

  def item_apply(user, item)

    game_battler_item_apply_srs(user, item)

    updated_limited_uses(user, item)

  end

  

  #--------------------------------------------------------------------------

  # new method: updated_limited_uses

  #--------------------------------------------------------------------------

  def updated_limited_uses(user, item)

    return unless $game_party.in_battle

    return if item.nil?

    return unless item.is_a?(RPG::Skill)

    user.update_times_used(item)

  end

  

  #--------------------------------------------------------------------------

  # alias method: item_user_effect

  #--------------------------------------------------------------------------

  alias game_battler_item_user_effect_srs item_user_effect

  def item_user_effect(user, item)

    game_battler_item_user_effect_srs(user, item)

    apply_cooldown_changes(user, item)

  end

  

  #--------------------------------------------------------------------------

  # new method: apply_cooldown_changes

  #--------------------------------------------------------------------------

  def apply_cooldown_changes(user, item)

    return unless $game_party.in_battle

    return if item.nil?

    #---

    if item.change_cooldown != {}

      for key in item.change_cooldown

        stype_id = key[0]

        update_cooldowns(item.change_cooldown[stype_id], stype_id)

      end

      @result.success = true

    end

    #---

    if item.skill_cooldown != {}

      for key in item.skill_cooldown

        skill_id = key[0]

        update_cooldowns(item.skill_cooldown[skill_id], 0, skill_id)

      end

      @result.success = true

    end

  end

  

end # Game_Battler


#==============================================================================

# ■ Game_Enemy

#==============================================================================


class Game_Enemy < Game_Battler

  

  #--------------------------------------------------------------------------

  # new method: skills

  #--------------------------------------------------------------------------

  def skills

    data = []

    for action in enemy.actions

      next if data.include?(action.skill_id)

      data.push(action.skill_id)

    end

    return data

  end

  

end # Game_Enemy


#==============================================================================

# ■ Game_Unit

#==============================================================================


class Game_Unit

  

  #--------------------------------------------------------------------------

  # new method: update_restrictions

  #--------------------------------------------------------------------------

  def update_restrictions

    for member in members; member.update_cooldowns; end

  end

  

end # Game_Unit


#==============================================================================

# ■ Window_Base

#==============================================================================


class Window_Base < Window

  

  #--------------------------------------------------------------------------

  # new methods: restrict_colours

  #--------------------------------------------------------------------------

  def cooldown_colour; text_color(YEA::SKILL_RESTRICT::COOLDOWN_COLOUR); end;

  def warmup_colour; text_color(YEA::SKILL_RESTRICT::WARMUP_COLOUR); end;

  def limited_colour; text_color(YEA::SKILL_RESTRICT::LIMITED_COLOUR); end;

  

end # Window_Base


#==============================================================================

# ■ Window_SkillList

#==============================================================================


class Window_SkillList < Window_Selectable

  

  #--------------------------------------------------------------------------

  # alias method: draw_item

  #--------------------------------------------------------------------------

  alias window_skilllist_draw_item_srs draw_item

  def draw_item(index)

    if skill_restriction?(index)

      draw_skill_restriction(index)

    else

      window_skilllist_draw_item_srs(index)

    end

  end

  

  #--------------------------------------------------------------------------

  # new method: skill_restriction?

  #--------------------------------------------------------------------------

  def skill_restriction?(index)

    skill = @data[index]

    return false if @actor.nil?

    return @actor.skill_restriction?(skill)

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_item

  #--------------------------------------------------------------------------

  def draw_skill_restriction(index)

    skill = @data[index]

    rect = item_rect(index)

    rect.width -= 4

    draw_item_name(skill, rect.x, rect.y, enable?(skill))

    if @actor.limit_restricted?(skill)

      draw_skill_limited(rect, skill)

    elsif @actor.cooldown?(skill) > 0

      draw_skill_cooldown(rect, skill)

    elsif warmup_restriction?(skill)

      draw_skill_warmup(rect, skill)

    else

      draw_skill_cost(rect, skill)

    end

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_skill_limited

  #--------------------------------------------------------------------------

  def draw_skill_limited(rect, skill)

    change_color(limited_colour, enable?(skill))

    icon = Icon.limited

    if icon > 0

      draw_icon(icon, rect.x + rect.width-24, rect.y, enable?(skill))

      rect.width -= 24

    end

    contents.font.size = YEA::SKILL_RESTRICT::LIMITED_SIZE

    text = YEA::SKILL_RESTRICT::LIMITED_TEXT

    draw_text(rect, text, 2)

    reset_font_settings

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_skill_cooldown

  #--------------------------------------------------------------------------

  def draw_skill_cooldown(rect, skill)

    change_color(cooldown_colour, enable?(skill))

    icon = Icon.cooldown

    if icon > 0

      draw_icon(icon, rect.x + rect.width-24, rect.y, enable?(skill))

      rect.width -= 24

    end

    contents.font.size = YEA::SKILL_RESTRICT::COOLDOWN_SIZE

    value = @actor.cooldown?(skill)

    text = sprintf(YEA::SKILL_RESTRICT::COOLDOWN_SUFFIX, value.group)

    draw_text(rect, text, 2)

    reset_font_settings

  end

  

  #--------------------------------------------------------------------------

  # new method: warmup_restriction?

  #--------------------------------------------------------------------------

  def warmup_restriction?(skill)

    return false unless $game_party.in_battle

    return @actor.warmup?(skill) > $game_troop.turn_count

  end

  

  #--------------------------------------------------------------------------

  # new method: draw_skill_warmup

  #--------------------------------------------------------------------------

  def draw_skill_warmup(rect, skill)

    change_color(warmup_colour, enable?(skill))

    icon = Icon.warmup

    if icon > 0

      draw_icon(icon, rect.x + rect.width-24, rect.y, enable?(skill))

      rect.width -= 24

    end

    contents.font.size = YEA::SKILL_RESTRICT::WARMUP_SIZE

    value = @actor.warmup?(skill) - $game_troop.turn_count

    text = sprintf(YEA::SKILL_RESTRICT::WARMUP_SUFFIX, value.group)

    draw_text(rect, text, 2)

    reset_font_settings

  end

  

end # Window_SkillList


#==============================================================================

# ■ Scene_Battle

#==============================================================================


class Scene_Battle < Scene_Base

  

  #--------------------------------------------------------------------------

  # alias method: turn_start

  #--------------------------------------------------------------------------

  alias scene_battle_turn_start_srs turn_start

  def turn_start

    $game_party.update_restrictions

    $game_troop.update_restrictions

    scene_battle_turn_start_srs

  end

  

end # Scene_Battle


#==============================================================================

# ▼ End of File

#==============================================================================

 

 

 

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.