Left 4 Dead 2

Left 4 Dead 2

Advanced Bot AI
Lethaeus  [developer] Sep 13, 2021 @ 6:35pm
模组都能实现什么样的AI提升
这篇讨论可以帮助大家认识和了解L4D2(或是其他起源引擎游戏)脚本模组的基础知识。同时也可以让大家了解如何实现AI脚本模组的开发。

起源引擎游戏使用的脚本是Vscript,在L4D2中使用的语言是squirrel,一个类似于lua的轻量级面向对象语言。使用的语法和C类似。


我们需要明确一点,模组和插件不一样,脚本模组只能根据官方提供的接口去获取、修改数据。而插件(SourceMod)可以通过第三方工具来获取更丰富的接口,利用更多工具去实现想要的功能。

L4D2和GMOD不同,GMOD本身是沙盘游戏,而L4D2是一个已经规划好游戏方案,设计好通关过程、运行脚本的游戏,所以官方并没有提供太多关于Bot玩家方面的可调用接口。能够真正去控制Bot玩家状态的接口只有一个:

CommandABot

调用这个方法可以控制Bot玩家的 攻击、躲避、移动到目标位置、重置Bot玩家状态。

注:Bot玩家就是指电脑玩家,包括人类电脑玩家和特殊感染者电脑玩家。

也就是说官方写好的控制bot的接口只有一个,而且只有四种功能。所以说我们无法删除和覆写bot原本的脚本AI程序,bot的最原始的行动是无法被更改的,而且关于bot的AI方面的数据也都是存储在内存里的,是软件里已经写好的。所以我们无法修改关于原版AI方面的任何东西,我们能做的只有修改控制台数据

以及自己编写新的脚本AI。

游戏AI通常是使用行为树来控制AI行为的。这样的话AI总会有处于[闲置]状态的时候,我们可以在这个时候去用自己编写的AI来控制bot。我在编写新AI的时候,发现不只是闲置状态,原版AI的一些行为属于“弱行为(我是这么称呼的)”,执行力比较低,其他的动作可以干扰或打断“弱行为”。意味着我们能对bot操控的时间就更长了。

到这里我们明白:编写好自己的AI脚本,去干扰原版的AI脚本就可以了。

之后是一个很难解决的问题:强行为。

意味着一些原版的AI脚本,无法被打断,会强制执行。因为原版AI的实现更底层,而且更新的频率更高,所以脚本AI再怎么执行无法覆盖掉“强行为”的原版AI。

目前所遇到的问题有:
1.Tank局里,有人倒地时,bot会不顾一切去拉人。

这个动作完全无法覆盖,bot会贴着tank的脸去拉人,即使对bot施加数值很高的向量也无法把bot从tank身边推开。

2.witch

原版AI对witch真的很专注,但只会潜行关灯,还是会经常性的去和witch贴脸,和上一个问题一样,bot的移动没法用新增AI脚本打断。只能对bot施加推力把bot从witch身边推开。但是依旧不如意。

3.bot的攻击状态切换

CommandABot这个方法的“攻击”不是即刻执行,而是需要完成发现目标、瞄准目标的动作之后才会开枪。同时这个方法的攻击也无法覆盖掉原版AI的上一个行为。所以原版AI救人、被小僵尸包围的时候经常会跟傻了一样。

即使自己写脚本AI去干扰原版AI,执行效率也不会很高,除非bot本身处于一个比较空闲的状态,所以尸潮一来,最好是带着bot走到一个方便清理尸潮的地方,尽量不要让bot站在空地上。

4.躲口水的酸液

脚本没有办法获取地形,也没有办法获取痰的碰撞箱,所以我只是尽可能的让bot远离痰的中心点,方向的话是未知/随机的,因为没有办法获取地形,所以在电梯或者其他狭窄环境下还是会踩痰洗脚。

以及其他的一些问题。

现在我们知道:官方对于AI方面提供的接口几乎没有,对于地理环境提供的接口也很少。

所以实现AI动作行为的方法,全部都需要自己摸索,一点一点测试来拼凑出来。
好在针对实体检测和实体数据方面的接口很多,所以还是写出来了很多控制AI的方法。

总体上讲想要用脚本模组来实现一个相当好用的AI模组还是相当困难的,有一些功能也是完全没法实现,再加上原版AI的行为不能完全被打断,很多时候AI还是会自顾自的干事,所以说想完全改善原版AI的行为也是不现实的。

不过目前来看,所能实现的功能也差不多够用了,尽管是有一些小瑕疵,但是有的东西就是没有办法去改变的。
< 1 2 >
Showing 1-15 of 22 comments
Lethaeus  [developer] Sep 13, 2021 @ 6:51pm 
至于为什么会写这个模组,也是因为之前突然来了兴趣就去写了(或者说被原版AI搞得血压升高),期间也是花了很长时间去研究官方的接口文档(中文文档年久失更新,所以得自己啃英文文档)和bot的原版AI行为。

同时也是对squirrel这个语言进行了一番学习。我之前是只摸过java的,还是为了写mc的模组才学的。也就是说我个人并不是学计算机的,也不是理科生。我是学习设计方面的专业的,相比编程,美术懂得更多一点。

最开始写的时候也完全没有写一个框架,就是单纯的往脚本里塞了一些方法,想着只要改善原版AI的攻击、瞄准方式,以及救人的速度就行了。

