# XMS.「XRXS33.アイテム消費スキル」 Tetra-Zリメイク版
# 原作 : 刻宮 様、桜雅 在土 様
# by Tetra-Z
#
# XMS.にあった「アイテム消費スキル」を我流に一からリメイク……したはず。

#==============================================================================
# XRXS33
#==============================================================================
module XRXS33
  def XRXS33.skill_use_item_array(skill_id)
    case skill_id
    #==========================================================================
    # □ カスタマイズポイント
    #==========================================================================
    when 1
      return [{}, {}, false]
    # when スキルID
    #   return [{消費}, {媒体}, 対象]
    #
    # 消費 : 「消費アイテムID => 消費数」のハッシュにて指定。
    #        スキル使用時、設定されたアイテムを消費。
    # 媒体 : 「必要アイテムID => 必要数」のハッシュにて指定。
    #        持っていればよいだけで、消費はしない。
    # 対象 : true  = ターゲット分消費。一人分あれば、一応スキル使用は可能。
    #        false = 上で設定した分消費。
    #
    # (例)
    # when 1
    #   return [{}, {1=>1}, false]
    # ヒールを使用するには、ポーションを持っている必要がある。消費はしない。
    # when 2
    #   return [{1=>1}, {}, false]
    # ヒール+を使用する度に、ポーションを消費する必要がある。
    # when 3
    #   return [{1=>2}, {}, true]
    # ヒールΩを使用する度に、対象一人あたりポーションを2個消費する必要がある。
    # 一人分の2個あれば、一応使用はできる。
    #==========================================================================
    end
    return [{}, {}, false]
  end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルの使用可能判定
  #     skill_id : スキル ID
  #--------------------------------------------------------------------------
  alias xrxs33_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    return xrxs33_skill_can_use?(skill_id) if !(self.is_a?(Game_Actor))
    array = XRXS33.skill_use_item_array(skill_id).dup
    for i in array[0].keys
      next if (i <= 0 or i >= $data_items.size)
      if $game_party.item_number(i) < array[0][i]
        return false
      end
    end
    for j in array[1].keys
      next if (j <= 0 or j >= $data_items.size)
      if $game_party.item_number(j) < array[1][j]
        return false
      end
    end
    return xrxs33_skill_can_use?(skill_id)
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias xrxs33_skill_effect skill_effect
  def skill_effect(user, skill)
    result = xrxs33_skill_effect(user, skill)
    $game_temp.skill_happened |= result
    $game_temp.target_count += 1
    if (result or $game_temp.in_battle_stack)
      $game_temp.skill_happened = true
    end
    return result
  end
end
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :skill_happened           # スキル発生
  attr_accessor :in_battle_stack          # 戦闘中か?
  attr_accessor :target_count             # スキルターゲットカウント
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias xrxs33_initialize initialize
  def initialize
    xrxs33_initialize
    @skill_happened = nil
    @in_battle_stack = @in_battle
    @target_count = 0
  end
end
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  alias xrxs33_update_target update_target
  def update_target
    $game_temp.skill_happened = false
    $game_temp.target_count = 0
    $game_temp.in_battle_stack = false
    # 呼び戻す
    xrxs33_update_target
    if $game_temp.skill_happened
      array = XRXS33.skill_use_item_array(@skill.id).dup
      j = array[2] ? $game_temp.target_count : 1
      for i in array[0].keys
        $game_party.lose_item(i, array[0][i] * j)
      end
      # スキルウィンドウの内容をもう一度再作成
      @skill_window.refresh
    end
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成 
  #--------------------------------------------------------------------------
  alias xrxs33_make_skill_action_result make_skill_action_result
  def make_skill_action_result
    $game_temp.skill_happened = false
    $game_temp.in_battle_stack = true
    $game_temp.target_count = 0
    # 呼び戻す
    xrxs33_make_skill_action_result
    if $game_temp.skill_happened
      array = XRXS33.skill_use_item_array(@active_battler.current_action.skill_id).dup
      j = array[2] ? $game_temp.target_count : 1
      for i in array[0].keys
        $game_party.lose_item(i, array[0][i] * j)
      end
    end
    $game_temp.in_battle_stack = false
  end
end

[PR]看護師の好条件求人なら:転職のプロがあなたをサポート!求人多数