首先说明,制作组把所有职业的任务混在了一起,请自行对应相应职业。贱民的任务优先级从高到低分别是:
拿武器攻击入侵者(这里指的不是保安,保安不算人类!)
攻击完入侵者后扔掉武器
去修被陨石砸的室内建筑(这个我看了下代码,没有室外也是醉)
生存需求(吃饭 ,睡觉 ,blablabla)
去维持紧急的食物需求,造食物(生物学家专属技能)
去搬交易需要的货物到飞船
去建造
去休闲(注意,这里限制了是当状态非常不开心的时候)
去拿零件之后维修
去拿医疗包救人
去高优先级的矿场挖矿
去制作各种东西
去拿建筑材料之后运送建筑材料(知道为什么要多造机器人了吧,工人如果有矿挖优先级绝不搬这些 )
去找那些制作台所需的资源然后存放到制作台
去找喝的
去休闲(当状态有点不开心的时候)
去挖矿(无优先级,事实证明如果么有优先级人类非常不想去挖矿)
去搬东西到仓库
进到室内
让路(给其它优先级高的角色)
在室内闲逛接下来就是星际海盗们的世界观了:
排序从高到低:
攻击殖民者(理所当然)
进入室内
在室内闲逛
没了。
有人可能会说,怎么这么简单?还有,你要去攻击殖民者不就包含进入室内了么,怎么下面还有个进入室内?由于入侵者这个项比较少,我决定展开来解释嵌套关系,来让大家更好的理解这套AI逻辑的运行方法 。
首先让我们进入第一个优先级的函数:去攻击殖民者,让我们去看一下它是怎样被定义的:
第一个if的地方判定的是角色的身份,我就不再一一赘述statusflag12代表的内容了。然后这个函数会去寻找离强盗们最近的站着的角色。
让我们再来到findneareststanding函数被定义的地方:
这里就很明了了,该函数会枚举所有你的殖民者们,并且如果它们当前状态不是死亡,或者被打倒的状态时,函数会计算一个限制距离内所有殖民者中离你最近的一个,并把结果返回上一级。
让我们回到这里:
现在,我们得到了findnearsetstanding函数传回的离你最近并且可用的殖民者了,我们的下一个目标便是要接近她,这个目标则由goTarget实现。
我们来详细看一看gotarget:
我们真正输入的参数其实是当前处理的这个强盗和这个强盗将要选定目标的被害人,而这个函数的作用就是使强盗走向被害人,而其中就包含了goToBestAirlock(走向选定的最佳气闸)。至于这个函数是如何定义的就不再解释,太过复杂,也考虑到了其它正在执行的任务对流量造成的影响。
至此,强盗开始了自己入侵的过程,补充下前面setradius参数指的是当强盗离目标8个单位时,强盗会开始开火。
而我们看到,如果在findneareststanding(查找最近的目标)函数阶段,所有的目标都在范围之外,那么这个函数将会返回一个空值,下面一阶段的if条件不会被 满足,然后整个大函数会返回一个false的值,这也就代表了在任务优先级列表中,第一个优先级的任务(攻击殖民者)的条件不满足,开始按顺序进行优先级列表中的下一个任务。
所以说了那么多,我想表达的就是,其实在攻击殖民者这个任务里包括了许许多多逻辑AI,其中就包括进入气闸这一项。至于第二个优先级任务安排进入室内的原因是,如果强盗周边在规定范围内没有符合要求的目标,那么强盗就会进入室内。
在此之后,强盗满足了处于室内的状态,优先级顺位中第二位的进入室内的条件返回也会变成false,这时候,强盗会执行第三顺位的任务:在室内随机游荡,直到在下一次判定的时候第一顺位任务的条件被触发,那么强盗就会去攻击那个被选中的倒霉蛋了。