#============================================================================== # ■ RGSS3 属性・メモ欄依存速度/成功率/MPTP消費率補正特徴 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # アイテム・スキルの属性もしくはメモ欄の内容に応じて # 速度・成功率・MP消費率・TP消費率に補正をかける機能を追加します。 # # ※属性依存のものは何らかの素材で属性をランダムで追加するような # 特殊なスキルを作成した場合 # ダメージには属性が乗っているのに行動速度の補正がかからなかったり # 行動速度の補正がかかるのにダメージに属性が乗らなかったりする為注意。 # 100%追加されるような物なら問題は無いと思います。 #============================================================================== # 特徴を有する項目のメモ欄にて設定 #------------------------------------------------------------------------------ # <属性速度補正:3,150> # # 属性ID3を含む行動を行う際、速度補正+150。 #------------------------------------------------------------------------------ # <メモ速度補正:あいうえお,5000> # # メモ欄にあいうえおを含む行動を行う際、速度補正+5000。 #------------------------------------------------------------------------------ # <属性成功率補正:3,100> # # 属性ID3を含む行動を行う際、成功率+100。 #------------------------------------------------------------------------------ # <メモ成功率補正:あいうえお,50> # # メモ欄にあいうえおを含む行動を行う際、成功率+50。 #------------------------------------------------------------------------------ # <属性MP消費率補正:3,50> # # 属性ID3を含む行動を行う際、消費MP率50%。 #------------------------------------------------------------------------------ # <メモMP消費率補正:あいうえお,150> # # メモ欄にあいうえおを含む行動を行う際、消費MP率150%。 #------------------------------------------------------------------------------ # <属性TP消費率補正:3,150> # # 属性ID3を含む行動を行う際、消費TP率150%。 #------------------------------------------------------------------------------ # <メモTP消費率補正:あいうえお,50> # # メモ欄にあいうえおを含む行動を行う際、消費TP率50%。 #============================================================================== module ExISSpeedPlus Words = [] Types = [] #属性速度補正を設定する為の設定用ワードを設定します。 Words.push("属性速度補正") #メモ速度補正を設定する為の設定用ワードを設定します。 Words.push("メモ速度補正") #属性成功率補正を設定する為の設定用ワードを設定します。 Words.push("属性成功率補正") #メモ成功率補正を設定する為の設定用ワードを設定します。 Words.push("メモ成功率補正") #属性MP消費率補正を設定する為の設定用ワードを設定します。 Words.push("属性MP消費率補正") #メモMP消費率補正を設定する為の設定用ワードを設定します。 Words.push("メモMP消費率補正") #属性TP消費率補正を設定する為の設定用ワードを設定します。 Words.push("属性TP消費率補正") #メモTP消費率補正を設定する為の設定用ワードを設定します。 Words.push("メモTP消費率補正") #速度への補正を有効にするか否か。(trueで有効 falseで無効) Types.push(true) #成功率への補正を有効にするか否か。(trueで有効 falseで無効) Types.push(true) #MP消費率への補正を有効にするか否か。(trueで有効 falseで無効) Types.push(true) #TP消費率への補正を有効にするか否か。(trueで有効 falseで無効) Types.push(true) end class Game_Party < Game_Unit attr_accessor :item_element_and_memo_ex_data_1 #-------------------------------------------------------------------------- # 設定除去 #-------------------------------------------------------------------------- def remove_item_element_and_memo_ex_data_1 remove_instance_variable(:@item_element_and_memo_ex_data_1) end end class Game_BattlerBase attr_accessor :item_element_and_memo_ex_data #-------------------------------------------------------------------------- # 属性補正・メモ補正 #-------------------------------------------------------------------------- def item_element_and_memo_ex(item,type1,type2 = false) return (type2 ? 1.0 : 0) unless ExISSpeedPlus::Types[type1] @item_element_and_memo_ex_data = [] item_element_rate(self,item) im = item.note key1 = type1 * 2 key2 = key1 + 1 #各特徴から属性補正・メモ補正を取得して加算 if type2 result = feature_objects.inject(1.0) {|r1,f| r1 *= f.item_element_and_memo_ex_data[key1].inject(1.0) {|r2,a| r2 *= (@item_element_and_memo_ex_data.include?(a[0]) ? eval(a[1]) : 100).to_f / 100} * f.item_element_and_memo_ex_data[key2].inject(1.0) {|r3,a| r3 *= (im.include?(a[0]) ? eval(a[1]) : 100).to_f / 100}} else result = feature_objects.inject(0) {|r1,f| r1 += f.item_element_and_memo_ex_data[key1].inject(0) {|r2,a| r2 += @item_element_and_memo_ex_data.include?(a[0]) ? eval(a[1]) : 0} + f.item_element_and_memo_ex_data[key2].inject(0) {|r3,a| r3 += im.include?(a[0]) ? eval(a[1]) : 0}} end @item_element_and_memo_ex_data = nil result end #-------------------------------------------------------------------------- # 属性有効度の取得 #-------------------------------------------------------------------------- alias element_rate_element_speed_plus element_rate def element_rate(element_id) @item_element_and_memo_ex_data.push(element_id) if @item_element_and_memo_ex_data features_pi(FEATURE_ELEMENT_RATE, element_id) end #-------------------------------------------------------------------------- # スキルの消費 MP 計算 #-------------------------------------------------------------------------- alias skill_mp_cost_element_speed_plus skill_mp_cost def skill_mp_cost(skill) r = skill_mp_cost_element_speed_plus(skill) (r * item_element_and_memo_ex(skill,2,true)).ceil end #-------------------------------------------------------------------------- # スキルの消費 TP 計算 #-------------------------------------------------------------------------- alias skill_tp_cost_element_speed_plus skill_tp_cost def skill_tp_cost(skill) r = skill_tp_cost_element_speed_plus(skill) (r * item_element_and_memo_ex(skill,3,true)).ceil end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの命中率計算 #-------------------------------------------------------------------------- alias item_hit_element_speed_plus item_hit def item_hit(user, item) $game_party.item_element_and_memo_ex_data_1 = user.item_element_and_memo_ex(item,1) r = item_hit_element_speed_plus(user, item) $game_party.remove_item_element_and_memo_ex_data_1 r end end class RPG::BaseItem #-------------------------------------------------------------------------- # 属性補正・メモ補正 #-------------------------------------------------------------------------- def item_element_and_memo_ex_data @item_element_and_memo_ex_data ||= create_item_element_and_memo_ex_data end #-------------------------------------------------------------------------- # 属性補正・メモ補正データ作成 #-------------------------------------------------------------------------- def create_item_element_and_memo_ex_data h = {} ws = ExISSpeedPlus::Words ws.each_index {|i| h[i] = []} note.each_line {|l| ws.each_with_index {|w,i| if i % 2 == 0 h[i].push([$1.to_i,$2.to_s]) if /<#{w}[::](\d+),(\S+)>/ =~ l else h[i].push([$1.to_s,$2.to_s]) if /<#{w}[::](\S+),(\S+)>/ =~ l end}} h end end class RPG::UsableItem < RPG::BaseItem #-------------------------------------------------------------------------- # 成功率 #-------------------------------------------------------------------------- unless method_defined?(:success_rate_element_speed_plus) alias success_rate_element_speed_plus success_rate def success_rate r1 = success_rate_element_speed_plus n = $game_party.item_element_and_memo_ex_data_1 r1 + (n ? n : 0) end end end class Game_Action #-------------------------------------------------------------------------- # 行動速度の計算 #-------------------------------------------------------------------------- alias speed_ex_speed_plus speed def speed d = speed_ex_speed_plus #行動内容がない場合は処理を飛ばす return d unless item #本来の速度に補正を追加 d + subject.item_element_and_memo_ex(item,0) end end