zyx 发表于 2022-11-21 17:33:40

如何制作光束武器伤害根据攻击距离衰减的效果?

如题,weapon_data里面是没看到相关参数,麻烦指点一下

zyx 发表于 2022-11-21 18:17:35

有几个思路:

1、战斗的时候给所有船上一个状态,在状态(类似战备值过低)代码里面增加相关逻辑;
2、修改武器代码,增加相关逻辑;
3、修改伤害计算代码,增加相关逻辑。


是否有可以参考的mod?有没有大神指点一下?

绯红闪光 发表于 2022-11-21 18:25:17

我记得黑石的爆炎系列距离目标越近,伤害越高,跟你这个要求应该差不多,你解包看看或许会有什么启发

zyx 发表于 2022-11-21 18:25:55

绯红闪光 发表于 2022-11-21 18:25
我记得黑石的爆炎系列距离目标越近,伤害越高,跟你这个要求应该差不多,你解包看看或许会有什么启发 ...

非常感谢!

杂食的龙 发表于 2022-11-21 18:37:44

直接论坛搜会长的《武器li解》其中对“慢速光束”的定义应该符合你的要求。

zyx 发表于 2022-11-21 19:08:48

杂食的龙 发表于 2022-11-21 18:37
直接论坛搜会长的《武器li解》其中对“慢速光束”的定义应该符合你的要求。 ...

好的我去看看

Dana 发表于 2022-11-21 19:29:34

达索米高扬有个中能量武器,中型脉冲激光。介绍是伤害随距离衰减,可以下一个看看源码

zyx 发表于 2022-11-21 19:30:49

Dana 发表于 2022-11-21 19:29
达索米高扬有个中能量武器,中型脉冲激光。介绍是伤害随距离衰减,可以下一个看看源码 ...

谢谢谢谢,我马上看一下

zyx 发表于 2022-11-21 19:39:21

Dana 发表于 2022-11-21 19:29
达索米高扬有个中能量武器,中型脉冲激光。介绍是伤害随距离衰减,可以下一个看看源码 ...

米高扬里面没有看到相关的,黑石里面确实有可以参考

Dana 发表于 2022-11-21 19:45:53

zyx 发表于 2022-11-21 19:48:50

Dana 发表于 2022-11-21 19:45


谢谢,找到了这个武器但是没有说明

zyx 发表于 2022-11-21 19:54:38

Dana 发表于 2022-11-21 19:45


我看了一下代码,里面没有距离计算相关的代码,是新版本抛弃了这个设定吗

Dana 发表于 2022-11-21 20:10:11

zyx547864023 发表于 2022-11-21 19:54
我看了一下代码,里面没有距离计算相关的代码,是新版本抛弃了这个设定吗 ...

有可能没效果了,我也只是看文本说明和以前的体验{:5_124:}

zyx 发表于 2022-11-21 20:14:49

Dana 发表于 2022-11-21 20:10
有可能没效果了,我也只是看文本说明和以前的体验

我进去游戏测试了,给我感觉没有区别

zyx 发表于 2022-11-21 20:26:43

绯红闪光 发表于 2022-11-21 18:25
我记得黑石的爆炎系列距离目标越近,伤害越高,跟你这个要求应该差不多,你解包看看或许会有什么启发 ...

不行,武器的EveryFrameWeaponEffectPlugin继承类里面没有看到伤害计算的代码,只有动画代码

ZeroXenon 发表于 2022-11-21 20:51:55

zyx547864023 发表于 2022-11-21 20:26
不行,武器的EveryFrameWeaponEffectPlugin继承类里面没有看到伤害计算的代码,只有动画代码 ...

其实只是因为光束速度比较慢,所以打远的目标照射的时间没这么长罢了{:5_124:}

zyx 发表于 2022-11-21 21:06:31

ZeroXenon 发表于 2022-11-21 20:51
其实只是因为光束速度比较慢,所以打远的目标照射的时间没这么长罢了 ...

