# # スキル修得&封印装備(RGSS2) #  (C)2008,2011 TYPE74RX-T # #============================================================================== # ■ module Kernel #============================================================================== module Kernel #-------------------------------------------------------------------------- # ★ 配列で指定した要素を全て取り除く #-------------------------------------------------------------------------- def rx_delete(array) for i in 0...array.size self.delete(array[i]) end end #-------------------------------------------------------------------------- # ★ オブジェクトの完全なコピーを作成 #-------------------------------------------------------------------------- def deep_copy(obj) Marshal.load(Marshal.dump(obj)) end end #-------------------------------------------------------------------------- # ★ システムワードの登録:使用不能スキル #-------------------------------------------------------------------------- module RPG class BaseItem alias rx_rgss2bo18_rx_extract_sys_str_from_note rx_extract_sys_str_from_note def rx_extract_sys_str_from_note rx_get_sys = RX_T.get_system_word_in_note2(@note, "装備固有スキル") unless rx_get_sys == "" @@rx_copy_str += rx_get_sys @note = @note.sub(rx_get_sys, "") @note = @note.sub("\r\n", "") end rx_get_sys = RX_T.get_system_word_in_note2(@note, "使用不能スキル") unless rx_get_sys == "" @@rx_copy_str += rx_get_sys @note = @note.sub(rx_get_sys, "") @note = @note.sub("\r\n", "") end @rx_sys_str = @@rx_copy_str # メソッドを呼び戻す rx_rgss2bo18_rx_extract_sys_str_from_note end end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- alias rx_rgss2bo18_setup setup def setup(actor_id) # メソッドを呼び戻す rx_rgss2bo18_setup(actor_id) # ★ 装備固有スキルの情報 @rx_sub_skills = [] # ★ 使用不能スキルの情報 @rx_cannot_skills = [] end #-------------------------------------------------------------------------- # ★ 装備固有スキル専用オブジェクトの配列取得 #-------------------------------------------------------------------------- def rx_sub_skills result = [] @rx_sub_skills = [] # 各種装備の固有スキルを取得 if @weapon_id > 0 @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_weapons[@weapon_id], "装備固有スキル") end if @armor1_id > 0 # 二刀流なら if two_swords_style @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_weapons[@armor1_id], "装備固有スキル") else @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor1_id], "装備固有スキル") end end if @armor2_id > 0 @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor2_id], "装備固有スキル") end if @armor3_id > 0 @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor3_id], "装備固有スキル") end if @armor4_id > 0 @rx_sub_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor4_id], "装備固有スキル") end # 被ってる要素があれば、それを1つにする @rx_sub_skills = @rx_sub_skills.uniq for i in @rx_sub_skills result.push($data_skills[i]) end return result end #-------------------------------------------------------------------------- # ● スキルの習得済み判定 # skill : スキル #-------------------------------------------------------------------------- alias rx_rgss2bo18_skill_learn? skill_learn? def skill_learn?(skill) if rx_sub_skills != [] return (@skills.include?(skill.id) or @rx_sub_skills.include?(skill.id)) end # メソッドを呼び戻す rx_rgss2bo18_skill_learn?(skill) end #-------------------------------------------------------------------------- # ★ 使用不能スキル専用オブジェクトの配列取得 #-------------------------------------------------------------------------- def rx_cannot_skills result = [] @rx_cannot_skills = [] # 各種装備の固有スキルを取得 if @weapon_id > 0 @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_weapons[@weapon_id], "使用不能スキル") end if @armor1_id > 0 # 二刀流なら if two_swords_style @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_weapons[@armor1_id], "使用不能スキル") else @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor1_id], "使用不能スキル") end end if @armor2_id > 0 @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor2_id], "使用不能スキル") end if @armor3_id > 0 @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor3_id], "使用不能スキル") end if @armor4_id > 0 @rx_cannot_skills += RX_T.get_array_of_system_word_in_sys_str($data_armors[@armor4_id], "使用不能スキル") end # 被ってる要素があれば、それを1つにする @rx_cannot_skills = @rx_cannot_skills.uniq for i in @rx_cannot_skills result.push($data_skills[i]) end return result end #-------------------------------------------------------------------------- # ● スキルオブジェクトの配列取得 #-------------------------------------------------------------------------- alias rx_rgss2bo18_skills skills def skills rx_sub_skills rx_cannot_skills return rx_addeleted_skills if @rx_cannot_skills.size > 0 or @rx_sub_skills.size > 0 # メソッドを呼び戻す rx_rgss2bo18_skills end #-------------------------------------------------------------------------- # ★ スキルオブジェクトの配列取得(スキル習得/封印後) # (注意)def skillsを改造していたり、エイリアスをしている場合は #     こちらのメソッドにも同様の処理の適用が必要な場合があります。 #-------------------------------------------------------------------------- def rx_addeleted_skills rx_d_skills = deep_copy(@skills) rx_d_skills.concat(@rx_sub_skills) if @rx_sub_skills.size > 0 # 被ってる要素があれば、それを1つにする rx_d_skills = rx_d_skills.uniq if @rx_sub_skills.size > 0 rx_d_skills.rx_delete(@rx_cannot_skills) if @rx_cannot_skills.size > 0 result = [] for i in rx_d_skills result.push($data_skills[i]) end return result end end