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.23) 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 点 (GAMESYSTEM_Combat_Basic_AwarenessOnMin,仅敌人)并在达到 5 (GAMESYSTEM_Combat_Basic_AwarenessToCombat)- 约 5 个游戏内分钟 的不间断视野,1x 速度下实际时间仅约 4 秒。短暂穿过怪物视野,往往能在它投入之前离开;攻击它则当然会立刻进入战斗。

自定义 AI 建立在 Behavior Designer 树上,其距离/视野检查(CheckEnemyDistance, CheckCombatTargetInRange)读取同一套网格视野和仇恨数据 - 不是三维视野锥射线检测。打断视线时察觉是否衰减,数据里没有写明(推断会重置或下降,未经确认)。

视野范围 发现半径

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

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

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

一旦被发现,两套独立常量支配这场战斗:

  • 仇恨范围 = 8 格 (GAMESYSTEM_Combat_Basic_AggroRange)- 怪物在此威胁半径内交战。因为它等于标准的 8 格视野,大多数怪物会在同一距离发现你并投入。
  • 仇恨修正 = [1.3, 1] (GAMESYSTEM_Combat_Basic_AggroCorrection)- 按攻击类型施加在单位产生的仇恨/威胁上的倍率: 近战 x1.3, 远程 x1。近战攻击者比远程多拉约 30% 仇恨,因此前排会自然把怪物的注意力从你的施法者身上拉开。这影响的是 目标选择,而不是你是否先被发现。

转储确认了常量和近战/远程划分(开发者注释:[0] melee, [1] ranged),但方法体被剥掉了,因此倍率如何运算是推断的,不是逐行读出来的。代码里没有发现拴绳或返回刷新点计时器 - 怪物达到 未察觉 后就直接丢掉目标。

昼与夜 天黑后视野缩小

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

夜间视野降低 3 格 (GAMESYSTEM_Campaign_DayNightVisionDiffrence)。标准的 8 格怪物实际只能看到 5 夜间的视野 - 但同样的惩罚也会裁掉你自己单位的视野,所以夜袭是双刃的。夜视效果施加者会增加 +3 视野范围,正好抵消携带者的夜间惩罚。

夜间惩罚是作用于怪物、玩家还是双方,元数据转储并不能完全确定 - 每个单位的 Status_VisionRange 类确实带有一个 IsPlayer 标志,这暗示两侧可以区别对待,但那只是推断,不是已确认的规则。

潜行 干净的脱身口

潜行 是对检测的唯一硬克制。游戏内文本:"保持未被发现且无法成为目标。如果你对敌人造成伤害,该效果会立即结束。"

It is a code flag (it adjusts no stat), so it is all-or-nothing: while active you cannot be seen or targeted, regardless of Vision Range or distance. The catch is spelled out in the description - it ends the instant you deal damage, so it is a repositioning and scouting tool, not a way to fight unseen. 数据中有定义,但目前没有任何可获得的物品、特质或技能授予它。

感知误区 名称与效果

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

本版本中感知的 StatusValueTable 视野范围系数是 0,该属性自身的提示只列出物理攻击力、魔法攻击力、暴击几率和烹饪。一个休眠的成长常数 (...MajorStatToFinalStatFactor_VisionRange = 0.02) 确实把感知与视野按每点 0.02 绑在一起,但实装系数为 0,看起来未生效。因此 感知强化 / 感知削弱 环境条件(±30% 感知)和 +3 感知灵药最好看成 战斗 增益,不是检测修正。把任何"感知会扩大视野"的说法当作未确认。

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

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

因素效果数据所示
怪物的视野范围不定每个单位都有自己的视野半径 (UnitTable.VisionRange):从 4 (无尽深渊格洛斯幼崽) up to 16 (眼球),大多数为 8。半径越大 = 它从更远处发现你。
视线(墙)降低视野按格逐一追踪,并被墙和障碍挡住 (VisionDataHandler.IsPathVisible)。在拐角处打断视线,即使贴脸也能藏身。
夜晚双方 -320:0006:00 视野下降 3 格 (DayNightVisionDiffrence)。这会缩短怪物的触及距离,但也会裁掉你自己侦察单位的视野。
夜视 (affecter)恢复 +3增加 +3 视野范围 (夜视), exactly cancelling the night penalty. 来源:夜勤人
潜行 (affecter)隐藏潜行: "保持未被发现且无法成为目标。如果你对敌人造成伤害,该效果会立即结束。" A hard on/off flag. 数据中有定义,但目前没有任何可获得的物品、特质或技能授予它。
仇恨范围8 格怪物在此威胁半径内交战 (GAMESYSTEM_Combat_Basic_AggroRange = 8)。它等于标准的 8 格视野,因此对大多数怪物来说,发现和交战发生在同一距离。
攻击类型(近战 vs 远程)目标选择仇恨/威胁按打法缩放:近战 x1.3,远程 x1 (AggroCorrection)。近战多拉 30% 仇恨,因此它决定怪物盯上你哪名单位 - 这是坦克杠杆,不是初次发现。
感知 (Fortify / Weaken / Elixir)不明尽管名称如此,感知属性管的是物理攻击力与魔法攻击力、暴击几率和烹饪 - 其实装 StatusValueTable 视野范围系数是 0 且游戏内提示没有列出视野效果。因此 感知强化 / 感知削弱 (±30%) 和 +3 感知灵药 是本版本已确认的检测修正。

应对方式 实战要点

  • 拐角胜过距离。 视线是唯一始终生效的硬限制。墙在任何距离都能挡住你;开阔地不行,哪怕很远。
  • 去侦察极端单位。 眼球 (16 格视野) 会从房间另一头发现你,而你可以摸到无尽深渊格洛斯幼崽 (4 格视野) 旁边几格。大多数是 8。
  • 夜袭是双刃的。 夜间 -3 视野让你可以靠得更近,但己方单位同样盲目 - 若有夜视就带上。
  • 让近战拉住仇恨。 近战比远程多产生约 30% 威胁,因此一个前排肉体会把怪物从更脆的远程和施法者身上拉开。
  • 潜行用来重置,不是用来刷。 一瓶潜行药水会干净地断开接触,但你打出的第一下就会让它结束。
相关: 战斗公式 · 难度 · 天赋与属性 · 游戏常量 (原始表数值)。