#==============================================================================
# ■ 自定义物品/技能使用条件 by Calendar99
#------------------------------------------------------------------------------
# 使用方法
# 物品/技能备注中写<condition>xxx</condition> xxx为条件,支持多行
# condition也可以换成使用条件或者条件
# 用user代表使用者,s[n]和v[n]分别代表n号开关和变量
#
# 例 <condition>user.level > 9</condition> # 使用者等级大于9才能用
# <使用条件>s[1] && v[1] > 5</使用条件> # 1号开关开启且1号变量大于5才能用
# <条件>s[1] && v[1] > 5</条件> # 1号开关开启且1号变量大于5才能用
# 其他用法参考伤害公式
#==============================================================================
class RPG::UsableItem
TAG_CONDITION = "(?:condition|(?:使用)?条件)"
REG_CONDITION = /<#{TAG_CONDITION}>((?:.\s?)+)<\/#{TAG_CONDITION}>/mi
#--------------------------------------------------------------------------
# ● [追加]自定义条件是否满足
#--------------------------------------------------------------------------
def condition_ok?(user)
s = $game_switches
v = $game_variables
self.note =~ REG_CONDITION ? eval($1) : true
end
end
class Game_Actor
#--------------------------------------------------------------------------
# ● [别名修改]技能/物品的应用测试
#--------------------------------------------------------------------------
alias item_test_for_eval_condition item_test
def item_test(user, item)
return false unless item.condition_ok?(self) # self为使用者
item_test_for_eval_condition(user, item)
end
#--------------------------------------------------------------------------
# ● [别名修改]判定技能/使用物品是否可用
#--------------------------------------------------------------------------
alias usable_for_eval_condition usable?
def usable?(item)
return false unless extra_condition_met?(item)
usable_for_eval_condition(item)
end
#--------------------------------------------------------------------------
# ● [追加]判定技能/使用物品是否可用的额外条件
#--------------------------------------------------------------------------
def extra_condition_met?(item)
item.is_a?(RPG::UsableItem) && item.condition_ok?(self) # self为使用者
end
end
class Window_BattleItem < Window_ItemList
#--------------------------------------------------------------------------
# ● [别名修改]查询使用列表中是否含有此物品
#--------------------------------------------------------------------------
alias include_for_eval_condition include?
def include?(item)
original_usable = BattleManager.actor.usable_for_eval_condition(item)
include_for_eval_condition(item) || original_usable
end
#--------------------------------------------------------------------------
# ● [子类覆盖]查询此物品是否可用
#--------------------------------------------------------------------------
def enable?(item)
BattleManager.actor.usable?(item)
end
end