小逻辑分享—单位自动进攻与治疗

更新时间2023/6/3421 浏览蓝图
这次分享的是单位自动进攻与治疗的逻辑(以下简称单位辅助逻辑)。
首先我们得明确这个逻辑的效果:单位寻找敌方炮台(或核心)的位置,在单位射程极限内发动攻击,一旦血量小于某个值(如生命上限的一半)就后退到维修塔处治疗,治疗后回到前线继续进攻,如此反复。
(由于作者还未学会单位多控,以下逻辑使用了暴力全控,比较高血压,还请谅解。)
先从进攻部分开始做,绑定单位(以死星为例)后,sensor获得单位的血量上限@maxhealth、当前血量@health、攻击范围rangeoperation计算血量下限和攻击距离。(攻击距离里加的那个3是修正数,因为有些单位的有效攻击半径得加上子弹爆炸的范围,比如堡垒,但测试发现这样单位不会攻击,所以最多加1)
TapTap
随后定位敌方炮台,unit locate查找地方炮台位置(x0,y0),判断是否存在炮台,返回值
如果敌方炮台不存在(有==0),则定位敌方核心,unit locate寻找核心位置(x1,y1),返回值核心unit control单位靠近(approach)坐标(x1,y1),半径(radius)为我们之前operation攻击距离,发动攻击,unit control target x0 y0 shoot 1
如果敌方炮台存在(有==1),同上面一样的步骤,靠近-射击。这样,攻击部分就完成了。
TapTap
最后是治疗部分,一旦单位低于半血,撤往逻辑位置,在那里接受治疗。
因为当炮台不存在(有==0)时没有了威胁,故我们只需要在攻击炮台时判断是否治疗即可。在攻击炮台unit control下面,加入判断jump if 血量>=血量下限,如果,则不需要治疗,跳回第一句重新绑定单位,让下一个单位参与循环。
如果,则需要治疗,approach到逻辑坐标(@thisx,@thisy)jump always跳回第一句重新绑定单位参与循环。
TapTap
自此,治疗部分完成。(其实在jump always之前应该还要判断这个单位是否回到满血,若满血则重新绑定单位,否则继续回血。如果没有这个判断,以逻辑处理器的速度,只要单位一回到半血就会返回前线,挨一炮又得回去。但加上这个判断之后,逻辑会在单位没满血时在治疗部分循环,前线单位无法被重新绑定,即使被打没了也不会回去治疗,尤其是当前线火力及其凶残的时候。以我的逻辑水平,我还找不到两全的办法,有大佬知道怎么办吗?)
以下是整个单位辅助逻辑的全貌。
TapTap
这个逻辑谈不上非常好用,曾在测试中出现单位被地形卡住(逻辑寻路真的***)、单位来不及撤退被直接干掉的问题,且面对维修加塑钢长城时十分乏力(逻辑控制的死星不会集火)。事实上,我也是因为在服务器中看到有人在使用这种逻辑指挥死星自动进攻之后,自己琢磨着复刻了下来,突出一个整活(不过治疗部分还是有点用的,可以单独做出来用于空辅自动治疗,你再也不用担心你的空辅因为过于靠近前线被误伤致死了)。如果大佬有更好的方案,欢迎在评论区留言[嗒啦啦4_好耶]
4
5
9