#============================================================================== # ■ RGSS3 最大レベル限界突破特徴 Ver1.02 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増加します。 #------------------------------------------------------------------------------ # <必要経験値補正:150,level*level> # # この場合、レベル150からの必要経験値がそのレベルの二乗の値分増加します。 #------------------------------------------------------------------------------ # Ver1.01 テストプレイ以外でのレベル100以上でのスキル習得設定に # 致命的な不具合があった問題を修正しました。 # また、キャッシュ化による全体的な軽量化を施しました。 # 追加機能として、レベル描写領域の変更機能を追加しました。 # Ver1.02 必要経験値に補正をかけられるようになりました。 # 限界突破後補正のかかり方に異常があった不具合を修正しました。 # 能力増加割合を計算式で求める方式に変更しました。 #============================================================================== 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 end class RPG::BaseItem #-------------------------------------------------------------------------- # 最大レベル増加値 #-------------------------------------------------------------------------- def mlv_plus #キャッシュがあればキャッシュを返す。 return @mlv_plus if @mlv_plus != nil #メモ欄からデータを取得 memo = self.note.scan(/<#{MLV_CHANGE::WORD1}[::](\S+)>/).flatten #最大レベル増加値を取得する。 @mlv_plus = (memo != nil && !memo.empty?) ? memo[0].to_i : 0 #データを返す。 return @mlv_plus end #-------------------------------------------------------------------------- # Lv99以降の能力補正値 #-------------------------------------------------------------------------- def olv_extend #キャッシュがあればキャッシュを返す。 return @olv_extend if @olv_extend != nil #メモ欄からデータを取得 memo = self.note.scan(/<#{MLV_CHANGE::WORD2}[::](\S+)>/).flatten #最大レベル増加値を取得する。 @olv_extend = (memo != nil && !memo.empty?) ? memo[0] : "100" #データを返す。 return @olv_extend end end class RPG::Class < RPG::BaseItem #-------------------------------------------------------------------------- # 必要経験値補正配列 #-------------------------------------------------------------------------- def etc_array #キャッシュがある場合はキャッシュを返す。 return @etc_array if @etc_array != nil #空の配列を作成。 @etc_array = [] #メモ欄の行別に処理。 @note.each_line {|line| #メモ欄からデータを取得。 memo = line.scan(/<#{MLV_CHANGE::WORD4}[::](\S+),(\S+)>/).flatten #適切なデータが得られない場合は次の行へ。 next if memo == nil or memo.size != 2 #配列に配列を加える。 @etc_array.push([memo[0].to_i,memo[1]]) } #配列を返す。 return @etc_array end #-------------------------------------------------------------------------- # 必要経験値 #-------------------------------------------------------------------------- alias exp_for_level_etc_array exp_for_level unless $! def exp_for_level(level) #本来の値に必要経験値補正配列のデータを加えた物を返す。 exp_for_level_etc_array(level) + etc_array.inject(0) {|r, array| r += (level >= array[0]) ? eval(array[1]) * (level - array[0] + 1) : 0} end end class RPG::Class::Learning #-------------------------------------------------------------------------- # 習得レベル #-------------------------------------------------------------------------- def level #キャッシュがあればキャッシュを返す。 return @true_level if @true_level != nil #メモ欄からデータを取得 memo = @note.scan(/<#{MLV_CHANGE::WORD3}[::](\S+)>/).flatten #習得レベルを取得する。 @true_level = (memo != nil && !memo.empty?) ? memo[0].to_i : @level #データを返す。 return @true_level end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 最大レベル #-------------------------------------------------------------------------- alias max_level_lb max_level def max_level #本来の処理での最大レベルを取得する。 data = max_level_lb #各特徴の最大レベル増加値を足す。 feature_objects.each {|f| data += f.mlv_plus} return data end #-------------------------------------------------------------------------- # 通常能力値の基本値取得 #-------------------------------------------------------------------------- alias param_base_lb param_base def param_base(param_id) #レベル99以下の時は通常の処理を行い #100以上の場合は通常処理にレベル99以上でのパラメータを加える。 @level > 99 ? self.class.params[param_id, 99] + over_level_param(param_id) : self.class.params[param_id, @level] 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 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