=begin #-----------------------------------------------------------------------
 
●スキルクールタイム【RGSS3 by Declare War】
 
スキルにクールタイムをつける
 
スキルのメモ欄に <技能冷卻:n> と書くと
一度使用するとnターンの間使えなくなる
 
【イベントコマンド】
$game_temp.loss_cool_time(n)       # 敵味方全体のクールタイムをn減少
$game_temp.actor_loss_cool_time(n) # 味方全体のクールタイムをn減少
$game_temp.enemy_loss_cool_time(n) # 敵全体のクールタイムをn減少
 
【利用規約】
著作権明記と利用報告は不要、加工自由、転載と配布は禁止
 
【バージョン情報】
v1.2 - 併用性を向上 
v1.1 - エネミー側にもクールタイムを適応可能にした
v1.0 - 公開
 
=end #-------------------------------------------------------------------------
class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  COOL_TIME = /<技能冷卻:(\d+)>/
  #--------------------------------------------------------------------------
  # ● クールタイムを取得
  #--------------------------------------------------------------------------
  def cool_time
    return @cool_time if @cool_time != nil
    @cool_time = note =~ COOL_TIME ? $1.to_i + 1 : false
  end
end
 
class << BattleManager
  #--------------------------------------------------------------------------
  # ● 戦闘終了(エイリアス)
  #--------------------------------------------------------------------------
  alias cool_time_battle_end battle_end
  def battle_end(result)
    $game_temp.cool_time_variables_initialize
    cool_time_battle_end(result)
  end
  #--------------------------------------------------------------------------
  # ● ターン終了(エイリアス)
  #--------------------------------------------------------------------------
  alias cool_time_turn_end turn_end
  def turn_end
    $game_temp.loss_cool_time
    cool_time_turn_end
  end
end
 
class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :cool_time
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化(エイリアス)
  #--------------------------------------------------------------------------
  alias cool_time_initialize initialize
  def initialize
    cool_time_initialize
    cool_time_variables_initialize
  end
  #--------------------------------------------------------------------------
  # ● クールタイムの変数を初期化
  #--------------------------------------------------------------------------
  def cool_time_variables_initialize
    @cool_time = Hash.new{|h, k| h[k] = Hash.new(0)}
  end
  #--------------------------------------------------------------------------
  # ● クールタイム減少
  #--------------------------------------------------------------------------
  def loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n}}  
  end
  #--------------------------------------------------------------------------
  # ● アクターのみクールタイム減少
  #--------------------------------------------------------------------------
  def actor_loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n} if k.actor?}  
  end
  #--------------------------------------------------------------------------
  # ● エネミーのみクールタイム減少
  #--------------------------------------------------------------------------
  def enemy_loss_cool_time(n = 1)
    @cool_time.each{|k, v| v.keys.each{|key| v[key] -= n} if k.enemy?}  
  end
end
 
class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● スキルの使用可能条件チェック(エイリアス)
  #--------------------------------------------------------------------------
  alias cool_time_skill_conditions_met? skill_conditions_met?
  def skill_conditions_met?(skill)
    return false if skill_cooling?(skill)
    cool_time_skill_conditions_met?(skill)
  end
end
 
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● クールタイムを取得
  #--------------------------------------------------------------------------
  def cool_time
    $game_temp.cool_time[self]
  end
  #--------------------------------------------------------------------------
  # ● クールタイム中かどうか
  #--------------------------------------------------------------------------
  def skill_cooling?(skill)
    skill.cool_time && cool_time[skill.id] > 0
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用(エイリアス)
  #--------------------------------------------------------------------------
  alias cool_time_use_item use_item
  def use_item(item)
    count_cool_time(item) 
    cool_time_use_item(item)
  end
  #--------------------------------------------------------------------------
  # ● クールタイムの適用
  #--------------------------------------------------------------------------
  def count_cool_time(skill)
    return if !($game_party.in_battle && RPG::Skill === skill)
    return if !skill.cool_time
    $game_temp.cool_time[self][skill.id] = skill.cool_time
  end
end
 
class Window_BattleSkill < Window_SkillList
  #--------------------------------------------------------------------------
  # ● スキルの使用コストを描画(alias)
  #--------------------------------------------------------------------------
  alias cool_time_draw_skill_cost draw_skill_cost
  def draw_skill_cost(rect, skill)
    return draw_cool_time(rect, skill) if @actor.skill_cooling?(skill)
    cool_time_draw_skill_cost(rect, skill)
  end
  #--------------------------------------------------------------------------
  # ● クールタイムの描画
  #--------------------------------------------------------------------------
  def draw_cool_time(rect, skill)
    change_color(text_color(27), false)
    draw_text(rect, "CD #{@actor.cool_time[skill.id]}", 2)
  end
end