#============================================================================== # ■ RGSS3 被属性行動時効果特徴 Ver1.00 by 星潟 #============================================================================== # 特定の属性を持つ行動の対象となった際に # ステート付与/解除または強化/弱体の付与/解除を行う特徴を # 作成出来るようになります。 # # なお、戦闘不能となった場合は効果が現れません。 #============================================================================== # 特徴を有する項目のメモ欄に指定。行を分けて記入する事でいくつでも指定可能。 #------------------------------------------------------------------------------ # [共通仕様] # 1番目の数字が対応する属性ID。 # 2番目の数字が効果の種類。 # (0:ステート付与 # 1:ステート解除 # 2:強化付与 # 3:弱体付与 # 4:強化解除 # 5:弱体解除) # 3番目の数字が付与するステート、あるいは付与/解除対象の能力ID(0が最大HP〜7が運)。 #------------------------------------------------------------------------------ # [2番目が2〜3以外の場合] # 4番目の数字が発動確率。(省略可能) #------------------------------------------------------------------------------ # [2番目が2〜3の場合] # 4番目の数字が強化/弱体の持続ターン数。 # 5番目の数字が発動確率。(省略可能) #============================================================================== # 以下設定例 #============================================================================== # <被属性行動時効果:1,0,2> # # 属性ID1のアイテム/スキルを受けた際、ステートID2を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:2,0,3,50> # # 属性ID2のアイテム/スキルを受けた際、50%の確率でステートID3を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:3,1,4> # # 属性ID3のアイテム/スキルを受けた際、ステートID4を解除。 #------------------------------------------------------------------------------ # <被属性行動時効果:4,1,5,25> # # 属性ID4のアイテム/スキルを受けた際、25%の確率でステートID5を解除。 #------------------------------------------------------------------------------ # <被属性行動時効果:5,2,0,6> # # 属性ID5のアイテム/スキルを受けた際、6ターンの最大HP強化を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:6,2,1,7,25> # # 属性ID6のアイテム/スキルを受けた際、25%の確率で7ターンの最大MP強化を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:7,3,2,8> # # 属性ID7のアイテム/スキルを受けた際、8ターンの攻撃弱体を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:8,3,3,9,25> # # 属性ID8のアイテム/スキルを受けた際、25%の確率で9ターンの防御弱体を付与。 #------------------------------------------------------------------------------ # <被属性行動時効果:9,4,4> # # 属性ID9のアイテム/スキルを受けた際、魔法力の強化を打ち消す。 #------------------------------------------------------------------------------ # <被属性行動時効果:10,4,5,50> # # 属性ID10のアイテム/スキルを受けた際、50%の確率で魔法防御の強化を打ち消す。 #------------------------------------------------------------------------------ # <被属性行動時効果:11,5,6> # # 属性ID11のアイテム/スキルを受けた際、敏捷性の弱体を解除。 #------------------------------------------------------------------------------ # <被属性行動時効果:12,5,7,25> # # 属性ID12のアイテム/スキルを受けた際、25%の確率で運の弱体を解除。 #============================================================================== module ElementReact #被属性行動時特徴設定用キーワードを指定。 Word = "被属性行動時効果" end class Game_ActionResult attr_accessor :element_react_flag attr_accessor :element_react #-------------------------------------------------------------------------- # ステータス効果のクリア #-------------------------------------------------------------------------- alias clear_status_effects_element_react clear_status_effects def clear_status_effects clear_status_effects_element_react @element_react_flag = nil @element_react = [] end #-------------------------------------------------------------------------- # 被属性IDの取得 #-------------------------------------------------------------------------- def element_react_add(element_id) return unless element_react_flag @element_react.push(element_id) end end class Game_BattlerBase #-------------------------------------------------------------------------- # 属性有効度の取得 #-------------------------------------------------------------------------- alias element_rate_element_react element_rate def element_rate(element_id) @result.element_react_add(element_id) element_rate_element_react(element_id) end #-------------------------------------------------------------------------- # 被属性行動時特徴効果の取得 #-------------------------------------------------------------------------- def element_react a = [] feature_objects.inject([]) {|r,f| r += f.element_react} end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの属性修正値を取得 #-------------------------------------------------------------------------- alias item_element_rate_element_react item_element_rate def item_element_rate(user, item) @result.element_react_flag = true r = item_element_rate_element_react(user, item) @result.element_react_flag = nil r end #-------------------------------------------------------------------------- # スキル/アイテムの使用者側への効果 #-------------------------------------------------------------------------- alias item_user_effect_element_react item_user_effect def item_user_effect(user, item) item_user_effect_element_react(user, item) return if @result.element_react.empty? or !alive? er = element_react @result.element_react.each {|i| er.each {|e| element_react_apply(e) if i == e[0]}} end #-------------------------------------------------------------------------- # 被属性行動時効果特徴適用 #-------------------------------------------------------------------------- def element_react_apply(array) return unless eval(array[-1]) > rand(100) d1 = eval(array[2]) case array[1] when 0;add_state(d1) when 1;remove_state(d1) when 2;add_buff(d1,eval(array[3])) when 3;add_debuff(d1,eval(array[3])) when 4;remove_buff(d1) if buff?(effect.data_id) when 5;remove_buff(d1) if debuff?(effect.data_id) end end end class RPG::BaseItem #-------------------------------------------------------------------------- # 被属性行動時効果特徴 #-------------------------------------------------------------------------- def element_react @element_react ||= create_element_react end #-------------------------------------------------------------------------- # 被属性行動時効果特徴データの作成 #-------------------------------------------------------------------------- def create_element_react a = [] w = ElementReact::Word note.each_line {|l| if /<#{w}[::](\S+)>/ =~ l b = $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i)} next if b.size < 3 2.times {|i| b[i] = b[i].to_i if b[i]} next if b[1] < 0 or b[1] > 5 case b.size when 3 next if b[1] == 2 or b[1] == 3 b.push("100") when 4 b.push("100") if b[1] == 2 or b[1] == 3 when 5 next unless b[1] == 2 or b[1] == 3 else;next end a.push(b) end} a end end