阳炎的武器我试了,有一定效果,但是代码不是写在武器相关的java文件里,我只在一个BaseEveryFrameCombatPlugin的继承类里面找到了有关距离计算的代码:

      List<ShipAPI> nearbyShips = CombatUtils.getShipsWithinRange(shipLoc, area);
      for (ShipAPI thisShip : nearbyShips) {
            if (thisShip.getCollisionClass() == CollisionClass.NONE) {
                continue;
            }

            Vector2f damagePoint = CollisionUtils.getCollisionPoint(shipLoc, thisShip.getLocation(), thisShip);
            if (damagePoint == null) {
                damagePoint = thisShip.getLocation();
            }
            Vector2f forward = new Vector2f(damagePoint);
            forward.normalise();
            forward.scale(5f);
            Vector2f.add(forward, damagePoint, damagePoint);
            float falloff = 1f - MathUtils.getDistance(ship, thisShip) / area;
            if (ship.getOwner() == thisShip.getOwner() && ship != thisShip) {
                falloff *= 0.5f;
            }
            engine.applyDamage(thisShip, damagePoint, damage * falloff, DamageType.ENERGY, emp * falloff * 0.25f, false,
                               false, ship);

            ShipAPI empTarget = thisShip;
            for (int i = 0; i <= (int) (damage * (falloff / 250f) * EXPLOSION_INTENSITY.get(ship.getHullSize())); i++) {
                Vector2f point = MathUtils.getRandomPointInCircle(thisShip.getLocation(),
                                                                  thisShip.getCollisionRadius() * 1.5f);
                engine.spawnEmpArc(ship, point, empTarget, empTarget, DamageType.ENERGY, damage * falloff * 0.5f, emp *
                                 falloff * 0.5f, 1000f, null,
                                 (float) Math.sqrt(damage), COLOR_EMP_FRINGE, COLOR_EMP_CORE);
            }
      }

但是这个类名是爆炸...,效果应该是爆炸时候对附近的船进行能量伤害,应该不是我想要的武器

zyx 发表于 2022-11-21 21:16:00

我估计要直接看API了...

zyx 发表于 2022-11-21 21:53:05

武器里面只有增加额外伤害的代码,没有计算原本伤害的代码,搜damage不行,搜beam也不行搞不懂

zyx 发表于 2022-11-22 10:40:23

{:5_134:}有没有大佬救一救,黑石mod里面所有代码都翻了一遍,还是没找到

zyx 发表于 2022-11-22 10:54:46

只有这几个武器有光束距离衰减效果,那么在代码里面应该能找到这几个武器的ID,然后找到相应的代码,实际上搜索不到

ZeroXenon 发表于 2022-11-22 10:55:23

zyx547864023 发表于 2022-11-22 10:40
有没有大佬救一救,黑石mod里面所有代码都翻了一遍,还是没找到
说了啊,就是因为单纯的光束速度太慢了,导致就没有照射到咯{:5_124:}

zyx 发表于 2022-11-22 10:58:45

ZeroXenon 发表于 2022-11-22 10:55
说了啊,就是因为单纯的光束速度太慢了,导致就没有照射到咯

不不不,黑石的武器里面阳炎 PDE、烈炎 PDE、爆炎 PDE都有距离越近伤害越高的效果,但是我在代码里面没找到相关武器ID判断的代码,我只能设想这个效果实现不是根据武器判断的,是根据这三个武器有一个什么共同属性之类的判断的,现在还没找到,要是能找到伤害计算整一个流程图我应该会好找一些

zyx 发表于 2022-11-22 17:54:06

根据命中距离修改光束武器伤害的代码没有找到,但是找到了修改射程的代码

在SWP的mod里有一个swp_sensorarray的舰船系统,可以增加射程:

打开相应的java文件里面是这样的:

可以看到stats里面有关于射程奖励的接口,以此为线索查找伤害奖励的接口,搜索damage相关:

我猜是这个了!全局搜索黑石相关代码:

虽然没找到他是怎么做到的,但是找到了能做到的方法,接来在自定义武器的继承类里面对判断武器命中时候对武器进行伤害调整应该能做到我想要的效果了,等我试验一下

zyx 发表于 2022-11-22 18:01:52



这里有一个理想的参考modifyDamageDealt,通过damage获取weapon,然后获取weapon的坐标,命中的目标的坐标,计算一下距离除以武器射程最后对伤害进行modifyPercent应该就可以了

相位船爱好者 发表于 2022-11-22 18:31:44

原版技能树里的能量大师有没有参考价值呢,距离越近伤害越高

zyx 发表于 2022-11-22 19:05:12

Dolk 发表于 2022-11-22 18:31
原版技能树里的能量大师有没有参考价值呢,距离越近伤害越高

原版的需要反编译,直接参考mod是比较好的选择

谁家的萌大人 发表于 2022-11-25 15:51:07

写在武器的beameffect里,求得武器的beam.getTo与发射口的距离,然后根据这个距离设定伤害量即可

御子上橘 发表于 2022-11-25 15:53:17

zyx547864023 发表于 2022-11-22 19:05
原版的需要反编译,直接参考mod是比较好的选择

原版有源码哦

谁家的萌大人 发表于 2022-11-25 15:57:05

