#==============================================================================
# ■ 反手状态 by Calendar99
#------------------------------------------------------------------------------
# 20190708 更新 *
# Bug修复:
# 1 修复了友军释放技能附加反手状态时,友军受到反手状态的影响问题
# 2 修复了敌人因反手状态死亡时,战斗图不消失的问题
#------------------------------------------------------------------------------
# 在状态备注中写<反手状态 id,rate>
# 则拥有此状态的单位在受到攻击时,令攻击者附加id号状态,附加概率为rate
#
# 比如<反手状态 1, 10%>,则攻击者有10%概率直接死亡
#
# 若写成<反手状态 id>,则rate自动视为100%
#==============================================================================
Counter_State = Struct.new(:id, :rate)
class RPG::State
def counter_state?
!self.counter_states.empty?
end
def counter_states
sig = "(?:counter_state|反手状态)"
int = "[ :=]*"
cap = "(\\d+)(?:,[ ]*(\\d+)%?)?" # 状态id 概率(单位:百分比整数)
reg = /<#{sig}#{int}#{cap}>/
md = self.note.match(reg)
states = []
if md
loop do
states << Counter_State.new(md[1].to_i, md[2].nil? ? 100 : md[2].to_i)
note = md.post_match
md = note.match(reg)
break if !md
end
end
return states
end
end
class Game_Battler
#--------------------------------------------------------------------------
# ● [别名修改]对技能/物品使用者的效果
#--------------------------------------------------------------------------
alias item_user_effect_for_counter_state item_user_effect
def item_user_effect(user, item)
item_user_effect_for_counter_state(user, item) # 原方法
return if ally_with?(user) # 不对友军施加反手状态 0708
if self.states.any?{|s| s.counter_state?} # 存在反手状态
counter_states = self.states.select{|s| s.counter_state?} # 所有的反手状态
counter_states.each do |state|
state.counter_states.each do |s| # 每个反手状态的全部反手附加的状态
chance = s.rate / 100.0 # 自身概率
chance *= user.state_rate(s.id) # 攻击者抗性
chance *= user.luk_effect_rate(self) # 自身幸运影响程度
if rand < chance
user.add_state(s.id)
user.perform_collapse_effect if s.id == user.death_state_id # 死亡演出 0708
end
end
end
end
end
#--------------------------------------------------------------------------
# ● [追加]是友军? - 0708
#--------------------------------------------------------------------------
def ally_with?(battler)
(self.actor? && battler.actor?) || (self.enemy? && battler.enemy?)
end
end