人机
“ | 人类队友可能会对你指手画脚,但这些没有灵魂的人机会吗?会。它们又不是瞎子。但他们又是哑巴,所以你的无能将会是它们入土都说不出来的秘密。
— 士兵
|
” |
人机 / Bot,又称机器人或电脑玩家,是服务器上被电脑控制的玩家。在军团要塞 2 中有两种人机:智能人机以及木偶人机。智能人机采用了复杂的人工智能编码,其目的是为了模拟玩家在游戏中的行为,可在未开启作弊的情况下使用。木偶人机没有人工智能编码,因此它们不会自动活动,但它们在游戏测试和训练的用途上很有帮助。木偶人机需要服务器开启作弊模式才能使用,并且此时也会禁用成就系统。
目录
基础智能人机
基础智能人机,或者称为“TFBot”,是为了模仿人类玩家的游戏行为而设计出来的,并且不能受玩家直接控制。同时,它们都是以随机方式选择兵种的。他们使用的是基于《求生之路》系列中生还者人机以及被感染者 AI 所使用的复杂人工智能代码[1]。添加智能人机不需要服务器开启作弊功能,所以可以借此完成各种成就;不过有一个例外:人机在被击杀后并没有死亡定格照;因此也无法让玩家通过智能人机来达成与死亡定格照相关的成就。此外,用奇异属性的武器杀死人机也不会增加武器的杀敌计数,除非武器应用了奇异升级部件:机器人消灭数,在这种情况下,杀敌数会添加到奇异部件上,而非武器本身。
智能人机具有从简单到专家的四个技术水平等级。Sigsegv对该技术水平差异进行了[1]。
智能人机在以下情况能够间接地被玩家进行一定程度的控制:
- 在准备阶段期间,被玩家准星所瞄准的任意一方人机都将做出嘲讽动作。
- 当玩家使用语音指令“医生!”时,附近的友方医生人机就会前来提供治疗。
- 当治疗玩家的医生人机的 ÜberCharge 就绪时,玩家使用“冲!冲!冲!”或者“激活 Ubercharge!”语音指令会让它立刻激活 ÜberCharge。
- 如果医生人机的治疗目标或它自身受到重创时,它会立刻激活自己的 ÜberCharge。
- 人机会尝试加入队友的同伴嘲讽(例如击掌!)或集体嘲讽(例如康茄舞)。
寻路
具备官方人机支持的地图
地图 | 游戏模式 | 文件名 |
---|---|---|
Altitude† | 攻防型 | cp_altitude
|
Dustbowl | 攻防型 | cp_dustbowl
|
Gorge | 攻防型 | cp_gorge
|
Gorge Event | 攻防型 | cp_gorge_event
|
曼恩断头庄(Mann Manor) | 攻防型 | cp_manor_event
|
Mercenary Park | 攻防型 | cp_mercenarypark
|
Mossrock | 攻防型 | cp_mossrock
|
Badlands | 控制点 | cp_badlands
|
Foundry | 控制点 | cp_foundry
|
Granary | 控制点 | cp_granary
|
Gullywash | 控制点 | cp_gullywash_final1
|
Metalworks | 控制点 | cp_metalworks
|
Process | 控制点 | cp_process_final
|
Snakewater | 控制点 | cp_snakewater_final1
|
Sunshine | 控制点 | cp_sunshine
|
Vanguard | 控制点 | cp_vanguard
|
Turbine | 夺旗 | ctf_turbine
|
Badlands | 山丘之王 | koth_badlands
|
Brazil | 山丘之王 | koth_brazil
|
Eyeaduct | 山丘之王 | koth_viaduct_event
|
Ghost Fort | 山丘之王 | koth_lakeside_event
|
Kong King | 山丘之王 | koth_king
|
Lakeside | 山丘之王 | koth_lakeside_final
|
尖笑乐园(Laughter) | 山丘之王 | koth_slaughter_event
|
Lazarus | 山丘之王 | koth_lazarus
|
腐烂之林(Moldergrove) | 山丘之王 | koth_undergrove_event
|
Moonshine Event | 山丘之王 | koth_moonshine_event
|
Nucleus | 山丘之王 | koth_nucleus
|
Probed | 山丘之王 | koth_probed
|
Sawmill | 山丘之王 | koth_sawmill
|
Slasher | 山丘之王 | koth_slasher
|
Viaduct | 山丘之王 | koth_viaduct
|
Badwater Basin | 推车 | pl_badwater
|
Barnblitz | 推车 | pl_barnblitz
|
血水之盆(Bloodwater) | 推车 | pl_bloodwater
|
Camber | 推车 | pl_camber
|
Brimstone | 推车 | pl_fifthcurve_event
|
禁运之境(Embargo)† | 攻防型 | pl_embargo
|
Enclosure | 推车 | pl_enclosure_final
|
Goldrush | 推车 | pl_goldrush
|
Gravestone | 推车 | pl_rumble_event
|
Hoodoo | 推车 | pl_hoodoo_final
|
Pier | 推车 | pl_pier
|
丧魂绝壁(Precipice)† | 推车 | pl_precipice_event_final
|
Swiftwater | 推车 | pl_swiftwater_final1
|
Thundermountain | 推车 | pl_thundermountain
|
Upward | 推车 | pl_upward
|
Pier | 推车 | pl_pier
|
Wutville† | 推车 | pl_wutville_event
|
† 蓝队的电脑玩家会在其中一个蓝队出生点内卡住。因此,蓝队仅可能在那个特定出生点阶段内完全碾压或几乎不损兵折将的情况下才能获胜。
在不支持人机的地图上使用人机
- 导航网格编辑需要启用作弊,因此要在控制台中键入“sv_cheats 1”。
- 使用“nav_generate”指令构建初始导航网格。
- 等待游戏生成 AI 路径,可在控制台中跟踪进度。
- 地图将重新加载。
- 选择性地调整生成的导航网格,进而添加缺失的数据并移除错误的数据。使用“nav_edit 1”进入导航网格编辑模式。
- 重新加载/重启服务器(可选,但如果跳过这一步则会禁用成就功能)。
- 打开控制台,如上所示输入“tf_bot_add <数量>”来添加人机。
警告:如果你在启用人机的情况下编辑导航网格,游戏很可能会崩溃。
除了每次在需要添加人机时输入“tf_bot_add <数量>”指令外,人机可以在任何已执行上述步骤的地图上使用,而不必重复这些步骤。
在控制点,山丘之王,推车和夺旗模式的地图上自动生成的导航网格的效果最佳。在曼恩之力地图上,人机会主动承担夺旗的任务,但无法使用钩爪或智能地使用它们经过的增益。
将控制台命令“tf_bot_offense_must_push_time”的值设置为 0 可以让人机在地图中对战,而并没有它们可以识别的目标,除非地图没有任何重生区域实体。
不支持官方人机的默认地图
· Hydro | · DeGroot Keep | · Hightower | · Frontier | · Pipeline | · Steel | · 2Fort | · 2Fort Invasion |
· Double Cross | · Landfall | · Sawmill(夺旗) | · Well(夺旗) | · 5Gorge | · Coldfront | · Fastlane | · Freight |
· Powerhouse | · Sinshine | · Well | · Yukon | · Egypt | · Gravel Pit | · Junction | · Mountain Lab |
· Snowplow | · SnowVille | · Snowfall | · Steel | · Standin | · Borneo | · Cactus Canyon | · Frontier |
· Hellstone | · Snowycoast | · Swiftwater | · Banana Bay | · Helltower | · Hightower | · Nightfall | · Pipeline |
· Badlands(竞技场) | · Byre | · Granary(竞技场) | · Lumberyard | · Nucleus(竞技场) | · Offblast | · Ravine | · Sawmill |
· Watchtower | · Well(竞技场) | · Harvest | · 闹鬼农场(Harvest Event) | · Highpass | · Maple Ridge Event | · Suijin | · Carnival of Carnage |
· Doomsday | · Cloak(控制点) | · Bigrock | · Coal Town | · Decoy | · Ghost Town | · Mannhattan | · Mannworks |
· Rottenburg | · Asteroid | · Foundry(夺旗) | · Gorge(夺旗) | · Hellfire | · Brickyard | · District | · Timbertown |
· Pit of Death | · Watergate |
智能人机指令
若要在已支持的地图上使用智能人机,服务器管理员应该在控制台中输入以下指令(有些指令可能需要将sv_cheats设置为 1 才能生效):
指令 | 说明 |
---|---|
tf_bot_add
|
该指令将在双方队伍中随机添加一个或多个随机兵种的智能人机。游戏还会在默认名字集合中随机挑选一个名字分配给该人机。
|
tf_bot_difficulty
|
定义所要加入游戏的人机的基技术等级。
|
tf_bot_fire_weapon_allowed
|
指定人机是否应该进行攻击。如果选择禁用,人机仍然可以使用某些不具备破坏性的武器,如医疗枪。但存在一个例外,即医生人机仍然会使用注射枪开火。此外,爆破手人机仍然可以引爆尚存的黏弹,但不会再放置新的黏弹。
|
tf_bot_force_class
|
如果设置为一个兵种名称,则所有人机都将作为该兵种重新生成。
|
tf_bot_force_jump
|
如果启用,则强制人机反复进行跳跃。
|
tf_bot_join_after_player
|
如果参数不为零,则人机将会在玩家加入游戏后才会跟随加入。该指令只适用于分配生成的人机。
|
tf_bot_keep_class_after_death
|
如果参数为零,则人机将在每次重生时都会重新选择兵种。
|
tf_bot_kick
|
该指令将会踢出单个或所有的智能人机。
|
tf_bot_kill
|
该指令将会杀死单个或所有的智能人机。
|
tf_bot_melee_only
|
指定人机是否应该只能使用近战武器。
|
tf_bot_prefix_name_with_difficulty
|
如果参数不为零,则会在人机名字前面附加上该人机的技术等级的前缀。
|
tf_bot_quota
|
指定游戏中 TFBot 的总数。该指令只会在tf_bot_quota_mode的参数为「fill 」或「match 」时生效。
|
tf_bot_quota_mode
|
指定人机的分配类型。
|
tf_bot_taunt_victim_chance
|
指定人机在杀死人类玩家后发起嘲讽的频率。
|
tf_bot_warp_team_to_me
|
将与你同队的人机传送到你的位置。需要sv_cheats 1 前置。
|
智能人机现况
智能人机现在已经全面发布[需要来源链接]。目前,在经过无帽更新后,所有的兵种的智能人机都已经能正常运作,包括曾经有漏洞的间谍人机。智能人机只能适用于大部分官方山丘之王地图、部分推车地图、攻防型地图Dustbowl和Gorge、夺旗地图,以及 曼恩断头庄(Mann Manor)(在后两种地图中,智能人机只能通过在控制台输入tf_bot_add指令来添加)。玩家通过一些操作在不支持的地图上也可以使用智能人机;但这些人机并不会模仿人类玩家的游戏行为。
人机无法在任何推车竞赛地图上正常运作,因为它们要么跳不过Hightower上的栏杆,要么被困在出生点中的随机角落里;而且人机还会在任意一个推车地图上开舞会(该情况在未来可能会改变)[需要来源链接]。
智能人机的行为
- 人机目前只能使用基础的装备配置(尽管可以通过自定义模组/插件来让人机获得非默认武器)。
- 简单难度的人机会很少会使用主武器以外的武器。而更高难度的人机会在主武器弹药耗尽后立即切换并使用它们的副武器,或者在距离不够的情况下用来补枪。
- 人机目前还无法使用特殊的跳跃操作(如火箭跳)或者搬运建筑。
- 人机在杀死玩家后,有几率立刻进行嘲讽,而且就算暴露在敌人火力下也会照做不误。而正在携带着情报的人机则不会出现这种行为。曼恩 vs. 机器模式里的机器人也存在有这类行为。
- 间谍人机(和玩家)在伪装状态时会被其它人机完全忽略。然而,在“触碰”到任何敌方人机、瘫痪建筑物、开火或隐形时,所有目击到这些情景的人机会将间谍人机(或玩家)暴露为间谍,并且不会忘记其样貌,除非间谍在暗地里更换了伪装形象、该目击且暴露出间谍的人机死亡,或者是间谍使用死亡之铃进行假死。
- 在非简单难度的游戏中,火焰兵人机会十分频繁地使用压缩气爆来反弹敌方的飞行物。
- 医生人机的治疗目标是存在有优先级的,在大部分时候,比起治疗狙击手(以及优先级更低的工程师),它们会选择优先治疗其它的兵种,就算使用了“医生!”语音命令指令也是如此。
- 医生人机更倾向于治疗机枪手、士兵、爆破手和火焰兵这类兵种,如果人类玩家也在游玩这类兵种,则医生会持续跟随治疗玩家。反之,如果人类玩家游玩上述以外的兵种,则医生会很少给玩家持续的治疗。
- 当医生人机受到伤害时,它会立刻部署 ÜberCharge(如果有的话)。曼恩 vs. 机器模式里的 Über 医生也有存在有这类行为。
- 除非首先受到了攻击,否则人机在准备阶段期间是不会攻击的(爆破手人机布置黏性炸弹除外)。
- 工程师人机不会升级自己的传送装置(甚至不会移除电子工兵),有时候在还未交火的状态下设置还不会修复自己的步哨枪。
- 工程师人机永远不会修复或升级友方工程师人机的建筑,除非该建筑挡住了该工程师人机的目标。
- 除了工程师、间谍和狙击手人机以外,其他的人机在攻防型或推车地图的准备阶段中会停留在出生点中不动。
- 当间谍人机被另一个人机(或玩家)发现时,它将不会再尝试背刺目标,而是转为使用左轮手枪并边开枪边撤退。
- 一旦爆破手人机获知了步哨枪的位置(一般是被这一步哨枪杀死后),它们会站在步哨枪的射程以外使用榴弹精确地瞄准并计算出合适的发射点,然后让榴弹准确地落在步哨枪的位置。不过,墙壁和天花板有时候可能会挡住榴弹的飞行路线。
- 狙击手人机在搜索范围内没有找到敌方目标时,则会使用“不行”这一语音命令。
- 友方的医生人机会治疗已伪装的敌方间谍。
漏洞
- 人机有时候可能会试图穿过墙壁等无法穿过的物体。
- 每当玩家/人机在隐身/解除隐身或伪装/解除伪装时,即使是背对着间谍的人机都会“目击”到身后的目标并转身攻击。但其原因并不是由玩家发出的任何声音(脚步声、各种武器的噪音等)所造成的。
- 尽管情况很少见,人机在使用工程师的传送装置时可能会站在传送装置的另一端上,并被卡住(不会自行移动)。
- 当人机使用语音命令(例如“间谍!”和“前进!”),文本栏里并不会显示这些命令的文字。
- 正在治疗玩家的医生人机不会躲避敌人的火力攻击或寻找医疗包,就算它们的生命值非常的低。
- 人机可以在嘲讽状态下移动,从而免疫了欢乐拳套的攻击。
- 医生人机在短时间内受到攻击时经常会使用骨锯而非注射枪来对付非近战范围内的敌人,甚至在极少数情况下会切换出它们的医疗枪。
- 医生人机在使用注射枪时并不会抬高瞄点来补偿针头的下坠。其原因可能可能是注射枪在智能人机的代码中没有被准确识别为非即时命中武器。
- 无论在什么游戏难度下,间谍人机都能够看到并跟踪已经隐身的间谍(智能人机或玩家)。
- 不论间谍的所伪装的团队是敌是友(仅限玩家,因为人机无法伪装成队友),只要这名间谍撞到了敌人,该敌人仍然会指认出他是间谍。
- 人机会遵守自动平衡规则。如果要在特定的团队中生成人机,那么你必须将
mp_teams_unbalance_limit
的参数设置为 0。 - 工程师人机可能会无视它们的建筑,直到建筑被摧毁。
- 机枪手人机有时会在弹药耗尽的情况下仍然试着用转轮机枪开火(尽管在低于高级的人机难度下,这种情况似乎会大量发生)。
- 当附近没有敌人时,败方的医生人机偶尔会在羞辱期间自杀。而玩家自身就算使用指令也没法实现这一行为。
- 将配置菜单的预览设置为蓝队时会导致红队人机出现在蓝队中。
- 目前,人机无法在以下类型的游戏模式或地图上运行,即使该地图具备生成的导航网格(但间谍和狙击手人机可能会有效)。
- 拿出近战武器的人机有时候不会切换回其他的武器,即使它们获取的弹药也还是一样。
- 要修复这种情况可以直接杀死它们或者随缘。
- 在丛林炼狱更新之后,用特定参数(例如
tf_bot_add 5 pyro blue normal
)生成的人机会直接死在重生室里。这种情况可以通过指令tf_bot_reevaluate_class_in_spawnroom 0
来阻止,并且需要将sv_cheats
的参数设置为 1。
智能人机的名字
智能人机通过编程后都拥有不同的名字,其中的许多名字都与《军团要塞2》、Valve 的其他作品,以及计算机编程有各种关联。还有许多名字是应Steam 论坛上所提出的请求而被采纳的。
未使用的人机名称
在泄露的 TF2 源代码版本中发现了以下的人机名称,其中包含由于未知原因而从未被使用的名称。
- John Spartan
- Leeloo Dallas Multipass
- Sho'nuff
- Bruce Leroy
- CAN YOUUUUUUUUU DIG IT?!?!?!?!
- Big Gulp, Huh?
- Stupid Hot Dog
- I'm your huckleberry
- The Crocketeer
玩家也可以给智能人机输入自定义的名字,例如,tf_bot_add heavyweapons blue "Blu Hoovy";结果为在蓝队中添加了一个名为“Blu Hoovy”的蓝队机枪手。
木偶人机
木偶人机没有AI程序,所以不会自行移动或操作。不过这类人机可以当作牵线木偶一样进行使用:玩家可以通过指令来操控它们的行为,比如例如跟随玩家并使用武器开火。木偶人机主要被用来参与测试,如果相应的指令操作恰当,也可利用它们创造出惊人的视觉效果。若要生成木偶人机,则必须将sv_cheats
的参数设置为 1。
木偶人机指令
下列指令并非全部有效;也可能省略了一些有效的指令。
这些指令有可能对智能人机生效,也可能无效。
注:只输入指令的主体部分而不输入参数部分并不会使指令生效,并将显示指令的当前设置和一段简短说明。
指令 | 说明 |
---|---|
bot
|
使用该指令将在特定团队中创建一个特定兵种和特定名字的人机。如果省略了团队或名字,则这些选项将会随机选择。
|
bot_changeclass
|
强制所有人机更换为指定的兵种类型。
|
bot_changeteams
|
让所有人机强制更换队伍。如果有一个人机在红队,那么执行指令后它将会被更换到蓝队,反之亦然。 |
bot_command
|
代表特定的人机发送特定的指令。
|
bot_dontmove
|
允许或禁止人机进行移动。当参数设置为 1 时,人机无法移动,但它们仍然可以转身和跳跃。注意配合指令bot_mimic 一起使用,可以将人机移动到特定区域并让它们停留在原地。
|
bot_forceattack
|
该指令将强制所有的人机以它们当前使用的任意武器自动进行攻击。如果bot_forceattack2 的参数设置为 0,那么人机将执行主要攻击(primary_fire);如果参数为 1,那么人机将执行辅助攻击(secondary_fire)。
请注意,如果
|
bot_forceattack2
|
当bot_forceattack 参数设置为 1 时,所有人机都将以它们当前使用的任意武器执行辅助攻击。
|
bot_forceattack_down
|
指定人机的攻击方式,共有「点射」和「连射」这两种方式。如果参数设置为 0,人机就会表现得像是连续点击攻击键一样(适用于黏性炸弹发射器)。如果设置为 1,那么人机会表现得像是按住攻击键一样(适用于转轮机枪)。
|
bot_forcefireweapon
|
强制所有拥有指定武器的人机切换到此武器并进行攻击。
如果有人机没有此种武器,则不会对其有任何影响(除非它正在使用其他武器进行攻击,在这种情况下它将会停止攻击)。
|
bot_jump
|
强制所有人机反复进行跳跃。
|
bot_crouch
|
强制所有人机持续蹲伏。
|
bot_kick
|
按其名字来移除某一个人机,或者移除整一队人机,又或者移除所有的人机。
|
bot_kill
|
击杀指定的人机。
|
bot_mirror
|
指定的人机将会镜像了玩家的装备配置(兵种、饰品和武器)。该指令存在有部分漏洞;例如,如果一个爆破手玩家装备了靴子和任意盾牌,镜像人机将仍会持有榴弹发射器和黏性炸弹发射器,尽管其模型上已经显示有靴子和盾牌。镜像人机死亡后将不会保留之前的配置,必须要再次使用bot_mirror 才能恢复镜像。
|
bot_mimic
|
人机将会通过 index 来执行玩家的用户命令行,即模仿玩家的行为。
人机将会执行玩家发出的所有按键行为,包括模仿玩家的移动、转身、跳跃、攻击等。但人机不会模仿玩家的呼叫医生、切换武器和嘲讽的行为。 请注意,该指令的效果将会覆盖指令
|
bot_mimic_inverse
|
指定人机与玩家反向移动;玩家向左移动时,人机将会向右移动,玩家向前移动则人机向后移动,以此类推。
人机的视角方向则不受其影响。
|
bot_mimic_yaw_offset
|
指定人机的朝向角度。
人机将会朝向一个指定的方向,其方向根据玩家的位置而定。默认设置为 180,此时所有的人机都会面朝着玩家。而将其设置 0 时,所有人机都会面朝玩家所朝向的方向。
|
bot_randomnames
|
给予人机的随机的名字。
|
bot_refill
|
为所有的人机补满弹药(包括工程师的金属)和生命值。
|
bot_saveme
|
让所有人机呼叫医生,相当于向所有人机发出了指令bot_command <name> "voicemenu 0 0" 。
|
bot_selectweaponslot
|
强制一个人机切换到指定的武器栏位。若要指定单独某个人机切换武器,请改用指令cc_bot_selectweapon 。
|
bot_teleport
|
将一个指定的人机传送到指定的坐标上。
在控制台中输入
|
bot_whack
|
将玩家造成的致命伤害给予指定的人机。
该指令基本是以当前选择的武器来秒杀人机的,可能是在开发过程中进行测试所用的。值得注意的是,只有当
|
cc_bot_selectweapon
|
强制人机切换到指定的武器栏位。
|
bot_hurt
|
对人机造成指定的伤害,可面向团队或全体执行。
|
注释
- MvM人机也可以使用
nb_
进行控制(比如使用nb_select
和nb_warp_selected_here
来把人机传送到特定的位置)。但这一功能不适用于TF人机。