Project1
标题: 一个可能有些奇葩的问题,伤害可以写入多个属性id吗? [打印本页]
作者: sxjkjly8010 时间: 2021-3-2 23:05
标题: 一个可能有些奇葩的问题,伤害可以写入多个属性id吗?
首先今天参考了tomoaky的复数属性写法,在伤害公式中插入了这段实现了技能可以拥有多个属性修正的效果
#==============================================================================
# ★ RGSS3_複数属性スキル Ver1.0
#==============================================================================
=begin
作者:tomoaky
webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
メモ欄にタグを書き込むことで複数の属性をもつスキルを作成できます。
<追加属性 3, 4, 5>
=== 注意点 ===
ダメージ計算に適用される属性は最も有効なもののみです
2011.12.18 Ver1.0
公開
=end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● スキル/アイテムの属性修正値を取得
#--------------------------------------------------------------------------
alias tmmelement_game_battler_item_element_rate item_element_rate
def item_element_rate(user, item)
result = [tmmelement_game_battler_item_element_rate(user, item)]
if /<追加属性\s+(\d+(?:\s*\,\s*\d+)*)\s*>/ =~ item.note
$1.scan(/\d+/).each do |id|
result.push(self.element_rate(id.to_i))
end
end
result.max
end
end
#==============================================================================
# ★ RGSS3_複数属性スキル Ver1.0
#==============================================================================
=begin
作者:tomoaky
webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
メモ欄にタグを書き込むことで複数の属性をもつスキルを作成できます。
<追加属性 3, 4, 5>
=== 注意点 ===
ダメージ計算に適用される属性は最も有効なもののみです
2011.12.18 Ver1.0
公開
=end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● スキル/アイテムの属性修正値を取得
#--------------------------------------------------------------------------
alias tmmelement_game_battler_item_element_rate item_element_rate
def item_element_rate(user, item)
result = [tmmelement_game_battler_item_element_rate(user, item)]
if /<追加属性\s+(\d+(?:\s*\,\s*\d+)*)\s*>/ =~ item.note
$1.scan(/\d+/).each do |id|
result.push(self.element_rate(id.to_i))
end
end
result.max
end
end
value *= item_element_rate(user, item)
if /<追加属性\s+(\d+(?:\s*\,\s*\d+)*)\s*>/ =~ item.note
$1.scan(/\d+/).each do |id|
value *= self.element_rate(id.to_i)
end
end
value *= item_element_rate(user, item)
if /<追加属性\s+(\d+(?:\s*\,\s*\d+)*)\s*>/ =~ item.note
$1.scan(/\d+/).each do |id|
value *= self.element_rate(id.to_i)
end
end
但是并没有高兴的太早,很快发现Taroxd的属性强化修正脚本的问题,只对主属性(也就是数据库的属性)生效伤害加成,额外属性并没有任何变化,试图用老办法(也就是效仿tomoaky的写法)居然提示报错属性修正不能变成浮点型(?),就在想有没有什么办法让技能用<追加属性 id>或者直接在脚本里定义来给技能写入多个属性id,这样有没有办法对多个属性生效?
# @taroxd metadata 1.0
# @display 属性修正的扩展
# @require taroxd_core
# @id element_effect
# @help
# 表示该角色/该职业/习得技能后/装上装备后/该敌人/获得状态后,
# 战斗者使用第 id 号属性的技能时,效果乘以 rate
# <ELEMENT 12 1.2>表示第12号属性效果乘以1.2
Taroxd::ElementEffect = true
class RPG::BaseItem
# 属性效果构成的 hash,属性ID => 效果
def element_effect
@element_effect ||= @note.scan(/<ELEMENT\s+(\d+)\s+(\d+(?:\.\d+)?)>/i)
.each_with_object(Hash.new(1.0)) { |(id, rate), hash|
hash[id.to_i] *= rate.to_f }
end
end
class Game_Battler < Game_BattlerBase
def element_effect
note_objects.each_with_object(Hash.new(1.0)) do |e, h|
h.merge!(e.element_effect) { |_, r1, r2| r1 * r2 }
end
end
calc_new_rate = lambda do |old, user, item|
if item.damage.element_id < 0
user.atk_elements.pi(old) { |id| user.element_effect[id] }
else
old * user.element_effect[item.damage.element_id]
end
end
def_with :item_element_rate, calc_new_rate
end
# @taroxd metadata 1.0
# @display 属性修正的扩展
# @require taroxd_core
# @id element_effect
# @help
# 表示该角色/该职业/习得技能后/装上装备后/该敌人/获得状态后,
# 战斗者使用第 id 号属性的技能时,效果乘以 rate
# <ELEMENT 12 1.2>表示第12号属性效果乘以1.2
Taroxd::ElementEffect = true
class RPG::BaseItem
# 属性效果构成的 hash,属性ID => 效果
def element_effect
@element_effect ||= @note.scan(/<ELEMENT\s+(\d+)\s+(\d+(?:\.\d+)?)>/i)
.each_with_object(Hash.new(1.0)) { |(id, rate), hash|
hash[id.to_i] *= rate.to_f }
end
end
class Game_Battler < Game_BattlerBase
def element_effect
note_objects.each_with_object(Hash.new(1.0)) do |e, h|
h.merge!(e.element_effect) { |_, r1, r2| r1 * r2 }
end
end
calc_new_rate = lambda do |old, user, item|
if item.damage.element_id < 0
user.atk_elements.pi(old) { |id| user.element_effect[id] }
else
old * user.element_effect[item.damage.element_id]
end
end
def_with :item_element_rate, calc_new_rate
end
作者: sxjkjly8010 时间: 2021-3-2 23:20
本帖最后由 sxjkjly8010 于 2021-3-2 23:25 编辑
刚关电脑就在思考是不是用value *= user.element_effect(id.to_i)就能实现了,明天试试……
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |