DungeonSettlers.wiki

怪物检测与仇恨

Steam

How does a monster notice your settlers, and what can you do about it? This page is read straight from the game's tables (DS_B.0.4.29) and the code dump; each number names the constant it comes from, and anything the data cannot confirm is flagged as such. Try the interactive 检测范围计算器 来填入一只具体怪物。

检测模型 实际发生的事

检测是 基于视野且基于网格的。每个单位 - 你的开拓者和每个怪物一样 - 都带有一个 视野范围 用于定义单位当前能看到的一组地面格子的属性,墙壁会阻挡视线。当怪物可见的格子中包含你的单位时,它开始注意到你(察觉中状态),然后决定发起攻击。代码中没有单独的听觉或噪音感知。

怪物会经历三种战斗状态 (来自转储的 CombatState 枚举,每次单位移动时由 MoveApplier.RefreshUnitCombatState):

  1. 未察觉 - 闲置或巡逻;它还没看到你。
  2. 察觉中 - 你的一个单位进入了它的视野。
  3. 战斗中 - 它锁定目标并开始交战。

单位发现敌人后会进入 察觉中 并携带 惊讶;该效果消退后,它会进入 战斗中。如果敌人在其仍处于惊讶状态时离开视野,它会退回到 未察觉 而无需战斗。被击中会使单位立即进入战斗。

数据表还定义了察觉累积(每游戏内分钟 1,进入战斗需要 5),但此版本的游戏代码从不读取这些数值。

自定义 AI 建立在 Behavior Designer 树上,其距离/视野检查(CheckEnemyDistance, CheckCombatTargetInRange)读取的是相同的网格视野数据,而非三维视锥射线检测。

视野范围 发现半径

视野范围是核心数值。游戏自己的描述:"在单位的视野范围内,可以查看周围区域和发现敌人。" 它身兼两职 - 为己方驱散战争迷雾,也是怪物用来发现你的半径。它以 格 计量,并按视线追踪,因此你和怪物之间的墙会挡住它(VisionDataHandler.GetVisiblePositions).

数值是下列表中为每个单位填写的 UnitTable。大多数单位能看到 8 格;眼球能看到很长的 16,而无尽深渊格洛斯幼崽近视,视野为 4。玩家方单位默认为 7 (StatusValueTable)。成长表自身的基础值 5 (GAMESYSTEM_Unit_Growth_..._VisionRange)从未被游戏代码读取。

仇恨与威胁 交战,以及谁会被打到

数据表中有两个仇恨常数。游戏代码都不读取它们:

GameSystemTable 的察觉、仇恨范围、仇恨修正、格挡减免和暴击伤害常量,在此版本的游戏代码中未被读取。

  • 仇恨范围:数据表显示 8 格。
  • 仇恨修正:数据表显示近战 x1.3,远程 x1。

游戏代码通过完整键字符串(SystemVar)读取 GameSystemTable 的数值。所列键在转储中都没有字符串字面量或 SystemVar 属性,因此修改它们在游戏中不会产生任何变化。

没有牵引计时器,也不会走回出生点。战斗中的怪物会返回 未察觉,并在你的任何单位都不在其房间附近、且没有敌人位于其战斗区域内时,丢失目标。

昼与夜 你的视野在夜间缩小

地下城按昼夜时钟运行。白天是 06:00 到 20:00 (GAMESYSTEM_Campaign_DayTimes);该时段之外就是夜晚。

夜间,游戏会给你自己的单位与友军 夜晚,这会使视野范围减少 3 格。怪物永远不会获得该效果:标准的 8 格怪物依然能看到 8 格的夜间距离,而你的拓荒者看得更少。夜视效果会为携带者增加 +3 视野范围。

数据表还包含一个昼夜视野常量(GAMESYSTEM_Campaign_DayNightVisionDiffrence = 3),但本版本的游戏代码从不读取它;惩罚来自"夜晚"效果。

潜行 已描述,未接入

