#============================================================================== # 新規パラメータ追加 - パラメータ詳細設定 ver1.07 #------------------------------------------------------------------------------ #[特徴] # 新たにパラメータを追加します。 # 各パラメータをレベル毎に詳細に設定できます。 # # #[設定方法] # 下記の設定項目を参照してください。 # # #[新規パラメータを任意で増加させる方法] # イベントコマンドのスクリプトで # aparam_plus(id, key, value) # と記述してください。 # #(例)アクターID1の筋力を10増加する # aparam_plus(1, :srt, 10) # # #[新規パラメータをダメージ計算に取り入れる方法] # スキル(またはアイテム)のメモ欄に # # と記述してください。 # 通常のダメージ計算にここに記述した値に分散値を加味したものを加算します。 # # 使用者のパラメータの記述方法は user.key # 攻撃を受ける側の記述方法は self.key # #(例)使用者の筋力×10 - 受ける側の体力×3 # # # #[本スクリプトは] # Kamesoft様の『パラメータ振り分け』を参考にしています。 # URL :http://ytomy.sakura.ne.jp/ # 著作者:TOMY様 # # 作成:ぶちょー # URL :http://nyannyannyan.bake-neko.net/ # 著作:リードミーとかに私の名前の載せたりするのは任意で。 #============================================================================== #============================================================================== # バージョンアップ情報 # ver1.07 防御修正をしていなかったのを修正 # ver1.06 属性影響の計算が正しくなかったのを修正 # ver1.05 加算ダメージに属性影響がなかったのを修正 # ver1.04 敵に新規パラメータが反映されていなかったのを修正 # ver1.03 最大HP、最大MPが少数になってしまうのを修正 # イベントコマンドで任意のパラメータを加算できるように # ver1.02 加算ダメージが少数になってしまうのを修正 # ver1.01 ステートの記述にエラーが出るのを修正 # 新規パラメータをダメージ計算に取り入られるように # ver1.00 公開 #============================================================================== #============================================================================== # 設定項目 #============================================================================== module Kazari module AddNewParameter # 最大レベルの設定 # 限界突破などで最大レベルを 99 以上にしている場合はその数値にしてください。 # ※ ここで 99 以上の数値にしても、限界突破するわけではありません。 MAX_LEVEL = 99 # 新規パラメータの設定 # { :key => :key_name, # :name => "パラメータ名", # :limit => [1, 99], # [下限, 上限] # :mhp => 1, # 1 当たりの最大HP増加量 # :mmp => 1, # 最大MP # :atk => 1, # 攻撃力 # :def => 1, # 防御力 # :spi => 1, # 精神力 # :agi => 1, # 敏捷性 # :hit => 1, # 命中率 # :eva => 1, # 回避率 # :cri => 1, # 会心率 # }, # :key は他と被らないように設定してください。 # NG: :atk, :def, :hit 等 APARAMS = [ { :key => :str, :name => "筋力", :limit => [0, 999], :mhp => 1, :atk => 2, }, { :key => :vit, :name => "体力", :limit => [0, 999], :mhp => 5, :def => 1, }, { :key => :int, :name => "知力", :limit => [0, 999], :mmp => 1, :spi => 2, }, { :key => :mnd, :name => "精神", :limit => [0, 999], :mmp => 5, :spi => 1, }, { :key => :dex, :name => "器用", :limit => [0, 999], :atk => 0.5, :spi => 0.5, :agi => 1, :hit => 0.1, :eva => 0.1, }, { :key => :luk, :name => "運", :limit => [0, 999], :cri => 0.1, }, ] # アクター毎のパラメータの設定 # 設定を省くとそのアクターのパラメータは全て下限値になります。 # また、パラメータの設定を省くとそのパラメータは下限値になります。 ACTOR_PARAMETER = [ { :id => 1, # アクターID:1 :str => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :vit => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :int => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :mnd => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :dex => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :luk => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 }, ] # 職業毎のパラメータの設定 # 設定を省くとそのアクターのパラメータは全て下限値になります。 # また、パラメータの設定を省くとそのパラメータは下限値になります。 CLASS_PARAMETER = [ { :id => 2, # 職業ID:2 :str => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :vit => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :int => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :mnd => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :dex => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 :luk => [ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, # 1〜10 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, # 11〜20 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, # 21〜30 98, 103, 108, 113, 118, 123, 128, 133, 138, 143, # 31〜40 149, 155, 161, 167, 173, 179, 185, 191, 197, 203, # 41〜50 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, # 51〜60 281, 289, 297, 305, 313, 321, 329, 337, 345, 353, # 61〜70 362, 371, 380, 389, 398, 407, 416, 425, 434, 443, # 71〜80 454, 465, 476, 487, 498, 509, 520, 531, 542, 553, # 81〜90 565, 577, 589, 601, 613, 625, 637, 649, 661], # 91〜99 }, ] # %増加の計算方法 # 0 : 加算 (例) 20%増加 + 20%増加 = 40%増加 # 120% + 120% = 140% # 1 : 乗算 (例) 20%増加 x 20%増加 = 44%増加 # 120% x 120% = 144% CALC_RATE = 0 # # 《武器/防具/スキル/ステートの設定方法》 # メモ欄に <パラメータ名増加:数値> #  例)<筋力増加:10> # 10増加 # <体力増加:10%> # 10%増加 # # 《アイテム》 # メモ欄に <パラメータ名増加:数値> で、使用することで基礎値が永久増加。 # 例)<知力増加:1> # # 《エネミーの設定》 # メモ欄に <パラメータ名:数値> で、設定。設定しなかったパラメータは下限値。 # 例)<筋力:30> <器用:10> # end end # # 《パラメータの使い方》 # ダメージ計算で使用するには以下で設定する必要があります。 #  設定すると *.key で参照可能。 # class Game_Battler def str ; aparam(:str) ; end def vit ; aparam(:vit) ; end def int ; aparam(:int) ; end def mnd ; aparam(:mnd) ; end def dex ; aparam(:dex) ; end def luk ; aparam(:luk) ; end end # # 《ステータス画面などでの描画方法》 # draw_new_parameters(actor, x, y) と書くことで追加したパラメータを描画できます。 # #============================================================================== # ここまで #============================================================================== $kzr_imported = {} if $kzr_imported == nil $kzr_imported["AddNewParameter"] = true #============================================================================== # ■ Kazari::AddNewParameter #============================================================================== module Kazari::AddNewParameter PARAMS = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk, :hit, :eva, :cri] GainInfo = Struct.new(:key, :name, :limit, :params) ParamInfo = Struct.new(:value) ActorInfo = Struct.new(:actor_id, :params) ClassInfo = Struct.new(:class_id, :params) GrowInfo = Struct.new(:params) ANAMES = {} ALIMITS = {} #-------------------------------------------------------------------------- # ● パラメータ増加量を構造体化 #-------------------------------------------------------------------------- def self.create_gain_param_structs(target) result = [] target.each {|v| ANAMES[v[:key]] = v[:name] ALIMITS[v[:key]] = v[:limit] info = GainInfo.new info.key = v[:key] info.name = v[:name] info.limit = v[:limit] info.params = {} PARAMS.each {|param| next unless v.has_key?(param) pinfo = ParamInfo.new pinfo.value = v[param] info.params[param] = pinfo } result << info } return result end GAIN_PARAMS = create_gain_param_structs(APARAMS) #-------------------------------------------------------------------------- # ● アクターのパラメータ成長値を構造体化 #-------------------------------------------------------------------------- def self.create_actor_param_structs(target) result = [] load_data("Data/Actors.rvdata").size.times do |i| info = ActorInfo.new info.actor_id = i info.params = {} GAIN_PARAMS.each {|param| ginfo = GrowInfo.new ginfo.params = [param[:limit][0]] * (MAX_LEVEL + 1) info.params[param[:key]] = ginfo } result << info end target.each {|v| info = ActorInfo.new info.actor_id = v[:id] info.params = {} GAIN_PARAMS.each {|param| ginfo = GrowInfo.new ginfo.params = [param[:limit][0]] if v.has_key?(param[:key]) v[param[:key]].each {|n| ginfo.params << n } else ginfo.params *= (MAX_LEVEL + 1) end info.params[param[:key]] = ginfo } result[v[:id]] = info } return result end ACTOR_PARAMS = create_actor_param_structs(ACTOR_PARAMETER) #-------------------------------------------------------------------------- # ● 職業のパラメータ成長値を構造体化 #-------------------------------------------------------------------------- def self.create_class_param_structs(target) result = [] load_data("Data/Classes.rvdata").size.times do |i| info = ClassInfo.new info.class_id = i info.params = {} GAIN_PARAMS.each {|param| ginfo = GrowInfo.new ginfo.params = [param[:limit][0]] * (MAX_LEVEL + 1) info.params[param[:key]] = ginfo } result << info end target.each {|v| info = ClassInfo.new info.class_id = v[:id] info.params = {} GAIN_PARAMS.each {|param| ginfo = GrowInfo.new ginfo.params = [param[:limit][0]] if v.has_key?(param[:key]) v[param[:key]].each {|n| ginfo.params << n } else ginfo.params *= (MAX_LEVEL + 1) end info.params[param[:key]] = ginfo } result[v[:id]] = info } return result end CLASS_PARAMS = create_actor_param_structs(CLASS_PARAMETER) end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window include Kazari::AddNewParameter #-------------------------------------------------------------------------- # ● 新規能力値の描画 #-------------------------------------------------------------------------- def draw_new_parameters(actor, x, y) GAIN_PARAMS.each_with_index {|param, i| draw_actor_aparam(actor, x, y + WLH * i, param[:key]) } end #-------------------------------------------------------------------------- # ● 新規能力値の描画 #-------------------------------------------------------------------------- def draw_actor_aparam(actor, x, y, key) self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, ANAMES[key]) self.contents.font.color = normal_color self.contents.draw_text(x + 120, y, 36, WLH, actor.aparam(key), 2) end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler include Kazari::AddNewParameter #-------------------------------------------------------------------------- # ● 能力値に加算する値をクリア #-------------------------------------------------------------------------- alias kzr_add_new_param_clear_extra_values clear_extra_values def clear_extra_values kzr_add_new_param_clear_extra_values @aparam_plus ||= {} @ps_aparam_plus ||= {} @ps_aparam_rate ||= {} GAIN_PARAMS.each {|param| @aparam_plus[param[:key]] ||= 0 @ps_aparam_plus[param[:key]] ||= 0 @ps_aparam_rate[param[:key]] ||= 1.0 } end #-------------------------------------------------------------------------- # ● 特徴を保持する全オブジェクトの配列取得 #-------------------------------------------------------------------------- def add_new_param_feature_objects return states end #-------------------------------------------------------------------------- # ● 能力値の加算値取得 #-------------------------------------------------------------------------- def add_new_param_plus(param_id) key = [:mhp, :mmp, :atk, :def, :spi, :agi, :hit, :eva, :cri][param_id] return APARAMS.inject(0) {|r, a| r += a[key] ? a[key] * aparam(a[:key]) : 0 } end #-------------------------------------------------------------------------- # ● 新規能力値の取得 #-------------------------------------------------------------------------- def aparam(key) value = (aparam_base(key) + aparam_plus(key)) * aparam_rate(key) return [[value, ALIMITS[key][1]].min, ALIMITS[key][0]].max.to_i end #-------------------------------------------------------------------------- # ● 新規能力値の基礎値 #-------------------------------------------------------------------------- def aparam_base(key) return 0 end #-------------------------------------------------------------------------- # ● 新規能力値の加算値取得 #-------------------------------------------------------------------------- def aparam_plus(key) return @aparam_plus[key] + @ps_aparam_plus[key] + states.inject(0) {|r, obj| r += obj.aparam_plus[key] } end #-------------------------------------------------------------------------- # ● 新規能力値の変化率取得 #-------------------------------------------------------------------------- def aparam_rate(key) if CALC_RATE == 0 return add_new_param_feature_objects.inject(@ps_aparam_rate[key]) {|r, obj| r += obj.aparam_rate[key] - 1.0 } else return add_new_param_feature_objects.inject(@ps_aparam_rate[key]) {|r, obj| r *= obj.aparam_rate[key] } end end #-------------------------------------------------------------------------- # ● 新規能力値の設定 #-------------------------------------------------------------------------- def set_aparam_plus(key, value) @aparam_plus[key] += value end #-------------------------------------------------------------------------- # ● アイテムの適用テスト #-------------------------------------------------------------------------- alias kzr_add_new_param_item_test item_test def item_test(user, item) return true if kzr_add_new_param_item_test(user, item) return item.aparam_plus.any? {|w| w[1] != 0 && !self.aparam_max?(w[0]) } end #-------------------------------------------------------------------------- # ● アイテムの成長効果適用 #-------------------------------------------------------------------------- alias kzr_add_new_param_item_growth_effect item_growth_effect def item_growth_effect(user, item) kzr_add_new_param_item_growth_effect(user, item) if item.aparam_plus.any? {|w| w[1] != 0 } item.aparam_plus.each {|param| @aparam_plus[param[0]] += param[1] } end end #-------------------------------------------------------------------------- # ● スキルまたはアイテムによるダメージ計算 #-------------------------------------------------------------------------- alias kzr_add_new_param_make_obj_damage_value make_obj_damage_value def make_obj_damage_value(user, obj) kzr_add_new_param_make_obj_damage_value(user, obj) element_rate = elements_max_rate(obj.element_set) plus_damage = apply_variance(eval(obj.plus_damage), obj.variance).to_i plus_damage *= element_rate plus_damage /= 100 plus_damage = apply_guard(plus_damage) if (obj.base_damage > 0 && element_rate > 0) || (obj.base_damage < 0 && element_rate < 0) @hp_damage = [@hp_damage + plus_damage, 0].max if @hp_damage >= 0 && !obj.damage_to_mp @mp_damage = [@mp_damage + plus_damage, 0].max if @mp_damage >= 0 && obj.damage_to_mp elsif (obj.base_damage > 0 && element_rate < 0) || (obj.base_damage < 0 && element_rate > 0) @hp_damage = [@hp_damage + plus_damage, 0].min if @hp_damage <= 0 && !obj.damage_to_mp @mp_damage = [@mp_damage + plus_damage, 0].min if @mp_damage <= 0 && obj.damage_to_mp end end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler include Kazari::AddNewParameter #-------------------------------------------------------------------------- # ● 特徴を保持する全オブジェクトの配列取得 #-------------------------------------------------------------------------- def add_new_param_feature_objects super + equips.compact end #-------------------------------------------------------------------------- # ● 新規能力値の基礎値 #-------------------------------------------------------------------------- def aparam_base(key) param = ACTOR_PARAMS[@actor_id][:params][key][:params][@level] param += CLASS_PARAMS[@class_id][:params][key][:params][@level] return param.to_i end #-------------------------------------------------------------------------- # ● 新規能力値の加算値取得 #-------------------------------------------------------------------------- def aparam_plus(key) equips.compact.inject(super) {|r, item| r += item.aparam_plus[key] } end #-------------------------------------------------------------------------- # ● 基本 MaxHP の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_maxhp base_maxhp def base_maxhp return Integer(kzr_add_new_param_base_maxhp + add_new_param_plus(0)) end #-------------------------------------------------------------------------- # ● 基本 MaxMP の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_maxmp base_maxmp def base_maxmp return Integer(kzr_add_new_param_base_maxmp + add_new_param_plus(1)) end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_atk base_atk def base_atk return kzr_add_new_param_base_atk + add_new_param_plus(2) end #-------------------------------------------------------------------------- # ● 基本防御力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_def base_def def base_def return kzr_add_new_param_base_def + add_new_param_plus(3) end #-------------------------------------------------------------------------- # ● 基本精神力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_spi base_spi def base_spi return kzr_add_new_param_base_spi + add_new_param_plus(4) end #-------------------------------------------------------------------------- # ● 基本敏捷性の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_agi base_agi def base_agi return kzr_add_new_param_base_agi + add_new_param_plus(5) end #-------------------------------------------------------------------------- # ● 命中率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_hit hit def hit return kzr_add_new_param_hit + add_new_param_plus(6) end #-------------------------------------------------------------------------- # ● 回避率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_eva eva def eva return kzr_add_new_param_eva + add_new_param_plus(7) end #-------------------------------------------------------------------------- # ● クリティカル率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_cri cri def cri return kzr_add_new_param_cri + add_new_param_plus(8) end #-------------------------------------------------------------------------- # ● スキルを覚える #-------------------------------------------------------------------------- alias kzr_add_new_param_learn_skill learn_skill def learn_skill(skill_id) skill = $data_skills[skill_id] unless skill_learn?(skill) GAIN_PARAMS.each {|param| @ps_aparam_plus[param[:key]] += skill.aparam_plus[param[:key]] if CALC_RATE == 0 @ps_aparam_rate[param[:key]] += skill.aparam_rate[param[:key]] - 1.0 else @ps_aparam_rate[param[:key]] *= skill.aparam_rate[param[:key]] end } end kzr_add_new_param_learn_skill(skill_id) end #-------------------------------------------------------------------------- # ● スキルを忘れる #-------------------------------------------------------------------------- alias kzr_add_new_param_forget_skill forget_skill def forget_skill(skill_id) skill = $data_skills[skill_id] if skill_learn?(skill) GAIN_PARAMS.each {|param| @ps_aparam_plus[param[:key]] -= skill.aparam_plus[param[:key]] if CALC_RATE == 0 @ps_aparam_rate[param[:key]] -= skill.aparam_rate[param[:key]] - 1.0 else @ps_aparam_rate[param[:key]] /= skill.aparam_rate[param[:key]] end } end kzr_add_new_param_forget_skill(skill_id) end #-------------------------------------------------------------------------- # ● 新規能力値が最大か判定 #-------------------------------------------------------------------------- def aparam_max?(key) param = aparam_base(key) + @aparam_plus[key] + @ps_aparam_plus[key] param *= @ps_aparam_rate[key] return param > ALIMITS[key][1] end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 基本 MaxHP の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_maxhp base_maxhp def base_maxhp return Integer(kzr_add_new_param_base_maxhp + add_new_param_plus(0)) end #-------------------------------------------------------------------------- # ● 基本 MaxMP の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_maxmp base_maxmp def base_maxmp return Integer(kzr_add_new_param_base_maxmp + add_new_param_plus(1)) end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_atk base_atk def base_atk return kzr_add_new_param_base_atk + add_new_param_plus(2) end #-------------------------------------------------------------------------- # ● 基本防御力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_def base_def def base_def return kzr_add_new_param_base_def + add_new_param_plus(3) end #-------------------------------------------------------------------------- # ● 基本精神力の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_spi base_spi def base_spi return kzr_add_new_param_base_spi + add_new_param_plus(4) end #-------------------------------------------------------------------------- # ● 基本敏捷性の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_base_agi base_agi def base_agi return kzr_add_new_param_base_agi + add_new_param_plus(5) end #-------------------------------------------------------------------------- # ● 命中率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_hit hit def hit return kzr_add_new_param_hit + add_new_param_plus(6) end #-------------------------------------------------------------------------- # ● 回避率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_eva eva def eva return kzr_add_new_param_eva + add_new_param_plus(7) end #-------------------------------------------------------------------------- # ● クリティカル率の取得 #-------------------------------------------------------------------------- alias kzr_add_new_param_cri cri def cri return kzr_add_new_param_cri + add_new_param_plus(8) end #-------------------------------------------------------------------------- # ● 新規能力値の基礎値 #-------------------------------------------------------------------------- def aparam_base(key) enemy.aparam_base[key] end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 新規能力値の加算 #-------------------------------------------------------------------------- def aparam_plus(actor_id, key, value) actor = $game_actors[actor_id] actor.set_aparam_plus(key, value) if actor end end #============================================================================== # ■ RPG #============================================================================== module RPG class BaseItem def aparam_plus return @aparam_plus if @aparam_plus != nil @aparam_plus = {} Kazari::AddNewParameter::GAIN_PARAMS.each {|param| key = param[:key] @aparam_plus[key] = get_param_plus(Kazari::AddNewParameter::ANAMES[key]) } return @aparam_plus end def aparam_rate return @aparam_rate if @aparam_rate != nil @aparam_rate = {} Kazari::AddNewParameter::GAIN_PARAMS.each {|param| key = param[:key] @aparam_rate[key] = get_param_rate(Kazari::AddNewParameter::ANAMES[key]) } return @aparam_rate end def get_param_plus(name) note.each_line {|line| case line when /<#{name}増加:([-])?(\d+)([%])?>/i return $2.to_i * ($1 ? -1 : 1) unless $3 end } return 0 end def get_param_rate(name) note.each_line {|line| case line when /<#{name}増加:([-])?(\d+)([%])?>/i return (100 + ($2.to_i * ($1 ? -1 : 1))) / 100.0 if $3 end } return 1.0 end def plus_damage note.each_line {|line| case line when //i ; return $1.to_s end } return "0" end end class State def aparam_plus return @aparam_plus if @aparam_plus != nil @aparam_plus = {} Kazari::AddNewParameter::GAIN_PARAMS.each {|param| key = param[:key] @aparam_plus[key] = get_param_plus(Kazari::AddNewParameter::ANAMES[key]) } return @aparam_plus end def aparam_rate return @aparam_rate if @aparam_rate != nil @aparam_rate = {} Kazari::AddNewParameter::GAIN_PARAMS.each {|param| key = param[:key] @aparam_rate[key] = get_param_rate(Kazari::AddNewParameter::ANAMES[key]) } return @aparam_rate end def get_param_plus(name) note.each_line {|line| case line when /<#{name}増加:([-])?(\d+)([%])?>/i return $2.to_i * ($1 ? -1 : 1) unless $3 end } return 0 end def get_param_rate(name) note.each_line {|line| case line when /<#{name}増加:([-])?(\d+)([%])?>/i return (100 + ($2.to_i * ($1 ? -1 : 1))) / 100.0 if $3 end } return 1.0 end end class Enemy def aparam_base return @aparam_base if @aparam_base != nil @aparam_base = {} Kazari::AddNewParameter::GAIN_PARAMS.each {|param| key = param[:key] @aparam_base[key] = get_param_base(key, Kazari::AddNewParameter::ANAMES[key]) } return @aparam_base end def get_param_base(key, name) note.each_line {|line| case line when /<#{name}:((\d+))/i ; return $1.to_i end } return Kazari::AddNewParameter::ALIMITS[key][0] end end end