#============================================================================== # □ レベル拡張 (for VX Ace) #------------------------------------------------------------------------------ # Version : 2_20120701 # by サリサ・タイクーン # http://www.tycoon812.com/rgss/ #============================================================================== #============================================================================== # □ 素材スイッチ #============================================================================== $rgsslab = {} if $rgsslab == nil $rgsslab["レベル拡張"] = true if $rgsslab["レベル拡張"] #============================================================================== # □ カスタマイズポイント #============================================================================== module RGSSLAB end module RGSSLAB::Level_Extension #-------------------------------------------------------------------------- # ○ 各アクターの限界レベル設定 # ・記述方法: # アクターID => 最終レベル, # (最後の設定のみ、後ろのカンマを省略する事ができます) # # 記述していないアクターのIDは、データベースにある # 最終レベルの設定が適用されます。 # (されているアクターは、データベースの設定の最終レベルを無視します) #-------------------------------------------------------------------------- FINAL_LEVEL = { 1 => 999, 2 => 999, 3 => 999, 4 => 999, 5 => 999, 6 => 999, 7 => 999, 8 => 999, 9 => 999, 10 => 999, } #-------------------------------------------------------------------------- # ○ パラメータ設定 # 記述方法: # 職業ID => ["設定タイプ", value1, …], # (最後の設定のみ、後ろのカンマを省略する事ができます) # # 【設定タイプ】 # "A" : 指定したレベルの範囲でのループ # 書式:["A", value1, value2] # ---------------------------------------------------------------------- # "B" : 固定上昇 # 書式:["B", HP, MP, 攻撃力, 防御力, 魔法力, 魔法防御, 敏捷性, 運] # ---------------------------------------------------------------------- # "D" : レベル1 + (レベル2の値 * 現レベル) の設定 # 書式:["D"] # ---------------------------------------------------------------------- # 上記以外は、レベルアップしてもレベル100以降は全て上昇0として # 設定される事となります。 # # 又、レベル100以降詳細設定がある場合は、そちらが優先となりますが # 最終レベルに到達するまでに、最後まで書かれていない場合に限り # ここで設定した内容で最終レベルまで補われます。 #-------------------------------------------------------------------------- PARAMETER_SETTING = { 1 => ["A", 80, 99], 2 => ["A", 80, 99], 3 => ["A", 80, 99], 4 => ["A", 80, 99], 5 => ["A", 80, 99], 6 => ["A", 80, 99], 7 => ["A", 80, 99], 8 => ["A", 80, 99], 9 => ["A", 80, 99], 10 => ["A", 80, 99], } end # カスタマイズポイントは、ここまで #============================================================================== # □ RGSSLAB::Level_Extension [module] #============================================================================== module RGSSLAB::Level_Extension #-------------------------------------------------------------------------- # ○ 素材設定用の定数定義 #-------------------------------------------------------------------------- MATERIAL_NAME = "レベル拡張" VERSION = 2 RELEASE = 20120701 #-------------------------------------------------------------------------- # ○ 設定エラー # error_type : エラータイプ #-------------------------------------------------------------------------- def self.setting_error(error_type) text = "【RGSS研究所:#{MATERIAL_NAME}】" case error_type when 1 msgbox_p text, "PARAMETER_SETTINGの設定に誤りがあります。【設定タイプA】", "value1の値は2以上にして下さい。" when 2 msgbox_p text, "PARAMETER_SETTINGの設定に誤りがあります。【設定タイプA】", "value2の値は3以上にして下さい。" when 3 msgbox_p text, "PARAMETER_SETTINGの設定に誤りがあります。【設定タイプB】", "マイナス設定はできません。" when 4 msgbox_p text, "PARAMETER_SETTINGの設定に誤りがあります。【設定タイプA】", "value2の値はvalue1よりも大きくして下さい。" when 5 msgbox_p text, "FINAL_LEVELの設定に誤りがあります。", "(今のバージョンでは、文字列に関する設定はありません)" when 6 msgbox_p text, "PARAMETER_SETTINGの設定に誤りがあります。", "(今のバージョンでは、設定タイプCに選択する事はできません)" end exit end end #============================================================================== # ■ Game_Actor [class] #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_003 = RGSSLAB::Level_Extension #-------------------------------------------------------------------------- # ● 指定レベルに上がるのに必要な累計経験値の取得 [再構築] # level : レベル #-------------------------------------------------------------------------- def exp_for_level(level) if $rgsslab["経験値詳細設定"] if RGSSLAB_001::EXCLUSION.include?(@class_id) return easiness_exp_for_level(level) if $rgsslab["経験値安易設定"] return self.class.exp_for_level(level) end if $rgsslab["経験値リスト"] && $rgsslab["経験値詳細設定"] if RGSSLAB_001_01::LIST[@class_id] if RGSSLAB_001_01::LIST[@class_id][level - 1] return RGSSLAB_001_01::LIST[@class_id][level - 1] else max = RGSSLAB_001_01::LIST[@class_id].size last_exp = RGSSLAB_001_01::LIST[@class_id][max - 1] if RGSSLAB_001::ADD[@class_id] return last_exp + (RGSSLAB_001::ADD[@class_id] * (level - max)) else return last_exp + (RGSSLAB_001::DEFAULT * (level - max)) end end end end return auto_plus_process(level) end return easiness_exp_for_level(level) if $rgsslab["経験値安易設定"] if $rgsslab["レベル拡張"] if level < 99 return self.class.exp_for_level(level) else lv = level.to_f basis = self.class.exp_params[0].to_f extra = self.class.exp_params[1].to_f acc_a = self.class.exp_params[2].to_f acc_b = self.class.exp_params[3].to_f return (basis * ((lv - 1) ** (0.9 + acc_a / 250)) * lv * (lv + 1) / (6 + lv ** 2 / 50 / acc_b) + (lv - 1) * extra).round.to_i end end return self.class.exp_for_level(level) end #-------------------------------------------------------------------------- # ● 最大レベル [再構築] #-------------------------------------------------------------------------- def max_level final = $rgsslab["レベル拡張"] ? limit_final_level : actor.max_level return $rgsslab["最終レベル設定"] ? [[@now_maxlevel, 1].max, final].min : final end #-------------------------------------------------------------------------- # ○ 最終レベルの設定 #-------------------------------------------------------------------------- def limit_final_level if RGSSLAB_003::FINAL_LEVEL[@actor_id] == nil return actor.max_level else if RGSSLAB_003::FINAL_LEVEL[@actor_id].is_a?(Numeric) return RGSSLAB_003::FINAL_LEVEL[@actor_id] else RGSSLAB_003.setting_error(5) end end end #-------------------------------------------------------------------------- # ● 通常能力値の基本値取得 [再構築] # param_id : パラメータID #-------------------------------------------------------------------------- def param_base(param_id) n = 0 if $rgsslab["パラメータの追加"] && param_id > 7 n = param_base_parameter_append(param_id) else n = $rgsslab["レベル拡張"] ? gpb_rgsslab_level_extension(param_id) : self.class.params[param_id, get_use_level] end if $rgsslab["パラメータ構築設定"] array = [] for t in RGSSLAB_145::ARRAY do array.push(t) if !array.include?(t) && check_array(t) end for t in array case t when "陣形ボーナス" ; n = get_battle_lines_bonus(param_id, n) if $rgsslab["陣形ボーナス"] when "性格補正" ; n += party_bonus(param_id) if $rgsslab["パーティボーナス"] when "パーティボーナス" ; n += character_compensation(param_id) if $rgsslab["パラメータ性格補正"] end end else n = get_battle_lines_bonus(param_id, n) if $rgsslab["陣形ボーナス"] n += party_bonus(param_id) if $rgsslab["パーティボーナス"] n += character_compensation(param_id) if $rgsslab["パラメータ性格補正"] end return n end #-------------------------------------------------------------------------- # ○ パラメータの取得 # param_id : パラメータの種類 #-------------------------------------------------------------------------- def get_basic_parameter(param_id) use_level = get_use_level if param_id < 8 return self.class.params[param_id, use_level] unless $rgsslab["レベル拡張"] return gpb_rgsslab_level_extension(param_id) else return 0 unless $rgsslab["パラメータの追加"] return append_param_base(param_id) end end #-------------------------------------------------------------------------- # ○ パラメータの取得:レベル拡張 # param_id : パラメータID #-------------------------------------------------------------------------- def gpb_rgsslab_level_extension(param_id) return level100_follow_parameters(param_id) if get_use_level >= 100 case RGSSLAB_003::PARAMETER_SETTING[@class_id][0] when "C" ; RGSSLAB_003.setting_error(6) when "D" n = self.class.params[param_id, 1] n += self.class.params[param_id, 2] * get_use_level return n else ; self.class.params[param_id, get_use_level] end end #-------------------------------------------------------------------------- # ○ レベル100以降のパラメータ設定 # param_id : パラメータID #-------------------------------------------------------------------------- def level100_follow_parameters(param_id) if $rgsslab["レベル100以降詳細設定"] if RGSSLAB_003_2::LIST[@class_id] != nil if RGSSLAB_003_2::LIST[@class_id][param_id] n = level100_follow_parameters_details_setting(param_id) return n end end end n = level100_follow_parameters_auto_setting(param_id, get_use_level) return n + self.class.params[param_id, 99] end #-------------------------------------------------------------------------- # ○ レベル100以降のパラメータ設定【レベル100以降詳細設定】 # param_id : パラメータID #-------------------------------------------------------------------------- def level100_follow_parameters_details_setting(param_id) n = level100_parameter_value_check(param_id, get_use_level) return n[0] if n[1] value1 = n[0] value2 = level100_follow_parameters_auto_setting(param_id, get_use_level - n[2]) return value1 + value2 end #-------------------------------------------------------------------------- # ○ レベル100以降のパラメータの取得 # param_id : パラメータID # level : レベル #-------------------------------------------------------------------------- def level100_parameter_value_check(param_id, level) for i in 0...RGSSLAB_003_2::LIST[@class_id][param_id].size if i == level - 100 return RGSSLAB_003_2::LIST[@class_id][param_id][i], true, nil end end pa = RGSSLAB_003_2::LIST[@class_id][param_id].size return RGSSLAB_003_2::LIST[@class_id][param_id][pa - 1], false, RGSSLAB_003_2::LIST[@class_id][param_id].size end #-------------------------------------------------------------------------- # ○ レベル100以降のパラメータ設定【設定タイプ】 # param_id : パラメータID # level : レベル #-------------------------------------------------------------------------- def level100_follow_parameters_auto_setting(param_id, level) return 0 if RGSSLAB_003::PARAMETER_SETTING[@class_id] == nil case RGSSLAB_003::PARAMETER_SETTING[@class_id][0] when "A" value1 = RGSSLAB_003::PARAMETER_SETTING[@class_id][1] value2 = RGSSLAB_003::PARAMETER_SETTING[@class_id][2] RGSSLAB_003.setting_error(1) if value1 < 2 RGSSLAB_003.setting_error(2) if value2 < 3 RGSSLAB_003.setting_error(4) if value1 >= value2 value3 = level - 99 n = 0 m = 0 loop do return n if m >= value3 if value1 < 100 n += (self.class.params[param_id, value1] - self.class.params[param_id, value1 - 1]) else if RGSSLAB_003_2::LIST[@class_id][param_id][value1] if value1 == 100 n += RGSSLAB_003_2::LIST[@class_id][param_id][value1] - self.class.params[param_id, value1 - 1] else n += RGSSLAB_003_2::LIST[@class_id][param_id][value1] - RGSSLAB_003_2::LIST[@class_id][param_id][value1 - 1] end else n += self.class.params[param_id, 99] - self.class.params[param_id, 98] end end if value1 < value2 value1 += 1 else value1 = RGSSLAB_003::PARAMETER_SETTING[@class_id][1] end m += 1 end when "B" value1 = RGSSLAB_003::PARAMETER_SETTING[@class_id][param_id + 1] RGSSLAB_003.setting_error(3) if value1 < 0 value2 = level - 99 value3 = value1 * value2 return Integer(value3) when "C" RGSSLAB_003.setting_error(6) when "D" np = self.class.params[param_id, 1] np += self.class.params[param_id, 2] * level else return 0 end end #-------------------------------------------------------------------------- # ○ パラメータの取得:デフォルト # param_id : パラメータID #-------------------------------------------------------------------------- def gpb_default(param_id) return self.class.params[param_id, get_use_level] end #-------------------------------------------------------------------------- # ○ 使用レベルの取得 #-------------------------------------------------------------------------- def get_use_level return level_temporary_limit if $rgsslab["レベル一時制限"] return @level end #-------------------------------------------------------------------------- # ● レベルの変更 [再構築] # level : 新しいレベル # show : レベルアップ表示フラグ #-------------------------------------------------------------------------- def change_level(level, show) level = [[level, level_limit_judge].min, 1].max change_exp(exp_for_level(level), show) end #-------------------------------------------------------------------------- # ○ レベル制限の判定 #-------------------------------------------------------------------------- def level_limit_judge return @now_maxlevel if $rgsslab["最終レベル設定"] return max_level end end end