#============================================================================== # ■ RGSS3 ステート付与時ステート/強化/弱体付与/解除 # 特徴/アイテム/スキル Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 戦闘中に自らの行動(反撃を含む)の結果、対象を特定のステートにした場合 # 行動終了後に自分に指定したステート/強化/弱体を # 付与/解除する特徴/アイテム/スキルを作成できるようにします。 # ただし、自らが戦闘不能となっていた場合はこの効果は発揮されません。 # なお、戦闘不能ステート(通常はID1)を反応するステートとした場合 # 敵をダメージ等で戦闘不能にした場合でも効果があります。 #============================================================================== # 特徴を有する項目もしくはアイテム、スキルのメモ欄に指定。 # 行を分けて記入する事でいくつでも指定可能。 #------------------------------------------------------------------------------ # [共通仕様] # 1番目の数字が対応するステートID。 # 2番目の数字が効果の種類。 # (0:ステート付与 # 1:ステート解除 # 2:強化付与 # 3:弱体付与 # 4:強化解除 # 5:弱体解除) # 3番目の数字が付与するステート、あるいは付与/解除対象の能力ID(0が最大HP〜7が運)。 #------------------------------------------------------------------------------ # [2番目が2〜3以外の場合] # 4番目の数字が発動確率。(省略可能) #------------------------------------------------------------------------------ # [2番目が2〜3の場合] # 4番目の数字が強化/弱体の持続ターン数。 # 5番目の数字が発動確率。(省略可能) #------------------------------------------------------------------------------ # ステート/強化/弱体能力IDと、強化/弱体の持続ターン数と # 強化/弱体発動確率の部分については、aを使用者、bを対象とする式を使用可能。 # なお、式を書き込む場合はスペースを含めずに書くこと。 #============================================================================== # 以下設定例 #============================================================================== # <ステート付与時効果: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 AddStateStates #ステート付与時効果設定用キーワードを指定。 Word = "ステート付与時効果" end class Game_Party < Game_Unit attr_accessor :add_state_states #-------------------------------------------------------------------------- # ステート付与時ステート情報 #-------------------------------------------------------------------------- def add_state_states @add_state_states ||= {} end #-------------------------------------------------------------------------- # ステート付与時ステートへの追加 #-------------------------------------------------------------------------- def add_state_states_add(type,id,target) add_state_states[type] ||= {} @add_state_states[type][id] ||= [] @add_state_states[type][id].push(target) end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # スキル/アイテムの効果適用 #-------------------------------------------------------------------------- alias item_apply_add_state_state item_apply def item_apply(user, item) item_apply_add_state_state(user, item) user.add_state_states_add_execute(self, item) if $game_party.in_battle end #-------------------------------------------------------------------------- # ステート付与時ステート付与処理 #-------------------------------------------------------------------------- def add_state_states_add_execute(b,item) a = self (feature_objects + [item]).each {|f| f.add_state_states.each {|array| next unless b.result.added_states.include?(array[0]) next unless eval(array[-1]) > rand(100) $game_party.add_state_states_add(array[1],array.size == 4 ? array[2] : array[2,2],self)}} end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # スキル/アイテムの使用 #-------------------------------------------------------------------------- alias use_item_add_state_state use_item def use_item a = @subject use_item_add_state_state if ($game_party.add_state_states.values.any? {|v| !v.empty?}) change_targets = [] $game_party.add_state_states.each {|k,v| case k when 0;v.each {|k2,v2| v2.each {|target| target.add_state(eval(k2)) change_targets.push(target)}} when 1;v.each {|k2,v2| v2.each {|target| v2e = eval(k2) next unless target.state?(v2e) target.remove_state(v2e) change_targets.push(target)}} when 2;v.each {|k2,v2| v2.each {|target| target.add_buff(eval(k2[0]),eval(k2[1])) change_targets.push(target)}} when 3;v.each {|k2,v2| v2.each {|target| target.add_debuff(eval(k2[0]),eval(k2[1])) change_targets.push(target)}} when 4;v.each {|k2,v2| v2.each {|target| next unless target.buff?(eval(k2)) target.remove_buff(eval(k2)) change_targets.push(target)}} when 5;v.each {|k2,v2| v2.each {|target| next unless target.debuff?(eval(k2)) target.remove_buff(eval(k2)) change_targets.push(target)}} end} refresh_status change_targets.uniq! change_targets.each {|target| @log_window.display_changed_states(target) @log_window.display_changed_buffs(target) @log_window.wait} change_targets.each {|target| target.result.clear if target} $game_party.add_state_states.clear end end end class RPG::BaseItem #-------------------------------------------------------------------------- # ステート付与時ステート #-------------------------------------------------------------------------- def add_state_states @add_state_states ||= create_add_state_states end #-------------------------------------------------------------------------- # ステート付与時ステートデータの作成 #-------------------------------------------------------------------------- def create_add_state_states a = [] w = AddStateStates::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]} 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