潜行 reads like the one hard counter to detection. The in-game text: "保持未被发现且无法成为目标。如果你对敌人造成伤害,该效果会立即结束。"

潜行药水会给饮用者一个限时潜行效果,但游戏代码中没有任何读取该效果的部分,因此在此版本中,它不会让你隐身、不会阻止被选为目标,也不会在你造成伤害时被移除。 The effect adjusts no stat and no game code checks it, so the hiding and the break-on-damage in its description are not wired up in this build. 数据中有定义,但目前没有任何可获得的物品、特质或技能授予它。

感知误区 名称与效果

很自然会以为 感知 属性会拉远单位能看多远 - 名称和描述("磨砺感官")都在暗示这一点。数据并不支持。

本版本中感知的 StatusValueTable 视野范围系数是 0,且该属性自身的提示只列出物理攻击、魔法攻击、暴击几率与烹饪。成长常量(...MajorStatToFinalStatFactor_VisionRange = 0.02)会以每点 0.02 将感知与视距挂钩,但游戏代码从不读取它:视野范围是固定基础值加上效果与装备。因此 感知强化 / 感知削弱 环境条件(±30% 感知)与 +3 感知灵药 战斗 属于增益,而非侦测修正。

什么会提高或降低检测 摘要

以上内容收进一张表。"效果"是从怪物的角度看 - 它有多容易发现你。

因素效果数据所示
怪物的视野范围不定每个单位都有自己的视野半径 (UnitTable.VisionRange):从 4 (无尽深渊格洛斯幼崽) up to 16 (眼球),大多数为 8。半径越大 = 它从更远处发现你。
视线(墙)降低视线逐格沿直线追踪,墙体图块会阻挡它(VisionDataHandler.GetVisiblePositions);普通的不可通行图块则不会。在拐角处打破视线即可隐藏你,即使是近距离也是如此。
夜晚仅限你的一方 -3从 20:00 到 06:00,你自己的单位和盟友会携带 夜晚: -3 视野范围。怪物永远不会获得它,因此夜晚不会缩短怪物的侦测距离。
夜视 (affecter)恢复 +3增加 +3 视野范围 (夜视), exactly cancelling the night penalty. 来源:夜勤人。
潜行 (affecter)无效果潜行: "保持未被发现且无法成为目标。如果你对敌人造成伤害,该效果会立即结束。" 潜行药水会给饮用者一个限时潜行效果,但游戏代码中没有任何读取该效果的部分,因此在此版本中,它不会让你隐身、不会阻止被选为目标,也不会在你造成伤害时被移除。 数据中有定义,但目前没有任何可获得的物品、特质或技能授予它。
仇恨范围未使用数据表定义了 8 格的仇恨范围,但此版本的游戏代码从不读取它。
攻击类型(近战 vs 远程)未使用数据表定义了近战 x1.3 和远程 x1 的仇恨系数,但此版本的游戏代码从不读取它,因此近战不会通过它获得额外仇恨。
感知 (Fortify / Weaken / Elixir)无效果尽管名字如此,感知属性实际影响的是物理与魔法攻击、暴击几率和烹饪,游戏将视野范围计算为固定基础值加上效果与装备,不含任何感知项。因此 感知强化 / 感知削弱 (±30%)与 +3 感知灵药不会 不 改变本版本中的侦测。

应对方式 实战要点

  • 拐角胜过距离。 视线是唯一始终生效的硬限制。墙在任何距离都能挡住你;开阔地不行,哪怕很远。
  • 去侦察极端单位。 眼球 (16 格视野) 会从房间另一头发现你,而你可以摸到无尽深渊格洛斯幼崽 (4 格视野) 旁边几格。大多数是 8。
  • 夜晚有利于怪物。 夜间你的单位视距减少 3 格,而怪物看得和白天一样远,如有夜视,请携带。
  • 不要指望潜行。 本版本中没有任何游戏代码检查"潜行"效果,因此它无法打断接触。
相关: 战斗公式 · 难度 · 天赋与属性 · 游戏常量 (原始表数值)。