Project1

标题: 如何让最低伤害设置为1而不是0? [打印本页]

作者: 007dd007    时间: 2017-5-29 16:38
标题: 如何让最低伤害设置为1而不是0?
如果敌人比我们弱到一定程度后,打我们都是0血,这让人看着好不顺眼啊。
判定为闪避也行啊!我感觉伤害为1更好,可是不知道去哪里改!或者有什
么方法可以实现?求大佬们!
作者: LostLeader    时间: 2017-5-29 20:36
好像不行,伤害公式里面都要用a.atk-b.def,没法加
if(a.atk<b.def)
{dam=1;}
得改源码
作者: 007dd007    时间: 2017-5-30 16:27
LostLeader 发表于 2017-5-29 20:36
好像不行,伤害公式里面都要用a.atk-b.def,没法加
if(a.atk

源码我们没办法改吗
作者: 铅笔描绘的思念    时间: 2017-5-30 16:56
本帖最后由 铅笔描绘的思念 于 2017-5-31 14:16 编辑

JAVASCRIPT 代码复制
  1. Game_Action.prototype.makeDamageValue = function(target, critical) {
  2.     var item = this.item();
  3.     var baseValue = this.evalDamageFormula(target);
  4.     var value = baseValue * this.calcElementRate(target);
  5.     if (this.isPhysical()) {
  6.         value *= target.pdr;
  7.     }
  8.     if (this.isMagical()) {
  9.         value *= target.mdr;
  10.     }
  11.     if (baseValue < 0) {
  12.         value *= target.rec;
  13.     }
  14.     if (critical) {
  15.         value = this.applyCritical(value);
  16.     }
  17.     value = this.applyVariance(value, item.damage.variance);
  18.     value = this.applyGuard(value, target);
  19.     value = Math.round(value);
  20.     return value > 0? value:1;
  21. };
获取伤害的地方小改下就好


没考虑到恢复技能也是调用这玩意的
JAVASCRIPT 代码复制
  1. return value > 0? value:1;
改成
JAVASCRIPT 代码复制
  1. return value == 0? value:1;
这样应该就好了 不过建议参考楼下修改公式的 以免添加其他插件出问题 我也是第一次知道公式里也可以加方法
作者: 007dd007    时间: 2017-5-30 17:46
本帖最后由 007dd007 于 2017-5-30 17:56 编辑
铅笔描绘的思念 发表于 2017-5-30 16:56
Game_Action.prototype.makeDamageValue = function(target, critical) {
    var item = this.item();
    ...


弄好了,非常感谢你!大神!!!
作者: raketenfaust02    时间: 2017-5-30 18:32
最简单粗暴的办法是所有伤害公式里直接+1
比如【a.atk * 4 - b.def *2】改成【a.atk * 4 - b.def *2 +1】

另外YEP插件也支持设置最小伤害值
作者: Ajucaqiu    时间: 2017-5-31 12:43
伤害公式
Math.max(a.atk-b.def,1)
作者: qq784339982    时间: 2017-5-31 13:52
铅笔描绘的思念 发表于 2017-5-30 16:56
Game_Action.prototype.makeDamageValue = function(target, critical) {
    var item = this.item();
    ...

你这有问题。恢复技能就不能用了,直接向上取整就行了。
作者: TTIAN    时间: 2017-6-3 11:01
本帖最后由 TTIAN 于 2017-6-3 11:10 编辑
Ajucaqiu 发表于 2017-5-31 12:43
伤害公式
Math.max(a.atk-b.def,1)


这个公式只是修改了伤害计算中的basevalue,伤害计算时还会在basevalue的基础上参考属性系数、类型增伤、数值浮动、暴击、防御来确定最后的数值,而且在最后的最后还会经历一次四舍五入。所以这个方法并不能确保最后得出的伤害最小值必定为1。

value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
value = value > 0 ? Math.max(value, 1) : value;
value = Math.round(value);

4楼的方法是比较稳妥的,但逻辑不太严谨,把这行红色代码加进去应该就可以了。
作者: Ajucaqiu    时间: 2017-6-3 16:21
TTIAN 发表于 2017-6-3 11:01
这个公式只是修改了伤害计算中的basevalue,伤害计算时还会在basevalue的基础上参考属性系数、类型增伤、 ...

if (a.atk>b.def){a.atk-b.def;}else{b.gainHp(-1);b.startDamagePopup();0}
不过我觉得根据楼主的要求,Math.max()就够用了




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