而其他的功能也都是后来才加的,像丢投掷、灌油、电击器救人这种功能也都是调试了很久,也重写过很多次。而且最初也都是不管视觉效果,只注重功能实现。

至于官方更新,鬼知道社区玩家为啥搞一些乱七八糟的更新。每次更新都在贴吧和讨论区低下看到说AI变蠢了。

AI变蠢了确实没法用脚本改善,因为AI的行为数据都是写死在程序里了,脚本连获取都获取不了,更不要说去修改了。

今年是抽时间把脚本重置了一遍,写了基础框架,也把语法规范了一些,给AI专门写了一个简陋的行为树任务系统,把AI行为模块化,提升运行效率。

然后即使更新了思维,测试和了解了更多原版AI的行为,但是有一些东西还是无解。

因为我目前专注的是其他游戏,而且还有毕业设计在做,还有其他游戏模组要写,然后还在啃计算机图形学的知识,更新频率是不会太高了。除非有那么几天是真的闲,想起来了可能会再看一下哪里有问题。

毕竟L4D2并不是我生活中唯一需要关注的东西。
Q龙宝贝 Sep 14, 2021 @ 3:13pm 
强力模式附加了太多的辅助功能,几乎bot每次被控都能瞬间自救(强制把特感踢下去)默认貌似是有控制自救cd的,第一次被控会自救之后还是会被控,平衡模式确实不太行,但是ai还是比原版和很多其它的mod强(其它大多数mod只是改了参数),个人感觉平衡模式要不然专注对抗吧让bot的清怪效率更强但各种辅助功能降低,现在mod主要问题是丢手榴弹的问题。然而我之前的很多猜想被打脸了,我确实觉得bot更新之后没有弱很多吧,还有对抗能装mod自己在根目录left4dead2/cfg/addonconfig.cfg里面把1全部改成0就行了
Q龙宝贝 Sep 14, 2021 @ 3:23pm 
再说一句作者nb:steamthumbsup:
Ranno Crystal Sep 22, 2021 @ 12:33pm 
插件中的smx文件能有效抑制游戏原本的AI脚本吗?
Q龙宝贝 Sep 22, 2021 @ 3:52pm 
Originally posted by Ranno Crystal:
插件中的smx文件能有效抑制游戏原本的AI脚本吗?
大概有合适的库应该能很方便的操控电脑,不过不知道有没有人写这种库一般用的比较多的是dhook我看其它起源引擎的游戏用的bot加强插件有这个库不知道对求生之路有没有用
Q龙宝贝 Sep 22, 2021 @ 3:58pm 
Originally posted by Ranno Crystal:
插件中的smx文件能有效抑制游戏原本的AI脚本吗?
不用库的话写出来我猜和这个脚本mod能实现的功能差不太多吧,因为最简单的修改ai的函数就是调用脚本然后用作者说的那几个函数。。如果要自己去搞一个好ai太难了
Ranno Crystal Sep 24, 2021 @ 4:50am 
Originally posted by Q龙锤子宝贝:
Originally posted by Ranno Crystal:
插件中的smx文件能有效抑制游戏原本的AI脚本吗?
大概有合适的库应该能很方便的操控电脑,不过不知道有没有人写这种库一般用的比较多的是dhook我看其它起源引擎的游戏用的bot加强插件有这个库不知道对求生之路有没有用
sourcemod网站里有求生之路的dhook
顶你个钢盔 Sep 24, 2021 @ 3:40pm 
如果可以把玩家的特感auto-aim删除就更好了,老是影响
年轮 Sep 26, 2021 @ 1:18pm 
作者开心就好吧,反正本来就是免费的,任何事物都不能尽善尽美让大家都满意,就随作者心情改吧,本来游戏就是用来娱乐了,希望作者不要忘了这个mod,有空了研究研究更新一下就行,反正我每次更新都会试试体验一下,也是个乐子,祝作者一切顺利。
可以的 作者辛苦
酱鱼小王子 Dec 20, 2021 @ 2:28pm 
ai老开黑枪咋办呀,另外ai总是乱动挡枪口
૮ 倫ﻌ欸ა Dec 21, 2021 @ 2:03pm 
感謝您的開發 謝謝作者~~
BloodHalo.M Feb 2, 2022 @ 9:47pm 
谢谢作者的无私创作!工坊里有不少BOT加强mod,但作者这个是我最喜欢的!别的不说bot会主动带路和灌油让我这个只喜欢个人单机的别提多开心了!像是真的有几个战斗伙伴,而不是带了一堆只会跟随的挂件:steamthumbsup::steamthumbsup::steamthumbsup:
tim Feb 4, 2022 @ 11:03am 
Originally posted by 914139527:
作者你个臭傻逼,加智就加智,他妈的搞队友无伤穿透干什么,简直就是蠢逼一样的设计,要不是原电脑不会帮我推特感,老子才不用你这破玩意:steamthumbsdown::steamthumbsdown::steamthumbsdown:
难蚌
回梦游仙 Mar 20, 2022 @ 9:02pm 
感谢作者大大的用爱发电和无私奉献让我们大家都能用上如此高质量的MOD,目前就只是在TANK局时还是会出现一些小问题。
< 1 2 >
Showing 1-15 of 22 comments
Per page: 1530 50