#============================================================================== # サブクラス ver1.00 #------------------------------------------------------------------------------ #[特徴] # メインの職業の他に、サブクラスをアクターに設定できます。 # 職業毎に設定できるもの # (装備可能アイテム、属性有効度、ステート有効度、狙われやすさ、修得スキル) # の動作を変更できます。 # #[その他の動作] # イベントコマンドのスクリプトで # change_sub_class(アクターID, サブクラスID) # とすることで、サブクラスを設定します。 # # スクリプト上での動作 # draw_actor_sub_class(actor, X座標, Y座標)で、サブクラス名を描画します。 # actor.class2_id = 数値 で、サブクラスを変更できます。 # # # 作成:ぶちょー # ホム:http://nyannyannyan.bake-neko.net/ # 著作:自分で作ったとか言わないで>< # 改造はご自由にどうぞ。 # リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module SUBCLASS # サブクラスの設定 # アクターID => 職業ID # 設定しないと、サブクラスは なし になります。 SUB_CLASS = { 1 => 7, 2 => 4, } # 属性有効度のタイプ設定 # 0 : メインクラスとサブクラスを比べて、数値の小さい方を選択 # 1 : メインクラスとサブクラスを比べて、数値の大きい方を選択 # 2 : メインクラスとサブクラスの平均値 # 3 : メインクラスの数値 # 4 : サブクラスの数値 SC_ELEMENT_RATE = 2 # ステート付与率のタイプ設定 # 0 : メインクラスとサブクラスを比べて、確率の小さい方を選択 # 1 : メインクラスとサブクラスを比べて、確率の大きい方を選択 # 2 : メインクラスとサブクラスの平均値 # 3 : メインクラスの確率 # 4 : サブクラスの確率 SC_STATE_PROBABILITY = 0 # 狙われやすさのタイプ設定 # 0 : メインクラスとサブクラスを比べて、数値の小さい方を選択 # 1 : メインクラスとサブクラスを比べて、数値の大きい方を選択 # 2 : メインクラスとサブクラスの平均値 # 3 : メインクラスの設定値 # 4 : サブクラスの設定値 SC_ODDS = 3 # 装備可能判定 # true : 両クラスで装備可能なアイテムを装備可能 # false : メインクラスで装備可能なアイテムのみ装備可能 SC_EQUIPPABLE = true # 修得スキルの倍率設定 # 修得レベル×この数値でスキルを修得します。 # 0 にすると、サブクラスのスキルは修得しません。 SC_SKILL_LEARNING_RATE = 2 # 例えば、レベル10でファイアを修得するとして、この数値が 1.5の場合、 # 10 × 1.5 = 15 、となるので、レベル15でファイアを修得します。 end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler include Kazari::SUBCLASS #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :class2_id #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias sub_class_setup setup def setup(actor_id) sub_class_setup(actor_id) @class2_id = SUB_CLASS[actor_id] ? SUB_CLASS[actor_id] : 0 end #-------------------------------------------------------------------------- # ● サブクラスオブジェクト取得 #-------------------------------------------------------------------------- def class2 return @class2_id == 0 ? nil : $data_classes[@class2_id] end #-------------------------------------------------------------------------- # ● 属性修正値の取得 #-------------------------------------------------------------------------- alias sub_class_element_rate element_rate def element_rate(element_id) unless class2 return sub_class_element_rate(element_id) end rank = self.class.element_ranks[element_id] n = [0,200,150,100,50,0,-100][rank] rank = self.class2.element_ranks[element_id] n2 = [0,200,150,100,50,0,-100][rank] case SC_ELEMENT_RATE when 0 ; result = [n, n2].min when 1 ; result = [n, n2].max when 2 ; result = (n + n2) / 2 when 3 ; result = n when 4 ; result = n2 end for armor in armors.compact result /= 2 if armor.element_set.include?(element_id) end for state in states result /= 2 if state.element_set.include?(element_id) end return result end #-------------------------------------------------------------------------- # ● ステートの付加成功率の取得 #-------------------------------------------------------------------------- alias sub_class_state_probability state_probability def state_probability(state_id) n = sub_class_state_probability (state_id) return n unless class2 unless $data_states[state_id].nonresistance rank = self.class2.state_ranks[state_id] n2 = [0,100,80,60,40,20,0][rank] end case SC_STATE_PROBABILITY when 0 ; return [n, n2].min when 1 ; return [n, n2].max when 2 ; return (n + n2) / 2 when 3 ; return n when 4 ; return n2 end return n end #-------------------------------------------------------------------------- # ● 狙われやすさの取得 #-------------------------------------------------------------------------- alias sub_class_odds odds def odds n = sub_class_odds return n unless class2 n2 = 4 - self.class2.position case SC_ODDS when 0 ; return [n, n2].min when 1 ; return [n, n2].max when 2 ; return (n + n2) / 2 when 3 ; return n when 4 ; return n2 end return n end #-------------------------------------------------------------------------- # ● 装備可能判定 #-------------------------------------------------------------------------- alias sub_class_equippable? equippable? def equippable?(item) return true if sub_class_equippable?(item) return false unless class2 if SC_EQUIPPABLE if item.is_a?(RPG::Weapon) return self.class2.weapon_set.include?(item.id) elsif item.is_a?(RPG::Armor) return false if two_swords_style and item.kind == 0 return self.class2.armor_set.include?(item.id) end end return false end #-------------------------------------------------------------------------- # ● レベルアップ #-------------------------------------------------------------------------- alias sub_class_level_up level_up def level_up sub_class_level_up return if SC_SKILL_LEARNING_RATE == 0 return unless class2 for learning in self.class2.learnings if learning.level * SC_SKILL_LEARNING_RATE <= @level learn_skill(learning.skill_id) end end end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter def change_sub_class(actor_id, class2_id) actor = $game_actors[actor_id] actor.class2_id = class2_id if actor != nil return true end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● サブクラスの描画 #-------------------------------------------------------------------------- def draw_actor_sub_class(actor, x, y) return unless actor.class2 self.contents.font.color = normal_color self.contents.draw_text(x, y, 108, WLH, actor.class2.name) end end