地图标记

地图标记

用不同颜色在地图上标记和绘制。支持单人游戏和多人游戏(包括混合房间)。

杂项

功能

  • 使用不同颜色标记地图节点。
  • 使用不同颜色在地图上绘制。
  • 自动使用预设颜色标记节点(可切换)。
  • 隐藏节点上的绘制内容(可切换)。
  • 访问后取消标记地图节点(可切换)。
  • 支持单人游戏。
  • 支持多人游戏,并对未安装 MapMarker 的玩家提供回退功能。

多人游戏支持包含同时拥有和未拥有此模组的玩家的游戏大厅。据我所知,此模组是首个能在混合大厅中发送自定义数据包的模组。如果你对此感兴趣,请查看极客专区部分!

如有任何想法、评论或疑问,请随时提出 :) 本模组深受 mapmarks 的启发。

使用方法

  • (拖拽)鼠标右键点击 ----> 标记/重新着色
  • (拖拽)鼠标双击右键 ----> 取消标记
  • 左键点击颜色面板 ----> 选择颜色
  • 按下 'c' 键 ----> 循环切换颜色

颜色面板位于地图图例中“Legend”字样下方。 各种设置的开关位于 ModConfig 设置中。

安装方法

模组设置的可选依赖项:ModConfig

下载 MapMarker.zip 解压内容并将 MapMarker 文件夹移动至 - 'C:\Program Files (x86)\Steam\steamapps\common\Slay the Spire 2\mods' [如果你没有 'mods' 文件夹,请创建一个]

你的目录现在应该看起来像这样: - Slay the Spire 2 | - mods | | - MapMarker | | | - MapMarker.dll | | | - MapMarker.json | | - ... | - ...

待办事项

  • 如果混合大厅支持过于不可靠或大多数用户用不到,则移除该支持。
  • 如果大多数用户用不到彩色绘制功能,则移除或重新设计该功能。

极客专区

STS2 的多人游戏序列化通过枚举 49 种硬编码的 INetMessageSubtypes 来构建类型 ID 表,然后附加通过 ReflectionHelper.GetSubtypesInMods<INetMessage>() 发现的、由模组添加的任何 INetMessage 类。双方玩家必须拥有完全相同的表,否则反序列化将失败,因此在只有部分玩家安装该模组的大厅中注册自定义消息类型会导致游戏崩溃或不同步。为了解决这个问题,我们在现有的 MapDrawingMessage 中使用了隐写术。我们将标记数据打包到 NetMapDrawingEvent 结构的量化 X/Y 坐标字段中,并以屏幕外位置的 BeginLine 作为前缀。在接收端,Harmony 对 NMapDrawings.HandleDrawingMessage 的一个前缀检查第一个事件是否匹配该屏幕外位置;如果匹配,则解码有效载荷,将其路由到 RemoteMarkCoordinator,并返回 false 以避免创建 Line2D。未安装该模组的原版客户端只会渲染一个屏幕外的不可见线段。这为我们提供了一个可靠的模组间数据通道,用于存在性握手、标记绘制/擦除增量等,而无需修改消息注册表。

我刻意没有将 MapDrawingMessage 的字节打包抽象成一个可重用的库。目前,MapMarker 的网络占用非常小;它只在你标记/取消标记节点、更改颜色或打开地图时发送几个同步帧。一个典型的章节可能总共生成约 50 个数据包。但如果多个模组都产生多一个数量级的数据包,可能会引发问题,特别是对于原版客户端来说,他们无法选择从模组接收什么。希望看到 MegaCrit 为模组间通信添加官方支持。