#============================================================================== # スキル回数制 ver1.02 #------------------------------------------------------------------------------ #[概要] # MPを廃止して、スキルを回数制にします。 # #[仕様] # スキルで「MPにダメージ」にチェックを入れると正常に動作しません。 # ※ 存在しないはずのMPにダメージを与える ※ # エネミーに回数制を導入せず、アクターのみに使えるスキルなら動作します。 # #[スキル設定] # スキルの使用回数は『消費MP』に設定した数値になります。 # #[アイテム設定] # MPを回復するアイテムでスキルの使用回数を回復することができます。 # 範囲を単体にすると味方単体のスキル1つ、メモ欄に <全スキル> と書くと全スキル、 # 全体にすると味方全員の全スキルが範囲になります。 # ※ 味方全員のスキルを1つずつ回復するのはなんか変な気がするので未実装です。 # # 回復効果は、回復率で設定すると使用回数から割合で回復、 # 回復量で設定するとその数値分を回復します。 # #[エネミー設定] # エネミーのメモ欄に <プレッシャー> と書き、 # ターゲットにそのエネミーが含まれる場合、使用回数が 2 減ります。 # #[変更機能] # イベントコマンドの「全回復」を行うと、スキルの使用回復も全回復します。 # イベントコマンドの「MP の増減」を行うと、 # 指定したアクターのスキル使用回数を増減させることができます。 # #[導入上の注意] # アイテムを消費するスキルを導入する場合、こちらを上にしてください。 # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.02 アイテム画面で、ウィンドウの表示が正常に行われないのを修正 # ver1.01 全回復時、スキル回数が正常に回復しないのを修正 # 「MPの増減」で回数を回復したとき、使用回数を突破して回復してしまうのを修正 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module SkillNumber # エネミーにも回数制を適用する場合は true ENEMY = true # 使用回数が 0 のスキルの表示フラグ # 0 : いつでも表示する # 1 : 非戦闘中は非表示 # 2 : 戦闘中は非表示 # 3 : いつでも非表示 VISION1 = 2 # 使用回数が 0 のスキルの表示フラグ(使用回数回復時) # 0 : いつでも表示する # 1 : 非戦闘中は非表示 # 2 : 戦闘中は非表示 # 3 : いつでも非表示 VISION2 = 3 # 戦闘時、使用回数を回復したときに表示するメッセージ # 1つ目の%sにはアクター名、2つ目はスキル名、3つ目は回復値 VOCAB1 = "%sの%sの使用回数が %s 回復した!" # 戦闘時、使用回数を回復したときに表示するメッセージ。 # すべてのスキルを回復するときのメッセージ VOCAB2 = "%sのすべてのスキルの使用回数が回復した!" # 残り使用回数による文字色の変更 # COLOR1 : 使用回数が半分以上残っているとき # COLOR2 : 使用回数が半分以下になったとき # COLOR3 : 使用回数が4分の1以下になったとき # COLOR4 : 使用回数が 0 になったとき COLOR1 = Color.new(255, 255, 255) COLOR2 = Color.new(255, 255, 64) COLOR3 = Color.new(255, 32, 32) COLOR4 = Color.new(255, 255, 255, 128) # 簡易的にMPの描画を消したい場合は true に設定してください。 # true にすると、draw_actor_mp を無効化します。 MP_VISUAL = true end end #============================================================================== # ここまで #============================================================================== #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :skill_number # スキルの使用回数 #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias skill_number_initialize initialize def initialize @skill_number = [] for skill in $data_skills.compact @skill_number[skill.id] = skill.mp_cost end skill_number_initialize end #-------------------------------------------------------------------------- # ● 全回復 #-------------------------------------------------------------------------- alias skill_number_recover_all recover_all def recover_all skill_number_recover_all if self.actor? || Kazari::SkillNumber::ENEMY for skill in skills do @skill_number[skill.id] = skill.mp_cost end end end #-------------------------------------------------------------------------- # ● スキルの使用可能判定 ※ 再定義 #-------------------------------------------------------------------------- def skill_can_use?(skill) return false unless skill.is_a?(RPG::Skill) return false unless movable? return false if silent? and skill.spi_f > 0 if self.actor? || Kazari::SkillNumber::ENEMY return false if @skill_number[skill.id] == 0 # 残り回数が 0 だと使えない else return false if calc_mp_cost(skill) > mp end if $game_temp.in_battle return skill.battle_ok? else return skill.menu_ok? end end #-------------------------------------------------------------------------- # ● アイテムによる MP 回復量計算 ※ 再定義 #-------------------------------------------------------------------------- def calc_mp_recovery(user, item, skill_id) return 0 unless skill_id && item result = $data_skills[skill_id].mp_cost * item.mp_recovery_rate / 100 + item.mp_recovery result *= 2 if user.pharmacology # 薬の知識で効果 2 倍 return result end #-------------------------------------------------------------------------- # ● ダメージの反映 ※ 再定義 #-------------------------------------------------------------------------- def execute_damage(user, item = nil, skill_id = nil) if @hp_damage > 0 # ダメージが正の数 remove_states_shock # 衝撃によるステート解除 end self.hp -= @hp_damage if self.actor? || Kazari::SkillNumber::ENEMY if skill_id if skill_id == -1 skill_list = self.actor? ? self.skills : nil for skill in skill_list recov = calc_mp_recovery(user, item, skill.id) number = skill_number[skill.id] + recov - @mp_damage number = [number, $data_skills[skill.id].mp_cost].min self.skill_number[skill.id] = number end @mp_damage -= calc_mp_recovery(user, item, skill.id) else @mp_damage -= calc_mp_recovery(user, item, skill_id) number = skill_number[skill_id] - @mp_damage number = [number, $data_skills[skill_id].mp_cost].min self.skill_number[skill_id] = number end end else self.mp -= @mp_damage end if @absorbed # 吸収の場合 user.hp += @hp_damage unless user.actor || Kazari::SkillNumber::ENEMY user.mp += @mp_damage end end end #-------------------------------------------------------------------------- # ● アイテムの適用可能判定 ※ 再定義 #-------------------------------------------------------------------------- def item_effective?(user, item, skill_id) if item.for_dead_friend? != dead? return false end if item.for_friend? if skill_id == -1 for skill in skills return true if item_test(user, item, skill.id) end return false else return item_test(user, item, skill_id) end end return true end #-------------------------------------------------------------------------- # ● アイテムの適用テスト ※ 再定義 #-------------------------------------------------------------------------- def item_test(user, item, skill_id) tester = self.clone tester.make_obj_damage_value(user, item) tester.apply_state_changes(item) if tester.hp_damage < 0 or tester.calc_hp_recovery(user, item) > 0 return true if tester.hp < tester.maxhp end if tester.mp_damage < 0 or tester.calc_mp_recovery(user, item, skill_id) > 0 return true if tester.skill_number[skill_id] < $data_skills[skill_id].mp_cost end return true unless tester.added_states.empty? return true unless tester.removed_states.empty? return true if item.parameter_type > 0 return false end #-------------------------------------------------------------------------- # ● アイテムの効果適用 ※ 再定義 #-------------------------------------------------------------------------- def item_effect(user, item, skill_id = nil) clear_action_results unless item_effective?(user, item, skill_id) @skipped = true return end if rand(100) >= calc_hit(user, item) # 命中判定 @missed = true return end if rand(100) < calc_eva(user, item) # 回避判定 @evaded = true return end hp_recovery = calc_hp_recovery(user, item) # HP 回復量計算 make_obj_damage_value(user, item) # ダメージ計算 @hp_damage -= hp_recovery # HP 回復量を差し引く make_obj_absorb_effect(user, item) # 吸収効果計算 execute_damage(user, item, skill_id) # ダメージ反映 item_growth_effect(user, item) # 成長効果適用 if item.physical_attack and @hp_damage == 0 # 物理ノーダメージ判定 return end apply_state_changes(item) # ステート変化 end end #============================================================================== # ■ Game_BattleAction #============================================================================== class Game_BattleAction #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :target_skill_id #-------------------------------------------------------------------------- # ● クリア #-------------------------------------------------------------------------- alias skill_number_clear clear def clear skill_number_clear @target_skill_id = -1 end #-------------------------------------------------------------------------- # ● ターゲットスキルを設定 #-------------------------------------------------------------------------- def set_target_skill(skill_id) @target_skill_id = skill_id end end #============================================================================== # ■ Window_Skill #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ● スキルをリストに含めるかどうか #-------------------------------------------------------------------------- def include?(skill) return false if skill == nil return true if skill.mp_cost > 0 case Kazari::SkillNumber::VISION1 when 0 ; return true when 1 ; return $game_temp.in_battle when 2 ; return ! $game_temp.in_battle when 3 ; return false end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] for skill in @actor.skills next unless include?(skill) @data.push(skill) if skill.id == @actor.last_skill_id self.index = @data.size - 1 end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 ※ 再定義 # 消費MPが書かれていた場所に(残り回数 / 使用回数)と描画する #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_can_use?(skill) draw_item_name(skill, rect.x, rect.y, enabled) unless skill.mp_cost == 0 # 使用回数が 0 のスキルは回数の描画をしない(パッシブスキル等) text = @actor.skill_number[skill.id].to_s + " / " + skill.mp_cost.to_s self.contents.draw_text(rect, text, 2) end end end #-------------------------------------------------------------------------- # ● スキル名の描画 #-------------------------------------------------------------------------- def draw_item_name(skill, x, y, enabled) if skill != nil draw_icon(skill.icon_index, x, y, enabled) color = Kazari::SkillNumber::COLOR4 if enabled number = skill.mp_cost / @actor.skill_number[skill.id] case number # 残り使用回数で色を変化させる when 1 ; color = Kazari::SkillNumber::COLOR1 when 2,3 ; color = Kazari::SkillNumber::COLOR2 else ; color = Kazari::SkillNumber::COLOR3 end end self.contents.font.color = color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x + 24, y, 172, WLH, skill.name) end end end #============================================================================== # ■ Window_SkillTarget #============================================================================== class Window_SkillTarget < Window_Skill #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, width, height, actor) @actor = actor super(x, y, width, height, actor) end #-------------------------------------------------------------------------- # ● スキルをリストに含めるかどうか #-------------------------------------------------------------------------- def include?(skill) return false if skill == nil return true if skill.mp_cost > 0 case Kazari::SkillNumber::VISION2 when 0 ; return true when 1 ; return $game_temp.in_battle when 2 ; return ! $game_temp.in_battle when 3 ; return false end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(actor = @actor) @actor = actor @data = [] for skill in @actor.skills next unless include?(skill) @data.push(skill) end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_number[skill.id] > 0 draw_item_name(skill, rect.x, rect.y, enabled) unless skill.mp_cost == 0 # 使用回数が 0 のスキルは回数の描画をしない(パッシブスキル等) text = @actor.skill_number[skill.id].to_s + " / " + skill.mp_cost.to_s self.contents.draw_text(rect, text, 2) end end end #-------------------------------------------------------------------------- # ● カーソルの更新 #-------------------------------------------------------------------------- def update_cursor if @index == -1 # 全体 item_num = [@item_max + 1, page_item_max].min h = item_num / @column_max * WLH h = [h, WLH].max self.cursor_rect.set(0, 0, contents.width, h) elsif @index < 0 # カーソルなし self.cursor_rect.empty elsif @index < @item_max # 通常 rect = item_rect(@index) self.cursor_rect.set(rect.x, rect.y, rect.width, rect.height) end end end #============================================================================== # ■ Window_UserStatus #============================================================================== class Window_UserStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 544, WLH + 32) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(actor) self.contents.clear draw_actor_name(actor, 4, 0) draw_actor_level(actor, 140, 0) draw_actor_hp(actor, 240, 0) draw_actor_mp(actor, 392, 0) end end #============================================================================== # ■ Scene_Item #============================================================================== class Scene_Item < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias skill_number_start start def start skill_number_start actor = $game_party.members[0] @status_window = Window_UserStatus.new(0, 56) @status_window.viewport = @viewport @skill_target_window = Window_SkillTarget.new(0, 112, 544, 304, actor) @skill_target_window.help_window = @help_window @help_window.set_text("") hide_skill_target_window end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias skill_number_terminate terminate def terminate skill_number_terminate @status_window.dispose @skill_target_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 ※ 再定義 #-------------------------------------------------------------------------- def update super update_menu_background @help_window.update @item_window.update @target_window.update @status_window.update @skill_target_window.update if @item_window.active update_item_selection elsif @target_window.active update_target_selection elsif @skill_target_window.active update_skill_target_selection end end #-------------------------------------------------------------------------- # ● ターゲットの決定 #-------------------------------------------------------------------------- def determine_target used = false if @item.mp_recovery_rate > 0 || @item.mp_recovery > 0 if @item.for_all? for target in $game_party.members for skill in target.skills target.item_effect(target, @item, skill.id) used = true unless target.skipped end end else target = $game_party.members[@target_window.index] for skill in target.skills used = target.item_test(target, @item, skill.id) break if used end end else if @item.for_all? for target in $game_party.members target.item_effect(target, @item) used = true unless target.skipped end else $game_party.last_target_index = @target_window.index target = $game_party.members[@target_window.index] target.item_effect(target, @item) used = true unless target.skipped end end if used if (@item.mp_recovery_rate > 0 || @item.mp_recovery > 0) && ! @item.for_all? Sound.play_decision determine_target_skill else use_item_nontarget end else Sound.play_buzzer end end #-------------------------------------------------------------------------- # ● スキルの決定 #-------------------------------------------------------------------------- def determine_target_skill if @item.for_friend? show_skill_target_window if @item.note.include?("<全スキル>") @skill_target_window.index = -1 else @skill_target_window.index = 0 end end end #-------------------------------------------------------------------------- # ● スキル選択の更新 #-------------------------------------------------------------------------- def update_skill_target_selection if Input.trigger?(Input::B) Sound.play_cancel if $game_party.item_number(@item) == 0 # アイテムを使い切った場合 @item_window.refresh # ウィンドウの内容を再作成 end hide_skill_target_window show_target_window(@item_window.index % 2 == 0) elsif Input.trigger?(Input::C) if not $game_party.item_can_use?(@item) Sound.play_buzzer else determine_skill_target end end end #-------------------------------------------------------------------------- # ● スキルの決定 #-------------------------------------------------------------------------- def determine_skill_target used = false user = $game_party.members[@target_window.index] if @item.note.include?("<全スキル>") for skill in user.skills user.item_effect(user, @item, skill.id) used = true unless user.skipped end else $game_party.last_target_index = @target_window.index skill = @skill_target_window.skill user.item_effect(user, @item, skill.id) used = true unless user.skipped end if used @skill_target_window.refresh(user) use_item_nontarget else Sound.play_buzzer end end #-------------------------------------------------------------------------- # ● スキルウィンドウの表示 #-------------------------------------------------------------------------- def show_skill_target_window hide_target_window @item_window.visible = false @item_window.active = false @status_window.visible = true @skill_target_window.visible = true @skill_target_window.active = true @viewport.rect.set(0, 0, 544, 416) @status_window.refresh($game_party.members[@target_window.index]) @skill_target_window.refresh($game_party.members[@target_window.index]) @target_window.visible = false @target_window.active = false end #-------------------------------------------------------------------------- # ● ターゲットウィンドウの非表示 #-------------------------------------------------------------------------- def hide_skill_target_window @status_window.visible = false @skill_target_window.visible = false @skill_target_window.active = false @item_window.visible = true end end #============================================================================== # ■ Scene_Skill #============================================================================== class Scene_Skill < Scene_Base #-------------------------------------------------------------------------- # ● スキルの使用 ※ 再定義 #-------------------------------------------------------------------------- def use_skill_nontarget Sound.play_use_skill @actor.skill_number[@skill.id] -= 1 # スキル使用回数を 1 減らす @status_window.refresh @skill_window.refresh @target_window.refresh if $game_party.all_dead? $scene = Scene_Gameover.new elsif @skill.common_event_id > 0 $game_temp.common_event_id = @skill.common_event_id $scene = Scene_Map.new end end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● フレーム更新 ※ 再定義 #-------------------------------------------------------------------------- def update super update_basic(true) update_info_viewport # 情報表示ビューポートを更新 if $game_message.visible @info_viewport.visible = false @message_window.visible = true end unless $game_message.visible # メッセージ表示中以外 return if judge_win_loss # 勝敗判定 update_scene_change if @target_enemy_window != nil update_target_enemy_selection # 対象敵キャラ選択 elsif @target_actor_window != nil update_target_actor_selection # 対象アクター選択 elsif @skill_window != nil update_skill_selection # スキル選択 elsif @item_window != nil update_item_selection # アイテム選択 elsif @skill_target_window != nil update_skill_target_selection # スキル選択 elsif @party_command_window.active update_party_command_selection # パーティコマンド選択 elsif @actor_command_window.active update_actor_command_selection # アクターコマンド選択 else process_battle_event # バトルイベントの処理 process_action # 戦闘行動 process_battle_event # バトルイベントの処理 end end end #-------------------------------------------------------------------------- # ● 対象アクター選択の更新 #-------------------------------------------------------------------------- def update_target_actor_selection @target_actor_window.update if Input.trigger?(Input::B) Sound.play_cancel end_target_actor_selection @item = nil elsif Input.trigger?(Input::C) @active_battler.action.target_index = @target_actor_window.index if @item if @item.mp_recovery_rate > 0 || @item.mp_recovery > 0 @target = $game_party.members[@target_actor_window.index] tester = @target.clone for skill in tester.skills used = tester.item_test(tester, @item, skill.id) break if used end if used Sound.play_decision end_target_actor_selection end_skill_selection end_item_selection start_skill_target_selection(@target) else Sound.play_buzzer end else Sound.play_decision end_target_actor_selection end_skill_selection end_item_selection next_actor end else Sound.play_decision end_target_actor_selection end_skill_selection end_item_selection next_actor end end end #-------------------------------------------------------------------------- # ● スキル選択の開始 #-------------------------------------------------------------------------- def start_skill_target_selection(actor) @help_window = Window_Help.new @skill_target_window = Window_SkillTarget.new(0, 56, 544, 232, actor) @skill_target_window.help_window = @help_window @actor_command_window.active = false @skill_target_window.index = @item.note.include?("<全スキル>") ? -1 : 0 end #-------------------------------------------------------------------------- # ● スキル選択の終了 #-------------------------------------------------------------------------- def end_skill_target_selection if @skill_target_window != nil @skill_target_window.dispose @skill_target_window = nil @help_window.dispose @help_window = nil end @item = nil @actor_command_window.active = true end #-------------------------------------------------------------------------- # ● スキル選択の更新 #-------------------------------------------------------------------------- def update_skill_target_selection @skill_target_window.active = true @skill_target_window.update @help_window.update if Input.trigger?(Input::B) Sound.play_cancel end_skill_target_selection elsif Input.trigger?(Input::C) if @skill_target_window.index == -1 skill_id = -1 else @skill = @skill_target_window.skill skill_id = @skill.id end if @target.item_effective?(@active_battler, @item, skill_id) Sound.play_decision determine_target_skill else Sound.play_buzzer end end end #-------------------------------------------------------------------------- # ● スキルの決定 #-------------------------------------------------------------------------- def determine_target_skill @skill_target_window.active = false if @item.note.include?("<全スキル>") @active_battler.action.set_target_skill(-1) else @active_battler.action.set_target_skill(@skill.id) end end_skill_target_selection next_actor end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : アイテム ※ 再定義 #-------------------------------------------------------------------------- def execute_action_item item = @active_battler.action.item text = sprintf(Vocab::UseItem, @active_battler.name, item.name) @message_window.add_instant_text(text) targets = @active_battler.action.make_targets display_animation(targets, item.animation_id) $game_party.consume_item(item) $game_temp.common_event_id = item.common_event_id skill_id = @active_battler.action.target_skill_id for target in targets target.item_effect(@active_battler, item, skill_id) display_action_effects(target, item) end end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : スキル ※ 再定義 #-------------------------------------------------------------------------- def execute_action_skill skill = @active_battler.action.skill text = @active_battler.name + skill.message1 @message_window.add_instant_text(text) unless skill.message2.empty? wait(10) @message_window.add_instant_text(skill.message2) end targets = @active_battler.action.make_targets display_animation(targets, skill.animation_id) if @active_battler.actor? || Kazari::SkillNumber::ENEMY pressure = false for target in targets next if target.actor? enemy = $data_enemies[target.enemy_id] pressure = true if enemy.note.include?("<プレッシャー>") end @active_battler.skill_number[skill.id] -= pressure ? 2 : 1 else @active_battler.mp -= @active_battler.calc_mp_cost(skill) end $game_temp.common_event_id = skill.common_event_id for target in targets target.skill_effect(@active_battler, skill) display_action_effects(target, skill) end end #-------------------------------------------------------------------------- # ● MP ダメージ表示 ※ 再定義 #-------------------------------------------------------------------------- def display_mp_damage(target, obj = nil) return if target.dead? return if target.mp_damage == 0 if target.absorbed # 吸収 fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage) elsif target.mp_damage > 0 # ダメージ fmt = target.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss text = sprintf(fmt, target.name, Vocab::mp, target.mp_damage) else # 回復 if target.actor? || Kazari::SkillNumber::ENEMY if obj.for_all? || obj.note.include?("<全スキル>") fmt = Kazari::SkillNumber::VOCAB2 text = sprintf(fmt, target.name) else fmt = Kazari::SkillNumber::VOCAB1 skill_id = @active_battler.action.target_skill_id skill = $data_skills[skill_id] text = sprintf(fmt, target.name, skill.name, -target.mp_damage) end else fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery text = sprintf(fmt, target.name, Vocab::mp, -target.mp_damage) end Sound.play_recovery end @message_window.add_instant_text(text) wait(30) end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● MP の増減 ※ 再定義 #-------------------------------------------------------------------------- def command_312 value = operate_value(@params[1], @params[2], @params[3]) iterate_actor_id(@params[0]) do |actor| for skill in actor.skills actor.skill_number[skill.id] = [actor.skill_number[skill.id] + value, skill.mp_cost].min end end return true end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● MP の描画 #-------------------------------------------------------------------------- alias skill_number_draw_actor_mp draw_actor_mp def draw_actor_mp(actor, x, y, width = 120) unless Kazari::SkillNumber::MP_VISUAL skill_number_draw_actor_mp(actor, x, y, width) end end end