#============================================================================== # ■ RGSS3 特徴の属性・弱体・ステート有効度計算&限界値変更 Ver2.00 by 星潟 #------------------------------------------------------------------------------ # 特徴欄での属性・弱体・ステート有効度の計算を乗算から加算に切り替えます。 # また、それら3項目における、上限と下限を設定します。 #------------------------------------------------------------------------------ # Ver1.01 計算方法を修正しました。 # また、アクターとエネミーの上限・下限を分けて設定できるようにしました。 # Ver2.00 有効度計算方式を乗算・加算共に使用できるように変更しました。 # これに伴い、大幅に設定方法が変更されています。 # 加算設定にスクリプト文を使用し、可変データが使用できます。 #============================================================================== # ★設定方法(全て、特徴を有する項目のメモ欄に記入します。) #============================================================================== # ☆属性有効度 #------------------------------------------------------------------------------ # 例.弱点設定 #------------------------------------------------------------------------------ # <属性有効度:3,50> # # このように記入した場合 # 属性ID3の有効度が50%加算されます。 #------------------------------------------------------------------------------ # 例.耐性設定 #------------------------------------------------------------------------------ # <属性有効度:4,-25> # # このように記入した場合 # 属性ID4の有効度が25%減少します。 #------------------------------------------------------------------------------ # 例.可変有効度設定 #------------------------------------------------------------------------------ # <属性有効度:5,-self.level*5> # # このように記入した場合 # 属性ID5の有効度をレベル×5の値分の%減少します。 #============================================================================== # ☆弱体有効度 #------------------------------------------------------------------------------ # 例.弱点設定 #------------------------------------------------------------------------------ # <弱体有効度:0,40> # # このように記入した場合 # 最大HP弱体の有効度が40%加算されます。 #------------------------------------------------------------------------------ # 例.耐性設定 #------------------------------------------------------------------------------ # <弱体有効度:2,-15> # # このように記入した場合 # 攻撃力弱体の有効度が15%減少します。 #------------------------------------------------------------------------------ # 例.可変有効度設定 #------------------------------------------------------------------------------ # <弱体有効度:4,self.mdf> # # このように記入した場合 # 魔法力弱体の有効度を魔法防御の値分の%加算します。 #============================================================================== # ☆ステート有効度 #------------------------------------------------------------------------------ # 例.弱点設定 #------------------------------------------------------------------------------ # <ステート有効度:1,75> # # このように記入した場合 # ステートID1の有効度が75%加算されます。 #------------------------------------------------------------------------------ # 例.耐性設定 #------------------------------------------------------------------------------ # <ステート有効度:3,-50> # # このように記入した場合 # ステートID3の有効度が50%減少します。 #------------------------------------------------------------------------------ # 例.可変有効度設定 #------------------------------------------------------------------------------ # <ステート有効度:5,$game_variables[1]> # # このように記入した場合 # ステートID5の有効度を変数ID1の値分の%加算します。 #============================================================================== module F_C_C_PLUS #空の配列を用意。(消さないで下さい) WORD = [] #加算型属性有効度設定用キーワードを指定。 WORD.push("属性有効度") #加算型弱体有効度設定用キーワードを指定。 WORD.push("弱体有効度") #加算型ステート有効度設定用キーワードを指定。 WORD.push("ステート有効度") #属性有効度の上限・下限を設定する場合のみtrueにして下さい。 EL_J = true #属性有効度の上限を設定します。 #配列内の前者がアクター、後者がエネミーの設定値となります。 EL_1 = [10000, 10000] #属性有効度の下限を設定します。(負の値まで許可した場合、回復効果になります) #配列内の前者がアクター、後者がエネミーの設定値となります。 EL_2 = [-100, -100] #弱体有効度の上限・下限を設定する場合のみtrueにして下さい。 WE_J = true #弱体有効度の上限を設定します。 #配列内の前者がアクター、後者がエネミーの設定値となります。 WE_1 = [200, 200] #弱体有効度の下限を設定します。 #配列内の前者がアクター、後者がエネミーの設定値となります。 WE_2 = [0, 0] #ステート有効度の上限・下限を設定する場合のみtrueにして下さい。 ST_J = true #ステート有効度の上限を設定します。 #配列内の前者がアクター、後者がエネミーの設定値となります。 ST_1 = [200, 200] #ステート有効度の下限を設定します。 #配列内の前者がアクター、後者がエネミーの設定値となります。 ST_2 = [0, 0] end class Game_BattlerBase #-------------------------------------------------------------------------- # 属性有効度の取得 #-------------------------------------------------------------------------- alias element_rate_plus_type1 element_rate def element_rate(element_id) #本来の処理結果を加算型データで乗算 data = element_rate_plus_type2(element_id) * element_rate_plus_type1(element_id) #上限・下限設定が有効な場合は分岐して反映。 if F_C_C_PLUS::EL_J ld1 = self.actor? ? F_C_C_PLUS::EL_1[0] : F_C_C_PLUS::EL_1[1] ld2 = self.actor? ? F_C_C_PLUS::EL_2[0] : F_C_C_PLUS::EL_2[1] data = [[data, ld1 / 100.0].min, ld2 / 100.0].max end data end #-------------------------------------------------------------------------- # 弱体有効度の取得 #-------------------------------------------------------------------------- alias debuff_rate_plus_type1 debuff_rate def debuff_rate(param_id) #本来の処理結果に加算型データを加えた値を用意。 data = debuff_rate_plus_type2(param_id) * debuff_rate_plus_type1(param_id) #上限・下限設定が有効な場合は分岐して反映。 if F_C_C_PLUS::WE_J ld1 = self.actor? ? F_C_C_PLUS::WE_1[0] : F_C_C_PLUS::WE_1[1] ld2 = self.actor? ? F_C_C_PLUS::WE_2[0] : F_C_C_PLUS::WE_2[1] data = [[data, ld1 / 100.0].min, ld2 / 100.0].max end data end #-------------------------------------------------------------------------- # ステート有効度の取得 #-------------------------------------------------------------------------- alias state_rate_plus_type1 state_rate def state_rate(state_id) #本来の処理結果に加算型データを加えた値を用意。 data = state_rate_plus_type2(state_id) * state_rate_plus_type1(state_id) #上限・下限設定が有効な場合は分岐して反映。 if F_C_C_PLUS::ST_J ld1 = self.actor? ? F_C_C_PLUS::ST_1[0] : F_C_C_PLUS::ST_1[1] ld2 = self.actor? ? F_C_C_PLUS::ST_2[0] : F_C_C_PLUS::ST_2[1] data = [[data, ld1 / 100.0].min, ld2 / 100.0].max end data end #-------------------------------------------------------------------------- # 加算型属性有効度の取得 #-------------------------------------------------------------------------- def element_rate_plus_type2(element_id) #各特徴からデータを取得し、その上で100で割る。 (100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(0,element_id))})) / 100.0 end #-------------------------------------------------------------------------- # 加算型弱体有効度の取得 #-------------------------------------------------------------------------- def debuff_rate_plus_type2(param_id) #各特徴からデータを取得し、その上で100で割る。 (100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(1,param_id))})) / 100.0 end #-------------------------------------------------------------------------- # 加算型ステート有効度の取得 #-------------------------------------------------------------------------- def state_rate_plus_type2(state_id) #各特徴からデータを取得し、その上で100で割る。 (100 + (feature_objects.inject(0) {|r, f| r += eval(f.plus_type_rate_data(2,state_id))})) / 100.0 end end class RPG::BaseItem #-------------------------------------------------------------------------- # 加算型有効度ハッシュの取得 #-------------------------------------------------------------------------- def plus_type_rate_data(type,data_id) #ハッシュが存在しない場合は空のハッシュを用意。 @plus_type_element_rate_hash = {} unless @plus_type_element_rate_hash #指定データのハッシュが存在しない場合は分岐。 unless @plus_type_element_rate_hash[type] #データ取得用キーワードを取得。 word_data = F_C_C_PLUS::WORD[type] #元のハッシュ内に指定データ用ハッシュを用意。 @plus_type_element_rate_hash[type] = {} #メモ欄の各行からデータを取得。 @note.each_line {|l| data = l.scan(/<#{word_data}[::](\S+),(\S+)>/).flatten #取得したデータに異常がある場合は飛ばす。 next if !data or data.size != 2 #指定IDのデータが存在しない場合は、取得文字列をそのまま代入。 #そうでない場合は、元の文字列の後に加える。 unless @plus_type_element_rate_hash[type][data[0].to_i] @plus_type_element_rate_hash[type][data[0].to_i] = data[1] else @plus_type_element_rate_hash[type][data[0].to_i] += "+" + data[1] end } end #データが存在する場合はそのデータ、存在しない場合は文字列の0を返す。 @plus_type_element_rate_hash[type][data_id] ? @plus_type_element_rate_hash[type][data_id] : "0" end end