Project1
标题:
想請教VA有沒有辦法做到限制抗性上限
[打印本页]
作者:
iop20070710
时间:
2021-2-2 23:43
标题:
想請教VA有沒有辦法做到限制抗性上限
想請教各位大佬
我做了多個能夠抵抗特定元素屬性的裝備
但若是全部穿在身上,就能夠實現這個屬性無傷的效果
這樣又過於霸道
但是裝備名稱就是耐火裝 耐火手套這樣 數值調太低又顯得沒有抵抗的感覺
不知道是否能夠做到即使穿上全身抗火裝,但是身上的火屬性抗性最大值還是只能抵抗50%的類似這種效果
作者:
alexncf125
时间:
2021-2-3 11:46
本帖最后由 alexncf125 于 2021-2-3 12:14 编辑
咱们搜属性抗性,搜到:
#---------------------------------------------- ----------------------------
# ● 获取属性抗性
#------------------------------------------------- -------------------------
def element_rate(element_id)
features_pi(FEATURE_ELEMENT_RATE, element_id)
end
复制代码
接着搜features_pi,搜到:
#---------------------------------------------- ----------------------------
# ● 计算特性值的乘积
#------------------------------------------------- -------------------------
def features_pi(code, id)
features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
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 属性抗性记错成减的了
留下黑历史给各位警示... ...
class Game_BattlerBase
alias orz_features_pi features_pi
def features_pi(code, id)
orz_features_pi(code, id)
val= features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
return [val, 0.5].min if code==11 && self.actor? ###
return val
end
end #class
复制代码
作者:
iop20070710
时间:
2021-2-10 13:51
自頂一下
作者:
lishang339
时间:
2021-2-10 14:50
建议用百分比啊 你的数值加到一定梯度就最多是60%这样,减免,但是不会无敌
作者:
芯☆淡茹水
时间:
2021-2-10 16:22
class Game_Actor
def element_rate(element_id)
return [0.5, super(element_id)].max
end
end
复制代码
至于为什么取 max , 因为数值越小,抗性越高.
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1