楼主: chd114

[RMVA发布] 【国庆补完计划Ⅰ】技能冷却加强版

[复制链接]
梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
回帖
693
发表于 2014-10-14 11:28:36 | 显示全部楼层
chd114 发表于 2014-10-9 21:09
$game_actors[x].skill_cool_add(y,z)就是对X号角色的Y技能的冷却增加Z个回合,Z如果是负的就减少,但是 ...

我的意思是,比如我攻击1号敌人,1号敌人的技能CD(如果在CD中)会加1个回合,如果攻击3号,则3号也是。反过来,敌人也是。

如果是(Y,Z),那恐怕只能对全体敌人使用了
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-10-14 21:59:47 | 显示全部楼层
lirn 发表于 2014-10-13 18:28
我的意思是,比如我攻击1号敌人,1号敌人的技能CD(如果在CD中)会加1个回合,如果攻击3号,则3号也是。 ...

我不确定这个系统对敌人能起到很好的效果···周末回家看看
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
92
在线时间
55 小时
注册时间
2009-8-8
回帖
7
发表于 2015-7-10 21:53:15 | 显示全部楼层
想来试试看好不好....
回复

使用道具 举报

梦石
0
星屑
50
在线时间
25 小时
注册时间
2015-8-8
回帖
6
发表于 2017-8-9 08:34:45 | 显示全部楼层
按照惯例脚本免费工程收费且与脚本有出入————正是这句话每次都勾起了我的好奇心,结果买了一大堆不需要的脚本……
强迫症和好奇心害死人呀。
回复

使用道具 举报

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
回帖
526
发表于 2017-8-18 18:32:49 | 显示全部楼层
拆台了
[pre lang="ruby"]#==============================================================================
#
# ▼ 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.
#
# <wp: 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   = 20         # Font size used for cooldowns.
    COOLDOWN_SUFFIX = "%sCD"     # Suffix used for cooldowns.
    COOLDOWN_ICON   = 0          # 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     = 20         # Font size used for warmups.
    WARMUP_SUFFIX   = "%sWU"     # Suffix used for warmups.
    WARMUP_ICON     = 0          # 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    = 16         # Font size used for used up.
    LIMITED_TEXT    = "使用过了"     # Text used for used up.
    LIMITED_ICON    = 0          # 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 = /<(?:CD|cd)[ ](\d+)>/i
    WARMUP   = /<(?:WP|wp)[ ](\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
#
#==============================================================================[/pre]

这是yanfly大佬的脚本里面有很多技能CD的方式
如果要更改CD(限伤害公式,数据库不知道应该是self=b user=a)
目标就是self.set_cooldown(技能ID,cooldown?(技能ID)空格(+-*/)1) 比如self.set_cooldown(1,cooldown?(1) +1)就是1号技能+1CD,第一个参数是减少ID的技能,第二个参数是重置为多少cooldown?(X)是调用了X号ID的冷却
攻击者就是把self改为user


LZ你太坑人了150经验,yanfly大佬的程度先达到吧,要CD的拿yanfly大佬的脚本,这位大佬还有很多脚本挺好用的
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部