#============================================================================== # ■ VXAce-RGSS3-46 スタイルチェンジシステム [Ver.1.0.2] by Claimh #------------------------------------------------------------------------------ # 戦闘スタイルを切り替えて戦うシステムを構築します。 #------------------------------------------------------------------------------ # [戦闘スタイル概要] # ・職業が戦闘スタイルに該当します # ・所持している戦闘スタイルは自由に切り替えることができます # ・レベルは職業共通です。(職業ごとのレベルは存在しません) # ・レベルアップ時は全戦闘スタイル(職業)のスキルが習得対象になります。 # ・スキルは戦闘スタイルごとに管理します。 # ・戦闘スタイルを切り替えると、武器(/盾)・スキルも切り替わります。 #------------------------------------------------------------------------------ # [データベース設定] # ・特徴 : スロットタイプ:二刀流 # 一切使用しない場合はUSE_DUAL_WIELD=falseにする # ・<職業>能力成長曲線 # EXP/HP/MPの成長はアクターの所持する戦闘スタイルでは統一することを推奨 # EXP : 統一しないと成長差が発生(スタイルチェンジ時にレベルが変動する) # HP/MP : スタイルチェンジしたときに最大値が変わるため # (なお、スタイルチェンジ画面には最大HP/MPの変化は表示されない) # ・<職業>特徴 : 防具タイプ装備 # 服/装飾品は各戦闘スタイル(職業)で同じにすること # 二刀流を一切使用しない場合は盾も各戦闘スタイル(職業)で同じにすること # ・<ステート>特徴 : スロットタイプ:二刀流 # 設定しないこと(戦闘スタイル管理上ではステートは無視されます) #------------------------------------------------------------------------------ # [スキル] # ・習得していても使用できるのは現戦闘スタイル(職業)で習得したスキルのみです。 # ・戦闘スタイルを切り替えると使用可能なスキルも切り替わります。 #------------------------------------------------------------------------------ # [装備] # ・武器/盾のみ戦闘スタイルごとに持つことができます。 # ※二刀流を一切使用しない場合は武器のみ # ・戦闘スタイル変更時は武器/盾だけを持ち替えます。 # ※二刀流を一切使用しない場合は武器のみ # ※服/装飾品で装備不可のものを装備している場合は強制的に外れます #------------------------------------------------------------------------------ # [イベント仕様] # ・スキルを対象とした仕様について # - 条件分岐 : アクターが スキル 習得済み? # (Game_Actor#skill_learn?) # → 全職業のどれかで習得済みならば、条件に一致します # 特定の職業で習得済みかを判断させる場合は下記を使用してください # ■ スキル習得済み判定 # $game_actors[id].btl_style[職業ID].skill_learn?(スキルID) # - スキルの増減 # (Game_Actor#learn_skill, Game_Actor#forget_skill) # → 全職業に対して増減を実施します # 特定の職業に対して習得/忘却させる場合は下記を使用してください # ■ スキル習得 # $game_actors[id].btl_style[職業ID].learn_skill(スキルID) # ■ スキル忘却 # $game_actors[id].btl_style[職業ID].forget_skill(スキルID) # ・職業を対象とした仕様について # - 条件分岐 : アクターが 職業 になっている? # 変更なし # - 職業の変更 # 戦闘スタイルも変更されます。※経験値はリセットされません # 未修得の戦闘スタイルの場合は、その後も戦闘スタイルとして追加されます # 職業を変更せずに戦闘スタイルの追加だけをする場合は下記を使用してください # ■ 戦闘スタイル追加 # $game_actors[id].btl_style.add_class(職業ID) # ■ 戦闘スタイル削除 # $game_actors[id].btl_style.del_class(職業ID) # ■ 戦闘スタイル継承(上位クラスへのシフト等) # $game_actors[id].btl_style.join(継承元の職業ID, 継承先の職業ID) # ※継承すると、スキルが引き継がれます。グラフィックは引き継がれません # 継承後 : 継承元の職業ID ⇒ 削除 / 継承先の職業ID ⇒ 追加 #------------------------------------------------------------------------------ # [キャラクターグラフィック仕様] # ・初期設定 # 各戦闘スタイル(職業)の歩行/顔グラフィックが設定できます # (設定がない場合はアクターのグラフィックが適応されます) # 設定はアクターのメモ欄を使用します。 # ■ 歩行グラフィック # @styl_char[職業ID,ファイル名,インデックス] # ex) @styl_char[4,Actor4,4] # ■ 顔グラフィック # @styl_face[職業ID,ファイル名,インデックス] # ex) @styl_face[4,Actor4,4] # ・設定変更 # イベントのスクリプト等で変更できます # ■ 歩行グラフィック # $game_actor[id].btl_style[職業ID].set_char("ファイル名", インデックス) # ■ 顔グラフィック # $game_actor[id].btl_style[職業ID].set_face("ファイル名", インデックス) # ・イベント : アクターのグラフィック変更 # → 現在の職業のグラフィックが変更されます #------------------------------------------------------------------------------ # [再定義メソッド] # ・Game_Actor#character_name, Game_Actor#character_index # ・Game_Actor#face_name, Game_Actor#face_index # ・Game_Actor#init_skills # ・Game_Actor#level_up # ・Game_Actor#skill_learn? # ・Game_Actor#learn_skill, Game_Actor#forget_skill # ・Game_Actor#change_class # ・Game_Actor#init_equips # ・Game_Actor#change_equip #============================================================================== module BtlStyle # 初期状態で所持している戦闘スタイル STYLE = { # アクターID => [職業ID, …], 1 => [1, 3], 2 => [2], 4 => [4, 9], } # 初期状態での戦闘スタイルの装備品(武器、盾のみ) # (初期状態で所持している戦闘スタイルの内、データベースにないものを設定する) EQUIP = { # アクターID => { # 職業ID => [[装備タイプ(0:武器), 武器ID], [装備タイプ(0:武器, 1:盾), 武器/防具ID]], # 職業ID => [[装備タイプ(0:武器), 武器ID], [装備タイプ(0:武器, 1:盾), 武器/防具ID]], # … # }, 1 => { 3 => [[0, 13], [1, 41]], 5 => [[0, 25], nil], }, 4 => { 9 => [[0, 49], nil], }, } # 二刀流を使用 # true : 武器+盾を戦闘スタイルごとに所持させる # false : 武器のみを戦闘スタイルごとに所持させる USE_DUAL_WIELD = true end module BtlStyle #-------------------------------------------------------------------------- # ● 初期装備情報取得 #-------------------------------------------------------------------------- def self.equips(actor_id, class_id) return [] if EQUIP[actor_id].nil? return [] if EQUIP[actor_id][class_id].nil? EQUIP[actor_id][class_id] end end #============================================================================== # ■ BtlStyle_GraphicFile : グラフィックファイル情報 #============================================================================== class BtlStyle_GraphicFile attr_accessor :name # グラフィック ファイル名 attr_accessor :index # グラフィック インデックス attr_accessor :pattern # グラフィック パターン #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(name="", index=0, pattern=0) @name = name @index = index @pattern = pattern end end #============================================================================== # ■ BtlStyle_Graphic : グラフィック情報 #============================================================================== class BtlStyle_Graphic attr_reader :char # 歩行グラフィック attr_reader :face # 顔グラフィック #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(actor_id, class_id) setup(actor_id, class_id) end #-------------------------------------------------------------------------- # ● グラフィック読み込み #-------------------------------------------------------------------------- def setup(actor_id, class_id) setup_char(actor_id, class_id) setup_face(actor_id, class_id) end #-------------------------------------------------------------------------- # ● 歩行グラフィック セットアップ #-------------------------------------------------------------------------- def setup_char(actor_id, class_id) actor = $data_actors[actor_id] result = actor.note.scan(/@styl_char\[(\d+),(.*?+),(\d+)\]/i) @char = BtlStyle_GraphicFile.new(actor.character_name, actor.character_index) if !result.nil? and !result.empty? g = result.find {|r| r[0].to_i == class_id} unless g.nil? @char.name = g[1].to_s @char.index = g[2].to_i end end end #-------------------------------------------------------------------------- # ● 顔グラフィック セットアップ #-------------------------------------------------------------------------- def setup_face(actor_id, class_id) actor = $data_actors[actor_id] result = actor.note.scan(/@styl_face\[(\d+),(.*?+),(\d+)\]/i) @face = BtlStyle_GraphicFile.new(actor.face_name, actor.face_index) if !result.nil? and !result.empty? g = result.find {|r| r[0].to_i == class_id} unless g.nil? @face.name = g[1].to_s @face.index = g[2].to_i end end end end #============================================================================== # ■ BattleStyleClass : 戦闘スタイル情報 #============================================================================== class BattleStyleClass attr_reader :class_id # 職業ID attr_reader :skills # 習得スキルID attr_reader :equips # 装備リスト #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(actor_id, class_id) @actor_id = actor_id @class_id = class_id @graphic = BtlStyle_Graphic.new(actor_id, class_id) @skills = [] @equips = [] @equips = [] end #-------------------------------------------------------------------------- # ● 特徴を保持する全オブジェクトの配列取得 #-------------------------------------------------------------------------- def feature_objects #~ @states.call.collect {|id| $data_states[id]} + [$data_actors[@actor_id]] + [$data_classes[@class_id]] + equips_obj.compact end #-------------------------------------------------------------------------- # ● 全ての特徴オブジェクトの配列取得 #-------------------------------------------------------------------------- def all_features feature_objects.inject([]) {|r, obj| r + obj.features } end #-------------------------------------------------------------------------- # ● 特徴オブジェクトの配列取得(特徴コードを限定) #-------------------------------------------------------------------------- def features(code) all_features.select {|ft| ft.code == code } end #-------------------------------------------------------------------------- # ● 特徴の集合和計算 #-------------------------------------------------------------------------- def features_set(code) features(code).inject([]) {|r, ft| r |= [ft.data_id] } end #-------------------------------------------------------------------------- # ● 歩行グラフィック参照/設定 #-------------------------------------------------------------------------- def char @graphic.char end def set_char(name, index) @graphic.char.name = name @graphic.char.index = index end #-------------------------------------------------------------------------- # ● 顔グラフィック参照/設定 #-------------------------------------------------------------------------- def face @graphic.face end def set_face(name, index) @graphic.face.name = name @graphic.face.index = index end #-------------------------------------------------------------------------- # ● レベル変化時のスキル習得 #-------------------------------------------------------------------------- def level_up_skill(level) $data_classes[@class_id].learnings.each do |learning| learn_skill(learning.skill_id) if learning.level <= level end end #-------------------------------------------------------------------------- # ● スキル継承 #-------------------------------------------------------------------------- def join_skill(skills) @skills = (skills+@skill).uniq.sort end #-------------------------------------------------------------------------- # ● スキルを覚える #-------------------------------------------------------------------------- def learn_skill(skill_id) @skills.push(skill_id) unless skill_learn?(skill_id) end #-------------------------------------------------------------------------- # ● スキルを忘れる #-------------------------------------------------------------------------- def forget_skill(skill_id) @skills.delete(skill_id) if skill_learn?(skill_id) end #-------------------------------------------------------------------------- # ● スキルの習得済み判定 #-------------------------------------------------------------------------- def skill_learn?(skill_id) @skills.include?(skill_id) end #-------------------------------------------------------------------------- # ● 武器装備可能の判定 #-------------------------------------------------------------------------- def equip_wtype_ok?(wtype_id) features_set(Game_BattlerBase::FEATURE_EQUIP_WTYPE).include?(wtype_id) end #-------------------------------------------------------------------------- # ● 防具装備可能の判定 #-------------------------------------------------------------------------- def equip_atype_ok?(atype_id) features_set(Game_BattlerBase::FEATURE_EQUIP_ATYPE).include?(atype_id) end #-------------------------------------------------------------------------- # ● 装備固定の判定 #-------------------------------------------------------------------------- def equip_type_fixed?(etype_id) features_set(Game_BattlerBase::FEATURE_EQUIP_FIX).include?(etype_id) end #-------------------------------------------------------------------------- # ● 装備封印の判定 #-------------------------------------------------------------------------- def equip_type_sealed?(etype_id) features_set(Game_BattlerBase::FEATURE_EQUIP_SEAL).include?(etype_id) end #-------------------------------------------------------------------------- # ● スロットタイプの取得 #-------------------------------------------------------------------------- def slot_type features_set(Game_BattlerBase::FEATURE_SLOT_TYPE).max || 0 end #-------------------------------------------------------------------------- # ● 二刀流の判定 #-------------------------------------------------------------------------- def dual_wield? BtlStyle::USE_DUAL_WIELD and slot_type == 1 end #-------------------------------------------------------------------------- # ● 装備可能判定 #-------------------------------------------------------------------------- def equippable?(item) return false unless item.is_a?(RPG::EquipItem) return false if equip_type_sealed?(item.etype_id) return equip_wtype_ok?(item.wtype_id) if item.is_a?(RPG::Weapon) return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor) return false end #-------------------------------------------------------------------------- # ● エディタで設定されたインデックスを装備タイプ ID に変換 #-------------------------------------------------------------------------- def index_to_etype_id(index) index == 1 && dual_wield? ? 0 : index end #-------------------------------------------------------------------------- # ● 装備スロットの配列を取得 #-------------------------------------------------------------------------- def equip_slots return [0] unless BtlStyle::USE_DUAL_WIELD # 武器Only return [0,0] if dual_wield? # 二刀流 return [0,1] # 通常 end #-------------------------------------------------------------------------- # ● 装備タイプからスロット ID のリストに変換 #-------------------------------------------------------------------------- def slot_list(etype_id) result = [] equip_slots.each_with_index {|e, i| result.push(i) if e == etype_id } result end #-------------------------------------------------------------------------- # ● 装備タイプからスロット ID に変換(空きを優先) #-------------------------------------------------------------------------- def empty_slot(etype_id) list = slot_list(etype_id) list.find {|i| @equips[i].is_nil? } || list[0] end #-------------------------------------------------------------------------- # ● 装備品の初期化 #-------------------------------------------------------------------------- def init_equips eq = BtlStyle.equips(@actor_id, @class_id) @equips = Array.new(equip_slots.size) { Game_BaseItem.new } eq.each_with_index do |item_id, i| unless item_id.nil? etype_id = index_to_etype_id(i) slot_id = empty_slot(etype_id) @equips[slot_id].set_equip(etype_id == 0, item_id[1]) if slot_id end end end def default_eqips(equips) @equips = Array.new(equip_slots.size) { Game_BaseItem.new } equips.each_with_index do |item_id, i| etype_id = index_to_etype_id(i) slot_id = empty_slot(etype_id) @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id end end #-------------------------------------------------------------------------- # ● 武器オブジェクトの配列取得 #-------------------------------------------------------------------------- def weapons @equips.select {|item| item.is_weapon? }.collect {|item| item.object } end #-------------------------------------------------------------------------- # ● 防具オブジェクトの配列取得 #-------------------------------------------------------------------------- def armors @equips.select {|item| item.is_armor? }.collect {|item| item.object } end #-------------------------------------------------------------------------- # ● 装備品オブジェクトの配列取得 #-------------------------------------------------------------------------- def equips_obj @equips.collect {|item| item.object } end #-------------------------------------------------------------------------- # ● 装備変更の可能判定 # slot_id : 装備スロット ID #-------------------------------------------------------------------------- def equip_change_ok?(slot_id) return false if equip_type_fixed?(equip_slots[slot_id]) return false if equip_type_sealed?(equip_slots[slot_id]) return true end #-------------------------------------------------------------------------- # ● 装備の変更 # slot_id : 装備スロット ID # item : 武器/防具(nil なら装備解除) #-------------------------------------------------------------------------- def change_equip(slot_id, item) return if slot_id > (equip_slots.size - 1) return unless trade_item_with_party(item, equips_obj[slot_id]) return if item && equip_slots[slot_id] != item.etype_id @equips[slot_id].object = item end def store_equip(slot_id, item) return if slot_id > (equip_slots.size - 1) @equips[slot_id].object = item end #-------------------------------------------------------------------------- # ● 装備の強制変更 # slot_id : 装備スロット ID # item : 武器/防具(nil なら装備解除) #-------------------------------------------------------------------------- def force_change_equip(slot_id, item) return if slot_id > (equip_slots.size - 1) @equips[slot_id].object = item release_unequippable_items(false) refresh end #-------------------------------------------------------------------------- # ● パーティとアイテムを交換する # new_item : パーティから取り出すアイテム # old_item : パーティに返すアイテム #-------------------------------------------------------------------------- def trade_item_with_party(new_item, old_item) return false if new_item && !$game_party.has_item?(new_item) $game_party.gain_item(old_item, 1) $game_party.lose_item(new_item, 1) return true end #-------------------------------------------------------------------------- # ● 装備の変更(ID で指定) # slot_id : 装備スロット ID # item_id : 武器/防具 ID #-------------------------------------------------------------------------- def change_equip_by_id(slot_id, item_id) if equip_slots[slot_id] == 0 change_equip(slot_id, $data_weapons[item_id]) else change_equip(slot_id, $data_armors[item_id]) end end #-------------------------------------------------------------------------- # ● 装備の破棄 # item : 破棄する武器/防具 #-------------------------------------------------------------------------- def discard_equip(item) slot_id = equips_obj.index(item) @equips[slot_id].object = nil if slot_id end #-------------------------------------------------------------------------- # ● 装備できない装備品を外す # item_gain : 外した装備品をパーティに戻す #-------------------------------------------------------------------------- def release_unequippable_items(item_gain = true) @equips.each_with_index do |item, i| if !equippable?(item.object) || item.object.etype_id != equip_slots[i] trade_item_with_party(nil, item.object) if item_gain item.object = nil end end end #-------------------------------------------------------------------------- # ● 装備を全て外す #-------------------------------------------------------------------------- def clear_equipments equip_slots.size.times do |i| change_equip(i, nil) if equip_change_ok?(i) end end #-------------------------------------------------------------------------- # ● 最強装備 #-------------------------------------------------------------------------- def optimize_equipments clear_equipments equip_slots.size.times do |i| next if !equip_change_ok?(i) items = $game_party.equip_items.select do |item| item.etype_id == equip_slots[i] && equippable?(item) && item.performance >= 0 end change_equip(i, items.max_by {|item| item.performance }) end end #-------------------------------------------------------------------------- # ● 特定のタイプの武器を装備しているか #-------------------------------------------------------------------------- def wtype_equipped?(wtype_id) weapons.any? {|weapon| weapon.wtype_id == wtype_id } end end #============================================================================== # ■ BattleStyle : アクターごとの戦闘スタイル管理 #============================================================================== class BattleStyle #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(actor_id) @actor_id = actor_id @common_skills = [] init_classes end #-------------------------------------------------------------------------- # ● 職業リスト初期化 #-------------------------------------------------------------------------- def init_classes ids = BtlStyle::STYLE[@actor_id] || [$data_actors[@actor_id].class_id] @classes = {} ids.each {|c| @classes[c] = BattleStyleClass.new(@actor_id, c)} end #-------------------------------------------------------------------------- # ● 戦闘スタイル取得 #-------------------------------------------------------------------------- def [](class_id) @classes[class_id] end #-------------------------------------------------------------------------- # ● 職業ID #-------------------------------------------------------------------------- def class_ids @classes.keys end #-------------------------------------------------------------------------- # ● 戦闘スタイル数 #-------------------------------------------------------------------------- def num @classes.size end #-------------------------------------------------------------------------- # ● オブジェクトリスト取得 #-------------------------------------------------------------------------- def classes_obj @classes.keys.sort.collect {|c| $data_classes[c]} end #-------------------------------------------------------------------------- # ● 職業の追加 #-------------------------------------------------------------------------- def add_class(class_id) unless @classes.has_key?(class_id) @classes[class_id] = BattleStyleClass.new(@actor_id, class_id) @classes[class_id].level_up_skill($game_actors[@actor_id].level) @classes[class_id].init_equips end end #-------------------------------------------------------------------------- # ● 職業の削除 #-------------------------------------------------------------------------- def del_class(class_id) if @classes.has_key?(class_id) @classes.delete(class_id) end end #-------------------------------------------------------------------------- # ● 職業の継承 #-------------------------------------------------------------------------- def join(src_class_id, dst_class_id) add_class(dst_class_id) @classes[dst_class_id].join_skill(@skills[src_class_id]) del_class(src_class_id) end #-------------------------------------------------------------------------- # ● 全スキルリスト #-------------------------------------------------------------------------- def all_skills skills = [] @classes.each_value {|c| skills += c.skills} (@common_skills+skills).uniq.sort end #-------------------------------------------------------------------------- # ● スキルリスト #-------------------------------------------------------------------------- def skills(class_id) list = @common_skills list += @classes[class_id].skills if @classes.has_key?(class_id) list.uniq.sort end #-------------------------------------------------------------------------- # ● スキルの初期化 #-------------------------------------------------------------------------- def init_skills(level) @classes.each_value {|c| c.level_up_skill(level)} @common_skills = [] self end #-------------------------------------------------------------------------- # ● レベルアップ時のスキル習得 #-------------------------------------------------------------------------- def level_up_skill(level) @classes.each_value {|c| c.level_up_skill(level)} self end #-------------------------------------------------------------------------- # ● スキルを覚える [ALL] #-------------------------------------------------------------------------- def all_learn_skill(skill_id) @common_skills.push(skill_id) unless common_skill_learn?(skill_id) self end #-------------------------------------------------------------------------- # ● スキルを忘れる [ALL] #-------------------------------------------------------------------------- def all_forget_skill(skill_id) @common_skills.delete(skill_id) if common_skill_learn?(skill_id) @classes.each_value {|c| c.forget_skill(skill_id)} # クラス毎からも削除 self end #-------------------------------------------------------------------------- # ● スキルの習得済み判定 [common] #-------------------------------------------------------------------------- def common_skill_learn?(skill_id) @common_skills.include?(skill_id) end #-------------------------------------------------------------------------- # ● スキルの習得済み判定 [ALL] #-------------------------------------------------------------------------- def all_skill_learn?(skill_id) self.all_skills.include?(skill_id) end #-------------------------------------------------------------------------- # ● 装備品の初期化 # equips : 初期装備の配列 #-------------------------------------------------------------------------- def init_equips(class_id, equips) @classes[class_id].default_eqips(equips) @classes.values.select {|c| c.class_id != class_id}.each {|c| c.init_equips } end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler attr_reader :btl_style # 戦闘スタイル #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias setup_btlstyle setup def setup(actor_id) @btl_style = BattleStyle.new(actor_id) setup_btlstyle(actor_id) end #-------------------------------------------------------------------------- # ● 歩行グラフィック ファイル名 [再定義] #-------------------------------------------------------------------------- def character_name @btl_style[@class_id].char.name end def character_name=(name) @btl_style[@class_id].char.name = name end #-------------------------------------------------------------------------- # ● 歩行グラフィック インデックス [再定義] #-------------------------------------------------------------------------- def character_index @btl_style[@class_id].char.index end def character_index=(index) @btl_style[@class_id].char.index = index end #-------------------------------------------------------------------------- # ● 顔グラフィック ファイル名 [再定義] #-------------------------------------------------------------------------- def face_name @btl_style[@class_id].face.name end def face_name=(name) @btl_style[@class_id].face.name = name end #-------------------------------------------------------------------------- # ● 顔グラフィック インデックス [再定義] #-------------------------------------------------------------------------- def face_index @btl_style[@class_id].face.index end def face_index=(index) @btl_style[@class_id].face.index = index end #-------------------------------------------------------------------------- # ● スキルの初期化 [再定義] #-------------------------------------------------------------------------- def init_skills @skills = @btl_style.init_skills(@level).skills(@class_id) end #-------------------------------------------------------------------------- # ● レベルアップ [再定義] #-------------------------------------------------------------------------- def level_up @level += 1 @skills = @btl_style.level_up_skill(@level).skills(@class_id) end #-------------------------------------------------------------------------- # ● スキルを覚える [再定義] #-------------------------------------------------------------------------- def learn_skill(skill_id) @skills = @btl_style.all_learn_skill(skill_id).skills(@class_id) end #-------------------------------------------------------------------------- # ● スキルを忘れる [再定義] #-------------------------------------------------------------------------- def forget_skill(skill_id) @skills = @btl_style.all_forget_skill(skill_id).skills(@class_id) end #-------------------------------------------------------------------------- # ● スキルの習得済み判定 [再定義] #-------------------------------------------------------------------------- def skill_learn?(skill) skill.is_a?(RPG::Skill) && @btl_style.all_skill_learn?(skill.id) end #-------------------------------------------------------------------------- # ● 職業の変更 [再定義] # keep_exp : 経験値を引き継ぐ ※引継ぎありに変更 #-------------------------------------------------------------------------- def change_class(class_id, keep_exp = true) @exp[class_id] = exp if keep_exp @class_id = class_id @btl_style.add_class(class_id) @btl_style[class_id].equip_slots.size.times do |i| @equips[i] = @btl_style[class_id].equips[i] end @skills = @btl_style.skills(@class_id) change_exp(@exp[@class_id] || 0, false) refresh end #-------------------------------------------------------------------------- # ● 職業の強制変更 #-------------------------------------------------------------------------- def force_change_class(class_id, keep_exp = true) @exp[class_id] = exp if keep_exp @class_id = class_id @btl_style.add_class(class_id) @btl_style[class_id].equip_slots.size.times do |i| @equips[i] = @btl_style[class_id].equips[i] end @skills = @btl_style.skills(@class_id) change_exp(@exp[@class_id] || 0, false) release_unequippable_items(false) refresh end #-------------------------------------------------------------------------- # ● 装備品の初期化 [再定義] # equips : 初期装備の配列 #-------------------------------------------------------------------------- def init_equips(equips) @equips = Array.new(equip_slots.size) { Game_BaseItem.new } equips.each_with_index do |item_id, i| etype_id = index_to_etype_id(i) slot_id = empty_slot(etype_id) @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id end @btl_style.init_equips(@class_id, equips) refresh end #-------------------------------------------------------------------------- # ● 装備の変更 [再定義] # slot_id : 装備スロット ID # item : 武器/防具(nil なら装備解除) #-------------------------------------------------------------------------- def change_equip(slot_id, item) return unless trade_item_with_party(item, equips[slot_id]) return if item && equip_slots[slot_id] != item.etype_id @equips[slot_id].object = item @btl_style[@class_id].store_equip(slot_id, item) refresh end #-------------------------------------------------------------------------- # ● 装備の強制変更 # slot_id : 装備スロット ID # item : 武器/防具(nil なら装備解除) #-------------------------------------------------------------------------- alias force_change_equip_style force_change_equip def force_change_equip(slot_id, item) @btl_style[@class_id].store_equip(slot_id, item) force_change_equip_style(slot_id, item) end #-------------------------------------------------------------------------- # ● 装備の破棄 # item : 破棄する武器/防具 #-------------------------------------------------------------------------- alias discard_equip_style discard_equip def discard_equip(item) @btl_style[@class_id].discard_equip(item) discard_equip_style(item) end #-------------------------------------------------------------------------- # ● 装備できない装備品を外す # item_gain : 外した装備品をパーティに戻す #-------------------------------------------------------------------------- alias release_unequippable_items_style release_unequippable_items def release_unequippable_items(item_gain = true) @btl_style[@class_id].release_unequippable_items(false) release_unequippable_items_style(item_gain) end end