if $ukra_system == nil $ukra_system = {} end $ukra_system[8] = true module UKRA_008_CUSTOM #------------------------------------------------------------------------- # ○ 有利状態 のステートID配列 # 「有利状態」と呼べるステートのIDを、配列形式で記述してください。 # \enex_good[n] / \myex_good[n]で使用します。 #------------------------------------------------------------------------- GOOD_STATES = [9, 10, 11, 12] # ※デフォルトでは「ステータス上昇」の4つ #------------------------------------------------------------------------- # ○ ステートグループの設定 # ステートをグループ分けし、まとめて延長効果を設定できるようにします。 # 一括して \enstate_group[m,n] \mystate_group[m,n]で使用。 #------------------------------------------------------------------------- ST_GROUP = [] ST_GROUP[0] = [1, 2, 3] # 毒・暗闇・沈黙 ST_GROUP[1] = [13, 14, 15, 16] # ステータス低下の4つ end module UKRA_008 #------------------------------------------------------------------------- # ■ 正規表現 #------------------------------------------------------------------------- ENSTATE_EXTEND = /\\enstate_ex\[([\d]+),\s*([+-]?[\d]+)\]/i MYSTATE_EXTEND = /\\mystate_ex\[([\d]+),\s*([+-]?[\d]+)\]/i ENEXT_GOOD = /\\enstate_good\[([+-]?[\d]+)\]/i MYEXT_GOOD = /\\mystate_good\[([+-]?[\d]+)\]/i ENEX_GROUP = /\\enstate_group\[([\d]+),\s*([+-]?[\d]+)\]/i MYEX_GROUP = /\\mystate_group\[([\d]+),\s*([+-]?[\d]+)\]/i NOT_AUTOREMOVE = /\\no_autoremove/i STARTSTATE = /\\startstate\[([\d]+)\]/i AUTOSTATE = /\\autostate\[([\d]+)\]/i REMOVE_BTSTART = /\\remove_in_battle/i #------------------------------------------------------------------------- # ○ 付加するステートの効果時間延長 #------------------------------------------------------------------------- def enstate_extend n = [] $data_states.size.times do n.push(0) end @note.gsub(/#{ENSTATE_EXTEND}/) do n[$1.to_i] += $2.to_i end @note.gsub(/#{ENEXT_GOOD}/) { for i in UKRA_008_CUSTOM::GOOD_STATES do n[i] += $1.to_i end } @note.gsub(/#{ENEX_GROUP}/) { if UKRA_008_CUSTOM::ST_GROUP[$1.to_i] for i in UKRA_008_CUSTOM::ST_GROUP[$1.to_i] do n[i] += $2.to_i end end } return n end #------------------------------------------------------------------------- # ○ 受けたステートの効果時間延長 #------------------------------------------------------------------------- def mystate_extend n = [] $data_states.size.times do n.push(0) end @note.gsub(/#{MYSTATE_EXTEND}/) do n[$1.to_i] += $2.to_i end @note.gsub(/#{MYEXT_GOOD}/) { for i in UKRA_008_CUSTOM::GOOD_STATES do n[i] += $1.to_i end } @note.gsub(/#{MYEX_GROUP}/) { if UKRA_008_CUSTOM::ST_GROUP[$1.to_i] for i in UKRA_008_CUSTOM::ST_GROUP[$1.to_i] do n[i] += $2.to_i end end } return n end #------------------------------------------------------------------------- # ○ ステート自動解除なし(正確には持続時間が減少しなくなる) #------------------------------------------------------------------------- def no_autoremove n = false @note.gsub(/#{NOT_AUTOREMOVE}/) do n = true end return n end #------------------------------------------------------------------------- # ○ スタートステート #------------------------------------------------------------------------- def startstates n = [] @note.gsub(/#{STARTSTATE}/) do n.push($1.to_i) end return n.compact end #------------------------------------------------------------------------- # ○ オートステート #------------------------------------------------------------------------- def autostates n = [] @note.gsub(/#{AUTOSTATE}/) do n.push($1.to_i) end return n.compact end #------------------------------------------------------------------------- # ○ 戦闘開始時に自動解除されるステート #------------------------------------------------------------------------- def remove_in_battle n = false @note.gsub(/#{REMOVE_BTSTART}/) do n = true end return n end end class RPG::BaseItem include UKRA_008 end class RPG::State include UKRA_008 end class RPG::Enemy include UKRA_008 end class Game_Battler #------------------------------------------------------------------------ # ○ 装備一覧の仮取得 #------------------------------------------------------------------------ def equips return [] end #------------------------------------------------------------------------ # ○ 基本与ステート延長効果 #------------------------------------------------------------------------ def base_enstate_extend(state_id) return 0 end #------------------------------------------------------------------------ # ○ 基本被ステート延長効果 #------------------------------------------------------------------------ def base_mystate_extend(state_id) return 0 end #-------------------------------------------------------------------------- # ○ ステート自動解除無し の取得 #-------------------------------------------------------------------------- def no_autoremove_state for obj in (equips + states).compact return true if obj.no_autoremove end return false end #-------------------------------------------------------------------------- # ○ 基本スタートステート #-------------------------------------------------------------------------- def base_start_states return [] end #-------------------------------------------------------------------------- # ○ スタートステートの取得 #-------------------------------------------------------------------------- def start_states n = base_start_states for obj in (equips + states).compact n += obj.startstates end n += auto_states return n.uniq.compact end #-------------------------------------------------------------------------- # ○ 基本オートステート #-------------------------------------------------------------------------- def base_auto_states return [] end #-------------------------------------------------------------------------- # ○ オートステートの取得 #-------------------------------------------------------------------------- def auto_states n = base_auto_states for obj in (equips + states).compact n += obj.autostates end return n.uniq.compact end #-------------------------------------------------------------------------- # ● ステートの解除 # state_id : ステート ID #-------------------------------------------------------------------------- alias ukra008_stex_gbt_rs remove_state def remove_state(state_id) return false if auto_states.include?(state_id) ukra008_stex_gbt_rs(state_id) end #-------------------------------------------------------------------------- # ● ステート自然解除 (ターンごとに呼び出し) ☆再定義 #-------------------------------------------------------------------------- def remove_states_auto clear_action_results for i in @state_turns.keys.clone next if no_autoremove_state or auto_states.include?(i) if @state_turns[i] > 0 @state_turns[i] -= 1 elsif rand(100) < $data_states[i].auto_release_prob unless auto_states.include?(i) remove_state(i) @removed_states.push(i) end end end end #------------------------------------------------------------------------ # ○ 与ステート延長効果の計算 #------------------------------------------------------------------------ def calc_enstate_extend(state_id) n = base_enstate_extend(state_id) for obj in (equips + states).compact n += (obj.enstate_extend[state_id] ? obj.enstate_extend[state_id] : 0) end return n end #------------------------------------------------------------------------ # ○ 被ステート延長効果の計算 #------------------------------------------------------------------------ def calc_mystate_extend(state_id) n = base_mystate_extend(state_id) for obj in (equips + states).compact n += (obj.mystate_extend[state_id] ? obj.mystate_extend[state_id] : 0) end return n end #-------------------------------------------------------------------------- # ● ステート変化の適用 # obj : スキル、アイテム、または攻撃者 #-------------------------------------------------------------------------- alias ukra008_stex_bt_asc apply_state_changes def apply_state_changes(obj) ukra008_stex_bt_asc(obj) # 通常の処理 for i in @added_states # 新たに掛かったステートについて state = $data_states[i] # 本来の持続ターン数を取得 next if state.auto_release_prob == 0 # 永続ステートは対象外 my_ex = calc_mystate_extend(i) # 被ステート延長を取得 if @active_battler # 行動バトラーがいるなら与ST延長 en_ex = @active_battler.calc_enstate_extend(i) end @state_turns[i] = [(state.hold_turn+my_ex+en_ex), 0].max # 合算 end end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 # attacker : 攻撃者 #-------------------------------------------------------------------------- alias ukra008_stex_bt_ae attack_effect def attack_effect(attacker) @active_battler = attacker ukra008_stex_bt_ae(attacker) end #-------------------------------------------------------------------------- # ● スキルの効果適用 # user : スキルの使用者 # skill : スキル #-------------------------------------------------------------------------- alias ukra008_stex_bt_se skill_effect def skill_effect(user, skill) @active_battler = user ukra008_stex_bt_se(user, skill) end #-------------------------------------------------------------------------- # ● アイテムの効果適用 # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias ukra008_stex_bt_ie item_effect def item_effect(user, item) @active_battler = user ukra008_stex_bt_ie(user, item) end end class Game_Enemy < Game_Battler #------------------------------------------------------------------------ # ○ 基本与ステート延長効果 #------------------------------------------------------------------------ def base_enstate_extend(state_id) n = (enemy.enstate_extend[state_id] ? enemy.enstate_extend[state_id] : 0) return n end #------------------------------------------------------------------------ # ○ 基本被ステート延長効果 #------------------------------------------------------------------------ def base_mystate_extend(state_id) n = (enemy.mystate_extend[state_id] ? enemy.mystate_extend[state_id] : 0) return n end #-------------------------------------------------------------------------- # ○ 基本スタートステート #-------------------------------------------------------------------------- def base_start_states return enemy.startstates end #-------------------------------------------------------------------------- # ○ 基本オートステート #-------------------------------------------------------------------------- def base_auto_states return enemy.autostates end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 戦闘開始の処理 #-------------------------------------------------------------------------- alias ukra008_st_sbt_pbs process_battle_start def process_battle_start process_add_start_states process_remove_states_on_battle ukra008_st_sbt_pbs end #-------------------------------------------------------------------------- # ○ スタートステートの処理 #-------------------------------------------------------------------------- def process_add_start_states for battler in $game_party.existing_members + $game_troop.existing_members next if battler.start_states.size == 0 for i in battler.start_states do battler.add_state(i) end battler.clear_action_results end end #-------------------------------------------------------------------------- # ○ 戦闘開始時に自動解除されるステートの処理 #-------------------------------------------------------------------------- def process_remove_states_on_battle for battler in $game_party.existing_members + $game_troop.existing_members n = [] for i in battler.states.dup do n.push(i.id) if i.remove_in_battle end for i in n.uniq.compact do battler.remove_state(i) end battler.clear_action_results end end end