#============================================================================== # ■ RGSS3 最大レベル限界突破特徴 Ver1.05 by 星潟 #------------------------------------------------------------------------------ # このスクリプトを導入することで # レベル100以上へのレベルアップを可能にする特徴を作成できます。 # また、レベル100以上でのレベルアップでのスキル習得設定も可能です。 #------------------------------------------------------------------------------ # ★特徴を有する項目のメモ欄設定例 #------------------------------------------------------------------------------ # <レベル限界増加:10> # # 限界レベルが+10されます。 # # <限界突破後補正:110> # # レベル100以上のレベルアップ時の能力増加値の割合は # レベル98→99の際の増加値にP_RATEで設定した%をかけたものの # 110%の値となります。 # # <限界突破後補正:level> # # レベル100以上のレベルアップ時の能力増加値の割合は # レベル98→99の際の増加値にP_RATEで設定した%をかけたものの # 現在レベル%の値となります。(レベル250の場合、250%) #------------------------------------------------------------------------------ # ★職業の覚えるスキルのメモ欄(小さいメモ欄)設定例 #------------------------------------------------------------------------------ # # # このスキルは本来の指定レベルで覚えず、レベル120で覚えます。 #------------------------------------------------------------------------------ # ★必要経験値補正(職業のメモ欄)設定例 # この項目は、1つの職業のメモ欄に対し、行を分けて記述する事で複数指定できます。 # 1つ目の引数としてレベル、2つ目の引数としてEXP増加量を指定します。 # 2つ目の引数には、levelという変数を用いる事が出来ます。 # (levelの値は、次のレベルの数値となります) #------------------------------------------------------------------------------ # <必要経験値補正:100,10000> # # この場合、レベル100からの必要経験値が固定で10000増加します。 #------------------------------------------------------------------------------ # <必要経験値補正:100,(level-99)*100> # # この場合、レベル100からの必要経験値が # レベルから99を引いた値を100倍した値分増加します。 #------------------------------------------------------------------------------ # <必要経験値補正:150,level*level> # # この場合、レベル150からの必要経験値がそのレベルの二乗の値分増加します。 #------------------------------------------------------------------------------ # ★イベントコマンドのスクリプトから職業のレベル別EXPリストを # 外部テキストファイルとして出力 #------------------------------------------------------------------------------ # export_class_exp(5,1,99) # # この場合、職業ID5のLv1からLv99までの必要EXPリストを出力します。 # ゲームフォルダ内にClass5Lv1_99EXP.txtが作成されます。 #============================================================================== module MLV_CHANGE #レベル100以上のレベルアップ時の能力増加値の基本割合を設定します。 #計算式の文字列となっているので、任意の数値を文字列として記入して下さい。 #基本割合での増減を行いたくない場合は、"100"として下さい。 #なお、能力増加値は、レベル98→99の際の能力を100%として計算します。 #レベルに応じて変動させたい場合は"level"等とする事で #レベル依存になります。 P_RATE = "105" #レベル限界がどれだけ増加するかを設定する特徴メモ欄用キーワードを設定します。 WORD1 = "レベル限界増加" #R_RATEにさらに追加する特徴メモ欄用キーワードを設定します。 WORD2 = "限界突破後補正" #そのスキルを覚えるレベルを設定する職業スキルメモ欄用キーワードを設定します。 WORD3 = "LV" #必要経験値補正用の職業メモ欄用キーワードを設定します。 WORD4 = "必要経験値補正" #レベル描写領域調整値(0以上でWindow_Baseのレベル描写を上書きして調整する) #デフォルトでは3桁の表示に適した値である8を入れています。 LVDRW = 8 #出力フォーマット(変更不要) TFORM = "Class%sLv%s_%sEXP.txt" end class RPG::BaseItem #-------------------------------------------------------------------------- # 最大レベル増加値 #-------------------------------------------------------------------------- def mlv_plus @mlv_plus ||= /<#{MLV_CHANGE::WORD1}[::](\S+)>/ =~ note ? $1.to_i : 0 end #-------------------------------------------------------------------------- # Lv99以降の能力補正値 #-------------------------------------------------------------------------- def olv_extend @olv_extend ||= /<#{MLV_CHANGE::WORD2}[::](\S+)>/ =~ note ? $1.to_s : "100" end end class RPG::Class < RPG::BaseItem #-------------------------------------------------------------------------- # 必要経験値補正配列 #-------------------------------------------------------------------------- def etc_array @etc_array ||= create_etc_array end #-------------------------------------------------------------------------- # 必要経験値補正配列作成 #-------------------------------------------------------------------------- def create_etc_array a = [] @note.each_line {|l| a.push([$1.to_i,$2.to_s]) if /<#{MLV_CHANGE::WORD4}[::](\d+),(\S+)>/ =~ l} a end #-------------------------------------------------------------------------- # 必要経験値 #-------------------------------------------------------------------------- unless method_defined?(:exp_for_level_etc_array) alias exp_for_level_etc_array exp_for_level def exp_for_level(level) exp_for_level_etc_array(level) + etc_array.inject(0) {|r, array| r += (level >= array[0]) ? eval(array[1]) : 0} end end end class RPG::Class::Learning #-------------------------------------------------------------------------- # 習得レベル #-------------------------------------------------------------------------- def level @true_level ||= /<#{MLV_CHANGE::WORD3}[::](\d+)>/ =~ note ? $1.to_i : @level end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 最大レベル #-------------------------------------------------------------------------- alias max_level_lb max_level def max_level max_level_lb + feature_objects.inject(0) {|r,f| r += f.mlv_plus} end #-------------------------------------------------------------------------- # 通常能力値の基本値取得 #-------------------------------------------------------------------------- alias param_base_lb param_base def param_base(param_id) #レベル99以下の時は通常の処理を行い #100以上の場合は通常処理にレベル99以上でのパラメータを加える。 olp = @level > 99 ? over_level_param(param_id) : 0 l = @level.to_i @level = 99 if l > 99 d = param_base_lb(param_id) + olp @level = l d end #-------------------------------------------------------------------------- # レベル99以上でのパラメータ #-------------------------------------------------------------------------- def over_level_param(param_id) #レベル98→99でのパラメータ増加値を取得。 data = self.class.params[param_id, 99] - self.class.params[param_id, 98] #もしも0である場合は0を返す。 return 0 if data == 0 #現在レベルから99を引いた値、基本パラメータ補正、 #パラメータ補正特徴による補正をパラメータ増加値に乗算し #最後に小数点以下を切り捨てる。 data = (data * (@level - 99) * olextend_data_1 * olextend_data_2).truncate #データを返す。 return data end #-------------------------------------------------------------------------- # レベル99以上でのパラメータ補正1(基本) #-------------------------------------------------------------------------- def olextend_data_1 #初期データを用意。 data = eval(MLV_CHANGE::P_RATE) #データが0の場合は0を返す。 return 0 if data == 0 #データが0でない場合は倍率にして返す。 data = data.to_f / 100 #データを返す。 return data end #-------------------------------------------------------------------------- # レベル99以上でのパラメータ補正2(特徴依存) #-------------------------------------------------------------------------- def olextend_data_2 #初期データを用意。 data = 100 #各特徴のパラメータ補正を加算。 feature_objects.each {|f| data += eval(f.olv_extend) - 100} #データが0の場合は0を返す。 return 0 if data == 0 #データが0でない場合は倍率にして返す。 data = data.to_f / 100 #データを返す。 return data end end class Game_Interpreter #-------------------------------------------------------------------------- # EXPリストの出力 #-------------------------------------------------------------------------- def export_class_exp(class_id,range1,range2 = nil) range2 = range1 unless range2 return if range1 > range2 range3 = range1 text = "" format = "%s => %s" cd = $data_classes[class_id] loop do break if range3 > range2 text += "\n" unless text.empty? text += sprintf(format,range3,cd.exp_for_level(range3)) range3 += 1 end fi = File.open(sprintf(MLV_CHANGE::TFORM,class_id,range1,range2), "w") fi.write(text) fi.close end end if MLV_CHANGE::LVDRW > 0 class Window_Base < Window #-------------------------------------------------------------------------- # レベルの描画 #-------------------------------------------------------------------------- def draw_actor_level(actor, x, y) #文字色を変える。 change_color(system_color) #システムで指定したレベルの文字を返す。 draw_text(x, y, 32, line_height, Vocab::level_a) #文字色を変える。 change_color(normal_color) #レベルの値を記述する。 draw_text(x + 32 - MLV_CHANGE::LVDRW, y, 24 + MLV_CHANGE::LVDRW, line_height, actor.level, 2) end end end