#============================================================================== # ○使用回数制限つきスキル Ver1.02 # for RGSS2 # 西瓜 / Space not far # http://muspell.raindrop.jp/ # 使用に回数制限のあるスキルを設定します。 #============================================================================== # ■更新履歴 # Ver1.02 # ・使用制限のないスキルをメニューで使用した際、エラーが出る不具合を修正。 # Ver1.01 # ・敵のスキルにも使用制限を反映。 # ・導入すると普通のスキル使用時にエラーが出る不具合を修正。 #============================================================================== # スキルのメモ欄に<使用回数:n>と記述してください。 # n回のみそのスキルが使用可能になります。 # イベントコマンド「スクリプト」でsnf_skill_freq_recovery(アクターID)と # 記述することでそのIDのアクターの使用回数を最大まで回復させることが出来ます。 # アクターIDを省略した場合、パーティの全アクターの使用回数が回復します。 module SNF SKILLFREQ_RECOVERY = true # イベントコマンド「全回復」で使用回数が回復するか?(true/false) SKILLFREQ_RECOVERY_AFTERBATTLE = false # 戦闘後に使用回数が全回復するか?(true/false) SKILLFREQ_DESCRIPTION = true # スキル説明文の末尾に使用回数を表示するか?(true/false) SKILLFREQ_DESC_FRONT = "(残り" # 使用回数の前に表示する文字 SKILLFREQ_DESC_BACK = "回)" # 使用回数の後に表示する文字 SKILLFREQ_WORD = "使用回数" def self.skill_freq_recovery(actor) actor.skills_freq = Hash::new # 初期化 for skill in actor.skills memo = skill.note.scan(/<#{SKILLFREQ_WORD}[::](\d+)>/) memo = memo.flatten if memo != nil and not memo.empty? actor.skills_freq[skill.id] = memo[0].to_i end end end end class Game_Interpreter def snf_skill_freq_recovery(actor_id = 0) if actor_id == 0 for actor in $game_party.members SNF.skill_freq_recovery(actor) end elsif SNF.skill_freq_recovery($game_actors[actor_id]) end end end class Game_Enemy < Game_Battler attr_accessor :skills_freq #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias snf_skillfreq_initialize initialize def initialize(index, enemy_id) @skills_freq = Hash::new snf_skillfreq_initialize(index, enemy_id) for action in enemy.actions if action.kind == 1 memo = $data_skills[action.skill_id].note.scan(/<#{SNF::SKILLFREQ_WORD}[::](\d+)>/) memo = memo.flatten if memo != nil and not memo.empty? @skills_freq[action.skill_id] = memo[0].to_i end end end end end class Game_Actor < Game_Battler attr_accessor :skills_freq #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias snf_skillfreq_initialize initialize def initialize(actor_id) @skills_freq = Hash::new snf_skillfreq_initialize(actor_id) end #-------------------------------------------------------------------------- # ● スキルを覚える # skill_id : スキル ID #-------------------------------------------------------------------------- alias snf_skillfreq_learn_skill learn_skill def learn_skill(skill_id) unless skill_learn?($data_skills[skill_id]) memo = $data_skills[skill_id].note.scan(/<#{SNF::SKILLFREQ_WORD}[::](\d+)>/) memo = memo.flatten if memo != nil and not memo.empty? @skills_freq[skill_id] = memo[0].to_i end end snf_skillfreq_learn_skill(skill_id) end end class Game_Battler #-------------------------------------------------------------------------- # ● 全回復 #-------------------------------------------------------------------------- if SNF::SKILLFREQ_RECOVERY alias snf_skillfreq_recover_all recover_all def recover_all snf_skillfreq_recover_all return if self.is_a?(Game_Enemy) SNF.skill_freq_recovery(self) end end #-------------------------------------------------------------------------- # ● スキルの使用可能判定 # skill : スキル #-------------------------------------------------------------------------- alias snf_skillfreq_skill_can_use? skill_can_use? def skill_can_use?(skill) if @skills_freq.key?(skill.id) return false if @skills_freq[skill.id] < 1 end snf_skillfreq_skill_can_use?(skill) end end class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- alias snf_skillfreq_update_help update_help def update_help if SNF::SKILLFREQ_DESCRIPTION and not skill == nil if @actor.skills_freq.key?(skill.id) @help_window.set_text(skill == nil ? "" : skill.description + SNF::SKILLFREQ_DESC_FRONT + @actor.skills_freq[skill.id].to_s + SNF::SKILLFREQ_DESC_BACK) else snf_skillfreq_update_help end else snf_skillfreq_update_help end end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 戦闘終了 # result : 結果 (0:勝利 1:逃走 2:敗北) #-------------------------------------------------------------------------- if SNF::SKILLFREQ_RECOVERY_AFTERBATTLE alias snf_skillfreq_battle_end battle_end def battle_end(result) for actor in $game_party.members SNF.skill_freq_recovery(actor) end snf_skillfreq_battle_end(result) end end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : スキル #-------------------------------------------------------------------------- alias snf_skillfreq_execute_action_skill execute_action_skill def execute_action_skill skill = @active_battler.action.skill if @active_battler.skills_freq != nil if @active_battler.skills_freq.key?(skill.id) @active_battler.skills_freq[skill.id] -= 1 end end snf_skillfreq_execute_action_skill end end class Scene_Skill < Scene_Base #-------------------------------------------------------------------------- # ● スキルの使用 (味方対象以外の使用効果を適用) #-------------------------------------------------------------------------- alias snf_skillfreq_use_skill_nontarget use_skill_nontarget def use_skill_nontarget if @actor.skills_freq != nil @actor.skills_freq[@skill.id] -= 1 if @actor.skills_freq.key?(@skill.id) end snf_skillfreq_use_skill_nontarget end end