Project1

标题: 想請教VA有沒有辦法做到限制抗性上限 [打印本页]

作者: iop20070710    时间: 2021-2-2 23:43
标题: 想請教VA有沒有辦法做到限制抗性上限
想請教各位大佬

我做了多個能夠抵抗特定元素屬性的裝備

但若是全部穿在身上,就能夠實現這個屬性無傷的效果

這樣又過於霸道

但是裝備名稱就是耐火裝 耐火手套這樣 數值調太低又顯得沒有抵抗的感覺

不知道是否能夠做到即使穿上全身抗火裝,但是身上的火屬性抗性最大值還是只能抵抗50%的類似這種效果
作者: alexncf125    时间: 2021-2-3 11:46
本帖最后由 alexncf125 于 2021-2-3 12:14 编辑

咱们搜属性抗性,搜到:
  1. #---------------------------------------------- ----------------------------
  2.   # ● 获取属性抗性
  3.   #------------------------------------------------- -------------------------
  4.   def element_rate(element_id)
  5.     features_pi(FEATURE_ELEMENT_RATE, element_id)
  6.   end
复制代码

接着搜features_pi,搜到:
  1. #---------------------------------------------- ----------------------------
  2.   # ● 计算特性值的乘积
  3.   #------------------------------------------------- -------------------------
  4.   def features_pi(code, id)
  5.     features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
  6.   end
复制代码

咱们p一下ft,p出它有code, data_id, value这三个,其中data_id就是属性的ID
火属性的ID是3,那咱把代码改成这样子:
def features_pi(code, id)
  features_with_id(code, id).inject(1.0) {|r, ft|
  if ft.data_id == 3
    [r *= ft.value, 0.5].max
  else
    r *= ft.value
  end
  }
end
改好后就会发现, 火属性抗性最大值只能抵抗50%了

不足之处就是...
不只装备, 其他会影响火属性抗性的都不会低过50%...
敌人的火属性抗性都不会低过50%...
然而我不懂得如何改下去了...
也或许我的思路从根本上就错误了...
作者: alexncf125    时间: 2021-2-4 01:07
本帖最后由 alexncf125 于 2021-2-4 01:09 编辑
唔 真糟糕,會連同敵人也一起被限制嗎

啊~现在才想起...这个类是Game_BattlerBase
那么可以改成这样子:

def features_pi(code, id)
  features_with_id(code, id).inject(1.0) {|r, ft|
  if ft.data_id == 3 && self.actor?
    [r *= ft.value, 0.5].max
  else
    r *= ft.value
  end
  }
end

ps.依旧是不只装备, 其他会影响火属性抗性的都不会低过50%...
作者: srwjrevenger    时间: 2021-2-8 18:47
本帖最后由 srwjrevenger 于 2021-2-10 17:25 编辑
alexncf125 发表于 2021-2-4 01:07
啊~现在才想起...这个类是Game_BattlerBase
那么可以改成这样子:


用 features_pi 计算特性值的乘积的不止有属性抗性,所以还要加上判断特性的种类,
还有,判断特性值上限得在块外面,且限制上限得用min而不是max吧?

### 那里的判定我去掉了“&& id == 3”只是单纯觉得应该保持平衡,如果有需要的人可以自己加上,
另外如果把那一行再改一下加上其它判断条件,可以实现不同属性抗性的上限不一样

可能写的不是很对,欢迎各位大佬改正
果然错了T - T 属性抗性记错成减的了
留下黑历史给各位警示... ...

  1. class Game_BattlerBase
  2. alias orz_features_pi features_pi
  3. def features_pi(code, id)
  4. orz_features_pi(code, id)
  5. val= features_with_id(code, id).inject(1.0) {|r, ft|  r *= ft.value }
  6. return  [val, 0.5].min  if code==11 && self.actor?  ###
  7. return val
  8. end
  9. end #class
复制代码



作者: iop20070710    时间: 2021-2-10 13:51
自頂一下
作者: lishang339    时间: 2021-2-10 14:50
建议用百分比啊 你的数值加到一定梯度就最多是60%这样,减免,但是不会无敌
作者: 芯☆淡茹水    时间: 2021-2-10 16:22
  1. class Game_Actor
  2.   def element_rate(element_id)
  3.     return [0.5, super(element_id)].max
  4.   end
  5. end
复制代码


至于为什么取 max , 因为数值越小,抗性越高.




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