集火逻辑的扩展

更新时间2023/5/18195 浏览蓝图
经过一晚上的调试的我虽然没有排除bug,但没关系,我重写了一个......
咳,以下才是重点。之前那个集火逻辑虽然基本功能已经完善,但注意,我们的要求是进入到任意炮台都能实现集火。所以我们得继续在此逻辑基础上添加补丁。
下面介绍一个关键词@controlled,
TapTap
它的描述是这样的,但实际上,若建筑由玩家控制,它会返回一个数字2,否则返回数字0。
据此,我们在3条Getlink语句后加入
TapTap
这样,我们得到了3个炮台的控制情况。
添加3条jump语句,判断玩家是否进入到某个炮台,并获取该炮台的@shootx,@shooty和@shooting
TapTap
(这里5条语句功能是在3条jump if 皆不成立,即3个炮台都不受玩家控制时,3个炮台以炮2的射击坐标为目标,共同射击同一个点,实现自动集火。这时炮2只受建筑内置AI控制,有敌方建筑或单位就射击。)
玩家进入任意炮台,如炮1,则控1==2,逻辑跳转到这里
TapTap
检测炮1@shooting、@shootx、@shooty,并控制其它两个炮台向指定坐标射击。
依次类推,进入到任意炮台,都有
TapTap
我们就实现了进入任意炮台就能集火,脱离炮台后也能自动集火射击的目标。
有时候,脱离炮台后,即使敌方只剩下无价值目标(如传送带什么的),炮台依旧会射击,怎么说都有点浪费弹药。这时,我们可以放置一个开关,开则启动炮台,关则锁死炮台。
TapTap
TapTap
这时,逻辑每次循环开始就能依据开关状态开关炮台。(这里解释一下@enabled,这个关键词代表建筑的开关状态,会返回010代表关,1代表开。同样我们可以根据返回的值让建筑执行是否射击或开关的指令。)
不过这就出现了一个问题,炮台在关闭状态时无法对敌,如果出现敌方非空单位,关闭状态的炮台无法反击,这时可以再添加补丁,即当附近出现敌方非空单位时,不管炮台是开是关,是被玩家控制还是在自由状态,都强制对敌
TapTap
(Radar语句顾名思义,一般用于建筑—单位,以建筑的作用半径/射程为侦查半径,检测敌/我方单位。From 后加一个建筑的名字,Radar就以该建筑的作用半径为侦查半径,检测目标为targettarget后3个空选择检测单位的类型,长按即可获得翻译;另外请注意,3个空是并列关系,无分先后,必须同时满足才能检测成功,我们这里选择了enemygroundany必须同时满足“敌方”、“地面”,才会执行这条语句后面的内容。sort为按某种规则将检测到的所有单位由低到高或由高到低排列,形成一个列表,规则有“distance距离、health血量、maxhealth血量上限、shield护盾、armor防御”,order 1为由高到低,0为由低到高,output则取列表中的第一个单位,将这个单位赋给一个变量,我们取名敌人,这个敌人就代表了这个单位)
sensor检测敌人的血量,若Radar未检测到,则敌人不存在,检测不存在变量@health,将返回一个null,我们将null近似看为0jump if不执行,逻辑照常执行后面的语句;Radar检测到满足条件的单位,sensor检测到敌人@health大于0,执行jump if,跳转到特定的语句,所有炮台启动(不管开关有没有开),且炮台特性优先攻击单位。这样,我们的逻辑就实现了强制对敌。
将所有语句整理一下
TapTap
这就是一个功能完备的集火逻辑了。增加炮台的数量,加上超速,充满冷却液,让对面感受一下被火力覆盖支配的恐惧感。(咳,其实这逻辑没想象中那么好用,毕竟我们通常用单位进攻,除了一些服务器地图,炮台攻坚不常见。而且因为作者懒人一个,没做搬运弹药逻辑,你还得自己接弹药)
最后想吐槽一下,用mdt的逻辑块写逻辑真的折磨,显示的语句太少,你还得拖来拖去,找写好的语句。短短30几个语句就让我顾此失彼,bug频出。而作者又没有能力直接写逻辑的源代码,唉,说多了都是泪[嗒啦啦4_叹气]
1
2
6