Project1
标题: 请问一并改变人物对多个状态的抗性值 [打印本页]
作者: jianyulei 时间: 2015-10-11 15:15
标题: 请问一并改变人物对多个状态的抗性值
比如,我将状态10、15、25等数个状态设定为毒状态,然后设我的某人物对毒有150%的抗性,希望能让所有的毒都看这个抗性,不需要逐个重复设置,免疫也是如此。
作者: taroxd 时间: 2015-10-11 15:20
逐个设置很麻烦吗?还有能比逐个设置(O(n))更快的方式?
作者: taroxd 时间: 2015-10-11 15:35
本帖最后由 taroxd 于 2015-10-11 15:54 编辑
可以更改人物的 all_features 方法。当人物满足某些条件时,往 all_features 里面添加东西
按照你的要求,可以将特性分组。把一组的特性写在一个状态里(或者装备之类的都可以,脚本中的示例是 40,42)。
比如说这样(未测试)
class Game_BattlerBase
alias_method :af_20151011, :all_features
def all_features
features = af_20151011
# 如果角色的职业 ID 为 1
# Enemy 的 @class_id 为 nil,不会被判定
if @class_id == 1
# 特性列表中添加 40 号状态的所有特性
features.push $data_states[40].features
end
# 如果拥有 41 号状态
if state? 41
# 特性列表中添加 42 号状态的所有特性
features.push $data_states[42].features
end
features
end
end
class Game_BattlerBase
alias_method :af_20151011, :all_features
def all_features
features = af_20151011
# 如果角色的职业 ID 为 1
# Enemy 的 @class_id 为 nil,不会被判定
if @class_id == 1
# 特性列表中添加 40 号状态的所有特性
features.push $data_states[40].features
end
# 如果拥有 41 号状态
if state? 41
# 特性列表中添加 42 号状态的所有特性
features.push $data_states[42].features
end
features
end
end
也可以通过备注栏读取的方式,对每个 feature_object 的备注栏进行读取,按上面那段脚本的方式添加特性。比如说(依旧没测试):
class Game_BattlerBase
alias_method :af_20151011, :all_features
def all_features
feature_objects.each_with_object af_20151011 do |fo, features|
# 备注 <feature x> x 为状态的ID
fo.note.scan /<feature\s+(\d+)>/i do |(id)|
features.push $data_states[id]
end
end
end
end
class Game_BattlerBase
alias_method :af_20151011, :all_features
def all_features
feature_objects.each_with_object af_20151011 do |fo, features|
# 备注 <feature x> x 为状态的ID
fo.note.scan /<feature\s+(\d+)>/i do |(id)|
features.push $data_states[id]
end
end
end
end
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |