159 lines
No EOL
6.5 KiB
Ruby
159 lines
No EOL
6.5 KiB
Ruby
#==============================================================================
|
|
# ■身代わり拡張 for RGSS3 Ver1.00-β6
|
|
# □作成者 kure
|
|
#===============================================================================
|
|
|
|
#==============================================================================
|
|
# ■ RPG::BaseItem
|
|
#==============================================================================
|
|
class RPG::BaseItem
|
|
#--------------------------------------------------------------------------
|
|
# ● 特徴の取得
|
|
#--------------------------------------------------------------------------
|
|
def features
|
|
features = @features.clone
|
|
|
|
#通常身代わり
|
|
@note.match(/<身代わり発動\s?(\d+)%\s?>/)
|
|
features.push(RPG::BaseItem::Feature.new(62, 4, $1.to_i)) if $1
|
|
|
|
|
|
@note.match(/<完全身代わり発動\s?(\d+)%\s?>/)
|
|
features.push(RPG::BaseItem::Feature.new(62, 5, $1.to_i)) if $1
|
|
|
|
return features
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 身代わり対象外の取得
|
|
#--------------------------------------------------------------------------
|
|
def not_substitute_obj
|
|
return false unless @note
|
|
return true if @note.include?("<身代わり対象外>")
|
|
return false
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 身代わり対象の取得
|
|
#--------------------------------------------------------------------------
|
|
def force_substitute_obj
|
|
return false unless @note
|
|
return true if @note.include?("<身代わり対象>")
|
|
return false
|
|
end
|
|
end
|
|
|
|
#==============================================================================
|
|
# ■ Game_BattlerBase
|
|
#==============================================================================
|
|
class Game_BattlerBase
|
|
#--------------------------------------------------------------------------
|
|
# ● 定数(特殊フラグ)
|
|
#--------------------------------------------------------------------------
|
|
FLAG_ID_ADVANCE_SUBSTITUTE = 4 # 上級身代わりフラグ
|
|
FLAG_ID_ADVANCE_SUBSTITUTE_P = 5 # 完全身代わりフラグ
|
|
#--------------------------------------------------------------------------
|
|
# ● 上級身代わりの判定(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def substitute_ex(per)
|
|
special_flag_ex(per) && movable?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 完全身代わりの判定(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def substitute_ex2(per)
|
|
special_flag_ex2(per) && movable?
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 特殊フラグ判定(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def special_flag_ex(per)
|
|
features(FEATURE_SPECIAL_FLAG).any? {|ft| ft.data_id == 4 && ft.value >= per}
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 特殊フラグ判定(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def special_flag_ex2(per)
|
|
features(FEATURE_SPECIAL_FLAG).any? {|ft| ft.data_id == 5 && ft.value >= per}
|
|
end
|
|
end
|
|
|
|
#==============================================================================
|
|
# ■ Game_Unit
|
|
#==============================================================================
|
|
class Game_Unit
|
|
#--------------------------------------------------------------------------
|
|
# ● 上級身代わりバトラーの取得(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def substitute_battler_ex(target,per)
|
|
members.find {|member| member.substitute_ex(per) && member != target}
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 完全身代わりバトラーの取得(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def substitute_battler_ex2(target,per)
|
|
members.find {|member| member.substitute_ex2(per) && member != target}
|
|
end
|
|
end
|
|
|
|
#==============================================================================
|
|
# ■ Scene_Battle
|
|
#==============================================================================
|
|
class Scene_Battle < Scene_Base
|
|
#--------------------------------------------------------------------------
|
|
# ● 身代わりの適用
|
|
#--------------------------------------------------------------------------
|
|
alias k_before_apply_substitute apply_substitute
|
|
def apply_substitute(target, item)
|
|
#割合取得
|
|
per = target.hp * 100 / target.mhp
|
|
|
|
if $kure_base_script[:base_A]
|
|
#身代わり発動
|
|
if check_substitute_ex(target, item)
|
|
substitute = target.substitute_unit.select {|member| member.movable? }
|
|
if substitute[0] && target != substitute[0] && item.id != target.guard_skill_id
|
|
@log_window.display_substitute(substitute[0], target)
|
|
return substitute[0]
|
|
end
|
|
end
|
|
end
|
|
|
|
#上級身代わり
|
|
if check_substitute_ex(target, item)
|
|
substitute = target.friends_unit.substitute_battler_ex(target,per)
|
|
if substitute && target != substitute
|
|
@log_window.display_substitute(substitute, target)
|
|
return substitute
|
|
end
|
|
end
|
|
|
|
#完全身代わり
|
|
if check_substitute_ex2(target, item)
|
|
substitute = target.friends_unit.substitute_battler_ex2(target,per)
|
|
if substitute && target != substitute
|
|
@log_window.display_substitute(substitute, target)
|
|
return substitute
|
|
end
|
|
end
|
|
|
|
k_before_apply_substitute(target, item)
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 上級身代わり条件チェック(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def check_substitute_ex(target, item)
|
|
return false unless item
|
|
return true if item.force_substitute_obj
|
|
return false if item.not_substitute_obj
|
|
return false if item.certain?
|
|
return true
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# ● 完全身代わり条件チェック(追加定義)
|
|
#--------------------------------------------------------------------------
|
|
def check_substitute_ex2(target, item)
|
|
return false unless item
|
|
return true if item.force_substitute_obj
|
|
return false if item.not_substitute_obj
|
|
return true
|
|
end
|
|
end |