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)。
比如说这样(未测试)
RUBY 代码复制
  1. class Game_BattlerBase
  2.   alias_method :af_20151011, :all_features
  3.  
  4.   def all_features
  5.     features = af_20151011
  6.  
  7.     # 如果角色的职业 ID 为 1
  8.     # Enemy 的 @class_id 为 nil,不会被判定
  9.     if @class_id == 1
  10.       # 特性列表中添加 40 号状态的所有特性
  11.       features.push $data_states[40].features
  12.     end
  13.  
  14.     # 如果拥有 41 号状态
  15.     if state? 41
  16.       # 特性列表中添加 42 号状态的所有特性
  17.       features.push $data_states[42].features
  18.     end
  19.  
  20.     features
  21.   end
  22. end


也可以通过备注栏读取的方式,对每个 feature_object 的备注栏进行读取,按上面那段脚本的方式添加特性。比如说(依旧没测试):
RUBY 代码复制
  1. class Game_BattlerBase
  2.   alias_method :af_20151011, :all_features
  3.  
  4.   def all_features
  5.  
  6.     feature_objects.each_with_object af_20151011 do |fo, features|
  7.       # 备注 <feature x>  x 为状态的ID
  8.       fo.note.scan /<feature\s+(\d+)>/i do |(id)|
  9.         features.push $data_states[id]
  10.       end
  11.     end
  12.  
  13.   end
  14. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1