Skip to content

最大递归深度配置 (MAX_RECURSION_DEPTH)

max_recursion_depth 是 Maingraph for MC 的一个核心安全配置项,用于防止蓝图逻辑由于死循环或过度嵌套执行而导致的服务器崩溃(StackOverflowError)。

配置信息

  • 配置文件: config/mgmc-common.toml
  • 配置键: max_recursion_depth
  • 默认值: 10
  • 数值类型: 整数 (Integer)

为什么需要这个配置?

在蓝图开发中,很容易无意间创建出“事件循环”。例如:

  1. 事件触发: 当生物受到伤害时 (on_entity_hurt)。
  2. 逻辑执行: 在该生物位置触发爆炸 (explosion)。
  3. 连锁反应: 爆炸再次对该生物造成伤害。
  4. 死循环: 伤害再次触发 on_entity_hurt

如果没有递归深度限制,这个循环会在一瞬间执行数千次,耗尽系统内存和线程栈空间,直接导致游戏崩溃。

工作原理

蓝图引擎会跟踪每个执行线程的递归深度:

  • 每当一个蓝图开始执行,计数器 +1。
  • 当蓝图执行完毕,计数器 -1。
  • 如果计数器达到 max_recursion_depth 设定的值,后续的递归执行将被立即拦截并停止。

如何调整

你可以根据服务器的性能和蓝图的复杂程度来调整此值:

  • 普通用户: 保持默认值 10 即可满足绝大多数逻辑需求。
  • 复杂逻辑: 如果你的蓝图有非常深的嵌套结构(例如深层递归算法),可以尝试将其调大(如 2050)。
  • 极高安全性: 如果你希望严格限制资源消耗,可以将其调小。

WARNING

设置过大的值会显著增加由于逻辑错误导致服务器卡顿或崩溃的风险。请谨慎调整。

相关限制

除了递归深度限制外,Maingraph for MC 还引入了 节点执行上限 配置。

  • 递归深度: 关注蓝图之间的“嵌套”或“连锁”层数。
  • 节点执行上限: 关注单个蓝图内部执行的节点总数,用于防止死循环。

基于 VitePress 构建