BeamEffectPlugin里写在advance,示例:beam.getDamage.setDamage(伤害量*【beam.getWeapon.getFirePoint(0)与beam.getTo这两个向量值之间的距离(三角函数你应该懂得吧)】)至于具体伤害量可以自由设定,如果有船插或战术系统,武器相关的问题可以私信问咱

zyx 发表于 2022-11-25 16:07:51

感谢,我已经实现了效果,在EveryFrameCombatPlugin里面advance里面给ship加了listener实现了,因为我还同时要处理其他武器,你给我了提供了另一个思路,或许我应该用EveryFrameWeaponEffectPlugin

zyx 发表于 2022-11-25 16:08:29

御子上橘 发表于 2022-11-25 15:53
原版有源码哦

我看到了,在zip里面

谁家的萌大人 发表于 2022-11-25 16:15:43

zyx547864023 发表于 2022-11-25 16:07
感谢,我已经实现了效果,在EveryFrameCombatPlugin里面advance里面给ship加了listener实现了,因为我还同 ...

绕了很大的弯呢(笑)尽量还是使用简便的方式,避免出现冲突

zyx 发表于 2022-11-25 16:25:50

谁家的萌大人 发表于 2022-11-25 16:15
绕了很大的弯呢(笑)尽量还是使用简便的方式,避免出现冲突

我突然想到一个问题,如果用BeamEffectPlugin,他是全局就只执行一次,advance吗?

谁家的萌大人 发表于 2022-11-25 16:26:53

zyx547864023 发表于 2022-11-25 16:25
我突然想到一个问题,如果用BeamEffectPlugin,他是全局就只执行一次,advance吗? ...

每次发射都会执行一次

zyx 发表于 2022-11-25 16:29:30

谁家的萌大人 发表于 2022-11-25 16:26
每次发射都会执行一次

那岂不是每发射一次,伤害都会在原来的基础上变来变去,假设基础伤害是100,因为命中命中距离伤害变为50,然后第二次发射的时候他会再去到100的基础伤害去计算吗?

谁家的萌大人 发表于 2022-11-25 16:34:15

zyx547864023 发表于 2022-11-25 16:29
那岂不是每发射一次,伤害都会在原来的基础上变来变去,假设基础伤害是100,因为命中命中距离伤害变为50 ...

如果使用weapon.getdamage.set定义,发射结束后advance不再执行,武器伤害回归最初值,直到下一次发射,如果你想永久对武器的基础属性进行修改,需要get到武器的spec,再对其中内容进行定义

zyx 发表于 2022-11-25 16:41:44

学到了,回头我再试试,还有一个问题,根据武器大小我设置了射程的增加是用WeaponRangeModifier实现的,因为我看到WeaponAPI没有修改射程的方法,是我没找到吗?另外getWeaponRangePercentMod、getWeaponRangeMultMod、getWeaponRangeFlatMod这三个有什么区别呢?

谁家的萌大人 发表于 2022-11-25 16:47:24

zyx547864023 发表于 2022-11-25 16:41
学到了,回头我再试试,还有一个问题,根据武器大小我设置了射程的增加是用WeaponRangeModifier实现的,因 ...

第一个问题,射程是可以定义的,不过要回归到我上一条回复里,先get武器的spec,再对其中的射程之类的数值,甚至射角进行修改,只是这样修改是永久定义,需要增加必然触发的一个回正代码。第二个问题,三种modifier之间的区别,percent是百分比增加或减少,是百分比加算的,mult是乘算,flat是直接增加或减少,一半增益属性使用percent加算,减益属性使用mult乘算(避免出现数值叠到0的情况),flat是对数值细致定义增加或减少

谁家的萌大人 发表于 2022-11-25 16:48:56

谁家的萌大人 发表于 2022-11-25 16:47
第一个问题,射程是可以定义的,不过要回归到我上一条回复里,先get武器的spec,再对其中的射程之类的数 ...

打错了,是一般不是一半

萌友正在娇颤 发表于 2023-2-14 10:36:46

首先我没做过这游戏的mod,但是我提供一个思路不知道能不能行。就是同一个武器在一个路径上发射多条光束,光束的射程各不相同。在近距离会受到多条光束的伤害,在远距离接受的光束少,伤害就会更低。这样不知道能不能做到。

TiSapphire 发表于 2023-3-29 16:03:04

萌友正在娇颤 发表于 2023-2-14 10:36
首先我没做过这游戏的mod,但是我提供一个思路不知道能不能行。就是同一个武器在一个路径上发射多条光束, ...

可以是可以,不过你这样在武器伤害数据显示上会有很大问题(数据只会显示一条的数据)
页: [1]
查看完整版本: 如何制作光束武器伤害根据攻击距离衰减的效果?