#============================================================================== # ■ RGSS3 通常能力/特殊能力/弱体有効度/ステート有効度加算 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 通常、通常能力・特殊能力・弱体有効度・ステート有効度は乗算しかされませんが # これらを加算で計算出来る機能を追加します。 # # これで計算されるデータは元々の乗算データと乗算されます。 # これにより元々の特徴データについては「加算データも含めた全体の乗算」となります。 #============================================================================== # 特徴を有する項目のメモ欄に記述。 #============================================================================== # <通常能力計算:id,value> # # idの部分には0〜7の数字を入れる。(0が最大HP〜7が運) # valueの部分には増減する%を記載する。 #------------------------------------------------------------------------------ # <特殊能力計算:id,value> # # idの部分には0〜9の数字を入れる。(0が狙われ率〜9が経験値獲得率) # valueの部分には増減する%を記載する。 #------------------------------------------------------------------------------ # <弱体有効度計算:id,value> # # idの部分には0〜7の数字を入れる。(0が最大HP〜7が運) # valueの部分には増減する%を記載する。 #------------------------------------------------------------------------------ # <ステート有効度計算:id,value> # # idの部分にはステートIDを入れる。 # valueの部分には増減する%を記載する。 #============================================================================== # 使用例 #------------------------------------------------------------------------------ # <通常能力計算:2,50> # # 攻撃力を50%加算する。 #------------------------------------------------------------------------------ # <特殊能力計算:4,-75> # # 消費MPを75%減算する。 #------------------------------------------------------------------------------ # <弱体有効度計算:0,$game_variables[50]/2> # # 最大HP弱体有効度を変数50の値÷2%加算する。 #------------------------------------------------------------------------------ # <ステート有効度計算:2,-tp> # # ステートID2の有効度を現在TPの値%減算する。 #============================================================================== module AnotherCalculation #空のハッシュを用意。 Words = {} #通常能力計算用のキーワードを指定。 Words[0] = "通常能力計算" #特殊能力計算用のキーワードを指定。 Words[1] = "特殊能力計算" #弱体有効度計算用のキーワードを指定。 Words[2] = "弱体有効度計算" #ステート有効度計算用のキーワードを指定。 Words[3] = "ステート有効度計算" #通常能力がMPは0、それ意外は1を下回らないようにするか。 Set0 = true #特殊能力が0を下回らないようにするか。 Set1 = true #弱体有効度が0を下回らないようにするか。 Set2 = true #ステート有効度が0を下回らないようにするか。 Set3 = true end class RPG::BaseItem #-------------------------------------------------------------------------- # 追加加算データの取得 #-------------------------------------------------------------------------- def ap_total_another_calculation(type,data_id) (@another_calc_hash ||= create_another_calc_hash)[type][data_id] end #-------------------------------------------------------------------------- # 追加加算データの作成 #-------------------------------------------------------------------------- def create_another_calc_hash h = {} AnotherCalculation::Words.each {|k1,v| h[k1] = {} note.each_line {|l| if /<#{v}[::](\d+),(\S+)>/ =~ l k2 = $1.to_i h[k1][k2] ||= "0" h[k1][k2] += "+" + $2.to_s end}} h end end class Game_BattlerBase #-------------------------------------------------------------------------- # 通常能力値の取得 #-------------------------------------------------------------------------- alias param_ap_another_calculation param def param(param_id) d = param_ap_another_calculation(param_id) * ap_another_calculation(0,param_id) n = param_id == 1 ? 0 : 1 d = n if d < n && AnotherCalculation::Set0 d.to_i end #-------------------------------------------------------------------------- # 特殊能力値の取得 #-------------------------------------------------------------------------- alias sparam_ap_another_calculation sparam def sparam(sparam_id) d = sparam_ap_another_calculation(sparam_id) * ap_another_calculation(1,sparam_id) d = 0 if d < 0 && AnotherCalculation::Set1 d end #-------------------------------------------------------------------------- # 弱体有効度の取得 #-------------------------------------------------------------------------- alias debuff_rate_ap_another_calculation debuff_rate def debuff_rate(param_id) d = debuff_rate_ap_another_calculation(param_id) * ap_another_calculation(2,param_id) d = 0 if d < 0 && AnotherCalculation::Set2 d end #-------------------------------------------------------------------------- # ステート有効度の取得 #-------------------------------------------------------------------------- alias state_rate_ap_another_calculation state_rate def state_rate(state_id) d = state_rate_ap_another_calculation(state_id) * ap_another_calculation(3,state_id) d = 0 if d < 0 && AnotherCalculation::Set3 d end #-------------------------------------------------------------------------- # 追加加算データの取得 #-------------------------------------------------------------------------- def ap_another_calculation(type,data_id) r = 100 feature_objects.each {|f| d = f.ap_total_another_calculation(type,data_id) r += eval(d) if d} r / 100.0 end end