#◆◇◆◇◆ ☆ アイテム消費攻撃&スキル ver 1.22 ◇◆◇◆◇ # ☆ マスタースクリプト ver 2.00 以降専用 # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/ # by みんと =begin 更新履歴 ver 1.22 パーティー分消費のミスを修正 ver 1.21 エラー落ちするミスを修正 ver 1.20 消費アイテムによって、 武器の攻撃力に修正がかかる機能を追加 ver 1.10 消費アイテムを複数種類登録していた場合、 消費個数が合わないミスを修正 セクション指定上下関係 パラメータ追加 ↓ このスクリプト 説明 アイテムを消費して実行する 武器とスキルを作成できるようにします。 消費するアイテムは複数種類指定でき、 消費個数も1個消費から複数個消費、 パーティー分消費と敵パーティー分消費も可能です。 例 オールポーションは味方全体に実行できるが、 全員分のポーションがないと使えない等 詳しい設定方法は、ソース内部のコメントを参照してください。 =end #============================================================================== # ■ MINTO::RGSS #============================================================================== module MINTO # アイテム消費攻撃&スキルを有効化 ( true で有効 / false で無効 ) RGSS["Item_Cost"] = true # アイテムを消費する武器(複数消費も可能) # @item_cost_weapon[武器ID] = [アイテムID, アイテムID2] @item_cost_weapon = [] # 変更しない @item_cost_weapon[0] = [1, 2] # 実際に消費する個数(2個以上の場合だけ記入。未記入なら1個とみなす) # ただし、 -1 でパーティー分 -2 で敵パーティー分消費になる # @item_cost_weapon_cost[武器ID] = [消費個数, 消費個数2] @item_cost_weapon_cost = [] # 変更しない @item_cost_weapon_cost[0] = [-2, 2] # アイテムの攻撃力修正 # 攻撃の際、威力に修正がかかる # @item_at_up[アイテムID] = 修正値 @item_at_up = [] # 変更しない @item_at_up[1] = 1 # アイテムを消費するスキル(複数消費も可能) # @item_cost_skill[スキルID] = [アイテムID, アイテムID2] @item_cost_skill = [] # 変更しない @item_cost_skill[1] = [1] # 実際に消費する個数(2個以上の場合だけ記入。未記入なら1個とみなす) # ただし、 -1 でパーティー分 -2 で敵パーティー分消費になる # @item_cost_skill_cost[スキルID] = [消費個数, 消費個数2] @item_cost_skill_cost = [] # 変更しない @item_cost_skill_cost[1] = [-2] #-------------------------------------------------------------------------- # ● item_at_up(参照) #-------------------------------------------------------------------------- def self.item_at_up return @item_at_up end #-------------------------------------------------------------------------- # ● item_cost_weapon(参照) #-------------------------------------------------------------------------- def self.item_cost_weapon return @item_cost_weapon end #-------------------------------------------------------------------------- # ● item_cost_weapon_cost(参照) #-------------------------------------------------------------------------- def self.item_cost_weapon_cost return @item_cost_weapon_cost end #-------------------------------------------------------------------------- # ● item_cost_skill(参照) #-------------------------------------------------------------------------- def self.item_cost_skill return @item_cost_skill end #-------------------------------------------------------------------------- # ● item_cost_skill_cost(参照) #-------------------------------------------------------------------------- def self.item_cost_skill_cost return @item_cost_skill_cost end #-------------------------------------------------------------------------- # ● 消費個数の算出 # id : 武器又はスキルのID # type : 0 なら武器 1 ならスキル # index : 配列のインデックス #-------------------------------------------------------------------------- def self.item_cost_check(id, type = 0, index = 0) case type when 0 # 武器の場合 if @item_cost_weapon_cost[id] item_cost = @item_cost_weapon_cost[id][index] if item_cost == -1 cost = exist_actor elsif item_cost == -2 cost = exist_enemy else cost = item_cost end else cost = 1 end when 1 # スキルの場合 if @item_cost_skill_cost[id] item_cost = @item_cost_skill_cost[id][index] if item_cost == -1 cost = exist_actor elsif item_cost == -2 cost = exist_enemy else cost = item_cost end else cost = 1 end end return cost end #-------------------------------------------------------------------------- # ● 求められたアイテムを個数分所持しているかのチェック # id : 武器又はスキルのID type : 0 なら武器 1 ならスキル #-------------------------------------------------------------------------- def self.item_cost_can_use?(id, type = 0) ok = 0 size = 0 case type when 0 # 武器の場合 if @item_cost_weapon[id] size = @item_cost_weapon[id].size for i in 0...@item_cost_weapon[id].size cost = item_cost_check(id, 0, i) if $game_party.item_number(@item_cost_weapon[id][i]) >= cost ok += 1 end end end when 1 # スキルの場合 if @item_cost_skill[id] size = @item_cost_skill[id].size for i in 0...@item_cost_skill[id].size cost = item_cost_check(id, 1, i) if $game_party.item_number(@item_cost_skill[id][i]) >= cost ok += 1 end end end end return (size != 0 && size == ok) end #-------------------------------------------------------------------------- # ● 求められたアイテムを減らす # id : 武器又はスキルのID type : 0 なら武器 1 ならスキル #-------------------------------------------------------------------------- def self.item_cost_lose(id, type = 0) ok = 0 size = 0 case type when 0 # 武器の場合 if @item_cost_weapon[id] size = @item_cost_weapon[id].size for i in 0...@item_cost_weapon[id].size cost = item_cost_check(id, 0, i) $game_party.lose_item(@item_cost_weapon[id][i], cost) end end when 1 # スキルの場合 if @item_cost_skill[id] size = @item_cost_skill[id].size for i in 0...@item_cost_skill[id].size cost = item_cost_check(id, 1, i) $game_party.lose_item(@item_cost_skill[id][i], cost) end end end end #-------------------------------------------------------------------------- # ● 生存している味方の計算 #-------------------------------------------------------------------------- def self.exist_actor exist = 0 for actor in $game_party.actors if actor.exist? exist += 1 end end return exist end #-------------------------------------------------------------------------- # ● 生存している敵の計算 #-------------------------------------------------------------------------- def self.exist_enemy exist = 0 for enemy in $game_troop.enemies if enemy.exist? exist += 1 end end return exist end end if MINTO::RGSS["Item_Cost"] #============================================================================== # ■ Game_Battler (分割定義 3) #------------------------------------------------------------------------------ #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと # Game_Enemy クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :atk_up # 攻撃力ボーナス #-------------------------------------------------------------------------- # ● スキルの使用可能判定 # skill_id : スキル ID #-------------------------------------------------------------------------- alias skill_can_use_Item_Cost skill_can_use? def skill_can_use?(skill_id) # アイテムを消費するスキルかどうか if MINTO.item_cost_skill[skill_id] # 消費個数を満たしていなければ使用不可 if !MINTO.item_cost_can_use?(skill_id, 1) return false end end # 元の処理を実行 skill_can_use_Item_Cost(skill_id) end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 攻撃力の取得 #-------------------------------------------------------------------------- def atk # スーパークラスを実行 n = super # 攻撃力ボーナスを追加 n += @atk_up.to_i return Integer(n) end end #============================================================================== # ■ Scene_Skill #------------------------------------------------------------------------------ #  スキル画面の処理を行うクラスです。 #============================================================================== class Scene_Skill #-------------------------------------------------------------------------- # ● フレーム更新 (ターゲットウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_target # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play(Data_System.data.cancel_se) # ターゲットウィンドウを消去 @skill_window.active = true @target_window.visible = false @target_window.active = false return end # C ボタンが押された場合 if Input.trigger?(Input::C) # SP 切れなどで使用できなくなった場合 unless @actor.skill_can_use?(@skill.id) # ブザー SE を演奏 $game_system.se_play(Data_System.data.buzzer_se) return end # ターゲットが全体の場合 if @target_window.index == -1 # パーティ全体にスキルの使用効果を適用 used = false for i in $game_party.actors used |= i.skill_effect(@actor, @skill) end end # ターゲットが使用者の場合 if @target_window.index <= -2 # ターゲットのアクターにスキルの使用効果を適用 target = $game_party.actors[@target_window.index + 10] used = target.skill_effect(@actor, @skill) end # ターゲットが単体の場合 if @target_window.index >= 0 # ターゲットのアクターにスキルの使用効果を適用 target = $game_party.actors[@target_window.index] used = target.skill_effect(@actor, @skill) end # スキルを使った場合 if used # スキルの使用時 SE を演奏 $game_system.se_play(@skill.menu_se) # SP 消費 @actor.sp -= @skill.sp_cost # パラメータ追加が有効なら SSP を消費 if MINTO::RGSS["parameter_addition"] @actor.ssp -= @skill.ssp_cost end # アイテム消費スキルの場合 if MINTO.item_cost_skill[@skill.id] id = @skill.id # 使用可能なら個数を減らす if MINTO.item_cost_can_use?(id, 1) MINTO.item_cost_lose(id, 1) end end # 各ウィンドウの内容を再作成 @status_window.refresh @skill_window.refresh @target_window.refresh # 全滅の場合 if $game_party.all_dead? # ゲームオーバー画面に切り替え $scene = Scene_Gameover.new return end # コモンイベント ID が有効の場合 if @skill.common_event_id > 0 # コモンイベント呼び出し予約 $game_temp.common_event_id = @skill.common_event_id # マップ画面に切り替え $scene = Scene_Map.new return end end # スキルを使わなかった場合 unless used # ブザー SE を演奏 $game_system.se_play(Data_System.data.buzzer_se) end return end end end #============================================================================== # ■ Scene_Battle (分割定義 3) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ : 基本コマンド) #-------------------------------------------------------------------------- alias update_phase3_basic_command_Item_Cost update_phase3_basic_command def update_phase3_basic_command # C ボタンが押された場合 if Input.trigger?(Input::C) # アクターコマンドウィンドウのカーソル位置で分岐 case @actor_command_window.index when 0 # 攻撃 # アイテムを消費する武器かどうか if MINTO.item_cost_weapon[@active_battler.weapon_id] # 消費個数を満たしていなければ使用不可 if !MINTO.item_cost_can_use?(@active_battler.weapon_id, 0) # ブザー SE を演奏 $game_system.se_play(Data_System.data.buzzer_se) return end end end end # 元の処理を実行 update_phase3_basic_command_Item_Cost end end #============================================================================== # ■ Scene_Battle (分割定義 4) #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● 基本アクション 結果作成 #-------------------------------------------------------------------------- alias make_basic_action_result_Item_Cost make_basic_action_result def make_basic_action_result # 攻撃の場合 if @active_battler.current_action.basic == 0 && @active_battler.equip? # アイテム消費の場合 if MINTO.item_cost_weapon[@active_battler.weapon_id] # アイテム切れだった場合は攻撃をなかったことにする if !MINTO.item_cost_can_use?(@active_battler.weapon_id, 0) return else # アイテムがコスト分残っていいれば減らす id = @active_battler.weapon_id MINTO.item_cost_lose(id, 0) at = 0 # 攻撃力ボーナスを初期化 @active_battler.atk_up = 0 # 武器の攻撃力にアイテム修正を加える for id in MINTO.item_cost_weapon[@active_battler.weapon_id] if MINTO.item_at_up[id] at += MINTO.item_at_up[id] end end @active_battler.atk_up += at end end end # 元の処理を実行 make_basic_action_result_Item_Cost # 攻撃力を戻す @active_battler.atk_up = 0 end #-------------------------------------------------------------------------- # ● スキルアクション 結果作成 #-------------------------------------------------------------------------- alias make_skill_action_result_Item_Cost make_skill_action_result def make_skill_action_result # アイテム消費スキルの場合 if MINTO.item_cost_skill[@skill.id] # 使用可能なら個数を減らす if MINTO.item_cost_can_use?(@skill.id, 1) MINTO.item_cost_lose(@skill.id, 1) end end # 元の処理を実行 make_skill_action_result_Item_Cost end end end