#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================
# 基础脚本▼▲▼ XRXS19. 特殊効果詰め合わせ DamageEX ver.2 ▼▲▼ built 220920
# by 桜雅 在土 (基本) Tetra-Z (修正) [url]http://scriptself.jpn.org/x/XRXS19.htm[/url]
#==============================================================================
# ▼▲▼ 战斗特殊效果属性 DamageEX - Plus × RTAB ▼▲▼
#
# 适用环境:RTAB Ver 1.16
#
# by SixRice (Plus × RTAB改造) Ver.1.03 2006/8/18
# 从1.03版开始记录每次更新。
#==============================================================================
# 伤害计算流程:
# 1 基础伤害计算 (Game Battler)
# 2 忽视躲闪判定 (IGNORE_EVADE)
# 3 修正基础伤害 (HP_RATE,SP_RATE,CRITICAL_HIT,ADD_VARIANCE)
# 4 固定伤害(取消基础) (FIXDAMAGE)
# 5 追加伤害计算 (追加伤害效果类)
# -> 基础伤害(或固定伤害)+追加伤害
# = 总伤害
# 6 修正总伤害 (HP_DAMAGE,SP_DAMAGE)
# -> 最终伤害
# 7 收招修正使用者的HP/SP (HP_CORRECT,SP_CORRECT)(1.03)
# 8 根据最终伤害修正使用者的HP/SP (HP_DRAIN,SP_DRAIN)
#------------------------------------------------------------------------------
module XRXS19
#------------------------------------------------------------------------------
# 一:特殊伤害效果类的属性名称设定
#------------------------------------------------------------------------------
# 提示:本类属性名称后请添加自定义数值,然后才会生效。(数据库)
#------------------------------------------------------------------------------
# 提示:本类属性请设为“不计算属性有效度”(XRXS38. 属性修正计算数限制)。
#------------------------------------------------------------------------------
# 提示:本类属性中如果存在同属性,效果也叠加。
#
# 举例:一个东西同时包含HP吸收50%,HP吸收25%,实际效果为HP吸收75%.
#------------------------------------------------------------------------------
AT_DAMAGE = "AT伤害" # 「修正目标的AT值(行动值)」(1.03)
HP_DAMAGE = "HP伤害" # 「将本次造成的总伤害的x%修正为HP伤害」
SP_DAMAGE = "SP伤害" # 「将本次造成的总伤害的x%修正为SP伤害」
HP_DRAIN = "HP吸收" # 「根据本次最终伤害的x%修正使用者的HP」
SP_DRAIN = "SP吸收" # 「根据本次最终伤害的x%修正使用者的SP」
HP_RATE = "现HP威力" # 「根据使用者HP/MAXHP修正本次基础伤害」
SP_RATE = "现SP威力" # 「根据使用者SP/MAXSP修正本次基础伤害」
CRITICAL_HIT = "必杀" # 「会心一击」 (武器效果通用化)
IGNORE_EVADE = "忽视躲闪" # 「忽视躲闪」 (特技效果武器化)
ADD_VARIANCE = "分散度" # 「追加分散度」 (特技效果武器化)
FIXDAMAGE = "固定伤害" # 「固定伤害值」 (特技效果武器化)
#------------------------------------------------------------------------------
# 提示:本类中“固定伤害值”不能和“会心一击”、“追加分散度”叠加;
# 其余效果均可叠加。
#------------------------------------------------------------------------------
AREA_EXTEND = "敌方全体" # 「敌方全体」属性名2
AREA_ACTOR = "己方单体" # 「己方单体」属性名3
AREA_ACTOR_ALL = "己方全体" # 「己方全体」属性名4
AREA_SELF = "使用者" # 「 使用者 」属性名7
AREA_WHOLE = "全域化" # 「 全域化 」属性名8
AREA_ENEMY_RAND = "敌方随机" # 「敌方随机」属性名9
AREA_ACTOR_RAND = "己方随机" # 「己方随机」属性名10
AREA_ALL_RAND = "对象随机" # 「对象随机」属性名11
SELF_INCLUSION = "诸刃" # 「 诸刃 」属性名
SELF_EXCLUSION = "自身以外" # 「自身以外」(与使用者,己方单体叠加无效)
#------------------------------------------------------------------------------
# 提示:「诸刃」与
# 「使用者」,「己方单体」,「己方全体」,「己方随机」,「对象随机」叠加无效。
#------------------------------------------------------------------------------
P_STATE = "发动状态P" # 「行动时附加自身状态」属性名
M_STATE = "发动状态M" # 「行动时解除自身状态」属性名
HP_CORRECT = "收招修正H" # 「收招时修正使用者HP」属性名(1.03)
SP_CORRECT = "收招修正S" # 「收招时修正使用者SP」属性名(1.03)
#------------------------------------------------------------------------------
# 提示:在这个版本的战斗特殊效果属性中,
# 除了"会心一击" 、"忽视躲闪"、"追加分散度" 这三个效果以外,
# 其他的效果都支持负数,也就是逆转效果。
#
# 举例:想设置一个“敌我皆伤”的特技,只要附带HP吸收属性,效果设为负数就OK了。
#
# 举例:如果把"HP伤害负数" + "作用范围己方"设置为武器属性,
# 就可以设置出回复己方HP的BT武器来。
#
# 更多创意想法等你来发挥!!
#------------------------------------------------------------------------------
# 二:追加伤害效果类的属性名称设定
#------------------------------------------------------------------------------
# 本类采用的英文单词缩写
# NOW(N) = 当前 ;MAX(M) = 最大;DIF(D) = 差值 ;
# HP(H) = 生命 ;SP(S) = 精力 ;
# TA(T) = target = 目标方;US(U) = user = 使用者 。
#------------------------------------------------------------------------------
FIXDAMAGE_NOWHPTA = "NHT" # 「目标方当前HP比例」属性名
FIXDAMAGE_MAXHPTA = "MHT" # 「目标方最大HP比例」属性名
FIXDAMAGE_DIFHPTA = "DHT" # 「目标方HP差值比例」属性名
FIXDAMAGE_NOWHPUS = "NHU" # 「使用者当前HP比例」属性名
FIXDAMAGE_MAXHPUS = "MHU" # 「使用者最大HP比例」属性名
FIXDAMAGE_DIFHPUS = "DHU" # 「使用者HP差值比例」属性名
FIXDAMAGE_NOWSPTA = "NST" # 「目标方当前SP比例」属性名
FIXDAMAGE_MAXSPTA = "MST" # 「目标方最大SP比例」属性名
FIXDAMAGE_DIFSPTA = "DST" # 「目标方SP差值比例」属性名
FIXDAMAGE_NOWSPUS = "NSU" # 「使用者当前SP比例」属性名
FIXDAMAGE_MAXSPUS = "MSU" # 「使用者最大SP比例」属性名
FIXDAMAGE_DIFSPUS = "DSU" # 「使用者SP差值比例」属性名
#------------------------------------------------------------------------------
# 提示:本类所有效果均不能互相叠加,具有唯一性;
# 若特技属性中存在多个本类效果,则取最前面一个效果。
#------------------------------------------------------------------------------
# 提示:特技附加本类属性的情况下,设特技的威力(pow)为比例基数,
# 武器附加本类属性的情况下,设武器攻击力(atk)为比例基数,
# 因此比例基数请通过数据库来设定。
#------------------------------------------------------------------------------
# 提示:本类所有效果均为普通伤害计算之后的追加伤害;
# 本类所有效果“独立计算属性有效度”,不与其他属性有效度进行混合运算。
#------------------------------------------------------------------------------
# 举例1:某特技属性附加"NHT" ,威力为20,其实际效果为:
# 造成 [目标方][当前][HP][20%] 的等量伤害。
#------------------------------------------------------------------------------
# 举例2:由于威力(power)这个值可以设为负数,
# 因此MHT这个属性也可用于制作比例回复HP的特技效果。
#------------------------------------------------------------------------------
end
#==============================================================================
# ■ Game_BattleAction
#==============================================================================
class Game_BattleAction
attr_accessor :at_damage # 「AT伤害值」 (Numeric)(1.03)
attr_accessor :hp_damage # 「HP伤害率」 (Numeric)
attr_accessor :sp_damage # 「SP伤害率」 (Numeric)
attr_accessor :hp_drain # 「HP吸收率」 (Numeric)
attr_accessor :sp_drain # 「SP吸收率」 (Numeric)
attr_accessor :hp_rate # 「现HP威力」 (true/false)
attr_accessor :sp_rate # 「现SP威力」 (true/false)
attr_accessor :critical_hit # 「会心一击」 (Numeric)
attr_accessor :ignore_evade # 「忽视躲闪」 (true/false)
attr_accessor :add_variance # 「追加分散度」 (Numeric)
attr_accessor :fix_damage # 「固定伤害值」 (Numeric)
attr_accessor :special_damage_kind # 「追加伤害类」 (Numeric)
attr_accessor :scope_force # 「对象强制值」 (Numeric)
attr_accessor :self_inclusion # 「诸刃」 (true/false)
attr_accessor :self_exclusion # 「自身以外」 (true/false)
attr_accessor :p_state # 「行动时附加自身状态」(Numeric)
attr_accessor :m_state # 「行动时解除自身状态」(Numeric)
attr_accessor :hp_correct # 「收招时修正使用者HP」(Numeric)(1.03)
attr_accessor :sp_correct # 「收招时修正使用者SP」(Numeric)(1.03)
def at_damage
return @at_damage.nil? ? 0 : @at_damage
end
#--------------------------------------------------------------------------
# ● clear
#--------------------------------------------------------------------------
alias xrxs19_clear clear
def clear
# recall
xrxs19_clear
# 初始化特殊效果
initialize_xrxs19_special_effect
end
#--------------------------------------------------------------------------
# ○ 初始化特殊效果
#--------------------------------------------------------------------------
def initialize_xrxs19_special_effect
self.at_damage = 0#(1.03)
self.hp_damage = 0
self.sp_damage = 0
self.hp_drain = 0
self.sp_drain = 0
self.hp_rate = false
self.sp_rate = false
self.critical_hit = 0
self.ignore_evade = false
self.add_variance = 0
self.fix_damage = 0
self.special_damage_kind = 0
self.p_state = 0
self.m_state = 0
self.hp_correct = 0#(1.03)
self.sp_correct = 0#(1.03)
end
#--------------------------------------------------------------------------
# ○ 特殊效果设置
#--------------------------------------------------------------------------
def set_xrxs19_special_effect(set)
# AT伤害值(数值)(1.03)
self.at_damage = XRXS.element_amount(set, XRXS19::AT_DAMAGE)
# HP/SP伤害率(数值%)
self.hp_damage = XRXS.element_percent(set, XRXS19::HP_DAMAGE)
self.sp_damage = XRXS.element_percent(set, XRXS19::SP_DAMAGE)
# HP/SP吸收率(数值%)
self.hp_drain = XRXS.element_percent(set, XRXS19::HP_DRAIN)
self.sp_drain = XRXS.element_percent(set, XRXS19::SP_DRAIN)
# 现HP/SP威力 (true/false)
self.hp_rate = XRXS.element_include?(set, XRXS19::HP_RATE)
self.sp_rate = XRXS.element_include?(set, XRXS19::SP_RATE)
# 会心一击率(数值%)
returnar = XRXS.element_check(set, XRXS19::CRITICAL_HIT)
percent = returnar[0] ? (returnar[2] == 0 ? 100 : returnar[2]) : 0
self.critical_hit = percent
# 忽视躲闪 (true/false)
self.ignore_evade = XRXS.element_include?(set, XRXS19::IGNORE_EVADE)
# 追加分散度(数值)
self.add_variance = XRXS.element_amount(set, XRXS19::ADD_VARIANCE)
# 固定伤害值(数值)
self.fix_damage = XRXS.element_amount(set, XRXS19::FIXDAMAGE)
# 追加伤害类
self.special_damage_kind =
XRXS.element_include?(set, XRXS19::FIXDAMAGE_NOWHPTA) ? 1 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_MAXHPTA) ? 2 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_DIFHPTA) ? 3 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_NOWHPUS) ? 4 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_MAXHPUS) ? 5 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_DIFHPUS) ? 6 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_NOWSPTA) ? 7 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_MAXSPTA) ? 8 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_DIFSPTA) ? 9 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_NOWSPUS) ? 10 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_MAXSPUS) ? 11 :
XRXS.element_include?(set, XRXS19::FIXDAMAGE_DIFSPUS) ? 12 :
0
# 行动时附加/解除自身状态(ID)
self.p_state = XRXS.element_amount(set, XRXS19::P_STATE)
self.m_state = XRXS.element_amount(set, XRXS19::M_STATE)
# 收招时修正使用者HP/SP(数值)(1.03)
self.hp_correct = XRXS.element_amount(set, XRXS19::HP_CORRECT)
self.sp_correct = XRXS.element_amount(set, XRXS19::SP_CORRECT)
end
#--------------------------------------------------------------------------
# ○ 特殊效果clear
#--------------------------------------------------------------------------
def clear_xrxs19_special_effect
self.at_damage = nil#(1.03)
self.hp_damage = nil
self.sp_damage = nil
self.hp_drain = nil
self.sp_drain = nil
self.hp_rate = false
self.sp_rate = false
self.critical_hit = nil
self.ignore_evade = false
self.add_variance = nil
self.fix_damage = nil
self.special_damage_kind = nil
self.scope_force = 0
self.self_exclusion = false
self.self_inclusion = false
self.p_state = nil
self.m_state = nil
self.hp_correct = 0#(1.03)
self.sp_correct = 0#(1.03)
end
#--------------------------------------------------------------------------
# ○ 无效化特殊效果
#--------------------------------------------------------------------------
def nillize_xrxs19_special_effect
self.scope_force = nil
self.self_inclusion = nil
self.self_exclusion = nil
end
end
#==============================================================================
# □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ○ 公开实例变量
#--------------------------------------------------------------------------
attr_accessor :maxat # 最大AT#(1.03)
attr_writer :ignore_evade #(True为忽视对方躲闪判定)
attr_writer :hp_rate #(True为基础伤害根据HP/MAXHP比例修正)
attr_writer :sp_rate #(True为基础伤害根据SP/MAXSP比例修正)
#--------------------------------------------------------------------------
# ○特殊范围效果设定
#--------------------------------------------------------------------------
def set_xrxs19_special_scope(set)
# 范围强制值
self.current_action.scope_force =
XRXS.element_include?(set, XRXS19::AREA_EXTEND) ? 2 :
XRXS.element_include?(set, XRXS19::AREA_ACTOR) ? 3 :
XRXS.element_include?(set, XRXS19::AREA_ACTOR_ALL) ? 4 :
XRXS.element_include?(set, XRXS19::AREA_SELF) ? 7 :
XRXS.element_include?(set, XRXS19::AREA_WHOLE) ? 8 :
XRXS.element_include?(set, XRXS19::AREA_ENEMY_RAND) ? 9 :
XRXS.element_include?(set, XRXS19::AREA_ACTOR_RAND) ? 10 :
XRXS.element_include?(set, XRXS19::AREA_ALL_RAND) ? 11 :
0
# 诸刃
self.current_action.self_inclusion = XRXS.element_include?(set, XRXS19::SELF_INCLUSION)
# 自身以外
self.current_action.self_exclusion = XRXS.element_include?(set, XRXS19::SELF_EXCLUSION)
end
#--------------------------------------------------------------------------
# ● 新定义状态变化 (+) 发动状态适用
#--------------------------------------------------------------------------
def pp_state(battler, i)
# 清除有效标志
effective = false
# 无法防御本状态的情况下
unless self.state_guard?(i)
# 这个状态如果不是 full 的话就设置有效标志
effective |= self.state_full?(i) == false
# 状态为 [不能抵抗] 的情况下
if $data_states[i].nonresistance
# 设置状态变化标志
@state_changed = true
# 附加状态
self.state_p[battler].push(i)
# 这个状态不是 full 的情况下
elsif self.state_full?(i) == false
# 将状态的有效度变换为概率、与随机数比较
if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]]
# 设置状态变化标志
@state_changed = true
# ステートを付加
self.add_state(i)
end
end
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 可以使用特技的判定
# skill_id : 特技 ID
#--------------------------------------------------------------------------
alias xrxs19_skill_can_use? skill_can_use?
def skill_can_use?(skill_id)
# 获取特技
[url=home.php?mod=space&uid=260100]@skill[/url] = $data_skills[skill_id]
# 范围计算
set_xrxs19_special_scope(self.skill_element_set(@skill))
$data_skills[skill_id].scope = self.current_action.scope_force if self.current_action.scope_force > 0
# 范围是「自身以外」的情况
if self.current_action.self_exclusion
# 获取战斗者
battlers = (self.is_a?(Game_Actor) ? $game_party.actors : $game_troop.enemies)
# 范围的分歧
case $data_skills[skill_id].scope
when 3,4,10
# 获取生存的战斗者数量
n = 0
battlers.each {|battler| n += 1 unless battler.dead?}
when 5,6
# 获取战斗者总数
n = battlers.size
else
n = 2
end
# 对象不存在的情况
return false if n <= 1
end
# recall
return xrxs19_skill_can_use?(skill_id)
end
#--------------------------------------------------------------------------
# ● 判断状态 [无法回避攻击]
#--------------------------------------------------------------------------
alias xrxs19_cant_evade? cant_evade?
def cant_evade?
return true if @ignore_evade
return xrxs19_cant_evade?
end
#--------------------------------------------------------------------------
# ○ 特殊效果设置
#--------------------------------------------------------------------------
def set_xrxs19_special_effect(set)
self.current_action.set_xrxs19_special_effect(set)
end
#--------------------------------------------------------------------------
# ● 应用通常攻击效果
# attacker : 攻击者 (battler)
#--------------------------------------------------------------------------
alias xrxs19_attack_effect attack_effect
def attack_effect(attacker)
# 特殊效果:忽视躲闪
if attacker.current_action.ignore_evade
self.ignore_evade = true
end
return xrxs19_attack_effect(attacker)
end
#--------------------------------------------------------------------------
# ● 应用特技效果
# user : 特技的使用者 (battler)
# skill : 特技
#--------------------------------------------------------------------------
alias xrxs19_skill_effect skill_effect
def skill_effect(user, skill)
# 特殊效果:忽视躲闪
if user.current_action.ignore_evade
self.ignore_evade = true
end
return xrxs19_skill_effect(user, skill)
end
#------------------------------------------------------------------------------
# ○ 伤害计算(属于对基本伤害的再处理)
#------------------------------------------------------------------------------
# ● 基础伤害计算请在“应用通常攻击效果” 和“应用特技效果”部分定义
#------------------------------------------------------------------------------
alias xrxs19co_x1_damage_effect damage_effect
def damage_effect(battler, item, skill)
# recall
if item == 2 or self.damage[battler].class == String
return xrxs19co_x1_damage_effect(battler, item)
end
# 初始化
battler.current_action.at_damage = 0 if battler.current_action.at_damage.nil?#(1.03)
battler.current_action.hp_damage = 0 if battler.current_action.hp_damage.nil?
battler.current_action.sp_damage = 0 if battler.current_action.sp_damage.nil?
battler.current_action.hp_drain = 0 if battler.current_action.hp_drain.nil?
battler.current_action.sp_drain = 0 if battler.current_action.sp_drain.nil?
battler.current_action.critical_hit = 0 if battler.current_action.critical_hit.nil?
battler.current_action.add_variance = 0 if battler.current_action.add_variance.nil?
battler.current_action.fix_damage = 0 if battler.current_action.fix_damage.nil?
battler.current_action.special_damage_kind = 0 if battler.current_action.special_damage_kind.nil?
battler.current_action.p_state = 0 if battler.current_action.p_state.nil?
battler.current_action.m_state = 0 if battler.current_action.m_state.nil?
battler.current_action.hp_correct = 0 if battler.current_action.hp_correct.nil?#(1.03)
battler.current_action.sp_correct = 0 if battler.current_action.sp_correct.nil?#(1.03)
# 解除忽视躲闪
self.ignore_evade = false
# 基本伤害
self.damage[battler] = self.damage[battler].to_i
# 特殊效果:追加分散度
if battler.current_action.add_variance > 0 and self.damage[battler].abs > 0
amp = [self.damage[battler].abs * battler.current_action.add_variance / 100, 1].max
self.damage[battler] += rand(amp+1) + rand(amp+1) - amp
end
# 特殊效果:现HP威力
if battler.current_action.hp_rate
self.damage[battler] = self.damage[battler] * battler.hp / battler.maxhp
end
# 特殊效果:现SP威力
if battler.current_action.sp_rate
self.damage[battler] = self.damage[battler] * battler.sp / battler.maxsp
end
# 特殊效果:会心一击
if battler.current_action.critical_hit > 0
if self.critical[battler]
self.critical[battler] = false
self.damage[battler] /= 2
end
# critical重新判定
if rand(100) < battler.current_action.critical_hit
self.critical[battler] = true
self.damage[battler] *= 2
end
end
# 特殊效果:固定伤害
if battler.current_action.fix_damage != 0
self.damage[battler] = battler.current_action.fix_damage.to_i
self.critical[battler] = false
end
#------------------------------------------------------------------------------
# 特殊效果:追加伤害效果类计算
#------------------------------------------------------------------------------
case battler.current_action.special_damage_kind
when 1# 「目标方当前HP比例」
if skill != nil
self.damage[battler] += self.hp * skill.power / 100
else
self.damage[battler] += self.hp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_NOWHPTA))/100
when 2# 「目标方最大HP比例」
if skill != nil
self.damage[battler] += self.maxhp * skill.power / 100
else
self.damage[battler] += self.maxhp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_MAXHPTA))/100
when 3# 「目标方HP差值比例」
if skill != nil
self.damage[battler] += (self.maxhp - self.hp) * skill.power / 100
else
self.damage[battler] += (self.maxhp - self.hp) * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_DIFHPTA))/100
when 4# 「使用者当前HP比例」
if skill != nil
self.damage[battler] += battler.hp * skill.power / 100
else
self.damage[battler] += battler.hp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_NOWHPUS))/100
when 5# 「使用者最大HP比例」
if skill != nil
self.damage[battler] += battler.maxhp * skill.power / 100
else
self.damage[battler] += battler.maxhp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_MAXHPUS))/100
when 6# 「使用者HP差值比例」
if skill != nil
self.damage[battler] += (battler.maxhp - battler.hp) * skill.power / 100
else
self.damage[battler] += (battler.maxhp - battler.hp) * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_DIFHPUS))/100
when 7# 「目标方当前SP比例」
if skill != nil
self.damage[battler] += self.sp * skill.power / 100
else
self.damage[battler] += self.sp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_NOWSPTA))/100
when 8# 「目标方最大SP比例」
if skill != nil
self.damage[battler] += self.maxsp * skill.power / 100
else
self.damage[battler] += self.maxsp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_MAXSPTA))/100
when 9# 「目标方SP差值比例」
if skill != nil
self.damage[battler] += (self.maxsp - self.sp) * skill.power / 100
else
self.damage[battler] += (self.maxsp - self.sp) * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_DIFSPTA))/100
when 10# 「使用者当前SP比例」
if skill != nil
self.damage[battler] += battler.sp * skill.power / 100
else
self.damage[battler] += battler.sp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_NOWSPUS))/100
when 11# 「使用者最大SP比例」
if skill != nil
self.damage[battler] += battler.maxsp * skill.power / 100
else
self.damage[battler] += battler.maxsp * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_MAXSPUS))/100
when 12# 「使用者SP差值比例」
if skill != nil
self.damage[battler] += (battler.maxsp - battler.sp) * skill.power / 100
else
self.damage[battler] += (battler.maxsp - battler.sp) * battler.atk / 10000
end
self.damage[battler] *=self.element_rate(($data_system.elements).index(XRXS19::FIXDAMAGE_DIFSPUS))/100
end
#------------------------------------------------------------------------------
# 特殊效果:AT伤害值(1.03)
if battler.current_action.at_damage != 0
self.at -= battler.current_action.at_damage * self.maxat / 100
self.at = 0 if self.at < 0
self.atp = 100 * self.at / self.maxat
end
# 特殊效果:HP伤害率
if battler.current_action.hp_damage != 0 and battler.current_action.sp_damage == 0
self.damage[battler] = self.damage[battler] * battler.current_action.hp_damage / 100
end
# 特殊效果:SP伤害率
if battler.current_action.sp_damage != 0
self.damage_sp[battler] = self.damage[battler] * battler.current_action.sp_damage / 100
self.damage_sp[battler] = self.sp if self.damage_sp[battler] > self.sp
self.damage_sp[battler] = "" if self.sp == 0
self.sp -= self.damage_sp[battler] if self.damage_sp[battler] != ""
if battler.current_action.hp_damage != 0 # 特殊效果:HP伤害率
self.damage[battler] = self.damage[battler] * battler.current_action.hp_damage / 100
else
self.damage[battler] = ""
end
end
#------------------------------------------------------------------------------
# 特殊效果:收招修正(1.03)
battler.hp = battler.current_action.hp_correct.to_i if battler.current_action.hp_correct != 0
battler.sp = battler.current_action.sp_correct.to_i if battler.current_action.sp_correct != 0
#------------------------------------------------------------------------------
# 特殊效果:HP吸收
if battler.current_action.hp_drain != 0
battler.damage[battler] = 0 if battler.damage[battler] == nil
drain_point = -1 * self.damage[battler].to_i * battler.current_action.hp_drain / 100
battler.damage[battler] += drain_point
battler.hp -= drain_point
if battler.damage[battler] == 0
battler.damage[battler] = nil
end
end
# 特殊效果:SP吸收
if battler.current_action.sp_drain != 0
battler.damage_sp[battler] = 0 if battler.damage_sp[battler] == nil
drain_point = -1 * self.damage_sp[battler].to_i * battler.current_action.sp_drain / 100
battler.damage_sp[battler] += drain_point
battler.sp -= drain_point
battler.damage_sp[battler] = drain_point
if battler.damage_sp[battler] == 0
battler.damage_sp[battler] = nil
end
end
# recall
xrxs19co_x1_damage_effect(battler, item)
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#------------------------------------------------------------------------------
# ○ ATB_SETUP (ATB = AT Bar,意思不要和RTAB搞错)(1.03)
#------------------------------------------------------------------------------
alias xrxs19_atb_setup atb_setup
def atb_setup
# recall
xrxs19_atb_setup
# 保存最大AT
for battler in $game_party.actors + $game_troop.enemies
battler.maxat = @max
end
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
alias xrxs19_main main
def main
# 清空角色的伤害值
for actor in $game_party.actors
actor.damage = nil
end
# recall
xrxs19_main
# 清空角色的特殊效果设置
for actor in $game_party.actors
actor.current_action.clear_xrxs19_special_effect
actor.current_action.nillize_xrxs19_special_effect
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合步骤 1 : 准备行动)
#--------------------------------------------------------------------------
alias xrxs19co_x1_update_phase4_step1 update_phase4_step1
def update_phase4_step1(battler)
# 清空行动者的伤害值
battler.damage.clear
# recall
xrxs19co_x1_update_phase4_step1(battler)
end
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合步骤 2 : 开始行动)
#--------------------------------------------------------------------------
alias xrxs19_update_phase4_step2 update_phase4_step2
def update_phase4_step2(battler)
# 清空行动者的伤害值
battler.damage.clear
# recall
xrxs19_update_phase4_step2(battler)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アクターコマンドフェーズ : エネミー選択)
#(武器范围定义必须)
#--------------------------------------------------------------------------
def update_phase3_enemy_select
# コマンド選択中に行動不能になった場合
unless @active_actor.inputable?
# カメラを元に戻す
if @camera == "select"
@spriteset.screen_target(0, 0, 1)
end
@active_actor.current_action.clear
command_delete
# 次のアクターのコマンド入力へ
phase3_next_actor
return
end
@active_actor.set_xrxs19_special_scope(@active_actor.equip_element_set) if @skill_window == nil
@active_actor.set_xrxs19_special_scope(@active_actor.skill_element_set(@skill)) if @skill_window != nil
case @active_actor.current_action.scope_force
when 2,4,6,7,8,9,10,11
# アクションを設定
@active_actor.current_action.kind = 0
@active_actor.current_action.basic = 0
# スキルの選択を終了
end_enemy_select
# 次のアクターのコマンド入力へ
phase3_next_actor
when 3
# アクターアローを更新
@actor_arrow.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# アクターの選択を終了
end_enemy_select
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# アクションを設定
@active_actor.current_action.kind = 0
@active_actor.current_action.basic = 0
@active_actor.current_action.target_index = @actor_arrow.index
# アクターの選択を終了
end_enemy_select
# 次のアクターのコマンド入力へ
phase3_next_actor
end
else
# エネミーアローを更新
@enemy_arrow.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# カメラを元に戻す
if @camera == "select"
# カメラの設定
@camera = "command"
plus = ($game_party.actors.size - 1) / 2.0 - @actor_index
y = [(plus.abs - 1.5) * 10 , 0].min
# @spriteset.screen_target(plus * 50, y, 1.0 + y * 0.002)
end
# エネミーの選択を終了
end_enemy_select
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# アクションを設定
@active_actor.current_action.kind = 0
@active_actor.current_action.basic = 0
@active_actor.current_action.target_index = @enemy_arrow.index
# スキルウィンドウ表示中の場合
if @skill_window != nil
# アクションを再設定
@active_actor.current_action.kind = 1
# スキルの選択を終了
end_skill_select
end
# アイテムウィンドウ表示中の場合
if @item_window != nil
# アクションを再設定
@active_actor.current_action.kind = 2
# アイテムの選択を終了
end_item_select
end
# エネミーの選択を終了
end_enemy_select
# 次のアクターのコマンド入力へ
phase3_next_actor
end
end
end
#--------------------------------------------------------------------------
# ● 开始选择敌人#(武器范围定义必须)(1.03修正显示BUG)
#--------------------------------------------------------------------------
def start_enemy_select
@active_actor.set_xrxs19_special_scope(@active_actor.equip_element_set) if @skill_window == nil
@active_actor.set_xrxs19_special_scope(@active_actor.skill_element_set(@skill)) if @skill_window != nil
if @active_actor.current_action.scope_force == 3
# 生成敌人箭头
@actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
# 关联帮助窗口
@actor_arrow.help_window = @help_window
else
# 生成敌人箭头
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
# 关联帮助窗口
@enemy_arrow.help_window = @help_window
end
# 无效化角色指令窗口
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ● 结束选择敌人#武器范围定义必须)
#--------------------------------------------------------------------------
def end_enemy_select
# 释放敌人箭头
@enemy_arrow.dispose if @enemy_arrow != nil
@actor_arrow.dispose if @actor_arrow != nil
@enemy_arrow = nil
@actor_arrow = nil
# 指令为 [战斗] 的情况下
if @actor_command_window.index == 0
# 有效化角色指令窗口
@actor_command_window.active = true
@actor_command_window.visible = true
# 隐藏帮助窗口
@help_window.visible = false
end
end
#--------------------------------------------------------------------------
# ● 基本アクション 準備#(武器范围定义必须)
#--------------------------------------------------------------------------
def make_basic_action_preparation(battler)
# 攻撃の場合
if battler.current_action.basic == 0
# アニメーション ID を設定
battler.anime1 = battler.animation1_id
battler.anime2 = battler.animation2_id
# 行動側バトラーがエネミーの場合
if battler.is_a?(Game_Enemy)
if battler.restriction == 3
target = $game_troop.random_target_enemy
elsif battler.restriction == 2
target = $game_party.random_target_actor
else
index = battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
end
# 行動側バトラーがアクターの場合
battler.set_xrxs19_special_scope(battler.equip_element_set)
if battler.is_a?(Game_Actor)
if battler.restriction == 3
target = $game_party.random_target_actor
elsif battler.restriction == 2
target = $game_troop.random_target_enemy
elsif battler.current_action.scope_force == 3 # 己方单体
index = battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
else
index = battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
# 対象側バトラーの配列を設定
case battler.current_action.scope_force
when 2 # 敌方全体
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
battler.target.push(battler) if battler.current_action.self_inclusion
when 4 # 己方全体
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 7 # 使用者
battler.target.push(battler)
when 8 # 全域化
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 9 # 敌方随机
for enemy in $game_troop.enemies
if enemy.exist?
battler.target = [$game_troop.random_target_enemy]
end
end
battler.target.push(battler) if battler.current_action.self_inclusion
when 10 # 己方随机
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
when 11 #对象随机
battler.target = []
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
else
battler.target = [target]
battler.target.push(battler) if battler.current_action.self_inclusion and
battler.current_action.scope_force != 3 and
battler.restriction != 2 and
battler.restriction != 3
end
return true
end
# 防御の場合
if battler.current_action.basic == 1
# ステップ 3 に移行
battler.phase = 3
return false
end
#===============0.15b(RTAB官方更新)===========================================
# 逃げるの場合
if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
# ステップ 3 に移行
battler.phase = 3
return false
end
#=============================================================================
# 何もしないの場合
if battler.current_action.basic == 3
# ステップ 6 に移行
battler.phase = 6
return false
end
end
#--------------------------------------------------------------------------
# ● 生成基本行动结果
#--------------------------------------------------------------------------
alias xrxs19_make_basic_action_result make_basic_action_result
def make_basic_action_result(battler)
# 攻击的情况
if battler.current_action.basic == 0
# 获取行动者武器附加的战斗特效
if battler.is_a?(Game_Actor)
battler.set_xrxs19_special_effect(battler.equip_element_set)
# 行动时附加自身状态
if battler.current_action.p_state > 0
battler.pp_state(battler,battler.current_action.p_state)
end
# 行动时解除自身状态
if battler.current_action.m_state > 0
battler.remove_state(battler.current_action.m_state)
end
end
end
# recall
xrxs19_make_basic_action_result(battler)
end
#--------------------------------------------------------------------------
# ● スキルまたはアイテムの対象側バトラー設定
# scope : スキルまたはアイテムの効果範囲
# (武器范围定义必须)特技/道具的范围定义
#--------------------------------------------------------------------------
def set_target_battlers(scope, battler)
#行动方战斗者是敌方的情况
if battler.is_a?(Game_Enemy)
# 效果范围的分歧
case scope
when 1 # 敌单体
battler.target.push(battler) if battler.current_action.self_inclusion
index =battler.current_action.target_index
battler.target.push($game_party.smooth_target_actor(index))
when 2 # 敌全体
battler.target.push(battler) if battler.current_action.self_inclusion
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
when 3 # 己方单体
index = battler.current_action.target_index
battler.target.push($game_troop.smooth_target_enemy(index))
when 4 # 己方全体
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 5 # 己方单体 (HP 0)
index = battler.current_action.target_index
enemy = $game_troop.enemies[index]
if enemy != nil# and enemy.hp0?# 复活类特技/道具对生存者有效
battler.target.push(enemy)
end
when 6 # 己方全体 (HP 0)
for enemy in $game_troop.enemies
if enemy != nil# and enemy.hp0?# 复活类特技/道具对生存者有效
battler.target.push(enemy)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 7 # 使用者
battler.target.push(battler)
when 8 # 全域化
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 9 # 敌方随机
battler.target.push(battler) if battler.current_action.self_inclusion
for actor in $game_party.actors
if actor.exist?
battler.target = [$game_party.random_target_actor]
end
end
when 10 # 己方随机
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
when 11 #对象随机
battler.target = []
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
end
end
#行动方战斗者是己方的情况
if battler.is_a?(Game_Actor)
# 效果范围的分歧
case scope
when 1 # 敌单体
index = battler.current_action.target_index
battler.target.push($game_troop.smooth_target_enemy(index))
battler.target.push(battler) if battler.current_action.self_inclusion
when 2 # 敌全体
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
battler.target.push(battler) if battler.current_action.self_inclusion
when 3 # 己方单体
index = battler.current_action.target_index
battler.target.push($game_party.smooth_target_actor(index))
when 4 # 己方全体
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 5 # 己方单体 (HP 0)
index = battler.current_action.target_index
actor = $game_party.actors[index]
if actor != nil# and actor.hp0?# 复活类特技/道具对生存者有效
battler.target.push(actor)
end
when 6 # 己方全体 (HP 0)
for actor in $game_party.actors
if actor != nil# and actor.hp0?# 复活类特技/道具对生存者有效
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 7 # 使用者
battler.target.push(battler)
when 8 # 全域化
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
when 9 # 敌方随机
for enemy in $game_troop.enemies
if enemy.exist?
battler.target = [$game_troop.random_target_enemy]
end
end
battler.target.push(battler) if battler.current_action.self_inclusion
when 10 # 己方随机
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
when 11 #对象随机
battler.target = []
for enemy in $game_troop.enemies
if enemy.exist?
battler.target.push(enemy)
end
end
for actor in $game_party.actors
if actor.exist?
battler.target.push(actor)
end
end
battler.target -=[battler] if battler.current_action.self_exclusion
battler.target = [battler.target[rand(battler.target.size)]]
end
end
end
#--------------------------------------------------------------------------
# ● 生成特技行动结果
#--------------------------------------------------------------------------
alias xrxs19_make_skill_action_result make_skill_action_result
def make_skill_action_result(battler, plus_id=0)
# 获取特技
@skill = $data_skills[battler.current_action.skill_id + plus_id]
# 获取行动者特技附加的战斗特效
battler.set_xrxs19_special_effect(battler.skill_element_set(@skill))
# 行动时附加自身状态
if battler.current_action.p_state > 0
battler.pp_state(battler,battler.current_action.p_state)
end
# 行动时解除自身状态
if battler.current_action.m_state > 0
battler.remove_state(battler.current_action.m_state)
end
# recall
xrxs19_make_skill_action_result(battler, plus_id)
end
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合步骤 5 : 显示伤害)
#--------------------------------------------------------------------------
alias xrxs19_update_phase4_step5 update_phase4_step5
def update_phase4_step5(battler)
# recall
xrxs19_update_phase4_step5(battler)
# 行动者伤害表示(HP/SP吸收的表示用)
if battler.damage[battler] != nil or
battler.damage_sp[battler] != nil
battler.damage_pop[battler] = true
# 行动者状态栏刷新
status_refresh(battler)
end
end
end
#==============================================================================
# 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
#==============================================================================