#============================================================================== # # ■ 転職システム用クラス拡張 □Ver1.02 □製作者:月紳士 # # ・RPGツクールVX用 RGSS2スクリプト # # ●…書き換えメソッド(競合注意) ◎…メソッドのエイリアス ○…新規メソッド # #------------------------------------------------------------------------------ # 更新履歴 # Ver.1.02 オプション・クリティカル頻発を追加。 # Ver.1.01 能力値保障オフ時の不具合修正。 #============================================================================== =begin  このスクリプトは転職に関する設定を調整するスクリプトです。   ・アクター固有設定である、二刀流・装備固定といった項目を    クラス依存設定にします。    転職すると、それらの項目が変更されるようになるわけです。    二刀流のクラス、クリティカル頻発のクラスを作れます。   ・クラスにも攻撃力・防御力といった能力値を設定できます。    能力値は、アクター能力値 + クラス能力値 の合計で決まります。    結果、クラス別でレベルアップで成長する能力値が変わるわけです。   ・必要経験値も、クラスごとに設定することになります。    レベルの上がりやすさはアクター別でなく、クラス別に変更します。  本来アクターで設定される項目(能力値・経験値・二刀流など)を  クラスに設定する方法として、「参照アクター」というものを設定します。  必要なデータは、参照アクターとなったアクターの、各項目から参照します。  参照アクターの為に新たにアクターを作成しても良いですし、  すでにいるアクターを流用することも出来ます。  (参照アクターの設定と決定について詳しくはカスタマイズ項目を参照)   伴って変更される仕様   ・転職時にはレベルが1へ戻ります。   ・転職時には装備がすべて外れます。 =end #============================================================================== #============================================================================== # ■ 転職システム用クラス拡張・モジュール #============================================================================== module Class_Change_System # カスタマイズ項目------------------------------------------------------------ CLASS_REFENCE_ACTOR = [] # クラスが参照するアクターのIDをここで設定します。 # クラスID1番目から順に [1, 2, 3, 4] というように # 参照させたいアクターのIDを 半角 , で区切って並べてください。 # (設定を飛ばしたい場合はアクターIDの替わりに nil を入れます) # 参照アクターが設定されていない場合、 # 初期クラスがそのクラスになっているアクターを参照アクターにします。 # (複数いる場合はリスト一番上) CLASS_PARAMETERS_RATIO = 50 # クラス能力値の割合(0 〜 100) # 能力値は アクターの能力値 + クラス能力値 の合計となります。 # クラス能力値は、ここで設定した割合分、 # アクター能力値は100からここで設定した割合を引いた割合分になります。 # 例えば、クラス能力値の割合設定が 40 だった場合、 # アクターの能力値の60% + クラス能力値40% が実際の能力値になります。 CONTAINED_HEIGHT = true # 習得済みレベルまでのクラス能力値を保障するか。 # = true で機能オン、= false で機能オフです。 # 上記で設定した割合でクラス能力値が実際の能力値に反映されますが、 # すでに付いたことのあるクラスの、その習得済みレベルの能力値が # 転職後も反映されるようになります。 # 習得したクラス・レベルの内、過去最高の能力値が採用されます。 # 転職直後もある程度高い能力値を保ったり、 # 過去の職歴により現職の弱点を補ったりできます。 #----------------------------------------------------------------------------- end #============================================================================== # ■ RPG::Class #============================================================================== class RPG::Class #-------------------------------------------------------------------------- # ○ 参照アクターの取得 #-------------------------------------------------------------------------- def refence_actor return $data_actors[@refence_actor_id] if @refence_actor_id # カスタマイズ項目から設定を取得 if Class_Change_System::CLASS_REFENCE_ACTOR[@id-1] != nil @refence_actor_id = Class_Change_System::CLASS_REFENCE_ACTOR[@id-1] return $data_actors[@refence_actor_id] end for actor in $data_actors # 初期データから参照すべきアクターを検索 next if actor == nil if actor.class_id == @id @refence_actor_id = actor.id return $data_actors[@refence_actor_id] end end @refence_actor_id = 1 # 見つからない場合、アクターID 1 を参照 return $data_actors[@refence_actor_id] end #-------------------------------------------------------------------------- # ○ クラスのパラメーターの取得 #-------------------------------------------------------------------------- def parameters return refence_actor.parameters end #-------------------------------------------------------------------------- # ○ オプション [二刀流] の取得 #-------------------------------------------------------------------------- def two_swords_style return refence_actor.two_swords_style end #-------------------------------------------------------------------------- # ○ オプション [装備固定] の取得 #-------------------------------------------------------------------------- def fix_equipment return refence_actor.fix_equipment end #-------------------------------------------------------------------------- # ○ オプション [自動戦闘] の取得 #-------------------------------------------------------------------------- def auto_battle return refence_actor.auto_battle end #-------------------------------------------------------------------------- # ○ オプション [強力防御] の取得 #-------------------------------------------------------------------------- def super_guard return refence_actor.super_guard end #-------------------------------------------------------------------------- # ○ オプション [薬の知識] の取得 #-------------------------------------------------------------------------- def pharmacology return refence_actor.pharmacology end #-------------------------------------------------------------------------- # ○ オプション [クリティカル頻発] の取得 #-------------------------------------------------------------------------- def critical_bonus return refence_actor.critical_bonus end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ◎ セットアップ # actor_id : アクター ID #-------------------------------------------------------------------------- alias tig_ccs_setup setup def setup(actor_id) @classes_master_level = Array.new(($data_classes.size + 1), 1) if Class_Change_System::CONTAINED_HEIGHT @max_class_parameters = Array.new(6, 1) end tig_ccs_setup(actor_id) update_max_class_parameters end #-------------------------------------------------------------------------- # ○ アクター+クラス能力値の取得 #-------------------------------------------------------------------------- def actor_and_class_parameters(number) ratio = Class_Change_System::CLASS_PARAMETERS_RATIO if Class_Change_System::CONTAINED_HEIGHT class_p = @max_class_parameters[number] # マスタークラス中の最大値 else class_p = self.class.parameters[number, @level] # 現在のクラスの能力値 end actor_p = actor.parameters[number, @level] # アクター自身の能力値 actor_p *= 100 - ratio class_p *= ratio value = (actor_p + class_p) / 100 return value end #-------------------------------------------------------------------------- # ○ 最大のクラス能力値の更新 #-------------------------------------------------------------------------- def update_max_class_parameters return unless Class_Change_System::CONTAINED_HEIGHT (6).times do |p| @max_class_parameters[p] = self.class.parameters[p, @level] $data_classes.each do |c| ; next if c == nil or @classes_master_level[c.id] == 1 @max_class_parameters[p] = [@max_class_parameters[p], c.parameters[p, @classes_master_level[c.id]] ].max end end end #-------------------------------------------------------------------------- # ● 基本 MaxHP の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_maxhp return actor_and_class_parameters(0) end #-------------------------------------------------------------------------- # ● 基本 MaxMP の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_maxmp return actor_and_class_parameters(1) end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_atk n = actor_and_class_parameters(2) for item in equips.compact do n += item.atk end return n end #-------------------------------------------------------------------------- # ● 基本防御力の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_def n = actor_and_class_parameters(3) for item in equips.compact do n += item.def end return n end #-------------------------------------------------------------------------- # ● 基本精神力の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_spi n = actor_and_class_parameters(4) for item in equips.compact do n += item.spi end return n end #-------------------------------------------------------------------------- # ● 基本敏捷性の取得 # ※ クラス能力値を反映 #-------------------------------------------------------------------------- def base_agi n = actor_and_class_parameters(5) for item in equips.compact do n += item.agi end return n end #-------------------------------------------------------------------------- # ● オプション [二刀流] の取得 #-------------------------------------------------------------------------- def two_swords_style return self.class.two_swords_style end #-------------------------------------------------------------------------- # ● オプション [装備固定] の取得 #-------------------------------------------------------------------------- def fix_equipment return self.class.fix_equipment end #-------------------------------------------------------------------------- # ● オプション [自動戦闘] の取得 #-------------------------------------------------------------------------- def auto_battle return self.class.auto_battle end #-------------------------------------------------------------------------- # ● オプション [強力防御] の取得 #-------------------------------------------------------------------------- def super_guard return self.class.super_guard end #-------------------------------------------------------------------------- # ● オプション [薬の知識] の取得 #-------------------------------------------------------------------------- def pharmacology return self.class.pharmacology end #-------------------------------------------------------------------------- # ○ オプション [クリティカル頻発] の取得 #-------------------------------------------------------------------------- def critical_bonus return self.class.critical_bonus end #-------------------------------------------------------------------------- # ● 経験値計算 # ※ クラス経験値を反映 #-------------------------------------------------------------------------- def make_exp_list refence = self.class.refence_actor @exp_list[1] = @exp_list[100] = 0 m = refence.exp_basis n = 0.75 + refence.exp_inflation / 200.0; for i in 2..99 @exp_list[i] = @exp_list[i-1] + Integer(m) m *= 1 + n; n *= 0.9; end end #-------------------------------------------------------------------------- # ◎ レベルアップ #-------------------------------------------------------------------------- alias tig_ccs_level_up level_up def level_up tig_ccs_level_up if @classes_master_level[@class_id] < @level @classes_master_level[@class_id] = @level end update_max_class_parameters end #-------------------------------------------------------------------------- # ○ すべての装備を外す # ※ 部位を増やしているなら改造が必要。 #-------------------------------------------------------------------------- def remove_equipment_all change_equip(0, nil) change_equip(1, nil) change_equip(2, nil) change_equip(3, nil) change_equip(4, nil) end #-------------------------------------------------------------------------- # ○ クラスの変更 #-------------------------------------------------------------------------- def class_id=(id) remove_equipment_all change_level(1, false) @class_id = id end end