#============================================================================== # スキル使用回数制限 ver1.02 #------------------------------------------------------------------------------ #[特徴] # 1戦闘におけるスキルの使用回数を制限します。 # #[スキル設定方法] # スキルのメモ欄に <使用回数:数値> と書く。 # その数値分しか戦闘中に使用できません。書かなければ無制限となります。 # #[仕様] # 能力値[orステート]でスキル変化のスクリプトを導入している場合、 # 仕様元のスキルの使用回数を消費します。 # # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.02 戦闘を一度も行っていない状態で、メニュー画面からスキルを確認すると # エラーが出る不具合を修正 # ver1.01 『能力値でスキル変化』、『ステートでスキル変化』に対応 # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module SkillUseLimit # 残り使用回数の描画方法 VOCAB = "残り%2s回" # エネミーにも適用するか否か # true : 適用する # false : 適用しない ENEMY = true end end #============================================================================== # ここまで #============================================================================== $kzr_imported = {} if $kzr_imported == nil $kzr_imported["SkillUseLimit"] = true #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :skill_user_id #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_initialize initialize def initialize kzr_skill_use_limit_initialize @skill_user_id = 1 end end #============================================================================== # ■ Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :skill_use_limit #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_initialize initialize def initialize kzr_skill_use_limit_initialize @skill_use_limit = [0] $data_skills.compact.each {|s| @skill_use_limit << s.skill_use_limit } end end #============================================================================== # ■ Game_BattlerBase #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :skill_usable_number #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_initialize initialize def initialize kzr_skill_use_limit_initialize reset_skill_usable_number end #-------------------------------------------------------------------------- # ● スキル使用回数の初期化 #-------------------------------------------------------------------------- def reset_skill_usable_number @skill_usable_number = $game_system.skill_use_limit.clone end #-------------------------------------------------------------------------- # ● スキル使用コストの支払い可能判定 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_skill_cost_payable? skill_cost_payable? def skill_cost_payable?(skill) return false unless kzr_skill_use_limit_skill_cost_payable?(skill) return true if skill.skill_use_limit == 0 return @skill_usable_number[skill.id] > 0 end #-------------------------------------------------------------------------- # ● スキル使用コストの支払い #-------------------------------------------------------------------------- alias kzr_skill_use_limit_pay_skill_cost pay_skill_cost def pay_skill_cost(skill) kzr_skill_use_limit_pay_skill_cost(skill) return if enemy? && Kazari::SkillUseLimit::ENEMY == false if $kzr_imported["SkillChangeByState"] || $kzr_imported["SkillChangeByParam"] @skill_usable_number[current_action.default_use_skill_id] -= 1 else @skill_usable_number[skill.id] -= 1 end end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● 各種文字色の取得 #-------------------------------------------------------------------------- def skill_use_limit; text_color(16); end; # スキルの残り使用回数の色 end #============================================================================== # ■ Window_Help #============================================================================== class Window_Help < Window_Base #-------------------------------------------------------------------------- # ● アイテム設定 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_set_item set_item def set_item(item) kzr_skill_use_limit_set_item(item) draw_skill_use_limit(item) if item.is_a?(RPG::Skill) end #-------------------------------------------------------------------------- # ● 残り使用回数の描画 #-------------------------------------------------------------------------- def draw_skill_use_limit(item) return if item.skill_use_limit == 0 # 無制限のスキルは描画しない refresh change_color(skill_use_limit) actor = $game_actors[$game_temp.skill_user_id] text = sprintf(Kazari::SkillUseLimit::VOCAB, actor.skill_usable_number[item.id]) draw_text(0, contents.height - line_height, contents.width, line_height, text, 2) end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_start start def start $game_party.members.each {|m| m.reset_skill_usable_number } kzr_skill_use_limit_start end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias kzr_skill_use_limit_terminate terminate def terminate $game_party.members.each {|m| m.reset_skill_usable_number } kzr_skill_use_limit_terminate end #-------------------------------------------------------------------------- # ● コマンド[スキル] #-------------------------------------------------------------------------- alias kzr_skill_use_limit_command_skill command_skill def command_skill $game_temp.skill_user_id = BattleManager.actor.id kzr_skill_use_limit_command_skill end end #============================================================================== # ■ RPG::Skill #============================================================================== class RPG::Skill < RPG::UsableItem def skill_use_limit note.each_line { |line| case line when /<使用回数:(\d+)>/ ; return $1.to_i end } return 0 end end