MvvUINotificationFramework

MvvUINotificationFramework

MvvUINotificationFramework (MvvUINF) 为《S.T.A.L.K.E.R. 2》蓝图模组提供的屏幕通知——一个带样式的共享提示队列,外加基于键的本地化,让每个模组都能显示外观一致并使用玩家语言的消息。

MvvUINotificationFramework (MvvUINF)

为 S.T.A.L.K.E.R. 2 Blueprint 模组提供的屏幕通知功能——一个带样式的共享 toast 队列, 以及基于键的本地化,让每个模组都能显示外观一致、并使用玩家语言的消息。

面向玩家 下载此模组。它本身不执行任何操作——其他模组使用它来显示通知。 需要它的模组会将其列为依赖项。


面向模组作者——3 个节点

  1. 将依赖项添加到你的模组的 .uplugin 中: "Plugins": [ { "Name": "MvvUINotificationFramework", "Enabled": true } ] (打包时必须将 Modder Kit 解压到 <ZoneKit>\Stalker2\Mods\。请勿将其捆绑到你的模组中。)
  2. 在任何 Blueprint 中(ModWorldSubsystem、Actor、Widget): Get All Actors with Interface (BPI_MVV_Notifications) → Get (0) → Show Notification (Message)
  3. 就是这样。如果框架缺失,数组为空,Message 调用会静默无操作——不会崩溃。

API(BPI_MVV_Notifications,v1 - 已冻结)

  • ShowNotification(Title, Body, Icon, Style, Duration) 显示一个 toast。Duration 为 0 = 使用样式默认值。
  • ShowNotificationSimple(Body) 单行,Info 样式。
  • RegisterStrings(ModID, Table) → Loaded 注册你的本地化 DataTable(见下文)。
  • ShowNotificationKey(ModID, TitleKey, BodyKey, Args[], Icon, Style, Duration) 通过本地化键显示 toast。
  • GetText(ModID, Key) → Text 当前游戏语言的翻译文本。
  • GetTextFmt(ModID, Key, Args[]) → Text 同上,但将 {0} {1} … 替换为 Args。
  • GetVersion() → int v1.x 返回 1;框架缺失时返回 0。

样式(E_MVV_Style):Info、ItemReceived、ItemLost、QuestUpdate、Achievement、Warning、Custom。 样式 = 强调色 + 默认图标 + 声音 + 默认持续时间。你自己的 Icon(soft Texture2D)会覆盖默认值。

一个 CSV 中的本地化 创建一个 DataTable,任何行结构均可,只要其 String 列以语言代码命名: Name,en,uk,pl,ru toast.title,New find,Нова знахідка,Nowe znalezisko,Новая находка toast.body,Found {0} of {1},Знайдено {0} з {1},Znaleziono {0} z {1},Найдено {0} из {1} 行名称 = 键。每个关卡调用一次 RegisterStrings("MyMod", DT_MyStrings)(OnWorldBeginPlay), 然后在任何地方使用 GetText("MyMod","toast.title")。查找顺序:当前语言 → 基础语言(pt-BR→pt) → en → "[MyMod.toast.title]"。 无需共享结构——框架按名称读取列。

注意事项

  • 在关卡开始时轮询框架 actor(它可能在你的 actor 之后生成):参见示例模组。
  • 2 秒内的重复 toast 会合并为一个,并带有 ×N 计数器。最多可见 3 个;其余排队。
  • Toast 不参与命中测试,也永远不会暂停游戏。
  • 包含所有调用注释的示例模组:MvvUINF_Example(Workshop / Optional files)。

下一步?

  • 增加为通知制作自定义设计(位置样式等)的功能
  • 添加声音(目前逻辑已就绪,但说实话我没时间测试)

许可 可自由依赖并从你的模组中引用。请勿将此框架重新打包或捆绑到另一个模组中 (两个同名插件副本会同时损坏)。必须注明出处。