#============================================================================== # ■ XP-RGSS-11-opt 熟練度スキル習得 [Ver.1.2.0] by Claimh #------------------------------------------------------------------------------ # ・特定の熟練度に達したときにスキル習得 #============================================================================== module SysUpdate AT_SKILL = [] #---------------------------------------------------------------------------- # 習得条件 # AT_SKILL[アクターID] = [ <習得スキル+条件> ] AT_SKILL[1] = [ # [習得スキルID, [[条件となる属性, 条件Lv],・・・]] [59, [[SWORD, 4], [WIND, 2]]], [60, [[SWORD, 6]]] ] AT_SKILL[2] = [ # [習得スキルID, [[条件となる属性, 条件Lv],・・・]] [63, [[LANCE, 4]]], [64, [[LANCE, 6]]] ] # 習得スキル表示 # 表示する:true 表示しない:false SHOW_L_SK = true # 習得スキル表示時間(フレーム数) SHOW_LSK_TIME = 30 # 表示するアニメーション(表示しない:0) LSK_AN_ID = 1 #---------------------------------------------------------------------------- # 設定読み込みクラス class EleSkill attr_accessor :skill_id attr_accessor :condition def initialize(data) @skill_id = data[0] @condition = [] for d in data[1] @condition.push(EleSkillCondition.new(d)) end end # 設定条件読み込みクラス class EleSkillCondition attr_reader :attr_id attr_reader :level def initialize(data) @attr_id = data[0] @level = data[1] end end end module_function #-------------------------------------------------------------------------- # ● スキル習得条件サーチ #-------------------------------------------------------------------------- def sys_update_skill_search(actor) return [] if AT_SKILL[actor.id].nil? # 初期化 learn_skill = [] skill_book = EleSkill.new(AT_SKILL[actor.id][0]) # 習得スキルのサーチ for skill_book in AT_SKILL[actor.id] skill_check = true ele_skill = EleSkill.new(skill_book) # 習得済みなら次へ next if actor.skill_learn?(ele_skill.skill_id) # 習得条件の適合チェック for condi in ele_skill.condition # 条件不適合? if actor.attr[condi.attr_id].level < condi.level skill_check = false break end end # 条件適合なら次へ next unless skill_check # スキルを習得 actor.learn_skill(ele_skill.skill_id) learn_skill.push(ele_skill.skill_id) # アニメーションをセット actor.animation_id = SysUpdate::LSK_AN_ID end # 習得スキル一覧を返す return learn_skill end end class Scene_Battle #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase5_lsk start_phase5 def start_phase5 start_phase5_lsk # 原型 # 習得スキル配列初期化 @learn_skill = [] @sysupdate_all_show_end = false # スキル習得チェック for actor in $game_party.actors @learn_skill[actor.index] = SysUpdate.sys_update_skill_search(actor) end # 習得なし return if @learn_skill.empty? # 習得スキル表示へ @show_change_cnt = SysUpdate::SHOW_LSK_TIME # リザルトウィンドウを表示 @result_window.visible = true end #-------------------------------------------------------------------------- # ● フレーム更新 (アフターバトルフェーズ) #-------------------------------------------------------------------------- alias update_phase5_lsk update_phase5 def update_phase5 # スキル習得表示あり? if SysUpdate::SHOW_L_SK # 表示終了済み unless @sysupdate_all_show_end @show_change_cnt += 1 # C ボタンが押された if Input.trigger?(Input::C) @show_change_cnt = SysUpdate::SHOW_LSK_TIME end # カウント待ちならリターン return if @show_change_cnt < SysUpdate::SHOW_LSK_TIME # 習得表示 for actor in $game_party.actors next if @learn_skill[actor.index].empty? # 次のアクターへ # 習得表示処理 skill = $data_skills[@learn_skill[actor.index][0]] text = actor.name + "は" + skill.name + "を習得した!" @help_window.set_text(text, 1) # 後始末 @show_change_cnt = 0 @learn_skill[actor.index].delete_at(0) return # 次のSkill習得表示へ end # 表示するものがない=表示切替の終了 @sysupdate_all_show_end = true end end update_phase5_lsk end end