加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
请教XD大,这个脚本会在44行那个方法中发生string错误(已更新基础设置为1月1日最新的),@taroxd
#-------------------------------------------------------------------------- # ● require Taroxd基础设置 # 设置技能、物品的使用目标。 #-------------------------------------------------------------------------- # # 使用方法: # 在技能/道具的备注栏写下类似于这样的备注。 # 备注后,无视技能效果范围中“单体”或“全体”的设置。 # 无人符合条件时,保持原来的使用目标。 # # 例1:存活队员中 hp 最小者。 # <target> # select: alive? # min_by: hp_rate # </target> # # 例2:所有 hp 大于 50 的队员 # <target> # select: hp > 50 # </target> # # 例3:随机指定两个存活队员中 hp 小于一半的人。 # <target> # select: alive? && hp_rate < 0.5 # sample(2) # </target> # #-------------------------------------------------------------------------- # 解析备注栏中的备注 class << Taroxd::TargetExt = Object.new RE_OUTER = /<target>(.*?)<\/target>/mi # 整体设置 RE_INNER = /(\S+) *(?:: *(.+))?/ # 每一行的设置 def parse_note(note) note =~ RE_OUTER ? parse_settings($1.scan(RE_INNER)) : false end # lambda do |members| # members.select { |battler| battler.instance_eval { # alive? && hp_rate < 0.5 } }.sample(2) # end def parse_settings(settings) eval %( lambda do |members| members#{extract_settings(settings)} end ) end def extract_settings(settings) settings.map { |method, body| if body ".#{method} { |battler| battler.instance_eval { #{body} } }" else ".#{method}" end }.join end end class RPG::UsableItem < RPG::BaseItem # 缓存生成的 lambda def get_target return @get_target unless @get_target.nil? @get_target = Taroxd::TargetExt.parse_note(@note) end # 是否需要选择目标 def_unless :need_selection?, :get_target end class Game_Action # 返回计算结果或原来的值 def targets_for_eval(unit, old) get_target = item.get_target return old.call unless get_target targets = get_target.call(unit.members) return old.call unless targets targets = Array(targets) targets.empty? ? old.call : targets end # 目标为敌人 def_chain :targets_for_opponents do |old| targets_for_eval(opponents_unit, old) end # 目标为队友 def_chain :targets_for_friends do |old| targets_for_eval(friends_unit, old) end end
#--------------------------------------------------------------------------
# ● require Taroxd基础设置
# 设置技能、物品的使用目标。
#--------------------------------------------------------------------------
#
# 使用方法:
# 在技能/道具的备注栏写下类似于这样的备注。
# 备注后,无视技能效果范围中“单体”或“全体”的设置。
# 无人符合条件时,保持原来的使用目标。
#
# 例1:存活队员中 hp 最小者。
# <target>
# select: alive?
# min_by: hp_rate
# </target>
#
# 例2:所有 hp 大于 50 的队员
# <target>
# select: hp > 50
# </target>
#
# 例3:随机指定两个存活队员中 hp 小于一半的人。
# <target>
# select: alive? && hp_rate < 0.5
# sample(2)
# </target>
#
#--------------------------------------------------------------------------
# 解析备注栏中的备注
class << Taroxd::TargetExt = Object.new
RE_OUTER = /<target>(.*?)<\/target>/mi # 整体设置
RE_INNER = /(\S+) *(?:: *(.+))?/ # 每一行的设置
def parse_note(note)
note =~ RE_OUTER ? parse_settings($1.scan(RE_INNER)) : false
end
# lambda do |members|
# members.select { |battler| battler.instance_eval {
# alive? && hp_rate < 0.5 } }.sample(2)
# end
def parse_settings(settings)
eval %(
lambda do |members|
members#{extract_settings(settings)}
end
)
end
def extract_settings(settings)
settings.map { |method, body|
if body
".#{method} { |battler| battler.instance_eval { #{body} } }"
else
".#{method}"
end
}.join
end
end
class RPG::UsableItem < RPG::BaseItem
# 缓存生成的 lambda
def get_target
return @get_target unless @get_target.nil?
@get_target = Taroxd::TargetExt.parse_note(@note)
end
# 是否需要选择目标
def_unless :need_selection?, :get_target
end
class Game_Action
# 返回计算结果或原来的值
def targets_for_eval(unit, old)
get_target = item.get_target
return old.call unless get_target
targets = get_target.call(unit.members)
return old.call unless targets
targets = Array(targets)
targets.empty? ? old.call : targets
end
# 目标为敌人
def_chain :targets_for_opponents do |old|
targets_for_eval(opponents_unit, old)
end
# 目标为队友
def_chain :targets_for_friends do |old|
targets_for_eval(friends_unit, old)
end
end
|