查看: 4074|回复: 14

[已经过期] 如何让最低伤害设置为1而不是0?

[复制链接]
梦石
0
星屑
55
在线时间
112 小时
注册时间
2008-12-9
回帖
133
发表于 2017-5-29 16:38:04 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
如果敌人比我们弱到一定程度后,打我们都是0血,这让人看着好不顺眼啊。
判定为闪避也行啊!我感觉伤害为1更好,可是不知道去哪里改!或者有什
么方法可以实现?求大佬们!
梦石
0
星屑
50
在线时间
23 小时
注册时间
2016-7-23
回帖
30
发表于 2017-5-29 20:36:11 | 显示全部楼层
好像不行,伤害公式里面都要用a.atk-b.def,没法加
if(a.atk<b.def)
{dam=1;}
得改源码
回复

使用道具 举报

梦石
0
星屑
55
在线时间
112 小时
注册时间
2008-12-9
回帖
133
 楼主| 发表于 2017-5-30 16:27:36 | 显示全部楼层
LostLeader 发表于 2017-5-29 20:36
好像不行,伤害公式里面都要用a.atk-b.def,没法加
if(a.atk

源码我们没办法改吗

点评

跪拜楼下大佬O(∩_∩)O,我只会java,js很菜  发表于 2017-5-30 17:21
回复

使用道具 举报

梦石
0
星屑
2306
在线时间
1010 小时
注册时间
2012-4-30
回帖
1455

开拓者

发表于 2017-5-30 16:56:14 | 显示全部楼层
本帖最后由 铅笔描绘的思念 于 2017-5-31 14:16 编辑

[pre lang="javascript"]Game_Action.prototype.makeDamageValue = function(target, critical) {
    var item = this.item();
    var baseValue = this.evalDamageFormula(target);
    var value = baseValue * this.calcElementRate(target);
    if (this.isPhysical()) {
        value *= target.pdr;
    }
    if (this.isMagical()) {
        value *= target.mdr;
    }
    if (baseValue < 0) {
        value *= target.rec;
    }
    if (critical) {
        value = this.applyCritical(value);
    }
    value = this.applyVariance(value, item.damage.variance);
    value = this.applyGuard(value, target);
    value = Math.round(value);
    return value > 0? value:1;
};[/pre] 获取伤害的地方小改下就好


没考虑到恢复技能也是调用这玩意的
[pre lang="javascript"]return value > 0? value:1;[/pre]改成[pre lang="javascript"]return value == 0? value:1;[/pre]这样应该就好了 不过建议参考楼下修改公式的 以免添加其他插件出问题 我也是第一次知道公式里也可以加方法
回复 0 1

使用道具 举报

梦石
0
星屑
55
在线时间
112 小时
注册时间
2008-12-9
回帖
133
 楼主| 发表于 2017-5-30 17:46:10 | 显示全部楼层
本帖最后由 007dd007 于 2017-5-30 17:56 编辑
铅笔描绘的思念 发表于 2017-5-30 16:56
Game_Action.prototype.makeDamageValue = function(target, critical) {
    var item = this.item();
    ...


弄好了,非常感谢你!大神!!!
回复

使用道具 举报

梦石
0
星屑
112
在线时间
376 小时
注册时间
2015-1-26
回帖
194
发表于 2017-5-30 18:32:06 | 显示全部楼层
最简单粗暴的办法是所有伤害公式里直接+1
比如【a.atk * 4 - b.def *2】改成【a.atk * 4 - b.def *2 +1】

另外YEP插件也支持设置最小伤害值

点评

哦对对,加减法公式用这招是不管用的。  发表于 2017-5-30 20:31
这个方法我之前试过,没效果呀!我的伤害公式是a.atk/2-b.def/4 改成a.atk/2-b.def/4+1 伤害最小依旧是0 括号什么的加了也没用啊  发表于 2017-5-30 18:43
回复 0 1

使用道具 举报

梦石
0
星屑
216
在线时间
154 小时
注册时间
2017-2-27
回帖
166

开拓者

发表于 2017-5-31 12:43:57 | 显示全部楼层
伤害公式
Math.max(a.atk-b.def,1)

点评

公式还能这么写啊,实测有用!谢谢大神!  发表于 2017-5-31 14:12

评分

参与人数 1星屑 +30 收起 理由
铅笔描绘的思念 + 30 我很赞同

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
10 小时
注册时间
2017-1-18
回帖
11
发表于 2017-5-31 13:52:59 | 显示全部楼层
铅笔描绘的思念 发表于 2017-5-30 16:56
Game_Action.prototype.makeDamageValue = function(target, critical) {
    var item = this.item();
    ...

你这有问题。恢复技能就不能用了,直接向上取整就行了。

点评

嗯。。是没想到恢复的伤害是负的。。改改  发表于 2017-5-31 14:11
回复

使用道具 举报

梦石
0
星屑
50
在线时间
25 小时
注册时间
2017-3-27
回帖
9
发表于 2017-6-3 11:01:29 | 显示全部楼层
本帖最后由 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楼的方法是比较稳妥的,但逻辑不太严谨,把这行红色代码加进去应该就可以了。
回复

使用道具 举报

梦石
0
星屑
216
在线时间
154 小时
注册时间
2017-2-27
回帖
166

开拓者

发表于 2017-6-3 16:21:28 | 显示全部楼层
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()就够用了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部