#==============================================================================
#
# ▼ Yanfly Engine Ace - 属性吸收 v1.02
# -- 最后更新: 2012.08.23
# -- 使用难度: 简单
# -- 需要脚本: 无
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-Element Absorb"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.01.23 - Compatibility Update: Doppelganger
# 2011.12.14 - Started Script and Finished.
#
#==============================================================================
# ▼ 介绍
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 属性吸收是一个被RPG Maker VX Ace抛弃的,之前RM都有的功能.
# 本脚本将重新为角色,职业,武器,护甲,敌人,状态增加属性吸收的特性。
#
# 如果目标有高于100%属性抗性的特性,则会吸收更多的伤害,有低于100%属性抗性的特性,
# 会吸收较少的伤害.
#
#==============================================================================
# ▼ 安装方式
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 打开脚本编辑器,将本脚本拷贝/复制到一个在▼ 插件脚本之下▼ Main之上的新
# 脚本页/槽中.记得保存你的工程以使脚本生效.
#
# -----------------------------------------------------------------------------
# 角色备注 - 在数据库-角色中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被该角色吸收.
#
# -----------------------------------------------------------------------------
# 职业备注 - 在数据库-职业中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被该职业吸收.
#
# -----------------------------------------------------------------------------
# 武器备注 - 在数据库-武器中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被装备该武器的角色吸收.
#
# -----------------------------------------------------------------------------
# 护甲备注 - 在数据库-护甲中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被装备该胡杰的角色吸收.
#
# -----------------------------------------------------------------------------
# 敌人备注 - 在数据库-敌人中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被该敌人吸收.
#
# -----------------------------------------------------------------------------
# 状态备注 - 在数据库-状态中可以使用的备注.
# -----------------------------------------------------------------------------
# <属性吸收: x>
# <属性吸收: x, x>
# x号属性的伤害会被获得该状态的角色/敌人吸收.
#
#==============================================================================
# ▼ 兼容性
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 本脚本仅为RPG Maker VX Ace编写.极不可能在无任何修改的情况下运行于RPG Maker VX.
#
#==============================================================================
module YEA
module ELEMENT_ABSORB
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - 吸收设置 -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 设定多属性伤害的最终效果。设定为true为属性吸收优先,false为无视属性吸收
# 伤害照常计算。
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
MULTI_ELEMENT_ABSORB_PRIORITY = true
end # ELEMENT_ABSORB
end # YEA
#==============================================================================
# ▼ 编辑以下内容可能会出现电脑损坏、死机,电脑主人脑袋爆炸、昏迷、死亡或口臭
# 所以编辑了后果自负。
#==============================================================================
module YEA
module REGEXP
module BASEITEM
ELE_ABSORB = /<(?:ELEMENT_ABSORB|属性吸收):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
end # BASEITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_eabs load_database; end
def self.load_database
load_database_eabs
load_notetags_eabs
end
#--------------------------------------------------------------------------
# new method: load_notetags_eabs
#--------------------------------------------------------------------------
def self.load_notetags_eabs
groups = [$data_actors, $data_classes, $data_weapons, $data_armors,
$data_enemies, $data_states]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_eabs
end
end
end
end # DataManager
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :element_absorb
#--------------------------------------------------------------------------
# common cache: load_notetags_eabs
#--------------------------------------------------------------------------
def load_notetags_eabs
@element_absorb = []
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::BASEITEM::ELE_ABSORB
$1.scan(/\d+/).each { |num|
@element_absorb.push(num.to_i) if num.to_i > 0 }
#---
end
} # self.note.split
#---
end
end # RPG::BaseItem
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# alias method: element_rate
#--------------------------------------------------------------------------
alias game_battler_element_rate_eabs element_rate
def element_rate(element_id)
result = game_battler_element_rate_eabs(element_id)
if element_absorb?(element_id)
result = [result - 2.0, -0.01].min
end
return result
end
#--------------------------------------------------------------------------
# new method: element_absorb?
#--------------------------------------------------------------------------
def element_absorb?(element_id)
if actor?
return true if self.actor.element_absorb.include?(element_id)
return true if self.class.element_absorb.include?(element_id)
for equip in equips
next if equip.nil?
return true if equip.element_absorb.include?(element_id)
end
else
return true if self.enemy.element_absorb.include?(element_id)
if $imported["YEA-Doppelganger"] && !self.class.nil?
return true if self.class.element_absorb.include?(element_id)
end
end
for state in states
next if state.nil?
return true if state.element_absorb.include?(element_id)
end
return false
end
end # Game_BattlerBase
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# alias method: elements_max_rate
#--------------------------------------------------------------------------
alias game_battler_elements_max_rate_eabs elements_max_rate
def elements_max_rate(elements)
result = game_battler_elements_max_rate_eabs(elements)
if YEA::ELEMENT_ABSORB::MULTI_ELEMENT_ABSORB_PRIORITY
for element_id in elements
next unless element_absorb?(element_id)
result = [result - 2.0, -0.01].min
return result
end
end
return result
end
end # Game_Battler
#==============================================================================
#
# ▼ End of File
#
#==============================================================================